在 Nvidia 卡上,如果要启用剪切平面,则必须在 glsl 程序中分配 gl_ClipVertex。但是在 Ati 卡上,如果分配了 gl_ClipVertex,就会出现问题。
为了与 Nvidia/Ati 兼容,我们编写如下代码:
// fix the clipping bug for both Nvidia and Ati
#ifdef __GLSL_CG_DATA_TYPES
gl_ClipVertex = gl_ModelViewMatrix*gl_Vertex;
#endif
您可以查看此链接以获取更多信息。
这儿存在一个问题。在英特尔显卡(例如 HD Graphics 3000)上,也必须指定 gl_GlipVertex。如果不是,则剪切平面是无用的。但正如我们所知,__GLSL_CG_DATA_TYPES 仅在 Nvidia 系统上定义。所以 gl_ClipVertex 行在英特尔上是 skippd 的。现在似乎很难在 Nvidia/Ati/Intel 卡上编写兼容的 glsl 程序。
是否有类似 __GLSL_CG_DATA_TYPES 可以识别 GLSL 程序中的英特尔显卡?