我想更好地理解iOS下OpenGL ES帧缓冲区、渲染缓冲区等的创建、分配和绑定。据我所知,EAGLContext和EAGLSharegroup类通常管理此类对象的分配和绑定。然而,苹果文档建议可以在不使用EAGLContext类的情况下进行GL屏幕外渲染,我对此很感兴趣。有没有人有任何指向代码示例的指针?
我还会对如何使用EAGLContext实现屏幕外渲染的示例感兴趣。
发布于 2012-06-23 09:13:44
在iOS上使用OpenGL ES呈现内容的唯一方法是通过EAGLContext。从OpenGL ES Programming Guide
在您的应用程序可以调用任何OpenGL ES函数之前,它必须初始化一个EAGLContext对象并将其设置为当前上下文。
我认为下面这几行可能会引起一些混淆:
EAGLContext类还提供了应用程序用于将OpenGL ES内容与核心动画集成的方法。如果没有这些方法,您的应用程序将仅限于处理屏幕外的图像。
这意味着,如果您希望将内容呈现到屏幕上,则需要使用一些仅由EAGLContext类提供的额外方法,例如-renderbufferStorage:fromDrawable:。即使你要在屏幕外绘制,你仍然需要一个EAGLContext来管理OpenGL ES命令,但是这些特定于EAGLContext的方法是在屏幕上绘制的。
关于第二个问题,如何设置屏幕外渲染将取决于此屏幕外渲染的配置(纹理支持的FBO、深度缓冲区等)。例如,下面的代码将设置一个没有深度缓冲区的简单FBO,并渲染到已设置的outputTexture纹理:
glActiveTexture(GL_TEXTURE1);
glGenFramebuffers(1, &filterFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, filterFramebuffer);
glBindTexture(GL_TEXTURE_2D, outputTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (int)currentFBOSize.width, (int)currentFBOSize.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, outputTexture, 0);对于代码示例,您可以看看我是如何在开源GPUImage框架(它只执行简单的图像渲染)或我的开源Molecules应用程序(它使用深度缓冲区执行更复杂的屏幕外渲染)中做到这一点的。
https://stackoverflow.com/questions/11162733
复制相似问题