C++ 从fbo纹理渲染到同一fbo中的另一个纹理
我正在尝试设置延迟渲染,并成功地将数据输出到不同的gbuffer纹理(位置、法线、反照率、镜面反射) 我现在正试图通过渲染带有简单纹理坐标的全屏四边形,在同一fbo中从反照率纹理采样到第五颜色附件(用于进一步潜在的后期处理采样) 我已经通过Nsight检查了顶点/纹理坐标数据是否良好,并确认着色器可以“看到”要从中采样的纹理,但在Nsight调试器中检查时,我在目标纹理中看到的只是清晰的颜色 目前,着色器基本上只是一个简单的直通着色器: 顶点着色器:C++ 从fbo纹理渲染到同一fbo中的另一个纹理,c++,opengl,fbo,C++,Opengl,Fbo,我正在尝试设置延迟渲染,并成功地将数据输出到不同的gbuffer纹理(位置、法线、反照率、镜面反射) 我现在正试图通过渲染带有简单纹理坐标的全屏四边形,在同一fbo中从反照率纹理采样到第五颜色附件(用于进一步潜在的后期处理采样) 我已经通过Nsight检查了顶点/纹理坐标数据是否良好,并确认着色器可以“看到”要从中采样的纹理,但在Nsight调试器中检查时,我在目标纹理中看到的只是清晰的颜色 目前,着色器基本上只是一个简单的直通着色器: 顶点着色器: #version 430 in vec3
#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;
}
正如您所看到的,着色器没有什么特别之处
总账代码如下所示:
//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中使用核心上下文
我尝试为所有片段输出一种白色,使用纹理坐标生成一个颜色color=vec4(indata.VSTexCoord,1.0,1.0)代码>并对纹理本身进行采样,正如您在着色器代码中看到的那样,但不会更改生成的纹理,它只显示清晰的颜色
我做错了什么?刮伤了一个顶点着色器的头部,该着色器不能写入gl\u位置
?真不敢相信我没有发现,谢谢你指出它。但没有解决问题。