Commit graph

1879 commits

Author SHA1 Message Date
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
4ef7b66c4b - partial consolidation of the EyePose classes.
The SBS versions can just as easily be handled with an additional parameter.
2018-06-24 11:45:40 +02:00
Christoph Oelckers
532fba5c26 - moved the Stereo3D EyePose to their own file in hwrenderer/. 2018-06-24 10:47:42 +02:00
Christoph Oelckers
e7a0ccf879 - fixed remaining issues with portal refactoring. 2018-06-23 23:03:34 +02:00
Christoph Oelckers
6ebec37baf - moved all portal code that sets up a scene to be rendered into API independent code and let it be handled by a common wrapper class. 2018-06-23 23:03:34 +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
7f0e29db48 - fixed clip plane setup.
This had to be reordered so that the clip plane gets set before applying the uniforms.
2018-06-22 22:50:33 +02:00
Christoph Oelckers
80a9028938 - mirror clip planes moved - not working yet. 2018-06-22 22:45:05 +02:00
Christoph Oelckers
e7531bb579 - fixed camerapos setup. 2018-06-22 21:44:53 +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
64ce4d5072 - The Teardown virtuals aren't implemented anywhere so they can go away 2018-06-20 11:46:25 +02:00
Christoph Oelckers
f7d8f32114 - removed some unused code from RenderViewpoint 2018-06-20 11:43:10 +02:00
Christoph Oelckers
3a80160ca0 More code from GLSceneDrawer to FDrawInfo 2018-06-20 11:38:45 +02:00
Christoph Oelckers
b244fa2c8b Took the main render function out of GLSceneDrawer and moved them into FDrawInfo
First step of eliminating the intermediate SceneDrawer class which has become mostly redundant.
2018-06-20 11:17:38 +02:00
Christoph Oelckers
677eba3392 - fix the header 2018-06-20 10:48:24 +02:00
Christoph Oelckers
2060402671 Moved the viewpoint setup code in RenderViewpoint to R_SetupFrame 2018-06-20 10:47:03 +02:00
Christoph Oelckers
9bdb5f1a5d Moved ProcessLowerMinisegs back toAPI independent code. 2018-06-20 10:10:30 +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
753cd0aede - made R_SetViewAngle a member of r_viewpoint 2018-06-19 17:44:11 +02:00
Christoph Oelckers
2c655322c3 … and in gl_sprites.cpp 2018-06-19 11:21:32 +02:00
Christoph Oelckers
74d8c929cc Give the clipper a reference to the current viewpoint
This is both for efficiency and encapsulation. At last on MSVC in 64 bit, accessing global variables is very inefficient and the clipper was doing it repeatedly in its worker functions.

