Christoph Oelckers
12d073a27d
- objectcolor stuff.
...
# Conflicts:
# src/gl/renderer/gl_renderstate.cpp
2017-01-28 19:06:21 +01:00
Rachael Alexanderson
9a777f719b
- Added "gl_bandedswlight" to reduce the software light emulation gradient to 32 levels.
2017-01-24 22:24:53 +01:00
Christoph Oelckers
5a4a5a17db
- added core lump checks for ZScript.
...
- load internal shaders only from file 0. This does not contain aborts, like most of the other checks,but it will now refuse to load any core shader file from anything but gzdoom.pk3.
2017-01-23 01:56:15 +01:00
alexey.lysiuk
0e9f52f9e5
Added virtual destructor to FPresentShaderBase class
...
No more 'delete called on non-final class that has virtual functions but non-virtual destructor' warnings reported by GCC/Clang
2017-01-06 10:40:51 +01:00
Magnus Norddahl
be2c50f11c
Merge remote-tracking branch 'gzdoom/master' into ssao
2016-10-21 23:48:30 +02:00
Christopher Bruns
779e6acb7b
Create "final" two non-VR 3D modes: Column-interleaved and checkerboard.
2016-10-09 13:05:50 -04:00
Magnus Norddahl
1b7c42f45f
Multisampling ssao bug fixes and split linear depth to its own buffer
2016-10-09 06:17:48 +02:00
Magnus Norddahl
bb79dcb634
SSAO math bug fixes
2016-10-06 07:36:49 +02:00
Magnus Norddahl
00e72028ef
Add another gbuffer with normal data and make ssao pass use it
2016-10-05 07:57:27 +02:00
Magnus Norddahl
ecb57d6cd9
Merge remote-tracking branch 'gzdoom/master' into ssao
...
# Conflicts:
# src/gl/renderer/gl_renderer.cpp
# src/gl/scene/gl_scene.cpp
# src/gl/shaders/gl_shader.cpp
# wadsrc/static/language.enu
# wadsrc/static/menudef.zz
2016-10-04 00:01:03 +02:00
Christoph Oelckers
4eb5f10b02
- use normals to have proper light attenuation. So far only implemented for walls and flats. Models are planned but need some thinking about how to efficiently collect all required lights for an object.
2016-10-03 16:09:32 +02:00
alexey.lysiuk
c68aa2b241
Added FXAA post-processing
...
Implementation of Fast Approximate Anti-Aliasing is based on nVidia sample:
https://github.com/NVIDIAGameWorks/GraphicsSamples/tree/master/samples/es3-kepler/FXAA
2016-10-03 00:15:45 +02:00
Christopher Bruns
576619504e
Remove unused WindowHeight uniform.
2016-10-02 16:10:50 -04:00
Christopher Bruns
fcbf9342d6
Compute row location using gl_FragCoord.
2016-10-02 16:10:39 -04:00
Christopher Bruns
460b653709
Row interlaced 3d might be working, at least in fullscreen 1920x1080 mode.
2016-10-02 16:10:21 -04:00
Magnus Norddahl
287acea6b4
Update copyright
2016-09-25 00:31:57 +02:00
Magnus Norddahl
3f11c0562c
Add ssao quality setting
2016-09-25 00:22:38 +02:00
Magnus Norddahl
d774136282
Added SceneData texture as the second colorbuffer when rendering a scene and placed fog data into it
2016-09-25 00:22:32 +02:00
Magnus Norddahl
9af34bac69
Add gbuffer pass support to FShaderManager and FRenderState
2016-09-25 00:22:32 +02:00
Magnus Norddahl
e025f6e54b
Mark portals in scene alpha channel for the SSAO pass
2016-09-25 00:22:31 +02:00
Magnus Norddahl
c7c0ffadb5
Move SSAO pass to be before translucent rendering
...
Fix depth sampling location when not using fullscreen scene
2016-09-25 00:19:16 +02:00
Magnus Norddahl
09bec67821
Resolve multisampling depth in shader
2016-09-25 00:19:16 +02:00
Magnus Norddahl
a246b58673
Change SSAO blur to be depth aware
2016-09-25 00:19:16 +02:00
Magnus Norddahl
723eb746f6
Add ssao random texture
2016-09-25 00:19:15 +02:00
Magnus Norddahl
9076d46261
Added SSAO pass
2016-09-25 00:19:15 +02:00
Magnus Norddahl
f7b6b1433c
Added exposure pass calculating the bloom/tonemap exposure based on what the eye is seeing
2016-09-22 09:13:32 +02:00
Christoph Oelckers
8b6e09ca09
- changed the license of the OpenGL renderer to LGPL v3.
...
This was done to clean up the license and to ensure that any commercial fork of the engine has to obey the far stricter requirements concerning source distribution. The old license was compatible with GPLv2 whereas combining GPLv2 and LGPLv3 force a license upgrade to GPLv3. The license of code that originates from ZDoomGL has not been changed.
2016-09-14 20:01:13 +02:00
Christoph Oelckers
aece9aaa58
- added xBRZ texture scaler after clearing the licensing conditions. A screenshot of the confirmation that this is ok has been added to the 'licenses' folder.
2016-09-03 14:01:51 +02:00
Christoph Oelckers
589936f570
- draw the colormap blend after postprocessing, not before it.
...
- added colormap shader to postprocessing.
This replaces the in-place application of fullscreen colormaps if renderbuffers are active. This way the fully composed scene gets inverted, not each element on its own which is highly problematic for additively blended things.
2016-09-01 17:14:51 +02:00
Christoph Oelckers
3389a5a74e
- removed most of the specific options for legacy hardware and consolidated them in one variable (does not work yet.)
2016-09-01 11:52:52 +02:00
Christoph Oelckers
0f0dc2c852
- implemented buffers for GL 3.x. These only get mapped during the data collection pass so the order of some things is different here.
2016-08-29 10:43:03 +02:00
Magnus Norddahl
5f09d3b7ef
Add FBufferedUniformSampler because sampler uniforms may default bind to other locations than zero
2016-08-26 01:46:39 +02:00
Magnus Norddahl
b68bbaf617
Fix uninitialized memory access if a FShaderProgram is destroyed without being fully compiled and linked
2016-08-26 01:40:28 +02:00
Magnus Norddahl
25645d901e
Add Palette LUT tonemap mode
2016-08-23 09:18:18 +02:00
Christoph Oelckers
250be72939
- added handling for drawing with uniform vertices. It draws something but in the wrong place. Right now I have no idea what's happening...
2016-08-22 15:31:23 +02:00
Christoph Oelckers
7ba5acfb35
- added quad drawer interface so that this part can be done without altering a vertex buffer.
...
So far it's only the framework, the new code is not active yet.
2016-08-22 14:00:25 +02:00
Magnus Norddahl
d380d765c9
OpenGL object labels and debug groups
2016-08-17 23:18:47 +02:00
Magnus Norddahl
a8d1197ea7
Make sure we never pass a negative value to pow, and optimize gamma uniform
2016-08-16 00:01:18 +02:00
Magnus Norddahl
647ef5d029
Fix blur shader to use RenderScreenQuad
2016-08-14 09:05:50 +02:00
Magnus Norddahl
210fce1193
Fix bloom shader missing its target
2016-08-14 09:05:50 +02:00
Christoph Oelckers
675822004d
- use static buffer data and a uniform to handle the texture positioning of the present shader.
...
That's again one less write access to the buffer. The uniform method was chosen because this way a buffer update can be completely avoided, and setting a single uniform is a lot cheaper and simpler to handle.
2016-08-08 16:06:02 +02:00
Christoph Oelckers
9c9edbffdb
- on older ATI drivers where the clip planes are broken, only disable the clip planes themselves, but not OpenGL 3.x so that dynamic lights still work as intended.
...
- only disable clip planes on Windows, but not on Linux or macOS.
- If a driver reports full OpenGL 4.5 support, assume that all features are working properly.
2016-08-08 12:55:09 +02:00
Magnus Norddahl
346badf25f
Moved state to FGLPostProcessState and merged vertex shaders
2016-08-06 11:51:08 +02:00
Magnus Norddahl
6fc7596d52
Fix aspect ratio and texture clipping in lens shader
2016-08-04 15:47:15 +02:00
Magnus Norddahl
6b9529d70f
Added lens distortion shader
2016-08-02 17:32:21 +02:00
Magnus Norddahl
7709db4bb0
Fix broken viewport/backbuffer location for WriteSavePic
2016-07-31 16:23:21 +02:00
Magnus Norddahl
849e80074e
Added GLSL 120 fallback support
2016-07-31 03:54:16 +02:00
alexey.lysiuk
7de242930a
Removed obsolete gamma correct shader used on macOS only
2016-07-30 15:30:35 +03:00
Magnus Norddahl
5849c83028
Added bloom and tonemap to menus
...
Added gl_renderbuffers CVAR that disables render buffers
Added patch shader support to FShaderProgram
Added OpenGL 2 fallback support to render buffers
2016-07-29 21:31:20 +02:00
Magnus Norddahl
0efee85bd8
Added tonemapping and sector based exposure control
2016-07-29 00:36:43 +02:00
Magnus Norddahl
69f52cc898
Added bloom shaders
2016-07-27 21:50:30 +02:00
Magnus Norddahl
e82c38e4f9
Update copyright and typo fix
2016-07-27 11:15:20 +02:00
Magnus Norddahl
aeb7df09de
Added hardware gamma option and improved window handling on Windows
2016-07-27 11:15:19 +02:00
alexey.lysiuk
44b019413c
Implemented gamma correction in OS X native backend using shader effect
2016-05-02 10:04:09 +03:00
Christoph Oelckers
47064e24c9
- only bind the uniform buffer if it is actually going to be used. No need to check if we are use a shader storage buffer.
2016-05-01 12:01:44 +02:00
alexey.lysiuk
1deb9742de
Do not call UBO functions when no extension available
2016-05-01 11:46:49 +03:00
alexey.lysiuk
461c97d25b
Fixed remaining issue with shader patching for old OpenGL
2016-04-30 16:28:19 +03:00
Christoph Oelckers
21283b18f4
- preparations for using clip planes on line portals.
2016-04-29 01:48:06 +02:00
Christoph Oelckers
09f54b0940
- cleaned up the clip plane management for portals.
...
Unfortunately the math behind the old clip planes is utterly impenetrable and so poorly documented that I have no idea how to set that up, so it is deactivated for now. It wasn't working anyway.
2016-04-27 00:41:00 +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
fc57180d7e
- added necessary state to implement 3D light splitting using hardware clipping planes.
2016-01-30 23:01:11 +01:00
Christoph Oelckers
45526c2769
- basics for using hardware clip planes to split translucent stuff by 3D floor planes.
2015-04-05 18:55:21 +02:00
Christoph Oelckers
89ce0b8cb7
- test if GLSL version 1.4 can handle uniform buffers on old Intel hardware without making problems...
2014-10-22 16:54:26 +02:00
Christoph Oelckers
fd3128a164
- fixed: When changing enhanced nightvision mode the shaders need to have their fixed colormap state reset to ensure that the new settings get used.
...
- fixed: The shader code for handling special fixed colormaps did not use the color vertex attribute which was most evident with the 'shadow' render style on the spectre.
2014-10-05 09:40:36 +02:00
Ralgor
5cc43137a1
Only require OpenGL 3.0 compatibility profile.
2014-09-14 14:43:42 -05:00
Christoph Oelckers
c6f4c0b6f0
- fixed: FMaterial's tex pointer could be accessed before it was set.
...
- allow more than two texture units in shaders.
2014-09-09 10:03:34 +02:00
Christoph Oelckers
a63871d170
- at least for Intel GMA we need shaders without 'discard' to render non-transparent stuff. The performance penalty is rather hefty here.
2014-08-02 21:06:34 +02:00
Christoph Oelckers
e35fefdc06
- better rebind the active shader after updating the matrices.
2014-08-02 11:59:04 +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
Christoph Oelckers
7967082e60
- use the light buffer to handle dynamic lighting.
2014-08-01 20:59:39 +02:00
Christoph Oelckers
1ec58011d2
- start of light buffer implementation so that we don't have to use uniform arrays which appear to be broken on AMD.
2014-07-31 00:44:22 +02:00
Christoph Oelckers
77d9d9b2a5
- fixed: For updating the model VAO's attribute pointers it is necessary to first bind the vertex buffer we need to refer to, because this is not part of the VAO's state.
2014-07-27 11:53:18 +02:00
Christoph Oelckers
bdf5bbd34e
- make the shader timer part of the render state.
2014-07-26 20:56:10 +02:00
Christoph Oelckers
fb6b4238ed
- fixed: glProgramUniform is only present from GL 4.1 or a specific extension so it may not be used on systems not supporting it.
2014-07-15 02:48:59 +02:00
Christoph Oelckers
6046b11b4f
- all shaders now compile in core profile.
2014-07-15 01:05:53 +02:00
Christoph Oelckers
eedc5a69be
- replaced builtin position vertex attribute.
2014-07-15 01:02:48 +02:00
Christoph Oelckers
1b7f5a2e6a
- replaced builtin texture coordinate vertex attribute.
2014-07-15 00:59:01 +02:00
Christoph Oelckers
5a322742c3
- remove use of builtin and deprecated color vertex attribute.
2014-07-15 00:37:13 +02:00
Christoph Oelckers
ed8a21fd86
- replaced deprecated alpha testing with shader code.
2014-07-14 21:14:43 +02:00
Christoph Oelckers
ce3653f6e1
- remove all uses of builtin matrices.
2014-07-13 23:13:40 +02:00
Christoph Oelckers
dbb05c5f33
- remove use of builtin texture matrices.
...
- make matrix class single precision.
2014-07-13 20:41:20 +02:00
Christoph Oelckers
00fcf4bc06
- for some reason using world coordinates for clipping in the shader is somewhat imprecise so the clip plane heights have to be adjusted a bit for it.
2014-07-13 13:25:42 +02:00
Christoph Oelckers
d868f60f6c
- since the clip planes for plane mirrors did not work anymore I reimplemented them using shader based logic. It still needs to be seen if this affects performance on older hardware.
2014-07-13 12:14:12 +02:00
Christoph Oelckers
7cbffc7c14
- test code removal.
2014-07-10 10:35:02 +02:00
Christoph Oelckers
a936629cec
- use default fragment shader for burn and stencil shader, with the time consuming parts disabled by a #define, to avoid code duplication.
2014-07-10 10:33:07 +02:00
Christoph Oelckers
92185f96eb
- fixed overflow with storing a sprite's dynamic light color in a PalEntry.
2014-07-01 09:52:41 +02:00
Christoph Oelckers
f710518903
- use a uniform array to store vertex data to render dynamic stuff on GL 3.x hardware without the ARB_buffer_storage extension.
...
Due to the way the engine works it needs to render a lot of small primitives with frequent state changes.
But due to the performance of buffer uploads it is impossible to upload each primitive's vertices to a buffer separately because buffer uploads nearly always stall the GPU.
On the other hand, in order to reduce the amount of buffer uploads all the necessary state changes would have to be saved in an array until they can finally be used. This method also imposed an unacceptable overhead.
Fortunately, uploading uniform arrays is very fast and doesn't cause GPU stalls, so now the engine puts the vertex data per primitive into a uniform array and uses a static vertex buffer to index the array in the vertex shader.
This method offers the same performance as immediate mode but only uses core profile features.
2014-06-30 18:10:55 +02:00
Christoph Oelckers
9d1dbf4eab
- fixed: FBufferedUniform1f didn'T work because it used an int as its buffered value.
2014-06-29 14:08:44 +02:00
Christoph Oelckers
ffcb6cb70a
- added second vertex coordinate attribute for model interpolation.
2014-06-29 11:00:21 +02:00
Christoph Oelckers
e2e71e072e
removed error suppression code from shader compilation.
...
With GL 2.x support the engine still had something to fall back on, with that removed it needs to abort.
2014-06-23 09:26:29 +02:00
Christoph Oelckers
2925c96b59
removed all GL 2.x code.
...
After thinking about it for a day or so I believe it's the best option to remove all compatibility code because it's a major obstacle for a transition to a core profile.
2014-06-21 15:50:32 +02:00
Christoph Oelckers
1aaa1b7bad
- removed gl_usevbo CVAR because with recent code changes it has become useless. If GL_ARB_buffer_storage is present, buffers will always be used.
2014-06-15 12:12:24 +02:00
Christoph Oelckers
2ad47935ef
Merge branch 'master' into Glew_Version_For_Real
2014-06-01 12:43:17 +02:00
alexey.lysiuk
a26fbc74f0
Fix compilation errors in latest texture-related changes
...
GCC and Clang complain about non-POD type passed to variadic function.
2014-06-01 10:27:16 +03:00
Christoph Oelckers
a1ec6ab1ba
- fixed some Linux warnings.
2014-05-24 16:53:57 +02:00
Christoph Oelckers
4d005bdfa0
shader rework
...
All those special shaders have been merged together.
Mostly working but the non-shader lighting seems a bit broken.
2014-05-12 14:45:41 +02:00
Christoph Oelckers
506798f134
allow brightmaps and fullbright objects in fog. The reasons why they were disabled no longer exist.
2014-05-11 23:12:28 +02:00