Browse Source

Merge pull request #130 from lobodelmar/buffersKnowIfTheyAreActive

Draw/update FBOs only if they are currently displayed
master
Krisjanis Rijnieks 7 years ago
committed by GitHub
parent
commit
2bf51a4bd1
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      src/MediaServer/MediaServer.cpp
  2. 17
      src/Sources/BaseSource.cpp
  3. 7
      src/Sources/BaseSource.h
  4. 24
      src/Surfaces/SurfaceManager.cpp
  5. 1
      src/Surfaces/SurfaceManager.h

11
src/MediaServer/MediaServer.cpp

@ -40,13 +40,13 @@ void MediaServer::setup(){
void MediaServer::update(){ void MediaServer::update(){
for(int i = 0; i < fboSources.size(); ++i){ for(int i = 0; i < fboSources.size(); ++i){
fboSources[i]->updateFbo(); if (fboSources[i]->isActive() || fboSources[i]->runsInBackground()) fboSources[i]->updateFbo();
} }
} }
void MediaServer::draw(){ void MediaServer::draw(){
for(int i = 0; i < fboSources.size(); ++i){ for(int i = 0; i < fboSources.size(); ++i){
fboSources[i]->drawFbo(); if (fboSources[i]->isActive() || fboSources[i]->runsInBackground()) fboSources[i]->drawFbo();
} }
} }
@ -366,7 +366,8 @@ BaseSource * MediaServer::loadFboSource(std::string & fboSourceName){
// Is loaded, increase reference count and return existing // Is loaded, increase reference count and return existing
loadedSources[fboSourceName]->referenceCount++; loadedSources[fboSourceName]->referenceCount++;
ofLogNotice("MediaServer") << "Current " << fboSourceName << "reference count: " << loadedSources[fboSourceName]->referenceCount; ofLogNotice("MediaServer") << "Current " << fboSourceName << "reference count: " << loadedSources[fboSourceName]->referenceCount;
return loadedSources[fboSourceName]; source->setActive(true);
return loadedSources[fboSourceName];
} }
// else // else
// Not loaded, add to loaded sources and activate // Not loaded, add to loaded sources and activate
@ -375,7 +376,8 @@ BaseSource * MediaServer::loadFboSource(std::string & fboSourceName){
source->referenceCount = 1; source->referenceCount = 1;
ofLogNotice("MediaServer") << "Current " << fboSourceName << " reference count: " << source->referenceCount; ofLogNotice("MediaServer") << "Current " << fboSourceName << " reference count: " << source->referenceCount;
loadedSources[fboSourceName] = source; loadedSources[fboSourceName] = source;
return loadedSources[fboSourceName]; source->setActive(true);
return loadedSources[fboSourceName];
} // loadFboSource } // loadFboSource
void MediaServer::unloadFboSource(std::string & fboSourceName){ void MediaServer::unloadFboSource(std::string & fboSourceName){
@ -395,6 +397,7 @@ void MediaServer::unloadFboSource(std::string & fboSourceName){
if(source->referenceCount <= 0){ if(source->referenceCount <= 0){
ofLogNotice("MediaServer") << fboSourceName << " reference count <= 0, removing from loaded sources"; ofLogNotice("MediaServer") << fboSourceName << " reference count <= 0, removing from loaded sources";
source->referenceCount = 0; source->referenceCount = 0;
source->setActive(false);
//source->removeAppListeners(); //source->removeAppListeners();
map <std::string, BaseSource *>::iterator it = loadedSources.find(fboSourceName); map <std::string, BaseSource *>::iterator it = loadedSources.find(fboSourceName);
loadedSources.erase(it); loadedSources.erase(it);

17
src/Sources/BaseSource.cpp

@ -6,6 +6,8 @@ namespace piMapper {
BaseSource::BaseSource(){ BaseSource::BaseSource(){
//std::cout << "BaseSource" << std::endl; //std::cout << "BaseSource" << std::endl;
init(); init();
runInBackground = false;
displayed = false;
} }
BaseSource::BaseSource(ofTexture * newTexture){ BaseSource::BaseSource(ofTexture * newTexture){
@ -49,13 +51,26 @@ void BaseSource::init(){
referenceCount = 1; // We have one instance on init referenceCount = 1; // We have one instance on init
} }
void BaseSource::setActive(bool value){
displayed = value;
}
bool BaseSource::isActive(){
return displayed;
}
bool BaseSource::runsInBackground(){
return runInBackground;
}
void BaseSource::setNameFromPath(std::string & fullPath){ void BaseSource::setNameFromPath(std::string & fullPath){
std::vector<std::string> pathParts; std::vector<std::string> pathParts;
//std::cout << "fullPath: " << fullPath << std::endl; //std::cout << "fullPath: " << fullPath << std::endl;
pathParts = ofSplitString(fullPath, "/"); // Maybe on win "/" is "\", have to test pathParts = ofSplitString(fullPath, "/"); // Maybe on win "/" is "\", have to test
//std::cout << "lastPathPart: " << pathParts[pathParts.size() - 1] << std::endl; //std::cout << "lastPathPart: " << pathParts[pathParts.size() - 1] << std::endl;
name = pathParts[pathParts.size() - 1]; name = pathParts[pathParts.size() - 1];
} }
} // namespace piMapper } // namespace piMapper
} // namespace ofx } // namespace ofx

7
src/Sources/BaseSource.h

@ -20,6 +20,9 @@ class BaseSource {
std::string & getPath(); std::string & getPath();
virtual void clear(){} virtual void clear(){}
virtual void togglePause(){} virtual void togglePause(){}
bool isActive();
bool runsInBackground();
void setActive(bool);
virtual void reset(){} // called by surfaceManager to optionally allow users to reset a source's variables virtual void reset(){} // called by surfaceManager to optionally allow users to reset a source's variables
@ -28,7 +31,7 @@ class BaseSource {
int referenceCount; int referenceCount;
private: private:
void init(); void init();
protected: protected:
void setNameFromPath(std::string & fullPath); void setNameFromPath(std::string & fullPath);
@ -38,6 +41,8 @@ class BaseSource {
bool loadable; // If the source can be loaded from disk like image and video bool loadable; // If the source can be loaded from disk like image and video
bool loaded; // Is the source loaded? bool loaded; // Is the source loaded?
SourceType type; SourceType type;
bool displayed;
bool runInBackground;
}; };
} // namespace piMapper } // namespace piMapper

24
src/Surfaces/SurfaceManager.cpp

@ -134,6 +134,12 @@ bool SurfaceManager::loadXmlSettings(std::string fileName){
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
bool success = SettingsLoader::instance()->load(*this, *mediaServer, fileName); bool success = SettingsLoader::instance()->load(*this, *mediaServer, fileName);
for (int i=0; i<_presets.size(); i++){
setPresetSourcesActiveState(i, false);
}
setPresetSourcesActiveState(_activePresetIndex, true);
return success; return success;
} }
@ -451,7 +457,16 @@ void SurfaceManager::setNextPreset(){
// TODO: Create command for this. // TODO: Create command for this.
} }
void SurfaceManager::setPresetSourcesActiveState(unsigned int presetIndex, bool state){
// tell sources associated with current preset that they are not displayed any more
// this is so that we can optionally update the buffers or not.
for (int j=0; j<_presets[presetIndex]->getSurfaces().size(); j++){
_presets[presetIndex]->getSurfaces()[j]->getSource()->setActive(state);
}
}
void SurfaceManager::setPreset(unsigned int i){ void SurfaceManager::setPreset(unsigned int i){
cout << "CALLED IT" << endl;
if(_presets.size() <= 1){ if(_presets.size() <= 1){
throw runtime_error("ofxPiMapper: No presets to set."); throw runtime_error("ofxPiMapper: No presets to set.");
} }
@ -460,7 +475,14 @@ void SurfaceManager::setPreset(unsigned int i){
throw runtime_error("ofxPiMapper: Preset index out of bounds."); throw runtime_error("ofxPiMapper: Preset index out of bounds.");
} }
_activePresetIndex = i; //let sources associated with all preset know that they are not being displayed any more
setPresetSourcesActiveState(_activePresetIndex, false);
//change preset
_activePresetIndex = i;
//let sources associated with NEW preset know that they are now being displayed
setPresetSourcesActiveState(_activePresetIndex, true);
//when preset it changed, call reset on all sources, if it's defined //when preset it changed, call reset on all sources, if it's defined
for (int i=0; i<_presets[_activePresetIndex]->getSurfaces().size(); i++){ for (int i=0; i<_presets[_activePresetIndex]->getSurfaces().size(); i++){

1
src/Surfaces/SurfaceManager.h

@ -77,6 +77,7 @@ class SurfaceManager {
void setPreset(unsigned int i); void setPreset(unsigned int i);
void cloneActivePreset(); void cloneActivePreset();
void eraseActivePreset(); void eraseActivePreset();
void setPresetSourcesActiveState(unsigned int presetIndex, bool state);
private: private:
BaseSurface * selectedSurface; BaseSurface * selectedSurface;

Loading…
Cancel
Save