It is also one less place where the global viewpoint gets checked.
2018-06-19 09:37:49 +02:00
Christoph Oelckers
46d73e7b4b Pass ticFrac to the model renderer as a parameter
This also removes the rather pointless gl_RenderModel functions because with their two lines of content they can just be placed inline.
2018-06-19 09:18:27 +02:00
Magnus Norddahl
01bda6348e - change swrender mapping to use two buffers/textures and glTexSubImage2D for uploads 2018-06-19 00:09:39 +02:00
Magnus Norddahl
67733ed6e6 - change swrender mapping to use two buffers/textures and glTexSubImage2D for uploads 2018-06-18 21:15:52 +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
34ee04f2ce - moved the matrix math for the sky dome into backend independent code. 2018-06-18 18:18:28 +02:00
Christoph Oelckers
babe55819e - fullscreen toggle and some cleanup. Not fully working yet. 2018-06-17 22:11:35 +02:00
Christoph Oelckers
b65b83edb3 - removed the hard screen resolution switch that still was present on Windows and cleaned up the entire video backend code from the remaining support code for this.
Like Linux and macOS this will only support borderless fullscreen in the active desktop resolution now, which is what modern systems need.
The list of discrete resolutions has been removed as it makes no sense anymore with a fixed video mode - all the other scaling options remain active, though.
2018-06-17 20:08:35 +02:00
Christoph Oelckers
322488d1d1 - fixed: Horizon portals must be drawn in the context of their containing drawinfo.
This data, however, was not passed along to the portal processor and resulted in null pointers when trying to access it.
2018-06-17 18:33: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
Christoph Oelckers
acdb7e391f - fixed bad pointer use in stereo3d code. 2018-06-17 10:53:33 +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
523104b2a8 - simplify some code. 2018-06-16 23:35:12 +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
2f4c2e0425 - fixed some includes which did not cause VC++ to error out. 2018-06-13 23:32:43 +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
3401876476 - use FShaderProgram through an abstract interface and remove all dependencies on the GL renderer from the shader definition source files. 2018-06-13 22:08:55 +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
Christoph Oelckers
59827cd601 - use layout binding qualifiers on uniform buffers when GLSL version >= 4.2
This has no performance benefits but allows checking shader generation correctness without having to implement Vulkan first.
2018-06-13 13:16:07 +02:00
Christoph Oelckers
d2dea17e81 - specify vertex attributes in the shader source for Vulkan compatibility. 2018-06-13 08:40:04 +02:00
Christoph Oelckers
ad7aaa8f2a - specify fragment output locations in the shader source.
OpenGL has been supporting this since version 3.3 and Vulkan requires it so it's the way to go.
2018-06-12 23:52:33 +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
cb5caa757b - moved ShaderUniforms to hwrenderer/ . 2018-06-12 22:08:31 +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
Christoph Oelckers
4ddd9dde79 Use IUniformBuffer 2018-06-12 17:55:34 +02:00
Christoph Oelckers
20e84fff5a - fixed crash with GL 3.x and fixed colormap active.
This must skip all light processing. On GL 4.5 it will only collect useless data but on GL 3.x it will run into an unmapped buffer situation.
2018-06-12 17:55:20 +02:00
Christoph Oelckers
6fced1865f Moved ScopedViewShifter to hwrenderer/ . 2018-06-12 14:47:05 +02:00
Christoph Oelckers
f33ddd8cce Made the ScopedViewShifter fully inline 2018-06-12 14:44:58 +02:00
Christoph Oelckers
3385e28611 Make it compile 2018-06-12 10:58:32 +02:00
Christoph Oelckers
b8b5802599 Added a uniform buffer abstraction class
May get some more methods later, this is just a start to get going.
2018-06-12 10:42:03 +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
Christoph Oelckers
2baed338f7 - flat rendering must check for missing vertex buffer data. 2018-06-05 21:44:38 +02:00
Marisa Kirisame
f74e74ac4b Mirroring should be flipped on HUD models since the view to world space transform already inverts one axis 2018-06-03 14:20:42 +02:00
Magnus Norddahl
f03c02df43 - fix gamepic render buffer issues 2018-06-03 13:59:40 +02:00
Marisa Kirisame
dea1d0259d Swap front face culling for GL model drawer (CCW should be the default).
Added mirroring handling to software models.
2018-06-03 07:26:55 +02:00
Christoph Oelckers
d0aacd3ba8 - fixed: The translucent border draw list must be rendered with depth writing active.
This gets exclusively used by portal borders which means that for walls the setting is irrelevant but for flats it is needed to cover the portal surface so that translucent parts of the outer scene do not bleed through.
2018-06-02 23:09:51 +02:00
Christoph Oelckers
94d1a73ae8 - pass mirroring info to model drawers.
Actual evaluation only implemented in OpenGL. Not tested yet because the bug report had no testable example.
2018-06-02 13:07:47 +02:00
alexey.lysiuk
81f042f08b - fixed compilation with Clang and GCC
src/gl/scene/gl_flats.cpp:215:3: error: cannot jump from this goto statement to its label
src/r_data/models/models.cpp💯18: error: no member named 'floor' in namespace 'std'
2018-06-02 09:43:33 +03:00
Christoph Oelckers
058c5426cd - fixed: OpenGL2 should not use the precalculated vertex buffer data for flat rendering.
This wasn't set up properly anymore because the new index-based buffer code is not efficient on GL2, but the render function forgot to skip the buffer checks and jump right to the fallback path.
2018-06-02 07:25:41 +02:00
alexey.lysiuk
7b619bc78c - fixed crash with legacy render path
https://forum.zdoom.org/viewtopic.php?t=60727
2018-06-01 12:28:27 +03:00
alexey.lysiuk
4f5911da21 - fixed rendering of environment map on mirrors
With temporarily mapped buffer this feature seems to never work correctly
With persistently mapped buffer it was broken in 9a1603b246
2018-05-30 15:46:53 +03:00
alexey.lysiuk
f06ee10495 - use proper map section for wall mirror portal
https://forum.zdoom.org/viewtopic.php?t=60671
2018-05-29 12:16:20 +03:00
alexey.lysiuk
a0695cbb48 - fixed blinking frame after saving a game
Viewport was not reseted after creation of saved game thumbnail, so one junk frame was rendered right after saving a game

https://forum.zdoom.org/viewtopic.php?t=60412
2018-05-29 12:07:45 +03:00
alexey.lysiuk
0187b0aa5b - fixed mirrors and reflections in hardware renderer
https://forum.zdoom.org/viewtopic.php?t=60671
2018-05-28 11:51:43 +03:00
Christoph Oelckers
496e6e2e8f - fixed: The vertex height updater was using the index buffer offsets to access the vertex buffer.
I missed this part when repurposing the vboindex members to store the index buffer offsets.
However, since both indices are needed, they need another set of variables.
2018-05-24 00:01:56 +02:00
Christoph Oelckers
23909d109f fixed: Generating light data for single subsectors should not use the light list of the entire sector but only the one for the current subsector 2018-05-23 08:46:26 +02:00
Christoph Oelckers
044c8a2034 - removed gl_render_subsectors test CVAR and disabled vertex buffer generation for legacy mode
To reduce the performance impact, legacy mode will now always create flat vertex data on the fly instead of relying on the vertex buffer. This makes the CVAR mostly redundant as on anything more modern rendering per subsector will always be slower.
2018-05-23 08:43:52 +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
3f6789ecac - moved gl_bsp.cpp to its proper place. 2018-05-22 21:36:42 +02:00