我最近一直在努力使用模板缓冲区,但它不能像我那样工作。所以,问题是我甚至无法清除模板缓冲区。 这至少就是我现在的想法。
以下是我创建纹理的方法:
glTexImage2D ( GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, p_Width, p_Height, 0,
GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, NULL );
然后我如何将纹理附加到我正在使用的帧缓冲区:
bglFramebufferTexture2D( GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,
GL_TEXTURE_2D, TextureID, 0 );
正如你所看到的,我将深度和模板数据存储在相同的纹理中,如果它完全是瓶颈的话,应该给我深度错误,但事实并非如此。实际上我能够渲染场景,我也能够将帧缓冲区的颜色纹理渲染为全屏四边形而没有任何问题,以及depth_stencil纹理。但事情就是这样,我只能渲染深度数据而不是模板数据。我假设深度数据应该在纹理的x / y / z值中,并且模板数据应该由alpha值访问?我已经测试了很多组合,我找不到合适的渲染黑色全屏四边形,这是模板缓冲区的清晰值。 纹理的alpha值现在是1.0f。
另外bglCheckFramebufferStatus(GL_FRAMEBUFFER);返回GL_FRAMEBUFFER_COMPLETE
我错过了什么线索?这就是我清除模板缓冲区的方法:
glEnable(GL_STENCIL_TEST);
glClearStencil(0x0);
glClear(GL_STENCIL_BUFFER_BIT);
抱歉打字错误等。
EDIT! 好吧,我只是放心了模板工作。我试图做一些掩饰,事实证明我可以把我游戏中的角色变成世界的一部分。 但仍有一个问题,我无法通过着色器访问模板值。 有线索吗?