Skip to content

Commit 2153447

Browse files
committed
Update shaderGen.cpp
vertex shaders need to regen on run again to get the vertex format setup
1 parent ae785f0 commit 2153447

1 file changed

Lines changed: 18 additions & 9 deletions

File tree

Engine/source/shaderGen/shaderGen.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ ShaderGen::~ShaderGen()
9393
{
9494
GFXDevice::getDeviceEventSignal().remove(this, &ShaderGen::_handleGFXEvent);
9595
_uninit();
96+
97+
mFileCache.clear();
9698
}
9799

98100
void 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> &macros, 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

Comments
 (0)