Commit Graph

100 Commits

Author SHA1 Message Date
Louis Gombert
cb379d7d20 Define SDL_FUNCTION_POINTER_IS_VOID_POINTER 2025-02-17 22:36:30 +01:00
Louis Gombert
656d81d39a SDL3: Update openGL/Window functions 2025-02-17 22:36:30 +01:00
Louis Gombert
2f8719585c Fix event filter callbacks, and MouseMode callback 2025-02-17 22:36:30 +01:00
Louis Gombert
930678447f SDL3: Remove Gamma Ramp usage
SDL_SetWindowGammaRamp was removed in SDL3 due to poor support in modern OS
2025-02-17 22:36:30 +01:00
Louis Gombert
3a1878c0f7 SDL3: run rename_headers.py script from migration guide 2025-02-17 22:36:30 +01:00
Louis Gombert
780b88f673 SDL3: run rename_symbols.py script from migration guide 2025-02-17 22:36:22 +01:00
Sebastian Holtermann
0e2ef804dd Add new command line option: -display
The new command line option -display lets the user select the display on
which Descent 3 should be displayed.

This is useful in multi-monitor setups where the game now can be run on any of
the given monitors.
2024-12-17 20:47:04 +01:00
Sebastian Holtermann
19c7611ce5 renderer/HardwareOpenGL: Use mem_rmalloc instead of mem_malloc 2024-10-19 23:23:19 +02:00
Sebastian Holtermann
2c7a0e98a8 renderer/HardwareOpenGL: Fix compiler warnings 2024-10-19 23:15:35 +02:00
Azamat H. Hackimov
2a63a8b6aa Fix memory leak from unpaired SDL_GL_LoadLibrary() 2024-09-29 19:34:23 +03:00
Jan Engelhardt
de0af3b10d mem_malloc type triviality checks (6/8)
```
git grep -l mem_malloc | xargs perl -i -lpe 's{\((uint8_t) \*\)mem_malloc\((\S+)\)}{mem_rmalloc<$1>($2)}'
```
2024-09-16 22:12:13 +02:00
Azamat H. Hackimov
d8de33eb35 Convert renderer to use new logging facility 2024-09-10 03:00:25 +03:00
Azamat H. Hackimov
30f8fefa0b Cleanup sdlmain.cpp
Remove unused global variables, rewrite internal functions, remove `-game_checksum` cmdline option.
2024-09-10 03:00:25 +03:00
Louis Gombert
2db85ca6ec Merge pull request #545 from tophyr/pr/improve-render-perf
Improve Renderer Performance
2024-08-27 23:19:55 +02:00
Chris Sarbora
be59b88b26 Improve Renderer Performance
Use orphaned "buffer update streaming" to eliminate synchronization
delays, due to CPU->GPU latency, causing framerate slowdowns. This sends
vertex data to the GPU via partial updates to a buffer and reallocates
the buffer once it fills up, ensuring that no synchronization is ever
needed. The buffer is sized to balance memory usage vs allocation rate,
and the GL driver ensures that "orphaned" buffers are only destroyed
when all GL commands using them are retired.
2024-08-24 17:19:27 -05:00
Azamat H. Hackimov
4aa17f36d4 Minor cleanups to HardwareOpenGL.cpp 2024-08-21 15:29:05 +03:00
Azamat H. Hackimov
1de5da7777 Remove external symbols from GL renderer
Remove unused linux_permit_gamma variable. Remove d3SDLEventFilter() as it initialized earlier.
2024-08-21 14:52:58 +03:00
Azamat H. Hackimov
39e971504e DDIO: implement mouse grab state functions
Hide global variable ddio_mouseGrabbed.
2024-08-21 12:29:28 +03:00
Chris Sarbora
46043e709d use GL_RGBA8 instead of invalid GL_RGB 2024-08-18 03:26:07 -05:00
Chris Sarbora
38100b8ed1 use GL_CLAMP_TO_EDGE instead of deprecated GL_CLAMP 2024-08-18 03:26:07 -05:00
Chris Sarbora
77fb0cd1ab use GL_TRIANGLE_FAN instead of nonexistent GL_POLYGONS 2024-08-18 03:26:06 -05:00
Chris Sarbora
a06e78074f remove EXT and ARB suffixes 2024-08-18 03:26:06 -05:00
Chris Sarbora
791cdcb308 eliminate hints to things the shader does now 2024-08-18 03:26:06 -05:00
Chris Sarbora
256898dfc6 Move fog into shader 2024-08-18 03:26:06 -05:00
Chris Sarbora
625b2fc1a1 update vertices modernly 2024-08-18 03:26:06 -05:00
Chris Sarbora
0dd203e2c0 create, track, and clean up texture ids responsibly 2024-08-18 03:26:06 -05:00
Chris Sarbora
a5081982f6 Always use Multitexture 2024-08-18 03:26:06 -05:00
Chris Sarbora
d25bf5e4e1 set up texture enabling
eliminate gl(Enable|Disable)ClientState and glClientActiveTextureARB
2024-08-18 03:26:06 -05:00
Chris Sarbora
5b4703bf5f pipe color and texcoords thru the shaders 2024-08-18 03:26:06 -05:00
Chris Sarbora
16df2d764a Set up transformations in vertex shader 2024-08-18 03:26:03 -05:00
Chris Sarbora
d61deae68d add rudimentary shaders and machinery 2024-08-18 02:52:46 -05:00
Chris Sarbora
bc99cc867b use opengl 3.2 2024-08-18 02:52:46 -05:00
Chris Sarbora
9950c80e64 eliminate glBegin usage 2024-08-18 02:49:07 -05:00
Chris Sarbora
f8043c1390 extract DetermineColor logic 2024-08-18 02:49:07 -05:00
Chris Sarbora
18ccdf5a81 glShadeModel calls are redundant with default setting, rend_SetLightingState is redundant with rend_SetLighting 2024-08-18 02:49:07 -05:00
Chris Sarbora
8d94450b7a dglAlphaFunc(GL_GREATER, 0) is perfectly redundant 2024-08-18 02:49:07 -05:00
Chris Sarbora
e152b5df70 setting depth range to [0, 1] is superfluous 2024-08-18 02:49:07 -05:00
Chris Sarbora
fb2dbe8c92 Delete empty method 2024-08-18 02:49:07 -05:00
Chris Sarbora
8d26df7b25 Delete written-only fields 2024-08-18 02:49:07 -05:00
Chris Sarbora
201d4add62 Make dyna_gl definitions easier and own all fn lookups 2024-08-18 02:49:06 -05:00
Chris Sarbora
bd06bf5288 rename ogl* to dgl* 2024-08-18 02:49:06 -05:00
Louis Gombert
1328a8c846 Remove non-functional OpenGL logging methods 2024-07-28 17:52:01 +02:00
Chris Sarbora
3da53e567f Programmatically replace all __LINUX__ with POSIX
Steps:
```sh
srcs=$(mktemp)
find . -name "*.cpp" -or -name "*.c" -or -name "*.h" -or -name "*.hpp" -or -name "*.cc" -or -name "*.hh" > $srcs
xargs sed -i 's/ifndef __LINUX__/if !defined(POSIX)/' < $srcs
xargs sed -i 's/ifdef __LINUX__/if defined(POSIX)/' < $srcs
xargs sed -i 's/defined(__LINUX__)/defined(POSIX)/' < $srcs
```
2024-07-12 18:11:54 -05:00
Azamat H. Hackimov
7b7ffde4d8 Fix loading OpenGL library on Windows
On loading GL symbols we are using SDL_GL_GetProcAddress(), which only valid if we previously loaded OpenGL library with SDL_GL_LoadLibrary(). We cannot use mod_LoadModule() here, otherwise finding symbols will fail.
2024-06-29 20:53:13 +02:00
Louis Gombert
97540db0ae Fix Linux opengl library load 2024-06-29 18:21:38 +02:00
Louis Gombert
6f5a4be1e6 Fix Windows OpenGL dynamic loading 2024-06-29 18:21:37 +02:00
Louis Gombert
91c18fefc5 Windows SDL2 compilation 2024-06-29 18:21:37 +02:00
JeodC
310412a360 Set default BPP to 32
In windows x64, on trying to run the game, ChangeDisplaySettings will fail because the game does not use the new windows api to change these settings. Since Win95 compatibility mode is not an option for Win64, instead change the default BPP to 32.

