Skip to content

Commit

Permalink
Fixed: Group-animated materials cease animating after an engine reset.
Browse files Browse the repository at this point in the history
Materials_AnimateAnimGroup assumed that all required variants for all
materials involved in the translation will have already been prepared.
This is not correct as an engine reset will invalidate all prepared
variants and because the playsim thinks before rendering we must call
Materials_Prepare rather than Materials_ChooseVariant.
  • Loading branch information
danij-deng committed Aug 6, 2011
1 parent 01782c7 commit d69efed
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 8 deletions.
4 changes: 2 additions & 2 deletions doomsday/engine/portable/include/p_materialmanager.h
Expand Up @@ -155,8 +155,8 @@ uint Materials_Count(void);
const ded_decor_t* Materials_DecorationDef(materialnum_t num);
const ded_ptcgen_t* Materials_PtcGenDef(materialnum_t num);

void Materials_Prepare(struct material_snapshot_s* snapshot, struct material_s* mat,
boolean smoothed, struct materialvariantspecification_s* spec);
struct materialvariant_s* Materials_Prepare(struct material_snapshot_s* snapshot,
struct material_s* mat, boolean smoothed, struct materialvariantspecification_s* spec);

int Materials_AnimGroupCount(void);
void Materials_ResetAnimGroups(void);
Expand Down
14 changes: 8 additions & 6 deletions doomsday/engine/portable/src/p_materialmanager.c
Expand Up @@ -1231,7 +1231,7 @@ void Materials_InitSnapshot(material_snapshot_t* ss)
V3_Set(ss->colorAmplified, 1, 1, 1);
}

void Materials_Prepare(material_snapshot_t* snapshot, material_t* mat,
materialvariant_t* Materials_Prepare(material_snapshot_t* snapshot, material_t* mat,
boolean smoothed, materialvariantspecification_t* spec)
{
assert(mat && spec);
Expand Down Expand Up @@ -1357,12 +1357,12 @@ void Materials_Prepare(material_snapshot_t* snapshot, material_t* mat,

// If we aren't taking a snapshot; get out of here.
if(!snapshot)
return;
return variant;

Materials_InitSnapshot(snapshot);

if(0 == Material_Width(mat) && 0 == Material_Height(mat))
return;
return variant;

snapshot->width = Material_Width(mat);
snapshot->height = Material_Height(mat);
Expand Down Expand Up @@ -1465,6 +1465,8 @@ void Materials_Prepare(material_snapshot_t* snapshot, material_t* mat,
snapshot->colorAmplified[CG] = ambientLight->colorAmplified[CG];
snapshot->colorAmplified[CB] = ambientLight->colorAmplified[CB];
}

return variant;
}
}

Expand Down Expand Up @@ -1796,9 +1798,9 @@ static int setVariantTranslationWorker(materialvariant_t* variant, void* paramat
{
setmaterialtranslationworker_paramaters_t* params =
(setmaterialtranslationworker_paramaters_t*) paramaters;
const materialvariantspecification_t* spec = MaterialVariant_Spec(variant);
materialvariant_t* current = Materials_ChooseVariant(params->current, spec);
materialvariant_t* next = Materials_ChooseVariant(params->next, spec);
materialvariantspecification_t* spec = MaterialVariant_Spec(variant);
materialvariant_t* current = Materials_Prepare(NULL, params->current, false, spec);
materialvariant_t* next = Materials_Prepare(NULL, params->next, false, spec);

MaterialVariant_SetTranslation(variant, current, next);
return 0; // Continue iteration.
Expand Down

0 comments on commit d69efed

Please sign in to comment.