【发布时间】: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_image 和list_buffer。
但是通过启用和禁用深度测试,我得到以下结果:
我想知道深度测试是否影响head_pointer_image 和list_buffer?还是OpenGL里面的优化都是这样做的?
【问题讨论】:
-
我喜欢你打包 OIT 数据的方式;)
标签: opengl fragment-shader opengl-4