//---------------------------------------------------------------------------- bool SceneBuilder::ConvertIntListBoxAttrib (IParamBlock2* paramBlock, int index, std::string &name, int &value) { ParamBlockDesc2 *paramDesc = paramBlock->GetDesc(); if (!paramDesc) return false; ParamDef& paramDef = paramDesc->GetParamDef(paramDesc->IndextoID(index)); int intValue; Interval validInverval; BOOL retrieved = false; retrieved = paramBlock->GetValue((ParamID)index, 0, intValue, validInverval); if (retrieved) { char* valueName = paramDef.int_name; if (!IsValidName(valueName)) { valueName = paramBlock->GetLocalName((ParamID)index); assertion(IsValidName(valueName), "valueName must be valuable."); } name = std::string(valueName); //3ds Max中数组从1开始,这里的index要减1 value = (intValue==-1) ? -1 : (intValue-1); } return true; }
//---------------------------------------------------------------------------- bool SceneBuilder::ConvertFRGBAAttrib(IParamBlock2* paramBlock, int index, std::string &name, PX2::Float4 &value) { ParamBlockDesc2 *paramDesc = paramBlock->GetDesc(); if (!paramDesc) return false; ParamDef ¶mDef = paramDesc->GetParamDef(paramDesc->IndextoID(index)); Point4 vectorValue; Interval validInterval; BOOL retrieved = false; retrieved = paramBlock->GetValue((ParamID)index, 0 , vectorValue, validInterval); if(retrieved) { TCHAR* valueName = paramDef.int_name; if (!IsValidName(valueName)) valueName = paramBlock->GetLocalName((ParamID)index ); assertion(IsValidName(valueName), "valueName must be valuable."); name = std::string(valueName); value = PX2::Float4(vectorValue.x, vectorValue.y, vectorValue.z, vectorValue.w); if(HasAnimation(paramBlock, index)) { } } return true; }
//---------------------------------------------------------------------------- bool SceneBuilder::ConvertFloatAttrib (IParamBlock2* paramBlock, int index, std::string &name, float &value) { ParamBlockDesc2 *paramDesc = paramBlock->GetDesc(); if(!paramDesc) return false; ParamDef ¶mDef = paramDesc->GetParamDef(paramDesc->IndextoID(index)); float floatValue; Interval validInverval; BOOL retrieved = paramBlock->GetValue((ParamID)index, 0, floatValue, validInverval); if(!retrieved) { return false; } char *valueName = paramDef.int_name; if (!IsValidName(valueName)) { valueName = paramBlock->GetLocalName((ParamID)index); assertion(IsValidName(valueName), "valueName must be valuable."); } name = std::string(valueName); //if (!HasAnimation(paramBlock, index)) { value = floatValue; return true; } return true; }
bool mrShaderFilter::ValidateReturnType(ParamBlockDesc2& pbDesc) { // Go through all the parameters of the block int count = pbDesc.Count(); for(int i = 0; i < count; ++i) { const ParamDef& paramDef = pbDesc.GetParamDef(pbDesc.IndextoID(i)); if(ValidType(paramDef.type)) return true; } return false; }
//---------------------------------------------------------------------------- bool SceneBuilder::ConvertBitMapAttrib(IParamBlock2* paramBlock, int index, std::string &name, PX2::Texture2D *&tex2d) { ParamBlockDesc2 *paramDesc = paramBlock->GetDesc(); if (!paramDesc) return false; ParamDef ¶mDef = paramDesc->GetParamDef(paramDesc->IndextoID(index)); PX2_UNUSED(paramDef); PBBitmap *pb; Interval validInterval; char *valueName = 0; PX2_UNUSED(valueName); BOOL retrieved = false; retrieved = paramBlock->GetValue((ParamID)index, 0, pb, validInterval); char strBitMapName[256]; memset(strBitMapName, 0, 256*sizeof(char)); if (pb) { if (BMMGetFullFilename(&pb->bi) == TRUE) { strcpy(strBitMapName, pb->bi.Name()); std::string resourcePath; std::string fullName = std::string(strBitMapName); std::string::size_type sizeT = fullName.find_first_not_of(mSettings->SrcRootDir); resourcePath = std::string(strBitMapName).substr(sizeT); tex2d = PX2::DynamicCast<PX2::Texture2D>( PX2::ResourceManager::GetSingleton().BlockLoad(strBitMapName)); tex2d->SetResourcePath(resourcePath); } } if (retrieved) { valueName = paramDef.int_name; if (!IsValidName(valueName)) valueName = paramBlock->GetLocalName((ParamID)index); assertion(IsValidName(valueName), "valueName must be valuable."); name = valueName; } return true; }
static bool CheckParamBlock(IParamBlock2 * pblock) { ParamBlockDesc2 * pbd = pblock->GetDesc(); ParamID id = pblock->LastNotifyParamID(); if(id != -1) { const ParamDef &def = pbd->GetParamDef(id); for(int j=0; j < supportedParam_count;j++) { if(_tcscmp(def.int_name, supportedParams[j])==0){ pblock->ReleaseDesc(); return true; } } } return false; }
//---------------------------------------------------------------------------- bool SceneBuilder::ConvertFloatTabAttrib (IParamBlock2* paramBlock, int index, std::string &name, float *table) { ParamBlockDesc2 *paramDesc = paramBlock->GetDesc(); if (!paramDesc) return false; ParamDef& paramDef = paramDesc->GetParamDef(paramDesc->IndextoID(index)); Interval validInterval; BOOL retrieved = true; int count = paramBlock->Count(paramDesc->IndextoID(index)); if (count == 0) return false; float* floats = new float[count]; IParamBlock2* params = paramBlock; for (int i=0; i<count; i++) { retrieved &= params->GetValue((ParamID)index, 0 , floats[i], validInterval, i); } if (retrieved && count > 0) { TCHAR* valueName = paramDef.int_name; if (!IsValidName(valueName)) { valueName = paramBlock->GetLocalName((ParamID)index); assertion(IsValidName(valueName), "valueName must be valuable."); } name = std::string(valueName); for (int i=0; i<count; i++) { table[i] = floats[i]; } } return true; }
//---------------------------------------------------------------------------- bool SceneBuilder::ConvertStringAttrib (IParamBlock2 *paramBlock, int index, std::string &name, std::string &str) { PX2_UNUSED(name); PX2_UNUSED(str); ParamBlockDesc2 *paramDesc = paramBlock->GetDesc(); if (!paramDesc) return false; ParamDef ¶mDef = paramDesc->GetParamDef(paramDesc->IndextoID(index)); char *stringValue; Interval validInverval; BOOL retrieved = false; retrieved = paramBlock->GetValue((ParamID)index, 0, stringValue, validInverval); if (retrieved) { char* valueName = paramDef.int_name; if (!IsValidName(valueName)) { valueName = paramBlock->GetLocalName((ParamID)index); } assertion(IsValidName(valueName), "valueName must be valuable."); name = valueName; PX2_UNUSED(name); assertion(false, ""); } return true; }
//---------------------------------------------------------------------------- bool SceneBuilder::ConvertColorAttrib(IParamBlock2 *paramBlock, int index, std::string &name, PX2::Float4 &color, int &increment) { ParamBlockDesc2 *paramDesc = paramBlock->GetDesc(); int numParams = paramBlock->NumParams(); if (!paramDesc) return false; ParamDef &colorParamDef = paramDesc->GetParamDef( paramDesc->IndextoID(index)); ParamDef &alphaParamDef = paramDesc->GetParamDef( paramDesc->IndextoID(index+1)); Color colorValue; float alphaValue = 255.0f; Interval validInterval; BOOL retrievedColor = false; BOOL retrievedAlpha = false; int alphaIndex = index + 1; retrievedColor = paramBlock->GetValue((ParamID)index, 0, colorValue, validInterval); if (alphaIndex < numParams) { int param_type = paramBlock->GetParameterType((ParamID)alphaIndex); if (param_type == TYPE_FLOAT) { retrievedAlpha = paramBlock->GetValue((ParamID)alphaIndex, 0, alphaValue, validInterval); } } if (retrievedColor) { char* valueName = colorParamDef.int_name; if (!IsValidName(valueName)) { valueName = paramBlock->GetLocalName((ParamID)index); } assertion(IsValidName(valueName), "valueName must be valuable."); name = std::string(valueName); Control *colorControl = paramBlock->GetController(index, 0); PX2_UNUSED(colorControl); bool hasAlpha = false; Control *alphaControl = 0; if (retrievedAlpha) { TCHAR *valueAlphaName = alphaParamDef.int_name; if (!IsValidName(valueAlphaName)) valueName = paramBlock->GetLocalName((ParamID)alphaIndex); assertion(IsValidName(valueAlphaName), "valueName must be valuable."); alphaControl = paramBlock->GetController(alphaIndex, 0); std::string strColorName = valueName; strColorName += "Alpha"; if (!strcmp(strColorName.c_str(), valueAlphaName)) { hasAlpha = true; increment++; } else { alphaControl = 0; } } if (hasAlpha) { color = PX2::Float4(colorValue.r, colorValue.g, colorValue.b, alphaValue); } else { color = PX2::Float4(colorValue.r, colorValue.g, colorValue.b, 1.0f); } } return true; }