@@ -93,6 +93,8 @@ ShaderGen::~ShaderGen()
9393{
9494 GFXDevice::getDeviceEventSignal ().remove (this , &ShaderGen::_handleGFXEvent);
9595 _uninit ();
96+
97+ mFileCache .clear ();
9698}
9799
98100void ShaderGen::registerInitDelegate (GFXAdapterType adapterType, ShaderGenInitDelegate& initDelegate)
@@ -190,7 +192,7 @@ void ShaderGen::generateShader( const MaterialFeatureData& featureData,
190192 _uninit ();
191193 _init ();
192194
193- const bool skipRegen = !Con::getBoolVariable (" ShaderGen::GenNewShaders" , true );
195+ bool skipRegen = !Con::getBoolVariable (" ShaderGen::GenNewShaders" , true );
194196 const FeatureSet& features = mFeatureData .features ;
195197 U32 stages = 0 ;
196198
@@ -240,7 +242,12 @@ void ShaderGen::generateShader( const MaterialFeatureData& featureData,
240242 // set the shaderdata file for this stage, shaderdata ptr needs to be passed in here.
241243 dSprintf (fileName, sizeof (fileName), " shadergen:/%s.%s" , stageName.c_str (), mFileEnding .c_str ());
242244 shaderData->setShaderStageFile (curStage, fileName);
243- continue ;
245+ if (!(curStage & GFXShaderStage::VERTEX_SHADER))
246+ {
247+ continue ;
248+ }
249+
250+ skipRegen = true ;
244251 }
245252
246253 mFileCache [stageName] = true ;
@@ -251,10 +258,13 @@ void ShaderGen::generateShader( const MaterialFeatureData& featureData,
251258
252259 mOutput = new MultiLine;
253260 FileStream* stream = new FileStream ();
254- if (!stream-> open (fileName, Torque::FS::File::Write) )
261+ if (!skipRegen )
255262 {
256- AssertFatal (false , " Failed to open Shader Stream" );
257- return ;
263+ if (!stream->open (fileName, Torque::FS::File::Write))
264+ {
265+ AssertFatal (false , " Failed to open Shader Stream" );
266+ return ;
267+ }
258268 }
259269
260270 switch (curStage)
@@ -350,15 +360,15 @@ void ShaderGen::_processVertFeatures( Vector<GFXShaderMacro> ¯os, bool macro
350360
351361 feature->processVertMacros ( macros, mFeatureData );
352362
353- if ( macrosOnly )
354- continue ;
355-
356363 feature->setInstancingFormat ( &mInstancingFormat );
357364
358365 feature->mVertexFormat = mVertexFormat ;
359366
360367 feature->processVert ( mComponents , mFeatureData );
361368
369+ if (macrosOnly)
370+ continue ;
371+
362372 String line;
363373 if ( index > -1 )
364374 line = String::ToString ( " // %s %d\r\n " , feature->getName ().c_str (), index );
@@ -601,5 +611,4 @@ void ShaderGen::flushProceduralShaders()
601611 }
602612
603613 mProcShaderData .clear ();
604- mFileCache .clear ();
605614}
0 commit comments