@@ -518,6 +518,8 @@ void ShaderObject::doFragmentShader(){
518518 }
519519
520520 // reset inlets
521+ this ->inletsType .clear ();
522+ this ->inletsNames .clear ();
521523 this ->numInlets = num;
522524
523525 textures.clear ();
@@ -532,18 +534,12 @@ void ShaderObject::doFragmentShader(){
532534 textures.push_back (tempFBO);
533535 }
534536
535- if (num != nTextures || reloading || isNewObject){
536- reloading = false ;
537- nTextures = num;
538-
539- this ->inletsType .clear ();
540- this ->inletsNames .clear ();
541-
542- // add texture(s) inlets
543- for ( int i = 0 ; i < nTextures; i++){
544- this ->addInlet (VP_LINK_TEXTURE," texture" +ofToString ((i+1 )));
545- }
537+ reloading = false ;
538+ nTextures = num;
546539
540+ // INJECT TEXTURE(s) INLETS
541+ for ( int i = 0 ; i < nTextures; i++){
542+ this ->addInlet (VP_LINK_TEXTURE," texture" +ofToString ((i+1 )));
547543 }
548544
549545 shaderSliders.clear ();
@@ -563,6 +559,7 @@ void ShaderObject::doFragmentShader(){
563559 unsigned long subVarMiddle = fragmentShader.find (" ;//" ,subVarStart);
564560 unsigned long subVarEnd = fragmentShader.find (" @" ,subVarStart);
565561 string varName = fragmentShader.substr (subVarMiddle+3 ,subVarEnd-subVarMiddle-3 );
562+
566563 float tempValue = 0 .0f ;
567564 map<string,float >::const_iterator it = tempVars.find (" GUI_FLOAT_" +varName);
568565 if (it!=tempVars.end ()){
@@ -648,7 +645,7 @@ void ShaderObject::doFragmentShader(){
648645 string rawname = filepath.substr (0 , lastindex);
649646 shader->load (rawname);
650647 }
651- scriptLoaded = shader->linkProgram ();
648+ scriptLoaded = shader->isLoaded ();
652649
653650 if (scriptLoaded){
654651 ofLog (OF_LOG_NOTICE," [verbose] SHADER: %s [%ix%i] loaded on GPU!" ,filepath.c_str (),output_width,output_height);
@@ -728,15 +725,17 @@ void ShaderObject::loadScript(string scriptFile){
728725 if (currentScriptFile.exists ()){
729726 ofBuffer fscontent = ofBufferFromFile (filepath);
730727
728+ fragmentShader.clear ();
731729 fragmentShader = fscontent.getText ();
732730
733731 if (vertexShaderFile.exists ()){
734732 lastVertexShaderPath = vertexShaderFile.getAbsolutePath ();
735733 ofBuffer vscontent = ofBufferFromFile (lastVertexShaderPath);
734+ vertexShader.clear ();
736735 vertexShader = vscontent.getText ();
737736 }
738737
739- ofShader test;
738+ ofShader test;
740739 if (ofIsGLProgrammableRenderer ()) {
741740 size_t lastindex = filepath.find_last_of (" ." );
742741 string rawname = filepath.substr (0 , lastindex);
@@ -747,14 +746,16 @@ void ShaderObject::loadScript(string scriptFile){
747746 }
748747 test.setupShaderFromSource (GL_FRAGMENT_SHADER, fragmentShader);
749748 }
750- if (test.linkProgram ()){
749+ if (test.isLoaded ()){
750+ test.unload ();
751751 watcher.removeAllPaths ();
752752 watcher.addPath (filepath);
753753 if (vertexShader != " " ){
754754 watcher.addPath (vertexShaderFile.getAbsolutePath ());
755755 }
756756 doFragmentShader ();
757757 }
758+
758759 }else {
759760 ofLog (OF_LOG_ERROR," SHADER File %s do not exists" ,currentScriptFile.getFileName ().c_str ());
760761 }
0 commit comments