opengl glDrawArray выдает исключение - PullRequest
1 голос
/ 02 июня 2011

Я новичок в openGL и мне нужно напрямую использовать его для отладки perpose. Может кто-нибудь подсказать, почему в этом коде glDrawArray должен выдавать исключение (при попытке доступа к памяти по адресу 0x00000000)

glEnableClientState(GL_VERTEX_ARRAY);
float data[8];
data[0] = 10;
data[1] = 10; 
data[2] = 10;
data[3] = 20; 
data[4] = 20;
data[5] = 20; 
data[6] = 20;
data[7] = 10; 
glVertexPointer(2,GL_FLOAT,0,data);
glDrawArrays(GL_LINE_LOOP,0,4);
glDisableClientState(GL_VERTEX_ARRAY);

Ответы [ 3 ]

4 голосов
/ 02 июня 2011

Ваш glDrawArrays вызов эквивалентен:

glBegin(GL_LINE_LOOP);
glVertex2fv(data +  0);
glVertex2fv(data +  2);
glVertex2fv(data +  4);
glVertex2fv(data +  6);
glVertex2fv(data +  8);
glVertex2fv(data + 10);
glVertex2fv(data + 12);
glVertex2fv(data + 14);
glEnd();

Итак, вы определенно пытаетесь получить доступ к некоторой памяти за пределами data.

2 голосов
/ 02 июня 2011

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

РЕДАКТИРОВАТЬ: : Может также оказаться, что код, который вы нам показали, не является реальным кодом, и вы вызываете glVertexPointer в совершенно ином месте, чем glDrawArrays.Когда вы указываете data в качестве указателя вершины, вы только говорите ему брать вершины из data, когда вызывается glDrawArrays.Данные вершин не копируются, поэтому data должен существовать при вызове glDrawArrays (в данный момент это локальная переменная, но с предоставленным вами фрагментом кода это должно работать).

РЕДАКТИРОВАТЬ: Я также предполагаю, что вы не используете какие-либо объекты буфера, поскольку это также может быть проблемой, если буфер вершин связан при вызове glVertexPointer.

0 голосов
/ 02 июня 2011

Попробуйте:

glDrawArrays(GL_LINE_LOOP,0,4);

При вызове glVertexPointer () вы говорите, что каждая вершина имеет два числа с плавающей точкой. Но при вызове glDrawArrays () вы не указываете количество элементов в массиве, вы указываете количество координат, в данном случае их четыре.

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