当顶点着色器完成它的工作后,就会进入图元组装阶段。在 Primitive Assembly 阶段进行裁剪。然后在几个阶段之后是 Fragment Shader,然后是 Per-Fragment 操作。第一个操作是像素所有权测试,如果我们已经根据视口(viewport)裁剪了图元,我不明白为什么我们需要它。
最佳答案
像素所有权的目的不是剪掉窗口/视口(viewport)之外的图元。根据流水线定义,顶点和片段着色器之间确实发生了这种情况,大约在执行图元组装和光栅化的时候。
像素所有权测试用于消除基本上位于窗口矩形内但在屏幕上不可见的像素。可能发生这种情况的常见情况是,如果您的窗口被另一个窗口部分覆盖,或者您的窗口超出了显示器的边缘。
只有当应用程序直接渲染到帧缓冲区时,像素所有权测试才会真正发挥作用。我认为这在现代窗口系统中不再常见。您的应用程序通常会渲染到屏幕外缓冲区,然后有一个合成步骤根据窗口的相对位置、堆叠顺序等组合窗口。您仍然可以直接渲染到帧缓冲区的唯一时间是在全屏模式下.
要记住的另一个方面是规范描述了 OpenGL 实现的行为方式。这并不意味着每个实现实际上都必须完全按照规范中描述的顺序执行各个步骤。只要它表现得好像它按照该顺序执行了这些步骤,它就仍然是合规的。例如,如果一个实现可以在片段着色器之前执行像素所有权测试,那么只要最终结果不变,它就可以完全自由地这样做。事实上,在片段着色器之前执行“每片段操作”部分中的一些测试以提高效率是很常见的。
关于opengl - 裁剪与像素所有权测试 opengl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29515629/