RefTargetHandle CloneRef(RefTargetHandle oldTarg) { if (oldTarg == NULL) return NULL; else if (oldTarg->SuperClassID() == PARAMETER_BLOCK2_CLASS_ID) return oldTarg->Clone(*this); else return oldTarg; }
void mrTwoSidedShader::SetReference(int i, RefTargetHandle rtarg) { switch(i) { case kRef_MainPB: DbgAssert((rtarg == NULL) || (rtarg->SuperClassID() == PARAMETER_BLOCK2_CLASS_ID)); if((rtarg == NULL) || (rtarg->SuperClassID() == PARAMETER_BLOCK2_CLASS_ID)) m_mainPB = static_cast<IParamBlock2*>(rtarg); break; default: break; } }
//This function will determine whether the effect needs rebuiling or the change comes from a EffectElement managed parameter RefResult DxStdMtl2::NotifyMaterialChanged(Interval changeInt, RefTargetHandle hTarget, PartID& partID, RefMessage message) { bool supported = false; RefResult res = REF_SUCCEED; if(IsDxMaterialEnabled(map)&& !bReEntrant) { /* if(hTarget->SuperClassID() == SClass_ID(TEXMAP_CONTAINER_CLASS_ID)) { Texmap * tex = (Texmap*)hTarget; if(!tex->TestMtlFlag(MTL_HW_TEX_ENABLED)) return REF_SUCCEED; } */ if(hTarget->ClassID() == Class_ID(PARAMETER_BLOCK2_CLASS_ID,0)) { IParamBlock2 * pblock = (IParamBlock2*)hTarget; if(CheckParamBlock(pblock)) return REF_SUCCEED; } for(int i=0; i< hTarget->NumParamBlocks();i++) { IParamBlock2 * pblock = hTarget->GetParamBlock(i); if(CheckParamBlock(pblock)) return REF_SUCCEED; } if(!supported){ // ReEntrantCount--; bReEntrant = true; CreateAndLoadEffectData(); } } else { res = bReEntrant ? REF_STOP : REF_SUCCEED; // ReEntrantCount = RENTRANT_COUNT; bReEntrant = false; } //make sure the cache is flushed... if(!IsDxMaterialEnabled(map)) { elementContainer.DeleteAllElements(); if(pEffectParser){ pEffectParser->DestroyParser(); pEffectParser = NULL; } } return res; }
RefResult CompositeMat::NotifyRefChanged( Interval changeInt, RefTargetHandle hTarget, PartID& partID, RefMessage message) { switch (message) { case REFMSG_CHANGE: if (hTarget == pblock2) { ivalid.SetEmpty(); // compmat_param_blk.InvalidateUI(); ParamID changing_param = pblock2->LastNotifyParamID(); compmat_param_blk.InvalidateUI(changing_param); if( (changing_param == compmat_amount ) ||(changing_param == compmat_map_on ) ||(changing_param == compmat_type )) { mReshadeRQ = RR_NeedReshade; } else if( changing_param == compmat_mtls ) { mReshadeRQ = RR_NeedPreshade; // really want to get from mtl, but dont have it // NotifyChanged(); } } else { ivalid.SetEmpty(); NotifyChanged(); } if (hTarget != NULL) { switch (hTarget->SuperClassID()) { case MATERIAL_CLASS_ID: { // never hit for this mtl ???? IReshading* r = static_cast<IReshading*>(hTarget->GetInterface(IID_IReshading)); mReshadeRQ = r == NULL ? RR_None : r->GetReshadeRequirements(); } break; } } break; case REFMSG_SUBANIM_STRUCTURE_CHANGED: if ((hTarget!=this)) return REF_SUCCEED; mReshadeRQ = RR_NeedPreshade; NotifyChanged(); break; } return REF_SUCCEED; }
RefResult M3Mat::NotifyRefChanged( Interval changeInt, RefTargetHandle hTarget, PartID& partID, RefMessage message) { switch (message) { case REFMSG_CHANGE: if (matDlg && matDlg->theMtl==this) { matDlg->Invalidate(); } if( hTarget == pblockMat ){ mReshadeRQ = RR_NeedPreshade; NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE); } else if (hTarget != NULL) { switch (hTarget->SuperClassID()) { case MATERIAL_CLASS_ID: { IReshading* r = static_cast<IReshading*>(hTarget->GetInterface(IID_IReshading)); mReshadeRQ = (r == NULL)? RR_None : r->GetReshadeRequirements(); } break; } } break; case REFMSG_SUBANIM_STRUCTURE_CHANGED: mReshadeRQ = RR_NeedPreshade; NotifyDependents(FOREVER, PART_ALL, REFMSG_CHANGE); break; case REFMSG_GET_PARAM_DIM: { GetParamDim *gpd = (GetParamDim*)partID; gpd->dim = stdPercentDim; return REF_STOP; } case REFMSG_GET_PARAM_NAME: { GetParamName *gpn = (GetParamName*)partID; char s[50]; sprintf(s,GetString(IDS_MTL_CNAME),gpn->index); gpn->name = s; return REF_STOP; } } return REF_SUCCEED; }
RefResult Matte::NotifyRefChanged( const Interval& changeInt, RefTargetHandle hTarget, PartID& partID, RefMessage message, BOOL propagate) { switch (message) { case REFMSG_CHANGE: if (hTarget == pblock) { ivalid.SetEmpty(); // see if this message came from a changing parameter in the pblock, // if so, limit rollout update to the changing item and update any active viewport texture ParamID changing_param = pblock->LastNotifyParamID(); matte_param_blk.InvalidateUI(changing_param); if( (changing_param == matte_receive_shadows) ||(changing_param == matte_shadow_brightness) ||(changing_param == matte_color) ||(changing_param == matte_reflection_amount) ||(changing_param == matte_use_reflection_map)) { mReshadeRQ = RR_NeedReshade; } else if (changing_param == -1) mReshadeRQ = RR_NeedPreshade; else mReshadeRQ = RR_None; } if (hTarget != NULL) { switch (hTarget->SuperClassID()) { case TEXMAP_CLASS_ID: { mReshadeRQ = RR_NeedPreshade; } break; // default: // mReshadeRQ =RR_NeedReshade; // break; } } break; case REFMSG_SUBANIM_STRUCTURE_CHANGED: // if (partID == 0) // mReshadeRQ = RR_None; // else { // mReshadeRQ = RR_NeedPreshade; // NotifyChanged(); // } break; } return REF_SUCCEED; }