There may be a more proper way to handle this, and make it more uniform to remove BPP 16 entirely, but this has worked for me since putting it in a fork over a month ago.
2024-06-24 11:04:02 -04:00
Ryan C. Gordon
393a39b709 opengl: use SDL_WINDOW_FULLSCREEN_DESKTOP and an FBO.
This now renders to an OpenGL Framebuffer Object at the game's resolution,
and blits it to the window at whatever resolution it is currently using,
scaling and letterboxing if necessary.

Which is to say: display resolutions are now imaginary, and we never change
the physical display mode now. A smaller resolution is simply drawing less
pixels and scaling them up with the GPU for display. This solves a few
problems: no more resizing background windows or desktop icons shuffling
around, no more being stuck in a weird resolution when debugging or if the
game crashes, no more waiting on monitors to click over to a new mode, and
no more weird rendering when the display didn't exactly support the requested
mode.

This also means the game doesn't have to drop down to 640x480 for the config
menu screen when it was otherwise using some other resolution.

Some caveats:

- This _requires_ OpenGL Framebuffer Object support; there is currently no
fallback if it's missing and the game will refuse to start. But any desktop
hardware of the last ~20 years should support it. For weird embedded things
or whatnot, it will be possible to add a fallback.

- This currently requires SDL. The OpenGL pieces should work on Windows, but
someone would need to adjust the existing win32 code to create a fullscreen
window and not change the physical display mode. It should still compile on
windows and work as before (untested by me, though).

- This is only OpenGL; it does not touch the Direct3D renderer, which should
continue to work as before (again, untested by me).
2024-06-14 03:56:49 -04:00
GravisZro
a6f4b5c115 Fix -nomousegrab flag
HardwareOpenGL incorrectly has "-nomousecap" instead of "-nomousegrab"
2024-05-28 17:13:06 -04:00