Commit graph

300 commits

Author SHA1 Message Date
Marisa Kirisame
b6ee4151ee Optimize UE1 vertex normal computation. 2020-07-12 12:14:30 +02:00
alexey.lysiuk
63df9b13d0 - customized invulnerability colormap does not interfere with Powerup.ColorMap
https://forum.zdoom.org/viewtopic.php?t=66955
2020-01-19 01:33:47 +01:00
Rachael Alexanderson
aa6cb4815f - oops, missed this one 2020-01-06 21:58:51 +01:00
Rachael Alexanderson
b75665983c - relicense some of my past work under BSD
# Conflicts:
#	src/rendering/r_videoscale.cpp
2020-01-06 21:58:48 +01:00
Cacodemon345
5ed070964c Add PSPF_PLAYERTRANSLATED flag (makes a PSprite layer translated to the user's color)
# Conflicts:
#	src/hwrenderer/scene/hw_weapon.cpp
#	src/r_data/models/models.cpp

# Conflicts:
#	src/gl/scene/gl_weapon.cpp
2020-01-06 21:50:14 +01:00
Christoph Oelckers
6c4a6def62 - cleaned the includes of the sound backend code of unwanted content.
Also simplified the sound init decision making. With FMod gone there is no reason to be pedantic here. Even the check of snd_backend for the Null device could be omitted here, its only realistic use is '-nosound'.

# Conflicts:
#	src/sound/s_environment.cpp
2020-01-06 13:55:51 +01:00
Christoph Oelckers
8adf2c34cd - continued refactoring on sound code.
The game independent part of the code has been mostly isolated.

# Conflicts:
#	src/sound/s_doomsound.cpp
#	src/sound/s_sound.cpp
#	src/sound/s_sound.h

# Conflicts:
#	src/sound/s_sound.cpp
2020-01-06 13:45:19 +01:00
Rachael Alexanderson
ed654150eb - add cvar 'cl_customizeinvulmap' - changes the invulnerability… (#972)
* - add cvar 'cl_disableinvertedcolormap' - changes the invulnerability sphere to instead be a regular desaturated colormap that transitions from deep blue to pale yellow

* - add menu option for cl_disableinvertedcolormap

* - added customization for invulnerability colormap

* - fixed custom colormap being calculated incorrectly

* - disable custom invulnerability map before the main game loop

# Conflicts:
#	src/d_main.cpp
2019-11-26 14:53:19 +01:00
Rachael Alexanderson
fb326b2780 - add nullptr checks for double-frame model interpolation 2019-06-13 15:54:17 +02:00
Kevin Caccamo
9e9bc7fb7f Fix OBJ face normal direction
https://forum.zdoom.org/viewtopic.php?f=2&t=64740
2019-06-02 22:00:59 +02:00
alexey.lysiuk
aa7a7474ba - added message about missing texture for material definition
https://forum.zdoom.org/viewtopic.php?t=64234
2019-05-02 16:58:15 +02:00
alexey.lysiuk
42b3518266 - fixed crash in GLDEFS parser caused by missing texture
https://forum.zdoom.org/viewtopic.php?t=64234
2019-05-02 16:54:21 +02:00
Rachael Alexanderson
86e8bf3b28 - fix building on FreeBSD 2019-04-28 22:57:25 +02:00
Christoph Oelckers
074ee3238b - sanitized the 'frozen level' code.
This had two different flags that were checked totally inconsistently, and one was not even saved.
Moved everything into a few subfunctions so that these checks do not have to be scattered all over the code.

# Conflicts:
#	src/actorinlines.h
#	src/decallib.cpp
#	src/g_levellocals.h
#	src/hwrenderer/scene/hw_sprites.cpp
#	src/p_mobj.cpp
#	src/p_saveg.cpp
#	src/p_user.cpp
#	src/polyrenderer/scene/poly_particle.cpp
#	src/scripting/vmthunks.cpp
#	src/swrenderer/things/r_particle.cpp
#	wadsrc/static/zscript/actors/player/player.zs
#	wadsrc/static/zscript/base.zs

# Conflicts:
#	src/g_levellocals.h
#	src/hwrenderer/scene/hw_sprites.cpp
#	wadsrc/static/zscript/base.txt
2019-04-28 19:10:52 +02:00
drfrag
c9463c6526 Reverted "- fixed: The light defaults were not fully deleted on an engine restart."
This was not applicable: Warning C4150	deletion of pointer to incomplete type 'FLightDefaults'; no destructor called (compiling source file C:\DEV\lzdoom\src\d_main.cpp)
2019-04-27 14:55:18 +02:00
Christoph Oelckers
7b754e622c - fixed: The HUD model code did not account for placeholder sprites.
# Conflicts:
#	src/hwrenderer/scene/hw_weapon.cpp
2019-04-27 13:44:55 +02:00
alexey.lysiuk
d8d290cd51 - fixed many compilation errors with GCC and Clang
# Conflicts:
#	src/dobjgc.h
2019-04-26 17:14:12 +02:00
Christoph Oelckers
99f6d2a177 - replaced some NULLs with nullptr.
# Conflicts:
#	src/fragglescript/t_script.cpp
2019-04-26 01:33:07 +02:00
Christoph Oelckers
251b096b48 - removed all remaining native parts of APlayerPawn.
Unlike the other classes, the places where variables from this class were accessed were quite scattered so there isn't much scriptified code. Instead, most of these places are now using the script variable access methods.
This was the last remaining subclass of AActor, meaning that class Actor can now be opened for user-side extensions.
2019-04-26 01:20:02 +02:00
Christoph Oelckers
8fecfb8f85 - properly handle passing of the light flags.
Since these can be changed on the placed light actor they have to be read from there, so this is now a pointer in FDynamicLight, just like the other properties that can be user-changed.
Also did some cleanup on the interface so that external code doesn't need to dereference the lightflags pointer but can use utility functions for all flags.

# Conflicts:
#	src/hwrenderer/dynlights/hw_dynlightdata.cpp
#	src/swrenderer/line/r_walldraw.cpp

# Conflicts:
#	src/g_level.cpp
#	src/gl/compatibility/gl_20.cpp
2019-04-26 00:42:05 +02:00
Christoph Oelckers
f261ec7d53 - rewrote dynamic lights to not use actors for the internal representation and made DynamicLight a purely scripted class.
This should be less of a drag on the playsim than having each light a separate actor. A quick check with ZDCMP2 showed that the light processing time was reduced to 1/3rd from 0.5 ms to 0.17 ms per tic.
It's also one native actor class less.

# Conflicts:
#	src/g_shared/a_dynlight.cpp
#	src/g_shared/a_dynlight.h
#	src/hwrenderer/dynlights/hw_dynlightdata.cpp
#	src/hwrenderer/dynlights/hw_dynlightdata.h
#	src/hwrenderer/scene/hw_renderhacks.cpp
#	src/namedef.h
#	src/scripting/thingdef_data.cpp
#	src/swrenderer/line/r_walldraw.cpp

# Conflicts:
#	src/d_main.cpp
#	src/g_levellocals.h
#	src/g_shared/a_dynlight.cpp
#	src/g_shared/a_dynlight.h
#	src/gl/dynlights/gl_dynlight.h
#	src/gl/dynlights/gl_dynlight1.cpp
#	src/gl/scene/gl_spritelight.cpp
#	src/gl/scene/gl_walls.cpp
#	src/hwrenderer/dynlights/hw_shadowmap.cpp
#	src/hwrenderer/dynlights/hw_shadowmap.h
#	src/hwrenderer/scene/hw_flats.cpp
#	src/p_setup.cpp
2019-04-26 00:19:03 +02:00
Christoph Oelckers
8e376754fc - did some more lightening on the PlayerPawn class. 4 more properties and one native member function have been handled. 2019-04-25 17:34:47 +02:00
Christoph Oelckers
08e2a86f64 - made ColorRangeStart and ColorRangeEnd meta properties of APlayerPawn.
These are only used during initialization and they should have been readonly from the start.
2019-04-25 17:34:41 +02:00
Christoph Oelckers
08dd81ed36 - use a TArray to store the sprite model hash to get rid of one atterm call. 2019-04-25 12:55:22 +02:00
Christoph Oelckers
fcacb80db5 - a few more explicit local buffer allocations removed.
# Conflicts:
#	src/gl/data/gl_setup.cpp
2019-04-18 17:00:20 +02:00
Christoph Oelckers
0c5ca922ba - fixed: 'frame' in GLDEFS light definitions was case sensitive. 2019-04-18 14:00:39 +02:00
Christoph Oelckers
77c00d7670 - replaced several explicit allocations with TArrays.
# Conflicts:
#	src/r_data/models/models_voxel.cpp
#	src/textures/formats/jpegtexture.cpp
#	src/textures/formats/pcxtexture.cpp
#	src/textures/formats/tgatexture.cpp

# Conflicts:
#	src/r_data/voxels.cpp
#	src/r_data/voxels.h
2019-04-18 13:58:37 +02:00
Christoph Oelckers
f702f6e19e - use TArrays for MD3 storage.
# Conflicts:
#	src/r_data/models/models_md3.cpp
2019-04-18 13:15:00 +02:00
Christoph Oelckers
c0e9530fd0 - fixed: The light defaults were not fully deleted on an engine restart. 2019-04-18 13:12:55 +02:00
Christoph Oelckers
cee9f52f2f - improved error reporting for badly defined translations.
This needs to be handled by the caller for all use cases because the translation parser lacks the context to do a proper error report.

# Conflicts:
#	src/textures/multipatchtexture.cpp
2019-04-18 13:07:39 +02:00
Christoph Oelckers
5c91df5c73 - let FOBJModel::ParseVector actually use its templated size parameter
In this setup the array can be statically updated because the size is always constant per instantiation
2019-04-16 17:28:31 +02:00
Christoph Oelckers
95767fb63a - fixed some issues with the bodyque and moved this variable into FLevelLocals
* it was never saved in savegames, leaving the state of dead bodies undefined
* it shouldn't be subjected to pointer substitution because all it contains is old dead bodies, not live ones.

# Conflicts:
#	src/r_data/r_translate.cpp
2019-04-15 16:08:18 +02:00
Christoph Oelckers
edfe8b36c6 - cleaned up the PointerSubstitution code
Since the only thing it gets used for is swapping out PlayerPawns it can safely skip all global variables that never point to a live player, which allowed to remove quite a bit of code here that stood in the way of scriptifying more content
2019-04-15 16:06:22 +02:00
Christoph Oelckers
0ddb5038c3 - fixed the mapping of additive translucency to color-based translucency.
The destination mode sould be 'One', not 'InvSrcColor'.
Now both of these are available as explicit modes, not just through the optional mapping.

# Conflicts:
#	src/hwrenderer/scene/hw_sprites.cpp
#	src/r_data/renderstyle.cpp
#	src/r_data/renderstyle.h

With additional render styles from " - abstraction of render style in render state.". drfrag

# Conflicts:
#	src/r_data/renderstyle.cpp
#	src/r_data/renderstyle.h

With additional render styles from "- made the screen blend work for the software renderer.". drfrag
2018-11-28 14:39:54 +01:00
Christoph Oelckers
39d4db0a38 - added option to disable alpha testing for user shaders.
# Conflicts:
#	src/gl/shaders/gl_shader.cpp
#	src/hwrenderer/scene/hw_sprites.cpp

# Conflicts:
#	src/hwrenderer/textures/hw_material.cpp
#	src/r_data/gldefs.cpp
2018-11-01 20:51:08 +01:00
Christoph Oelckers
0623a92363 - use standard sprite lighting for voxels.
Per-pixel lighting requires normals which voxels do not have.

# Conflicts:
#	src/hwrenderer/scene/hw_sprites.cpp

# Conflicts:
#	src/hwrenderer/scene/hw_sprites.cpp
2018-11-01 20:02:46 +01:00
Christoph Oelckers
979c3022c4 - fixed: MD3s with a skin-less surface left the renderer in an undefined state.
The frame interpolation factor wasn't reset and rendering prematurely aborted with no chance to recover.
2018-10-09 22:00:04 +02:00
Kevin Caccamo
434ffe542a Attempt to fix warnings from VS2017 Win64 compiler 2018-10-05 22:24:39 +02:00
Kevin Caccamo
a628cff085 Calculate normals for OBJ models with smooth groups
Add smoothGroup member to OBJFace struct, and assign the current smooth group number to it
Move face normal calculation code to CalculateNormalFlat
Add AddVertFaces method, which initializes and populates the vertFaces array of arrays, which holds references to triangle references per vertex
Only initialize and populate vertFaces if the model has missing normals and smooth groups
Assign smooth groups to triangle data
Add CalculateNormalSmooth method, which calculates the normals for each face the vertex is attached to, depending on whether or not the faces are part of the given smooth group, and averages them out
Add OBJTriRef struct, which holds references to triangles on OBJ surfaces

Make {agg,cur}SurfFaceCount unsigned ints
Change nvec to a value instead of a pointer
2018-10-05 22:24:26 +02:00
Christoph Oelckers
4cd4e01fff - fixed some warnings in OBJ model code.
(This clearly shows that using 'long' as parameters in any interface must be stopped. It is fundamentally unsafe to have a type whose size is not reliable - it's either an int-sized nor a pointer sized value, depending on the platform, and essentially worthless.)
2018-10-05 22:24:23 +02:00
Marisa Kirisame
c674c3ff72 Computed facet normals for UE1 models were not normalized when they were supposed to. 2018-10-05 01:23:38 +02:00
Marisa Kirisame
7b28c224f0 Fix a major oversight that caused UE1 models to use the normals of the first frame for all frames. 2018-09-26 10:34:45 +02:00
Kevin Caccamo
50327255ed Update usage of LastIndexOf
Now that LastIndexOf works properly, update the code that uses it to find OBJ models

Also, make UE1 model finder use LastIndexOf
2018-09-01 11:15:18 +02:00
Kevin Caccamo
639d68277e Fix OBJ rendering in software renderers, and other things
Pass surf->vbStart to SetupFrame instead of 0, and pass 0 to DrawArrays instead of surf->vbStart.

Use a potentially faster method of modifying the OBJ file text buffer by modifying it directly.

Add RealignVector and FixUV methods to begin work on re-aligning OBJ models to the same orientation as MD3 models.

Re-align OBJ models to match MD3 models

Fix normal calculation for re-aligned OBJs

Ensure AddSkins does not go out of bounds of surfaceskinIDs

Do not precache skins that were replaced by the user.

Fix OBJs with a large number of materials not being fully rendered

Print a warning message if a material referenced by the OBJ could not be found.

Free surface triangles once they are no longer needed

Also, use continue instead of return so that surfaces after those with missing materials are still rendered.

Fail if a face side has no vertex reference. Vertex references are required for a valid OBJ.

Clean up OBJ model code

Remove commented code, mainly Printf's that aren't used any more.

Add more documentation comments, and tweak existing documentation comments

Replace ParseVector2 and ParseVector3 with a template ParseVector function
2018-09-01 11:15:16 +02:00
Kevin Caccamo
f785886c4b Fix rendering and parsing of OBJ models
Create a new surface for each 'usemtl' statement in the OBJ file, and fix memory errors caused by TriangulateQuad.

Calculate missing normals, and fix incorrect UV coordinates

Fix construction of vertex buffer for objects with multiple surfaces

Localize curMtl, curSurface, aggSurfFaceCount, and curSurfFaceCount to FOBJModel::Load(), since they are not used anywhere else.

Fix parsing of OBJs without UV references

Internally, I replaced hashtag line comments with C-style line comments, and I replaced each forward slash with newSideSep.

If no UV coordinates are available, add a default vector of (0,0).

Also, remove "this->" from ResolveIndex to make the code a bit cleaner, and fix a minor garbage issue I failed to notice earlier (normref would pick up garbage if there was no normal reference).

Ensure usemtl statements remain intact

It may be a bit inefficient, but I tried modifying the buffer directly, and I got memory corruption errors. In this case, it's a lot better to be safe than sorry.
2018-09-01 11:15:15 +02:00
Kevin Caccamo
188d8704e1 Initial work on OBJ model support
What works:
- Parsing the model
- Constructing geometry (surfaces) for triangulated models

What doesn't:
- Rendering the model
- Building the vertex buffer
- Triangulating quads
2018-09-01 11:15:13 +02:00
Magnus Norddahl
fb31572ba3 - fix user defines and textures not working 2018-08-20 01:43:22 +02:00
Magnus Norddahl
e59859e34d - improve the gldefs syntax by allowing the shader to be specified in the material section
# Conflicts:
#	src/r_data/gldefs.cpp
2018-08-20 01:43:02 +02:00
Magnus Norddahl
9c74c9629a - rewrite the user shader support for materials - new syntax is to create a 'Material ProcessMaterial()' function
# Conflicts:
#	src/gl/shaders/gl_shader.cpp
#	src/hwrenderer/textures/hw_material.cpp
#	src/r_data/gldefs.cpp
#	wadsrc/static/shaders/glsl/main.fp
2018-08-20 01:22:34 +02:00
usernameak
8f509bf784 Added ability to set defines in custom HW shaders 2018-08-19 21:50:44 +02:00