SFML и OpenGL вызывают GL_INVALID_OPERATIONS при вызове функции рисования - PullRequest
0 голосов
/ 10 ноября 2019

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

Вот некоторые изСообщения об ошибках Я получаю каждый кадр от вызова функции рисования SFML:

Warning: The created OpenGL context does not fully meet the settings that were requested
Requested: version = 4.4 ; depth bits = 24 ; stencil bits = 8 ; AA level = 1 ; core = false ; debug = false ; sRGB = false
Created: version = 4.5 ; depth bits = 24 ; stencil bits = 8 ; AA level = 4 ; core = true ; debug = false ; sRGB = false
An internal OpenGL call failed in RenderTarget.cpp(369).
Expression:
   GLEXT_glClientActiveTexture(GLEXT_GL_TEXTURE0)
Error description:
   GL_INVALID_OPERATION
   The specified operation is not allowed in the current state.

An internal OpenGL call failed in RenderTarget.cpp(375).
Expression:
   glDisable(GL_LIGHTING)
Error description:
   GL_INVALID_ENUM
   An unacceptable value has been specified for an enumerated argument.

An internal OpenGL call failed in RenderTarget.cpp(377).
Expression:
   glDisable(GL_ALPHA_TEST)
Error description:
   GL_INVALID_ENUM
   An unacceptable value has been specified for an enumerated argument.

An internal OpenGL call failed in RenderTarget.cpp(378).
Expression:
   glEnable(GL_TEXTURE_2D)
Error description:
   GL_INVALID_ENUM
   An unacceptable value has been specified for an enumerated argument.

An internal OpenGL call failed in RenderTarget.cpp(380).
Expression:
   glMatrixMode(GL_MODELVIEW)
Error description:
   GL_INVALID_OPERATION
   The specified operation is not allowed in the current state.

An internal OpenGL call failed in RenderTarget.cpp(381).
Expression:
   glEnableClientState(GL_VERTEX_ARRAY)
Error description:
   GL_INVALID_OPERATION
   The specified operation is not allowed in the current state.

Я просто рисую спрайты и текстуры на экране меню, и кажется, что даже функции OpenGL для рисования также выдают ошибки. Вот ссылка на мой репозиторий github: https://github.com/ZzkilzZ/mfengine

Я использую версию Ubuntu LTS на обоих моих компьютерах, и я думаю, что это может быть расхождение в версиях определенных зависимостей?

РЕДАКТИРОВАТЬ: Это мои результаты glxinfo:

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 19.0.8
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 19.0.8
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 19.0.8
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10
OpenGL ES profile extensions:

Я использую Ubuntu 18.4 LTS

Ответы [ 2 ]

0 голосов
/ 10 ноября 2019

Спасибо @SurvivalMachine и @derhass за вашу помощь! В конце концов я опустил версию opengl до версии 3.0, а glsl - до 130 ядер и снова заработал экран меню. Он загружает все, кроме шейдеров, но я подозреваю, что это результат использования более современных функций. Я отказываюсь от старых компьютеров, это кажется слишком большой жертвой только для компьютеров 2015 года: D

0 голосов
/ 10 ноября 2019

Вы создаете контекст профиля ядра OpenGL, но в коде используются устаревшие вещи с фиксированными функциями, такие как glDisable(GL_LIGHTING). Решение состоит в том, чтобы запросить профиль совместимости при создании контекста. Это зависит от вашей реализации OpenGL, если профиль совместимости доступен. Я предлагаю вам найти более современный пример кода.

Похоже, что профиль совместимости может быть установлен в SFML sf::ContextSettings::attributeFlags или

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR,4);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR,5);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_COMPAT_PROFILE);
...