在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_ClipVertex也必须被赋值。如果没有,则剪裁平面是无用的。但是我们知道,在Nvidia系统上仅定义了__GLSL_CG_DATA_TYPES。因此,在英特尔上跳过了gl_ClipVertex行。现在似乎很难编写兼容Nvidia / Ati / Intel卡的glsl程序。
是否有像__GLSL_CG_DATA_TYPES这样的东西可以识别GLSL程序中的英特尔显卡?