mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-13 03:33:48 +00:00
Merge pull request #925 from BeamNG/shaderdata_samplernames
Add sampler names to ShaderData
This commit is contained in:
commit
03ffa1ddd3
17 changed files with 314 additions and 26 deletions
|
|
@ -221,6 +221,7 @@ bool ProcessedShaderMaterial::init( const FeatureSet &features,
|
|||
{
|
||||
rpd->mTexSlot[0].texTarget = texTarget;
|
||||
rpd->mTexType[0] = Material::TexTarget;
|
||||
rpd->mSamplerNames[0] = "diffuseMap";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -516,8 +517,23 @@ bool ProcessedShaderMaterial::_createPasses( MaterialFeatureData &stageFeatures,
|
|||
|
||||
passData.mNumTexReg += numTexReg;
|
||||
passData.mFeatureData.features.addFeature( *info.type );
|
||||
|
||||
#if defined(TORQUE_DEBUG) && defined( TORQUE_OPENGL)
|
||||
U32 oldTexNumber = texIndex;
|
||||
#endif
|
||||
|
||||
info.feature->setTexData( mStages[stageNum], stageFeatures, passData, texIndex );
|
||||
|
||||
#if defined(TORQUE_DEBUG) && defined( TORQUE_OPENGL)
|
||||
if(oldTexNumber != texIndex)
|
||||
{
|
||||
for(int i = oldTexNumber; i < texIndex; i++)
|
||||
{
|
||||
AssertFatal(passData.mSamplerNames[ oldTexNumber ].isNotEmpty(), avar( "ERROR: ShaderGen feature %s don't set used sampler name", info.feature->getName().c_str()) );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Add pass if tex units are maxed out
|
||||
if( texIndex > GFX->getNumSamplers() )
|
||||
{
|
||||
|
|
@ -527,6 +543,13 @@ bool ProcessedShaderMaterial::_createPasses( MaterialFeatureData &stageFeatures,
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(TORQUE_DEBUG) && defined( TORQUE_OPENGL)
|
||||
for(int i = 0; i < texIndex; i++)
|
||||
{
|
||||
AssertFatal(passData.mSamplerNames[ i ].isNotEmpty(),"");
|
||||
}
|
||||
#endif
|
||||
|
||||
const FeatureSet &passFeatures = passData.mFeatureData.codify();
|
||||
if ( passFeatures.isNotEmpty() )
|
||||
{
|
||||
|
|
@ -587,9 +610,16 @@ bool ProcessedShaderMaterial::_addPass( ShaderRenderPassData &rpd,
|
|||
// Copy over features
|
||||
rpd.mFeatureData.materialFeatures = fd.features;
|
||||
|
||||
Vector<String> samplers;
|
||||
samplers.setSize(Material::MAX_TEX_PER_PASS);
|
||||
for(int i = 0; i < Material::MAX_TEX_PER_PASS; ++i)
|
||||
{
|
||||
samplers[i] = (rpd.mSamplerNames[i].isEmpty() || rpd.mSamplerNames[i][0] == '$') ? rpd.mSamplerNames[i] : "$" + rpd.mSamplerNames[i];
|
||||
}
|
||||
|
||||
// Generate shader
|
||||
GFXShader::setLogging( true, true );
|
||||
rpd.shader = SHADERGEN->getShader( rpd.mFeatureData, mVertexFormat, &mUserMacros );
|
||||
rpd.shader = SHADERGEN->getShader( rpd.mFeatureData, mVertexFormat, &mUserMacros, samplers );
|
||||
if( !rpd.shader )
|
||||
return false;
|
||||
rpd.shaderHandles.init( rpd.shader );
|
||||
|
|
@ -601,6 +631,30 @@ bool ProcessedShaderMaterial::_addPass( ShaderRenderPassData &rpd,
|
|||
ShaderRenderPassData *newPass = new ShaderRenderPassData( rpd );
|
||||
mPasses.push_back( newPass );
|
||||
|
||||
//initSamplerHandles
|
||||
ShaderConstHandles *handles = _getShaderConstHandles( mPasses.size()-1 );
|
||||
AssertFatal(handles,"");
|
||||
for(int i = 0; i < rpd.mNumTex; i++)
|
||||
{
|
||||
if(rpd.mSamplerNames[i].isEmpty())
|
||||
{
|
||||
handles->mTexHandlesSC[i] = newPass->shader->getShaderConstHandle( String::EmptyString );
|
||||
handles->mRTParamsSC[i] = newPass->shader->getShaderConstHandle( String::EmptyString );
|
||||
continue;
|
||||
}
|
||||
|
||||
String samplerName = rpd.mSamplerNames[i];
|
||||
if( !samplerName.startsWith("$"))
|
||||
samplerName.insert(0, "$");
|
||||
|
||||
GFXShaderConstHandle *handle = newPass->shader->getShaderConstHandle( samplerName );
|
||||
|
||||
handles->mTexHandlesSC[i] = handle;
|
||||
handles->mRTParamsSC[i] = newPass->shader->getShaderConstHandle( String::ToString( "$rtParams%s", samplerName.c_str()+1 ) );
|
||||
|
||||
AssertFatal( handle,"");
|
||||
}
|
||||
|
||||
// Give each active feature a chance to create specialized shader consts.
|
||||
for( U32 i=0; i < FEATUREMGR->getFeatureCount(); i++ )
|
||||
{
|
||||
|
|
@ -705,6 +759,7 @@ void ProcessedShaderMaterial::setTextureStages( SceneRenderState *state, const S
|
|||
PROFILE_SCOPE( ProcessedShaderMaterial_SetTextureStages );
|
||||
|
||||
ShaderConstHandles *handles = _getShaderConstHandles(pass);
|
||||
AssertFatal(handles,"");
|
||||
|
||||
// Set all of the textures we need to render the give pass.
|
||||
#ifdef TORQUE_DEBUG
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue