GL_INVALID_OPERATION, о котором сообщает glVertexPointer, даже если вызвано glEnableClientState (GL_VERTEX_ARRAY)

У меня проблемы с домашней работой, которая использует OpenGL 2.0 pipeline, Проблема в том, что я получаю и GL_INVALID_OPERATION (ошибка 1282), когда я пытаюсь настроить glVertexPointer,

Я не могу найти в Интернете очень много к чему эта ошибка, но из того, что я понимаю, эта ошибка вызвана не вызовом glEnableClientState(GL_VERTEX_ARRAY) перед звонком glVertexPointer,

Вот мой код для вызова обеих функций:

glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(4, GL_DOUBLE, sizeof(vert), (void *)0);

Я проверил, если ошибка существует до вызова glVertexPointer и glError возвращает 0 до окончания вызова этой функции. Кажется, что ошибка вызвана чем-то другим. Какие еще сценарии могут вызвать эту проблему?

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

0

Решение

gl___Pointer (...) никогда не будет генерировать GL_INVALID_OPERATION ошибка просто потому, что соответствующее состояние клиентского массива с фиксированной функцией не включено. Это состояние используется, когда вы делаете вызов glDrawElements (...), Указывать этот указатель не является ошибкой, пока указатель массива отключен.

Это, однако, ошибка (которая приведет к GL_INVALID_OPERATION) выполнить вызов указателя вершины при следующих трех обстоятельствах:

  1. У вас нет активного контекста рендеринга в вашей вызывающей ветке
  2. Вы используете основной контекст OpenGL 3.2 и не привязаны к объекту Vertex Array
  3. У вас есть основной контекст OpenGL 3.2, и вы вызываете устаревшую функцию

Точки 2 и 3 будут применяться к этому конкретному вызову API, если у вас базовый контекст 3.2+. Vertex Array Objects — фактически дополнительный контекст, к которому относятся все привязки вершинного буфера, указатель массива и вызовы draw. В ядре OpenGL 3.2, если у вас нет привязанного объекта Vertex Array Object, у этих функций нет контекста, и вы можете рассматривать эту ситуацию как специализацию пункта 1.

Это также неопределенная операция для вызова glVertexPointer (...) между парой glBegin (...) а также glEnd (...) звонки. Реализация может или не может сгенерировать ошибку в этих условиях GL_INVALID_OPERATION. Это относится к подавляющему большинству вызовов API OpenGL, если он не имеет ничего общего с указанием данных вершин в непосредственном режиме, то он не принадлежит glBegin (...) а также glEnd (...),

Реальные справочные страницы API (т.е. glVertexPointer (...)никогда не упоминайте ни о одной из трех ситуаций, которые я изложил выше. GL_INVALID_OPERATION одна из тех ошибок, как GL_OUT_OF_MEMORY это имеет неявное значение и может быть сгенерировано целым классом вызовов API, даже не упомянутых на страницах руководства. Вы должны ознакомиться с наиболее распространенными причинами GL_INVALID_OPERATION в качестве таких.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]