我有一个两遍渲染。在第一遍中,我使用FBO将一些不透明的几何体渲染成多个纹理。我使用imageStore()(image_load_and_store())将传递1中计算出的colorvalues写入一些纹理的特定纹理元素中。imageStore()(image_load_and_store(image_load_and_store) )OpenGL(4.2)片段处理和深度缓冲&imageLoadAndStore
我想但是(这个只发生了明显的碎片只有那些对应于通1)的最终fragmentcolors
所以我现在尽量是从通1把GL_DEPTH_ATTACHMENT质地和其附加到fbo从传球2(也作为GL_DEPTH_ATTACHMENT),然后在传球2之前我设置
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT);
glDepthMask(false);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
...render my scene...
我希望片段着色器(它使用imageStore())仅对那些在第一遍中可见的片段执行(因为它是我渲染过的同一场景,同样在第二遍中)。
但它似乎没有工作 - 隐藏的片段被处理过,并执行imageStore()(和,因为他们使用PASS1计算可见片段的颜色,他们做了错误的事情)
知道为什么? imageStore或其他东西是否强制碎片处理器执行?我能以某种方式控制它吗?它是否必须用early-z做些事情?
是的,这对我很有用,避免做我自己的深度测试。这在所有卡上的行为都一样吗?即它是否强迫早期z或它只是允许早期z? – Mat 2012-03-29 17:00:14
@Mat:你知道,在你键入的时候,你可能已经到了[GL注册表](http://www.opengl.org/registry/),打开了[shader_image_load_store](http: //www.opengl.org/registry/specs/ARB/shader_image_load_store.txt)链接,并搜索“early_fragment_tests”。 – 2012-03-29 17:02:08
不是真的 - 因为我没有这些东西流过我的虚荣,所以我可能不知道如何有效地搜索。不过谢谢,我回答了我的问题 – Mat 2012-03-29 19:21:16