OpenGL ES 2.0: атрибут не привязан к вершинному шейдеру - PullRequest
1 голос
/ 01 декабря 2010

Я разрабатываю приложение для Android.

У меня есть следующий вершинный шейдер.

"attribute vec4 vertexPosition; 
attribute vec4 vertexNormal; 
attribute vec2 vertexTexCoord; 

varying vec2 texCoord; 
varying vec4 normal; 

uniform mat4 modelViewProjectionMatrix; 

void main() 
{ 
   gl_Position = modelViewProjectionMatrix * vertexPosition; 
   normal = vertexNormal; 
   texCoord = vertexTexCoord; 
} 
";

А это фрагментный шейдер:

precision mediump float; 

varying vec2 texCoord; 
varying vec4 normal; 

uniform sampler2D texSampler2D;

void main()
{ 
   gl_FragColor = texture2D(texSampler2D, texCoord); 
} 
";

Есть ли проблема, если я оставил vertexTexCoord несвязанным? Я думаю, что я должен использовать другой вершинный и фрагментный шейдер, если моя модель не имеет текстуры, не так ли?

Спасибо.

1 Ответ

1 голос
/ 01 декабря 2010

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

В связи с этим документация OpenGL гласит:

Активные атрибуты, которые не связаны явно, будут связаны компоновщиком, когда glLinkProgramназывается.Назначенные местоположения могут быть запрошены путем вызова glGetAttribLocation.

Так что, если атрибуты вершин включены, он попытается получить vertexTexCoord из одного из атрибутов.Я не уверен, что произойдет, если будет включено не более количества атрибутов, необходимых для неструктурированной модели, и вы не должны полагаться на подобные вещи.Используйте другой шейдер.

...