【发布时间】:2016-05-18 19:05:44
【问题描述】:
这是我的片段着色器:
#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 指令会阻止这种行为。这不仅仅是一种优化,因为着色器中有原子存储,应该只针对未遮挡的像素运行。
【问题讨论】:
-
你遇到过这些limitations吗?
-
@Joel:您是否检查过深度测试实际上已启用,并且存在深度缓冲区?
标签: opengl graphics glsl gpu opengl-4