首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用EAGLContext的OpenGL ES示例

不使用EAGLContext的OpenGL ES示例
EN

Stack Overflow用户
提问于 2012-06-23 03:18:26
回答 1查看 1.8K关注 0票数 0

我想更好地理解iOS下OpenGL ES帧缓冲区、渲染缓冲区等的创建、分配和绑定。据我所知,EAGLContext和EAGLSharegroup类通常管理此类对象的分配和绑定。然而,苹果文档建议可以在不使用EAGLContext类的情况下进行GL屏幕外渲染,我对此很感兴趣。有没有人有任何指向代码示例的指针?

我还会对如何使用EAGLContext实现屏幕外渲染的示例感兴趣。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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纹理:

代码语言:javascript
复制
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应用程序(它使用深度缓冲区执行更复杂的屏幕外渲染)中做到这一点的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11162733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档