---------------------------------------------------------------------------- Process stages ----------------------------------------------------------------------------
| 321 | // Process stages |
| 322 | //---------------------------------------------------------------------------- |
| 323 | bool MatInstance::processMaterial() |
| 324 | { |
| 325 | AssertFatal( mMaterial, "MatInstance::processMaterial - Got null material!" ); |
| 326 | //AssertFatal( mVertexFormat, "MatInstance::processMaterial - Got null vertex format!" ); |
| 327 | if ( !mMaterial || !mVertexFormat ) |
| 328 | return false; |
| 329 | |
| 330 | SAFE_DELETE(mDefaultParameters); |
| 331 | |
| 332 | CustomMaterial *custMat = NULL; |
| 333 | |
| 334 | if( dynamic_cast<CustomMaterial*>(mMaterial) ) |
| 335 | { |
| 336 | F32 pixVersion = GFX->getPixelShaderVersion(); |
| 337 | custMat = static_cast<CustomMaterial*>(mMaterial); |
| 338 | if ((custMat->mVersion > pixVersion) || (custMat->mVersion == 0.0)) |
| 339 | { |
| 340 | if(custMat->mFallback) |
| 341 | { |
| 342 | mMaterial = custMat->mFallback; |
| 343 | return processMaterial(); |
| 344 | } |
| 345 | else |
| 346 | { |
| 347 | AssertWarn(custMat->mVersion == 0.0f, avar("Can't load CustomMaterial %s for %s, using generic FF fallback", |
| 348 | String(mMaterial->getName()).isEmpty() ? "Unknown" : mMaterial->getName(), custMat->mMapTo.c_str())); |
| 349 | } |
| 350 | } |
| 351 | else |
| 352 | mProcessedMaterial = new ProcessedCustomMaterial(*mMaterial); |
| 353 | } |
| 354 | else |
| 355 | mProcessedMaterial = getShaderMaterial(); |
| 356 | |
| 357 | |
| 358 | if (mProcessedMaterial) |
| 359 | { |
| 360 | mProcessedMaterial->addStateBlockDesc( mUserDefinedState ); |
| 361 | mProcessedMaterial->setShaderMacros( mUserMacros ); |
| 362 | mProcessedMaterial->setUserObject( mUserObject ); |
| 363 | |
| 364 | FeatureSet features( mFeatureList ); |
| 365 | features.exclude( MATMGR->getExclusionFeatures() ); |
| 366 | |
| 367 | if (mVertexFormat->hasBlendIndices() && TSShape::smUseHardwareSkinning) |
| 368 | { |
| 369 | features.addFeature( MFT_HardwareSkinning ); |
| 370 | } |
| 371 | |
| 372 | if( !mProcessedMaterial->init(features, mVertexFormat, mFeaturesDelegate) ) |
| 373 | { |
| 374 | Con::errorf( "Failed to initialize material '%s'", getMaterial()->getName() ); |
| 375 | SAFE_DELETE( mProcessedMaterial ); |
| 376 | return false; |
| 377 | } |
| 378 | |
| 379 | mDefaultParameters = new MatInstParameters(mProcessedMaterial->getDefaultMaterialParameters()); |
| 380 | mActiveParameters = mDefaultParameters; |
nothing calls this directly
no test coverage detected