Массивы Sampler2d и samplerCube в одном шейдере

Я пытаюсь построить шейдер (в glsl 1.0), который использует массив текстур sampler2d и массив текстур samplerCube. Странно, я не могу связать это (и я не могу получить сообщение об ошибке), если я чередую использование двух текстур. Методом проб и ошибок я нашел код, вызвавший проблему:

Это не скомпилировать:

  varying highp vec2 vTextureCoord;
  varying highp vec2 vTextureCoord2;
  varying lowp vec3 vLighting;
  varying lowp vec4 vColor;
  varying lowp vec3 vNormal;

#ifdef Textures\r\n"
  uniform sampler2D uSampler[Textures];
  uniform lowp vec2 texFlag[Textures];
  uniform lowp mat3 texMat[Textures];
  uniform lowp float tex_coord_set[Textures];
  uniform samplerCube uSamplerC[Textures];
#endif

  uniform lowp vec3 fogColor;
  varying lowp float fogBlend;

  void main(void) {
#ifdef Textures
    mediump vec4 pixColor = vColor;
    mediump vec3 SpecNormal = reflect(vec3(0.0,0.0,1.0), vNormal);
    mediump vec4 texelColor;
          pixColor += textureCube(uSamplerC[0], vNormal);
          pixColor += texture2D(uSampler[0], vec2(0.0,0.0));
          pixColor += textureCube(uSamplerC[1], vNormal);
          pixColor += texture2D(uSampler[1], vec2(0.0,0.0));
else
    mediump vec4 pixColor = vColor;
#endif

Но если я поставлю:

  pixColor += textureCube(uSamplerC[0], vNormal);
  pixColor += textureCube(uSamplerC[1], vNormal);
  pixColor += texture2D(uSampler[0], vec2(0.0,0.0));
  pixColor += texture2D(uSampler[1], vec2(0.0,0.0));

(помещая сначала все сэмплеры одного типа), кажется, связывает отлично. Зачем?

(примечание: этот код в текущей форме не имеет смысла, я использовал его только для выявления проблемы)

0 ответов

Другие вопросы по тегам