【发布时间】:2013-03-27 20:16:01
【问题描述】:
作为一个实验,我决定尝试仅使用图像 API 渲染到纹理。起初结果显然是错误的,因为纹理写入发生在深度测试之前。所以我启用了early_fragment_tests,虽然我是为这种类型的用例引入的,但现在我得到了一种奇怪的闪烁,看起来像 Z 战斗,这看起来很奇怪,因为它应该执行相同的深度测试适用于常规渲染。
无论如何,我已经包含了问题的图像,我很好奇是否有人解释发生了什么,以及为什么这不起作用。可以让它工作吗?
这是一个最小的复制器
#version 420
in vec3 normal;
layout(binding = 0) writeonly uniform image2D outputTex;
void main()
{
vec4 fragColor = vec4(normal, 1);
imageStore(outputTex, ivec2(gl_FragCoord.xy), fragColor);
}
【问题讨论】:
-
你在说什么“图像 API”?此外,添加一些代码会有所帮助。
-
ARB_shader_image_load_store -
那么...您的代码是什么样的?错误使用 Image Load/Store 操作的方法有很多,不看代码就无法知道你做了哪些。
-
基本上我会在哪里写出片段颜色,我只是使用
imageStore(outputTex, ivec2(gl_FragCoord.xy), fragColor);来写入纹理。唯一的其他变化是文件顶部的layout(early_fragment_tests) in;。 -
“你的代码是什么样的”,我的意思是“发布你的代码”。不是您的代码片段。将您的代码放在人们可以看到的问题中。