问题描述
我正在尝试将纹理从帧缓冲区对象映射到三角形网格平面。问题是它最终变成了黑色。
帧缓冲区的代码。
glGenFramebuffers(1,&fbo);
glBindFramebuffer(GL_FRAMEBUFFER,fbo);
glGenTextures(1,&fbo_texture);
glBindTexture(GL_TEXTURE_2D,fbo_texture);
glTexImage2D(GL_TEXTURE_2D,GL_RGB,height,width,GL_RGBA,GL_UNSIGNED_BYTE,NULL);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR );
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE_2D,0);
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,fbo_texture,0);
所以。问题出在哪里:(
解决方法
纹理对象和纹理采样器uniform之间的绑定是通过纹理单元实现的。需要分配纹理对象绑定的纹理单元的编号,而不是纹理采样uniform上的纹理对象:
glUniform1i(textureUniform,fbo_texture);
glUniform1i(textureUniform,0);
您的着色器无法编译,因为采样器统一变量与函数 texture
同名。重命名统一变量:
uniform sampler2D u_texture;
void main()
{
color = texture(u_texture,texpos);
}