Commit graph

1666 commits

Author SHA1 Message Date
Christoph Oelckers
f57c804a5a store shadow map index in the light actor instead of a separate TMap
This frees another file of a direct renderer dependency and generally also should be faster
2018-04-16 08:42:37 +02:00
Christoph Oelckers
88f856d995 - fixed a y/Z mixup with the hardware renderer's vectors.
Why do they have to be different from what the game itself uses...? :(
2018-04-15 23:51:41 +02:00
Christoph Oelckers
dcefa3cd12 - GLSprite done, too. 2018-04-15 19:57:28 +02:00
Christoph Oelckers
ee1d1a29a6 - converted GLFLat list to use pointers as well.
- added copy constructors and assignement operators to GLFlat and GLWall so that they can use memcpy instead of field-by-field copy. This actually increases performance slightly.
2018-04-15 19:00:54 +02:00
Christoph Oelckers
d17216d7dd - fixed the translucent wall splitter, it forgot to copy the original wall before making adjustments to it and its copy. 2018-04-15 17:04:02 +02:00
Christoph Oelckers
e8eb8dd596 - store the wall render nodes as pointers, not as objects.
This is mainly for future-proofing because storing these as objects in an array not only has a negative impact when using multithreading due to longer blocking time for the threads but also makes it hard to cache this data for reuse.
2018-04-15 14:25:42 +02:00
Magnus Norddahl
e15baa21cb - Remove dead code 2018-04-15 12:21:40 +02:00
Christoph Oelckers
515323dcbd - fixed: Rendering a translucent mid texture did not unset the render style for the following bottom texture.
With additive translucency and non-black fog this caused visual errors.
2018-04-15 08:29:40 +02:00
Christoph Oelckers
c03024e1b0 - fixed last commit 2018-04-14 22:34:25 +02:00
Christoph Oelckers
71c8417578 - removed UniqueLineToLines because it wasn't used anywhere. 2018-04-14 21:24:48 +02:00
Christoph Oelckers
790182a2f4 - split GLWall::PutWall in two. 2018-04-14 20:20:43 +02:00
Christoph Oelckers
59a08ce0df - fixed a few warnings and changed the return type of FGLTexture::Bind, because no caller needs the hardware texture. 2018-04-14 12:24:04 +02:00
Christoph Oelckers
0affc119fd - moved hardware independent part of flat vertex data out of GL folder. 2018-04-14 12:05:31 +02:00
Christoph Oelckers
e654a99d39 - changed GLDebug to receive char pointers instead of FStrings.
The most frequent call using this is the regular texture creation function where this results in a pointless allocation and destruction of a temporary string which is easily avoided.
2018-04-14 10:40:11 +02:00
Christoph Oelckers
ad021cc374 - fixed: Hardware camera textures were given a dimension of (0, 0). 2018-04-14 10:26:56 +02:00
alexey.lysiuk
e6e2b11167 Set common name for system-specific framebuffer class
Implementation details are hidden as much as possible in platform-specific source files
Reduced number of included header files
2018-04-09 20:47:49 +02:00
Christoph Oelckers
551691f42a - made FTexture::GetPixels and FTexture::GetColumn non-pure-virtual.
With the software renderer not being used for 2D anymore it would be quite annoying if every texture class had to implement these.
If done properly, the SW renderer should actually be forced to dynamic_cast any texture to a FWorldTexture before using this stuff, but that'd be some pointless overhead better saved.
2018-04-08 21:19:57 +02:00
Christoph Oelckers
a40d85fd41 - fixed: Before aqcuiring the WipeEndScreen, the renderer must be flushed.
Apparently this got previously done implicitly by code that got lost in the refactoring.
2018-04-08 19:54:17 +02:00
Christoph Oelckers
94e8d59dde - implemented shader support for rendering the SW renderer canvas with legacy OpenGL. 2018-04-08 13:05:20 +02:00
alexey.lysiuk
8cd3cf04e7 Fixed a few compilation warnings
src/gl/renderer/gl_renderer.cpp:775:39: warning: comparison of two values with different enumeration types ('F2DDrawer::ETextureDrawMode' and 'TexMode') [-Wenum-compare]
src/gl/renderer/gl_renderer.cpp:776:39: warning: comparison of two values with different enumeration types ('F2DDrawer::ETextureDrawMode' and 'TexMode') [-Wenum-compare]
src/gl/renderer/gl_renderer.cpp:777:39: warning: comparison of two values with different enumeration types ('F2DDrawer::ETextureDrawMode' and 'TexMode') [-Wenum-compare]
src/gl/renderer/gl_renderer.cpp:778:45: warning: comparison of two values with different enumeration types ('F2DDrawer::ETextureDrawMode' and 'TexMode') [-Wenum-compare]
src/gl/renderer/gl_renderer.cpp:779:40: warning: comparison of two values with different enumeration types ('F2DDrawer::ETextureDrawMode' and 'TexMode') [-Wenum-compare]
src/gl/renderer/gl_renderer.cpp:780:45: warning: comparison of two values with different enumeration types ('F2DDrawer::ETextureDrawMode' and 'TexMode') [-Wenum-compare]

src/v_draw.cpp:1144:51: warning: '&' within '|' [-Wbitwise-op-parentheses]

src/textures/texture.cpp:1050:20: warning: comparison of integers of different signs: 'int' and 'unsigned long' [-Wsign-compare]

src\intermission\intermission.cpp(80): warning C4101: 'lumpnum': unreferenced local variable
2018-04-08 13:55:46 +03:00
alexey.lysiuk
b8ee9d88ba Fixed non-constant condition for static assertion
GCC 7:
src/gl/renderer/gl_renderer.cpp:702:2: error: non-constant condition for static assertion
src/gl/renderer/gl_renderer.cpp:702:2: error: value ‘12’ of type ‘float*’ is not a constant expression
src/gl/renderer/gl_renderer.cpp:703:2: error: non-constant condition for static assertion
src/gl/renderer/gl_renderer.cpp:703:2: error: value ‘20’ of type ‘PalEntry*’ is not a constant expression

Clang:
src/gl/renderer/gl_renderer.cpp:701:16: error: static_assert expression is not an integral constant expression
src/gl/renderer/gl_renderer.cpp:701:23: note: cannot access field of null pointer
2018-04-08 13:55:46 +03:00
Christoph Oelckers
b12a6fded9 - added the code for legacy shaders.
- force texture filtering for 2D to off when in software rendering.
2018-04-08 12:11:51 +02:00
Christoph Oelckers
1897073b60 -fixed: When performing a restart the SW scene drawer's resources should be reset because they are outside the control of higher level containers. 2018-04-08 08:03:46 +02:00
Christoph Oelckers
0a2c415dbe - deleted some copypasted but ultimately unused definitions. 2018-04-07 23:52:46 +02:00
Christoph Oelckers
df4f435952 - merged vid_renderer, swtruecolor and r_polyrender into one CVAR to reduce menu clutter.
- with renderers freely switchable, some shortcuts in the 3D floor code had to be removed, because now the hardware renderer can get FF_THISINSIDE-flagged 3D floors.
- changed handling of attenuated lights in the legacy renderer to be adjusted when being rendered instead of when being spawned. For the software renderer the light needs to retain its original values.
2018-04-07 23:30:28 +02:00
Magnus Norddahl
fde87c40d2 - fix crash when in software truecolor mode - the pitch is in pixels, not bytes 2018-04-07 19:56:54 +02:00
Christoph Oelckers
1fc1fac2c2 - added missing header. 2018-04-07 19:41:21 +02:00
Christoph Oelckers
cd00f1fb45 - fixed incorrect check for SW texture recreation. 2018-04-07 18:41:25 +02:00
Christoph Oelckers
5fbc723842 - live switching of the renderer works. 2018-04-07 12:59:04 +02:00
Christoph Oelckers
221beec979 - added palette shader and fixed a few things. 2018-04-07 12:17:23 +02:00
Christoph Oelckers
211a7f2569 - made the screen blend work for the software renderer.
It may use the same calculations as the hardware renderer but must use the 2D drawer for display.
It should be investigated if the hardware renderer can do this as well.
2018-04-07 10:53:20 +02:00
Christoph Oelckers
b34d7f9e08 - added a software scene drawer to the GL renderer.
It still looks like shit and only works on the modern render path but at least the basics are working.
2018-04-07 10:20:59 +02:00
Christoph Oelckers
d474b849a5 - removed the remaining calls from the FRenderer interface from the main game code.
This does not work with a setup where the same backend is driving both renderers.
Most of this is now routed through 'screen', and the decision between renderers has to be made inside the actual render functions.
The software renderer is still driven by a thin opaque interface to keep it mostly an isolated module.
2018-04-04 00:21:25 +02:00
Christoph Oelckers
fcc33f0a09 - moved around more stuff from the FRenderer interface. 2018-04-03 22:50:47 +02:00
Christoph Oelckers
51bf2eb9fa - took GetMaxViewPitch out of renderer interfaces.
With live switching and both renderers on the same backend the old approach will no longer work.
2018-04-03 19:18:16 +02:00
Christoph Oelckers
9a919960c9 - fixd bad comparators for std::sort 2018-04-03 01:01:10 +02:00
Christoph Oelckers
7589dfda25 - removed test and debug code. 2018-04-03 00:53:45 +02:00
Christoph Oelckers
853903bb7e - removed the border refresh counter.
This was just a relic of DirectDraw as main backend and is no longer needed.
2018-04-03 00:50:40 +02:00
Christoph Oelckers
2f96d3c61a - moved global variable definitions to the top of a few files.
Most of these are not critical because they only get used in non-multithreaded contexts but it's definitely easier to look them up this way.
2018-04-02 23:42:45 +02:00
Christoph Oelckers
821c2ec4c7 - removed access to deleted variable. 2018-04-02 20:38:12 +02:00
Christoph Oelckers
6641d65237 - use std::sort to sort the draw lists to avoid having to go through global variables. 2018-04-02 20:10:51 +02:00
Christoph Oelckers
5d94af913a - no, we do not want to use global variables to pass parameters around... 2018-04-02 18:13:18 +02:00
Christoph Oelckers
60aebff4a1 - starting separation of hardware dependent and hardware independent code, starting with aabbtree, because it was easy. 2018-04-02 15:58:28 +02:00
Christoph Oelckers
52c5328412 - made the glow getter functions members of sector_t. 2018-04-02 13:36:28 +02:00
Christoph Oelckers
d01bc452ba - moved all variables not related to the hardware renderer's texture state out of gl_info. 2018-04-02 13:00:33 +02:00
Christoph Oelckers
1fc4c9801b - moved all GLDEFS parsing into a dedicated source file.
- split gl_postprocessshader.h in two so that the hardware independent part can be used by GLDEFS without pulling in all of OpenGL.
2018-04-02 12:28:20 +02:00
Christoph Oelckers
fd6fbc76c6 - moved the ZDoomGL texshader files to 'unused', where they belong. It is very unlikely that this code will ever be revisited. 2018-04-02 10:24:27 +02:00
Christoph Oelckers
8080e039e0 - moved most of gl_setup.cpp to r_data as this is only some data setup in the main map data structures.
- made currentmapsections array something nicer to look at and made it a member of the scene drawer class.
2018-04-02 09:27:40 +02:00
Christoph Oelckers
202d209eb8 - made the MapSectionGenerator a class to remove a global array. 2018-04-02 08:25:07 +02:00
Christoph Oelckers
4357f0dc40 - removed translation hack for alpha textures.
This will cause incorrectly generated textures and the reason for this no longer exists because CreateTexBuffer is doing this as a postprocessing step now.
2018-04-02 03:38:25 +02:00
Christoph Oelckers
524df21d81 - moved portal grouping code out of GL and into r_data. 2018-04-02 00:39:04 +02:00
Christoph Oelckers
d84554f093 - deleting some unused stuff 2018-04-02 00:28:25 +02:00
Christoph Oelckers
64b504ee7f - fixed last commit. This was missing an init call for the portal data. 2018-04-02 00:14:53 +02:00
Christoph Oelckers
248a29bf06 - resorted portal render data.
Compiles but does not work...
2018-04-01 22:26:57 +02:00
Christoph Oelckers
8be788a9b3 - moved portal data into FLevelLocals. 2018-04-01 20:17:39 +02:00
Christoph Oelckers
65e7b6dfaa - moved the code in gl_data.cpp to better fitting places
* the MAPINFO options now get handled in g_mapinfo.cpp and g_level.cpp, just like the rest of them as members of level_info_t and FLevelLocals.
* RecalcVertexHeights has been made a member of vertex_t and been moved to p_sectors.cpp.
* the dumpgeometry CCMD has been moved to p_setup.cpp
2018-04-01 18:45:27 +02:00
Christoph Oelckers
0127a71974 - fixed last commit. 2018-04-01 17:16:53 +02:00
Christoph Oelckers
0ae371f3ce - moved gl_use_hires check back into material class and cleaned up the interface a bit.
The function is supposed to be a worker, nothing more and its result should only depend on its arguments.
2018-04-01 16:32:37 +02:00
Christoph Oelckers
c60c025554 - moved gl_load headers out of the gl folder.
This is mainly to get them out of the way. The place is not optimal but will have to do as long as this remains a separate branch.
2018-04-01 16:30:34 +02:00
Christoph Oelckers
8b79eedfea - moved CreateTexBuffer out of the GL code.
This is merely a buffer creation function with no dependencies on the renderer.
2018-04-01 14:38:48 +02:00
Christoph Oelckers
711a88bab3 - consolidated cycle_t and glcycle_t because aside from glcycle_t's ability to be deactivated when no profiling takes place they did exactly the same thing. 2018-04-01 13:24:03 +02:00
Christoph Oelckers
d6fedd36b1 - moved the Plane class to vectors.h and deleted gl_geometric.h 2018-04-01 12:43:23 +02:00
Christoph Oelckers
cd64655f97 - removed empty header gl_convert.h 2018-04-01 12:00:51 +02:00
Christoph Oelckers
1461059dae - moved contents of gl_templates.h to files outside of gl/ 2018-04-01 11:59:12 +02:00
Christoph Oelckers
e49cd2cb83 - moved the hires replacement and upscaling code out of the GL classes into FTexture.
This theoretically means that the software renderer could access this data as well - if it just had been written with a more flexible texture interface.
However, as things stand, this may require quite a bit of work to achieve.
2018-04-01 10:41:04 +02:00
Christoph Oelckers
a9d5533603 - integrated GL parts of translation handling into the main module.
Now that this doesn't have to share assets with HW2D it could be simplified a lot.
2018-04-01 00:59:49 +02:00
Christoph Oelckers
bc485a7f2c - moved a large portion of gl_textures.cpp into the main files for the implementing classes.
The old organization made sense when ZDoom still was a thing but now it'd be better if all pure data with no dependence on renderer implementation details was moved out.
A separation between GL2 and GL3+4 renderers looks to be inevitable and the more data is out of the renderer when that happens, the better.
2018-03-31 19:20:59 +02:00
Christoph Oelckers
410d6817b2 - minor cleanup on the texture layer data in FTexture. 2018-03-31 12:27:41 +02:00
Christoph Oelckers
6d6196388e - made SPROFS a more usable feature.
This was originally invented to fix the sprite offsets for the hardware renderer.
Changed it so that it doesn't override the original offsets but acts as a second set.
A new CVAR has been added to allow controlling the behavior per renderer.
2018-03-31 10:37:46 +02:00
Christoph Oelckers
5bdea6278c - removed RequireGLNodes from FRenderer interface.
It returned true for both renderers anyway.
2018-03-31 00:33:09 +02:00
Christoph Oelckers
6cd26dec01 - remove some dead code. 2018-03-31 00:25:15 +02:00
Christoph Oelckers
a001a5304d - removed the old software renderer framebuffers for Windows
This cannot be refactored with the old code still present and done properly both renderers should share what they can.
2018-03-30 23:18:25 +02:00
Christoph Oelckers
ff19627251 - fixed legacy version of color overlay to use the correct blend settings. 2018-03-30 21:34:04 +02:00
Christoph Oelckers
00c66f42d3 - made DTA_SpecialColormap work, both for GL3+ and GL2 render paths.
This will only be used for HUD sprites. At the moment it will ignore sprite translations, though, when running in OpenGL 2 legacy mode.
2018-03-30 21:14:49 +02:00
Christoph Oelckers
832df6d43a - implemented desaturation for the legacy GL renderer's 2D.
A lot of work that's only needed to be able to use the hardware renderer's 2D code with the software renderer.
2018-03-30 18:14:42 +02:00
Christoph Oelckers
811d96e07e D3D 2D code refactored but not tested yet. 2018-03-29 23:21:25 +02:00
Christoph Oelckers
a40e085a46 - 2D drawer implementation complete for hardware renderer.
This also replaces DTA_ColormapStyle with proper implementations of its components. As implemented it was a very awkward mixture of various effects that already existed in a separate form. As a result of its implementation it required additional but completely redundant shader support which could be removed now. As a side effect of this change a new DTA_Desaturate option was added.
2018-03-29 16:21:21 +02:00
Christoph Oelckers
077df87704 - 2D code works in GL legacy mode.
Not tested yet with shaders.
2018-03-29 11:58:28 +02:00
Christoph Oelckers
fa6ba84094 - fixed untextured vertex order and removed some test code. 2018-03-29 00:38:31 +02:00
Christoph Oelckers
a253b15334 - more fixes. 2018-03-28 23:57:50 +02:00
Christoph Oelckers
3ca3193379 - fixed a few things, but still not working. 2018-03-28 23:42:06 +02:00
Christoph Oelckers
b194f2c466 - game starts, but no 2D visible yet. 2018-03-28 22:04:28 +02:00
Christoph Oelckers
70b6754299 - implemented the 2D drawer for the hardware renderer. Not tested yet. 2018-03-28 21:38:00 +02:00
Christoph Oelckers
16480a3f4b - it compiles again.
This won't work, though, because no backend for the new 2D code exists yet.
2018-03-28 16:40:09 +02:00
Christoph Oelckers
33289ade49 - renamed the 2D drawer in the GL renderer so that the same name can be used for the device-independent replacement. 2018-03-27 21:44:58 +02:00
Christoph Oelckers
29ad081368 - removed remaining DirectDraw code and a few other things that are no longer being used. 2018-03-27 21:04:01 +02:00
Christoph Oelckers
2ed744963c - Changed frame buffer locking mechanism so that the only place where a lock is needed is when the software renderer wants to access the render buffer, which is precisely for the duration of the RenderView function.
No more locking insanity! :)
There are no locking counters or other saveguards here that would complicate the implementation because there's precisely two places where this buffer must be locked - the RenderView functions of the regular and poly SW renderer which cannot be called recursively.
2018-03-27 20:02:44 +02:00
Christoph Oelckers
0c3635e22c - removed vid_hw2d CVar. 2018-03-27 17:58:25 +02:00
Christoph Oelckers
62f073ef60 - removed Accel2D variable and a little bit of locking cruft. 2018-03-27 17:13:10 +02:00
Christoph Oelckers
cff5f0e3c7 - removed DFrameBuffer's locking mechanism.
In its current form this is quite useless. What's really needed is to require a lock on the RenderBuffer for the 3D scene, but since this is not needed for the 2D stuff anymore it can be done far simpler.
2018-03-27 16:48:33 +02:00
Christoph Oelckers
c06ad5c59c - separated DFrameBuffer from DCanvas.
This was a bad idea from the start and really only made sense with DirectDraw.
These days a FrameBuffer represents an abstract hardware canvas that shares nothing with a software canvas so having these classes linked together makes things needlessly complicated.
The software render buffer is now a canvas object owned by the FrameBuffer.

