GLSL 1.0.0 - проблема с использованием "Varying" в вершинных и фрагментных шейдерах - PullRequest
4 голосов
/ 23 февраля 2012

Я занимаюсь разработкой с использованием OpenGL ES 2.0.0 и GLSL ES 1.0.0.

В настоящее время я отрисовываю квадрат на экран, и сейчас пытаюсь применить текстуру.

У меня проблемы с использованием " varing " в вершинных и фрагментных шейдерах, получение сообщения об ошибке:

- Failed to compile vertex shader - 
0(3) : error C5060: out can't be used with non-varying tex_varying

in vec4 texture_coord ;
in vec4 position ;
out vec2 tex_varying ;
uniform mat4 translate ;
void main ( ) 
{
  gl_Position = translate * position ;
  tex_varying = texture_coord . xy ;
}

Я прочитал документацию и не могу понять, что я делаю неправильно.

Вот код.

Vertex:

attribute vec4 position; 
attribute vec4 texture_coord; 
varying vec2 tex_varying; 
uniform mat4 translate; 

void main()
{ 
  gl_Position = translate * position; 
  tex_varying = texture_coord.xy;
}

Фрагмент:

varying vec2 tex_varying; 
uniform sampler2D texture; 

void main()
{
  gl_FragColor = texture2D(texture, tex_varying);
}

ПОСТАНОВИЛИ: Это поздний ответ, но я решил эту проблему очень давно - на тот случай, если кто-нибудь еще наткнется на эту проблему. Оказывается, "tex_varying" зарезервировано Nvidia! Простое переименование tex_varying решило проблему.

Приветствие.

1 Ответ

4 голосов
/ 24 февраля 2012

Ключевые слова in и out в том виде, в котором они отображаются, предназначены для GLSL v3 и более поздних версий.Для v1 (что вы пытаетесь использовать?) Вам нужно заменить in на attribute и out на varying в вершинном шейдере.В фрагментном шейдере замените in на varying, и вы не можете использовать out - вам нужно вывести на gl_FragColor, как вы, кажется, делаете.

Итак, ваш второй / третийшейдеры выглядят так, как будто вы правильно перевели код GLSL v3 в первом шейдере в GLSL v1, и похоже, что они должны работать с ES2 / GLSL v1

...