小编And*_*rew的帖子

写下来从iPhone上的屏幕外FBO阅读; 适用于模拟器但不适用于设备?

我试图在iPhone上进行一些图像处理,基于Apple的GLImageProcessing示例.

最后,我想要做的是将图像加载到纹理中,执行示例代码中的一个或多个操作(色调,饱和度,亮度等),然后将结果图像读回以供以后处理/保存.在大多数情况下,这永远不需要触摸屏幕,所以我认为FBO可能是要走的路.

首先,我拼凑了一个小例子,创建一个屏幕外FBO,绘制它,然后将数据作为图像读回.当它在模拟器中完美运行时我感到很兴奋,然后因为我意识到我在实际设备上只有一个黑屏而感到沮丧.

免责声明:我的OpenGL已经足够老了,我已经对OpenGL ES有了相当多的学习曲线,而且我从来都不是一个纹理向导.我知道该设备在帧缓冲访问方面具有与模拟器不同的特性(强制性的屏幕外FBO和设备上的交换,模拟器上的直接访问),但我无法找到我做错了什么,即使经过相当广泛的搜索.

有什么建议?

// set up the offscreen FBO sizes

int renderBufferWidth = 1280;
int renderBufferHeight = 720;

// now the FBO
GLuint  fbo = 0;
glGenFramebuffersOES(1, &fbo);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, fbo);

GLuint  renderBuffer = 0;
glGenRenderbuffersOES(1, &renderBuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderBuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES,
                         GL_RGBA8_OES,
                         renderBufferWidth,
                         renderBufferHeight);

glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES,
                             GL_COLOR_ATTACHMENT0_OES,
                             GL_RENDERBUFFER_OES,
                             renderBuffer);

GLenum status = glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES);
if (status != GL_FRAMEBUFFER_COMPLETE_OES) {
    NSLog(@"Problem with OpenGL framebuffer after specifying color render buffer: %x", status);
}

// throw in a test drawing  
glClearColor(0.5f, 0.5f, 0.5f, 1.0f); …
Run Code Online (Sandbox Code Playgroud)

iphone opengl-es framebuffer render-to-texture ios-simulator

10
推荐指数
1
解决办法
4319
查看次数