@@ -189,6 +189,7 @@ namespace Shader {
189
189
if (reloadFromDisk || curShaderSrc.empty ())
190
190
curShaderSrc = GetShaderSource (srcFile);
191
191
192
+ assert (!curShaderSrc.empty ());
192
193
std::string sourceStr = curShaderSrc;
193
194
std::string defFlags = rawDefStrs + " \n " + modDefStrs;
194
195
std::string versionStr;
@@ -496,6 +497,7 @@ namespace Shader {
496
497
curFlagsHash = 0 ;
497
498
objID = 0 ;
498
499
objID = glCreateProgram ();
500
+ curSrcHash = 0 ;
499
501
}
500
502
501
503
void GLSLProgramObject::Reload (bool reloadFromDisk) {
@@ -508,8 +510,8 @@ namespace Shader {
508
510
log = " " ;
509
511
valid = false ;
510
512
511
- curFlagsHash = GetHash ();
512
513
// create shader source hash
514
+ curFlagsHash = GetHash ();
513
515
curSrcHash = curFlagsHash;
514
516
for (const IShaderObject* so: GetAttachedShaderObjs ()) {
515
517
curSrcHash ^= so->GetHash ();
@@ -549,12 +551,14 @@ namespace Shader {
549
551
}
550
552
}
551
553
Link ();
554
+ } else {
555
+ valid = true ;
552
556
}
553
557
554
-
555
558
// copy full program state from old to new program (uniforms etc.)
556
- // FIXME if (IsValid())
557
- GLSLCopyState (objID, oldProgID, &((IProgramObject*)(this ))->uniformStates );
559
+ if (oldValid && IsValid ()) {
560
+ GLSLCopyState (objID, oldProgID, &((IProgramObject*)(this ))->uniformStates );
561
+ }
558
562
559
563
// delete old program when not further used
560
564
if (deleteOldShader)
0 commit comments