* Work around issues with depth-buffer size on EGL-based platforms
The OpenGL 1.1 and OpenGL ES 2.0 backends can break on EGL-based platforms,
such as Wayland, or X11 with SDL_VIDEO_FORCE_EGL=1. One of the reasons for
this (the other being glew on the GL1.1 backend) is that SDL/egl get very
confused by the way we set OpenGL attributes, particularly SDL_GL_DEPTH_SIZE,
resulting in SDL_GL_CreateContext() failing with EGL_BAD_MATCH.
The exact cause of this is unknown, but it seems to be a combination of:
- SDL_GL_SetAttribute() is supposed to be called _before_ the window is
created, and we're calling it afterward.
- Creating several test windows during the enumeration process, mixing
and matching between OpenGL and OpenGL ES profiles.
The "most correct" solution is probably to delay creating the game window
until the backend creation process, rather than before the enumeration
occurs. But that's a real refactor, which could cause other issues.
Instead, set the 24-bit bit depth (which we've hardcoded anyway) before
creating the window, and use SDL_GL_ResetAttributes() when creating backends.
This seems to work here in all of the cases I was able to try (modulo the GLEW
dependency, which is removed in the next patch).
* miniwin: Remove GLEW dependency for OpenGL 1.1
GLEW normally backs directly onto glXGetProcAddress on Linux, which is broken
on non-GLX setups, such as Wayland (but also X11 with EGL, and presumably KMSDRM).
Replace it with manual calls to SDL_GL_GetProcAddress() for the VBO path.
Note, however, that SDL_opengl.h includes "windows.h", so conflicts with the
miniwin implementation, which breaks builds on windows.
In order to work around this, we do what the Direct3D9 implementation does and
push all of the OpenGL calls to a separate file, actual.cpp.
Going forward, it may make sense to load _all_ OpenGL entry points via SDL,
which would allow us to avoid linking directly with libGL/libOpenGL, and
therefore eliminate the separate build dependency altogether, as well as
allowing more runtime configurability as to the OpenGL library to load.
(But that's definitely a bit uglier, and also useful very rarely.)
* Make Infocenter compatible with 1.0 versions
* Fix
* Emscripten patch
* Fix
* Fix Emscripten patch
* Window title
* Naming
* Don't exit car build automatically in 1.0
* Disable character selection by clicking icon in 1.0
* Remove obsolete includes
* Show imgui window when starting app with --debug
* g_closed test in SDL_AppIterate is still needed
* Allow disabling isleapp debugging by configuring with -DISLE_DEBUG=OFF
* clang-format
* isleapp: Show error dialog if NOCD.si fails to load
* isleapp: Return bool in IsleApp::Tick
foxtacles recommended me to return a boolean for if tick failed
instead of just setting `g_closed` and setting `g_closeResult`
to set the return value of the program exit.
I also think this is the better solution. since a similar solution
was used in LoadConfig.
* isleapp: Better error logs & return false in places
foxtacles recommended to use SDL's logging api to show detailed errors
and using false in two places where it should exit because of failure.
This commit adds these two things.
* isleapp: Add missing error dialog when ISLE.si fails
* isleapp: Add missing error dialog when ISLE.si fails
* isleapp: Remove weird duplicate message box
* Move error dialog to loop
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* isleapp/res: Add icon.h
* isleapp: Set icon on non-windows systems
* isleapp: Fix formating to match with .clang-format
* isleapp: Remove _WIN32 ifdefs
This is closer to the original code. I thought it would let Windows
set the icon itself not set the icon upon window creation.
* isleapp: Load internal .BMP instead of raw pixels
This should fix the endianess problem I mentioned in the PR.
* isleapp: Only load icon from IOStream if it's valid
* isleapp: Disable format checking in ISLE/res/
* ISLE/res/resource.h: Prevent recursive inclusion
* ISLE: Remove isle.h from resource.h
also rename isle.h to isle_bmp.h
* isleapp: Fix formatting