Commit graph

621 commits

Author SHA1 Message Date
Christoph Oelckers
acad8315d0 - move stencil recursion counter to render state. 2018-10-21 10:58:11 +02:00
Christoph Oelckers
a97d71a3c3 - draw decals in hardware independent code. 2018-10-21 10:51:26 +02:00
Christoph Oelckers
1768508c80 - first adjustments to decal code.
- moved texture mode constants to a global header and consolidated with the variants of the 2D drawer.
2018-10-21 08:14:48 +02:00
Christoph Oelckers
e8f48e7535 - moved the color/fog setters to hwrenderer. 2018-10-20 23:33:07 +02:00
Christoph Oelckers
fac7c7a31c - abstraction of render style in render state. 2018-10-20 23:14:57 +02:00
Christoph Oelckers
9ef5e00cdf - some cleanup and preparation on RenderState interface. 2018-10-20 21:36:50 +02:00
Christoph Oelckers
3c3be0d349 - started with an abstract render interface, most importantly handle the stencil for plane flooding through the render state object instead of changing GL state directly. 2018-10-20 21:08:24 +02:00
Christoph Oelckers
510aa600dd - moved hw_renderstate.h to hwrenderer folder and renamed one GL constant it was using. 2018-10-20 18:37:12 +02:00
Christoph Oelckers
a4f7fd2e46 - started splitting the render state struct.
Reusable parts should be in hwrenderer later.
2018-10-20 13:34:29 +02:00
Christoph Oelckers
4603d01ba1 - removed some unused content from FGLRenderState. 2018-10-20 13:11:03 +02:00
Christoph Oelckers
9a03ba3cc5 - renamed FRenderState to FGLRenderState. 2018-10-20 13:05:36 +02:00
Christoph Oelckers
9253118bdc - removed the quad drawer class
This isn't needed anymore.
2018-10-20 11:59:12 +02:00
Christoph Oelckers
bc1e659c7b Revert "- reworked fog uniforms to move the global fog mode setting to the viewpoint buffer."
This reverts commit 8b26b6dd1e.

