From 7db249d890e52fdcbe3c36fda53ba37a701bcdf5 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 5 Nov 2014 16:37:15 +0100 Subject: [PATCH] Add saving and loading FBO source --- example/src/ofApp.cpp | 11 +++++++---- src/Surfaces/SurfaceManager.cpp | 19 ++++++++++++------- src/ofxPiMapper.cpp | 4 +--- src/ofxPiMapper.h | 2 +- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/example/src/ofApp.cpp b/example/src/ofApp.cpp index f17b9c3..c22f0ae 100755 --- a/example/src/ofApp.cpp +++ b/example/src/ofApp.cpp @@ -3,12 +3,15 @@ void ofApp::setup() { ofBackground(0); - // The ofxPiMapper is being set up automatically before the first - // ofApp setup call - piMapper.showInfo(); // The info layer is hidden by default, press to toggle - // Add our CustomSource to list of fbo sources of the piMapper + // FBO sources should be added before piMapper.setup() so the + // piMapper is able to load the source if it is assigned to + // a surface in XML settings. piMapper.getMediaServer().addFboSource(customSource); + piMapper.setup(); + + // The info layer is hidden by default, press to toggle + piMapper.showInfo(); } void ofApp::draw() { diff --git a/src/Surfaces/SurfaceManager.cpp b/src/Surfaces/SurfaceManager.cpp index c2c8c68..929fd1f 100644 --- a/src/Surfaces/SurfaceManager.cpp +++ b/src/Surfaces/SurfaceManager.cpp @@ -225,13 +225,18 @@ void SurfaceManager::loadXmlSettings(string fileName) { if (sourceName != "" && sourceName != "none" && sourceType != "") { // Load source depending on type int typeEnum = SourceType::GetSourceTypeEnum(sourceType); - // Construct full path - string dir = mediaServer->getDefaultMediaDir(typeEnum); - std::stringstream pathss; - pathss << ofToDataPath(dir, true) << sourceName; - string sourcePath = pathss.str(); - // Load media by using full path - source = mediaServer->loadMedia(sourcePath, typeEnum); + if (typeEnum == SourceType::SOURCE_TYPE_FBO) { + // Load FBO source using sourceName + source = mediaServer->loadMedia(sourceName, typeEnum); + } else { + // Construct full path + string dir = mediaServer->getDefaultMediaDir(typeEnum); + std::stringstream pathss; + pathss << ofToDataPath(dir, true) << sourceName; + string sourcePath = pathss.str(); + // Load media by using full path + source = mediaServer->loadMedia(sourcePath, typeEnum); + } } xmlSettings.popTag(); // source xmlSettings.pushTag("vertices"); diff --git a/src/ofxPiMapper.cpp b/src/ofxPiMapper.cpp index 1e8bce9..68c8e75 100644 --- a/src/ofxPiMapper.cpp +++ b/src/ofxPiMapper.cpp @@ -3,16 +3,14 @@ ofxPiMapper::ofxPiMapper(): bShowInfo(false), isSetUp(false){ - ofAddListener(ofEvents().setup, this, &ofxPiMapper::setup, OF_EVENT_ORDER_BEFORE_APP); ofAddListener(ofEvents().keyPressed, this, &ofxPiMapper::keyPressed); } ofxPiMapper::~ofxPiMapper() { - ofRemoveListener(ofEvents().setup, this, &ofxPiMapper::setup, OF_EVENT_ORDER_BEFORE_APP); ofRemoveListener(ofEvents().keyPressed, this, &ofxPiMapper::keyPressed); } -void ofxPiMapper::setup(ofEventArgs& args) { +void ofxPiMapper::setup() { ofLogNotice("ofxPiMapper") << "Setting up..."; // Assign media server to other pi mapper components diff --git a/src/ofxPiMapper.h b/src/ofxPiMapper.h index ff93ab7..5007fd4 100644 --- a/src/ofxPiMapper.h +++ b/src/ofxPiMapper.h @@ -13,7 +13,7 @@ public: ofxPiMapper(); ~ofxPiMapper(); - void setup(ofEventArgs& args); + void setup(); void draw(); // Called manually to make custom layering possible void keyPressed(ofKeyEventArgs& args);