我正在尝试设置延迟渲染,并成功设法将数据输出到不同的gbuffer纹理(位置,法线,反照率,镜面反射)。
我现在尝试通过渲染带有简单纹理坐标的全屏四边形,从相同fbo中的反照率纹理到第5个颜色附件进行采样(用于进一步潜在的后期处理采样)。
我通过Nsight检查了顶点/ texcoord数据是否良好,并确认着色器可以“看到”要从中采样的纹理,但是当我在其中检查时,我在目标纹理中看到的所有颜色都是清晰的颜色Nsight调试器。
目前,着色器基本上只是一个简单的着色器:
顶点着色器:
#version 430
in vec3 MSVertex;
in vec2 MSTexCoord;
out xferBlock
{
vec3 VSVertex;
vec2 VSTexCoord;
} outdata;
void main()
{
outdata.VSVertex = MSVertex;
outdata.VSTexCoord = MSTexCoord;
gl_Position = vec4(MSVertex,1.0);
}
片段着色器:
#version 430
layout (location = 0) uniform sampler2D colourMap;
layout (location = 0) out vec4 colour;
in xferBlock
{
vec3 VSVertex;
vec2 VSTexCoord;
} indata;
void main()
{
colour = texture(colourMap, indata.VSTexCoord).rgba;
}
正如您所看到的,着色器没有任何幻想。
gl代码如下:
//bind frame buffer for writing to texture #5
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glDrawBuffer(GL_COLOR_ATTACHMENT4); //5 textures total
glClear(GL_COLOR_BUFFER_BIT);
//activate shader
glUseProgram(second_stage_program);
//bind texture
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, fbo_buffers[2]); //third attachment: albedo
//bind and draw fs quad (two array buffers: vertices, and texture coordinates)
glBindVertexArray(quad_vao);
glDrawArrays(GL_TRIANGLES,0,6);
我正在尝试找出阻止渲染到纹理的内容。我正在使用OpenGL v4.3的核心上下文。
我已经尝试为所有片段输出单个白色,使用纹理坐标生成颜色colour = vec4(indata.VSTexCoord, 1.0, 1.0);
并对纹理本身进行采样,如着色器代码中所示,但没有任何改变结果纹理,只显示清晰的颜色。
我做错了什么?