This was causing problems with light mode 2 because some edge cases were no longer handled properly.
2018-09-16 22:38:20 +02:00
Christoph Oelckers
2d53ad6f10 - fixed misplaced parenthesis. 2018-09-09 19:18:22 +02:00
Christoph Oelckers
1c3d4b46c6 - fixed the use of Doom-Legacy-style 3D floor lighting in light mode 8.
Legacy used some strange blending formula to calculate its colormaps for colored 3D floor lighting, this is not available in the software lighting mode, so for these the engine has to temporarily revert to light mode 2 to render them correctly.
2018-09-08 13:08:04 +02:00
Christoph Oelckers
8b26b6dd1e - reworked fog uniforms to move the global fog mode setting to the viewpoint buffer. 2018-09-06 19:14:30 +02:00
Christoph Oelckers
22e8c57a59 - reset the viewpoint buffer only once per scene, not per viewpoint.
This doesn't work for camera textures because they are a separate viewpoint.
2018-09-02 20:05:36 +02:00
Christoph Oelckers
5e39890118 - use a uniform buffer for per-scene data like rotation matrices. 2018-09-02 18:40:36 +02:00
Christoph Oelckers
b570f28597 - restored block of code that got deleted by a bad merge of a cherry-picked commit. 2018-09-02 12:43:13 +02:00
Christoph Oelckers
9af01c4667 - Untested wipe refactor
# Conflicts:
#	src/gl/renderer/gl_renderer.cpp
#	src/gl/system/gl_wipe.cpp
#	src/hwrenderer/scene/hw_attributebuffer.cpp
2018-09-02 12:02:36 +02:00
Christopher Bruns
03fa1a12cb Avoid overriding vr eye-specific buffer binding during 2D rendering. 2018-08-20 00:59:52 +02:00
alexey.lysiuk
b6ff468aaf - creation of dither texture no longer affects active unit
Red checkerboard was rendered upon startup instead of
* the first saved game's thumbnail
* the first game frame
2018-08-12 10:55:24 +03:00
Christoph Oelckers
19a5a2fd2b - fixed dither math. 2018-08-11 09:27:35 +02:00
Rachael Alexanderson
ecdc485e05 - Allow specifying monitor bits-per-channel for dithering output. Not all displays are created equal, so this option is actually important for specifying the exact amount for your display. 2018-08-09 15:13:26 -04:00
Magnus Norddahl
d121fa21bf - add gl_dither for toggling dithered output on and off 2018-08-08 21:58:23 +02:00
Christoph Oelckers
863b9fff8a
Make dither texture data constant 2018-08-08 08:43:46 +02:00
Rachael Alexanderson
24e2c3a611 - replace dither texture with a hand pre-calculated table) 2018-08-07 20:47:17 -04:00
Magnus Norddahl
31addbc859 - use a texture for the dither matrix 2018-08-08 00:54:12 +02:00
Magnus Norddahl
5b8a016cad - add vid_hdr cvar that enables higher than 8bpc output for monitors that support it 2018-07-30 22:01:05 +02:00
Christoph Oelckers
96bb8a779c - fixed incomplete reordering of code. 2018-07-23 21:17:57 +02:00
Christoph Oelckers
6076f0a69d - disable any texture clamping for textures with a user shader.
This cannot be reliably determined so the least restrictive setting must be used.
2018-07-23 17:53:35 +02:00
Christoph Oelckers
6ca2b3fce1 - fixed display for smaller screeblocks value.
When refactoring the screen scaling one line too many was altered by accident.
2018-07-21 12:13:17 +02:00
Christoph Oelckers
57f65a9379 - fixed: The 2D drawer did not restore the blend mode after finishing. 2018-07-20 19:46:53 +02:00
Christoph Oelckers
33ee0f3c27 Merge branch 'master' into modern
# Conflicts:
#	src/gl/renderer/gl_renderer.cpp
#	src/gl/renderer/gl_renderer.h
#	src/gl/renderer/gl_renderstate.h
#	src/gl/system/gl_framebuffer.cpp
#	src/gl/system/gl_framebuffer.h
2018-07-14 13:18:34 +02:00
Christoph Oelckers
7817e6a7b2 - moved the texture binding code back to the OpenGL specific parts.
turns out that this cannot be consolidated with Vulkan because the semantics are far too different here.
2018-07-14 13:05:49 +02:00
Magnus Norddahl
ebae12e74b - Make members private that are not used outside FGLRenderBuffers 2018-07-03 23:35:34 +02:00
Magnus Norddahl
092b2953ea - add GL to OpenGL specific postprocess classes to make it more clear which belongs to the generic hw interface and which belong to the OpenGL implementation 2018-07-03 23:31:40 +02:00
Magnus Norddahl
fcee021753 Fix frame buffer binding bug that caused PP textures to end up with bad data 2018-07-03 21:44:49 +02:00
Magnus Norddahl
4482ad2b78 - fix saved texture bindings to work for any number of binds 2018-07-01 14:31:30 +02:00
Magnus Norddahl
8eb825e25a - fix some postprocess bugs 2018-06-30 16:44:09 +02:00
Magnus Norddahl
ba09af7cbb - add GL debug group for the 2D drawer
- remove pointless opengl calls from effects that are doing nothing
2018-06-30 15:41:12 +02:00
Magnus Norddahl
35c13763db - convert the SSAO pass to use hw_postprocess 2018-06-30 15:24:13 +02:00
Magnus Norddahl
ecb5d69ae3 - Simplify FGLRenderer::PostProcessScene 2018-06-29 21:55:46 +02:00
Magnus Norddahl
32d837cdf1 Merge remote-tracking branch 'gzdoom/modern' into hw_postprocess 2018-06-24 17:57:02 +02:00
Christoph Oelckers
491898fe2c - fixed calculation of projection matrix for weapon sprites.
- fixed color mask for green/magenta.
- fixed crash when initializing video, because it was accessing 'screen' before it was set from within the framebuffer's constructor.
2018-06-24 17:16:07 +02:00
Christoph Oelckers
c3d5b960ee - refactored the entire Stereo3D system to get rid of the class hierarchy and all its ugly implications.
Ultimately all this needs is a small data table describing the geometric properties of each mode and a single Present function that calls the mode specific variants.
Code size got reduced from 50kb to less than 20kb with proper separation of the generic parts from the OpenGL parts.
2018-06-24 17:16:07 +02:00
Christoph Oelckers
532fba5c26 - moved the Stereo3D EyePose to their own file in hwrenderer/. 2018-06-24 10:47:42 +02:00
Magnus Norddahl
b2fad453fa - change tonemaps to steps 2018-06-23 19:25:49 +02:00
Christoph Oelckers
1cf3af9c41 - moved the current portal pointer to HWDrawInfo so that the portal managed does not need to save and restore a global variable for each portal. 2018-06-23 13:51:19 +02:00
Christoph Oelckers
282fdac660 - made the static portal state a struct inside the Renderer object 2018-06-23 13:25:59 +02:00
Christoph Oelckers
82d7e5970f - moved the clipline uniform to the viewpoint buffer.
This was the final one of the per-scene values that could be taken out of the render state.
2018-06-22 23:49:39 +02:00
Christoph Oelckers
80a9028938 - mirror clip planes moved - not working yet. 2018-06-22 22:45:05 +02:00
Christoph Oelckers
d5af939119 - more uniforms moved.
(not working yet.)
2018-06-22 21:32:38 +02:00
Christoph Oelckers
43e1a2d249 - moved uViewHeight and uCameraPos to the viewpoint uniform struct. 2018-06-22 21:05:36 +02:00
Magnus Norddahl
ebf0cef283 - convert colormap shader to postprocess steps 2018-06-22 00:51:58 +02:00
Magnus Norddahl
83f50f5808 - port bloom, blur and camera exposure to postprocess steps and remove the old implementation 2018-06-22 00:29:50 +02:00
Christoph Oelckers
9486180843 - simplify the interface. 2018-06-21 21:36:12 +02:00
Christoph Oelckers
1967165633 - move view and projection matrices to DrawInfo. 2018-06-21 21:02:14 +02:00
Christoph Oelckers
b106f72741 - don't route calls to FMaterial::FlushAll through the framebuffer interface. 2018-06-20 22:18:31 +02:00
Magnus Norddahl
fd2037bd6c - removed the rest of the old lens and fxaa code 2018-06-20 20:09:37 +02:00
Magnus Norddahl
151ed22967 - write OpenGL backend for hw_postprocess (FGLRenderBuffers::RenderEffect)
- remove old fxaa and lens shader classes
- render the fxaa and lens effects
2018-06-20 19:56:30 +02:00
Christoph Oelckers
eb277cc101 - calculate the normal view matrix at a higher level. 2018-06-20 13:49:06 +02:00
Christoph Oelckers
7f5272c23f Deleted GLSceneDrawer
Since it didn't contain any data anymore it was relatively pointless. Code has been moved to FDrawInfo and GLRenderer, depending on its scope.
2018-06-20 13:14:50 +02:00
Christoph Oelckers
f229b05675 - Took more functions out of GLSceneDrawer 2018-06-20 12:57:41 +02:00
Christoph Oelckers
469c9241eb Moved WriteSavePic implementation to FGLRenderer 2018-06-20 12:29:52 +02:00
Christoph Oelckers
54970b60e8 - use locally stored viewpoint variables in the hardware renderer.
- move a few variables from SceneDrawer to FRenderViewpoint.

