Почему в некоторых системах происходит сбой glEnableVertexAttribArray в зависимости от порядка вызовов? - PullRequest
0 голосов
/ 25 февраля 2012

Вчера я исследовал странный сбой в настройке моего объекта Vertex Buffer. Я только что переключился с простых цветов на текстуры, поэтому мой объект Vertex Buffer теперь содержит массив

struct VertexData { glm::vec4 pos; glm::vec2 texCoord; }

вместо

struct VertexData { glm::vec4 pos, color; }

На моей системе (чип Intel) все прошло гладко, но другая система с картой Radeon, использующей проприетарный драйвер Linux (fglrx), потерпела крах в настройке VBO. В конце концов мы отследили его до вызова glEnableVertexAttribArray и обнаружили, что

glEnableVertexAttribArray(1); //attribute location for texcoord
glEnableVertexAttribArray(0); //attribute location for position

работает, пока

glEnableVertexAttribArray(0); //attribute location for position
glEnableVertexAttribArray(1); //attribute location for texcoord

вылетает при первом звонке. (Обратите внимание, что расположение атрибутов поменяно местами во втором фрагменте.) Как получилось? Единственным объяснением, которое мне удалось найти, была ошибка драйвера, но это кажется мне маловероятным, потому что все другие приложения OpenGL работают. Или я что-то забыл сделать?

Для справки, я прилагаю соответствующую часть моего apitrace . На данный момент я настроил свой контекст, включил GL_DEPTH_TEST, GL_CULL_FACE и GL_TEXTURE_2D, загрузил некоторые текстуры и подготовил мою шейдерную программу (без явного вызова glBindAttribLocation).

glGetAttribLocation(3, in_Position) = 0
glGetAttribLocation(3, in_TexCoord) = 1

glGenVertexArrays(1, [1])
glBindVertexArray(1)

glGenBuffers(1, [1])
glBindBuffer(GL_ARRAY_BUFFER, 1)
glVertexAttribPointer(0, 4, GL_FLOAT, false, 0x18, NULL)
glVertexAttribPointer(1, 2, GL_FLOAT, false, 0x18, 0x10)
glEnableVertexAttribArray(0) <-- this crashes with AMD/ATI fglrx driver
glEnableVertexAttribArray(1)

(glBufferData вызывается позже в течение первого кадра.)

1 Ответ

1 голос
/ 25 февраля 2012

Это не должно произойти сбой.Скорее всего, вы обнаружили ошибку драйвера.Пожалуйста, сообщите об этом AMD, чтобы они могли это исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...