渲染帧缓冲到纹理不会工作

时间:2017-05-11 20:37:06

标签: opengl glsl

我正在尝试在OpenGL中创建一个深度贴图,由于某种原因,帧缓冲区不会写入纹理,我尝试了多种方法来修复它,但它似乎无法正常工作。

这是我做的:

这是帧缓冲和纹理的生成:

glGenFramebuffers(1, &_DepthMapFBO);
glBindFramebuffer(GL_FRAMEBUFFER, _DepthMapFBO);

glGenTextures(1, &_DepthMapTex);
glBindTexture(GL_TEXTURE_2D, _DepthMapTex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, DEPTH_TEXTURE_WIDTH, DEPTH_TEXTURE_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);

//glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, _DepthMapTex, 0);
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, _DepthMapTex, 0);

glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);

glBindFramebuffer(GL_FRAMEBUFFER, 0);

(上面我尝试用glTexImage2D替换glTexStorage2D,我尝试将glFramebufferTexture替换为glFramebufferTexture2D,两者都没有效果

然后(之前有东西,但是他们找工作了,我查了一下)我渲染了帧缓冲,如下所示:

_DepthProgram.Use();
// Setting uniforms here
glViewport(0, 0, DEPTH_TEXTURE_WIDTH, DEPTH_TEXTURE_HEIGHT);
glBindFramebuffer(GL_FRAMEBUFFER, _DepthMapFBO);
glClear(GL_DEPTH_BUFFER_BIT);
// Rendering the scene here
glBindFramebuffer(GL_FRAMEBUFFER, 0);

这些是我使用的着色器:

(顶点)

#version 410 core

layout(location = 0) in vec3 Position;

uniform mat4 LightSpaceMatrix;
uniform mat4 Model;

void main()
{
    gl_Position = LightSpaceMatrix * Model * vec4(Position, 1.0);
}

(片段)

#version 410 core

void main()
{
    // gl_FragDepth = 0.0;
}

我尝试将纹理渲染到一个平面上,它完全是白色的(我检查过应该有其他值),正如您在片段着色器中看到的那样,我试图显式写入{{ 1}}但它没有改变纹理,它保持白色(1.0)

我浏览了整个互联网并看了learnopengl.com并且每个人似乎和我一样,我错过了什么?

我仔细检查过,我正在将纹理渲染到平面上,我用另一个替换gl_FragDepth并渲染纹理 )< / p>

如果我遗漏了一些信息,请告诉我。

编辑:顺便说一下,glBindTexture我没有收到任何错误。

0 个答案:

没有答案