Commit graph

251 commits

Author SHA1 Message Date
Christoph Oelckers
7c5080f654 - reimplemented sector splitting.
With the new setup this is a lot easier than with the old one.
2021-12-30 09:53:10 +01:00
Christoph Oelckers
fc41a2bd85 - renamed sections2 and sections2PerSector.
No more need for a '2'.
2021-12-30 09:53:10 +01:00
Christoph Oelckers
f6d852b5a0 - removed the old section builder 2021-12-30 09:53:09 +01:00
Christoph Oelckers
b0e4b49771 - removed the node builder.
With libtess2 working we do not need this anymore.
2021-12-30 09:53:09 +01:00
Christoph Oelckers
7a9596ae81 - use SectionGeometry for 3D rendering. 2021-12-30 09:53:09 +01:00
Christoph Oelckers
37e49ed775 After this any old mesh has become invalid and needs to be rebuilt.
- use only one Section type.
2021-12-30 09:53:09 +01:00
Christoph Oelckers
362b824775 - ClipWindow WIP 2021-12-30 09:53:08 +01:00
Christoph Oelckers
411e3e6f9c - make SectionGeometry create some data. 2021-12-30 09:53:07 +01:00
Christoph Oelckers
ca19c265f8 - interface from Section2 to the flat processing. 2021-12-30 09:53:07 +01:00
Christoph Oelckers
b8c4354691 - got rid of the MAX... constants and adjusted all places still using them. 2021-12-26 23:10:02 +01:00
Christoph Oelckers
1a3b9f8ac0 - made several arrays holding sector related data dynamic. 2021-12-26 23:10:02 +01:00
Christoph Oelckers
6a43a270fa - use sectno() access function where we really need a sector index. 2021-12-26 23:10:01 +01:00
Christoph Oelckers
a2e280e188 - use wallsofsector in 4 more places.
# Conflicts:
#	source/build/src/polymost.cpp
2021-12-26 23:09:57 +01:00
Christoph Oelckers
e79cd8d87f - don't store sprite indices in walltype::portalnum 2021-12-26 23:09:54 +01:00
Christoph Oelckers
eaff9e359f - refactored the owner index in tspritetype.
This is now a separate type from spritetype which contains an actor pointer instead so that sprite display can be handled without requiring a static sprite array.
2021-12-26 23:09:53 +01:00
Christoph Oelckers
f9b1164747 - use point2Wall wherever possible. 2021-12-26 23:09:48 +01:00
Christoph Oelckers
b663b8ea26 - wallptr reduction. 2021-12-26 23:09:48 +01:00
Christoph Oelckers
a22634f228 - sectnum reduction. 2021-12-26 23:09:47 +01:00
Christoph Oelckers
4c13f24357 - rename FBunch's sectnum because it complicated searching for other stuff. 2021-12-26 23:09:47 +01:00
Christoph Oelckers
12f6b05cbe - use access functions, all done by search & replace. 2021-12-26 23:09:44 +01:00
Christoph Oelckers
2aefe4398b - sector[tspr->sectnum] globally replaced. 2021-12-26 23:09:43 +01:00
Christoph Oelckers
4928187b02 - handle the RR geometry hack 2021-12-25 21:28:57 +01:00
Christoph Oelckers
b30be9bc12 - unlimited blockingpairs 2021-12-25 21:28:50 +01:00
Christoph Oelckers
d5c27e6239 - unlimited the bit arrays for the automap and the bunch drawer, removed some leftover constants/declarations. 2021-12-25 21:28:50 +01:00
Christoph Oelckers
eeabe0fe6d - fixed culling of mirrored voxels for real this time. 2021-12-15 21:19:42 +01:00
Christoph Oelckers
8cb871e5ff - fixed: voxel culling must take sprite flipping into account. 2021-12-14 13:43:24 +01:00
Christoph Oelckers
7546cf3a4b - replaced vec3f_t with FVector3. 2021-12-14 09:58:01 +01:00
Christoph Oelckers
a899055f50 - fixed: in palette emulation mode, assume all textures to be non-translucent.
These need to force an alpha test, which is disabled for textures with translucent texels.
2021-12-13 10:35:03 +01:00
Mitchell Richters
2253a418c7 - Tidy up some of the indentations that were badly resolved in the previous commits merge conflict. 2021-12-13 07:39:01 +11:00
Christoph Oelckers
054d81fc8e - fixed logic for discarding walls in new renderer.
The case being checked here may decide not to add the wall to the clipper but it must still be rendered.
Information for determining visibility is not sufficient in case of sector overlaps which can happen with rotating doors or poorly set up sector objects.