Note that this commit deactivates a few things in the software renderer, but from the looks of it none of those will be needed anymore if we set OpenGL 2 as minimum target.
2018-03-27 14:14:46 +02:00
Christoph Oelckers
bb9283a9af - work on separating DFrameBuffer from DCanvas.
2D works in D3D backend, but 3D crashes because not all pointers have been rerouted yet.
2018-03-27 13:50:31 +02:00
Christoph Oelckers
1a28644d83 - cleaned out unused stuff from DCanvas.
- removed CocoaFrameBuffer because it is a software fallback which is no longer supported.
2018-03-27 11:25:06 +02:00
Christoph Oelckers
dd491d6558 - removed support for paletted Windows display modes.
This was only relevant for DirectDraw which has been removed.
2018-03-27 10:41:38 +02:00
Christoph Oelckers
a350c43c87 . removed the texture atlases from the OpenGLSWFrameBuffer.
# Conflicts:
#	src/gl/system/gl_swframebuffer.cpp
2018-03-26 22:05:45 +02:00
Christoph Oelckers
41a0e6af4a - removed the D3D texture atlas implementation.
This is a necessary first step for simplifying the texture handling in order to refactor it.

# Conflicts:
#	src/gl/system/gl_swframebuffer.cpp
#	src/textures/textures.h
#	src/win32/fb_d3d9.cpp
2018-03-26 22:05:35 +02:00
Christoph Oelckers
d9f6546c16 - removed Shader Model 1.4 support.
The only hardware ever to support this is ATI's R200 which has been deprecated by ATI before Vista got released, and is no longer a relevant target.
2018-03-26 22:03:33 +02:00
Christoph Oelckers
40bbe5cd8a - removed DirectDraw backend. 2018-03-26 22:03:32 +02:00
Christoph Oelckers
d166ab95a9 Revert "- fixed: 3D floor that extend into the real sector's floor were not clipped properly."
This reverts commit a33ad3c99e.

Turns out that this breaks legitimate maps. So I'd rather let that one broken map glitch than the good ones.
2018-03-26 19:44:41 +02:00
Christoph Oelckers
755cbd341b - fixed: A sprite having a picnum was not animating its image in the hardware renderer. 2018-03-25 22:01:18 +02:00