这是我的片元着色器代码:
我的三角形完全覆盖了屏幕。预期行为是
为什么会这样呢?我认为
#version 420 core
#extension GL_ARB_explicit_uniform_location : enable
#extension GL_ARB_shader_storage_buffer_object : require
layout(early_fragment_tests) in;
layout(binding = 4, offset = 0) uniform atomic_uint num_fragments;
// ...
void main(void)
{
atomicCounterIncrement(num_fragments);
frag_color = vec4(1.0, 0.0, 0.0, 0.0);
atomicAdd(...);
}
我的三角形完全覆盖了屏幕。预期行为是
num_fragments
等于像素数(640*480 = 307200),对于单层三角形来说确实如此。然而,当我在现有三角形后面添加一个三角形时,num_fragments
变成了更高的值,就好像片段着色器正在执行被遮挡的三角形。为什么会这样呢?我认为
early_fragment_tests
指令应该可以防止这种行为。这不仅仅是一种优化,因为着色器中有原子存储,应该只运行未被遮挡的像素。