| 648 | } |
| 649 | |
| 650 | bool ProcessedShaderMaterial::_addPass( ShaderRenderPassData &rpd, |
| 651 | U32 &texIndex, |
| 652 | MaterialFeatureData &fd, |
| 653 | U32 stageNum, |
| 654 | const FeatureSet &features ) |
| 655 | { |
| 656 | // Set number of textures, stage, glow, etc. |
| 657 | rpd.mNumTex = texIndex; |
| 658 | rpd.mStageNum = stageNum; |
| 659 | rpd.mGlow |= mMaterial->mGlow[stageNum]; |
| 660 | |
| 661 | // Copy over features |
| 662 | rpd.mFeatureData.materialFeatures = fd.features; |
| 663 | |
| 664 | Vector<String> samplers; |
| 665 | samplers.setSize(Material::MAX_TEX_PER_PASS); |
| 666 | for(int i = 0; i < Material::MAX_TEX_PER_PASS; ++i) |
| 667 | { |
| 668 | samplers[i] = (rpd.mSamplerNames[i].isEmpty() || rpd.mSamplerNames[i][0] == '$') ? rpd.mSamplerNames[i] : "$" + rpd.mSamplerNames[i]; |
| 669 | } |
| 670 | |
| 671 | // Generate shader |
| 672 | GFXShader::setLogging( true, true ); |
| 673 | rpd.shader = SHADERGEN->getShader( rpd.mFeatureData, mVertexFormat, &mUserMacros, samplers ); |
| 674 | if( !rpd.shader ) |
| 675 | return false; |
| 676 | rpd.shaderHandles.init( rpd.shader ); |
| 677 | |
| 678 | // If a pass glows, we glow |
| 679 | if( rpd.mGlow ) |
| 680 | mHasGlow = true; |
| 681 | |
| 682 | ShaderRenderPassData *newPass = new ShaderRenderPassData( rpd ); |
| 683 | mPasses.push_back( newPass ); |
| 684 | |
| 685 | //initSamplerHandles |
| 686 | ShaderConstHandles *handles = _getShaderConstHandles( mPasses.size()-1 ); |
| 687 | AssertFatal(handles,""); |
| 688 | for(int i = 0; i < rpd.mNumTex; i++) |
| 689 | { |
| 690 | if(rpd.mSamplerNames[i].isEmpty()) |
| 691 | { |
| 692 | handles->mTexHandlesSC[i] = newPass->shader->getShaderConstHandle( String::EmptyString ); |
| 693 | handles->mRTParamsSC[i] = newPass->shader->getShaderConstHandle( String::EmptyString ); |
| 694 | continue; |
| 695 | } |
| 696 | |
| 697 | String samplerName = rpd.mSamplerNames[i]; |
| 698 | if( !samplerName.startsWith("$")) |
| 699 | samplerName.insert(0, "$"); |
| 700 | |
| 701 | GFXShaderConstHandle *handle = newPass->shader->getShaderConstHandle( samplerName ); |
| 702 | |
| 703 | handles->mTexHandlesSC[i] = handle; |
| 704 | handles->mRTParamsSC[i] = newPass->shader->getShaderConstHandle( String::ToString( "$rtParams%s", samplerName.c_str()+1 ) ); |
| 705 | |
| 706 | AssertFatal( handle,""); |
| 707 | } |
nothing calls this directly
no test coverage detected