【发布时间】:2015-02-04 04:56:39
【问题描述】:
以下代码在 iOS 和 Android 上运行良好:
unsigned int depth_texture = 0,
framebuffer = 0;
glGenTextures( 1, &depth_texture );
glBindTexture( GL_TEXTURE_2D, depth_texture );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glTexImage2D( GL_TEXTURE_2D,
0,
GL_DEPTH_COMPONENT,
256,
256,
0,
GL_DEPTH_COMPONENT,
GL_UNSIGNED_INT,
NULL );
glBindTexture( GL_TEXTURE_2D, 0 );
glGenFramebuffers( 1, &framebuffer );
glBindFramebuffer( GL_FRAMEBUFFER, framebuffer );
glFramebufferTexture2D( GL_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT,
GL_TEXTURE_2D,
depth_texture,
0 );
unsigned int type = glCheckFramebufferStatus( GL_FRAMEBUFFER );
if( type == GL_FRAMEBUFFER_COMPLETE )
{ printf( "Complete!" ); }
else
{ printf( "Error!" ); }
现在我将此代码移植到 OpenGL 桌面(2.1 及更高版本),但它拒绝工作。我总是收到错误GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER。我发现使它工作的唯一方法是指定一个 COLOR_ATTACHMENT (这将修复绘图缓冲区错误)。我阅读了 GL glFrameBuffer 文档,但我无法理解为什么上面的代码不起作用。我只想将深度渲染到纹理中......我错过了什么吗?
【问题讨论】:
标签: opengl opengl-es-2.0 opengl-3