在顶点和片段着色器中访问同名的统一失败

时间:2014-03-23 16:39:03

标签: opengl-es opengl-es-2.0 glsl fragment-shader vertex-shader

我对着色器仍然缺乏经验,但我正在很好地攀登学习曲线。

我今天早上偶然发现的一件事是努力在片段和顶点着色器中使用同名的制服。

可以在两个着色器中定义制服,但只能在一个或另一个着色器中进行访问,但不能同时访问两者。如果我尝试访问两者中的着色器,则程序无法编译。

我的最后一个想法是将它们编译为单独的符号,但除了glGetUniformLocation之外我不知道如何访问它们。使用相同的字符串调用两次返回相同的统一位置...不是很好的帮助。

着色器非常简单,除了对渲染没有影响的单线工作或非测试外,一切都很完美。

是否有一种特殊的方法可以在两个着色器之间使用具有相同值的同名制服?

1 个答案:

答案 0 :(得分:9)

解决了!根据我的经验,精确限定符 通常不是的要求。我没有使用它......因为我的制服是一个整数。

我读到了一个确认,这里的顶点和片段着色器之间的制服可以同名:

http://www.gamedev.net/topic/535321-glsl-the-same-named-uniform-in-vertex-and-fragment-shaders/

所以我相信这是我自己的错误。

最后,我尝试添加 highp 精度限定符,这解决了崩溃的问题。

技术上:

设置1 崩溃

Vertex shader:
uniform int frameNum;

Fragment shader:
uniform int frameNum;

设置2 崩溃

Vertex shader:
uniform highp int frameNum;

Fragment shader:
uniform int frameNum;

设置3 成功

Vertex shader:
uniform highp int frameNum;

Fragment shader:
uniform highp int frameNum;

设置4 成功

Vertex shader:
uniform int frameNum;

Fragment shader:
uniform highp int frameNum;