This breaks stencil buffer clipping, transparent flats, the whole
nine yards.
Unfortunately, this is about as far as I will be taking this
approach to cleaning up OpenGL. It's unfortunate, but this
renderer is basically unsalvagable. I will have to rewrite it
completely from scratch to get what I want out of this.
Might as well leverage an existing data structure, right? AA trees
use numbers as keys and we can iterate through them in order. I'm
surprised this was in the codebase!
This will be used for the vertex array buckets when building the
render lists for each FSurfaceInfo being used by the hardware
renderer. Generally, we will replace DrawPolygon calls with
operations to fill these resizeable arrays, one for each
FSurfaceInfo. After the initial BSP node draw call, we will go
through the buckets calling DrawPolygon on each one.
Core code has too many #define dependencies on interface-specific
defines. This means that it's currently not possible to safely
separate the core and interface code into different contexts. The
core code should be refactored to accomadate for this because we
should not have any interface-specific code in core in the first
place.
This reverts the static library SRB2Core from a7135094 and instead
adds the core sources to the SRB2SDL2 target directly.
So frustrating...
This should introduce a minor performance boost for slow CPUs in
OpenGL mode. If it doesn't, it shouldn't be any slower. It also puts
us a little closer to supporting GLES as well.
This introduces several new pgl function pointers that are from
GL 1.1. I do not check for their existence because no driver out in
the wild in active use doesn't support 1.1.
Core and SDL2 are two separate targets now. Core is a static library
that is linked into SRB2SDL2. The sources for both are separated.
When using an IDE like Visual Studio or Xcode, the source code
organized into groups that explain what that group of sources does.
In the future, "Main" could be split into a few more groups based on
file prefixes, but I think the way it is set up works for now.
Makefile targets are not affected by source_groups and typing `make`
will automatically compile both the "Core" library and SRB2SDL2
itself.
All the effort I've made to research into what exactly this is has
been moot. Since we really only need to target GLES and GL, we should
just worry about supporting those. Our public builds don't rely on
this at all. This helps readability in the OpenGL code.
Honestly, under no circumstances when GL is compiled into the game
should the PostImgRedraw not be available. Removing this helps
make the GL code slightly more readable.
The rationale for this is that MiniGL hasn't been relevant for 17
years or longer. Removing it helps cleanup this horrifying section of
the codebase.
This possibly breaks upscaling in fullscreen in OpenGL mode.
It is really messy at the moment. There is no support for copying the
necessary frameworks and dylibs out to the bundle for distribution, and
it is a frankenstein of manual find_library and find_package which can
sometimes pick up Homebrew dylibs.
Apparently the mistake also caused myargc to be cleared in Linux64 SDL2 (as pointed out by that ilag11111 guy on GitHub), so that should be fixed now too.