OpenGL有预先遮阳吗?

时间:2014-04-11 07:59:24

标签: opengl opengl-es glsl shader

我的问题有点简单,但我无法在网上找到它。 OpenGL / OpenGL ES是否有类似DirectX的预处理器?

这样你就可以写出像

这样的东西
mat4 wvpMat = worldMat * viewMat * projMat;
gl_Position = wvpMat * position;

它将在预压器中仅计算一次wvpMat。 或者这是不受支持的,你应该在CPU上做它?

请参阅XNA的Riemers示例:

XNA with preshaders

2 个答案:

答案 0 :(得分:4)

OpenGL defines several shader stages

  1. 顶点着色器:首先为您想要绘制的所有点运行

  2. 使用2个着色器的可选tesselation:用于指定如何进行镶嵌的控件着色器和用于执行实际镶嵌的评估着色器

  3. 可选的几何着色器:每个绘制的基元发出可变数量的基元

  4. 片段着色器:按片段运行

  5. 当将程序链接在一起时,允许驱动程序根据需要优化每个这些,这可能包括生成预先着色器。但是,它是实现定义的。

答案 1 :(得分:2)

不,当前的OpenGL版本没有预先着色器这样的东西。就个人而言,我没有看到拥有它们的实际好处,但其他人可能会非常喜欢它们,即将推出的OpenGL版本可能会得到它们。