如果我们从任何几何阶段(顶点、几何体或苔丝明暗器)传递一个变化到片段明暗器,我们总是会释放一些信息。基本上,我们通过两种方式释放它:
-
通过插值:平滑、无个性或质心-不重要。如果我们在几何阶段传递了3个浮点(每个顶点一个),那么在片段阶段只会得到一个混合浮点。
-
通过丢弃。做的时候
flat
插值,硬件放弃所有值,除了一个从激发顶点。
为什么OpenGL不允许这样的功能:
顶点着色器:
// nointerp is an interpolation qualifier I would like to have
// along with smooth or flat.
nointerp out float val;
main()
{
val = whatever;
}
片段明暗器:
nointerp in float val[3];
// val[0] might contain the value from provoking vertex,
// and the rest of val[] elements contain values from vertices in winding order.
main()
{
// some code
}
在glsl 330中,我需要进行整数索引
tricks
或者在片段着色中除以重心坐标,如果我想要所有顶点的值。
是很难在硬件中实现,还是着色编码器没有广泛的要求?或者我不知道?