2015-05-06 2 views
0

я ошибка пойманной что именно это:OpenGL жалуется на использование перечислений

Source=DEBUG_SOURCE_API Type=DEBUG_TYPE_ERROR ID=3200 Severity=DEBUG_SEVERITY_HIGH Message=Using glGetIntegerv in a Core context with parameter <pname> and enum '0xbb1' which was removed from Core OpenGL (GL_INVALID_ENUM) 
Source=DEBUG_SOURCE_API Type=DEBUG_TYPE_ERROR ID=3200 Severity=DEBUG_SEVERITY_HIGH Message=Using glGetIntegerv in a Core context with parameter <pname> and enum '0xd3b' which was removed from Core OpenGL (GL_INVALID_ENUM) 
OpenGL error occured: A GLenum argument was out of range. 

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

CLIENT_ATTRIB_STACK_DEPTH = 0xbb1 
MAX_CLIENT_ATTRIB_STACK_DEPTH = 0xd3b 

Однако после некоторых дополнительных исследований я обнаружил, что его даже более странным, чем я думал, потому что у меня есть что-то в моем коде, который останавливает отладчик в отладочной версии, когда произошла ошибка OpenGL.

#if DEBUG 
    Debug.HoldOnGLError(); 
#endif 

Это вставляется после каждого вызова OpenGL, но это не останавливает на glGetIntegerv, его остановку при случайном методе в основном некоторые glBindBuffer или glBindFramebuffer.

Я не знаю, почему возникают ошибки и будут рады любой идее.

Редактировать

Забыл упомянуть, что ошибка только появляется через какое-то время и только в режиме отладки в Visual Studio.

+0

Вы используете какие-то рамки, которые могли бы выполнять эти звонки? Это может помочь, если вы можете предоставить более подробную информацию о используемой платформе/среде/инструментах. В любом случае, если проверка ошибки запускается при первом вызове OpenGL, вы можете обойти его, вызвав 'glGetError()', чтобы сначала очистить состояние ошибки. –

+0

На самом деле мой собственный фреймворк, который отлично работает больше всего времени. Это C# с собственным заголовком. Использование Windows 7, AMD R9 290. Проблема заключается в том, что вызов появляется случайным образом при разных методах, которые вообще не делают значимости, а также не помогают при отладке. –

+2

Серьезно, кто это был, кто голосовал, чтобы закрыть этот вопрос? Это совершенно правильный вопрос OpenGL. Это не жалоба «мой код не работает». Ребята, если вы не поймете вопрос или, в случае сомнений, просто оставьте его. - ** Приобретено, потому что действительный вопрос по вопросу, который могут совершить и другие люди, и мы хотим, чтобы они нашли это и ответ, набрав его в поисковой системе выбора.** – datenwolf

ответ

2

Я узнал, что это не моя вина. Его вина AMD, на самом деле AMD-Gaming-Evolved использует старый код для своего наложения, это также причина, по которой он разбился через некоторое время, потому что наложение появляется через пару секунд.

Выход из клиента решает проблему.

1

Отладочные сообщения OpenGL (через обратный вызов) были введены только с OpenGL-4.3. Стек атрибута клиента (glPushClientAttrib и его друзья) - это функции OpenGL-1.1 и устарели с OpenGL-3 и доступны только в совместимости профилей. Если у вас есть контекст основного профиля, то соответствующие перечисления действительно недействительны для использования.

Что-то в вашей программе (библиотека или устаревший код) использует стек [client] атрибутов и тем самым вызывает эту ошибку. Вы должны найти, какая часть это, потому что стек атрибутов используется для сохранения и восстановления состояния OpenGL, и если этот код полагается на это, чтобы восстановить состояние OpenGL после его завершения, он может оставить контекст OpenGL в нежелательном состоянии.

То же самое касается и стека атрибутов (сервера) (glPushAttrib и друзей).

+0

Спасибо за ваш ответ. Как я уже сказал, я их не использую, а также не использую внешнюю библиотеку. Я все еще пытаюсь выяснить, почему это происходит. Возможно, это какая-то функция отладки в драйвере. Тем не менее anwer может помочь другим так +1. –

+0

Узнал, что это такое, это AMD-Gaming-Evolved. –

Смежные вопросы