Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从GLKView/GLKit获取默认帧缓冲区id_Ios_Ios5_Opengl Es_Opengl Es 2.0 - Fatal编程技术网

Ios 从GLKView/GLKit获取默认帧缓冲区id

Ios 从GLKView/GLKit获取默认帧缓冲区id,ios,ios5,opengl-es,opengl-es-2.0,Ios,Ios5,Opengl Es,Opengl Es 2.0,我在IOS OpenGL ES 2.0项目中使用GLkit/GLKView来管理应用程序的默认FBO/生命周期 在桌面OpenGL中,为了绑定默认FBO(前缓冲区),我可以调用glBindFrameBuffer(GL_FRAMEBUFFER,0),但在IOS应用程序中并非如此,因为您必须自己创建默认FBO,并且它将具有唯一的ID 问题是GLITK/GLKVIEW编码风格迫使我使用GLKVIEW的“BDUDFABLE”函数来激活默认的FBO,这使得我的跨平台渲染系统的设计有点难看(必须在我的C++

我在IOS OpenGL ES 2.0项目中使用GLkit/GLKView来管理应用程序的默认FBO/生命周期

在桌面OpenGL中,为了绑定默认FBO(前缓冲区),我可以调用glBindFrameBuffer(GL_FRAMEBUFFER,0),但在IOS应用程序中并非如此,因为您必须自己创建默认FBO,并且它将具有唯一的ID

问题是GLITK/GLKVIEW编码风格迫使我使用GLKVIEW的“BDUDFABLE”函数来激活默认的FBO,这使得我的跨平台渲染系统的设计有点难看(必须在我的C++引擎类中存储GLKVIEW指针作为空隙*,并且每次我想执行默认的FBO绑定时都要桥接它)

有没有办法获取GLKit/GLKView创建的默认FBO ID,以便我可以在代码中的任何位置存储并使用它绑定默认帧缓冲区

在最坏的情况下,我可以自己恢复创建默认FBO,并反对GLKit/GLKView,但它是一个非常好的框架,我想继续使用它

对不起,我的英语不好,请提前感谢您的回复。

也许您可以在您的bindDrawable呼叫后通过以下方式获得“当前”帧缓冲区ID:

GLint defaultFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &defaultFBO);

给出的答案肯定是正确的解决方案,但是它并没有解决您在理解标准openGL和用于嵌入式系统的openGL之间的概念差异时出现的错误。 //----------------------------------------------- 我觉得有必要在这里指出对glBindFramebuffer(GL_FRAMEBUFFER,0)的调用 不会将渲染返回到主帧缓冲区,尽管对于运行Windows、Unix(Mac)或Linux的计算机来说似乎是这样。台式机和笔记本电脑没有主默认系统帧缓冲区的概念。这个想法始于手持设备。当您使用零作为参数进行openGL绑定调用时,您要做的是将此函数设置为NULL。这就是你如何禁用这个功能。与glBindTexture(GL_TEXTURE_2D,0)相同;
在某些手持设备上,当您将帧缓冲区设置为NULL而不激活其他帧缓冲区时,驱动程序可能会自动激活主系统帧缓冲区。这将是制造商的选择,而不是您应该依赖的,这不是openGL ES规范的一部分。对于台式机和笔记本电脑,这是绝对必要的,因为需要禁用帧缓冲区才能返回到正常的openGL渲染。但是记住!这不是返回任何主帧缓冲区,而是关闭激活的帧缓冲区

在GLKit中绑定默认帧缓冲区的正确方法是调用
GLKview
上的
bindDrawable
方法


[self-bindDrawable]
[myglkview-bindDrawable]
视上下文而定。

这工作做得很好,谢谢你的回答(抱歉,现在还不能投票)。工作起来很有魅力,正是我所需要的!