Я пытаюсь запустить OpenGL ES 2.0 с использованием (Google) Angle на Windows 7, однако независимо от того, где я его разместил, glGetError()
бесконечно возвращает GL_INVALID_OPERATION
. Мне говорят, что это происходит, когда нет контекста, однако я использую EGL, который не вызывает ошибок.glGetError() всегда возвращает GL_INVALID_OPERATION после успешного получения контекста
Я положил assert(eglGetError() == EGL_SUCCESS)
после каждого утверждения EGL только для проверки, и ошибок не было.
Однако это не вешает программу, независимо от того, где я положил его, даже прямо после eglMakeCurrent()
:
while((err = glGetError()) != GL_NO_ERROR) {
...
}
Вот мой код установки EGL (window
является HWND
):
mainDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
if(mainDisplay == EGL_NO_DISPLAY) {
...
}
if(eglInitialize(mainDisplay, NULL, NULL) != EGL_TRUE) {
...
}
eglBindAPI(EGL_OPENGL_ES_API);
EGLConfig bestConfiguration;
EGLint numConfigurationsAvailable;
if(!eglChooseConfig(mainDisplay, openGLConfigurationAttributes, &bestConfiguration, 1, &numConfigurationsAvailable)) {
...
}
const EGLint surfaceBaseAttributes[] = { EGL_NONE };
displaySurface = eglCreateWindowSurface(mainDisplay, bestConfiguration, window, surfaceBaseAttributes);
if(displaySurface == EGL_NO_SURFACE) {
...
}
const EGLint contextBaseAttributes[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
openGLContext = eglCreateContext(mainDisplay, bestConfiguration, EGL_NO_CONTEXT, contextBaseAttributes);
if(openGLContext == EGL_NO_CONTEXT) {
...
}
if(eglMakeCurrent(mainDisplay, displaySurface, displaySurface, openGLContext) != EGL_TRUE) {
...
}
Итак, возьмите это с зерном соли, потому что я на самом деле не специалист по этому кросс-платформенной OpenGL вещи. Но я понял, что ANGLE интегрирован в SDL2? И поэтому мне достаточно использовать SDL2 и запросить контекст opengles2 из SDL2 и когда он находится на окнах, ANGLE будет неявно использоваться? На форумах SDL2 есть несколько сообщений об этом: https://forums.libsdl.org/viewtopic.php?t=11315&sid=b2aab02965553c7d56c4914ee9d2f18d https://forums.libsdl.org/viewtopic.php?t=10236&sid=8783661a52151c6a1f9e199369717343 Это может не ответить на ваш вопрос, но он может помочь anyways –
@Chris - В поисках ответа на мой вопрос, я видел сообщения, в которых упоминается, что одна версия SDL SOMETIMES использует Angle, но не всегда. Я не хочу его использовать, поскольку мне не нравятся дополнительные зависимости и не требуются другие предложения SDL. EGL идеально подходит для меня, предполагая, что я могу заставить его работать. Худший случай: мне нужно вернуться в WGL + XGL для кросс-платформенной – Warpspace
. Вы можете попробовать посмотреть код SDL, хотя, как они взаимодействуют с Angle –