Move most skeleton stuff to engine#1489
Conversation
|
Probably related to that problem reported by CodeQL: Thread 1 "daemon" received signal SIGSEGV, Segmentation fault.
Util::SerializeTraits<refEntity_t, void>::Read (stream=...) at src/engine/client/cg_msgdef.h:127
127 ent.boneMods = stream.Read<std::vector<BoneMod>&>(); |
|
Oh yeah, that was an unfinished change. |
5ae3f4d to
dc1a501
Compare
|
So, this fixe dll. I now can get it run as exe too, but with nexe (PNaCl) I get:
|
de64f25 to
926b067
Compare
I've added a few more fixes, can you check if you still get this error? Do note that I have pushed fixes both on this branch and on the Unvanquished one. |
|
I get the same. Anyway, can you rebase on latest |
926b067 to
99c6824
Compare
Hmm, that's weird. I'd need to look at it later, there are stil la few bugs that need to be fixed. |
Done, although I haven't tested it yet after rebase. |
|
Thanks, the rebase was successful (I can build the game with Saigo). I get the same error with a nexe built with Saigo. |
|
Maybe there's padding being inserted into |
dc61fec to
cf47328
Compare
|
This is mostly done now, I believe the only remaining issues are because |
|
So I've unfortunately run into another issue: There are 3 options I can see right now: add more IPC calls to get skeletons just for those entities (which is really ugly), go back to the implementation that simply batches skeletons, or move particle systems to engine. The latter might also solve some performance issues with particle systems that we have right now. |
|
This version is, however, faster than #1386. |
cf47328 to
06b3c18
Compare
|
This fixes a few things. The problems still remaining are legs skeletons not being set to torso skeletons, some animations missing/incorrect, and the above problem about particle systems/trail systems attachments. |
I figured out another solution for this:
|
06b3c18 to
8c4e69a
Compare
1640110 to
88c50b0
Compare
|
I've fixed all the issues I could find, just need to clean-up the code now. |
a70fcfd to
e058114
Compare
|
I would like to get this merged for 0.56.0 RC2, so basically within the week. |
Note that I have found a bug, reported on the engine-side PR. |
Yes, I have mentioned it on the If not possible to fix and merge this before RC2, I do remind that the release is expected for being released in one month. It would be good to still have an RC with this before releasing, so this gives about 3 weeks to give enough time between the last RC and the release. |
e863ba9 to
f4a57b0
Compare
8e02b16 to
1890d0a
Compare
|
Finally, we're doing it! 🎉️ |
src/engine/renderer/tr_types.h
Outdated
| } | ||
|
|
||
| #define RF_SWAPCULL 0x000040 // swap CT_FRONT_SIDED and CT_BACK_SIDED | ||
| inline RenderFx operator|=( const RenderFx& lhs, const RenderFx& rhs ) { |
There was a problem hiding this comment.
This stuff gives me compiler warnings:
/unv/Unvanquished/src/cgame/cg_weapons.cpp: In function ‘void CG_AddViewWeapon(playerState_t*)’:
/unv/Unvanquished/src/cgame/cg_weapons.cpp:1773:34: warning: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
1773 | hand.renderfx |= RF_SWAPCULL;
| ^~~~~~~~~~~
In file included from /unv/Unvanquished/src/cgame/cg_local.h:36,
from /unv/Unvanquished/src/cgame/cg_weapons.cpp:31:
/unv/Unvanquished/daemon/src/engine/renderer/tr_types.h:72:17: note: candidate 1: ‘RenderFx operator|=(const RenderFx&, const RenderFx&)’
72 | inline RenderFx operator|=( const RenderFx& lhs, const RenderFx& rhs ) {
| ^~~~~~~~
/unv/Unvanquished/src/cgame/cg_weapons.cpp:1773:34: note: candidate 2: ‘operator|=(RenderFx&, int)’ (built-in)
1773 | hand.renderfx |= RF_SWAPCULL;
There was a problem hiding this comment.
Should work now I think.
There was a problem hiding this comment.
I now get errors instead of warnings:
src/cgame/cg_players.cpp: In function ‘void CG_PlayerFloatSprite(centity_t*, qhandle_t, std::vector<refEntity_t>&)’:
src/cgame/cg_players.cpp:2534:24: error: invalid conversion from ‘int’ to ‘RenderFx’ [-fpermissive]
2534 | ent.renderfx = rf;
| ^~
| |
| int
src/cgame/cg_players.cpp: In function ‘void CG_PlayerSkeletal(centity_t*, int, vec_t*, int)’:
src/cgame/cg_players.cpp:2750:25: error: invalid conversion from ‘int’ to ‘RenderFx’ [-fpermissive]
2750 | legs.renderfx = renderfx;
| ^~~~~~~~
| |
| int
src/cgame/cg_players.cpp: In function ‘void CG_Player(centity_t*)’:
src/cgame/cg_players.cpp:2988:33: error: invalid conversion from ‘int’ to ‘RenderFx’ [-fpermissive]
2988 | legs.renderfx = renderfx;
| ^~~~~~~~
| |
| int
src/cgame/cg_players.cpp:3058:42: error: invalid conversion from ‘int’ to ‘RenderFx’ [-fpermissive]
3058 | torso.renderfx = renderfx;
| ^~~~~~~~
| |
| int
src/cgame/cg_players.cpp:3074:41: error: invalid conversion from ‘int’ to ‘RenderFx’ [-fpermissive]
3074 | head.renderfx = renderfx;
| ^~~~~~~~
| |
| int
src/cgame/cg_ents.cpp: In function ‘void CG_General(centity_t*)’:
src/cgame/cg_ents.cpp:313:33: warning: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
313 | ent.renderfx |= RF_THIRD_PERSON; // only draw from mirrors
| ^~~~~~~~~~~~~~~
In file included from src/cgame/cg_local.h:36,
from src/cgame/cg_ents.cpp:30:
daemon/src/engine/renderer/tr_types.h:72:17: note: candidate 1: ‘RenderFx operator|=(const RenderFx&, const RenderFx&)’
72 | inline RenderFx operator|=( const RenderFx& lhs, const RenderFx& rhs ) {
| ^~~~~~~~
src/cgame/cg_ents.cpp:313:33: note: candidate 2: ‘operator|=(RenderFx&, int)’ (built-in)
313 | ent.renderfx |= RF_THIRD_PERSON; // only draw from mirrors
| ^~~~~~~~~~~~~~~
src/cgame/cg_ents.cpp: In function ‘void CG_Missile(centity_t*)’:
src/cgame/cg_ents.cpp:403:45: error: invalid conversion from ‘int’ to ‘RenderFx’ [-fpermissive]
403 | ent.renderfx = ma->renderfx | RF_NOSHADOW;
| ~~~~~~~~~~~~~^~~~~~~~~~~~~
| |
| int
src/cgame/cg_ents.cpp: In function ‘void CG_LightFlare(centity_t*)’:
src/cgame/cg_ents.cpp:661:27: warning: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
661 | flare.renderfx |= RF_DEPTHHACK;
| ^~~~~~~~~~~~
daemon/src/engine/renderer/tr_types.h:72:17: note: candidate 1: ‘RenderFx operator|=(const RenderFx&, const RenderFx&)’
72 | inline RenderFx operator|=( const RenderFx& lhs, const RenderFx& rhs ) {
| ^~~~~~~~
src/cgame/cg_ents.cpp:661:27: note: candidate 2: ‘operator|=(RenderFx&, int)’ (built-in)
661 | flare.renderfx |= RF_DEPTHHACK;
| ^~~~~~~~~~~~
There was a problem hiding this comment.
Ah, I forgot to push the commit.
3f602f4 to
72b2d17
Compare
72b2d17 to
a700306
Compare
Cgame-side pr: Unvanquished/Unvanquished#3276.
A proper solution to the issue of highly inefficient IPC with skeletal models. Skeleton will now be built and blended in the engine instead of cgame, and it will no longer be transferred through IPC at all, +this will avoid a bunch of extraneous copies. An additional benefit is that this will skip doing anything with skeletons for entities that get culled away. Cgame will now only send the relevant frame numbers/lerp/etc through IPC as part
refEntity_t.The layout I'm using for testing is this: https://users.unvanquished.net/~reaper/maps/layouts/plat23/test.dat.