创建缓冲区 OpenGLES 2

Posted

技术标签:

【中文标题】创建缓冲区 OpenGLES 2【英文标题】:Create Buffer OpenGLES 2 【发布时间】:2013-01-28 15:45:32 【问题描述】:

我在使用 opengles 创建帧缓冲区时遇到了一些问题。 对于我的应用程序,我像这样创建主帧缓冲区:

glGenFramebuffers( 1, &viewFramebuffer );
glGenRenderbuffers( 1, &viewRenderbuffer );

glBindFramebuffer( GL_FRAMEBUFFER, viewFramebuffer );
glBindRenderbuffer( GL_RENDERBUFFER, viewRenderbuffer );
[ Context renderbufferStorage : GL_RENDERBUFFER fromDrawable : ( CAEAGLLayer* )self.layer ];
glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, viewRenderbuffer );

glGetRenderbufferParameteriv( GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &backingWidth );
glGetRenderbufferParameteriv( GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &backingHeight );

if ( itUsesDepthBuffer )

    glGenRenderbuffers( 1, &depthRenderbuffer );
    glBindRenderbuffer( GL_RENDERBUFFER, depthRenderbuffer );
    glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, backingWidth, backingHeight );
    glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer );


if ( glCheckFramebufferStatus( GL_FRAMEBUFFER ) != GL_FRAMEBUFFER_COMPLETE )

    NSLog( @"failed to make complete framebuffer object %x", glCheckFramebufferStatus( GL_FRAMEBUFFER ) );
    [ self destroyFramebuffer ];

    return NO;

但是函数 glGetRenderbufferParameteriv 为 GL_RENDERBUFFER_WIDTH 和 GL_RENDERBUFFER_HEIGHT 返回 0 并且最终 glCheckFramebufferStatus 返回错误,因为帧缓冲区附件不完整。

你知道为什么会这样吗?

提前谢谢你。

【问题讨论】:

【参考方案1】:

好的,我修好了,它无法渲染缓冲存储:

[ Context renderbufferStorage : GL_RENDERBUFFER fromDrawable : ( CAEAGLLayer* )self.layer ];

由于某种原因,我的“self.layer”没有返回正确的。

【讨论】:

你是怎么解决的?

以上是关于创建缓冲区 OpenGLES 2的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的索引缓冲区没有与 glDrawArraysInstanced (OpenGLES 3.0) 一起使用

OpenGL ES 2 控制台帧缓冲光标

OpenGL ES 2.0,使用多个顶点缓冲区进行绘制

Android OpenGLES3绘图 - 帧缓冲

我的OpenGL学习进阶之旅EGL简介

清除/释放 OpenGL ES 缓冲区