GLSL ES对应于OpenGL GLSL中的“out”关键字?

7
我有一个在Windows上使用OpenGL工作正常的顶点着色器。我想在支持OpenGL ES2.0的iPad上使用相同的着色器。但是编译着色器失败,出现以下错误:
Invalid storage qualifiers 'out' in global variable context

根据我所读的,'out'关键字需要GLSL 1.5支持,而iPad不支持。是否有一个等效的关键字可以用来将颜色传递到我的片段着色器中?

attribute vec4 vPosition;
attribute vec4 vColor;

uniform   mat4 MVP;

out vec4 pass_Color;

void main()
{
  gl_Position = MVP * vPosition;
  pass_Color = vColor;
}

我使用这个顶点着色器来创建渐变混合,所以我将颜色分配给三角形的每个顶点,然后片段着色器在每个顶点之间插值颜色。这就是为什么我没有直接传递一个纯色到片段着色器。


请注意,所有较新的iPad都支持ES 3.0,这与较新版本的桌面OpenGL更兼容。 - Reto Koradi
@RetoKoradi 我希望我有一个 :) - SparkyNZ
1个回答

5

问题已解决!在我使用的GLSL ES 1.0版本中,我需要使用“varying”而不是“in”和“out”。以下是可用的着色器代码:

attribute vec4 vPosition;
attribute vec4 vColor;

uniform   mat4 MVP;

varying vec4 pass_Color;

void main()
{
  gl_Position = MVP * vPosition;
  pass_Color = vColor;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接