Skip to content

Commit

Permalink
Fixed smoothed Material animation.
Browse files Browse the repository at this point in the history
  • Loading branch information
danij-deng committed Jul 6, 2010
1 parent b00e468 commit 9764d9a
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 19 deletions.
2 changes: 1 addition & 1 deletion doomsday/engine/portable/include/p_materialmanager.h
Expand Up @@ -82,5 +82,5 @@ boolean Materials_MaterialLinkedToAnimGroup(int animGroupNum, material_t
boolean Materials_IsPrecacheAnimGroup(int groupNum);

// @todo Refactor away.
void Materials_PrecacheAnimGroup(material_t* mat);
void Materials_PrecacheAnimGroup(material_t* mat, boolean yes);
#endif
11 changes: 8 additions & 3 deletions doomsday/engine/portable/src/p_material.c
Expand Up @@ -98,12 +98,17 @@ void Material_Ticker(material_t* mat, timespan_t time)
inter = 1.0f - (layer->tics - frameTimePos) / (float) lsDef->tics;
}

if(lsDef->name && lsDef->name[0] && lsDef->type != GLT_ANY)
{const gltexture_t* glTex;
if((glTex = GL_GetGLTextureByName(lsDef->name, lsDef->type)))
{
const gltexture_t* glTex = GL_GetGLTextureByName(lsDef->name, lsDef->type);
layer->tex = (glTex? glTex->id : 0);
layer->tex = glTex->id;
mat->inter = inter;
}
else
{
layer->tex = 0;
mat->inter = 0;
}}

if(inter == 0)
{
Expand Down
29 changes: 19 additions & 10 deletions doomsday/engine/portable/src/p_materialmanager.c
Expand Up @@ -794,7 +794,7 @@ const char* P_GetMaterialName(material_t* mat)
*
* @param mat The material to be precached.
*/
void P_MaterialPrecache(material_t* mat, boolean yes)
void P_MaterialPrecache2(material_t* mat, boolean yes, boolean inGroup)
{
if(!initedOk)
return;
Expand All @@ -804,6 +804,16 @@ void P_MaterialPrecache(material_t* mat, boolean yes)
mat->inFlags |= MATIF_PRECACHE;
else
mat->inFlags &= ~MATIF_PRECACHE;

if(inGroup && mat->inAnimGroup)
{ // The material belongs in one or more animgroups, precache the group.
Materials_PrecacheAnimGroup(mat, yes);
}
}

void P_MaterialPrecache(material_t* mat, boolean yes)
{
P_MaterialPrecache2(mat, yes, true);
}

/**
Expand Down Expand Up @@ -1245,11 +1255,10 @@ int Materials_AnimGroupCount(void)
*/
int Materials_CreateAnimGroup(int flags)
{
animgroup_t* group;
animgroup_t* group;

// Allocating one by one is inefficient, but it doesn't really matter.
groups =
Z_Realloc(groups, sizeof(animgroup_t) * (numgroups + 1), PU_STATIC);
groups = Z_Realloc(groups, sizeof(animgroup_t) * (numgroups + 1), PU_STATIC);

// Init the new group.
group = &groups[numgroups];
Expand Down Expand Up @@ -1375,7 +1384,10 @@ void Materials_AnimateAnimGroup(animgroup_t* group)
material_t* mat = group->frames[i].mat;

if(mat->def && mat->def->layers[0].stageCount.num > 1)
continue; // Animated elsewhere.
{
if(GL_GetGLTextureByName(mat->def->layers[0].stages[0].name, mat->def->layers[0].stages[0].type))
continue; // Animated elsewhere.
}

if(group->flags & AGF_SMOOTH)
{
Expand Down Expand Up @@ -1442,21 +1454,18 @@ void Materials_ResetAnimGroups(void)
animateAnimGroups();
}

void Materials_PrecacheAnimGroup(material_t* mat)
void Materials_PrecacheAnimGroup(material_t* mat, boolean yes)
{
int i;

for(i = 0; i < numgroups; ++i)
{
if(isInAnimGroup(&groups[i], mat))
{
int k;

// Precache this group.
for(k = 0; k < groups[i].count; ++k)
{
animframe_t* frame = &groups[i].frames[k];
Materials_Prepare(NULL, frame->mat, true, NULL);
P_MaterialPrecache2(groups[i].frames[k].mat, yes, false);
}
}
}
Expand Down
5 changes: 0 additions & 5 deletions doomsday/engine/portable/src/r_data.c
Expand Up @@ -2193,11 +2193,6 @@ void R_PrecacheMap(void)
boolean hasDecorations;
uint j;

if(mat->inAnimGroup)
{ // The material belongs in one or more animgroups, precache the group.
Materials_PrecacheAnimGroup(mat);
}

// Just this one material.
Materials_Prepare(&ms, mat, true, 0);
hasDecorations = ms.decorated;
Expand Down

0 comments on commit 9764d9a

Please sign in to comment.