我正在学习使用GLSL创建shadown但我在这里遇到了一些麻烦:
1.在GLSL 3.3中,我们可以在片段着色器中使用此语句:
layout(location = 0) out float fragmentdepth;
只将16bit深度写入纹理(之前设置为GL_DEPTH_COMPONENT16
)但是如何在OpenGL 2.1(GLSL 1.20)中做这样的事情呢?
答案 0 :(得分:3)
在GLSL 3.3中,我们可以在片段着色器中使用此语句:
只将16bit的深度写入纹理(之前设置为GL_DEPTH_COMPONENT16)
不,你不能。
这会将fragmentdepth
设置为写入颜色缓冲区。并且您无法使用GL_DEPTH_COMPONENT16
image format附加图片到a GL_COLOR_ATTACHMENTi
attachment point of an FBO。试图这样做give you a GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
error。
在所有版本的GLSL中,写入附加深度缓冲区的唯一方法是写入gl_FragDepth
。在所有版本的GLSL中,您只能将一个深度缓冲区附加到FBO。虽然Image Load/Store允许你解决这个问题,但是你会失去深度测试等等。
答案 1 :(得分:1)