Commit graph

100 commits

Author SHA1 Message Date
Christoph Oelckers
50ba1ecde8 - add menu patching for GL 2.x mode.
- use stdint types in model code, because we have to start somewhere with the transition.
2016-05-01 13:09:13 +02:00
Christoph Oelckers
ca95371a27 - fixed: gl_load.c did not handle the GL 2.x fallback for the lack of glGetStringi correctly, if that function was missing it just crashed. 2016-04-30 17:16:16 +02:00
Christoph Oelckers
8011958ebe Merge branch 'gz2x' of https://github.com/alexey-lysiuk/gzdoom
# Conflicts:
#	src/gl/system/gl_interface.cpp
2016-04-30 17:09:57 +02:00
Christoph Oelckers
c29e96d369 - print buffer info only if the buffer type is used.
- removed some GL specs that are not informative in GZDoom's context.
2016-04-30 16:31:09 +02:00
Christoph Oelckers
50ab301bd8 - fixed: If we want to support pre-GL3 hardware, we may not require the presence of glGetStringi. 2016-04-30 16:23:32 +02:00
alexey.lysiuk
32412c7f75 Disabled printing of junk values for unsupported extensions in OpenGL startup log on OS X 2016-04-30 16:28:50 +03:00
alexey.lysiuk
6757447f1b Enabled printing of OpenGL startup log on all platforms 2016-04-30 16:28:35 +03:00
alexey.lysiuk
893d0c8915 Added old method to collect extensions
This required manual changes in generated file gl_load.c
2016-04-30 13:33:54 +03:00
alexey.lysiuk
3816b46938 Fixed compilation of OS X with native backend
TODO: check Linux build
2016-04-30 11:53:31 +03:00
alexey.lysiuk
de6f13f0b4 Updated gl_load.* files generated with glLoadGen 2.0.5
Added OpenGL extensions list file for glLoadGen
Added extensions for OS X version
2016-04-30 11:43:08 +03:00
Christoph Oelckers
913e3df7e3 - fixed display of alpha textures without shaders.
As it turned out, the translation's alpha channel was clobbered by the whole setup.
2016-04-26 19:11:32 +02:00
Christoph Oelckers
7e6e2bc0a8 - stated adding GL 2.0 compatibility handling 2016-04-26 18:24:02 +02:00
Christoph Oelckers
eb27057853 - enable shader-less rendering. Still very incomplete, but at least the basics are working. 2016-04-26 16:44:03 +02:00
Christoph Oelckers
3b1500438d - got rid of VAO's. they have no impact on performance and are a general nuisance if some render paths cannot use them.
- cleaned up gl_interface and removed gl.compatibility.
2016-04-26 16:26:34 +02:00
Christoph Oelckers
f066457a48 - add shader patching to allow running the engine with GLSL 1.2.
- made some initial preparations for the shader-less fallback path.
2016-04-26 15:26:52 +02:00
Christoph Oelckers
090d13b915 - updated gl_interface to deal with older GL versions.
- added the framework for allowing multipass textured dynamic lights again.
2016-04-26 15:20:26 +02:00
Christoph Oelckers
97bed58d7d - use a compatibility mode version of gl_load, so that the fallback GL 2 code can get its definitions. 2016-04-26 11:32:40 +02:00
Christoph Oelckers
0d17459c36 - do not disable sampler objects with -gl3. 2016-04-23 15:47:51 +02:00
Christoph Oelckers
c786b65727 - allow the engine to run without sampler objects. This will create some overhead in the texture code, but that's still better than having to error out on those few systems where it may be an issue. 2016-04-22 19:54:51 +02:00
Christoph Oelckers
273c1ea510 - fixed PointOnSide caclulation for dynamic lights. 2016-04-11 19:59:39 +02:00
alexey.lysiuk
bd8b8911d5 - fixed Windows 32-bit build 2016-04-11 10:08:18 +03:00
Christoph Oelckers
1f0fd85d0e - adjustments for the DrawTexture interface changes. 2016-04-09 13:05:43 +02:00
Christoph Oelckers
b958a5d748 - adjustments in GL code. 2016-03-25 15:14:09 +01:00
alexey.lysiuk
1f64d7ee22 Fixed wrong starting frame for wipe animation
Menu graphics appeared in starting frame with hardware renderer only
Software renderer was not affected as it reads pixels from front buffer instead of back buffer like OpenGL counterpart did
See http://forum.drdteam.org/viewtopic.php?t=6857
2016-03-15 11:49:56 +01:00
Christoph Oelckers
fc57180d7e - added necessary state to implement 3D light splitting using hardware clipping planes. 2016-01-30 23:01:11 +01:00
alexey.lysiuk
1c5d0ccd65 - enabled hqNx MMX on all platforms with Intel intrinsics support 2015-12-25 15:41:06 +02:00
alexey.lysiuk
69813993b0 - added missing hqNx modes to options menu 2015-12-25 10:00:31 +02:00
Kyle Evans
841ddb0d63 <stdlib.h> has replaced <malloc.h> on FreeBSD as well 2015-12-10 23:01:59 -06:00
Christoph Oelckers
abf11f1a12 - print an error message if GL_ARB_sampler_objects cannot be found.
GZDoom requires this extension and all supported hardware has drivers implementing it but there still seem to be people out there who stuck to some older, obsolete drivers that don't.
2015-07-13 09:49:02 +02:00
Christoph Oelckers
f273b6c46d - fix uninitialized variable. 2015-04-27 21:25:16 +02:00
Christoph Oelckers
48e21f6759 - consider MBF sky transfers when checking for skybox precaching. 2015-04-01 12:08:42 +02:00
Christoph Oelckers
1e9a6e667e - GL code adjustments for reworked precaching. 2015-04-01 11:59:41 +02:00
Christoph Oelckers
717c82ee4a - On Intel, we have to disable shader storage buffers because their complier contains a bug disallowing unsized arrays. 2014-12-01 09:58:23 +01:00
Christoph Oelckers
4682736585 - fixed: non-tiled mid textures on a fog boundary require some special clamping to be performed in the shader. 2014-09-21 11:08:17 +02:00
Christoph Oelckers
c773a500f2 - only activate shader storage buffers on modern drivers also supporting GL_ARB_buffer storage. Early adopters of this extension (i.e. older AMD drivers mainly) tend to implement this badly. 2014-09-17 09:01:16 +02:00
Christoph Oelckers
32f08adaf3 - moved some code to better places.
- allow GL version 3.0 in Windows, too.
2014-09-14 23:01:57 +02:00
Ralgor
5cc43137a1 Only require OpenGL 3.0 compatibility profile. 2014-09-14 14:43:42 -05:00
Ralgor
cfc8f3dbbf Global GL render context shouldn't be initialized inside of gl_PrintStartupLog, since it's not compiled in non MSC builds. 2014-09-14 14:42:14 -05:00
Christoph Oelckers
acf6c259d8 - changed the handling of alpha textures. The only special case they need is with palette-less textures and this can be handled far more easily and robustly with a predefined translation instead of passing another parameter through all the layers of the texture management code. This also fixes problems with paletted PNGs that get used as an alpha texture because the old method clobbered the image's palette. 2014-09-09 13:21:36 +02:00
Christoph Oelckers
d5633701b4 - swapped order of textures in burn shader to avoid some problems with the texture samplers.
- fixed: texture sampler state for the burn texture was never set.
2014-09-09 10:17:44 +02:00
Christoph Oelckers
a280c20b4e - fixed: If we want to cache texture binding state we have to reset it in all places where a texture becomes unbound. 2014-08-31 19:00:17 +02:00
Christoph Oelckers
bf03d02228 - print OpenGL profile type in startup log. 2014-08-24 01:09:44 +02:00
Christoph Oelckers
904cc2e158 - some code cleanup. 2014-08-23 18:54:24 +02:00
Christoph Oelckers
1050013017 major cleanup of the texture manager:
- use sampler objects to avoid creating up to 4 different system textures for one game texture just because of different clamping settings.
- avoids flushing all textures for change of texture filter mode.
- separate sprite and regular dimensions on the material level to have better control over which one gets used. It's now an explicit parameter of ValidateTexture. The main reason for this change is better handling of wall sprites which may not be subjected to such handling.
- create mipmaps based on use case, not texture type.
- allows removal of FCloneTexture hack for proper sharing of the same sprite for decals and other purposes.
- better precaching of skyboxes.
2014-08-22 23:50:38 +02:00
Christoph Oelckers
274a4216ea - disabling inlining in the GL loader produces an executable that's 8kb smaller. 2014-08-21 11:47:53 +02:00
Christoph Oelckers
e132fc5eed - replaced GLEW with GLLoadGen for GL access. This allows to have a header that only contains what's actually required, namely OpenGL 3.3 plus glBegin and glEnd which are the only compatibility functions needed for the fallback render path.
GLEW has two major problems:

