菜鸟教程小白 发表于 2022-12-12 21:12:16

iOS GLKit 并返回默认帧缓冲区


                                            <p><p>我正在运行 XCode 为 iOS 的 OpenGL 项目创建的样板 OpenGL 示例代码。这会设置一个简单的 ViewController 并使用 GLKit 来处理其余的工作。</p>

<p>应用程序的所有更新/绘制功能都在 C++ 中。它是跨平台的。</p>

<p>有很多帧缓冲区的创建正在进行。绘制阶段渲染到几个帧缓冲区,然后尝试将其设置回默认帧缓冲区。</p>

<pre><code>glBindFramebuffer(GL_FRAMEBUFFER, 0);
</code></pre>

<p>这会生成一个 GL_INVALID_ENUM。仅限 iOS。</p>

<p>我完全不知道为什么。该代码在除 iOS 以外的所有主要平台上运行良好。我想责怪 GLKit。有没有不使用 GLKit 的 iOS OpenGL 设置示例?</p>

<p>更新</p>

<p>下面的代码片段让我看到了 GLKit 使用的默认帧缓冲区。由于某种原因,它显示为“2”。果然,如果我在所有 glBindFrameBuffer 调用中使用“2”,它就可以工作。这非常令人沮丧。 </p>

<pre><code>;

GLint defaultFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &amp;defaultFBO);
LOGI(&#34;DEFAULT FBO: %d&#34;, defaultFBO);
</code></pre>

<p>究竟是什么原因导致 GLKit 不在 0 处生成其内部帧缓冲区?这是 OpenGL 的所有其他实现使用的语义,0 是默认的 FBO。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在 iOS 上没有默认的帧缓冲区。参见 <a href="http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/OpenGLESontheiPhone/OpenGLESontheiPhone.html#//apple_ref/doc/uid/TP40008793-CH101-SW8" rel="noreferrer noopener nofollow">Framebuffer Objects are the Only Rendering Target on iOS</a> .我不太了解 GLKit,但在 iOS 上要在屏幕上渲染某些内容,您需要创建帧缓冲区,并将其附加到渲染缓冲区,并通知核心动画层此渲染缓冲区将是要绘制的“屏幕”或“默认帧缓冲区”至。意思是 - 你将绘制到这个帧缓冲区的所有东西都会出现在屏幕上。参见 <a href="http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html#//apple_ref/doc/uid/TP40008793-CH103-SW5" rel="noreferrer noopener nofollow">Rendering to a Core Animation Layer</a> .</p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS GLKit 并返回默认帧缓冲区,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10761902/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10761902/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS GLKit 并返回默认帧缓冲区