Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从fbo纹理渲染到同一fbo中的另一个纹理_C++_Opengl_Fbo - Fatal编程技术网

C++ 从fbo纹理渲染到同一fbo中的另一个纹理

C++ 从fbo纹理渲染到同一fbo中的另一个纹理,c++,opengl,fbo,C++,Opengl,Fbo,我正在尝试设置延迟渲染,并成功地将数据输出到不同的gbuffer纹理(位置、法线、反照率、镜面反射) 我现在正试图通过渲染带有简单纹理坐标的全屏四边形,在同一fbo中从反照率纹理采样到第五颜色附件(用于进一步潜在的后期处理采样) 我已经通过Nsight检查了顶点/纹理坐标数据是否良好,并确认着色器可以“看到”要从中采样的纹理,但在Nsight调试器中检查时,我在目标纹理中看到的只是清晰的颜色 目前,着色器基本上只是一个简单的直通着色器: 顶点着色器: #version 430 in vec3

我正在尝试设置延迟渲染,并成功地将数据输出到不同的gbuffer纹理(位置、法线、反照率、镜面反射)

我现在正试图通过渲染带有简单纹理坐标的全屏四边形,在同一fbo中从反照率纹理采样到第五颜色附件(用于进一步潜在的后期处理采样)

我已经通过Nsight检查了顶点/纹理坐标数据是否良好,并确认着色器可以“看到”要从中采样的纹理,但在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;
}
正如您所看到的,着色器没有什么特别之处

总账代码如下所示:

//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位置
?真不敢相信我没有发现,谢谢你指出它。但没有解决问题。