我有一个内存“位图”,它只是一个包含像素数据的简单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 原文链接:https://www.f2er.com/iOS/335964.html