Объявление определенных переменных в шейдере заставляет его перестать работать?(GLSL) - PullRequest
0 голосов
/ 30 мая 2011

Я использую GLSL.

У меня есть простой фрагментный шейдер:

 "uniform sampler2D backBuffer;",
 "uniform float r;",
 "uniform float g;",
 "uniform float b;",
 "uniform float ratio;",
 "void main() {",
 "  vec4 color;",
 "  float avg, dr, dg, db, multiplier;",
 "  color = texture2D(backBuffer, vec2(gl_TexCoord[0].x * 1,gl_TexCoord[0].y * 1));",
 "  avg = (color.r + color.g + color.b) / 3.0;",
 "  dr = avg * r;",
 "  dg = avg * g;",
 "  db = avg * b;",
 "  color.r =  color.r * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
"   color.g =  color.g * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
"   color.b =  color.b * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
 "  gl_FragColor = color;",
 "}"

Теперь все работает отлично.

Однако, по какой-то очень странной причине, добавление любых других переменных, таких как vec2 или float, не влияет на мою сцену:

 "uniform sampler2D backBuffer;",
 "uniform float r;",
 "uniform float g;",
 "uniform float b;",
 "uniform float ratio;",
 "void main() {",
 "  vec4 color;",
 "  float avg, dr, dg, db, multiplier;",
 "  vec2 divisors;",
 "  color = texture2D(backBuffer, vec2(gl_TexCoord[0].x * 1,gl_TexCoord[0].y * 1));",
 "  avg = (color.r + color.g + color.b) / 3.0;",
 "  dr = avg * r;",
 "  dg = avg * g;",
 "  db = avg * b;",
 "  color.r =  color.r * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
"   color.g =  color.g * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
"   color.b =  color.b * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
 "  gl_FragColor = color;",
 "}"

В этом я добавил vec2, называемый делителями, это все, что я сделал, и шейдер больше ничего не делает с пикселями.

Почему это? Есть ли что-то, чего я не понимаю относительно объявления переменных в GLSL?

Спасибо

1 Ответ

2 голосов
/ 01 июня 2011

Я заметил, что каждая строка - это строка в кавычках, разделенная запятыми.В C / C ++ вы обычно просто сопоставляете строки в кавычках при создании одной большой строки, поэтому мне интересно, если вы делаете что-то странное, например, инициализируете массив строк и не учитываете, что его размер изменился после добавления новой строки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...