【问题标题】:Does Enabling/Disabling the DEPTH_TEST affect the imageAtomicExchange, imageStore?启用/禁用 DEPTH_TEST 是否会影响 imageAtomicExchange、imageStore?
【发布时间】:2016-02-16 20:36:59
【问题描述】:

我正在尝试实现订单独立性透明度。在收集碎片期间,将运行以下代码:

uint index = atomicCounterIncrement(list_counter);
uint old_head = imageAtomicExchange(head_pointer_image, ivec2(gl_FragCoord.xy), uint(index));

item.x = old_head;
item.y = packUnorm4x8(frag_color);
item.z = floatBitsToUint(gl_FragCoord.z);
item.w = packUnorm4x8(frag_specularity);

imageStore(list_buffer, int(index), item);

正如预期的那样,片段着色器将在所有正在渲染的片段上运行。因此,在运行片段着色器后禁用/启用深度测试不会影响最终的head_pointer_imagelist_buffer

但是通过启用和禁用深度测试,我得到以下结果:

DEPTH_TEST Enabled

DEPTH_TEST Disabled

我想知道深度测试是否影响head_pointer_imagelist_buffer?还是OpenGL里面的优化都是这样做的?

【问题讨论】:

  • 我喜欢你打包 OIT 数据的方式;)

标签: opengl fragment-shader opengl-4


【解决方案1】:

在 OpenGL 中,深度测试也可以在片段着色器执行之前完成。这称为“早期片段测试”,可以作为优化启用(或者可以在 OpenGL > 4.2 的情况下由ARB_shader_image_load_store 扩展控制)。

用户可以通过指定启用早期片段测试

layout(early_fragment_tests) in;

但我认为不可能以某种方式禁用它。在您的情况下,最好的做法是像您一样禁用深度测试。欲了解更多信息,请查看here

【讨论】:

  • 我使用的是“早期片段测试”,我只是禁用了它,现在一切正常。谢谢。
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
相关资源
最近更新 更多