Странная проблема. Похоже, моя программа GLSL ведет себя иначе, чем логика и спецификация. Вот верт-шейдер:
#version 120
uniform mat4 q;
varying vec2 TextureCoord;
void main()
{
gl_FrontColor = gl_Color;
gl_TexCoord[0] = gl_MultiTexCoord0;
vec4 p = q*gl_Vertex;
TextureCoord = vec2(.01f,.01f);
gl_Position= gl_ModelViewProjectionMatrix*p;
gl_PointSize = gl_Normal.x / -p.z;
}
А вот и фраг-шейдер:
#version 120
uniform sampler2D theTex;
varying vec2 TextureCoord;
void main()
{
vec2 realTexCoord = ( gl_TexCoord[0].st*vec2(0.024f,0.024f)) + TextureCoord;
gl_FragColor = gl_Color*texture2D(theTex, realTexCoord);
}
Морщина вот в чем. Если я удалю + TextureCoord во фраг-шейдере и заменю его какой-нибудь константой vec2, например (.1f,.1f), все в порядке, я вижу текстуру. Но вот так я просто получаю странный мусорный цветной шум. Это GL_POINTS с включенными точками сглаживания и заменой текстурных координат. Я использую TexCoord[0].st, потому что gl_PointCoord всегда равен нулю...
Похоже, что происходит то, что ненужные значения каким-то образом попадают в мои промежуточные значения. Но как это произойдет? И если эти значения каким-то образом «интерполируются» между вершинным и фрагментным шейдерами, какая логика применяется?
Я пытался отправить значения в униформе, но они тоже всегда равны нулю.
Я использую LWJGL.