# Conflicts:
#	source/core/rendering/scene/hw_bunchdrawer.cpp
2021-12-12 19:40:17 +01:00
Christoph Oelckers
f765783437 - various small bits of cleanup. 2021-11-29 00:57:11 +01:00
Christoph Oelckers
6cec61683d - fixed incorrectly placed tileUpdatePicnum call in new renderer for sprites.
This was only in the regular sprite call and did not affect models or voxels.
2021-11-29 00:57:10 +01:00
Christoph Oelckers
35c2d6d14e - fixed translucent voxel rendering. 2021-11-29 00:57:10 +01:00
Christoph Oelckers
9b6d6eb7f9 - sector[] in render interface 2021-11-29 00:56:30 +01:00
Christoph Oelckers
adf3133fdc - use sectnum and wallnum to get an index from pointers instead of subtracting the array base. 2021-11-29 00:56:26 +01:00
Christoph Oelckers
01abe7b2ac - addressed most unused/uninitialized variable warnings from MSVC. 2021-11-29 00:55:30 +01:00
Mitch Richters
b02a6a3ec9 - Replace MIN() from templates.h with version provided in STL. 2021-10-30 10:36:15 +02:00
Mitch Richters
9894729fc2 - Replace MAX() from templates.h with version provided in STL.
# Conflicts:
#	source/common/textures/hw_ihwtexture.cpp
#	source/common/utility/templates.h
2021-10-30 10:36:02 +02:00
Christoph Oelckers
62d0d3712e - use a sprite flag to mark mapped sprites.
This avoids another global array which needs to be addressed by sprite index.
2021-10-14 15:09:43 +02:00
Christoph Oelckers
83944a7191 - fixed uninitialized light index variable for floor sprites. 2021-10-11 22:28:26 +02:00
Christoph Oelckers
29769dd673 - fixed engine code warnings pointed out by XCode 13. 2021-10-08 19:06:41 +02:00
Christoph Oelckers
0d4e0d72fb - fixed vertex generation when splitting walls by planes on old hardware. 2021-09-18 13:04:46 +02:00
Christoph Oelckers
7f485bfab1 - split off the extended sprite flags into their own word.
Some code overwrites the cstat field entirely (thanks Duke, for being sloppy with this...!)
2021-09-12 18:26:35 +02:00
Christoph Oelckers
99ecfe133d - flag sprites for automapping regardless of the 'automapping' variable's value.
Duke should show its floor sprites, too.
2021-09-12 18:22:38 +02:00
Christoph Oelckers
0069af02e7 - use a slightly higher depth bias for translucent elements.
These can otherwise cause z-fighting when being used with non-translucent floor and wall sprites.
2021-06-13 09:39:07 +02:00
Christoph Oelckers
9d36e61d3f - depth bias fixes. 2021-06-09 00:47:13 +02:00
Christoph Oelckers
a32489be31 - wall sprite positioning tweaks.
Turns out that a distance of one Build unit from a wall alone is not enough to render them glitch-free, some depth bias is still needed.
2021-06-09 00:31:54 +02:00
Christoph Oelckers
f96521a7f4 - fixed: Floor sprites must set their view orientation.
The translucent element sorter needs this to operate properly.
2021-06-02 20:32:35 +02:00
Christoph Oelckers
3c5ef9c8e6 - properly render geometry that's fully shrouded in fog. 2021-06-01 21:48:39 +02:00
Christoph Oelckers
2e9732ce79 - fixed new renderer's use of fog on skies: The palette value from the wall was used instead of the one from the sky plane. 2021-05-29 12:09:16 +02:00
Christoph Oelckers
264d42179e - optimized the wall drawer a bit to avoid repeated calls to the render API's deoth bias function.
The setters in FRenderState should check if the value actually changes and the wall drawer should only call it for non-translucent wall sprites.
2021-05-21 19:07:22 +02:00
Christoph Oelckers
4bb57cfab5 - fixed flickering floor sprites.
The SetDepthBias call was somehow gotten lost.
2021-05-21 19:03:39 +02:00
Christoph Oelckers
f7a424cd06 - fixed precision issues with GetClosestPointOnWall for orthogonal lines.
The math failed for some large wall sprites (e.g. Blood E2M4, sprite #181), and in orthogonal cases it is better anyway to perform direct checks of the coordinates
2021-05-21 18:25:30 +02:00
Christoph Oelckers
24dbfc7827 - fixed BunchInFront to do a more thorough comparison in case it encounters colinear walls. 2021-05-21 14:32:01 +02:00
Christoph Oelckers
079a95a0a3 - use a higher depth bias for non-orthogonal wall sprites.
Due to minor angular inaccuracies they are more sensitive to z-ordering than orthogonal ones when things are closely stacked.
2021-05-21 14:32:01 +02:00
Christoph Oelckers
be97ee04f9 - re-enable flat sprite rendering.
This was commented out for testing but forgotten afterward.
2021-05-20 19:21:14 +02:00
Christoph Oelckers
5cfd810311 - new renderer: take fog properties for walls and ceilings from the proper elements. 2021-05-20 19:17:21 +02:00
Christoph Oelckers
b5358bc03c - fixed typo in wall sprite offsetting code. 2021-05-20 18:25:19 +02:00
Christoph Oelckers
d4eb54d686 - render free standing wall sprites without depth bias.
Otherwise they can end up badly ordered with walls.
2021-05-20 12:36:35 +02:00
Christoph Oelckers
5fd41ab910 - new renderer: draw the fog layer for skies.
Code was active but alpha wasn't set.
2021-05-18 00:42:45 +02:00
Christoph Oelckers
5e94eaff8e - new renderer: handle light level underflows. 2021-05-16 18:50:54 +02:00
Christoph Oelckers
a348508779 - handle the wall sprite clipping properly. 2021-05-16 16:00:00 +02:00
Christoph Oelckers
5bb438b817 - new renderer: fixed bad positioning when a y-flipped wall sprite had to be clipped to floor or ceiling. 2021-05-16 12:17:26 +02:00
Christoph Oelckers
845ce63348 - make sure that all objects rendered as shadow reset the object color after the draw call. 2021-05-15 10:40:25 +02:00
Christoph Oelckers
55abb261c6 - this was in the wrong place. :( 2021-05-15 10:25:37 +02:00
Christoph Oelckers
db8572dbcc - newrenderer: clip wall angles before doing any math with them.
In some cases these unclipped ranges ended up in other data structures, causing problems with bunch ordering.
2021-05-14 12:56:37 +02:00
Christoph Oelckers
3d6ae40bc0 - normalize all angles to the actual viewing range in the drawer.
This simplifies the debugging of this code a lot because we no longer have to deal with range overflows and can do direct comparisons everywhere.
2021-05-14 10:50:22 +02:00
Christoph Oelckers
cb2bc7967a - fixed the remaining warnings. 2021-05-12 21:50:01 +02:00
Christoph Oelckers
d097c8e635 - removed the non-functional and long abandoned level music alias feature.
With RMAPINFO such a hack is no longer needed for anything.
2021-05-12 21:48:40 +02:00
Christoph Oelckers
783b94f922 - more warning fixes in 'core'. 2021-05-12 21:48:14 +02:00
Christoph Oelckers
03289f5097 - silenced some warnings. 2021-05-12 21:47:32 +02:00
Christoph Oelckers
e74aca291c - position tweaking for Nam's skies.
Why is this such an utter mess to get skies placed correctly? :(
2021-05-10 20:13:28 +02:00
Christoph Oelckers
325af156e7 - fixed loop in ProcessBunch to account for array reallocation. 2021-05-08 09:16:06 +02:00
Christoph Oelckers
79823b430c - reinstate the old code for rendering the first portal without stencil
The previous commit fixes the true issue causing the problems - with this back the restriction is not needed anymore.
2021-05-07 00:26:22 +02:00
Christoph Oelckers
b644000b02 - fixed texture y-flipping on bottom tiers of walls.
The flip flag was taken from the wrong side of the wall.
2021-05-07 00:18:13 +02:00
Christoph Oelckers
29b0106a96 - fixed yet another problem with the local 'sprite' variables in HWWall causing problems.
This variable and its companions in HWFlat and HWSprite have now been renamed to avoid these issues.
2021-05-07 00:09:30 +02:00
Christoph Oelckers
d206a767b2 - added render workaround for CP07. 2021-05-03 17:48:35 +02:00
Christoph Oelckers
d8b808576f - restrict the sky portal shortcut to skies in scenes where there are no other portals.
This entire setup does not work with sector portals, causing various render glitches in Shadow Warrior's portals. This also applies to skies within portals so it is now restricted to single sky setups.
2021-05-03 14:52:23 +02:00
Christoph Oelckers
389340f97c - use sections for rendering. 2021-05-03 00:15:09 +02:00
Christoph Oelckers
aa6bd8ffcc - factor in angoff when placing sprites. 2021-04-25 11:58:03 +02:00
Christoph Oelckers
ad28630df6 - offloaded map patches to data files.
This is a lot easier to manage than having them in the code.
For now it piggybacks on the map hack feature, later this should use the same scripted approach as GZDoom.
2021-04-24 23:07:35 +02:00
Christoph Oelckers
a7046eaee4 - fixed animations on skies.
Lunatic Fringe made this very obvious.
2021-04-24 20:04:02 +02:00
Christoph Oelckers
5585351c0f - added a hack to help the new renderer with Lunatic Fringe.
This is by no means a permanent solution but having it buys some time to find something more universal that won't affect performance too badly and investigate the need for a more robust solution.
The idea here is to define pairs of walls where when the first element of the pair is seen, it will treat the second one as view blocking.
This is used as the two offending windows (sectors 151 and 152) to cope with the lack of a height sensitive clipper.
2021-04-24 20:00:54 +02:00
Christoph Oelckers
be08a2f800 - clipper rework
* let the clipper work on relative angles to simplify the math.
* properly initialize the initial visible range and preserve it for multiple invocations.
* track the maximum visible angular range per sector. While possibly not sufficient to handle every edge case imaginable it has low overhead and is still useful to eliminate obvious cases that do not need more complex checks. It is enough to fix the blue door in Duke E3L4.
* removed unused elements of the clipper.
2021-04-24 12:08:38 +02:00
Christoph Oelckers
eb573bea23 - removed all compensation for the clamped shades.
None of this is needed, the shader can work with out of range shades to produce proper lighting.
2021-04-21 22:48:55 +02:00
Christoph Oelckers
dc0df7d081 - don't clamp shade values in the setup pass.
We need their proper values when setting up the lighting.
2021-04-21 22:32:27 +02:00
Christoph Oelckers
643b969dff - added another weird Build specialty: no vertical sprite offset flipping for face sprites.
Just... why...? :?
2021-04-20 19:37:32 +02:00
Christoph Oelckers
be20b6a839 - fixed: wall sprites do not need NPOT emulation. 2021-04-20 16:58:18 +02:00
Christoph Oelckers
d078b511b8 - flip backwards oriented wall sprites before submitting them to the render list.
Backwards orientation will break the translucent object sorter so this needs to be sorted out beforehand.
2021-04-20 14:30:22 +02:00
Christoph Oelckers
ccdf9d13f1 - do not render sprites that are extremely close to the camera.
These can temorarily cover the entire screen so everything with a distance of less than 4 map units will now be skipped if it is a face sprite.
2021-04-20 00:15:11 +02:00
Christoph Oelckers
cdf89b9175 - portal rendering fix when viewing through two-sided walls outside the actual portal area.
If there's more portal area behind such a line its range in the clipper needs to be cleared again.
2021-04-17 18:32:40 +02:00
Christoph Oelckers
2b1072eb91 - fixed bad sector addressing in flat sprites drawer. 2021-04-14 19:17:40 +02:00
Christoph Oelckers
5c306c61d6 - better fix for shadow rendering. 2021-04-14 14:46:15 +02:00
Christoph Oelckers
89be30b720 - handle fullbright sprite hackery using negative shade values. 2021-04-12 18:57:10 +02:00
Christoph Oelckers
bf019ac028 - Build must draw the sky for completely closed sectors as well. 2021-04-12 16:31:44 +02:00
Christoph Oelckers
ef95754e87 - fixed bad texture checks. 2021-04-11 18:38:26 +02:00
Christoph Oelckers
42d02834b1 Merge branch 'master' into newrenderer2
# Conflicts:
#	source/build/include/build.h
#	source/build/src/polymost.cpp
#	source/build/src/voxmodel.cpp
#	source/core/gamecontrol.cpp
#	source/core/gamestruct.h
#	source/games/blood/src/animatesprite.cpp
#	source/games/blood/src/misc.h
#	source/games/blood/src/view.cpp
#	source/games/duke/src/render.cpp
#	source/games/sw/src/draw.cpp
#	source/games/sw/src/game.h
#	source/games/sw/src/jsector.cpp
#	source/glbackend/glbackend.cpp
2021-04-11 14:38:56 +02:00
Christoph Oelckers
057b8a7354 - cleanup of bvectan family of functions.
This can be greatly simplified to a single bvectangbam function using atan2 directly.
2021-04-10 12:54:29 +02:00
Christoph Oelckers
35221188db - inlined Clipper::PointToAngle 2021-04-10 10:56:11 +02:00
Christoph Oelckers
2e191f2742 - consolidated the SetLightAndFog code fragments. 2021-04-10 10:34:20 +02:00