OpenGL着色器内置变量替换

时间:2016-02-14 23:57:22

标签: opengl

我有一个使用150兼容性GLSL版本的旧顶点着色器:

#version 150 compatibility

out vertexData
{
    vec3 v;
    vec3 n;
} vertex;

void main()
{
    vertex.v = gl_Vertex.xyz;
    vertex.n = normalize(gl_NormalMatrix * gl_Normal);
  gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

但是我想在OSX上使用它。如何访问gl_ModelViewProjectionMatrix等内置变量以及out制服等语法?

如果我不使用glutInitDisplayMode(GLUT_3_2_CORE_PROFILE),那么我会得到一个使用GLSL版本120的旧版OpenGL,它使用所有旧的varying语法,并且不支持几何着色器显然,如果我使用3.2核心配置文件,那么我必须自己管理所有矩阵,坦率地说,我可能不愿意做一堆以前不需要完成的样板代码。

1 个答案:

答案 0 :(得分:2)

  

但是我想在OSX上使用它。我怎样才能访问这两个   内置了gl_ModelViewProjectionMatrix等变量以及语法   比如out制服?

你根本做不到。您可以使用旧版GL,这将限制您在该平台上的GL2.1 / GLSL 1.20,或者您使用核心配置文件,其中没有这些内置存在。

  

如果我确实使用3.2核心配置文件,那么我必须自己管理所有矩阵,坦率地说,我不会费心去做一堆以前不需要做的样板代码。

你可能不喜欢它,但这正是你必须要做的。根据规范要求实现的唯一配置文件是核心配置文件,因此不能依赖于找到旧的传统GL和几何着色器等现代功能可能混合的实现。