ios – 如何使用2D纹理将RGB位图呈现到GLKView中?

我有一个内存“位图”,它只是一个包含像素数据的简单RGB格式的字节*数组(因此字节数组的大小是3 *像素数).

我的应用程序只是一个具有GLKView实例的视图控制器.我已经执行了这样的代表:

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
    glClearColor(1.0f,0.0f,1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
}

并且如预期的那样设置GLKView的背景颜色.

我现在想做的是为glkView的这个实现添加代码:drawInRect:使我的“位图”被渲染到这个GLKView中.但我似乎找不到任何方式做这个简单的事情;我对OpenGL可以做的所有不同的事情感到不安,所有这些都比我在这里做的更复杂.

glReadPixels似乎是我在这里之后,因为它似乎提供了一个指向缓冲区数据的指针.

编辑:显然这只能通过使用纹理来实现.我试图用这个示例代码实现这一点(请注意,我的“位图”这里是每个样本4个字节,与格式参数匹配):

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {

    glClearColor(1.0f,1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    // raw data
    int width = 30;
    int height = 30;
    int pixelCount = width * height;
    int byteSize = pixelCount * 4;
    GLubyte *textureData = (GLubyte *)malloc(byteSize);

    for (int i = 0; i < byteSize; i++) {
        textureData[i] = 255; // white
    }

    glEnable(GL_TEXTURE_2D);

    GLuint textureID;
    glPixelStorei(GL_UNPACK_ALIGNMENT,1);
    glGenTextures(1,&textureID);
    glBindTexture(GL_TEXTURE_2D,textureID);

    glTexImage2D(GL_TEXTURE_2D,GL_RGBA,width,height,GL_UNSIGNED_BYTE,textureData);

    free(textureData);

}

…但它不工作glClear()调用按预期工作,并将整个背景设置为红色;但是如果我正确地了解纹理样本,下面的代码应该在角落里画一个30×30的白色方块,但是我得到的就是坚实的红色背景.

有人会发现我在这里做错了吗?

解决方法

对不起,推入OpenGL

以上是来客网为你收集整理的ios – 如何使用2D纹理将RGB位图呈现到GLKView中?全部内容,希望文章能够帮你解决ios – 如何使用2D纹理将RGB位图呈现到GLKView中?所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。