From 729abe44a989e71b183310919dd31fc1ee3aed63 Mon Sep 17 00:00:00 2001 From: eihrul Date: Fri, 30 Sep 2011 14:00:19 +0000 Subject: [PATCH] handle no-bones case for skeletal animation git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@11376 d7cf8633-e32d-0410-b094-e92efae38249 --- mod_skeletal_animatevertices_generic.c | 9 +++++++++ mod_skeletal_animatevertices_sse.c | 9 +++++++++ model_alias.c | 24 ++++++++++++------------ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/mod_skeletal_animatevertices_generic.c b/mod_skeletal_animatevertices_generic.c index 24cc8a9e..f95277af 100644 --- a/mod_skeletal_animatevertices_generic.c +++ b/mod_skeletal_animatevertices_generic.c @@ -19,6 +19,15 @@ void Mod_Skeletal_AnimateVertices_Generic(const dp_model_t * RESTRICT model, con if (!model->surfmesh.num_vertices) return; + if (!model->num_bones) + { + if (vertex3f) memcpy(vertex3f, model->surfmesh.data_vertex3f, model->surfmesh.num_vertices*sizeof(float[3])); + if (normal3f) memcpy(normal3f, model->surfmesh.data_normal3f, model->surfmesh.num_vertices*sizeof(float[3])); + if (svector3f) memcpy(svector3f, model->surfmesh.data_svector3f, model->surfmesh.num_vertices*sizeof(float[3])); + if (tvector3f) memcpy(tvector3f, model->surfmesh.data_tvector3f, model->surfmesh.num_vertices*sizeof(float[3])); + return; + } + //unsigned long long ts = rdtsc(); bonepose = (float12_t *) Mod_Skeletal_AnimateVertices_AllocBuffers(sizeof(float12_t) * (model->num_bones*2 + model->surfmesh.num_blends)); boneposerelative = bonepose + model->num_bones; diff --git a/mod_skeletal_animatevertices_sse.c b/mod_skeletal_animatevertices_sse.c index 06d74317..8c41b600 100644 --- a/mod_skeletal_animatevertices_sse.c +++ b/mod_skeletal_animatevertices_sse.c @@ -23,6 +23,15 @@ void Mod_Skeletal_AnimateVertices_SSE(const dp_model_t * RESTRICT model, const f if (!model->surfmesh.num_vertices) return; + if (!model->num_bones) + { + if (vertex3f) memcpy(vertex3f, model->surfmesh.data_vertex3f, model->surfmesh.num_vertices*sizeof(float[3])); + if (normal3f) memcpy(normal3f, model->surfmesh.data_normal3f, model->surfmesh.num_vertices*sizeof(float[3])); + if (svector3f) memcpy(svector3f, model->surfmesh.data_svector3f, model->surfmesh.num_vertices*sizeof(float[3])); + if (tvector3f) memcpy(tvector3f, model->surfmesh.data_tvector3f, model->surfmesh.num_vertices*sizeof(float[3])); + return; + } + num_vertices_minus_one = model->surfmesh.num_vertices - 1; //unsigned long long ts = rdtsc(); diff --git a/model_alias.c b/model_alias.c index c1b03c90..6982028e 100644 --- a/model_alias.c +++ b/model_alias.c @@ -40,25 +40,25 @@ cvar_t mod_alias_supporttagscale = {0, "mod_alias_supporttagscale", "1", "suppor float mod_md3_sin[320]; -static size_t Mod_Skeltal_AnimateVertices_maxbonepose = 0; -static void *Mod_Skeltal_AnimateVertices_bonepose = NULL; +static size_t Mod_Skeletal_AnimateVertices_maxbonepose = 0; +static void *Mod_Skeletal_AnimateVertices_bonepose = NULL; void Mod_Skeletal_FreeBuffers(void) { - if(Mod_Skeltal_AnimateVertices_bonepose) - Mem_Free(Mod_Skeltal_AnimateVertices_bonepose); - Mod_Skeltal_AnimateVertices_maxbonepose = 0; - Mod_Skeltal_AnimateVertices_bonepose = NULL; + if(Mod_Skeletal_AnimateVertices_bonepose) + Mem_Free(Mod_Skeletal_AnimateVertices_bonepose); + Mod_Skeletal_AnimateVertices_maxbonepose = 0; + Mod_Skeletal_AnimateVertices_bonepose = NULL; } void *Mod_Skeletal_AnimateVertices_AllocBuffers(size_t nbytes) { - if(Mod_Skeltal_AnimateVertices_maxbonepose < nbytes) + if(Mod_Skeletal_AnimateVertices_maxbonepose < nbytes) { - if(Mod_Skeltal_AnimateVertices_bonepose) - Mem_Free(Mod_Skeltal_AnimateVertices_bonepose); - Mod_Skeltal_AnimateVertices_bonepose = Z_Malloc(nbytes); - Mod_Skeltal_AnimateVertices_maxbonepose = nbytes; + if(Mod_Skeletal_AnimateVertices_bonepose) + Mem_Free(Mod_Skeletal_AnimateVertices_bonepose); + Mod_Skeletal_AnimateVertices_bonepose = Z_Malloc(nbytes); + Mod_Skeletal_AnimateVertices_maxbonepose = nbytes; } - return Mod_Skeltal_AnimateVertices_bonepose; + return Mod_Skeletal_AnimateVertices_bonepose; } void Mod_Skeletal_AnimateVertices(const dp_model_t * RESTRICT model, const frameblend_t * RESTRICT frameblend, const skeleton_t *skeleton, float * RESTRICT vertex3f, float * RESTRICT normal3f, float * RESTRICT svector3f, float * RESTRICT tvector3f) -- 2.39.2