Skip to content

Commit f5e4158

Browse files
committed
fixed glsl live-coding reload and GUI params inject
1 parent 28a47e7 commit f5e4158

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

src/objects/scripting/ShaderObject.cpp

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)