在相同的fbo中从fbo纹理渲染到另一个

时间:2017-03-25 16:24:04

标签: c++ opengl fbo

我正在尝试设置延迟渲染,并成功设法将数据输出到不同的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);并对纹理本身进行采样,如着色器代码中所示,但没有任何改变结果纹理,只显示清晰的颜色。

我做错了什么?

0 个答案:

没有答案