OpenGL 着色器可以访问在渲染之前设置的哪些值?

What values can an OpenGL shader access that are set before rendering?

如果我有一个简单的 OpenGL 着色器同时应用于多个立方体,那么统一值会变慢。我注意到像 glColor3f 这样的东西并没有减慢它的速度(至少从我试过的来看是这样),但我目前正在使用 glColor3f 作为一种 hack,这样着色器就可以读取 gl_Color 并且我可以使用它类似于用于确定立方体的哪一侧正在为与面无关的平面照明渲染的制服。

我正在使用显示列表,所以我使用了 glColor3f,因为它融入了列表,并且在创建列表时只是在每个面孔前使用了不同的颜色。现在,我想在渲染之前设置更多值(这次不在显示列表中)。

我可以执行哪些来自 OpenGL 的调用可以在着色器中读取?我需要在渲染之前将 6 个整数从 0-8 发送到着色器,但我可能稍后会设法缩小它。

我建议使用数据类型为 ivec2ivec3ivec4 的 uniform 块或 uniforms,你可以用它们写 2、3 或 4 int一次。

除此之外还有一些 built-in 制服。除了矩阵,还有 gl_DepthRangegl_Foggl_LightSource[gl_MaxLights]gl_LightModelgl_FrontLightModelProductgl_BackLightModelProductgl_FrontLightProduct[gl_MaxLights]gl_BackLightProduct[gl_MaxLights], gl_FrontMaterial, gl_BackMaterial, gl_Point, gl_TextureEnvColor[gl_MaxTextureUnits], gl_ClipPlane[gl_MaxClipPlanes], gl_EyePlaneS[gl_MaxTextureCoords], gl_EyePlaneT[gl_MaxTextureCoords], gl_EyePlaneR[gl_MaxTextureCoords]gl_EyePlaneQ[gl_MaxTextureCoords]gl_ObjectPlaneS[gl_MaxTextureCoords]gl_ObjectPlaneT[gl_MaxTextureCoords]gl_ObjectPlaneR[gl_MaxTextureCoords]gl_ObjectPlaneQ[gl_MaxTextureCoords].

但是从着色器读取全局数据的预期方式是统一变量。另一种方法是在纹理中编码信息。