Prompted by 'Hurt' which has > 4000 lights and runs into both performance issues and unpredictable light selection for the limited amount of shadowmap slots.
* let CASTSPRITESHADOW act as an override for render style checks. If this is set we can assume that a shadow is desired regardless of style.
* reordered code to do the more costly checks only when needed.
* exclude sprites which are not either opaque or use regular blended translucency from casting shadows.
* exclude wall and flat sprites from casting shadows.
In both of these cases the shadow math is unable to produce anything useful that doesn't look off.
* Remove threading from the drawers
* Fix some r_scene_multithreaded related bugs
* Fix some r_scene_multithreaded crashes
* Fix fullbright shade bug
* Fix truecolor drawer crash
* Add debug code for showing the render slices
* Fix texture loading race condition and improve performance by only locking the load mutex if data hasn't already been updated for this frame
Co-authored-by: Magnus Norddahl <dpjudas@users.noreply.github.com>
It wasn't respecting the map's pixel ratio setting. This wouldn't have
been very noticeable with the default pixel ratio of 1.2 but it was
very obvious with 1.8.
# draw upper and lower textures when the back sector does not properly match
# do not draw middle textures on portal lines
# minor optimization to 'is***Portal' functions to avoid memory access in the most common case of no portal being present.
Re-worded error messages which were unprecise or unfitting before (model index below 0 was not acknowledged at all, or grouped together with a "too many models" message).
modelIDs are given a default value of -1.
Important: A MODELDEF's FrameIndex lines can no longer refer to model indices that are beyond the number of models of that MODELDEF entry. There is in fact a check to avoid going beyond the number of an actor's models which would abort program operation at startup, but it never caught any such occurances.
surfaceSkinIDs was two-dimensional and is now a one-dimensional TArray as well, elements are accessed via [Row + Column * NumRows], in this case surfaceIndex + modelIndex * MD3_MAX_SURFACES]
Used TArray.Alloc to make TArrays have the correct size depending on the number of models.
Also removed MAX_MODELS_PER_FRAME.
Edited skinSurfaceIDs access for one-dimensional TArray
Added MD3_MODELS_MIN
To ensure compatibility with mods, all model-related TArrays (four in total) have a minimum size of 4, defined by MD3_MODELS_MIN.
* Changed model-related arrays to TArrays.
* Update models.cpp
Used TArray.Alloc to make TArrays have the correct size depending on the number of models.
surfaceSkinIDs was two-dimensional and is now a one-dimensional TArray as well, it's size is now (models * MD3_MAX_SURFACES)
surfaceSkinIDs was two-dimensional and is now a one-dimensional TArray as well, elements are accessed via [Row + Column * NumRows], in this case sSurfaceIndex + modelIndex * MD3_MAX_SURFACES]
* Edited skinSurfaceIDs access for one-dimensional TArray
* Edited skinSurfaceIDs access for one-dimensional TArray
* Edited skinSurfaceIDs access for one-dimensional TArray
* Changed model-related arrays to TArrays.
Also removed MAX_MODELS_PER_FRAME.
* Used TArray.Alloc to make TArrays have the correct size depending on the number of models.
surfaceSkinIDs was two-dimensional and is now a one-dimensional TArray as well, elements are accessed via [Row + Column * NumRows], in this case surfaceIndex + modelIndex * MD3_MAX_SURFACES]
* Used TArray.Alloc to make TArrays have the correct size depending on the number of models.
surfaceSkinIDs was two-dimensional and is now a one-dimensional TArray as well, elements are accessed via [Row + Column * NumRows], in this case surfaceIndex + modelIndex * MD3_MAX_SURFACES]
* Update models.h
* Edited MAX_MODELS_MD3
* Update models_obj.cpp
- Always allow skyboxes by default
- Add option to disable skyboxes through mapinfo
Squashed commit of the following:
commit d4c4d9310d0157ce575f52989b5b080398cf7629
Author: Marisa Kirisame <marisa@sayachan.org>
Date: Wed Dec 30 09:58:39 2020 +0100
Disable AO for skybox portals (can be forced back with MAPINFO flag).
With fixed point math barely being used anywhere with the vast majority of calls in the software voxel drawer it makes sense to reduce the function interface to the minimum possible and move the shift value into the function call as an argument.
- Setting WOF_INTERPOLATE on any of the functions with flags (except A_OverlayFlags) will enable one tic for interpolating.
- Setting PSPF_INTERPOLATE with A_OverlayFlags will permanently enable it for that layer, but requires manual calling.
A_OverlayPivotAlign(int layer, int halign, int valign)
- Aligns the pivot point origin to a corner of the PSprite before applying offsets.
- - halign: Horizontal. Applicable constants are PSPA_<LEFT/CENTER/RIGHT>.
- - valign: Vertical. Applicable constants are PSPA_<TOP/CENTER/BOTTOM>.
- - Default is top left.
A_OverlayVertexOffset(int layer, int index, double x, double y, int flags)
- Allows offsetting the corners of the psprite, granting modders the ability to skew weapon sprites as they see fit.
- - index: The index of the vertice. Valid ranges are between [0,3].
- - x/y: Offsets of vertices.
- - flags: Takes WOF_ flags.
Other changes:
- Removed pivot point interpolation since it's pointless.
- Removed PSPF_PIVOTSCREEN due to complications with it having relativity. This will be revisited either later or in another submission.
- Added ResetPSprite() to be called with BringUpWeapon(), A_Lower(), and morph weapon raising to reset all the new properties to 0.
Nearly ready now. Just some final testing needed.