- it always includes everything, there is no way to restrict the header to a specific GL version
- it is mostly broken with a core profile and only works if all sanity checks get switched off.
2014-08-21 11:02:46 +02:00
Christoph Oelckers
86d37e06f9 - lowered requirements of GL 2.x to OpenGL 3.3.
There was one issue preventing the previous 2.0 betas from running under GL 3.x: The lack of persistently mapped buffers.
For the dynamic light buffer today's changes take care of that problem.
For the vertex buffer there is no good workaround but we can use immediate mode render calls instead which have been reinstated.

To handle the current setup, the engine first tries to get a core profile context and checks for presence of GL 4.4 or the GL_ARB_buffer_storage extension.
If this fails the context is deleted again and a compatibility context retrieved which is then used for 'old style' rendering which does work on older GL versions.

This new version does not support GL 3.2 or lower, meaning that Intel GMA 3000 or lower is not supported. The reason for this is that the engine uses a few GL 3.3 features which are not present in the latest Intel driver.
In general the Intel GMA 3000 is far too weak, though, to run the demanding shader of GZDoom 2.x, so this is no real loss. Performance would be far from satisfying.

A command line option '-gl3' exists to force the fallback render path. On my Geforce 550Ti there's approx. 10% performance loss on this path.
2014-08-19 15:56:33 +02:00
Christoph Oelckers
38796e7714 - removed some obsolete and useless GL calls. 2014-08-17 11:41:03 +02:00
Christoph Oelckers
b2860a1d63 - it looks like glProgramUniform is not working correctly with Intel drivers, so better forget about it for setting the view and projection matrices. Even on NVidia the time difference can only be measured in microseconds per frame so it's not a big loss. 2014-08-02 11:57:42 +02:00
Christoph Oelckers
a8e9c1832f - decided to restrict the 2.0 beta to OpenGL 4.x with GL_ARB_buffer_storage extension and removed all code for supporting older versions.
Sadly, anything else makes no sense.
All the recently made changes live or die, depending on this extension's presence.
Without it, there are major performance issues with the buffer uploads. All of the traditional buffer upload methods are without exception horrendously slow, especially in the context of a Doom engine where frequent small updates are required.
It could be solved with a complete restructuring of the engine, of course, but that's hardly worth the effort, considering it's only for legacy hardware whose market share will inevitably shrink considerably over the next years.
And even then, under the best circumstances I'd still get the same performance as the old immediate mode renderer in GZDoom 1.x and still couldn't implement the additions I'd like to make.

So, since I need to keep GZDoom 1.x around anyway for older GL 2.x hardware, it may as well serve for 3.x hardware, too. It's certainly less work than constantly trying to find workarounds for the older hardware's limitations that cost more time than working on future-proofing the engine.

This new, trimmed down 4.x renderer runs on a core profile configuration and uses persistently mapped buffers for nearly everything that is getting transferred to the GPU. (The global uniforms are still being used as such but they'll be phased out after the first beta release.
2014-08-01 22:42:39 +02:00