【发布时间】:2016-04-11 14:50:29
【问题描述】:
我正在尝试找出如何将数据从片段着色器读回应用程序,尤其是内置变量中的片段着色器
这是我正在尝试做的一个示例,在下面的这个片段着色器中,我试图将片段着色器变量 gl_FragCoord.y 读回应用程序
#version 330
out vec4 outputColor;
void main()
{
gl_FragCoord.y??????
outputColor = vec4(0.2f, 0.2f, 0.2f, 1.0f);
}
我如何将此值传递回应用程序,它是通过统一变量完成的吗?缓冲对象?或其他方式?还是完全可以做到?
我特别想在每次片段着色器运行时获取 gl_FragCoord.y 值
【问题讨论】:
-
我非常怀疑您对渲染管道的理解是否正确。如果您可以可视化每个着色器阶段的输入/输出,我想您会明白为什么写制服没有意义。更重要的是,片段着色器的调用次数是荒谬的。相反,只需假设您的片段着色器为每个可见像素运行一次(在视口变换之后),然后您就可以轻松确定
gl_FragCoord.y覆盖的值范围。 -
实际上回答这个问题需要了解您为什么需要这些信息。有多种方法可以确定片段覆盖率,包括遮挡查询、模板缓冲或简单地将每个像素的片段坐标写入帧缓冲区。
-
您可以使用 fbo 并渲染到纹理,然后您可以使用
glGetTexImage读回纹理数据 -
@j-p 谢谢你,你能告诉我更多关于如何设置的细节吗?
-
@j-p 你的意思是/建议片段着色器的输出是 gl_FragCoord.y 到帧缓冲对象/图像吗?然后读回来?将新创建的图像绑定到纹理对象后使用 glGetTexImage?
标签: c opengl fragment-shader