Skip to content

Commit

Permalink
Boxedwine OpenGL ES will now build with NO_INIT_CONSTRUCTOR flags for…
Browse files Browse the repository at this point in the history
… gl4es, this will prevent the initialize_gl4es function from running before main. Now I will call initialize_gl4es after the game/app creates the context so that gl4es can query the hardware during its init function.
  • Loading branch information
danoon2 committed Sep 1, 2021
1 parent 5174701 commit bec9c05
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 20 deletions.
2 changes: 1 addition & 1 deletion lib/gl4es/src/gl/init.c
Expand Up @@ -720,7 +720,7 @@ void close_gl4es() {
#endif
}

#if defined(BUILD_WINDOWS_DLL) || defined(BOXEDWINE_MSVC)
#if defined(BUILD_WINDOWS_DLL)
#if !defined(_MSC_VER) || defined(__clang__)
__attribute__((constructor(103)))
#endif
Expand Down
4 changes: 2 additions & 2 deletions project/msvc/BoxedWine/BoxedWine/BoxedWine.vcxproj
Expand Up @@ -229,7 +229,7 @@
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>NOEGL;BOXEDWINE_OPENGL_ES;NOX11;NO_GBM;BOXEDWINE_HAS_OPENGL_MESA;BOXEDWINE_DYNAMIC32;BOXEDWINE_DYNAMIC;BOXEDWINE_UI_LAUNCH_IN_PROCESS;BOXEDWINE_HIGHDPI;POCO_UTIL_NO_JSONCONFIGURATION;POCO_UTIL_NO_XMLCONFIGURATION;POCO_NO_AUTOMATIC_LIBS;GLEW_STATIC;BOXEDWINE_MIDI;BOXEDWINE_RECORDER;LOG_SYSCALLS;BOXEDWINE_HAS_SETJMP;BOXEDWINE_ZLIB;GLH=&lt;sdl_opengl.h&gt;;BOXEDWINE_MSVC;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>BOXEDWINE_IMGUI_DX9;NO_INIT_CONSTRUCTOR;NOEGL;BOXEDWINE_OPENGL_ES;NOX11;NO_GBM;BOXEDWINE_HAS_OPENGL_MESA;BOXEDWINE_DYNAMIC32;BOXEDWINE_DYNAMIC;BOXEDWINE_UI_LAUNCH_IN_PROCESS;BOXEDWINE_HIGHDPI;POCO_UTIL_NO_JSONCONFIGURATION;POCO_UTIL_NO_XMLCONFIGURATION;POCO_NO_AUTOMATIC_LIBS;GLEW_STATIC;BOXEDWINE_MIDI;BOXEDWINE_RECORDER;LOG_SYSCALLS;BOXEDWINE_HAS_SETJMP;BOXEDWINE_ZLIB;GLH=&lt;sdl_opengl.h&gt;;BOXEDWINE_MSVC;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\..\lib\gl4es\include;..\..\..\..\lib\soloud\include;..\..\..\..\include;..\..\..\..\lib\glew\include;..\..\..\..\lib\imgui;..\..\..\..\lib\poco\Net\include;..\..\..\..\lib\poco\Foundation\include;..\..\..\..\lib\poco\NetSSL_Win\include;;..\..\..\..\lib\poco\Util\include</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
Expand Down Expand Up @@ -323,7 +323,7 @@
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>NOEGL;BOXEDWINE_OPENGL_ES;NOX11;NO_GBM;BOXEDWINE_OPENGL_OSMESA;__WINDOWS_WASAPI__;BOXEDWINE_IMGUI_DX9;BOXEDWINE_UI_LAUNCH_IN_PROCESS;BOXEDWINE_BINARY_TRANSLATOR;BOXEDWINE_HIGHDPI;POCO_UTIL_NO_JSONCONFIGURATION;POCO_UTIL_NO_XMLCONFIGURATION;POCO_NO_AUTOMATIC_LIBS;GLEW_STATIC;BOXEDWINE_X64;BOXEDWINE_MULTI_THREADED;BOXEDWINE_MIDI;BOXEDWINE_RECORDER;BOXEDWINE_64;BOXEDWINE_ZLIB;GLH=&lt;sdl_opengl.h&gt;;BOXEDWINE_HAS_SETJMP;BOXEDWINE_MSVC;BOXEDWINE_64BIT_MMU;_NO_DEBUG_HEAP=0;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>BOXEDWINE_IMGUI_DX9;NO_INIT_CONSTRUCTOR;NOEGL;BOXEDWINE_OPENGL_ES;NOX11;NO_GBM;BOXEDWINE_OPENGL_OSMESA;__WINDOWS_WASAPI__;BOXEDWINE_IMGUI_DX9;BOXEDWINE_UI_LAUNCH_IN_PROCESS;BOXEDWINE_BINARY_TRANSLATOR;BOXEDWINE_HIGHDPI;POCO_UTIL_NO_JSONCONFIGURATION;POCO_UTIL_NO_XMLCONFIGURATION;POCO_NO_AUTOMATIC_LIBS;GLEW_STATIC;BOXEDWINE_X64;BOXEDWINE_MULTI_THREADED;BOXEDWINE_MIDI;BOXEDWINE_RECORDER;BOXEDWINE_64;BOXEDWINE_ZLIB;GLH=&lt;sdl_opengl.h&gt;;BOXEDWINE_HAS_SETJMP;BOXEDWINE_MSVC;BOXEDWINE_64BIT_MMU;_NO_DEBUG_HEAP=0;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\..\..\lib\gl4es\include;..\..\..\..\lib\soloud\include;..\..\..\..\include;..\..\..\..\lib\glew\include;..\..\..\..\lib\imgui;..\..\..\..\lib\poco\Net\include;..\..\..\..\lib\poco\Foundation\include;..\..\..\..\lib\poco\NetSSL_Win\include;;..\..\..\..\lib\poco\Util\include</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
Expand Down
39 changes: 22 additions & 17 deletions source/opengl/sdl/sdlgl.cpp
Expand Up @@ -131,7 +131,29 @@ extern "C" {

void glExtensionsLoaded();

#ifdef BOXEDWINE_MSVC
#define ES_API _stdcall
#else
#define ES_API
#endif

#ifdef BOXEDWINE_OPENGL_ES
extern "C" {
void set_getprocaddress(void* (ES_API* new_proc_address)(const char*));
void initialize_gl4es();
}
typedef const GLubyte* (*PFNGETSTRING)(GLenum);
static void* ES_API loadES(const char* name) {
return SDL_GL_GetProcAddress(name);
}
#endif

void loadSdlExtensions() {
#ifdef BOXEDWINE_OPENGL_ES
// context is already created by this point which initialize_gl4es needs
set_getprocaddress(loadES);
initialize_gl4es();
#endif
if (!sdlOpenExtensionsLoaded) {
sdlOpenExtensionsLoaded = true;
#include "../glfunctions.h"
Expand Down Expand Up @@ -218,30 +240,13 @@ static void sdl_glXSwapBuffers(CPU* cpu) {
#undef GL_EXT_FUNCTION
#define GL_EXT_FUNCTION(func, RET, PARAMS)

#ifdef BOXEDWINE_MSVC
#define ES_API _stdcall
#else
#define ES_API
#endif

#ifdef BOXEDWINE_OPENGL_ES
extern "C" {
void set_getprocaddress(void* (ES_API* new_proc_address)(const char*));
}
static void* ES_API loadES(const char* name) {
return SDL_GL_GetProcAddress(name);
}
#endif
void initSdlOpenGL() {
if (BoxedwineGL::current != &sdlBoxedwineGL) {
BoxedwineGL::current = &sdlBoxedwineGL;
sdlOpenExtensionsLoaded = false;
#include "../glfunctions.h"
}

#ifdef BOXEDWINE_OPENGL_ES
set_getprocaddress(loadES);
#endif
int99Callback[Finish] = sdl_glFinish;
int99Callback[Flush] = sdl_glFlush;
int99Callback[XCreateContext] = sdl_glXCreateContext;
Expand Down

0 comments on commit bec9c05

Please sign in to comment.