The global r_viewpoint variable is left alone now to always represent the current viewpoint to the play code.
The main reason behind this change is to reduce the amount of global variables being used by the hardware renderer's scene processing code.
2018-06-19 23:45:17 +02:00
Christoph Oelckers
d2309af3d5 Merge remote-tracking branch 'remotes/origin/master' into modern
# Conflicts:
#	src/d_main.cpp
#	src/hwrenderer/scene/hw_weapon.cpp
2018-06-19 19:40:52 +02:00
Christoph Oelckers
eddb179e36 - moved ViewActor variable into FRenderViewpoint. 2018-06-19 18:51:46 +02:00
Christoph Oelckers
87dfa34f1f - save r_viewpoint as a whole when processing portals. 2018-06-19 17:55:42 +02:00
Christoph Oelckers
6b92b95068 - moved vertex creation for skybox sector to backend independent code. 2018-06-18 18:41:59 +02:00
Christoph Oelckers
e9e1911fa5 - made the scene scale and offset calculations inline functions of DFrameBuffer.
These got repeated quite often.
2018-06-17 12:23:29 +02:00
Magnus Norddahl
b4351e538f - fix weapon missing when bloom was off (scene was already copied to post processing, but nothing had bound the PP frame buffer) 2018-06-17 01:45:20 +02:00
Christoph Oelckers
4937848123 - refactoring of fixed colormap stuff to have it better organized and to reduce the number of uniforms in the main shader.
This removes 3 uniforms, consisting of 9 floats. Those were merged into other values that never get used at the same time.
It also moves the costly setup of the fixed colormap out of the render state into the 2D processing code.
Since 3D forces use of render buffers now, it is no longer necessary to draw the entire scene with the colormap active, meaning it can be handled more efficiently.
2018-06-16 22:40:44 +02:00
Christoph Oelckers
9ff7e5a4ef - force render buffers to be active.
For modern hardware the fallback path really makes no sense and this allows to simplify some things quite a bit.
2018-06-16 09:37:01 +02:00
Christoph Oelckers
8ab68264c1 - removal of all code to handle OpenGL 2. From this commit on the main build of GZDoom will be OpenGL 3.3 or higher.
# Conflicts:
#	src/gl/renderer/gl_renderer.cpp
#	src/gl/shaders/gl_shader.cpp
#	src/gl/system/gl_framebuffer.cpp
#	src/gl_load/gl_interface.cpp
2018-06-15 21:45:05 +02:00
Christoph Oelckers
612fb40f3a - don't use uniforms related to fixed colormaps for other things.
The fixed colormap is a per-scene global setting that normally does not need to change ever during rendering of a scene so it's easily shoved aside into a static uniform buffer.
Having to change this buffer for inconsequential stuff should be avoided, especially when there's other uniforms that are just as good to hold these values.
2018-06-14 21:28:03 +02:00
Christoph Oelckers
9a7f9bdb4c - moved postprocessing shader classes to hwrenderer after removing all dependencies on OpenGL. 2018-06-13 22:37:01 +02:00
Christoph Oelckers
8bf009bd89 - added a RenderQueue parameter to all Bind functions of the postprocessing shaders. This is unused for now. All places calling these pass a dummy NOQUEUE value which is just a nullptr.
This is for Vulkan preparation where all of this needs to run in a user-specified context so that this code can be moved out of the GL folder without depending on OpenGL's global state model.
2018-06-13 20:30:51 +02:00
Christoph Oelckers
0b9eaac5e1 - fixed SSAO shader texture assignments. 2018-06-13 19:04:19 +02:00
Christoph Oelckers
ce50b0e46b - read sampler bindings from the shader instead of tagging along a large amount of support data.
Works for most shaders, except SSAO.
2018-06-13 17:44:49 +02:00
Magnus Norddahl
832e7818c8 - rewrote the blur shader so that it works the same way as the rest 2018-06-12 22:14:44 +02:00
Christoph Oelckers
f166624eb2 - some fixes to the PP shader interface.
The binding point needs to be part of the ShaderUniforms class because Vulkan will need this value to generate the declaration in the shader source.
There's still one issue here: Since OpenGL has no local render state, the buffer must be bound every time it is used. Once the code is better abstracted this should be moved to a higher level class that knows all associated data and how to set it up.
2018-06-12 21:43:35 +02:00
Magnus Norddahl
9155b773cc - change ShaderUniforms so that it just contains the uniform block and not the binding point 2018-06-11 22:33:55 +02:00
Magnus Norddahl
49073489e5 - uniform buffers for the fxaa, blur and bloom shaders 2018-06-11 22:06:46 +02:00
Magnus Norddahl
48f753061a - uniform buffers for the present and shadowmap shaders 2018-06-11 21:42:09 +02:00
Magnus Norddahl
6fcc79d72a - uniform buffers for the tonemap shaders 2018-06-11 21:18:20 +02:00
Magnus Norddahl
2bde741a7e - Uniform buffer for colormap shader 2018-06-11 21:03:55 +02:00
Magnus Norddahl
d22fb24e28 - Uniform buffers for lens shader 2018-06-11 20:58:20 +02:00
Magnus Norddahl
763c5c9769 - change ssao pass to use an uniform block 2018-06-11 20:48:43 +02:00
Magnus Norddahl
f03c02df43 - fix gamepic render buffer issues 2018-06-03 13:59:40 +02:00
Christoph Oelckers
b612e182b4 Merge branch 'indexbuffer'
# Conflicts:
#	src/gl/data/gl_vertexbuffer.h
#	src/gl/scene/gl_flats.cpp
#	src/hwrenderer/data/flatvertices.h
2018-05-22 22:10:21 +02:00
Christoph Oelckers
df6a50872d Merge branch 'master' of https://github.com/coelckers/gzdoom 2018-05-22 21:36:52 +02:00
Christoph Oelckers
226e8f84da - most of gl_bsp.cpp moved to HWDrawInfo.
Only the vertex buffer update check needs to be done yet.
2018-05-22 00:27:39 +02:00
Magnus Norddahl
31abe3df7e - avoid reusing the same mVBuf pointer for the different renderers as that causes too many problems when switching between them
- remove gl_ prefix for model functions that are no longer GL specific
2018-05-21 17:52:03 +02:00
Christoph Oelckers
2d4b8549c6 - per-sector plane rendering needs to be disabled when processing a line portal with hardware that has no working clip plane support.
In this case there are no means to discard the parts of the rendered sectors that lie behind the portal so it should only render the parts that are flagged as visible.
2018-05-20 08:56:29 +02:00
Christoph Oelckers
46a57fdfa1 - moved the postprocessing CVARs to hwrenderer. 2018-05-17 20:51:42 +02:00
Christoph Oelckers
c0837f42bd - gl_system.h as well, in particular this has no place in hw_* files. 2018-05-16 23:34:52 +02:00
Christoph Oelckers
401c9ab8ca - moved gl_interface.cpp/h to gl_load folder.
These files are not part of the actual renderer but part of the system code.
This means, for separated modern and legacy GL renderers, there still will only be one set of this, unlike everything else.
2018-05-16 23:21:21 +02:00
Christoph Oelckers
8f96729e06 - fixed portal benchmarking and added separate output for 2D and finishing the main scene. 2018-05-13 09:48:19 +02:00
Christoph Oelckers
c2a7a4bf30 - moved viewport code to DFrameBuffer. 2018-05-12 17:23:56 +02:00