From 0f7a9166746b4b7c4f9391be8539e4b3554dd0b8 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Sat, 18 Oct 2014 18:32:20 +0200 Subject: [PATCH 01/13] Fix typo: assignment mode to assignment mode --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 759632e..f8fa9e3 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ In this mode you can adjust the texture coordinates of the surface you have sele Here you can select, move and distort the surfaces you have created. -####Souce assignment mode +####Source assignment mode After you select a surface in surface editing mode, activate this mode to be able to choose a source for the surface. Afterwards you might want to go to the texture mapping mode to adjust texture coordinates. From 30f5c55fe103d0d3c0f70af6fbed3065511d77a7 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Tue, 4 Nov 2014 11:36:11 +0100 Subject: [PATCH 02/13] Remove XCode project files from git ignore --- example/.gitignore | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/example/.gitignore b/example/.gitignore index 1af20d0..e4d4b5d 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -1,6 +1,5 @@ obj -*.xcodeproj -*.plist -*.xcconfig +*.xcworkspace +*.xcuserdatad *~ config.make From 3b64df6bde40a046fc6e549d5465db7a486d63d4 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Tue, 4 Nov 2014 11:36:33 +0100 Subject: [PATCH 03/13] Add XCode project files to repo --- example/Project.xcconfig | 17 + example/example.xcodeproj/project.pbxproj | 1141 +++++++++++++++++ .../xcschemes/example Debug.xcscheme | 86 ++ .../xcschemes/example Release.xcscheme | 86 ++ example/openFrameworks-Info.plist | 22 + 5 files changed, 1352 insertions(+) create mode 100644 example/Project.xcconfig create mode 100644 example/example.xcodeproj/project.pbxproj create mode 100644 example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme create mode 100644 example/example.xcodeproj/xcshareddata/xcschemes/example Release.xcscheme create mode 100644 example/openFrameworks-Info.plist diff --git a/example/Project.xcconfig b/example/Project.xcconfig new file mode 100644 index 0000000..c90f7b1 --- /dev/null +++ b/example/Project.xcconfig @@ -0,0 +1,17 @@ +//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. +//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED +OF_PATH = ../../.. + +//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE +#include "../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" + +//ICONS - NEW IN 0072 +ICON_NAME_DEBUG = icon-debug.icns +ICON_NAME_RELEASE = icon.icns +ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ + +//IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: +//ICON_FILE_PATH = bin/data/ + +OTHER_LDFLAGS = $(OF_CORE_LIBS) +HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) diff --git a/example/example.xcodeproj/project.pbxproj b/example/example.xcodeproj/project.pbxproj new file mode 100644 index 0000000..f1df4b8 --- /dev/null +++ b/example/example.xcodeproj/project.pbxproj @@ -0,0 +1,1141 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */; }; + 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483D192224F90008A7F5 /* tinyxml.cpp */; }; + 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */; }; + 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39264840192224F90008A7F5 /* tinyxmlparser.cpp */; }; + 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */; }; + 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */; }; + 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */; }; + 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */; }; + 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */; }; + 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */; }; + 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */; }; + 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */; }; + 39C1243319EE9589005DF557 /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 39C123EA19EE9589005DF557 /* lz4.c */; }; + 39C1243419EE9589005DF557 /* Base64Encoding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241219EE9589005DF557 /* Base64Encoding.cpp */; }; + 39C1243519EE9589005DF557 /* ByteBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241319EE9589005DF557 /* ByteBuffer.cpp */; }; + 39C1243619EE9589005DF557 /* ByteBufferReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241419EE9589005DF557 /* ByteBufferReader.cpp */; }; + 39C1243719EE9589005DF557 /* ByteBufferUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241519EE9589005DF557 /* ByteBufferUtils.cpp */; }; + 39C1243819EE9589005DF557 /* ByteBufferWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241619EE9589005DF557 /* ByteBufferWriter.cpp */; }; + 39C1243919EE9589005DF557 /* COBSEncoding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241719EE9589005DF557 /* COBSEncoding.cpp */; }; + 39C1243A19EE9589005DF557 /* Compression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241819EE9589005DF557 /* Compression.cpp */; }; + 39C1243B19EE9589005DF557 /* DeviceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241919EE9589005DF557 /* DeviceFilter.cpp */; }; + 39C1243C19EE9589005DF557 /* DirectoryFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241A19EE9589005DF557 /* DirectoryFilter.cpp */; }; + 39C1243D19EE9589005DF557 /* DirectoryUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241B19EE9589005DF557 /* DirectoryUtils.cpp */; }; + 39C1243E19EE9589005DF557 /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241C19EE9589005DF557 /* DirectoryWatcher.cpp */; }; + 39C1243F19EE9589005DF557 /* DirectoryWatcherManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241D19EE9589005DF557 /* DirectoryWatcherManager.cpp */; }; + 39C1244019EE9589005DF557 /* FileExtensionFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241E19EE9589005DF557 /* FileExtensionFilter.cpp */; }; + 39C1244119EE9589005DF557 /* HexBinaryEncoding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241F19EE9589005DF557 /* HexBinaryEncoding.cpp */; }; + 39C1244219EE9589005DF557 /* HiddenFileFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1242019EE9589005DF557 /* HiddenFileFilter.cpp */; }; + 39C1244319EE9589005DF557 /* LinkFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1242119EE9589005DF557 /* LinkFilter.cpp */; }; + 39C1244419EE9589005DF557 /* PathFilterCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1242219EE9589005DF557 /* PathFilterCollection.cpp */; }; + 39C1244519EE9589005DF557 /* RecursiveDirectoryIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1242319EE9589005DF557 /* RecursiveDirectoryIterator.cpp */; }; + 39C1244619EE9589005DF557 /* RecursiveDirectoryIteratorStategies.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1242419EE9589005DF557 /* RecursiveDirectoryIteratorStategies.cpp */; }; + 39C1244719EE9589005DF557 /* RegexPathFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1242519EE9589005DF557 /* RegexPathFilter.cpp */; }; + 39C1244819EE9589005DF557 /* SearchPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1242619EE9589005DF557 /* SearchPath.cpp */; }; + 39C1244919EE9589005DF557 /* snappy-sinksource.cc in Sources */ = {isa = PBXBuildFile; fileRef = 39C1242A19EE9589005DF557 /* snappy-sinksource.cc */; }; + 39C1244A19EE9589005DF557 /* snappy-stubs-internal.cc in Sources */ = {isa = PBXBuildFile; fileRef = 39C1242C19EE9589005DF557 /* snappy-stubs-internal.cc */; }; + 39C1244B19EE9589005DF557 /* snappy.cc in Sources */ = {isa = PBXBuildFile; fileRef = 39C1242F19EE9589005DF557 /* snappy.cc */; }; + 39C1245119EE95DD005DF557 /* DirectoryWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1244D19EE95DD005DF557 /* DirectoryWatcher.cpp */; }; + 39C1245219EE95DD005DF557 /* MediaServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1244F19EE95DD005DF557 /* MediaServer.cpp */; }; + 39C1245919F086A9005DF557 /* BaseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1245719F086A9005DF557 /* BaseSource.cpp */; }; + 39C1245E19F08965005DF557 /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1245A19F08965005DF557 /* ImageSource.cpp */; }; + 39C1245F19F08965005DF557 /* VideoSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1245C19F08965005DF557 /* VideoSource.cpp */; }; + 39C1246919F0AB96005DF557 /* BaseSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1246319F0AB96005DF557 /* BaseSurface.cpp */; }; + 39C1246A19F0AB96005DF557 /* QuadSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1246519F0AB96005DF557 /* QuadSurface.cpp */; }; + 39C1246B19F0AB96005DF557 /* TriangleSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1246719F0AB96005DF557 /* TriangleSurface.cpp */; }; + 39C1247C19F187D5005DF557 /* BaseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1246E19F187D5005DF557 /* BaseJoint.cpp */; }; + 39C1247D19F187D5005DF557 /* CircleJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1247019F187D5005DF557 /* CircleJoint.cpp */; }; + 39C1247E19F187D5005DF557 /* ProjectionEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1247419F187D5005DF557 /* ProjectionEditor.cpp */; }; + 39C1247F19F187D5005DF557 /* RadioList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1247619F187D5005DF557 /* RadioList.cpp */; }; + 39C1248019F187D5005DF557 /* SourcesEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1247819F187D5005DF557 /* SourcesEditor.cpp */; }; + 39C1248119F187D5005DF557 /* TextureEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1247A19F187D5005DF557 /* TextureEditor.cpp */; }; + 39C1248819F1EB75005DF557 /* SurfaceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1248319F1EB75005DF557 /* SurfaceManager.cpp */; }; + 39C1248919F1EB75005DF557 /* SurfaceManagerGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1248519F1EB75005DF557 /* SurfaceManagerGui.cpp */; }; + BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; + E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; + E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9710E8CC7DD009D7055 /* AGL.framework */; }; + E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */; }; + E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */; }; + E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */; }; + E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */; }; + E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9770E8CC7DD009D7055 /* CoreServices.framework */; }; + E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE9790E8CC7DD009D7055 /* OpenGL.framework */; }; + E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */; }; + E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; + E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */; }; + E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424410CC5A17004149E2 /* AppKit.framework */; }; + E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424510CC5A17004149E2 /* Cocoa.framework */; }; + E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4C2424610CC5A17004149E2 /* IOKit.framework */; }; + E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBAB23BE13894E4700AA2426 /* GLUT.framework */; }; + E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */; }; + E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7E077E715D3B6510020DFD4 /* QTKit.framework */; }; + E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7F985F515E0DE99003869B5 /* Accelerate.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E4B27C1510CBEB8E00536013; + remoteInfo = openFrameworks; + }; + E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = E4B27C1410CBEB8E00536013; + remoteInfo = openFrameworks; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + E4C2427710CC5ABF004149E2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + BBAB23CB13894F3D00AA2426 /* GLUT.framework in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ofxXmlSettings.cpp; path = ../../ofxXmlSettings/src/ofxXmlSettings.cpp; sourceTree = ""; }; + 3926483A192224DA0008A7F5 /* ofxXmlSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ofxXmlSettings.h; path = ../../ofxXmlSettings/src/ofxXmlSettings.h; sourceTree = ""; }; + 3926483D192224F90008A7F5 /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = ""; }; + 3926483E192224F90008A7F5 /* tinyxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyxml.h; sourceTree = ""; }; + 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlerror.cpp; sourceTree = ""; }; + 39264840192224F90008A7F5 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlparser.cpp; sourceTree = ""; }; + 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxBaseGui.cpp; sourceTree = ""; }; + 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxBaseGui.h; sourceTree = ""; }; + 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxButton.cpp; sourceTree = ""; }; + 3933D5C519BB87BD000ACA55 /* ofxButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxButton.h; sourceTree = ""; }; + 3933D5C619BB87BD000ACA55 /* ofxGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGui.h; sourceTree = ""; }; + 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxGuiGroup.cpp; sourceTree = ""; }; + 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxGuiGroup.h; sourceTree = ""; }; + 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxLabel.cpp; sourceTree = ""; }; + 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxLabel.h; sourceTree = ""; }; + 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPanel.cpp; sourceTree = ""; }; + 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPanel.h; sourceTree = ""; }; + 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSlider.cpp; sourceTree = ""; }; + 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSlider.h; sourceTree = ""; }; + 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxSliderGroup.cpp; sourceTree = ""; }; + 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxSliderGroup.h; sourceTree = ""; }; + 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; + 3933D5D219BB87BD000ACA55 /* ofxToggle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; + 39366FD519BDA95E006E5BE6 /* ofxPiMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; + 39C123E719EE9589005DF557 /* alphanum.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = alphanum.hpp; sourceTree = ""; }; + 39C123EA19EE9589005DF557 /* lz4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lz4.c; sourceTree = ""; }; + 39C123EB19EE9589005DF557 /* lz4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lz4.h; sourceTree = ""; }; + 39C123EF19EE9589005DF557 /* AbstractCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AbstractCache.h; sourceTree = ""; }; + 39C123F019EE9589005DF557 /* AccessExpireCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessExpireCache.h; sourceTree = ""; }; + 39C123F119EE9589005DF557 /* AccessExpireLRUCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessExpireLRUCache.h; sourceTree = ""; }; + 39C123F219EE9589005DF557 /* DirectoryWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; + 39C123F319EE9589005DF557 /* ExpireCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExpireCache.h; sourceTree = ""; }; + 39C123F419EE9589005DF557 /* ExpireLRUCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExpireLRUCache.h; sourceTree = ""; }; + 39C123F619EE9589005DF557 /* AbstractTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AbstractTypes.h; sourceTree = ""; }; + 39C123F719EE9589005DF557 /* Base64Encoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64Encoding.h; sourceTree = ""; }; + 39C123F819EE9589005DF557 /* ByteBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ByteBuffer.h; sourceTree = ""; }; + 39C123F919EE9589005DF557 /* ByteBufferReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ByteBufferReader.h; sourceTree = ""; }; + 39C123FA19EE9589005DF557 /* ByteBufferUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ByteBufferUtils.h; sourceTree = ""; }; + 39C123FB19EE9589005DF557 /* ByteBufferWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ByteBufferWriter.h; sourceTree = ""; }; + 39C123FC19EE9589005DF557 /* COBSEncoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = COBSEncoding.h; sourceTree = ""; }; + 39C123FD19EE9589005DF557 /* Compression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Compression.h; sourceTree = ""; }; + 39C123FE19EE9589005DF557 /* DeviceFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceFilter.h; sourceTree = ""; }; + 39C123FF19EE9589005DF557 /* DirectoryFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryFilter.h; sourceTree = ""; }; + 39C1240019EE9589005DF557 /* DirectoryUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryUtils.h; sourceTree = ""; }; + 39C1240119EE9589005DF557 /* DirectoryWatcherManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcherManager.h; sourceTree = ""; }; + 39C1240219EE9589005DF557 /* FileExtensionFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileExtensionFilter.h; sourceTree = ""; }; + 39C1240319EE9589005DF557 /* HexBinaryEncoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HexBinaryEncoding.h; sourceTree = ""; }; + 39C1240419EE9589005DF557 /* HiddenFileFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HiddenFileFilter.h; sourceTree = ""; }; + 39C1240519EE9589005DF557 /* LinkFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkFilter.h; sourceTree = ""; }; + 39C1240619EE9589005DF557 /* PathFilterCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathFilterCollection.h; sourceTree = ""; }; + 39C1240719EE9589005DF557 /* RegexPathFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegexPathFilter.h; sourceTree = ""; }; + 39C1240819EE9589005DF557 /* SearchPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchPath.h; sourceTree = ""; }; + 39C1240919EE9589005DF557 /* LRUCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LRUCache.h; sourceTree = ""; }; + 39C1240A19EE9589005DF557 /* RecursiveDirectoryIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecursiveDirectoryIterator.h; sourceTree = ""; }; + 39C1240B19EE9589005DF557 /* RecursiveDirectoryIteratorImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecursiveDirectoryIteratorImpl.h; sourceTree = ""; }; + 39C1240C19EE9589005DF557 /* RecursiveDirectoryIteratorStategies.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecursiveDirectoryIteratorStategies.h; sourceTree = ""; }; + 39C1240D19EE9589005DF557 /* UniqueAccessExpireCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniqueAccessExpireCache.h; sourceTree = ""; }; + 39C1240E19EE9589005DF557 /* UniqueAccessExpireLRUCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniqueAccessExpireLRUCache.h; sourceTree = ""; }; + 39C1240F19EE9589005DF557 /* UniqueExpireCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniqueExpireCache.h; sourceTree = ""; }; + 39C1241019EE9589005DF557 /* UniqueExpireLRUCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniqueExpireLRUCache.h; sourceTree = ""; }; + 39C1241219EE9589005DF557 /* Base64Encoding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Base64Encoding.cpp; sourceTree = ""; }; + 39C1241319EE9589005DF557 /* ByteBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ByteBuffer.cpp; sourceTree = ""; }; + 39C1241419EE9589005DF557 /* ByteBufferReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ByteBufferReader.cpp; sourceTree = ""; }; + 39C1241519EE9589005DF557 /* ByteBufferUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ByteBufferUtils.cpp; sourceTree = ""; }; + 39C1241619EE9589005DF557 /* ByteBufferWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ByteBufferWriter.cpp; sourceTree = ""; }; + 39C1241719EE9589005DF557 /* COBSEncoding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = COBSEncoding.cpp; sourceTree = ""; }; + 39C1241819EE9589005DF557 /* Compression.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Compression.cpp; sourceTree = ""; }; + 39C1241919EE9589005DF557 /* DeviceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeviceFilter.cpp; sourceTree = ""; }; + 39C1241A19EE9589005DF557 /* DirectoryFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryFilter.cpp; sourceTree = ""; }; + 39C1241B19EE9589005DF557 /* DirectoryUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryUtils.cpp; sourceTree = ""; }; + 39C1241C19EE9589005DF557 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; + 39C1241D19EE9589005DF557 /* DirectoryWatcherManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcherManager.cpp; sourceTree = ""; }; + 39C1241E19EE9589005DF557 /* FileExtensionFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileExtensionFilter.cpp; sourceTree = ""; }; + 39C1241F19EE9589005DF557 /* HexBinaryEncoding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HexBinaryEncoding.cpp; sourceTree = ""; }; + 39C1242019EE9589005DF557 /* HiddenFileFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HiddenFileFilter.cpp; sourceTree = ""; }; + 39C1242119EE9589005DF557 /* LinkFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LinkFilter.cpp; sourceTree = ""; }; + 39C1242219EE9589005DF557 /* PathFilterCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathFilterCollection.cpp; sourceTree = ""; }; + 39C1242319EE9589005DF557 /* RecursiveDirectoryIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RecursiveDirectoryIterator.cpp; sourceTree = ""; }; + 39C1242419EE9589005DF557 /* RecursiveDirectoryIteratorStategies.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RecursiveDirectoryIteratorStategies.cpp; sourceTree = ""; }; + 39C1242519EE9589005DF557 /* RegexPathFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegexPathFilter.cpp; sourceTree = ""; }; + 39C1242619EE9589005DF557 /* SearchPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SearchPath.cpp; sourceTree = ""; }; + 39C1242919EE9589005DF557 /* snappy-internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "snappy-internal.h"; sourceTree = ""; }; + 39C1242A19EE9589005DF557 /* snappy-sinksource.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "snappy-sinksource.cc"; sourceTree = ""; }; + 39C1242B19EE9589005DF557 /* snappy-sinksource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "snappy-sinksource.h"; sourceTree = ""; }; + 39C1242C19EE9589005DF557 /* snappy-stubs-internal.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "snappy-stubs-internal.cc"; sourceTree = ""; }; + 39C1242D19EE9589005DF557 /* snappy-stubs-internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "snappy-stubs-internal.h"; sourceTree = ""; }; + 39C1242E19EE9589005DF557 /* snappy-stubs-public.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "snappy-stubs-public.h"; sourceTree = ""; }; + 39C1242F19EE9589005DF557 /* snappy.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = snappy.cc; sourceTree = ""; }; + 39C1243019EE9589005DF557 /* snappy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = snappy.h; sourceTree = ""; }; + 39C1243219EE9589005DF557 /* ofxIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxIO.h; sourceTree = ""; }; + 39C1244D19EE95DD005DF557 /* DirectoryWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DirectoryWatcher.cpp; sourceTree = ""; }; + 39C1244E19EE95DD005DF557 /* DirectoryWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirectoryWatcher.h; sourceTree = ""; }; + 39C1244F19EE95DD005DF557 /* MediaServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaServer.cpp; sourceTree = ""; }; + 39C1245019EE95DD005DF557 /* MediaServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaServer.h; sourceTree = ""; }; + 39C1245719F086A9005DF557 /* BaseSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSource.cpp; sourceTree = ""; }; + 39C1245819F086A9005DF557 /* BaseSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSource.h; sourceTree = ""; }; + 39C1245A19F08965005DF557 /* ImageSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSource.cpp; sourceTree = ""; }; + 39C1245B19F08965005DF557 /* ImageSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageSource.h; sourceTree = ""; }; + 39C1245C19F08965005DF557 /* VideoSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VideoSource.cpp; sourceTree = ""; }; + 39C1245D19F08965005DF557 /* VideoSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoSource.h; sourceTree = ""; }; + 39C1246019F089DA005DF557 /* SourceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceType.h; sourceTree = ""; }; + 39C1246319F0AB96005DF557 /* BaseSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseSurface.cpp; sourceTree = ""; }; + 39C1246419F0AB96005DF557 /* BaseSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseSurface.h; sourceTree = ""; }; + 39C1246519F0AB96005DF557 /* QuadSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = QuadSurface.cpp; sourceTree = ""; }; + 39C1246619F0AB96005DF557 /* QuadSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuadSurface.h; sourceTree = ""; }; + 39C1246719F0AB96005DF557 /* TriangleSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TriangleSurface.cpp; sourceTree = ""; }; + 39C1246819F0AB96005DF557 /* TriangleSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TriangleSurface.h; sourceTree = ""; }; + 39C1246E19F187D5005DF557 /* BaseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseJoint.cpp; sourceTree = ""; }; + 39C1246F19F187D5005DF557 /* BaseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseJoint.h; sourceTree = ""; }; + 39C1247019F187D5005DF557 /* CircleJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleJoint.cpp; sourceTree = ""; }; + 39C1247119F187D5005DF557 /* CircleJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleJoint.h; sourceTree = ""; }; + 39C1247219F187D5005DF557 /* EditorType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditorType.h; sourceTree = ""; }; + 39C1247319F187D5005DF557 /* GuiMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GuiMode.h; sourceTree = ""; }; + 39C1247419F187D5005DF557 /* ProjectionEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProjectionEditor.cpp; sourceTree = ""; }; + 39C1247519F187D5005DF557 /* ProjectionEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProjectionEditor.h; sourceTree = ""; }; + 39C1247619F187D5005DF557 /* RadioList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RadioList.cpp; sourceTree = ""; }; + 39C1247719F187D5005DF557 /* RadioList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RadioList.h; sourceTree = ""; }; + 39C1247819F187D5005DF557 /* SourcesEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourcesEditor.cpp; sourceTree = ""; }; + 39C1247919F187D5005DF557 /* SourcesEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourcesEditor.h; sourceTree = ""; }; + 39C1247A19F187D5005DF557 /* TextureEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureEditor.cpp; sourceTree = ""; }; + 39C1247B19F187D5005DF557 /* TextureEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureEditor.h; sourceTree = ""; }; + 39C1248319F1EB75005DF557 /* SurfaceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManager.cpp; sourceTree = ""; }; + 39C1248419F1EB75005DF557 /* SurfaceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceManager.h; sourceTree = ""; }; + 39C1248519F1EB75005DF557 /* SurfaceManagerGui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SurfaceManagerGui.cpp; sourceTree = ""; }; + 39C1248619F1EB75005DF557 /* SurfaceManagerGui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceManagerGui.h; sourceTree = ""; }; + 39C1248719F1EB75005DF557 /* SurfaceType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SurfaceType.h; sourceTree = ""; }; + BBAB23BE13894E4700AA2426 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = ../../../libs/glut/lib/osx/GLUT.framework; sourceTree = ""; }; + E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; + E45BE9710E8CC7DD009D7055 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; + E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; + E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; + E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; + E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + E45BE9770E8CC7DD009D7055 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; + E45BE9790E8CC7DD009D7055 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; }; + E4B69B5B0A3A1756003C02F2 /* exampleDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = exampleDebug.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; }; + E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofApp.cpp; path = src/ofApp.cpp; sourceTree = SOURCE_ROOT; }; + E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ofApp.h; path = src/ofApp.h; sourceTree = SOURCE_ROOT; }; + E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = ""; }; + E4C2424410CC5A17004149E2 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + E4C2424510CC5A17004149E2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + E4C2424610CC5A17004149E2 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; }; + E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = ""; }; + E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = /System/Library/Frameworks/CoreVideo.framework; sourceTree = ""; }; + E7E077E715D3B6510020DFD4 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = ""; }; + E7F985F515E0DE99003869B5 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E4B69B590A3A1756003C02F2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E7F985F815E0DEA3003869B5 /* Accelerate.framework in Frameworks */, + E7E077E815D3B6510020DFD4 /* QTKit.framework in Frameworks */, + E4EB6799138ADC1D00A09F29 /* GLUT.framework in Frameworks */, + E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */, + E45BE97B0E8CC7DD009D7055 /* AGL.framework in Frameworks */, + E45BE97C0E8CC7DD009D7055 /* ApplicationServices.framework in Frameworks */, + E45BE97D0E8CC7DD009D7055 /* AudioToolbox.framework in Frameworks */, + E45BE97F0E8CC7DD009D7055 /* CoreAudio.framework in Frameworks */, + E45BE9800E8CC7DD009D7055 /* CoreFoundation.framework in Frameworks */, + E45BE9810E8CC7DD009D7055 /* CoreServices.framework in Frameworks */, + E45BE9830E8CC7DD009D7055 /* OpenGL.framework in Frameworks */, + E45BE9840E8CC7DD009D7055 /* QuickTime.framework in Frameworks */, + E4C2424710CC5A17004149E2 /* AppKit.framework in Frameworks */, + E4C2424810CC5A17004149E2 /* Cocoa.framework in Frameworks */, + E4C2424910CC5A17004149E2 /* IOKit.framework in Frameworks */, + E7E077E515D3B63C0020DFD4 /* CoreVideo.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 39264837192224C20008A7F5 /* ofxXmlSettings */ = { + isa = PBXGroup; + children = ( + 3926483C192224F90008A7F5 /* libs */, + 39264838192224CA0008A7F5 /* src */, + ); + name = ofxXmlSettings; + sourceTree = ""; + }; + 39264838192224CA0008A7F5 /* src */ = { + isa = PBXGroup; + children = ( + 39264839192224DA0008A7F5 /* ofxXmlSettings.cpp */, + 3926483A192224DA0008A7F5 /* ofxXmlSettings.h */, + ); + name = src; + sourceTree = ""; + }; + 3926483C192224F90008A7F5 /* libs */ = { + isa = PBXGroup; + children = ( + 3926483D192224F90008A7F5 /* tinyxml.cpp */, + 3926483E192224F90008A7F5 /* tinyxml.h */, + 3926483F192224F90008A7F5 /* tinyxmlerror.cpp */, + 39264840192224F90008A7F5 /* tinyxmlparser.cpp */, + ); + name = libs; + path = ../../ofxXmlSettings/libs; + sourceTree = ""; + }; + 3933D5C019BB87A3000ACA55 /* ofxGui */ = { + isa = PBXGroup; + children = ( + 3933D5C119BB87BD000ACA55 /* src */, + ); + name = ofxGui; + sourceTree = ""; + }; + 3933D5C119BB87BD000ACA55 /* src */ = { + isa = PBXGroup; + children = ( + 3933D5C219BB87BD000ACA55 /* ofxBaseGui.cpp */, + 3933D5C319BB87BD000ACA55 /* ofxBaseGui.h */, + 3933D5C419BB87BD000ACA55 /* ofxButton.cpp */, + 3933D5C519BB87BD000ACA55 /* ofxButton.h */, + 3933D5C619BB87BD000ACA55 /* ofxGui.h */, + 3933D5C719BB87BD000ACA55 /* ofxGuiGroup.cpp */, + 3933D5C819BB87BD000ACA55 /* ofxGuiGroup.h */, + 3933D5C919BB87BD000ACA55 /* ofxLabel.cpp */, + 3933D5CA19BB87BD000ACA55 /* ofxLabel.h */, + 3933D5CB19BB87BD000ACA55 /* ofxPanel.cpp */, + 3933D5CC19BB87BD000ACA55 /* ofxPanel.h */, + 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */, + 3933D5CE19BB87BD000ACA55 /* ofxSlider.h */, + 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */, + 3933D5D019BB87BD000ACA55 /* ofxSliderGroup.h */, + 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */, + 3933D5D219BB87BD000ACA55 /* ofxToggle.h */, + ); + name = src; + path = ../../ofxGui/src; + sourceTree = ""; + }; + 396E8A2F190FEDD900705899 /* src */ = { + isa = PBXGroup; + children = ( + 39C1246D19F187D5005DF557 /* UserInterface */, + 39C1246219F0AB96005DF557 /* Surfaces */, + 39C1245619F086A9005DF557 /* Sources */, + 39C1244C19EE95DD005DF557 /* MediaServer */, + 39366FD519BDA95E006E5BE6 /* ofxPiMapper.h */, + ); + name = src; + path = ../src; + sourceTree = ""; + }; + 396E8A34190FEDE500705899 /* ofxPiMapper */ = { + isa = PBXGroup; + children = ( + 396E8A2F190FEDD900705899 /* src */, + ); + name = ofxPiMapper; + sourceTree = ""; + }; + 39C123E319EE9576005DF557 /* ofxIO */ = { + isa = PBXGroup; + children = ( + 39C123E419EE9589005DF557 /* libs */, + 39C1243119EE9589005DF557 /* src */, + ); + name = ofxIO; + sourceTree = ""; + }; + 39C123E419EE9589005DF557 /* libs */ = { + isa = PBXGroup; + children = ( + 39C123E519EE9589005DF557 /* alphanum */, + 39C123E819EE9589005DF557 /* lz4 */, + 39C123EC19EE9589005DF557 /* ofxIO */, + 39C1242719EE9589005DF557 /* snappy */, + ); + name = libs; + path = ../../ofxIO/libs; + sourceTree = ""; + }; + 39C123E519EE9589005DF557 /* alphanum */ = { + isa = PBXGroup; + children = ( + 39C123E619EE9589005DF557 /* include */, + ); + path = alphanum; + sourceTree = ""; + }; + 39C123E619EE9589005DF557 /* include */ = { + isa = PBXGroup; + children = ( + 39C123E719EE9589005DF557 /* alphanum.hpp */, + ); + path = include; + sourceTree = ""; + }; + 39C123E819EE9589005DF557 /* lz4 */ = { + isa = PBXGroup; + children = ( + 39C123E919EE9589005DF557 /* src */, + ); + path = lz4; + sourceTree = ""; + }; + 39C123E919EE9589005DF557 /* src */ = { + isa = PBXGroup; + children = ( + 39C123EA19EE9589005DF557 /* lz4.c */, + 39C123EB19EE9589005DF557 /* lz4.h */, + ); + path = src; + sourceTree = ""; + }; + 39C123EC19EE9589005DF557 /* ofxIO */ = { + isa = PBXGroup; + children = ( + 39C123ED19EE9589005DF557 /* include */, + 39C1241119EE9589005DF557 /* src */, + ); + path = ofxIO; + sourceTree = ""; + }; + 39C123ED19EE9589005DF557 /* include */ = { + isa = PBXGroup; + children = ( + 39C123EE19EE9589005DF557 /* ofx */, + ); + path = include; + sourceTree = ""; + }; + 39C123EE19EE9589005DF557 /* ofx */ = { + isa = PBXGroup; + children = ( + 39C123EF19EE9589005DF557 /* AbstractCache.h */, + 39C123F019EE9589005DF557 /* AccessExpireCache.h */, + 39C123F119EE9589005DF557 /* AccessExpireLRUCache.h */, + 39C123F219EE9589005DF557 /* DirectoryWatcher.h */, + 39C123F319EE9589005DF557 /* ExpireCache.h */, + 39C123F419EE9589005DF557 /* ExpireLRUCache.h */, + 39C123F519EE9589005DF557 /* IO */, + 39C1240919EE9589005DF557 /* LRUCache.h */, + 39C1240A19EE9589005DF557 /* RecursiveDirectoryIterator.h */, + 39C1240B19EE9589005DF557 /* RecursiveDirectoryIteratorImpl.h */, + 39C1240C19EE9589005DF557 /* RecursiveDirectoryIteratorStategies.h */, + 39C1240D19EE9589005DF557 /* UniqueAccessExpireCache.h */, + 39C1240E19EE9589005DF557 /* UniqueAccessExpireLRUCache.h */, + 39C1240F19EE9589005DF557 /* UniqueExpireCache.h */, + 39C1241019EE9589005DF557 /* UniqueExpireLRUCache.h */, + ); + path = ofx; + sourceTree = ""; + }; + 39C123F519EE9589005DF557 /* IO */ = { + isa = PBXGroup; + children = ( + 39C123F619EE9589005DF557 /* AbstractTypes.h */, + 39C123F719EE9589005DF557 /* Base64Encoding.h */, + 39C123F819EE9589005DF557 /* ByteBuffer.h */, + 39C123F919EE9589005DF557 /* ByteBufferReader.h */, + 39C123FA19EE9589005DF557 /* ByteBufferUtils.h */, + 39C123FB19EE9589005DF557 /* ByteBufferWriter.h */, + 39C123FC19EE9589005DF557 /* COBSEncoding.h */, + 39C123FD19EE9589005DF557 /* Compression.h */, + 39C123FE19EE9589005DF557 /* DeviceFilter.h */, + 39C123FF19EE9589005DF557 /* DirectoryFilter.h */, + 39C1240019EE9589005DF557 /* DirectoryUtils.h */, + 39C1240119EE9589005DF557 /* DirectoryWatcherManager.h */, + 39C1240219EE9589005DF557 /* FileExtensionFilter.h */, + 39C1240319EE9589005DF557 /* HexBinaryEncoding.h */, + 39C1240419EE9589005DF557 /* HiddenFileFilter.h */, + 39C1240519EE9589005DF557 /* LinkFilter.h */, + 39C1240619EE9589005DF557 /* PathFilterCollection.h */, + 39C1240719EE9589005DF557 /* RegexPathFilter.h */, + 39C1240819EE9589005DF557 /* SearchPath.h */, + ); + path = IO; + sourceTree = ""; + }; + 39C1241119EE9589005DF557 /* src */ = { + isa = PBXGroup; + children = ( + 39C1241219EE9589005DF557 /* Base64Encoding.cpp */, + 39C1241319EE9589005DF557 /* ByteBuffer.cpp */, + 39C1241419EE9589005DF557 /* ByteBufferReader.cpp */, + 39C1241519EE9589005DF557 /* ByteBufferUtils.cpp */, + 39C1241619EE9589005DF557 /* ByteBufferWriter.cpp */, + 39C1241719EE9589005DF557 /* COBSEncoding.cpp */, + 39C1241819EE9589005DF557 /* Compression.cpp */, + 39C1241919EE9589005DF557 /* DeviceFilter.cpp */, + 39C1241A19EE9589005DF557 /* DirectoryFilter.cpp */, + 39C1241B19EE9589005DF557 /* DirectoryUtils.cpp */, + 39C1241C19EE9589005DF557 /* DirectoryWatcher.cpp */, + 39C1241D19EE9589005DF557 /* DirectoryWatcherManager.cpp */, + 39C1241E19EE9589005DF557 /* FileExtensionFilter.cpp */, + 39C1241F19EE9589005DF557 /* HexBinaryEncoding.cpp */, + 39C1242019EE9589005DF557 /* HiddenFileFilter.cpp */, + 39C1242119EE9589005DF557 /* LinkFilter.cpp */, + 39C1242219EE9589005DF557 /* PathFilterCollection.cpp */, + 39C1242319EE9589005DF557 /* RecursiveDirectoryIterator.cpp */, + 39C1242419EE9589005DF557 /* RecursiveDirectoryIteratorStategies.cpp */, + 39C1242519EE9589005DF557 /* RegexPathFilter.cpp */, + 39C1242619EE9589005DF557 /* SearchPath.cpp */, + ); + path = src; + sourceTree = ""; + }; + 39C1242719EE9589005DF557 /* snappy */ = { + isa = PBXGroup; + children = ( + 39C1242819EE9589005DF557 /* src */, + ); + path = snappy; + sourceTree = ""; + }; + 39C1242819EE9589005DF557 /* src */ = { + isa = PBXGroup; + children = ( + 39C1242919EE9589005DF557 /* snappy-internal.h */, + 39C1242A19EE9589005DF557 /* snappy-sinksource.cc */, + 39C1242B19EE9589005DF557 /* snappy-sinksource.h */, + 39C1242C19EE9589005DF557 /* snappy-stubs-internal.cc */, + 39C1242D19EE9589005DF557 /* snappy-stubs-internal.h */, + 39C1242E19EE9589005DF557 /* snappy-stubs-public.h */, + 39C1242F19EE9589005DF557 /* snappy.cc */, + 39C1243019EE9589005DF557 /* snappy.h */, + ); + path = src; + sourceTree = ""; + }; + 39C1243119EE9589005DF557 /* src */ = { + isa = PBXGroup; + children = ( + 39C1243219EE9589005DF557 /* ofxIO.h */, + ); + name = src; + path = ../../ofxIO/src; + sourceTree = ""; + }; + 39C1244C19EE95DD005DF557 /* MediaServer */ = { + isa = PBXGroup; + children = ( + 39C1244D19EE95DD005DF557 /* DirectoryWatcher.cpp */, + 39C1244E19EE95DD005DF557 /* DirectoryWatcher.h */, + 39C1244F19EE95DD005DF557 /* MediaServer.cpp */, + 39C1245019EE95DD005DF557 /* MediaServer.h */, + ); + path = MediaServer; + sourceTree = ""; + }; + 39C1245619F086A9005DF557 /* Sources */ = { + isa = PBXGroup; + children = ( + 39C1246019F089DA005DF557 /* SourceType.h */, + 39C1245719F086A9005DF557 /* BaseSource.cpp */, + 39C1245819F086A9005DF557 /* BaseSource.h */, + 39C1245A19F08965005DF557 /* ImageSource.cpp */, + 39C1245B19F08965005DF557 /* ImageSource.h */, + 39C1245C19F08965005DF557 /* VideoSource.cpp */, + 39C1245D19F08965005DF557 /* VideoSource.h */, + ); + path = Sources; + sourceTree = ""; + }; + 39C1246219F0AB96005DF557 /* Surfaces */ = { + isa = PBXGroup; + children = ( + 39C1248319F1EB75005DF557 /* SurfaceManager.cpp */, + 39C1248419F1EB75005DF557 /* SurfaceManager.h */, + 39C1248519F1EB75005DF557 /* SurfaceManagerGui.cpp */, + 39C1248619F1EB75005DF557 /* SurfaceManagerGui.h */, + 39C1248719F1EB75005DF557 /* SurfaceType.h */, + 39C1246319F0AB96005DF557 /* BaseSurface.cpp */, + 39C1246419F0AB96005DF557 /* BaseSurface.h */, + 39C1246519F0AB96005DF557 /* QuadSurface.cpp */, + 39C1246619F0AB96005DF557 /* QuadSurface.h */, + 39C1246719F0AB96005DF557 /* TriangleSurface.cpp */, + 39C1246819F0AB96005DF557 /* TriangleSurface.h */, + ); + path = Surfaces; + sourceTree = ""; + }; + 39C1246D19F187D5005DF557 /* UserInterface */ = { + isa = PBXGroup; + children = ( + 39C1246E19F187D5005DF557 /* BaseJoint.cpp */, + 39C1246F19F187D5005DF557 /* BaseJoint.h */, + 39C1247019F187D5005DF557 /* CircleJoint.cpp */, + 39C1247119F187D5005DF557 /* CircleJoint.h */, + 39C1247219F187D5005DF557 /* EditorType.h */, + 39C1247319F187D5005DF557 /* GuiMode.h */, + 39C1247419F187D5005DF557 /* ProjectionEditor.cpp */, + 39C1247519F187D5005DF557 /* ProjectionEditor.h */, + 39C1247619F187D5005DF557 /* RadioList.cpp */, + 39C1247719F187D5005DF557 /* RadioList.h */, + 39C1247819F187D5005DF557 /* SourcesEditor.cpp */, + 39C1247919F187D5005DF557 /* SourcesEditor.h */, + 39C1247A19F187D5005DF557 /* TextureEditor.cpp */, + 39C1247B19F187D5005DF557 /* TextureEditor.h */, + ); + path = UserInterface; + sourceTree = ""; + }; + BB4B014C10F69532006C3DED /* addons */ = { + isa = PBXGroup; + children = ( + 39C123E319EE9576005DF557 /* ofxIO */, + 3933D5C019BB87A3000ACA55 /* ofxGui */, + 39264837192224C20008A7F5 /* ofxXmlSettings */, + 396E8A34190FEDE500705899 /* ofxPiMapper */, + ); + name = addons; + sourceTree = ""; + }; + BBAB23C913894ECA00AA2426 /* system frameworks */ = { + isa = PBXGroup; + children = ( + E7F985F515E0DE99003869B5 /* Accelerate.framework */, + E4C2424410CC5A17004149E2 /* AppKit.framework */, + E4C2424510CC5A17004149E2 /* Cocoa.framework */, + E4C2424610CC5A17004149E2 /* IOKit.framework */, + E45BE9710E8CC7DD009D7055 /* AGL.framework */, + E45BE9720E8CC7DD009D7055 /* ApplicationServices.framework */, + E45BE9730E8CC7DD009D7055 /* AudioToolbox.framework */, + E45BE9750E8CC7DD009D7055 /* CoreAudio.framework */, + E45BE9760E8CC7DD009D7055 /* CoreFoundation.framework */, + E45BE9770E8CC7DD009D7055 /* CoreServices.framework */, + E45BE9790E8CC7DD009D7055 /* OpenGL.framework */, + E45BE97A0E8CC7DD009D7055 /* QuickTime.framework */, + E7E077E415D3B63C0020DFD4 /* CoreVideo.framework */, + E7E077E715D3B6510020DFD4 /* QTKit.framework */, + ); + name = "system frameworks"; + sourceTree = ""; + }; + BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */ = { + isa = PBXGroup; + children = ( + BBAB23BE13894E4700AA2426 /* GLUT.framework */, + ); + name = "3rd party frameworks"; + sourceTree = ""; + }; + E4328144138ABC890047C5CB /* Products */ = { + isa = PBXGroup; + children = ( + E4328148138ABC890047C5CB /* openFrameworksDebug.a */, + ); + name = Products; + sourceTree = ""; + }; + E45BE5980E8CC70C009D7055 /* frameworks */ = { + isa = PBXGroup; + children = ( + BBAB23CA13894EDB00AA2426 /* 3rd party frameworks */, + BBAB23C913894ECA00AA2426 /* system frameworks */, + ); + name = frameworks; + sourceTree = ""; + }; + E4B69B4A0A3A1720003C02F2 = { + isa = PBXGroup; + children = ( + E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */, + E4EB6923138AFD0F00A09F29 /* Project.xcconfig */, + E4B69E1C0A3A1BDC003C02F2 /* src */, + E4EEC9E9138DF44700A80321 /* openFrameworks */, + BB4B014C10F69532006C3DED /* addons */, + E45BE5980E8CC70C009D7055 /* frameworks */, + E4B69B5B0A3A1756003C02F2 /* exampleDebug.app */, + ); + sourceTree = ""; + }; + E4B69E1C0A3A1BDC003C02F2 /* src */ = { + isa = PBXGroup; + children = ( + E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, + E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */, + E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */, + ); + path = src; + sourceTree = SOURCE_ROOT; + }; + E4EEC9E9138DF44700A80321 /* openFrameworks */ = { + isa = PBXGroup; + children = ( + E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */, + E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */, + ); + name = openFrameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E4B69B5A0A3A1756003C02F2 /* example */ = { + isa = PBXNativeTarget; + buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "example" */; + buildPhases = ( + E4B69B580A3A1756003C02F2 /* Sources */, + E4B69B590A3A1756003C02F2 /* Frameworks */, + E4B6FFFD0C3F9AB9008CF71C /* ShellScript */, + E4C2427710CC5ABF004149E2 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + E4EEB9AC138B136A00A80321 /* PBXTargetDependency */, + ); + name = example; + productName = myOFApp; + productReference = E4B69B5B0A3A1756003C02F2 /* exampleDebug.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E4B69B4C0A3A1720003C02F2 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0460; + }; + buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "example" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = E4B69B4A0A3A1720003C02F2; + productRefGroup = E4B69B4A0A3A1720003C02F2; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = E4328144138ABC890047C5CB /* Products */; + ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + E4B69B5A0A3A1756003C02F2 /* example */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = openFrameworksDebug.a; + remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXShellScriptBuildPhase section */ + E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cp -f ../../../libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/libfmodex.dylib\"; install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\nmkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\ncp -f \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E4B69B580A3A1756003C02F2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */, + 39C1247E19F187D5005DF557 /* ProjectionEditor.cpp in Sources */, + 39C1244619EE9589005DF557 /* RecursiveDirectoryIteratorStategies.cpp in Sources */, + 39C1243A19EE9589005DF557 /* Compression.cpp in Sources */, + 39C1248919F1EB75005DF557 /* SurfaceManagerGui.cpp in Sources */, + 39C1243719EE9589005DF557 /* ByteBufferUtils.cpp in Sources */, + 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */, + 3933D5D319BB87BD000ACA55 /* ofxBaseGui.cpp in Sources */, + 39C1243C19EE9589005DF557 /* DirectoryFilter.cpp in Sources */, + 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */, + 39C1243619EE9589005DF557 /* ByteBufferReader.cpp in Sources */, + 39C1246A19F0AB96005DF557 /* QuadSurface.cpp in Sources */, + 39C1247F19F187D5005DF557 /* RadioList.cpp in Sources */, + 39C1243419EE9589005DF557 /* Base64Encoding.cpp in Sources */, + E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, + 39C1244719EE9589005DF557 /* RegexPathFilter.cpp in Sources */, + 39C1247C19F187D5005DF557 /* BaseJoint.cpp in Sources */, + 39C1245219EE95DD005DF557 /* MediaServer.cpp in Sources */, + 39C1243D19EE9589005DF557 /* DirectoryUtils.cpp in Sources */, + 39264843192224F90008A7F5 /* tinyxmlparser.cpp in Sources */, + 3933D5D419BB87BD000ACA55 /* ofxButton.cpp in Sources */, + 39C1244519EE9589005DF557 /* RecursiveDirectoryIterator.cpp in Sources */, + 39C1243919EE9589005DF557 /* COBSEncoding.cpp in Sources */, + 39C1244919EE9589005DF557 /* snappy-sinksource.cc in Sources */, + 39C1248819F1EB75005DF557 /* SurfaceManager.cpp in Sources */, + 39C1244319EE9589005DF557 /* LinkFilter.cpp in Sources */, + 39C1245919F086A9005DF557 /* BaseSource.cpp in Sources */, + 39C1244019EE9589005DF557 /* FileExtensionFilter.cpp in Sources */, + 39264841192224F90008A7F5 /* tinyxml.cpp in Sources */, + 39C1246919F0AB96005DF557 /* BaseSurface.cpp in Sources */, + 39C1245E19F08965005DF557 /* ImageSource.cpp in Sources */, + 3933D5D619BB87BD000ACA55 /* ofxLabel.cpp in Sources */, + 39C1244A19EE9589005DF557 /* snappy-stubs-internal.cc in Sources */, + 39C1245F19F08965005DF557 /* VideoSource.cpp in Sources */, + 39C1244119EE9589005DF557 /* HexBinaryEncoding.cpp in Sources */, + 39C1244219EE9589005DF557 /* HiddenFileFilter.cpp in Sources */, + 39C1244819EE9589005DF557 /* SearchPath.cpp in Sources */, + 39C1248019F187D5005DF557 /* SourcesEditor.cpp in Sources */, + 39C1243F19EE9589005DF557 /* DirectoryWatcherManager.cpp in Sources */, + 39C1243519EE9589005DF557 /* ByteBuffer.cpp in Sources */, + 39C1246B19F0AB96005DF557 /* TriangleSurface.cpp in Sources */, + 39C1244419EE9589005DF557 /* PathFilterCollection.cpp in Sources */, + 39C1243319EE9589005DF557 /* lz4.c in Sources */, + 39C1243B19EE9589005DF557 /* DeviceFilter.cpp in Sources */, + 39C1243E19EE9589005DF557 /* DirectoryWatcher.cpp in Sources */, + 39C1248119F187D5005DF557 /* TextureEditor.cpp in Sources */, + E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, + 39C1244B19EE9589005DF557 /* snappy.cc in Sources */, + 3933D5D719BB87BD000ACA55 /* ofxPanel.cpp in Sources */, + 39C1247D19F187D5005DF557 /* CircleJoint.cpp in Sources */, + 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */, + 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */, + 39C1245119EE95DD005DF557 /* DirectoryWatcher.cpp in Sources */, + 39C1243819EE9589005DF557 /* ByteBufferWriter.cpp in Sources */, + 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = openFrameworks; + targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + E4B69B4E0A3A1720003C02F2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + ARCHS = "$(NATIVE_ARCH)"; + CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + src, + ); + MACOSX_DEPLOYMENT_TARGET = 10.6; + OTHER_CPLUSPLUSFLAGS = ( + "-D__MACOSX_CORE__", + "-lpthread", + "-mtune=native", + ); + SDKROOT = macosx; + }; + name = Debug; + }; + E4B69B4F0A3A1720003C02F2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + ARCHS = "$(NATIVE_ARCH)"; + CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; + COPY_PHASE_STRIP = YES; + DEAD_CODE_STRIPPING = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_UNROLL_LOOPS = YES; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + src, + ); + MACOSX_DEPLOYMENT_TARGET = 10.6; + OTHER_CPLUSPLUSFLAGS = ( + "-D__MACOSX_CORE__", + "-lpthread", + "-mtune=native", + ); + SDKROOT = macosx; + }; + name = Release; + }; + E4B69B600A3A1757003C02F2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + src, + ../../../addons/ofxIO/libs/ofxIO/include, + ); + ICON = "$(ICON_NAME_DEBUG)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_52)", + ); + PRODUCT_NAME = exampleDebug; + SDKROOT = macosx10.9; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + E4B69B610A3A1757003C02F2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../libs/glut/lib/osx\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + src, + ../../../addons/ofxIO/libs/ofxIO/include, + ); + ICON = "$(ICON_NAME_RELEASE)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + INSTALL_PATH = "$(HOME)/Applications"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_4)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_5)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_6)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_14)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_15)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_3)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_7)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_8)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_9)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_10)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_11)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_12)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_13)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_16)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_17)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_18)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_19)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_20)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_21)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_22)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_23)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_24)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_25)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_26)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_27)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_28)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_29)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_30)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_31)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_32)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_33)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_34)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_35)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_36)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_37)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_38)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_39)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_40)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_41)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_42)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_43)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_44)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_45)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_46)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_47)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_48)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_49)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_50)", + "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_51)", + ); + PRODUCT_NAME = example; + SDKROOT = macosx10.9; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4B69B4E0A3A1720003C02F2 /* Debug */, + E4B69B4F0A3A1720003C02F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4B69B600A3A1757003C02F2 /* Debug */, + E4B69B610A3A1757003C02F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */; +} diff --git a/example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme b/example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme new file mode 100644 index 0000000..988a673 --- /dev/null +++ b/example/example.xcodeproj/xcshareddata/xcschemes/example Debug.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/example.xcodeproj/xcshareddata/xcschemes/example Release.xcscheme b/example/example.xcodeproj/xcshareddata/xcschemes/example Release.xcscheme new file mode 100644 index 0000000..45d1617 --- /dev/null +++ b/example/example.xcodeproj/xcshareddata/xcschemes/example Release.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/openFrameworks-Info.plist b/example/openFrameworks-Info.plist new file mode 100644 index 0000000..8d64d2b --- /dev/null +++ b/example/openFrameworks-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + cc.openFrameworks.ofapp + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CFBundleIconFile + ${ICON} + + From 557899da1653af5e77733c7ca033e92e57bc5bfd Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Tue, 4 Nov 2014 13:20:20 +0100 Subject: [PATCH 04/13] Make ofxPiMapper usable as one single object. Update example. --- example/example.xcodeproj/project.pbxproj | 4 + example/src/ofApp.cpp | 161 ++-------------------- example/src/ofApp.h | 16 +-- src/ofxPiMapper.cpp | 158 +++++++++++++++++++++ src/ofxPiMapper.h | 34 ++++- 5 files changed, 211 insertions(+), 162 deletions(-) create mode 100644 src/ofxPiMapper.cpp diff --git a/example/example.xcodeproj/project.pbxproj b/example/example.xcodeproj/project.pbxproj index f1df4b8..f83a8eb 100644 --- a/example/example.xcodeproj/project.pbxproj +++ b/example/example.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ 3933D5D819BB87BD000ACA55 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CD19BB87BD000ACA55 /* ofxSlider.cpp */; }; 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */; }; 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */; }; + 397EFC7C1A08E7680009286E /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 397EFC7B1A08E7680009286E /* ofxPiMapper.cpp */; }; 39C1243319EE9589005DF557 /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 39C123EA19EE9589005DF557 /* lz4.c */; }; 39C1243419EE9589005DF557 /* Base64Encoding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241219EE9589005DF557 /* Base64Encoding.cpp */; }; 39C1243519EE9589005DF557 /* ByteBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241319EE9589005DF557 /* ByteBuffer.cpp */; }; @@ -136,6 +137,7 @@ 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxToggle.cpp; sourceTree = ""; }; 3933D5D219BB87BD000ACA55 /* ofxToggle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; 39366FD519BDA95E006E5BE6 /* ofxPiMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; + 397EFC7B1A08E7680009286E /* ofxPiMapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; 39C123E719EE9589005DF557 /* alphanum.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = alphanum.hpp; sourceTree = ""; }; 39C123EA19EE9589005DF557 /* lz4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lz4.c; sourceTree = ""; }; 39C123EB19EE9589005DF557 /* lz4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lz4.h; sourceTree = ""; }; @@ -361,6 +363,7 @@ 39C1245619F086A9005DF557 /* Sources */, 39C1244C19EE95DD005DF557 /* MediaServer */, 39366FD519BDA95E006E5BE6 /* ofxPiMapper.h */, + 397EFC7B1A08E7680009286E /* ofxPiMapper.cpp */, ); name = src; path = ../src; @@ -828,6 +831,7 @@ 39C1244A19EE9589005DF557 /* snappy-stubs-internal.cc in Sources */, 39C1245F19F08965005DF557 /* VideoSource.cpp in Sources */, 39C1244119EE9589005DF557 /* HexBinaryEncoding.cpp in Sources */, + 397EFC7C1A08E7680009286E /* ofxPiMapper.cpp in Sources */, 39C1244219EE9589005DF557 /* HiddenFileFilter.cpp in Sources */, 39C1244819EE9589005DF557 /* SearchPath.cpp in Sources */, 39C1248019F187D5005DF557 /* SourcesEditor.cpp in Sources */, diff --git a/example/src/ofApp.cpp b/example/src/ofApp.cpp index 101e14e..bacbe47 100755 --- a/example/src/ofApp.cpp +++ b/example/src/ofApp.cpp @@ -1,32 +1,20 @@ #include "ofApp.h" void ofApp::setup() { - bShowInfo = false; - // Pass pointers to our media server instance to both: - // surface manager and it's gui, only then we will be able to - // load surface data from xml settings files - surfaceManager.setMediaServer(&mediaServer); - gui.setMediaServer(&mediaServer); - - // check if the surfaces.xml file is there - // if not - load defaultSurfaces.xml - if (ofFile::doesFileExist("surfaces.xml")) { - surfaceManager.loadXmlSettings("surfaces.xml"); - } else { - surfaceManager.loadXmlSettings("defaultSurfaces.xml"); - } - - // Pass the surface manager to the mapper graphical user interface - gui.setSurfaceManager(&surfaceManager); - - // Create FBO + // 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 + + // Create our custom FBO fbo = new ofFbo(); fbo->allocate(500, 500); fboSource = new ofx::piMapper::BaseSource(&fbo->getTextureReference()); - setFboAsSource(); + + // Assign the FBO's texture to one of the surfaces ofxPiMapper has created + piMapper.getSurfaceManager().getSurface(0)->setSource(fboSource); - // Genereate rects + // Genereate rects to be rendered into the FBO int numRects = 20; // change this to add more or less rects for (int i = 0; i < numRects; i++) { rects.push_back(ofRectangle(0, ofRandom(fbo->getHeight()), fbo->getWidth(), @@ -36,6 +24,7 @@ void ofApp::setup() { } void ofApp::update() { + // Move rects for (int i = 0; i < rects.size(); i++) { rects[i].y += rectSpeeds[i]; @@ -44,7 +33,7 @@ void ofApp::update() { } } - // Fill FBO + // Fill FBO with our rects fbo->begin(); ofClear(0); ofBackground(0); @@ -56,135 +45,9 @@ void ofApp::update() { } void ofApp::draw() { - // Draw the piMapper GUI - gui.draw(); - - if (bShowInfo) { - // Draw instructions - stringstream ss; - ss << "There are 4 modes:\n\n"; - ss << " 1. Presentation mode\n"; - ss << " 2. Texture mapping mode\n"; - ss << " 3. Projection mapping mode\n"; - ss << " 4. Source selection mode\n\n"; - ss << "You can switch between the modes by using <1>, <2>, <3> and <4> " - "keys on the keyboard.\n\n"; - ss << "Press or to add random or normal surface.\n"; - ss << "Press to add a new quad surface.\n"; - ss << "Press to save the composition.\n"; - ss << "Press to toggle fullscreen.\n"; - ss << "Press to reassign the fbo texture to the first surface\n"; - ss << "Hit to hide this message."; - - ofDrawBitmapStringHighlight(ss.str(), 10, 20, ofColor(0, 0, 0, 100), - ofColor(255, 255, 255, 200)); - } + piMapper.draw(); } void ofApp::exit() { - // Clear FBO from mem delete fbo; -} - -void ofApp::keyPressed(int key) { - cout << "Key pressed: " << static_cast(key) << endl; - - switch (key) { - case '1': - gui.setMode(ofx::piMapper::GuiMode::NONE); - break; - case '2': - gui.setMode(ofx::piMapper::GuiMode::TEXTURE_MAPPING); - break; - case '3': - gui.setMode(ofx::piMapper::GuiMode::PROJECTION_MAPPING); - break; - case '4': - gui.setMode(ofx::piMapper::GuiMode::SOURCE_SELECTION); - break; - case 'i': - bShowInfo = !bShowInfo; - break; - case 'r': - addRandomSurface(); - break; - case 'q': - addQuadSurface(); - break; - case 'n': - addSurface(); - break; - case 'f': - ofToggleFullscreen(); - break; - case 's': - surfaceManager.saveXmlSettings("surfaces.xml"); - break; - case 'a': - setFboAsSource(); - break; - case OF_KEY_BACKSPACE: - surfaceManager.removeSelectedSurface(); - break; - default: - break; - } -} - -void ofApp::addRandomSurface() { - int surfaceType = ofx::piMapper::SurfaceType::TRIANGLE_SURFACE; - vector vertices; - vertices.push_back(ofVec2f(ofRandomWidth(), ofRandomHeight())); - vertices.push_back(ofVec2f(ofRandomWidth(), ofRandomHeight())); - vertices.push_back(ofVec2f(ofRandomWidth(), ofRandomHeight())); - vector texCoords; - texCoords.push_back(ofVec2f(ofRandomuf(), ofRandomuf())); - texCoords.push_back(ofVec2f(ofRandomuf(), ofRandomuf())); - texCoords.push_back(ofVec2f(ofRandomuf(), ofRandomuf())); - surfaceManager.addSurface(surfaceType, vertices, texCoords); - - // select this surface right away - surfaceManager.selectSurface(surfaceManager.size() - 1); -} - -void ofApp::addQuadSurface() { - int surfaceType = ofx::piMapper::SurfaceType::QUAD_SURFACE; - vector vertices; - - int border = 50; - vertices.push_back(ofVec2f(border, border)); - vertices.push_back(ofVec2f(ofGetWidth() - border, border)); - vertices.push_back(ofVec2f(ofGetWidth() - border, ofGetHeight() - border)); - vertices.push_back(ofVec2f(border, ofGetHeight() - border)); - - vector texCoords; - texCoords.push_back(ofVec2f(ofVec2f(0.0f, 0.0f))); - texCoords.push_back(ofVec2f(ofVec2f(1.0f, 0.0f))); - texCoords.push_back(ofVec2f(ofVec2f(1.0f, 1.0f))); - texCoords.push_back(ofVec2f(ofVec2f(0.0f, 1.0f))); - - surfaceManager.addSurface(surfaceType, vertices, texCoords); - - // select this surface right away - surfaceManager.selectSurface(surfaceManager.size() - 1); -} - -void ofApp::addSurface() { - int surfaceType = ofx::piMapper::SurfaceType::TRIANGLE_SURFACE; - vector vertices; - vertices.push_back(ofVec2f((float)ofGetWidth() / 2.0f, 0.0f)); - vertices.push_back(ofVec2f((float)ofGetWidth(), (float)ofGetHeight())); - vertices.push_back(ofVec2f(0.0f, (float)ofGetHeight())); - vector texCoords; - texCoords.push_back(ofVec2f(0.5f, 0.0f)); - texCoords.push_back(ofVec2f(1.0f, 1.0f)); - texCoords.push_back(ofVec2f(0.0f, 1.0f)); - surfaceManager.addSurface(surfaceType, vertices, texCoords); - - // select this surface right away - surfaceManager.selectSurface(surfaceManager.size() - 1); -} - -void ofApp::setFboAsSource() { - surfaceManager.getSurface(0)->setSource(fboSource); } \ No newline at end of file diff --git a/example/src/ofApp.h b/example/src/ofApp.h index b3455a3..e6cb415 100755 --- a/example/src/ofApp.h +++ b/example/src/ofApp.h @@ -5,24 +5,16 @@ #include "BaseSource.h" class ofApp : public ofBaseApp { - public: +public: void setup(); void update(); void draw(); void exit(); - void keyPressed(int key); - - void addRandomSurface(); - void addQuadSurface(); - void addSurface(); - void setFboAsSource(); - + ofxPiMapper piMapper; + + // Custom FBO surface variables ofImage image; - ofx::piMapper::MediaServer mediaServer; - ofx::piMapper::SurfaceManager surfaceManager; - ofx::piMapper::SurfaceManagerGui gui; - bool bShowInfo; ofFbo* fbo; ofx::piMapper::BaseSource* fboSource; vector rects; diff --git a/src/ofxPiMapper.cpp b/src/ofxPiMapper.cpp new file mode 100644 index 0000000..1e8bce9 --- /dev/null +++ b/src/ofxPiMapper.cpp @@ -0,0 +1,158 @@ +#include "ofxPiMapper.h" + +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) { + ofLogNotice("ofxPiMapper") << "Setting up..."; + + // Assign media server to other pi mapper components + surfaceManager.setMediaServer(&mediaServer); + gui.setMediaServer(&mediaServer); + + // Check if we have user surfaces defined, if not - load default + if (ofFile::doesFileExist(PIMAPPER_USER_SURFACES_XML_FILE)) { + ofLogNotice("ofxPiMapper") << "Loading user surfaces from " << PIMAPPER_USER_SURFACES_XML_FILE; + surfaceManager.loadXmlSettings(PIMAPPER_USER_SURFACES_XML_FILE); + } else { + ofLogNotice("ofxPiMapper") << "Loading default surfaces from " << PIMAPPER_DEF_SURFACES_XML_FILE; + surfaceManager.loadXmlSettings(PIMAPPER_DEF_SURFACES_XML_FILE); + } + + // The GUI needs something to interface with + gui.setSurfaceManager(&surfaceManager); + + isSetUp = true; + + ofLogNotice("ofxPiMapper") << "Done setting up"; +} + +void ofxPiMapper::draw() { + if (!isSetUp) { + return; + } + + // Draw the piMapper GUI + gui.draw(); + + if (bShowInfo) { + // Draw instructions + stringstream ss; + ss << "There are 4 modes:\n\n"; + ss << " 1. Presentation mode\n"; + ss << " 2. Texture mapping mode\n"; + ss << " 3. Projection mapping mode\n"; + ss << " 4. Source selection mode\n\n"; + ss << "You can switch between the modes by using <1>, <2>, <3> and <4> " + "keys on the keyboard.\n\n"; + ss << "Press to add new triangle surface\n"; + ss << "Press to add new quad surface\n"; + ss << "Press to save the composition\n"; + ss << "Press to toggle fullscreen\n"; + ss << "Press to hide this message"; + + ofDrawBitmapStringHighlight(ss.str(), 10, 20, ofColor(0, 0, 0, 100), + ofColor(255, 255, 255, 200)); + } + +} // draw + +void ofxPiMapper::keyPressed(ofKeyEventArgs &args) { + ofLogNotice("ofxPiMapper") << "Key pressed: " << static_cast(args.key); + + switch (args.key) { + case '1': + gui.setMode(ofx::piMapper::GuiMode::NONE); + break; + case '2': + gui.setMode(ofx::piMapper::GuiMode::TEXTURE_MAPPING); + break; + case '3': + gui.setMode(ofx::piMapper::GuiMode::PROJECTION_MAPPING); + break; + case '4': + gui.setMode(ofx::piMapper::GuiMode::SOURCE_SELECTION); + break; + case 'i': + bShowInfo = !bShowInfo; + break; + case 'q': + addQuadSurface(); + break; + case 't': + addTriangleSurface(); + break; + case 'f': + ofToggleFullscreen(); + break; + case 's': + surfaceManager.saveXmlSettings(PIMAPPER_USER_SURFACES_XML_FILE); + break; + case OF_KEY_BACKSPACE: + surfaceManager.removeSelectedSurface(); + break; + default: + break; + } +} // keyPressed + +void ofxPiMapper::addTriangleSurface() { + int surfaceType = ofx::piMapper::SurfaceType::TRIANGLE_SURFACE; + + vector vertices; + float margin = 50.0f; + vertices.push_back(ofVec2f((float)ofGetWidth() / 2.0f, margin)); + vertices.push_back(ofVec2f((float)ofGetWidth() - margin, (float)ofGetHeight() - margin)); + vertices.push_back(ofVec2f(margin, (float)ofGetHeight() - margin)); + + vector texCoords; + texCoords.push_back(ofVec2f(0.5f, 0.0f)); + texCoords.push_back(ofVec2f(1.0f, 1.0f)); + texCoords.push_back(ofVec2f(0.0f, 1.0f)); + surfaceManager.addSurface(surfaceType, vertices, texCoords); + + // Select this surface right away + surfaceManager.selectSurface(surfaceManager.size() - 1); + +} // addTriangleSurface + +void ofxPiMapper::addQuadSurface() { + + int surfaceType = ofx::piMapper::SurfaceType::QUAD_SURFACE; + + vector vertices; + float margin = 50.0f; + vertices.push_back(ofVec2f(margin, margin)); + vertices.push_back(ofVec2f((float)ofGetWidth() - margin, margin)); + vertices.push_back(ofVec2f((float)ofGetWidth() - margin, (float)ofGetHeight() - margin)); + vertices.push_back(ofVec2f(margin, (float)ofGetHeight() - margin)); + + vector texCoords; + texCoords.push_back(ofVec2f(ofVec2f(0.0f, 0.0f))); + texCoords.push_back(ofVec2f(ofVec2f(1.0f, 0.0f))); + texCoords.push_back(ofVec2f(ofVec2f(1.0f, 1.0f))); + texCoords.push_back(ofVec2f(ofVec2f(0.0f, 1.0f))); + + surfaceManager.addSurface(surfaceType, vertices, texCoords); + + // select this surface right away + surfaceManager.selectSurface(surfaceManager.size() - 1); + +} // addQuadSurface + +ofx::piMapper::MediaServer& ofxPiMapper::getMediaServer() { + return mediaServer; +} + +ofx::piMapper::SurfaceManager& ofxPiMapper::getSurfaceManager() { + return surfaceManager; +} \ No newline at end of file diff --git a/src/ofxPiMapper.h b/src/ofxPiMapper.h index 975b9f6..ff93ab7 100644 --- a/src/ofxPiMapper.h +++ b/src/ofxPiMapper.h @@ -1,6 +1,38 @@ #pragma once +#include "ofMain.h" #include "SurfaceManager.h" #include "SurfaceManagerGui.h" +#include "MediaServer.h" -#include "MediaServer.h" \ No newline at end of file +#define PIMAPPER_DEF_SURFACES_XML_FILE "defaultSurfaces.xml" +#define PIMAPPER_USER_SURFACES_XML_FILE "surfaces.xml" + +class ofxPiMapper { +public: + ofxPiMapper(); + ~ofxPiMapper(); + + void setup(ofEventArgs& args); + void draw(); // Called manually to make custom layering possible + void keyPressed(ofKeyEventArgs& args); + + // TODO: Move these methods to SurfaceManager + void addTriangleSurface(); + void addQuadSurface(); + + // Toggle help / info + void showInfo() { bShowInfo = true; }; + void hideInfo() { bShowInfo = false; }; + + // Getters + ofx::piMapper::MediaServer& getMediaServer(); + ofx::piMapper::SurfaceManager& getSurfaceManager(); + +private: + bool isSetUp; + bool bShowInfo; + ofx::piMapper::MediaServer mediaServer; + ofx::piMapper::SurfaceManager surfaceManager; + ofx::piMapper::SurfaceManagerGui gui; +}; \ No newline at end of file From 786dd31d0130056c2c7111b06bdb33d1a3470ac0 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Tue, 4 Nov 2014 13:22:30 +0100 Subject: [PATCH 05/13] Update readme --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index f8fa9e3..54ef901 100644 --- a/README.md +++ b/README.md @@ -91,9 +91,8 @@ These other shortcuts that you can use while using the example app. Remember tha Key | Function :--- | :--- i | Show info -n | Add triangle surface +t | Add triangle surface q | Add quad surface -r | Add random triangle surface f | Toggle fullscreen s | Save composition BACKSPACE | Delete surface From ca5df071b75c4a24b3b9e6a945e14e03d78c3696 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 5 Nov 2014 16:24:49 +0100 Subject: [PATCH 06/13] Add FBO source support and selection in source editor --- example/example.xcodeproj/project.pbxproj | 12 ++ example/src/CustomSource.cpp | 43 +++++++ example/src/CustomSource.h | 17 +++ example/src/ofApp.cpp | 43 +------ example/src/ofApp.h | 13 +- src/MediaServer/MediaServer.cpp | 96 +++++++++++++- src/MediaServer/MediaServer.h | 37 ++++-- src/Sources/BaseSource.h | 3 + src/Sources/FboSource.cpp | 81 ++++++++++++ src/Sources/FboSource.h | 49 +++++++ src/Sources/SourceType.h | 7 +- src/UserInterface/SourcesEditor.cpp | 148 +++++++++++++++------- src/UserInterface/SourcesEditor.h | 19 ++- 13 files changed, 449 insertions(+), 119 deletions(-) create mode 100644 example/src/CustomSource.cpp create mode 100644 example/src/CustomSource.h create mode 100644 src/Sources/FboSource.cpp create mode 100644 src/Sources/FboSource.h diff --git a/example/example.xcodeproj/project.pbxproj b/example/example.xcodeproj/project.pbxproj index f83a8eb..f9654e4 100644 --- a/example/example.xcodeproj/project.pbxproj +++ b/example/example.xcodeproj/project.pbxproj @@ -20,6 +20,8 @@ 3933D5D919BB87BD000ACA55 /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5CF19BB87BD000ACA55 /* ofxSliderGroup.cpp */; }; 3933D5DA19BB87BD000ACA55 /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3933D5D119BB87BD000ACA55 /* ofxToggle.cpp */; }; 397EFC7C1A08E7680009286E /* ofxPiMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 397EFC7B1A08E7680009286E /* ofxPiMapper.cpp */; }; + 397EFC7F1A08FE720009286E /* FboSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 397EFC7D1A08FE720009286E /* FboSource.cpp */; }; + 397EFC821A09047C0009286E /* CustomSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 397EFC801A09047C0009286E /* CustomSource.cpp */; }; 39C1243319EE9589005DF557 /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 39C123EA19EE9589005DF557 /* lz4.c */; }; 39C1243419EE9589005DF557 /* Base64Encoding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241219EE9589005DF557 /* Base64Encoding.cpp */; }; 39C1243519EE9589005DF557 /* ByteBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C1241319EE9589005DF557 /* ByteBuffer.cpp */; }; @@ -138,6 +140,10 @@ 3933D5D219BB87BD000ACA55 /* ofxToggle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxToggle.h; sourceTree = ""; }; 39366FD519BDA95E006E5BE6 /* ofxPiMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ofxPiMapper.h; sourceTree = ""; }; 397EFC7B1A08E7680009286E /* ofxPiMapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ofxPiMapper.cpp; sourceTree = ""; }; + 397EFC7D1A08FE720009286E /* FboSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FboSource.cpp; sourceTree = ""; }; + 397EFC7E1A08FE720009286E /* FboSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FboSource.h; sourceTree = ""; }; + 397EFC801A09047C0009286E /* CustomSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CustomSource.cpp; sourceTree = ""; }; + 397EFC811A09047C0009286E /* CustomSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomSource.h; sourceTree = ""; }; 39C123E719EE9589005DF557 /* alphanum.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = alphanum.hpp; sourceTree = ""; }; 39C123EA19EE9589005DF557 /* lz4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lz4.c; sourceTree = ""; }; 39C123EB19EE9589005DF557 /* lz4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lz4.h; sourceTree = ""; }; @@ -577,6 +583,8 @@ 39C1245B19F08965005DF557 /* ImageSource.h */, 39C1245C19F08965005DF557 /* VideoSource.cpp */, 39C1245D19F08965005DF557 /* VideoSource.h */, + 397EFC7D1A08FE720009286E /* FboSource.cpp */, + 397EFC7E1A08FE720009286E /* FboSource.h */, ); path = Sources; sourceTree = ""; @@ -696,6 +704,8 @@ E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */, E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */, + 397EFC801A09047C0009286E /* CustomSource.cpp */, + 397EFC811A09047C0009286E /* CustomSource.h */, ); path = src; sourceTree = SOURCE_ROOT; @@ -810,6 +820,7 @@ 39C1246A19F0AB96005DF557 /* QuadSurface.cpp in Sources */, 39C1247F19F187D5005DF557 /* RadioList.cpp in Sources */, 39C1243419EE9589005DF557 /* Base64Encoding.cpp in Sources */, + 397EFC7F1A08FE720009286E /* FboSource.cpp in Sources */, E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, 39C1244719EE9589005DF557 /* RegexPathFilter.cpp in Sources */, 39C1247C19F187D5005DF557 /* BaseJoint.cpp in Sources */, @@ -850,6 +861,7 @@ 39264842192224F90008A7F5 /* tinyxmlerror.cpp in Sources */, 3926483B192224DA0008A7F5 /* ofxXmlSettings.cpp in Sources */, 39C1245119EE95DD005DF557 /* DirectoryWatcher.cpp in Sources */, + 397EFC821A09047C0009286E /* CustomSource.cpp in Sources */, 39C1243819EE9589005DF557 /* ByteBufferWriter.cpp in Sources */, 3933D5D519BB87BD000ACA55 /* ofxGuiGroup.cpp in Sources */, ); diff --git a/example/src/CustomSource.cpp b/example/src/CustomSource.cpp new file mode 100644 index 0000000..08d0f9a --- /dev/null +++ b/example/src/CustomSource.cpp @@ -0,0 +1,43 @@ +#include "CustomSource.h" + +// Don't do any drawing here +void CustomSource::setup() { + // Give our source a decent name + name = "Custom FBO Source"; + + // Allocate our FBO source, decide how big it should be + allocate(500, 500); + + // Genereate rects to be rendered into the FBO + int numRects = 20; // change this to add more or less rects + for (int i = 0; i < numRects; i++) { + rects.push_back(ofRectangle(0, + ofRandom(fbo->getHeight()), + fbo->getWidth(), + ofRandom(20))); + rectSpeeds.push_back((1.0f + ofRandom(5))); + } +} + +// Don't do any drawing here +void CustomSource::update() { + // Move rects + for (int i = 0; i < rects.size(); i++) { + rects[i].y += rectSpeeds[i]; + if (rects[i].y > fbo->getHeight()) { + rects[i].y = -rects[i].getHeight(); + } + } +} + +// No need to take care of fbo.begin() and fbo.end() here. +// All within draw() is being rendered into fbo; +void CustomSource::draw() { + // Fill FBO with our rects + ofClear(0); + //ofBackground(0); + ofSetColor(255); + for (int i = 0; i < rects.size(); i++) { + ofRect(rects[i]); + } +} \ No newline at end of file diff --git a/example/src/CustomSource.h b/example/src/CustomSource.h new file mode 100644 index 0000000..5993d80 --- /dev/null +++ b/example/src/CustomSource.h @@ -0,0 +1,17 @@ +#pragma once + +#include "ofMain.h" +#include "FboSource.h" + +class CustomSource : public ofx::piMapper::FboSource { +public: + // These are overrides of FboSource virtual functions. + // FBO sources are not executing before they have been assigned to a surface. + void setup(); + void update(); + void draw(); // You don't have to care about fbo.begin() or fbo.end() here + +private: + vector rects; + vector rectSpeeds; +}; \ No newline at end of file diff --git a/example/src/ofApp.cpp b/example/src/ofApp.cpp index bacbe47..f17b9c3 100755 --- a/example/src/ofApp.cpp +++ b/example/src/ofApp.cpp @@ -1,53 +1,16 @@ #include "ofApp.h" 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 - - // Create our custom FBO - fbo = new ofFbo(); - fbo->allocate(500, 500); - fboSource = new ofx::piMapper::BaseSource(&fbo->getTextureReference()); - - // Assign the FBO's texture to one of the surfaces ofxPiMapper has created - piMapper.getSurfaceManager().getSurface(0)->setSource(fboSource); - - // Genereate rects to be rendered into the FBO - int numRects = 20; // change this to add more or less rects - for (int i = 0; i < numRects; i++) { - rects.push_back(ofRectangle(0, ofRandom(fbo->getHeight()), fbo->getWidth(), - ofRandom(20))); - rectSpeeds.push_back((1.0f + ofRandom(5))); - } -} -void ofApp::update() { - - // Move rects - for (int i = 0; i < rects.size(); i++) { - rects[i].y += rectSpeeds[i]; - if (rects[i].y > fbo->getHeight()) { - rects[i].y = -rects[i].getHeight(); - } - } - - // Fill FBO with our rects - fbo->begin(); - ofClear(0); - ofBackground(0); - ofSetColor(255); - for (int i = 0; i < rects.size(); i++) { - ofRect(rects[i]); - } - fbo->end(); + // Add our CustomSource to list of fbo sources of the piMapper + piMapper.getMediaServer().addFboSource(customSource); } void ofApp::draw() { piMapper.draw(); -} - -void ofApp::exit() { - delete fbo; } \ No newline at end of file diff --git a/example/src/ofApp.h b/example/src/ofApp.h index e6cb415..008239f 100755 --- a/example/src/ofApp.h +++ b/example/src/ofApp.h @@ -2,21 +2,16 @@ #include "ofMain.h" #include "ofxPiMapper.h" -#include "BaseSource.h" +#include "CustomSource.h" class ofApp : public ofBaseApp { public: void setup(); - void update(); void draw(); - void exit(); ofxPiMapper piMapper; - // Custom FBO surface variables - ofImage image; - ofFbo* fbo; - ofx::piMapper::BaseSource* fboSource; - vector rects; - vector rectSpeeds; + // By using a custom source that is derived from FboSource + // you will be able to see the source listed in sources editor + CustomSource customSource; }; \ No newline at end of file diff --git a/src/MediaServer/MediaServer.cpp b/src/MediaServer/MediaServer.cpp index f8539bc..eee31cb 100644 --- a/src/MediaServer/MediaServer.cpp +++ b/src/MediaServer/MediaServer.cpp @@ -23,6 +23,7 @@ namespace piMapper { int MediaServer::getNumImages() { return imageWatcher.getFilePaths().size(); } int MediaServer::getNumVideos() { return videoWatcher.getFilePaths().size(); } + int MediaServer::getNumFboSources() { return fboSources.size(); } std::vector& MediaServer::getImagePaths() { return imageWatcher.getFilePaths(); @@ -40,6 +41,14 @@ namespace piMapper { return imageNames; } + std::vector MediaServer::getFboSourceNames() { + std::vector fboSourceNames; + for (int i = 0; i < fboSources.size(); i++) { + fboSourceNames.push_back(fboSources[i]->getName()); + } + return fboSourceNames; + } + std::vector& MediaServer::getVideoPaths() { return videoWatcher.getFilePaths(); } @@ -56,14 +65,14 @@ namespace piMapper { return videoNames; } - - BaseSource* MediaServer::loadMedia(string &path, int mediaType) { // Chose load method depending on type if (mediaType == SourceType::SOURCE_TYPE_IMAGE) { return loadImage(path); } else if (mediaType == SourceType::SOURCE_TYPE_VIDEO) { return loadVideo(path); + } else if (mediaType == SourceType::SOURCE_TYPE_FBO) { + return loadFboSource(path); } else { std::stringstream ss; ss << "Can not load media of unknown type: " << mediaType; @@ -214,16 +223,15 @@ namespace piMapper { unloadImage(path); } else if (mediaSource->getType() == SourceType::SOURCE_TYPE_VIDEO) { unloadVideo(path); + } else if (mediaSource->getType() == SourceType::SOURCE_TYPE_FBO) { + unloadFboSource(path); } else { // Oh my god, what to do!? Relax and exit. ofLogFatalError("MediaServer") << "Attempt to unload media of unknown type"; std::exit(EXIT_FAILURE); } } else { - std:stringstream ss; - ss << "Media with path " << path << " is not loaded and thus can't be unloaded"; - ofLogFatalError("MediaServer") << ss.str(); - std::exit(EXIT_FAILURE); + ofLogNotice("MediaServer") << "Nothing to unload"; } } @@ -231,11 +239,15 @@ namespace piMapper { void MediaServer::clear() { typedef std::map::iterator it_type; for (it_type i = loadedSources.begin(); i != loadedSources.end(); i++) { - delete i->second; + // Do not delete FBO source pointers as they are (and should be) initialized elsewhere + if (i->second->getType() != SourceType::SOURCE_TYPE_FBO) { + delete i->second; + } } loadedSources.clear(); } + // TODO: getLoadedSourceByPath BaseSource* MediaServer::getSourceByPath(std::string& mediaPath) { if (loadedSources.count(mediaPath)) { return loadedSources[mediaPath]; @@ -268,6 +280,76 @@ namespace piMapper { } } + void MediaServer::addFboSource(ofx::piMapper::FboSource &fboSource) { + ofLogNotice("MediaServer") << "Attempting to add FBO source with name " << fboSource.getName(); + // FBO source has to be with unique name + for (int i = 0; i < fboSources.size(); i++) { + if (fboSources[i]->getName() == fboSource.getName()) { + ofLogWarning("MediaServer") << "Attempt to add FBO source with duplicate name"; + ofExit(EXIT_FAILURE); // Here we definitely need to fail to avoid confusion + } + } + ofLogNotice("MediaServer") << "Source new, adding"; + fboSources.push_back(&fboSource); + } // addFboSource + + BaseSource* MediaServer::loadFboSource(std::string &fboSourceName) { + ofLogNotice("MediaServer") << "Attempting to load FBO source with name " << fboSourceName; + // Search for FBO source name in our storage + FboSource* source = NULL; + for (int i = 0; i < fboSources.size(); i++) { + if (fboSources[i]->getName() == fboSourceName) { + source = fboSources[i]; + break; + } + } + // Panic if not in storage + if (source == NULL) { + ofLogError("MediaServer") << "Attempt to load non existing FBO source: " << fboSourceName; + ofExit(EXIT_FAILURE); + } + // Check if it is loaded/activated + if (loadedSources.count(fboSourceName)) { + // Is loaded, increase reference count and return existing + loadedSources[fboSourceName]->referenceCount++; + ofLogNotice("MediaServer") << "Current " << fboSourceName << "reference count: " << loadedSources[fboSourceName]->referenceCount; + return loadedSources[fboSourceName]; + } + // else + // Not loaded, add to loaded sources and activate + // source var should be set by now + source->addAppListeners(); + source->referenceCount = 1; + ofLogNotice("MediaServer") << "Current " << fboSourceName << " reference count: " << source->referenceCount; + loadedSources[fboSourceName] = source; + return loadedSources[fboSourceName]; + } // loadFboSource + + void MediaServer::unloadFboSource(std::string &fboSourceName) { + ofLogNotice("MediaServer") << "Attempt to unload FBO source " << fboSourceName; + // Check if loaded at all + if (!loadedSources.count(fboSourceName)) { + ofLogWarning("MediaServer") << "FBO source not loaded"; + return; + } + // TODO: remove static cast, make the sources handle reference counting, + // enabling and disabling by themselves + FboSource* source = static_cast(loadedSources[fboSourceName]); + // else decrease reference count + source->referenceCount--; + ofLogNotice("MediaServer") << "Current " << fboSourceName << "reference count: " << loadedSources[fboSourceName]->referenceCount; + // If no references left, disable + if (source->referenceCount <= 0) { + ofLogNotice("MediaServer") << fboSourceName << " reference count <= 0, removing from loaded sources"; + source->referenceCount = 0; + source->removeAppListeners(); + std::map::iterator it = loadedSources.find(fboSourceName); + loadedSources.erase(it); + ofLogNotice("MediaServer") << "Source count after FBO source removal: " << loadedSources.size() << endl; + ofNotifyEvent(onFboSourceUnloaded, fboSourceName, this); + } + } // unloadFboSource + void MediaServer::handleImageAdded(string& path) { ofNotifyEvent(onImageAdded, path, this); } diff --git a/src/MediaServer/MediaServer.h b/src/MediaServer/MediaServer.h index 3e700e1..4fb9ad7 100644 --- a/src/MediaServer/MediaServer.h +++ b/src/MediaServer/MediaServer.h @@ -6,6 +6,9 @@ // // +// TODO: move reference counting, enabling and disabling of sources +// to source classes themselves + #pragma once #include "ofMain.h" @@ -13,6 +16,7 @@ #include "BaseSource.h" #include "ImageSource.h" #include "VideoSource.h" +#include "FboSource.h" #include "SourceType.h" #define DEFAULT_IMAGES_DIR "sources/images/" @@ -28,10 +32,12 @@ class MediaServer { int getNumVideos(); int getNumImages(); + int getNumFboSources(); // new std::vector& getVideoPaths(); std::vector getVideoNames(); std::vector& getImagePaths(); std::vector getImageNames(); + std::vector getFboSourceNames(); // new BaseSource* loadMedia(string& path, int mediaType); BaseSource* loadImage(string& path); @@ -45,15 +51,25 @@ class MediaServer { std::string getDefaultVideoDir(); std::string getDefaultMediaDir(int sourceType); - // Custom events - ofEvent onImageAdded; - ofEvent onImageRemoved; - ofEvent onVideoAdded; - ofEvent onVideoRemoved; - ofEvent onImageLoaded; - ofEvent onImageUnloaded; - ofEvent onVideoLoaded; - ofEvent onVideoUnloaded; + // Do things with FBO sources + void addFboSource(FboSource& fboSource); + BaseSource* loadFboSource(std::string& fboSourceName); + void unloadFboSource(std::string& fboSourceName); + + // Custom events, add/remove + ofEvent onImageAdded; + ofEvent onImageRemoved; + ofEvent onVideoAdded; + ofEvent onVideoRemoved; + ofEvent onFboSourceAdded; + ofEvent onFboSourceRemoved; + // load/unload + ofEvent onImageLoaded; + ofEvent onImageUnloaded; + ofEvent onVideoLoaded; + ofEvent onVideoUnloaded; + ofEvent onFboSourceLoaded; + ofEvent onFboSourceUnloaded; private: // Directory Watchers @@ -86,6 +102,9 @@ class MediaServer { // Remove event listeners to image and video watcher events void removeWatcherListeners(); + + // FBO source storage before they go to loadedSources + std::vector fboSources; // FBO source storage }; } // namespace piMapper } // namespace ofx diff --git a/src/Sources/BaseSource.h b/src/Sources/BaseSource.h index fb5e567..5dbc894 100644 --- a/src/Sources/BaseSource.h +++ b/src/Sources/BaseSource.h @@ -18,6 +18,9 @@ namespace ofx { int getType(); std::string& getPath(); virtual void clear() {}; + + // TODO: add virtual increaseReferenceCount and decreaseReferenceCount methods + // and make the variable protected int referenceCount; private: diff --git a/src/Sources/FboSource.cpp b/src/Sources/FboSource.cpp new file mode 100644 index 0000000..f64236b --- /dev/null +++ b/src/Sources/FboSource.cpp @@ -0,0 +1,81 @@ +#include "FboSource.h" + +namespace ofx { + namespace piMapper { + FboSource::FboSource() : fbo(NULL) { + name = PIMAPPER_DEF_FBO_SOURCE_NAME; + loadable = false; + loaded = false; + type = SourceType::SOURCE_TYPE_FBO; + ofAddListener(ofEvents().setup, this, &FboSource::onAppSetup, OF_EVENT_ORDER_BEFORE_APP); + } + + FboSource::~FboSource() { + removeAppListeners(); + clear(); + } + + void FboSource::addAppListeners() { + ofLogNotice("FboSource") << "Adding app listeners"; + ofAddListener(ofEvents().update, this, &FboSource::onAppUpdate, OF_EVENT_ORDER_BEFORE_APP); + ofAddListener(ofEvents().draw, this, &FboSource::onAppDraw, OF_EVENT_ORDER_BEFORE_APP); + ofAddListener(ofEvents().exit, this, &FboSource::onAppExit, OF_EVENT_ORDER_AFTER_APP); + } + + void FboSource::removeAppListeners() { + ofLogNotice("FboSource") << "Removing app listeners"; + ofRemoveListener(ofEvents().update, this, &FboSource::onAppUpdate, OF_EVENT_ORDER_BEFORE_APP); + ofRemoveListener(ofEvents().draw, this, &FboSource::onAppDraw, OF_EVENT_ORDER_BEFORE_APP); + ofRemoveListener(ofEvents().exit, this, &FboSource::onAppExit, OF_EVENT_ORDER_AFTER_APP); + } + + void FboSource::onAppSetup(ofEventArgs &args) { + ofRemoveListener(ofEvents().setup, this, &FboSource::onAppSetup, OF_EVENT_ORDER_BEFORE_APP); + setup(); + } + + void FboSource::onAppUpdate(ofEventArgs &args) { + if (fbo == NULL || !fbo->isAllocated()) { + ofLogWarning("FboSource") << "FBO not allocated"; + return; + } + update(); + } + + void FboSource::onAppDraw(ofEventArgs &args) { + if (fbo == NULL || !fbo->isAllocated()) { + ofLogWarning("FboSource") << "FBO not allocated"; + return; + } + fbo->begin(); + draw(); + fbo->end(); + } + + void FboSource::onAppExit(ofEventArgs &args) { + exit(); + } + + void FboSource::allocate(int width, int height) { + clear(); + fbo = new ofFbo(); + fbo->allocate(width, height); + + // Clear FBO + fbo->begin(); + ofClear(0); + fbo->end(); + + texture = &(fbo->getTextureReference()); + } + + void FboSource::clear() { + texture = NULL; + if (fbo != NULL) { + delete fbo; + fbo = NULL; + } + } + + } // namespace piMapper +} // namespace ofx \ No newline at end of file diff --git a/src/Sources/FboSource.h b/src/Sources/FboSource.h new file mode 100644 index 0000000..2a27ded --- /dev/null +++ b/src/Sources/FboSource.h @@ -0,0 +1,49 @@ +/* +Use this as base class for your generative sources: + +class YourGenerativeSource : public FboSource { + // Your code here +} +*/ +#pragma once + +#include "ofMain.h" +#include "BaseSource.h" + +#define PIMAPPER_DEF_FBO_SOURCE_NAME "FBO Source" + +namespace ofx { + namespace piMapper { + class FboSource : public BaseSource { + public: + FboSource(); + ~FboSource(); + + // Add/remove calls to update and draw + // App listeners are added once the source is assigned to at least one surface + // App listeners are removed once the source is not assigned anywhere + void addAppListeners(); + void removeAppListeners(); + + // These are called on app events + void onAppSetup(ofEventArgs& args); + void onAppUpdate(ofEventArgs& args); + void onAppDraw(ofEventArgs& args); + void onAppExit(ofEventArgs& args); + + // Override these in your custom FBO source + virtual void setup() {}; // Don't do any drawing here + virtual void update() {}; // Don't do any drawing here + // You don't need to take care of fbo.begin() and fbo.end() here; + virtual void draw() {}; // But this is the only place where you shoud do drawing + virtual void exit() {}; + + // Use these to set up FBo itself + void allocate(int width, int height); + void clear(); // The only method from BaseSource to be overriden + + protected: + ofFbo* fbo; + }; + } // namespace piMapper +} // namespace ofx \ No newline at end of file diff --git a/src/Sources/SourceType.h b/src/Sources/SourceType.h index 515e2e4..ad4ebe5 100644 --- a/src/Sources/SourceType.h +++ b/src/Sources/SourceType.h @@ -5,12 +5,13 @@ #define SOURCE_TYPE_NAME_NONE "none" #define SOURCE_TYPE_NAME_IMAGE "image" #define SOURCE_TYPE_NAME_VIDEO "video" +#define SOURCE_TYPE_NAME_FBO "fbo" namespace ofx { namespace piMapper { class SourceType { public: - enum { SOURCE_TYPE_NONE, SOURCE_TYPE_IMAGE, SOURCE_TYPE_VIDEO }; + enum { SOURCE_TYPE_NONE, SOURCE_TYPE_IMAGE, SOURCE_TYPE_VIDEO, SOURCE_TYPE_FBO }; static std::string GetSourceTypeName(int sourceTypeEnum) { if (sourceTypeEnum == SOURCE_TYPE_IMAGE) { @@ -19,6 +20,8 @@ namespace ofx { return SOURCE_TYPE_NAME_VIDEO; } else if (sourceTypeEnum == SOURCE_TYPE_NONE) { return SOURCE_TYPE_NAME_NONE; + } else if (sourceTypeEnum == SOURCE_TYPE_FBO) { + return SOURCE_TYPE_NAME_FBO; } else { std::stringstream ss; ss << "Invalid source type: " << sourceTypeEnum; @@ -34,6 +37,8 @@ namespace ofx { return SOURCE_TYPE_VIDEO; } else if (sourceTypeName == SOURCE_TYPE_NAME_NONE) { return SOURCE_TYPE_NONE; + } else if (sourceTypeName == SOURCE_TYPE_NAME_FBO) { + return SOURCE_TYPE_FBO; } else { std::stringstream ss; ss << "Invalid source type name: " << sourceTypeName; diff --git a/src/UserInterface/SourcesEditor.cpp b/src/UserInterface/SourcesEditor.cpp index d106d67..622fef7 100644 --- a/src/UserInterface/SourcesEditor.cpp +++ b/src/UserInterface/SourcesEditor.cpp @@ -11,6 +11,12 @@ namespace piMapper { addMediaServerListeners(); } + void SourcesEditor::init() { + mediaServer = NULL; // Pointers to NULL pointer so we can check later + isMediaServerExternal = false; + registerAppEvents(); + } + SourcesEditor::SourcesEditor(MediaServer* externalMediaServer) { init(); // Assign external MediaServer instance pointer @@ -23,6 +29,7 @@ namespace piMapper { unregisterAppEvents(); delete imageSelector; delete videoSelector; + delete fboSelector; removeMediaServerListeners(); clearMediaServer(); } @@ -38,10 +45,12 @@ namespace piMapper { void SourcesEditor::setup(ofEventArgs& args) { imageSelector = new RadioList(); videoSelector = new RadioList(); + fboSelector = new RadioList(); // Get media count int numImages = mediaServer->getNumImages(); int numVideos = mediaServer->getNumVideos(); + int numFbos = mediaServer->getNumFboSources(); // Depending on media count, decide what to load and initialize if (numImages) { @@ -55,16 +64,25 @@ namespace piMapper { videoSelector->setup("Videos", videoNames, mediaServer->getVideoPaths()); ofAddListener(videoSelector->onRadioSelected, this, &SourcesEditor::handleVideoSelected); } + if (numFbos) { + std::vector fboNames = mediaServer->getFboSourceNames(); + fboSelector->setup("FBOs", fboNames, fboNames); + ofAddListener(fboSelector->onRadioSelected, this, &SourcesEditor::handleFboSelected); + } + // Align menus + int menuPosX = 20; + int distX = 230; if (numImages) { - imageSelector->setPosition(20, 20); - if (numVideos) { - videoSelector->setPosition(250, 20); - } - } else { - if (numVideos) { - videoSelector->setPosition(20, 20); - } + imageSelector->setPosition(menuPosX, 20); + menuPosX += distX; + } + if (numVideos) { + videoSelector->setPosition(menuPosX, 20); + menuPosX += distX; + } + if (numFbos) { + fboSelector->setPosition(menuPosX, 20); } } @@ -81,6 +99,9 @@ namespace piMapper { if (videoSelector->size()) { videoSelector->draw(); } + if (fboSelector->size()) { + fboSelector->draw(); + } } @@ -91,6 +112,9 @@ namespace piMapper { if (videoSelector->size()) { videoSelector->disable(); } + if (fboSelector->size()) { + fboSelector->disable(); + } } void SourcesEditor::enable() { @@ -105,6 +129,9 @@ namespace piMapper { if (videoSelector->size()) { videoSelector->enable(); } + if (fboSelector->size()) { + fboSelector->enable(); + } BaseSource* source = surfaceManager->getSelectedSurface()->getSource(); selectSourceRadioButton(source->getPath()); } @@ -137,18 +164,25 @@ namespace piMapper { if (videoSelector->size()) { videoSelector->unselectAll(); } + if (fboSelector->size()) { + fboSelector->unselectAll(); + } return; } else { // Check image selector first bool imageRadioSelected = false; bool videoRadioSelected = false; + bool fboRadioSelected = false; if (imageSelector->size()) { imageRadioSelected = imageSelector->selectItemByValue(sourcePath); } if (videoSelector->size()) { videoRadioSelected = videoSelector->selectItemByValue(sourcePath); } - if (imageRadioSelected || videoRadioSelected) { + if (fboSelector->size()) { + fboRadioSelected = fboSelector->selectItemByValue(sourcePath); + } + if (imageRadioSelected || videoRadioSelected || fboRadioSelected) { return; } // Log warning if we are still here @@ -156,12 +190,6 @@ namespace piMapper { } } - void SourcesEditor::init() { - mediaServer = NULL; // Pointers to NULL pointer so we can check later - isMediaServerExternal = false; - registerAppEvents(); - } - void SourcesEditor::addMediaServerListeners() { // Check if the media server is valid if (mediaServer == NULL) { @@ -176,6 +204,11 @@ namespace piMapper { ofAddListener(mediaServer->onImageLoaded, this, &SourcesEditor::handleImageLoaded); ofAddListener(mediaServer->onImageUnloaded, this, &SourcesEditor::handleImageUnloaded); + ofAddListener(mediaServer->onFboSourceAdded, this, &SourcesEditor::handleFboSourceAdded); + ofAddListener(mediaServer->onFboSourceRemoved, this, &SourcesEditor::handleFboSourceRemoved); + ofAddListener(mediaServer->onFboSourceLoaded, this, &SourcesEditor::handleFboSourceLoaded); + ofAddListener(mediaServer->onFboSourceUnloaded, this, &SourcesEditor::handleFboSourceUnloaded); + } void SourcesEditor::removeMediaServerListeners() { @@ -191,42 +224,81 @@ namespace piMapper { ofRemoveListener(mediaServer->onVideoRemoved, this, &SourcesEditor::handleVideoRemoved); ofRemoveListener(mediaServer->onImageLoaded, this, &SourcesEditor::handleImageLoaded); ofRemoveListener(mediaServer->onImageUnloaded, this, &SourcesEditor::handleImageUnloaded); + ofRemoveListener(mediaServer->onFboSourceAdded, this, &SourcesEditor::handleFboSourceAdded); + ofRemoveListener(mediaServer->onFboSourceRemoved, this, &SourcesEditor::handleFboSourceRemoved); + ofRemoveListener(mediaServer->onFboSourceLoaded, this, &SourcesEditor::handleFboSourceLoaded); + ofRemoveListener(mediaServer->onFboSourceUnloaded, this, &SourcesEditor::handleFboSourceUnloaded); } void SourcesEditor::handleImageSelected(string& imagePath) { - // Unselect video item if any selected + // Unselect selected items videoSelector->unselectAll(); + fboSelector->unselectAll(); + BaseSurface* surface = surfaceManager->getSelectedSurface(); if (surface == NULL) { - ofLogNotice("SourcesEditor") << "No surface selected"; + ofLogWarning("SourcesEditor") << "No surface selected"; return; } + // Unload old media BaseSource* source = surface->getSource(); if (source->isLoadable()) { mediaServer->unloadMedia(source->getPath()); + } else { + mediaServer->unloadMedia(source->getName()); } + // Load new image surface->setSource(mediaServer->loadImage(imagePath)); } void SourcesEditor::handleVideoSelected(string& videoPath) { - // Unselect image item if any selected + // Unselect any selected items + fboSelector->unselectAll(); imageSelector->unselectAll(); + BaseSurface* surface = surfaceManager->getSelectedSurface(); if (surface == NULL) { - ofLogNotice("SourcesEditor") << "No surface selected"; + ofLogWarning("SourcesEditor") << "No surface selected"; return; } + // Unload old media BaseSource* source = surface->getSource(); if (source->isLoadable()) { mediaServer->unloadMedia(source->getPath()); + } else { + mediaServer->unloadMedia(source->getName()); } + // Load new video surface->setSource(mediaServer->loadVideo(videoPath)); } + void SourcesEditor::handleFboSelected(string &fboName) { + videoSelector->unselectAll(); + imageSelector->unselectAll(); + + // Get selected surface + BaseSurface* surface = surfaceManager->getSelectedSurface(); + if (surface == NULL) { + ofLogWarning("SourcesEditor") << "No surface selected"; + return; + } + + // Unload old media + BaseSource* source = surface->getSource(); + if (source->isLoadable()) { + mediaServer->unloadMedia(source->getPath()); + } else { + mediaServer->unloadMedia(source->getName()); + } + + // Load new FBO + surface->setSource(mediaServer->loadFboSource(fboName)); + } + void SourcesEditor::clearMediaServer() { // If mediaServer is local, clear it if (!isMediaServerExternal) { @@ -238,34 +310,16 @@ namespace piMapper { } } - void SourcesEditor::handleImageAdded(string& path) { - cout << "image added: " << path << endl; - } - - void SourcesEditor::handleImageRemoved(string& path) { - cout << "image removed: " << path << endl; - } - - void SourcesEditor::handleVideoAdded(string& path) { - cout << "video added: " << path << endl; - } - - void SourcesEditor::handleVideoRemoved(string& path) { - cout << "video removed: " << path << endl; - } - - void SourcesEditor::handleImageLoaded(string& path) { - cout << "Image loaded: " << path << endl; - - // Test image unload - // mediaServer->unloadImage(path); - - //BaseSource* source = mediaServer->getSourceByPath(path); - //surfaceManager->getSelectedSurface()->setSource(source); - } + void SourcesEditor::handleImageAdded(std::string& path) {} + void SourcesEditor::handleImageRemoved(std::string& path) {} + void SourcesEditor::handleVideoAdded(std::string& path) {} + void SourcesEditor::handleVideoRemoved(std::string& path) {} + void SourcesEditor::handleImageLoaded(std::string& path) {} + void SourcesEditor::handleImageUnloaded(std::string& path) {} + void SourcesEditor::handleFboSourceAdded(std::string& name) {} + void SourcesEditor::handleFboSourceRemoved(std::string& name) {} + void SourcesEditor::handleFboSourceLoaded(std::string& name) {} + void SourcesEditor::handleFboSourceUnloaded(std::string& name) {} - void SourcesEditor::handleImageUnloaded(string& path) { - cout << "Image unloaded: " << path << endl; - } } } \ No newline at end of file diff --git a/src/UserInterface/SourcesEditor.h b/src/UserInterface/SourcesEditor.h index e0edecc..324d038 100644 --- a/src/UserInterface/SourcesEditor.h +++ b/src/UserInterface/SourcesEditor.h @@ -41,6 +41,7 @@ class SourcesEditor { SurfaceManager* surfaceManager; RadioList* imageSelector; RadioList* videoSelector; + RadioList* fboSelector; // Is the media server pointer local or from somewhere else? // We use this to determine if we are allowed to clear media server locally. @@ -56,18 +57,24 @@ class SourcesEditor { // Handles GUI event, whenever someone has clicked on a radio button void handleImageSelected(string& imagePath); void handleVideoSelected(string& videoPath); + void handleFboSelected(string& fboName); // Careful clearing of the media server, // clears only if the media server has been initialized locally void clearMediaServer(); // MediaServer event handlers - void handleImageAdded(string& path); - void handleImageRemoved(string& path); - void handleVideoAdded(string& path); - void handleVideoRemoved(string& path); - void handleImageLoaded(string& path); - void handleImageUnloaded(string& path); + void handleImageAdded(std::string& path); + void handleImageRemoved(std::string& path); + void handleVideoAdded(std::string& path); + void handleVideoRemoved(std::string& path); + void handleImageLoaded(std::string& path); + void handleImageUnloaded(std::string& path); + void handleFboSourceAdded(std::string& name); + void handleFboSourceRemoved(std::string& name); + void handleFboSourceLoaded(std::string& name); + void handleFboSourceUnloaded(std::string& name); + }; } } \ No newline at end of file From 7db249d890e52fdcbe3c36fda53ba37a701bcdf5 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 5 Nov 2014 16:37:15 +0100 Subject: [PATCH 07/13] 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); From d88fe23773616dad9fb52f08d0a9b8b728c399d5 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 5 Nov 2014 16:43:22 +0100 Subject: [PATCH 08/13] Add FBO source via ofxPiMapper directly insteat through getMediaServer --- example/src/ofApp.cpp | 2 +- src/MediaServer/MediaServer.h | 2 +- src/ofxPiMapper.cpp | 4 ++++ src/ofxPiMapper.h | 6 +++++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/example/src/ofApp.cpp b/example/src/ofApp.cpp index c22f0ae..6ca4ba8 100755 --- a/example/src/ofApp.cpp +++ b/example/src/ofApp.cpp @@ -7,7 +7,7 @@ void ofApp::setup() { // 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.addFboSource(customSource); piMapper.setup(); // The info layer is hidden by default, press to toggle diff --git a/src/MediaServer/MediaServer.h b/src/MediaServer/MediaServer.h index 4fb9ad7..f49f0ea 100644 --- a/src/MediaServer/MediaServer.h +++ b/src/MediaServer/MediaServer.h @@ -52,7 +52,7 @@ class MediaServer { std::string getDefaultMediaDir(int sourceType); // Do things with FBO sources - void addFboSource(FboSource& fboSource); + void addFboSource(FboSource& fboSource); // could be called also as register FBO source BaseSource* loadFboSource(std::string& fboSourceName); void unloadFboSource(std::string& fboSourceName); diff --git a/src/ofxPiMapper.cpp b/src/ofxPiMapper.cpp index 68c8e75..546002d 100644 --- a/src/ofxPiMapper.cpp +++ b/src/ofxPiMapper.cpp @@ -103,6 +103,10 @@ void ofxPiMapper::keyPressed(ofKeyEventArgs &args) { } } // keyPressed +void ofxPiMapper::addFboSource(ofx::piMapper::FboSource &fboSource) { + mediaServer.addFboSource(fboSource); +} // addFboSource + void ofxPiMapper::addTriangleSurface() { int surfaceType = ofx::piMapper::SurfaceType::TRIANGLE_SURFACE; diff --git a/src/ofxPiMapper.h b/src/ofxPiMapper.h index 5007fd4..0a7db3d 100644 --- a/src/ofxPiMapper.h +++ b/src/ofxPiMapper.h @@ -4,6 +4,7 @@ #include "SurfaceManager.h" #include "SurfaceManagerGui.h" #include "MediaServer.h" +#include "FboSource.h" #define PIMAPPER_DEF_SURFACES_XML_FILE "defaultSurfaces.xml" #define PIMAPPER_USER_SURFACES_XML_FILE "surfaces.xml" @@ -17,7 +18,10 @@ public: void draw(); // Called manually to make custom layering possible void keyPressed(ofKeyEventArgs& args); - // TODO: Move these methods to SurfaceManager + // Use this to add custom FBO source + void addFboSource(ofx::piMapper::FboSource& fboSource); + + // TODO: Copy/move these methods to SurfaceManager void addTriangleSurface(); void addQuadSurface(); From 99f7594cb598fa6bff8c3daf7332e6d570413201 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 5 Nov 2014 20:29:29 +0100 Subject: [PATCH 09/13] Fix texture coord update for quad surface [issue 15] --- src/UserInterface/TextureEditor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UserInterface/TextureEditor.cpp b/src/UserInterface/TextureEditor.cpp index f7be105..9e409a4 100755 --- a/src/UserInterface/TextureEditor.cpp +++ b/src/UserInterface/TextureEditor.cpp @@ -167,7 +167,7 @@ void TextureEditor::moveTexCoords(ofVec2f by) { surface->getSource()->getTexture()->getHeight()); for (int i = 0; i < texCoords.size(); i++) { joints[i]->position += by; - texCoords[i] = joints[i]->position / textureSize; + surface->setTexCoord(i, joints[i]->position / textureSize); } } From 9388a5c7575161b2d4888fd806ce8ec2fcda2372 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 5 Nov 2014 20:57:49 +0100 Subject: [PATCH 10/13] Update default surfaces (add video and fbo sources to surfaces) --- example/bin/data/defaultSurfaces.xml | 152 +++++++++++++++++---------- 1 file changed, 97 insertions(+), 55 deletions(-) diff --git a/example/bin/data/defaultSurfaces.xml b/example/bin/data/defaultSurfaces.xml index 4bcc56a..6c1ae48 100755 --- a/example/bin/data/defaultSurfaces.xml +++ b/example/bin/data/defaultSurfaces.xml @@ -2,137 +2,179 @@ - 250.000000000 - 34.000000000 + 26.396118164 + 223.170288086 - 374.000000000 - 201.000000000 + 241.000000000 + 118.000000000 - 535.000000000 - 35.000000000 + 213.630920410 + 352.926849365 - 0.101999998 - 0.335999995 + 0.251666665 + 0.090000004 - 0.328000009 - 0.689999998 + 0.449999988 + 0.696666658 - 0.705999970 - 0.393999994 + 0.870000005 + 0.173333332 image - image1.jpg + image5.jpg - 24.396121979 - 259.170288086 + 84.709846497 + 462.636596680 - 250.000000000 - 34.000000000 + 293.630920410 + 228.926849365 - 214.630920410 - 282.926849365 + 33.396121979 + 271.170288086 - 0.251666665 - 0.090000004 + 0.981523871 + 0.471785098 - 0.449999988 - 0.696666658 + 0.245601788 + 0.110941604 - 0.870000005 - 0.173333332 + 0.662217021 + 0.714698017 - image - image5.jpg + fbo + Custom FBO Source - 75.709846497 - 450.636596680 + 510.148498535 + 97.815002441 - 214.630920410 - 282.926849365 + 372.000000000 + 434.000000000 - 24.396121979 - 259.170288086 + 159.000000000 + 158.000000000 - 0.981523871 - 0.471785098 + 0.331067860 + 0.732035518 - 0.245601788 - 0.110941604 + 0.782209992 + 0.181442097 - 0.662217021 - 0.714698017 + 0.877761841 + 0.894570410 - image - image4.jpg + video + test.mov - 527.148498535 - 277.815002441 + 152.000000000 + 343.000000000 + + + 377.000000000 + 246.000000000 - 320.170959473 - 461.102355957 + 538.000000000 + 490.000000000 - 285.250427246 - 209.424682617 + 160.000000000 + 551.000000000 - 0.031067841 - 0.511202157 + 0.172656253 + 0.134333342 - 0.450178742 - 0.116164304 + 0.480374992 + 0.134333342 - 0.543386877 - 0.609848201 + 0.480374992 + 0.570833325 + + + 0.172656253 + 0.570833325 - image - none + video + test.mov + + + + + + 509.000000000 + 50.000000000 + + + 629.000000000 + 383.000000000 + + + 276.000000000 + 358.000000000 + + + + + 0.500000000 + 0.000000000 + + + 1.000000000 + 1.000000000 + + + 0.000000000 + 1.000000000 + + + + fbo + Custom FBO Source From 5c2ac7ce8828c86bee1bc858082c489ce9bee987 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 5 Nov 2014 20:58:34 +0100 Subject: [PATCH 11/13] Hide info on startup, but leave commented code --- example/src/ofApp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/src/ofApp.cpp b/example/src/ofApp.cpp index 6ca4ba8..45d6c8a 100755 --- a/example/src/ofApp.cpp +++ b/example/src/ofApp.cpp @@ -11,7 +11,7 @@ void ofApp::setup() { piMapper.setup(); // The info layer is hidden by default, press to toggle - piMapper.showInfo(); + // piMapper.showInfo(); } void ofApp::draw() { From dde58195761e930cee31a7feea063bae9613187a Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 5 Nov 2014 21:12:59 +0100 Subject: [PATCH 12/13] Add -f flag option to RPi version of he example --- example/src/main.cpp | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/example/src/main.cpp b/example/src/main.cpp index 0e0278d..c8a3c90 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -1,12 +1,34 @@ #include "ofMain.h" #include "ofApp.h" +#include -int main() -{ #ifdef TARGET_RASPBERRY_PI - ofSetupOpenGL(600, 500, OF_FULLSCREEN); +// Accept arguments in the Pi version +int main(int argc, char* argv[]) { + + bool fullscreen = false; + + if (argc > 0) { + std::string fullscreenFlag = "-f"; + for (int i = 0; i < argc; i++) { + if (strcmp(argv[i], fullscreenFlag.c_str()) == 0) { + fullscreen = true; + break; + } + } + } + + if (fullscreen) { + ofSetupOpenGL(600, 500, OF_FULLSCREEN); + } else { + ofSetupOpenGL(800, 450, OF_WINDOW); + } + + ofRunApp(new ofApp()); +} #else - ofSetupOpenGL(600, 500, OF_WINDOW); +int main() { + ofSetupOpenGL(800, 600, OF_WINDOW); + ofRunApp(new ofApp()); +} #endif - ofRunApp(new ofApp()); -} \ No newline at end of file From c20e9c45a798c3abba711ca5f6fc925799f5a563 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Wed, 5 Nov 2014 22:05:20 +0100 Subject: [PATCH 13/13] Update readme with version relevant info --- README.md | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 54ef901..ace762a 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,18 @@ ofxPiMapper This project is an attempt to create optimized version of an openFrameworks projection mapping addon for the Raspberry Pi. It is also my master thesis project at Aalto University, School of Arts, Design and Architecture (Helsinki Media Lab). -ofxPiMapper is mainly for people who want to use the Raspberry Pi as a cheaper way to create standalone mapping installations. Let's say someone has 10 generative mapping pieces and gets an offer to exhibit them in an art gallery, museum or any other kind of place. 10 Mac computers? No! PiMapper is here to save you! +ofxPiMapper is mainly for people who want to use the Raspberry Pi as a cheaper way to create standalone mapping installations. Let's say someone has 10 generative mapping pieces and gets an offer to exhibit them in an art gallery, museum or any other kind of place. 10 expensive computers? No! PiMapper is here to save you! -The addon itself is intended to be flexible as the separate components of it can be reusable. The main example of the addon can be used as a standalone application for experimenting, testing as well as production state of a project. If you need to save memory and processing power, reusing ofxPiMapper classes without adding the GUI layer can help you. +ofxPiMapper features FBO sources that allow you to create generative openFrameworks patches to be used with ofxPiMapper. Extend the `FboSource` class, override `setup()`, `update()` and `draw()` methods and then create an instance of your custom source to add it to your ofxPiMapper object. -As ofxPiMapper is optimized for the Pi, there is no doubt that it will run smoothly on other machines. It has been tested on OS X so far. +``` +ofxPiMapper* mapper = new ofxPiMapper(); +CustomSource* source = new CustomSource(); +mapper.addFboSource(source); +mapper.setup(); // Setup must be run after adding the FBO source +``` + +Since version 0.2.0 ofxPiMapper supports video sources. Development ----------- @@ -107,10 +114,7 @@ Dependencies To install dependencies, `cd` into `openFrameworks/addons` directory and execute the following: ``` -git clone https://github.com/jvcleave/ofxOMXPlayer.git -... many lines inbetween -git clone https://github.com/bakercp/ofxIO.git -... many lines here as well +git clone https://github.com/jvcleave/ofxOMXPlayer.git && git clone https://github.com/bakercp/ofxIO.git ``` And you are good to go! @@ -157,7 +161,17 @@ A short wishlist for the next releases: - Refined directoryWatcher mechanism, source lists should react on added and removed files - OSC remote control module + - Webserver with simple interface for remote mapping + - Syphon source for Mac + - Spout source for Win + - Streaming source for RPi (fb sharing, network streams...) - Even better structure + +### Version 0.2.1 (2014-11-05): + - Added single instance feature. Now you can use ofxPiMapper as single object for your project. + - Added FBO source. You can create a custom openFrameworks application for piMapper by extending the FboSource class. Add/register your custom object as source in piMapper and you will be able to select it in the source editor. Source is saved and loaded from the settings as well. + - Fixed issue #15 + - Added -f (fullscreen) flag for the Raspberry Pi version. Use `./yourApp -f` to launch it fullscreen on start. ### Version 0.2.0 (2014-10-18): - Added logo (thanks [Irina Spicaka](http://irina.spicaka.info/)) @@ -171,7 +185,7 @@ A short wishlist for the next releases: ### Version 0.1.4 (2014-07-10): - Added fbo texture example - Replaced the main example with the fbo texture one - - Added simple quad surface + - Added simple quad surface (thanks [sebllll](https://github.com/sebllll)) - Fixed a couple of bugs - Introduced new branching model - Added joint snapping