如果我有一个简单的OpenGL着色器同时应用于多个立方体,那么统一值会变慢。我注意到像glColor3f这样的东西不会减慢它(至少从我尝试过的程度)但是我现在使用glColor3f作为一种黑客,这样着色器可以读取gl_Color,我可以类似地使用它用于确定立方体的哪一面被渲染用于面部独立的平面照明的制服。
我使用的是置换列表,所以我使用了glColor3f,因为它在列表中出现了,并且在创建列表时在每张脸之前只做了不同的颜色。现在,我想在渲染之前设置更多的值(这次不是在displaylist中)。
我可以在着色器中读取OpenGL的哪些调用?我需要在渲染之前将0到6的6个整数发送到着色器中,但我可能会设法在稍后缩小它。
答案 0 :(得分:2)
我建议使用数据类型为ivec2
,ivec3
或ivec4
的统一块或制服,您可以一次写入2,3或4 int
。
Aapart从这里有一些内置制服。除了矩阵之外,还有gl_DepthRange
,gl_Fog
,gl_LightSource[gl_MaxLights]
,gl_LightModel
,gl_FrontLightModelProduct
,gl_BackLightModelProduct
,gl_FrontLightProduct[gl_MaxLights]
,{ {1}},gl_BackLightProduct[gl_MaxLights]
,gl_FrontMaterial
,gl_BackMaterial
,gl_Point
,gl_TextureEnvColor[gl_MaxTextureUnits]
,gl_ClipPlane[gl_MaxClipPlanes]
,gl_EyePlaneS[gl_MaxTextureCoords]
,{{1 }},gl_EyePlaneT[gl_MaxTextureCoords]
,gl_EyePlaneR[gl_MaxTextureCoords]
,gl_EyePlaneQ[gl_MaxTextureCoords]
,gl_ObjectPlaneS[gl_MaxTextureCoords]
和gl_ObjectPlaneT[gl_MaxTextureCoords]
。
但是,从着色器读取全局数据的预期方式是统一变量。另一种方法是在纹理中编码信息。