OpenGL ES 2.0:атрибут не привязан к вершинному шейдеру

StackOverflow https://stackoverflow.com/questions/4328169

Вопрос

Я разрабатываю приложение для 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 несвязанным?Я думаю, мне придется использовать другой вершинный и фрагментный шейдер, если у моей модели нет текстуры, не так ли?

Спасибо.

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top