OpenGL ES 2.0和iOS中的默认帧缓冲区
我对帧缓冲区有点困惑。 目前,为了在屏幕上绘制,我使用此代码为OpenGL ES 2.0和iOS中的默认帧缓冲区,ios,opengl-es,Ios,Opengl Es,我对帧缓冲区有点困惑。 目前,为了在屏幕上绘制,我使用此代码为GL\u COLOR\u ATTACHMENT0生成了一个带有Renderbuffer的帧缓冲区 -(void)initializeBuffers{ //Build the main FrameBuffer glGenFramebuffers(1, &frameBuffer); glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer); //Build t
GL\u COLOR\u ATTACHMENT0
生成了一个带有Renderbuffer的帧缓冲区
-(void)initializeBuffers{
//Build the main FrameBuffer
glGenFramebuffers(1, &frameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
//Build the color Buffer
glGenRenderbuffers(1, &colorBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, colorBuffer);
//setup the color buffer with the EAGLLayer (it automatically defines width and height of the buffer)
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:EAGLLayer];
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &bufferWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &bufferHeight);
//Attach the colorbuffer to the framebuffer
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorBuffer);
//Check the Framebuffer status
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
NSAssert(status == GL_FRAMEBUFFER_COMPLETE, ERROR_FRAMEBUFFER_FAIL);
}
我使用
[context presentRenderbuffer:GL_RENDERBUFFER];
在阅读中,我看到了Arttu Peltonen的评论,他说:
默认帧缓冲区是默认情况下渲染到的位置,您没有
为了得到它,我不惜一切代价。帧缓冲区对象是您可以使用的对象
而是渲染到,有些人称之为“屏幕外渲染”。
如果你这样做,你最终会得到一个纹理中的图像,而不是
默认帧缓冲区(显示在屏幕上)。你可以复制
从该纹理到默认帧缓冲区(屏幕上)的图像,即
通常通过blitting完成(但它仅在OpenGL ES 3.0中可用)。
但是如果你只想在屏幕上显示图像,你可能
一开始就不会使用FBO
所以我想知道我的方法是否只用于屏幕外渲染。
在这种情况下,我要做什么才能在默认缓冲区上渲染?!
(注意,我不想使用GLKView…OpenGL ES规范提供了两种帧缓冲区:提供的窗口系统和帧缓冲区对象。默认帧缓冲区将是窗口系统提供的类型。但该规范不要求Windows系统提供帧缓冲区或存在默认帧缓冲区 在iOS中,没有窗口系统提供的帧缓冲区,也没有默认的帧缓冲区——所有绘图都是使用帧缓冲区对象完成的。要渲染到屏幕,请创建一个renderbuffer,其存储来自
CaeAglayer
对象(或者使用代表您创建的renderbuffer,就像使用GLKView
类时一样)。这正是您的代码所做的
要进行屏幕外渲染,请创建renderbuffer并调用glRenderbufferStorage
为其分配存储。所述存储与caeaglayer
无关,因此renderbuffer不能(直接)显示在屏幕上。(它也不是纹理——将纹理设置为渲染目标的工作方式不同——它只是一个屏幕外缓冲区。)
关于所有这些,还有更多的信息,以及苹果公司网站中每种方法的示例代码