在ios上渲染的framebuffer对象

我有问题获得跨屏渲染工作在iOS上。 以下是设置帧缓冲区对象和相关缓冲区的代码。 这与苹果在开发者中心的代码基本相同。

glGenFramebuffers(1, &pick_id); glBindFramebuffer(GL_FRAMEBUFFER, pick_id); GLuint color_id, depth_id; glGenRenderbuffers(1, &color_id); glBindRenderbuffer(GL_RENDERBUFFER, color_id); glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, screen_width, screen_height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, color_id); glGenRenderbuffers(1, &depth_id); glBindRenderbuffer(GL_RENDERBUFFER, depth_id); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, screen_width, screen_height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_id); std::cout << pick_id << " " << color_id << " " << depth_id << std::endl; switch(glCheckFramebufferStatus(GL_FRAMEBUFFER)) { case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: std::cout << "framebuffer incomplete attachment" << std::endl; break; case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: std::cout << "framebuffer incomplete missing attachment" << std::endl; break; case GL_FRAMEBUFFER_UNSUPPORTED: std::cout << "framebuffer unsupported" << std::endl; break; case GL_FRAMEBUFFER_COMPLETE: std::cout << "framebuffer complete" << std::endl; break; } glClearColor(1.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glFinish(); GLubyte pix[] = {0, 0, 0}; glReadPixels(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, &pix); std::cout << (int)pix[0] << " " << (int)pix[1] << " " << (int)pix[2] << std::endl; 

当它运行时,打印出“framebuffer complete”,所以我假定framebuffer对象已经正确设置。 但我希望调用glReadPixels让我回到我设置的清晰的颜色(红色),而不是返回黑色。

有什么我在这里失踪? 我试图让屏幕上的渲染工作在我的应用程序中select对象。

我想你必须补充

glReadBuffer(GL_COLOR_ATTACHMENT0);

在glReadPixels之前。 但是,如果这不起作用,我就没有想法了。

这似乎是上面的代码是正确的。 唯一的问题是,在iOS上你需要使用GL_RGBA作为glreadpixels的参数,GL_RGB不起作用。