doom2d.org https://www.doom2d.org/forum/ |
|
[0.667b] SDL_GL_GetProcAddress() вместо модулей GL / GLext https://www.doom2d.org/forum/viewtopic.php?f=36&t=3330 |
Page 1 of 1 |
Author: | Чёрный Думер [ 19 Mar 2024, 15:53 ] |
Post subject: | [0.667b] SDL_GL_GetProcAddress() вместо модулей GL / GLext |
Заметил одну проблему с нынешним порядком использования OpenGL. Не знаю, осталась ли она в renders_updated или нет. Суть её в том, что сейчас для работы с OpenGL мы используем стандартные модули GL и GLext. Они подключаются в /nogl/noGLuses.inc, который в свою очередь, несмотря на название, включается в e_graphics.pas. Однако модуль GL загружает библиотеку opengl и получает адреса функций оттуда непосредственно в секции initialization, то есть задолго до создания самого окна и контекста OpenGL. Это работает в GLX, но под Windows такое противоречит семантике WGL, где указатели на функции OpenGL специфичны для конкретного контекста и потому должны получаться сугубо при нахождении в нём. Именно поэтому в SDL существует функция SDL_GL_GetProcAddress() (по ссылке есть более подробное пояснение по особенностям семантики поведения в Windows). Особенного внимания заслуживает вот эта ремарка, которую я здесь даже процитирую: Quote: This is (currently) a Windows-specific limitation, and in practice lots of drivers don't suffer this limitation, but it is still the way the wgl API is documented to work and you should expect crashes if you don't respect it. Заметил я эту проблему, запустив игру под Windows через gDEBugger 5.8.1, который её частично ловит: Quote: Debug String: Detected error: The debugged process asked for an extension function pointer (wglChoosePixelFormatARB) from one render context, but called this function pointer in another render context (context #2) Debug String: Detected error: The debugged process asked for an extension function pointer (wglGetPixelFormatAttribivARB) from one render context, but called this function pointer in another render context (context #2) Ещё вот описанное здесь может оказаться полезным: wglGetProcAddress is broken · Issue #282 · opentk/opentk - GitHub К слову, у меня почему-то ощущение, что DeaDDooMER тему написания собственного загрузчика OpenGL уже поднимал, вот только я сейчас не могу вспомнить, когда и где именно. |
Author: | DeaDDooMER [ 19 Mar 2024, 19:40 ] |
Post subject: | Re: [System] SDL_GL_GetProcAddress() вместо модулей GL / GLe |
Не, я даже не задумывался об этом. Возможно это был кто-то другой. Встроенные в фпц бинды экспортируют LoadOpenGL / FreeOpenGL. Можно их вставить куда следует. Или скопипастить их в реп и пропатчить под себя, если надо юзать именно SDL_GL_GetProcAddress. |
Author: | Чёрный Думер [ 19 Mar 2024, 20:16 ] |
Post subject: | Re: [System] SDL_GL_GetProcAddress() вместо модулей GL / GLe |
DeaDDooMER» Встроенные в фпц бинды экспортируют LoadOpenGL / FreeOpenGL. Можно их вставить куда следует. Не уверен, что это подходящий вариант, потому что есть и такое: SDL_GL_LoadLibrary(). Зачем - не очень хорошо понимаю. DeaDDooMER» Или скопипастить их в реп и пропатчить под себя, если надо юзать именно SDL_GL_GetProcAddress. Да вот по идее имеет смысл уже писать свою загружалку, ага. Чтобы строго OpenGL 1.1 (или даже 1.0, лол) плюс необходимые расширения. По крайней мере пока. |
Author: | DeaDDooMER [ 20 Mar 2024, 20:13 ] |
Post subject: | Re: [0.667b] SDL_GL_GetProcAddress() вместо модулей GL / GLe |
Дополнение: подобная проблема может быть и в редакторе. |
Page 1 of 1 | All times are UTC + 3 hours |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |