Вот моя вершинный шейдер:WebGL: drawArrays: attribs не установлен правильно
attribute vec3 aVertexPosition;
attribute vec4 aVertexColor;
attribute float type;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
varying vec4 vColor;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
vColor = aVertexColor;
if(type > 0.0) {
} else {
}
}
То, что я хочу сделать, это довольно просто, просто захватить значение с плавающей точкой с именем type
и использовать его для логики работает.
Проблема заключается в том, когда я пытаюсь использовать его в Javascript, ошибка приходит:
shaderProgram.textureCoordAttribute = gl.getAttribLocation(shaderProgram, "type");
gl.enableVertexAttribArray(shaderProgram.textureCoordAttribute);
WebGL: INVALID_OPERATION: drawArrays: attribs not setup correctly main.js:253
WebGL: INVALID_OPERATION: drawArrays: attribs not setup correctly main.js:267
WebGL: INVALID_OPERATION: drawElements: attribs not setup correctly
Выход getAttribLocation
имеет смысл, все они равны больше 0.
= ================ UPDATE ===================
Вот весь мой код проекта:
https://gist.github.com/royguo/5873503
Объяснение:
- index.html шейдеры скрипт здесь.
- main.js Запустите приложение WebGL и нарисуйте сцену.
- shaders.js Загрузите шейдеры и привяжите атрибуты.
- buffers.js Исходные вершинные и цветные буферы.
- utils.js Общие используемые утилиты.
Вы пытались использовать float вместо vec2? Кстати, использование ветвей, зависящих от атрибутов внутри вашего шейдера, является основным хитом производительности, я всегда стараюсь использовать математическую инструкцию вместо ветвей. – Marius
@Marius, Спасибо! Я изменил vec2 на float, но проблема все еще существует. 'INVALID_OPERATION' ... – MrROY
Ваш код выглядит правильно, ошибка должна быть где-то в другом месте. – Marius