gpt4 book ai didi

ios - 不使用 EAGLContext 的 OpenGL ES 示例

转载 作者:行者123 更新时间:2023-11-28 22:54:13 25 4
gpt4 key购买 nike

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

我也对展示如何使用 EAGLContext 完成屏幕外渲染的示例感兴趣。

最佳答案

在 iOS 上使用 OpenGL ES 呈现内容的唯一方法,无论是屏幕外还是屏幕上,都是通过 EAGLContext 来实现的。来自OpenGL ES Programming Guide :

Before your application can call any OpenGL ES functions, it must initialize an EAGLContext object and set it as the current context.

我认为以下几行可能会引起一些混淆:

The EAGLContext class also provides methods your application uses to integrate OpenGL ES content with Core Animation. Without these methods, your application would be limited to working with offscreen images.

这意味着如果你想将内容渲染到屏幕上,你可以使用一些仅由 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应用程序(使用深度缓冲区进行更复杂的离屏渲染)。

关于ios - 不使用 EAGLContext 的 OpenGL ES 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com