У меня проблемы с домашней работой, которая использует 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 до окончания вызова этой функции. Кажется, что ошибка вызвана чем-то другим. Какие еще сценарии могут вызвать эту проблему?
Я прошу прощения за несколько сухой вопрос; Я просто не знаю, что еще могу предоставить. Если вам нужно увидеть другие сегменты кода, пожалуйста, дайте мне знать, что я могу предоставить.
gl___Pointer (...)
никогда не будет генерировать GL_INVALID_OPERATION ошибка просто потому, что соответствующее состояние клиентского массива с фиксированной функцией не включено. Это состояние используется, когда вы делаете вызов glDrawElements (...)
, Указывать этот указатель не является ошибкой, пока указатель массива отключен.
Это, однако, ошибка (которая приведет к GL_INVALID_OPERATION) выполнить вызов указателя вершины при следующих трех обстоятельствах:
Точки 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 в качестве таких.
Других решений пока нет …