我生成这样的纹理:
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(
GL_TEXTURE_2D, 0,
GL_RGBA16,
//GL_RGBA16F_ARB, //< Won't work
256, 256, 0, GL_RGBA, GL_FLOAT, NULL
);
glBindTexture(GL_TEXTURE_2D, 0);
我将它附加到帧缓冲区对象(FBO)以进行渲染。当我将内部格式设置为GL_RGBA16
. 但是,我需要更高的动态范围,并且认为这GL_RGBA16F_ARB
可能会奏效。
不幸的是,如果我在上面给出的代码中替换GL_RGBA16
为GL_RGBA16F_ARB
,纹理似乎停止工作。我没有尝试渲染到 FBO/纹理棒,当我使用纹理时,它包含随机垃圾。(很多紫色,事实证明)如果我收到一条提示可能有问题的错误消息,这不会那么令人沮丧,但我似乎找不到。换句话说,在-call 之后返回,并glGetError()
在我附加纹理时返回0
glTexImage2D
glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)
GL_FRAMEBUFFER_COMPLETE_EXT
我还没有搞砸glClampColorARB(...)
......但是:)
- 我是否忘记在我没有想到的地方/方式中检查错误?
- -textures 是否
GL_RGBA16F_ARB
需要我没有给予的任何特殊处理? - 还有什么可能是错的吗?
我很难过,因为一切都很顺利GL_RGBA16
...... :(
编辑:使用时GL_RGBA16F_ARB
,我尝试渲染到屏幕的第一帧没有成功。在我看来,我应该在某处收到错误消息..?
编辑:通过检查 ShadowIce 的工作代码示例,我发现如果我更改FBO 上的深度缓冲区glRenderBufferStorageEXT(...)
GL_DEPTH_COMPONENT24
,问题就会消失,并将其作为第二个参数,而不是GL_DEPTH_COMPONENT16
. 我不知道为什么会这样,但显然它确实有效。
此外,如果我在那里进行相反的替换,ShadowIce 的代码会像我的一样中断。