2016-05-17 4 views
3

У меня есть вершинный шейдер, который отлично работает в Windows с OpenGL. Я хочу использовать тот же шейдер на iPad, который поддерживает OpenGL ES2.0.GLSL ES эквивалент ключевому слову OpenGL GLSL 'out'?

компиляции шейдера терпит неудачу с:

Invalid storage qualifiers 'out' in global variable context 

Из того, что я прочитал, то «из» ключевое слово требуется GLSL 1.5, который не будет поддерживать IPad. Есть ли эквивалентное ключевое слово для «out», которое я могу использовать для передачи цвета в свой шейдер фрагмента?

attribute vec4 vPosition; 
attribute vec4 vColor; 

uniform mat4 MVP; 

out vec4 pass_Color; 

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

Эта вершина шейдер используется мною для создания градиента смеси, поэтому я назначая цвет каждой вершину треугольника, а затем фрагмент шейдер интерполяции цвета между каждой вершиной. Вот почему я не передаю прямой цвет непосредственно в шейдер фрагмента.

+0

Обратите внимание, что все несколько недавних iPads поддерживают ES 3.0, который гораздо более совместим с более новыми версиями настольных OpenGL. –

+0

@RetoKoradi Хотелось бы, чтобы у меня был один :) – SparkyNZ

ответ

1

Решенный! В GLSL ES 1.0, который я использую, мне нужно использовать «changeing» вместо «in» и «out». Вот рабочий шейдер:

attribute vec4 vPosition; 
attribute vec4 vColor; 

uniform mat4 MVP; 

varying vec4 pass_Color; 

void main() 
{ 
    gl_Position = MVP * vPosition; 
    pass_Color = vColor; 
} 
Смежные вопросы