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

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

1 ответ

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, у этих функций нет контекста, и вы можете рассматривать эту ситуацию как специализацию пункта 1.

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

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

Другие вопросы по тегам