Curretly,我在iPad应用程序中使用glReadPixels将OpenGL纹理的内容保存在帧缓冲区中,这非常慢。纹理的大小为1024x768,我计划在2048x1536支持Retina显示。检索到的数据保存在文件中。
从多个来源阅读后,使用CVOpenGLESTextureCache似乎是唯一更快的选择。但是,我找不到任何指南或文档作为一个很好的起点。
如何重写我的代码以便它使用CVOpenGLESTextureCache?代码的哪些部分需要重写?除非已有关于如何执行此操作的文档,否则不使用第三方库。
代码如下:
//Generate a framebuffer for drawing to the texture
glGenFramebuffers(1, &textureFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, textureFramebuffer);
//Create the texture itself
glGenTextures(1, &drawingTexture);
glBindTexture(GL_TEXTURE_2D, drawingTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F_EXT, pixelWidth, pixelHeight, 0, GL_RGBA32F_EXT, GL_UNSIGNED_BYTE, NULL);
//When drawing to or reading the texture, change the active buffer like that:
glBindFramebuffer(GL_FRAMEBUFFER, textureFramebuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId, 0);
//When the data of the texture needs to be retrieved, use glReadPixels:
GLubyte *buffer = (GLubyte *) malloc(pixelWidth * pixelHeight * 4);
glReadPixels(0, 0, pixelWidth, pixelHeight, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid *)buffer);