* 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.)
* d3drm: store LPVOID data instead of DWORD
* m_extraCharacterId is an integer, not a pointer
* cmake: look for iniparser using config file first, then try our custom module file
Our custom module file is still useful.
My linux distro does not package the cmake files.
* x86's stdcall becomes MS's x64 calling canvention
* Fix 64-bit mxdsbuffer pointer arithmetic
* Casting from void* to a smaller-sized integer needs an intermediate equally-sized integer
* Don't cast address to scalar (this is fishy)
* Add mingw64 build to the ci matrix
* Ignore -Wdiscarded-qualifiers warning with const vtables
* Ignore different 'const' qualifiers with MSVC
* Create d3dxof import library for MSVC
* DESCRIPTION in .def file(s) is deprecated
* Assume mmx is supported on x64, require a test for x86 and disabled on other archs
* 32- and 64-bit LEGO1.dll export different symbol names
* Introduce d3drm_guid containing the guids of d3drm
* Disable __wine_dbg_cdecl
* Include d3drm directory with EXCLUDE_FROM_ALL
* lego1 leaks d3drm headers
* Add dxfile.h
* Add 64-bit MSVC to the build matrix
* cmake: using ISLE_USE_DX5 means going all-in
* Load d3dxof.dll dynamically
* cmake: don't emit a warning about bitness anymore
* Fix engineConfig declaration crossing jump
This fixes the following error:
```
/src/isle-portable/LEGO1/omni/src/audio/mxsoundmanager.cpp: In member function 'virtual MxResult MxSoundManager::Create(MxU32, MxBool)':
/src/isle-portable/LEGO1/omni/src/audio/mxsoundmanager.cpp:119:1: error: jump to label 'done'
119 | done:
| ^~~~
/src/isle-portable/LEGO1/omni/src/audio/mxsoundmanager.cpp:78:22: note: from here
78 | goto done;
| ^~~~
/src/isle-portable/LEGO1/omni/src/audio/mxsoundmanager.cpp:84:26: note: crosses initialization of 'ma_engine_config engineConfig'
84 | ma_engine_config engineConfig = ma_engine_config_init();
| ^~~~~~~~~~~~
```
* Fix 'invalid conversion from 'SDL_FunctionPointer' {aka 'void (*)()'} to 'void*'
* /SAFESEH:NO is a VC thing
* SDL3 is still instable
* Cannot forward declare and use enum
* Remove MusicManager from public LEGO1.DLL interface
* Copy d3d from wine git 6c5d17af07a318d754c0c21023b2d162a0d3725d
* Build d3drm-wine with 32-bit mingw
* cmake: move 3rd party targets to cmake script in 3rdparty directory
* cmake: bump minimum required CMake version to 3.25 to allow adding a subproject with SYSTEM automatically applied
An alternative would be to use SYSTEM in target_include_directories in the 3rd party cmake script.
* Add a minimal Findiniparser.cmake (not all distributions carry the upstream iniparser-config.cmake files)
* Add wine's d3drm headers
* cmake: merge ISLE_USE_DX5_LIBS into ISLE_USE_DX5
* cmake: Build all shared libraries in the binary output directory (to avoid PATH issues)
* ci: enable msys2 mingw32 build
* Disable clang-tidy on d3drm wine
* Thread functions must have SDLCALL call convention
* cmake: disable clang-tidy for miniaudio and libsmacker as well
* Hopefully fix c++ format and skip ncc naming violation
* clang-format violations keep up popping out of nowhere
* No need for lego/legoomni/include
* ncc: define SDLCALL as empty instead
* mxdirectdraw: no need to explicitly add a terminating '\0' in C
* mxstopwatch must include LIMITS.H for ULONG_MAX
* Add Config app
* 88.78%
* style fixes
* Test more CONFIG things
* Add a few assertions on MFC classes
* reformat
* actionSSSSSSSSSSSSSSS
* actions again
* decomplint needed a shebang
* Fix annotations of Message Map entries
* ci: We're building CONFIG.EXE, not CONFIG.DLL
* remove ninja.exe
* Fix CAboutDialog::GetMessageMap annotation
* format reloaded
* Fix global CConfigApp object annotation
* trigger worflows
* ci: request at least python 3
* oops :)
* curl CONFIGPROGRESS-OLD.TXT will fail
* Forget about actions/setup-python (for now)
* Annotation fixes
* Config tweaks and MxDirect3d annotations
* It's important to compare against the correct file
* Introduce common CDialog parent for CAboutDialog and CMainDialog
* format
* Remove CSerializer
---------
Co-authored-by: disinvite <disinvite@users.noreply.github.com>
* Implement some Act1State functions
* ci: push fix commits to pr
* ci fix
* Show diffs generated by clang-format
* Run clang-format
* Fix naming
* re-use _countof + add parentheses
* Fix naming
* Use MxS32
* Annotate Act1State::NamedPlane::~NamedPlane
* Apply suggestions
* Read and Write Mx3DPointFloat's
* Annotations, spacing
* Add Mx3DPointFloat copy ctor, match some functions
* Fix WriteVector3
* Adding more spacing for readability
* Use MxResult as a return type for Serialize
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* cmake+ci: run clang-tidy
* Remove DESCRIPTION from LEGO1/LegoOmni.mingw.def
* Add initial .clang-tidy and fixes
* fix file perms
* Comment out DESCRIPTION
* Remove LegoEntity::~LegoEntity and MxPresenter::~MxPresenter from mingw's LEGO1.def
* Looks like clang is allergic to the libs in the directx5 SDK
* Update .clang-tidy
* Fix typo in .clang-tidy
* Attempt to generate an action error
* Revert "Attempt to generate an action error"
This reverts commit 96c4c65fedbc4102837f4bcbbb9ee83a7d14cba3.
* cmake: test with -Wparentheses + optionally with -Werror
* ci: -k0 is a Ninja argument
* Use -Werror only for msys2 builds
* cmake: only emit warnings for specific warnings
* cmake: and don't do -Werror/-WX anymore
* Fix warnings
* Fix mingw warnings
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* Implement/match LegoWorld::FUN_10021790
* Improve match
* Match
* Specify python package versions
* Use wildcard version
* Use const atom
* Use const atom
* cmake: use imported targets for 3rd party libs
* Fix casing of skateboard.h include
* cmake: tglrl realtime viewmanager mxgeometry
* cmake: spin off some source in static libraries
* dx5 for everyone
* ci: bump actions/checkout to v4
* move LEGO1/realtime/realtimeview.cpp to lego1 because it exports symbols
* add misc library
* Add omni library
* Return of the .def's
* Remove COMPAT_CONST in MxVideoParam::MxVideoParam
* Run clang-format
* move LEGO1/realtime/realtimeview.cpp to realtime lib
* Add 3dmanager library
* Rename .def files
* Remove incorrect deps to Omni
* Remove DLL expor decls
* Remove unnecessary library dep from ROI
* Remove COMPAT_CONST
* Move 3dmanager lib before Omni
* Remove mxgeometry lib (`geom` is actually `lego/sources/geom`, which we don't have in our decomp yet)
* viewmanager has a dependency on realtime + fix mingw's def
* Remove Smacker::Smacker from lego1 link libraries
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>
* cmake: detect older MSVC and define ENABLE_DECOMP_ASSERTS to enable decomp asserts
* Add /Zc:__cplusplus to define __cplusplus with c++ version number
* Silence deprecated CRT releated warnings
* LegoCameraController overrids some methods that are not defined in its parent(s)
* Tgl::Device::GetDrawnTriangleCount does not exist (FIXME: INCORRECT FIX -> Tgl::Device should be updated instead)
* Remove copy/pasted APP_ICON from lego1 resource.h header
* Implement empty ViewLODList::Dump method
* Also enable "compat mode" for newer MSVC compilers
* Only do decomp assertions when using older MSVC compilers
* msys2 mingw compat (cannot pass reference of rvalue)
* Fix msys2 mingw warning: declaration 'class Tgl::Group' does not declare anything
* Add FIXME comment to LEgo3DView::m_previousRenderTime
* LegoView1 is 16 bytes bigger then LegoView ==> 4 32-bit pointers
* include string.h for strlen
* Fix overrides
* Fix constness of method
* Fixes
* Formatting
* Add size assert for MxFrequencyMeter
* ci: build isle with msys2 + msvc on GitHub actions
* Set vcvars for msvc
* msys2 needs the msys2 shell
* Build in default shell
* isle is not 64-bit yet (I think)
* Print bitness
* Use amd64_x64 cross tools
* Minor updates
* Add more names
---------
Co-authored-by: Christian Semmler <mail@csemmler.com>