diff --git a/R20.055/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/UserInterfaceState.xcuserstate b/R20.055/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index db0429e..0000000 Binary files a/R20.055/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/R20.055/SyphonR20/generated/hxx/interface_registration.cpp b/R20/SyphonR20/generated/hxx/interface_registration.cpp similarity index 100% rename from R20.055/SyphonR20/generated/hxx/interface_registration.cpp rename to R20/SyphonR20/generated/hxx/interface_registration.cpp diff --git a/R20.055/SyphonR20/generated/hxx/reflection_registration.cpp b/R20/SyphonR20/generated/hxx/reflection_registration.cpp similarity index 100% rename from R20.055/SyphonR20/generated/hxx/reflection_registration.cpp rename to R20/SyphonR20/generated/hxx/reflection_registration.cpp diff --git a/R20.055/SyphonR20/generated/hxx/reflection_virtual_registration.cpp b/R20/SyphonR20/generated/hxx/reflection_virtual_registration.cpp similarity index 100% rename from R20.055/SyphonR20/generated/hxx/reflection_virtual_registration.cpp rename to R20/SyphonR20/generated/hxx/reflection_virtual_registration.cpp diff --git a/R20.055/SyphonR20/generated/hxx/register.cpp b/R20/SyphonR20/generated/hxx/register.cpp similarity index 100% rename from R20.055/SyphonR20/generated/hxx/register.cpp rename to R20/SyphonR20/generated/hxx/register.cpp diff --git a/R20.055/SyphonR20/generated/hxx/register.hxx b/R20/SyphonR20/generated/hxx/register.hxx similarity index 100% rename from R20.055/SyphonR20/generated/hxx/register.hxx rename to R20/SyphonR20/generated/hxx/register.hxx diff --git a/R20.055/SyphonR20/generated/hxx/registration_com_studioavante_SyphonR20.hxx b/R20/SyphonR20/generated/hxx/registration_com_studioavante_SyphonR20.hxx similarity index 100% rename from R20.055/SyphonR20/generated/hxx/registration_com_studioavante_SyphonR20.hxx rename to R20/SyphonR20/generated/hxx/registration_com_studioavante_SyphonR20.hxx diff --git a/R20.055/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.ph b/R20/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.ph similarity index 100% rename from R20.055/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.ph rename to R20/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.ph diff --git a/R20.055/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.ph b/R20/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.ph similarity index 100% rename from R20.055/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.ph rename to R20/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.ph diff --git a/R20.055/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.ph b/R20/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.ph similarity index 100% rename from R20.055/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.ph rename to R20/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.ph diff --git a/R20.055/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.ph b/R20/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.ph similarity index 100% rename from R20.055/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.ph rename to R20/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.ph diff --git a/R20.055/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.ph b/R20/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.ph similarity index 100% rename from R20.055/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.ph rename to R20/SyphonR20/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.ph diff --git a/R20.055/SyphonR20/generated/parsed/Syphon/src/SyphonC4DServer.ph b/R20/SyphonR20/generated/parsed/Syphon/src/SyphonC4DServer.ph similarity index 100% rename from R20.055/SyphonR20/generated/parsed/Syphon/src/SyphonC4DServer.ph rename to R20/SyphonR20/generated/parsed/Syphon/src/SyphonC4DServer.ph diff --git a/R20.055/SyphonR20/generated/parsed/main.ph b/R20/SyphonR20/generated/parsed/main.ph similarity index 100% rename from R20.055/SyphonR20/generated/parsed/main.ph rename to R20/SyphonR20/generated/parsed/main.ph diff --git a/R20.055/SyphonR20/generated/sourceprocessor.msg b/R20/SyphonR20/generated/sourceprocessor.msg similarity index 100% rename from R20.055/SyphonR20/generated/sourceprocessor.msg rename to R20/SyphonR20/generated/sourceprocessor.msg diff --git a/R20.055/SyphonR20/generated/sourceprocessor.stamp b/R20/SyphonR20/generated/sourceprocessor.stamp similarity index 100% rename from R20.055/SyphonR20/generated/sourceprocessor.stamp rename to R20/SyphonR20/generated/sourceprocessor.stamp diff --git a/R20.055/SyphonR20/project/projectdefinition.txt b/R20/SyphonR20/project/projectdefinition.txt similarity index 100% rename from R20.055/SyphonR20/project/projectdefinition.txt rename to R20/SyphonR20/project/projectdefinition.txt diff --git a/R20.055/SyphonR20/project/syphonr20.xcodeproj/project.pbxproj b/R20/SyphonR20/project/syphonr20.xcodeproj/project.pbxproj similarity index 100% rename from R20.055/SyphonR20/project/syphonr20.xcodeproj/project.pbxproj rename to R20/SyphonR20/project/syphonr20.xcodeproj/project.pbxproj diff --git a/R20.055/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/R20/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from R20.055/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to R20/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/R20/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/UserInterfaceState.xcuserstate b/R20/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..553db35 Binary files /dev/null and b/R20/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/R20.055/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/WorkspaceSettings.xcsettings b/R20/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/WorkspaceSettings.xcsettings similarity index 100% rename from R20.055/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/WorkspaceSettings.xcsettings rename to R20/SyphonR20/project/syphonr20.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/WorkspaceSettings.xcsettings diff --git a/R20.055/SyphonR20/project/syphonr20.xcodeproj/xcshareddata/xcschemes/syphonr20.xcscheme b/R20/SyphonR20/project/syphonr20.xcodeproj/xcshareddata/xcschemes/syphonr20.xcscheme similarity index 100% rename from R20.055/SyphonR20/project/syphonr20.xcodeproj/xcshareddata/xcschemes/syphonr20.xcscheme rename to R20/SyphonR20/project/syphonr20.xcodeproj/xcshareddata/xcschemes/syphonr20.xcscheme diff --git a/R20.055/SyphonR20/project/syphonr20.xcodeproj/xcuserdata/roger.xcuserdatad/xcschemes/xcschememanagement.plist b/R20/SyphonR20/project/syphonr20.xcodeproj/xcuserdata/roger.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 100% rename from R20.055/SyphonR20/project/syphonr20.xcodeproj/xcuserdata/roger.xcuserdatad/xcschemes/xcschememanagement.plist rename to R20/SyphonR20/project/syphonr20.xcodeproj/xcuserdata/roger.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/R20.055/SyphonR20/res/c4d_symbols.h b/R20/SyphonR20/res/c4d_symbols.h similarity index 100% rename from R20.055/SyphonR20/res/c4d_symbols.h rename to R20/SyphonR20/res/c4d_symbols.h diff --git a/R20.055/SyphonR20/res/description/SyphonPlugin.h b/R20/SyphonR20/res/description/SyphonPlugin.h similarity index 100% rename from R20.055/SyphonR20/res/description/SyphonPlugin.h rename to R20/SyphonR20/res/description/SyphonPlugin.h diff --git a/R20.055/SyphonR20/res/description/SyphonPlugin.res b/R20/SyphonR20/res/description/SyphonPlugin.res similarity index 100% rename from R20.055/SyphonR20/res/description/SyphonPlugin.res rename to R20/SyphonR20/res/description/SyphonPlugin.res diff --git a/R20.055/SyphonR20/res/strings_us/c4d_strings.str b/R20/SyphonR20/res/strings_us/c4d_strings.str similarity index 100% rename from R20.055/SyphonR20/res/strings_us/c4d_strings.str rename to R20/SyphonR20/res/strings_us/c4d_strings.str diff --git a/R20.055/SyphonR20/res/strings_us/description/SyphonPlugin.str b/R20/SyphonR20/res/strings_us/description/SyphonPlugin.str similarity index 100% rename from R20.055/SyphonR20/res/strings_us/description/SyphonPlugin.str rename to R20/SyphonR20/res/strings_us/description/SyphonPlugin.str diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Headers b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Headers similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Headers rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Headers diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Resources b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Resources similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Resources rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Resources diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Syphon b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Syphon similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Syphon rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Syphon diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.h b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.h similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.h rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.h diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.h b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.h similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.h rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.h diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.h b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.h similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.h rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.h diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.h b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.h similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.h rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.h diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.h b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.h similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.h rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.h diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Resources/English.lproj/InfoPlist.strings b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Resources/English.lproj/InfoPlist.strings similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Resources/English.lproj/InfoPlist.strings rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Resources/English.lproj/InfoPlist.strings diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Resources/Info.plist b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Resources/Info.plist similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Resources/Info.plist rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Resources/Info.plist diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Syphon b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Syphon similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Syphon rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/A/Syphon diff --git a/R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/Current b/R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/Current similarity index 100% rename from R20.055/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/Current rename to R20/SyphonR20/source/Syphon/lib/Syphon.framework/Versions/Current diff --git a/R20.055/SyphonR20/source/Syphon/src/SyphonC4DServer.h b/R20/SyphonR20/source/Syphon/src/SyphonC4DServer.h similarity index 100% rename from R20.055/SyphonR20/source/Syphon/src/SyphonC4DServer.h rename to R20/SyphonR20/source/Syphon/src/SyphonC4DServer.h diff --git a/R20.055/SyphonR20/source/Syphon/src/SyphonC4DServer.mm b/R20/SyphonR20/source/Syphon/src/SyphonC4DServer.mm similarity index 100% rename from R20.055/SyphonR20/source/Syphon/src/SyphonC4DServer.mm rename to R20/SyphonR20/source/Syphon/src/SyphonC4DServer.mm diff --git a/R20.055/SyphonR20/source/SyphonVP.cpp b/R20/SyphonR20/source/SyphonVP.cpp similarity index 100% rename from R20.055/SyphonR20/source/SyphonVP.cpp rename to R20/SyphonR20/source/SyphonVP.cpp diff --git a/R20.055/SyphonR20/source/install.sh b/R20/SyphonR20/source/install.sh similarity index 100% rename from R20.055/SyphonR20/source/install.sh rename to R20/SyphonR20/source/install.sh diff --git a/R20.055/SyphonR20/source/main.cpp b/R20/SyphonR20/source/main.cpp similarity index 100% rename from R20.055/SyphonR20/source/main.cpp rename to R20/SyphonR20/source/main.cpp diff --git a/R20.055/SyphonR20/source/main.h b/R20/SyphonR20/source/main.h similarity index 100% rename from R20.055/SyphonR20/source/main.h rename to R20/SyphonR20/source/main.h diff --git a/R20.055/SyphonR20/syphonr20.xlib b/R20/SyphonR20/syphonr20.xlib similarity index 100% rename from R20.055/SyphonR20/syphonr20.xlib rename to R20/SyphonR20/syphonr20.xlib diff --git a/R20/SyphonR21/generated/hxx/interface_registration.cpp b/R20/SyphonR21/generated/hxx/interface_registration.cpp new file mode 100644 index 0000000..954f88f --- /dev/null +++ b/R20/SyphonR21/generated/hxx/interface_registration.cpp @@ -0,0 +1,3 @@ +#define MAXON_REGISTRATION_EXCLUDE_REFLECTION +#define MAXON_REGISTRATION_EXCLUDE_REFLECTION_NONVIRTUAL +#include "registration_com_studioavante_SyphonR20.hxx" diff --git a/R20/SyphonR21/generated/hxx/reflection_registration.cpp b/R20/SyphonR21/generated/hxx/reflection_registration.cpp new file mode 100644 index 0000000..8ed51c5 --- /dev/null +++ b/R20/SyphonR21/generated/hxx/reflection_registration.cpp @@ -0,0 +1,2 @@ +#define MAXON_REGISTRATION_EXCLUDE_INTERFACES +#define MAXON_REGISTRATION_EXCLUDE_REFLECTION diff --git a/R20/SyphonR21/generated/hxx/reflection_virtual_registration.cpp b/R20/SyphonR21/generated/hxx/reflection_virtual_registration.cpp new file mode 100644 index 0000000..0be22b3 --- /dev/null +++ b/R20/SyphonR21/generated/hxx/reflection_virtual_registration.cpp @@ -0,0 +1,2 @@ +#define MAXON_REGISTRATION_EXCLUDE_INTERFACES +#define MAXON_REGISTRATION_EXCLUDE_REFLECTION_NONVIRTUAL diff --git a/R20/SyphonR21/generated/hxx/register.cpp b/R20/SyphonR21/generated/hxx/register.cpp new file mode 100644 index 0000000..8339408 --- /dev/null +++ b/R20/SyphonR21/generated/hxx/register.cpp @@ -0,0 +1 @@ +#include "register.hxx" diff --git a/R20/SyphonR21/generated/hxx/register.hxx b/R20/SyphonR21/generated/hxx/register.hxx new file mode 100644 index 0000000..e703946 --- /dev/null +++ b/R20/SyphonR21/generated/hxx/register.hxx @@ -0,0 +1,23 @@ +/* + DON'T EDIT THIS FILE! + It has been created and is updated automatically by the interface processor. + It has to be included by the register.cpp file of the project in order for the automatic registration to work. +*/ +#define PRIVATE_MAXON_REGISTRATION_UNIT + + +#ifndef PRIVATE_MAXON_REGISTRATION_FRAMEWORK +#define PRIVATE_MAXON_DEFINE_MODULE_INFO_FLAGS +#include "maxon/register.h" +#endif + + +#ifdef PRIVATE_MAXON_REGISTRATION_FRAMEWORK + + +#else + +static maxon::Id g_usedFrameworks[] = {maxon::Id("net.maxon.c4d.cinema.framework"), maxon::Id("net.maxon.core.framework"), maxon::Id("net.maxon.network.framework")}; +static maxon::SetUsedFrameworks g_setUsedFrameworks(PRIVATE_MAXON_MODULE, g_usedFrameworks); + +#endif diff --git a/R20/SyphonR21/generated/hxx/registration_com_studioavante_SyphonR20.hxx b/R20/SyphonR21/generated/hxx/registration_com_studioavante_SyphonR20.hxx new file mode 100644 index 0000000..a6df2a1 --- /dev/null +++ b/R20/SyphonR21/generated/hxx/registration_com_studioavante_SyphonR20.hxx @@ -0,0 +1,10 @@ +// Include this file in a cpp file of a single module to add the framework registration of com.studioavante.SyphonR20 to the module. + +#define PRIVATE_MAXON_REGISTRATION_FRAMEWORK +#if !(defined(MAXON_REGISTRATION_EXCLUDE_REFLECTION) && defined(MAXON_REGISTRATION_EXCLUDE_REFLECTION_NONVIRTUAL)) +#include "maxon/reflection_registration.h" +#else +#include "maxon/apibase.h" +#endif +#undef MAXON_DEPENDENCY_ENABLE +#include "register.hxx" diff --git a/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.ph b/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.ph new file mode 100644 index 0000000..e3513df Binary files /dev/null and b/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.ph differ diff --git a/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.ph b/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.ph new file mode 100644 index 0000000..c597cd8 Binary files /dev/null and b/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.ph differ diff --git a/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.ph b/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.ph new file mode 100644 index 0000000..38ccc67 Binary files /dev/null and b/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.ph differ diff --git a/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.ph b/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.ph new file mode 100644 index 0000000..0780913 Binary files /dev/null and b/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.ph differ diff --git a/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.ph b/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.ph new file mode 100644 index 0000000..d6f5689 Binary files /dev/null and b/R20/SyphonR21/generated/parsed/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.ph differ diff --git a/R20/SyphonR21/generated/parsed/Syphon/src/SyphonC4DServer.ph b/R20/SyphonR21/generated/parsed/Syphon/src/SyphonC4DServer.ph new file mode 100644 index 0000000..2e66d40 Binary files /dev/null and b/R20/SyphonR21/generated/parsed/Syphon/src/SyphonC4DServer.ph differ diff --git a/R20/SyphonR21/generated/parsed/main.ph b/R20/SyphonR21/generated/parsed/main.ph new file mode 100644 index 0000000..bfcba80 Binary files /dev/null and b/R20/SyphonR21/generated/parsed/main.ph differ diff --git a/R20/SyphonR21/generated/sourceprocessor.msg b/R20/SyphonR21/generated/sourceprocessor.msg new file mode 100644 index 0000000..e69de29 diff --git a/R20/SyphonR21/generated/sourceprocessor.stamp b/R20/SyphonR21/generated/sourceprocessor.stamp new file mode 100644 index 0000000..819ddef --- /dev/null +++ b/R20/SyphonR21/generated/sourceprocessor.stamp @@ -0,0 +1,10 @@ +Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.h +main.cpp +Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.h +Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.h +Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.h +Syphon/src/SyphonC4DServer.h +Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.h +SyphonVP.cpp +Syphon/src/SyphonC4DServer.mm +main.h diff --git a/R20/SyphonR21/project/projectdefinition.txt b/R20/SyphonR21/project/projectdefinition.txt new file mode 100644 index 0000000..e5c2eb5 --- /dev/null +++ b/R20/SyphonR21/project/projectdefinition.txt @@ -0,0 +1,20 @@ +// Supported platforms - can be [Win64;OSX] +Platform=OSX + +// Type of project - can be [Lib;DLL;App] +Type=DLL + +// API dependencies +APIS=cinema.framework;core.framework;network.framework; + +// Classic C4D API +C4D=true + +stylecheck=false + +// Custom ID +ModuleId=com.studioavante.SyphonR20 + +AdditionalLinkOptions=-headerpad_max_install_names + +FRAMEWORK_SEARCH_PATHS=../source/Syphon/lib diff --git a/R20/SyphonR21/project/syphonr21.xcodeproj/project.pbxproj b/R20/SyphonR21/project/syphonr21.xcodeproj/project.pbxproj new file mode 100644 index 0000000..e2eb5da --- /dev/null +++ b/R20/SyphonR21/project/syphonr21.xcodeproj/project.pbxproj @@ -0,0 +1,552 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + A090ADE3D41BCBE160010000 /* SyphonVP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A090ADE3D41BCBE160000000 /* SyphonVP.cpp */; }; + A090ADE3D445B2391E010000 /* SyphonC4DServer.mm in Sources */ = {isa = PBXBuildFile; fileRef = A090ADE3D445B2391E000000 /* SyphonC4DServer.mm */; }; + A090ADE3D46542540E010000 /* libmesh_misc.framework.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A090ADE3D46542540E000000 /* libmesh_misc.framework.a */; }; + A090ADE3D476513E3E010000 /* libnetwork.framework.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A090ADE3D476513E3E000000 /* libnetwork.framework.a */; }; + A090ADE3D4D80552BB010000 /* interface_registration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A090ADE3D4D80552BB000000 /* interface_registration.cpp */; }; + A090ADE3D4D93CCD9F010000 /* register.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A090ADE3D4D93CCD9F000000 /* register.cpp */; }; + A090ADE3D4E921D362010000 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A090ADE3D4E921D362000000 /* main.cpp */; }; + A090ADE3D4F470FF41010000 /* libcinema.framework.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A090ADE3D4F470FF41000000 /* libcinema.framework.a */; }; + A090ADE3D4F4AB3A6F010000 /* libcore.framework.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A090ADE3D4F4AB3A6F000000 /* libcore.framework.a */; }; + DB5AB1BF232D91A000A7ED27 /* Syphon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB5AB1BE232D91A000A7ED27 /* Syphon.framework */; }; + DB5AB1C2232D91BE00A7ED27 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB5AB1C1232D91BE00A7ED27 /* OpenGL.framework */; }; + DB5AB1C8232D958300A7ED27 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB5AB1C7232D958300A7ED27 /* AppKit.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + A090ADE3D46542540E040000 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A090ADE3D46542540E020000 /* mesh_misc.framework.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A08C5CDEA36542540E7B0000; + remoteInfo = mesh_misc.framework; + }; + A090ADE3D46542540E050000 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A090ADE3D46542540E020000 /* mesh_misc.framework.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = A08C5CDEA36542540E000000; + remoteInfo = mesh_misc.framework; + }; + A090ADE3D476513E3E040000 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A090ADE3D476513E3E020000 /* network.framework.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A08C5CDEA376513E3E7B0000; + remoteInfo = network.framework; + }; + A090ADE3D476513E3E050000 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A090ADE3D476513E3E020000 /* network.framework.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = A08C5CDEA376513E3E000000; + remoteInfo = network.framework; + }; + A090ADE3D4F470FF41040000 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A090ADE3D4F470FF41020000 /* cinema.framework.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A08C5CDEA3F470FF417B0000; + remoteInfo = cinema.framework; + }; + A090ADE3D4F470FF41050000 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A090ADE3D4F470FF41020000 /* cinema.framework.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = A08C5CDEA3F470FF41000000; + remoteInfo = cinema.framework; + }; + A090ADE3D4F4AB3A6F040000 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A090ADE3D4F4AB3A6F020000 /* core.framework.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A08C5CDEA3F4AB3A6F7B0000; + remoteInfo = core.framework; + }; + A090ADE3D4F4AB3A6F050000 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A090ADE3D4F4AB3A6F020000 /* core.framework.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = A08C5CDEA3F4AB3A6F000000; + remoteInfo = core.framework; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + A08C5CDEA390ADE3D47B0000 /* syphonr21.xlib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = syphonr21.xlib; sourceTree = BUILT_PRODUCTS_DIR; }; + A08C5CDEA390ADE3D47B0100 /* libsyphonr21_static.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libsyphonr21_static.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A090ADE3D400000000000000 /* debugbase.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = debugbase.xcconfig; path = ../../frameworks/settings/debugbase.xcconfig; sourceTree = SOURCE_ROOT; }; + A090ADE3D400000000050000 /* releasebase.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = releasebase.xcconfig; path = ../../frameworks/settings/releasebase.xcconfig; sourceTree = SOURCE_ROOT; }; + A090ADE3D41837B5E7000000 /* main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = main.h; path = ../source/main.h; sourceTree = SOURCE_ROOT; }; + A090ADE3D41BCBE160000000 /* SyphonVP.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SyphonVP.cpp; path = ../source/SyphonVP.cpp; sourceTree = SOURCE_ROOT; }; + A090ADE3D4448F46FA000000 /* c4d_symbols.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = c4d_symbols.h; path = ../res/c4d_symbols.h; sourceTree = SOURCE_ROOT; }; + A090ADE3D445B2391E000000 /* SyphonC4DServer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SyphonC4DServer.mm; path = ../source/Syphon/src/SyphonC4DServer.mm; sourceTree = SOURCE_ROOT; }; + A090ADE3D46542540E020000 /* mesh_misc.framework.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = mesh_misc.framework.xcodeproj; path = ../../frameworks/mesh_misc.framework/project/mesh_misc.framework.xcodeproj; sourceTree = SOURCE_ROOT; }; + A090ADE3D476513E3E020000 /* network.framework.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = network.framework.xcodeproj; path = ../../frameworks/network.framework/project/network.framework.xcodeproj; sourceTree = SOURCE_ROOT; }; + A090ADE3D4D80552BB000000 /* interface_registration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = interface_registration.cpp; path = ../generated/hxx/interface_registration.cpp; sourceTree = SOURCE_ROOT; }; + A090ADE3D4D93CCD9F000000 /* register.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = register.cpp; path = ../generated/hxx/register.cpp; sourceTree = SOURCE_ROOT; }; + A090ADE3D4E921D362000000 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = ../source/main.cpp; sourceTree = SOURCE_ROOT; }; + A090ADE3D4F1BB6D2A000000 /* SyphonC4DServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SyphonC4DServer.h; path = ../source/Syphon/src/SyphonC4DServer.h; sourceTree = SOURCE_ROOT; }; + A090ADE3D4F25DCDEC000000 /* SyphonPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SyphonPlugin.h; path = ../res/description/SyphonPlugin.h; sourceTree = SOURCE_ROOT; }; + A090ADE3D4F470FF41020000 /* cinema.framework.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = cinema.framework.xcodeproj; path = ../../frameworks/cinema.framework/project/cinema.framework.xcodeproj; sourceTree = SOURCE_ROOT; }; + A090ADE3D4F4AB3A6F020000 /* core.framework.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = core.framework.xcodeproj; path = ../../frameworks/core.framework/project/core.framework.xcodeproj; sourceTree = SOURCE_ROOT; }; + DB5AB1BE232D91A000A7ED27 /* Syphon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Syphon.framework; sourceTree = ""; }; + DB5AB1C1232D91BE00A7ED27 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; + DB5AB1C7232D958300A7ED27 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + A090ADE3D4000000000F0000 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DB5AB1C8232D958300A7ED27 /* AppKit.framework in Frameworks */, + DB5AB1BF232D91A000A7ED27 /* Syphon.framework in Frameworks */, + DB5AB1C2232D91BE00A7ED27 /* OpenGL.framework in Frameworks */, + A090ADE3D46542540E010000 /* libmesh_misc.framework.a in Frameworks */, + A090ADE3D476513E3E010000 /* libnetwork.framework.a in Frameworks */, + A090ADE3D4F470FF41010000 /* libcinema.framework.a in Frameworks */, + A090ADE3D4F4AB3A6F010000 /* libcore.framework.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + A090ADE3D400000000140000 /* libs */ = { + isa = PBXGroup; + children = ( + A090ADE3D4F470FF41020000 /* cinema.framework.xcodeproj */, + A090ADE3D4F4AB3A6F020000 /* core.framework.xcodeproj */, + A090ADE3D46542540E020000 /* mesh_misc.framework.xcodeproj */, + A090ADE3D476513E3E020000 /* network.framework.xcodeproj */, + ); + name = libs; + sourceTree = ""; + }; + A090ADE3D400000000190000 /* configurations */ = { + isa = PBXGroup; + children = ( + A090ADE3D400000000000000 /* debugbase.xcconfig */, + A090ADE3D400000000050000 /* releasebase.xcconfig */, + ); + name = configurations; + sourceTree = ""; + }; + A090ADE3D4000000001E0000 = { + isa = PBXGroup; + children = ( + A090ADE3D400000000190000 /* configurations */, + A090ADE3D4111A998F000000 /* generated */, + A090ADE3D400000000140000 /* libs */, + A090ADE3D400000000230000 /* products */, + A090ADE3D40001B8A0000000 /* res */, + A090ADE3D4CA90681B000000 /* source */, + DB5AB1C0232D91BD00A7ED27 /* Frameworks */, + ); + sourceTree = ""; + }; + A090ADE3D400000000230000 /* products */ = { + isa = PBXGroup; + children = ( + A08C5CDEA390ADE3D47B0100 /* libsyphonr21_static.a */, + A08C5CDEA390ADE3D47B0000 /* syphonr21.xlib */, + ); + name = products; + sourceTree = ""; + }; + A090ADE3D40001B8A0000000 /* res */ = { + isa = PBXGroup; + children = ( + A090ADE3D447E4A90D000000 /* description */, + A090ADE3D4448F46FA000000 /* c4d_symbols.h */, + ); + name = res; + path = ../res; + sourceTree = SOURCE_ROOT; + }; + A090ADE3D4111A998F000000 /* generated */ = { + isa = PBXGroup; + children = ( + A090ADE3D4681C2CE8000000 /* hxx */, + ); + name = generated; + path = ../generated; + sourceTree = SOURCE_ROOT; + }; + A090ADE3D423CA1DB1000000 /* Syphon */ = { + isa = PBXGroup; + children = ( + A090ADE3D4D148DD27000000 /* lib */, + A090ADE3D4D148F886000000 /* src */, + ); + name = Syphon; + path = ../source/Syphon; + sourceTree = SOURCE_ROOT; + }; + A090ADE3D447E4A90D000000 /* description */ = { + isa = PBXGroup; + children = ( + A090ADE3D4F25DCDEC000000 /* SyphonPlugin.h */, + ); + name = description; + path = ../res/description; + sourceTree = SOURCE_ROOT; + }; + A090ADE3D46542540E280000 /* products */ = { + isa = PBXGroup; + children = ( + A090ADE3D46542540E000000 /* libmesh_misc.framework.a */, + ); + name = products; + sourceTree = ""; + }; + A090ADE3D4681C2CE8000000 /* hxx */ = { + isa = PBXGroup; + children = ( + A090ADE3D4D80552BB000000 /* interface_registration.cpp */, + A090ADE3D4D93CCD9F000000 /* register.cpp */, + ); + name = hxx; + path = ../generated/hxx; + sourceTree = SOURCE_ROOT; + }; + A090ADE3D476513E3E280000 /* products */ = { + isa = PBXGroup; + children = ( + A090ADE3D476513E3E000000 /* libnetwork.framework.a */, + ); + name = products; + sourceTree = ""; + }; + A090ADE3D4CA90681B000000 /* source */ = { + isa = PBXGroup; + children = ( + A090ADE3D423CA1DB1000000 /* Syphon */, + A090ADE3D4E921D362000000 /* main.cpp */, + A090ADE3D41837B5E7000000 /* main.h */, + A090ADE3D41BCBE160000000 /* SyphonVP.cpp */, + ); + name = source; + path = ../source; + sourceTree = SOURCE_ROOT; + }; + A090ADE3D4D148DD27000000 /* lib */ = { + isa = PBXGroup; + children = ( + DB5AB1BE232D91A000A7ED27 /* Syphon.framework */, + ); + name = lib; + path = ../source/Syphon/lib; + sourceTree = SOURCE_ROOT; + }; + A090ADE3D4D148F886000000 /* src */ = { + isa = PBXGroup; + children = ( + A090ADE3D4F1BB6D2A000000 /* SyphonC4DServer.h */, + A090ADE3D445B2391E000000 /* SyphonC4DServer.mm */, + ); + name = src; + path = ../source/Syphon/src; + sourceTree = SOURCE_ROOT; + }; + A090ADE3D4F470FF41280000 /* products */ = { + isa = PBXGroup; + children = ( + A090ADE3D4F470FF41000000 /* libcinema.framework.a */, + ); + name = products; + sourceTree = ""; + }; + A090ADE3D4F4AB3A6F280000 /* products */ = { + isa = PBXGroup; + children = ( + A090ADE3D4F4AB3A6F000000 /* libcore.framework.a */, + ); + name = products; + sourceTree = ""; + }; + DB5AB1C0232D91BD00A7ED27 /* Frameworks */ = { + isa = PBXGroup; + children = ( + DB5AB1C7232D958300A7ED27 /* AppKit.framework */, + DB5AB1C1232D91BE00A7ED27 /* OpenGL.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + A090ADE3D4000000002D0000 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + A08C5CDEA390ADE3D4000000 /* syphonr21 */ = { + isa = PBXNativeTarget; + buildConfigurationList = A090ADE3D400000000460000 /* Build configuration list for PBXNativeTarget "syphonr21" */; + buildPhases = ( + A090ADE3D400000000690000 /* Run Source Processor */, + A090ADE3D400000000320000 /* Sources */, + A090ADE3D4000000000F0000 /* Frameworks */, + A090ADE3D4000000002D0000 /* Headers */, + DB5AB1BD232D8F4A00A7ED27 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + A090ADE3D4F470FF41370000 /* PBXTargetDependency */, + A090ADE3D4F4AB3A6F370000 /* PBXTargetDependency */, + A090ADE3D46542540E370000 /* PBXTargetDependency */, + A090ADE3D476513E3E370000 /* PBXTargetDependency */, + ); + name = syphonr21; + productName = syphonr21; + productReference = A08C5CDEA390ADE3D47B0000 /* syphonr21.xlib */; + productType = "com.apple.product-type.library.dynamic"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + A090ADE3D4000000003C0000 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1099; + }; + buildConfigurationList = A090ADE3D400000000410000 /* Build configuration list for PBXProject "syphonr21" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = A090ADE3D4000000001E0000; + productRefGroup = A090ADE3D400000000230000 /* products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = A090ADE3D4F470FF41280000 /* products */; + ProjectRef = A090ADE3D4F470FF41020000 /* cinema.framework.xcodeproj */; + }, + { + ProductGroup = A090ADE3D4F4AB3A6F280000 /* products */; + ProjectRef = A090ADE3D4F4AB3A6F020000 /* core.framework.xcodeproj */; + }, + { + ProductGroup = A090ADE3D46542540E280000 /* products */; + ProjectRef = A090ADE3D46542540E020000 /* mesh_misc.framework.xcodeproj */; + }, + { + ProductGroup = A090ADE3D476513E3E280000 /* products */; + ProjectRef = A090ADE3D476513E3E020000 /* network.framework.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + A08C5CDEA390ADE3D4000000 /* syphonr21 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + A090ADE3D46542540E000000 /* libmesh_misc.framework.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libmesh_misc.framework.a; + remoteRef = A090ADE3D46542540E040000 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + A090ADE3D476513E3E000000 /* libnetwork.framework.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libnetwork.framework.a; + remoteRef = A090ADE3D476513E3E040000 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + A090ADE3D4F470FF41000000 /* libcinema.framework.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcinema.framework.a; + remoteRef = A090ADE3D4F470FF41040000 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + A090ADE3D4F4AB3A6F000000 /* libcore.framework.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libcore.framework.a; + remoteRef = A090ADE3D4F4AB3A6F040000 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXShellScriptBuildPhase section */ + A090ADE3D400000000690000 /* Run Source Processor */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Source Processor"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "python ${MAXON_ROOTDIR}frameworks/settings/sourceprocessor/sourceprocessor.py \"$PROJECT_DIR/..\"\n"; + showEnvVarsInLog = 0; + }; + DB5AB1BD232D8F4A00A7ED27 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "../../install_R21.016.sh\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + A090ADE3D400000000320000 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A090ADE3D41BCBE160010000 /* SyphonVP.cpp in Sources */, + A090ADE3D445B2391E010000 /* SyphonC4DServer.mm in Sources */, + A090ADE3D4D80552BB010000 /* interface_registration.cpp in Sources */, + A090ADE3D4D93CCD9F010000 /* register.cpp in Sources */, + A090ADE3D4E921D362010000 /* main.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + A090ADE3D46542540E370000 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = mesh_misc.framework; + targetProxy = A090ADE3D46542540E050000 /* PBXContainerItemProxy */; + }; + A090ADE3D476513E3E370000 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = network.framework; + targetProxy = A090ADE3D476513E3E050000 /* PBXContainerItemProxy */; + }; + A090ADE3D4F470FF41370000 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = cinema.framework; + targetProxy = A090ADE3D4F470FF41050000 /* PBXContainerItemProxy */; + }; + A090ADE3D4F4AB3A6F370000 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = core.framework; + targetProxy = A090ADE3D4F4AB3A6F050000 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + A090ADE3D4000000004B0000 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A090ADE3D400000000000000 /* debugbase.xcconfig */; + buildSettings = { + DEPLOYMENT_LOCATION = YES; + EXCLUDED_SOURCE_FILE_NAMES = ""; + FRAMEWORK_SEARCH_PATHS = ../source/Syphon/lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(GCC_PREPROCESSOR_DEFINITIONS)", + USE_API_MAXON, + PRIVATE_MODULE_com_studioavante_SyphonR20, + "MAXON_MODULE_ID=\\\"com.studioavante.SyphonR20\\\"", + ); + INSTALL_PATH = /..; + MAXON_ROOTDIR = ../../; + USER_HEADER_SEARCH_PATHS = "../generated/hxx ../res ../res/description ../source ../source/Syphon ../source/Syphon/lib ../source/Syphon/lib/Syphon.framework ../source/Syphon/lib/Syphon.framework/Versions ../source/Syphon/lib/Syphon.framework/Versions/A ../source/Syphon/lib/Syphon.framework/Versions/A/Headers ../source/Syphon/src $(MAXON_ROOTDIR)frameworks/core.framework/source/** $(MAXON_ROOTDIR)frameworks/core.framework/generated/hxx $(MAXON_ROOTDIR)frameworks/cinema.framework/source/** $(MAXON_ROOTDIR)frameworks/cinema.framework/generated/hxx $(MAXON_ROOTDIR)frameworks/mesh_misc.framework/source/** $(MAXON_ROOTDIR)frameworks/mesh_misc.framework/generated/hxx $(MAXON_ROOTDIR)frameworks/network.framework/source/** $(MAXON_ROOTDIR)frameworks/network.framework/generated/hxx $(inherited)"; + }; + name = Debug; + }; + A090ADE3D400000000500000 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A090ADE3D400000000050000 /* releasebase.xcconfig */; + buildSettings = { + DEPLOYMENT_LOCATION = YES; + EXCLUDED_SOURCE_FILE_NAMES = ""; + FRAMEWORK_SEARCH_PATHS = ../source/Syphon/lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(GCC_PREPROCESSOR_DEFINITIONS)", + USE_API_MAXON, + PRIVATE_MODULE_com_studioavante_SyphonR20, + "MAXON_MODULE_ID=\\\"com.studioavante.SyphonR20\\\"", + ); + INSTALL_PATH = /..; + MAXON_ROOTDIR = ../../; + USER_HEADER_SEARCH_PATHS = "../generated/hxx ../res ../res/description ../source ../source/Syphon ../source/Syphon/lib ../source/Syphon/lib/Syphon.framework ../source/Syphon/lib/Syphon.framework/Versions ../source/Syphon/lib/Syphon.framework/Versions/A ../source/Syphon/lib/Syphon.framework/Versions/A/Headers ../source/Syphon/src $(MAXON_ROOTDIR)frameworks/core.framework/source/** $(MAXON_ROOTDIR)frameworks/core.framework/generated/hxx $(MAXON_ROOTDIR)frameworks/cinema.framework/source/** $(MAXON_ROOTDIR)frameworks/cinema.framework/generated/hxx $(MAXON_ROOTDIR)frameworks/mesh_misc.framework/source/** $(MAXON_ROOTDIR)frameworks/mesh_misc.framework/generated/hxx $(MAXON_ROOTDIR)frameworks/network.framework/source/** $(MAXON_ROOTDIR)frameworks/network.framework/generated/hxx $(inherited)"; + }; + name = Release; + }; + A090ADE3D4000000005A0000 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + EXECUTABLE_EXTENSION = xlib; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = NO; + }; + name = Debug; + }; + A090ADE3D4000000005F0000 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + EXECUTABLE_EXTENSION = xlib; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = NO; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A090ADE3D400000000410000 /* Build configuration list for PBXProject "syphonr21" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A090ADE3D4000000004B0000 /* Debug */, + A090ADE3D400000000500000 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + A090ADE3D400000000460000 /* Build configuration list for PBXNativeTarget "syphonr21" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A090ADE3D4000000005A0000 /* Debug */, + A090ADE3D4000000005F0000 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = A090ADE3D4000000003C0000 /* Project object */; +} diff --git a/R20/SyphonR21/project/syphonr21.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/R20/SyphonR21/project/syphonr21.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/R20/SyphonR21/project/syphonr21.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/R20/SyphonR21/project/syphonr21.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/UserInterfaceState.xcuserstate b/R20/SyphonR21/project/syphonr21.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..ab92da9 Binary files /dev/null and b/R20/SyphonR21/project/syphonr21.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/R20/SyphonR21/project/syphonr21.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/WorkspaceSettings.xcsettings b/R20/SyphonR21/project/syphonr21.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..a8f6112 --- /dev/null +++ b/R20/SyphonR21/project/syphonr21.xcodeproj/project.xcworkspace/xcuserdata/roger.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + BuildLocationStyle + UseTargetSettings + + diff --git a/R20/SyphonR21/project/syphonr21.xcodeproj/xcshareddata/xcschemes/syphonr21.xcscheme b/R20/SyphonR21/project/syphonr21.xcodeproj/xcshareddata/xcschemes/syphonr21.xcscheme new file mode 100644 index 0000000..72f4835 --- /dev/null +++ b/R20/SyphonR21/project/syphonr21.xcodeproj/xcshareddata/xcschemes/syphonr21.xcscheme @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/R20/SyphonR21/project/syphonr21.xcodeproj/xcuserdata/roger.xcuserdatad/xcschemes/xcschememanagement.plist b/R20/SyphonR21/project/syphonr21.xcodeproj/xcuserdata/roger.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..036ea52 --- /dev/null +++ b/R20/SyphonR21/project/syphonr21.xcodeproj/xcuserdata/roger.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + syphonr21.xcscheme_^#shared#^_ + + orderHint + 1 + + + SuppressBuildableAutocreation + + A08C5CDEA390ADE3D4000000 + + primary + + + + + diff --git a/R20/SyphonR21/res/c4d_symbols.h b/R20/SyphonR21/res/c4d_symbols.h new file mode 100644 index 0000000..a1bbeff --- /dev/null +++ b/R20/SyphonR21/res/c4d_symbols.h @@ -0,0 +1,9 @@ +#pragma once +enum +{ + // string table definitions + IDS_SYPHONVP = 10000, + + // End of symbol definition + _DUMMY_ELEMENT_ +}; diff --git a/R20/SyphonR21/res/description/SyphonPlugin.h b/R20/SyphonR21/res/description/SyphonPlugin.h new file mode 100644 index 0000000..0ca351b --- /dev/null +++ b/R20/SyphonR21/res/description/SyphonPlugin.h @@ -0,0 +1,16 @@ +#pragma once + +enum +{ + VP_DUMMY = 1000, + VP_SYPHON_ENABLED, + VP_SYPHON_MODE, + VP_SYPHON_WARNING1, + VP_SYPHON_WARNING2, +}; + +enum +{ + VP_SYPHON_MODE_REALTIME, + VP_SYPHON_MODE_FRAME, +}; diff --git a/R20/SyphonR21/res/description/SyphonPlugin.res b/R20/SyphonR21/res/description/SyphonPlugin.res new file mode 100644 index 0000000..a8e249c --- /dev/null +++ b/R20/SyphonR21/res/description/SyphonPlugin.res @@ -0,0 +1,20 @@ +CONTAINER SyphonPlugin +{ + NAME SyphonPlugin; + INCLUDE VPbase; + + GROUP ID_VIDEOPOSTPROPERTIES + { + DEFAULT 1; + + BOOL VP_SYPHON_ENABLED { } + LONG VP_SYPHON_MODE { CYCLE { VP_SYPHON_MODE_REALTIME; VP_SYPHON_MODE_FRAME; }; } + + GROUP + { + STATICTEXT { NAME VP_SYPHON_WARNING1; } + STATICTEXT { NAME VP_SYPHON_WARNING2; } + } + } +} + diff --git a/R20/SyphonR21/res/strings_us/c4d_strings.str b/R20/SyphonR21/res/strings_us/c4d_strings.str new file mode 100644 index 0000000..33e1fc8 --- /dev/null +++ b/R20/SyphonR21/res/strings_us/c4d_strings.str @@ -0,0 +1,7 @@ +// C4D-StringResource +// Identifier Text + +STRINGTABLE +{ + IDS_SYPHONVP "Syphon Server"; +} diff --git a/R20/SyphonR21/res/strings_us/description/SyphonPlugin.str b/R20/SyphonR21/res/strings_us/description/SyphonPlugin.str new file mode 100644 index 0000000..fe25c4f --- /dev/null +++ b/R20/SyphonR21/res/strings_us/description/SyphonPlugin.str @@ -0,0 +1,11 @@ +STRINGTABLE SyphonPlugin +{ + SyphonPlugin "Syphon Server"; + + VP_SYPHON_ENABLED "Enable Syphon Server"; + VP_SYPHON_MODE "Frame Update"; + VP_SYPHON_MODE_REALTIME "Real Time (slower)"; + VP_SYPHON_MODE_FRAME "Full Frames (faster)"; + VP_SYPHON_WARNING1 "Warning: Syphon will slow down the render, use only when previewing."; + VP_SYPHON_WARNING2 "Remove it completely if you want to send this project to a render farm."; +} diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Headers b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Resources b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Syphon b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Syphon new file mode 120000 index 0000000..9091fd4 --- /dev/null +++ b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Syphon @@ -0,0 +1 @@ +Versions/Current/Syphon \ No newline at end of file diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.h b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.h new file mode 100644 index 0000000..604f28e --- /dev/null +++ b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/Syphon.h @@ -0,0 +1,184 @@ +/* + Syphon.h + Syphon + + Copyright 2010-2011 bangnoise (Tom Butterworth) & vade (Anton Marini). + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "SyphonServerDirectory.h" +#import "SyphonServer.h" +#import "SyphonClient.h" +#import "SyphonImage.h" + +/*! \mainpage Syphon Framework + @section intro_sec Developing with Syphon + + + + @section introduction Developing with Syphon + + The Syphon framework provides the classes necessary to add Syphon support to your application. SyphonServer is used to make frames available to other applications. SyphonServerDirectory is used to discover available servers. SyphonClient is used to connect to and receive frames from a SyphonServer. + + The framework requires MacOS X 10.6 or later. Syphon makes use of IOSurface, which is a 10.6-only technology. Syphon takes advantage of other 10.6 features such as blocks, and is compatible with garbage-collection. + + To include Syphon in your application, follow these steps: + +
    +
  1. Add the framework to your Xcode project.

    +

    The simplest way is to drag it to the Frameworks group in the project window.

  2. +
  3. Link your application with Syphon at build time.

    +

    Add the framework to the Link Binary With Libraries build phase of your application's target.

  4. +
  5. Copy the framework into your application's bundle.

    +

    Add a new Copy Files build phase to your application's target.
    + Select Frameworks as the destination.
    + Drag the Syphon framework into the build phase.

  6. +
  7. Import the headers.

    +

    \#import <Syphon/Syphon.h> in any file where you want to use Syphon classes.

  8. +
+ + @section servers Servers + + Class documentation: SyphonServer + + Create a server: + + @code + SyphonServer *myServer = [[SyphonServer alloc] initWithName:@"My Output" context:myContext options:nil]; + @endcode + + and then publish new frames (you can also use GL_TEXTURE_2D textures): + + @code + [myServer publishFrameTexture:myTex textureTarget:GL_TEXTURE_RECTANGLE_EXT imageRegion:NSMakeRect(0, 0, width, height) textureDimensions:NSMakeSize(width, height) flipped:NO]; + @endcode + + Alternatively there are methods to bind and unbind the server to the OpenGL context, so you can draw into it directly. + You can publish new frames as often as you like, but if you only publish when you have a frame different from the previous one, then clients can do less work. + You must stop the server when you are finished with it: + + @code + [myServer stop]; + @endcode + + @section finding-servers Finding Servers + + Class documentation: SyphonServerDirectory + + SyphonServerDirectory handles server discovery for you. You can get an array of dictionaries describing available servers: + + @code + NSArray *available = [[SyphonServerDirectory sharedDirectory] servers]; + @endcode + + The servers property can be observed for changes, or you can register to receive the notifications posted by SyphonServerDirectory. + + Server description dictionaries are used by Syphon when you create a client, and also contain information you can use to describe available servers in your UI: + + @code + [myMenuItem setTitle:[description objectForKey:SyphonServerDescriptionNameKey]]; + @endcode + + @section clients Clients + + Class documentation: SyphonClient, SyphonImage + + Usually you create a client with a server description dictionary you obtained from SyphonServerDirectory: + + @code + SyphonClient *myClient = [[SyphonClient alloc] initWithServerDescription:description options:nil newFrameHandler:^(SyphonClient *client) { + [myView setNeedsDisplay:YES]; + }]; + @endcode + + The new-frame handler is optional: you can pass in nil. Here we use it to tell a view it needs to draw whenever the client receives a frame. + + When you are ready to draw: + + @code + SyphonImage *myFrame = [myClient newFrameImageForContext:cgl_ctx]; + if (myFrame) + { + GLuint tex = myFrame.textureName; + NSSize dimensions = myFrame.textureSize; + + // YOUR OPENGL DRAWING CODE HERE + + [myFrame release]; + } + @endcode + + As with servers, you must stop the client when you are finished with it: + + @code + [myClient stop]; + @endcode + + @section plugins Syphon.framework in a Plugin + + If you are using Syphon in any sort of plugin, please download the framework source and compile a version of the framework with unique class names. This avoids class-name conflicts if another plugin or the host application also embeds the Syphon framework. The framework source is set up to make this easy for you: you just need to change one build setting. + +
    +
  1. Open the framework's Xcode project.

    +

    +
  2. +
  3. Define SYPHON_UNIQUE_CLASS_NAME_PREFIX using the Preprocessor Macros build setting.

    +

    Select the Syphon target in the project window.
    + Click the Build Settings tab to display the build settings.
    + Scroll down (or use the search field) to find the Preprocessor Macros (GCC_PREPROCESSOR_DEFINITIONS) setting.
    + Double click the setting to add SYPHON_UNIQUE_CLASS_NAME_PREFIX=MyPluginName as a macro. +

  4. +
  5. Build the framework.

    +

    The built framework will have custom class names. The headers alias the custom names, so you can use SyphonServer, SyphonClient, SyphonImage and SyphonServerDirectory as normal in your code.
    +

  6. +
+ + @section help More examples and help + + Example projects implementing a server and client are included with the Syphon SDK. You can also examine the source to the provided Syphon implementations at their Google Code project. + + Use the Syphon developer forum to ask questions, and for any development related discussion. + + Good luck! + + @section framework_dev Framework development + + If you'd like to examine the framework's source code, report a bug, or get involved in development, head on over to the Syphon framework Google Code project. + + */ \ No newline at end of file diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.h b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.h new file mode 100644 index 0000000..79cef8c --- /dev/null +++ b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonClient.h @@ -0,0 +1,100 @@ +/* + SyphonClient.h + Syphon + + Copyright 2010-2011 bangnoise (Tom Butterworth) & vade (Anton Marini). + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import +#import +#import + +@class BlendySyphonImage; + +/*! + SyphonClient makes available frames from a remote SyphonServer. A client is created from a NSDictionary which describes the server. Typically this is obtained from the shared SyphonServerDirectory, or one of Syphon's notifications. + + SyphonClient allows for lazy drawing by the use of a new-frame-handler. Using a handler you can perform drawing without using a timer or polling, achieving frame-accuracy with the minimum of overhead. Alternatively, if your application uses a traditional display link or timer, you can use the hasNewFrame property to make decisions about work you may need to do. Irrespective of the presence of new frames, you can draw with a SyphonClient at any time. + + It is safe to access instances of this class across threads, with the usual limitatiions related to OpenGL. The calls to SyphonClient which may cause work to be done in a GL context are: -newFrameImageForContext:, -stop and -release. + */ + +@interface BlendySyphonClient : NSObject +{ +@private + id _connectionManager; + NSUInteger _lastFrameID; + void (^_handler)(id); + int32_t _status; + int32_t _lock; +} +/*! + Returns a new client instance for the described server. You should check the isValid property after initialization to ensure a connection was made to the server. + @param description Typically acquired from the shared SyphonServerDirectory, or one of Syphon's notifications. + @param options Currently ignored. May be nil. + @param handler A block which is invoked when a new frame becomes available. handler may be nil. This block may be invoked on a thread other than that on which the client was created. + @returns A newly initialized SyphonClient object, or nil if a client could not be created. +*/ + +- (id)initWithServerDescription:(NSDictionary *)description options:(NSDictionary *)options newFrameHandler:(void (^)(BlendySyphonClient *client))handler; + +/*! + A client is valid if it has a working connection to a server. Once this returns NO, the SyphonClient will not yield any further frames. + */ + +@property (readonly) BOOL isValid; + +/*! + Returns a dictionary with a description of the server the client is attached to. See SyphonServerDirectory for the keys this dictionary contains +*/ + +@property (readonly) NSDictionary *serverDescription; + +/*! + Returns YES if the server has output a new frame since the last time newFrameImageForContext: was called for this client, NO otherwise. +*/ + +@property (readonly) BOOL hasNewFrame; + +/*! + Returns a SyphonImage representing the current output from the server. The texture associated with the image may continue to update when you draw with it, but you should not depend on that behaviour: call this method every time you wish to access the current server frame. This object may have GPU resources associated with it and you should release it as soon as you are finished drawing with it. + + This method may perform work in the OpenGL context. As with any other OpenGL calls, you must ensure no other threads use the context during calls to this method. + @param cgl_ctx The CGL context in which the SyphonImage will be valid. + @returns A SyphonImage representing the live output from the server. YOU ARE RESPONSIBLE FOR RELEASING THIS OBJECT when you are finished with it. + */ +- (BlendySyphonImage *)newFrameImageForContext:(CGLContextObj)cgl_ctx; + +/*! + Stops the client from receiving any further frames from the server. In garbage-collected applications you must call this method prior to removing strong references to the client. In non-garbage-collected applications, use of this method is optional and releasing all references to the client has the same effect. + + This method may perform work in any OpenGL context previously passed to newFrameImageForContext:. As with any other OpenGL calls, you must ensure no other threads use those contexts during calls to this method. + */ + +- (void)stop; + +@end + +@compatibility_alias SyphonClient BlendySyphonClient; diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.h b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.h new file mode 100644 index 0000000..5315ceb --- /dev/null +++ b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonImage.h @@ -0,0 +1,52 @@ +/* + SyphonImage.h + Syphon + + Copyright 2010-2011 bangnoise (Tom Butterworth) & vade (Anton Marini). + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import +#import + +/** + SyphonImage represents an image stored as an OpenGL texture of type GL_TEXTURE_RECTANGLE_ARB. + */ + +@interface BlendySyphonImage : NSObject { + +} + +/** + A GLuint representing the texture name. The associated texture is of type GL_TEXTURE_RECTANGLE_ARB. + */ +@property (readonly) GLuint textureName; + +/** + A NSSize representing the dimensions of the texture. The image will fill the texture entirely. + */ +@property (readonly) NSSize textureSize; +@end + +@compatibility_alias SyphonImage BlendySyphonImage; diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.h b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.h new file mode 100644 index 0000000..3e3475f --- /dev/null +++ b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServer.h @@ -0,0 +1,204 @@ +/* + SyphonServer.h + Syphon + + Copyright 2010-2011 bangnoise (Tom Butterworth) & vade (Anton Marini). + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import +#import +#import + +/*! @name Server Options Dictionary Key Constants */ +/*! @{ */ + +/*! + @relates SyphonServer + If this key is matched with a NSNumber with a BOOL value YES, then the server will be invisible to other Syphon users. You are then responsible for passing the NSDictionary returned by serverDescription to processes which require it to create a SyphonClient. Default is NO. + */ +extern NSString * const SyphonServerOptionIsPrivate; + +/*! + @relates SyphonServer + If this key is matched with a NSNumber with a NSUInteger value greater than zero, the server will, when using the bindToDrawFrameOfSize / unbindAndPublish API, render to an antialiased render buffer with the requested multisample count (via the FBO MSAA and BLIT extensions). Default sample count is 0 should this key be ommited, indicating no antialiased buffers will be used. If the requested sample count is not supported by the GL context, the nearest supported sample count will be used instead. If MSAA is not supported at all, this key will be ignored and the server will render without the antialiasing stage. + + */ +extern NSString * const SyphonServerOptionAntialiasSampleCount; + +/*! + @relates SyphonServer + If this key is matched with a NSNumber with an integer value greater than zero, the server will render to an FBO with a depth buffer attached. The value provided should indicate the desired resolution of the buffer: 16, 24 or 32. The server will always attempt to attach a depth buffer when one is requested, however it may create one of a resolution other than that requested. This has useful effect only when using the bindToDrawFrameOfSize / unbindAndPublish API. + */ +extern NSString * const SyphonServerOptionDepthBufferResolution; + +/*! + @relates SyphonServer + If this key is matched with a NSNumber with an integer value greater than zero, the server will render to an FBO with a stencil buffer attached. The value provided should indicate the desired resolution of the buffer: 1, 4, 8 or 16. The server will always attempt to attach a stencil buffer when one is requested, however it may create one of a resolution other than that requested. + */ +extern NSString * const SyphonServerOptionStencilBufferResolution; + +/*! @} */ + +/*! + @nosubgrouping + SyphonServer handles the publishing of frames from one video source to any number of clients. Frames can be published either by passing in an existing OpenGL texture, or by binding the server's FBO, drawing using OpenGL calls, then calling the unbindAndPublish method. + + A SyphonServer object represents one video output for your application. If your application produces several video outputs, then they should each have their own SyphonServer. If your application might have multiple servers running, you should name each server to aid identification by users. + + It is safe to access instances of this class across threads, except for those calls related to OpenGL: a call to bindToDrawFrameOfSize: must have returned before a call is made to unbindAndPublish, and these methods must be paired and called in order. You should not call the stop method while the FBO is bound. + */ + +@class BlendySyphonImage; + +@interface BlendySyphonServer : NSObject +{ +@private + NSString *_name; + NSString *_uuid; + BOOL _broadcasts; + + id _connectionManager; + + CGLContextObj cgl_ctx; + + void *_surfaceRef; + BOOL _pushPending; + BlendySyphonImage *_surfaceTexture; + GLuint _surfaceFBO; + + BOOL _wantsContextChanges; + GLuint _wantedMSAASampleCount; + + GLint _virtualScreen; + GLenum _depthBufferResolution; + GLenum _stencilBufferResolution; + GLuint _depthBuffer; + GLuint _stencilBuffer; + BOOL _combinedDepthStencil; + GLuint _msaaSampleCount; + GLuint _msaaFBO; + GLuint _msaaColorBuffer; + + GLint _previousReadFBO; + GLint _previousDrawFBO; + GLint _previousFBO; + + int32_t _mdLock; + + id _activityToken; +} +/** @name Instantiation */ +/** @{ */ +/*! + Creates a new server with the specified human-readable name (which need not be unique), CGLContext and options. The server will be started immediately. Init may fail and return nil if the server could not be started. + + This method does not lock the CGL context. If there is a chance other threads may use the context during calls to this method, bracket it with calls to CGLLockContext() and CGLUnlockContext(). + @param serverName Non-unique human readable server name. This is not required and may be nil, but is usually used by clients in their UI to aid identification. + @param context The CGLContextObj context that textures will be valid and available on for publishing. + @param options A dictionary containing key-value pairs to specify options for the server. Currently supported options are SyphonServerOptionIsPrivate, SyphonServerOptionAntialiasQuality and SyphonServerOptionHasDepthBuffer. See their descriptions for details. + @returns A newly intialized SyphonServer. Nil on failure. +*/ + +- (id)initWithName:(NSString*)serverName context:(CGLContextObj)context options:(NSDictionary *)options; + +/** @} */ + +/** @name Properties */ +/** @{ */ +/*! + The CGLContext the server uses for drawing. This may or may not be the context passed in at init. +*/ + +@property (readonly) CGLContextObj context; + +/*! + A string representing the name of the SyphonServer. +*/ + +@property (retain) NSString* name; + +/*! + A dictionary describing the server. Normally you won't need to access this, however if you created the server as private (using SyphonServerOptionIsPrivate) then you must pass this dictionary to any process in which you wish to create a SyphonClient. You should not rely on the presence of any particular keys in this dictionary. The content will always conform to the \ protocol. +*/ + +@property (readonly) NSDictionary* serverDescription; + +/*! +YES if clients are currently attached, NO otherwise. If you generate frames frequently (for instance on a display-link timer), you may choose to test this and only call publishFrameTexture:textureTarget:imageRegion:textureDimensions:flipped: when clients are attached. +*/ + +@property (readonly) BOOL hasClients; + +/** @} */ +/** @name Publishing Frames */ +/** @{ */ + +/*! + Publishes the part of the texture described in region of the named texture to clients. The texture is copied and can be safely disposed of or modified once this method has returned. You should not bracket calls to this method with calls to -bindToDrawFrameOfSize: and -unbindAndPublish - they are provided as an alternative to using this method. + + This method does not lock the server's CGL context. If there is a chance of other threads using the context during calls to this method, bracket it with calls to CGLLockContext() and CGLUnlockContext(), passing in the value of the server's context property as the argument. + @param texID The name of the texture to publish, which must be a texture valid in the CGL context provided when the server was created. + @param target GL_TEXTURE_RECTANGLE_EXT or GL_TEXTURE_2D. + @param region The sub-region of the texture to publish. + @param size The full size of the texture + @param isFlipped Is the texture flipped? +*/ + +- (void)publishFrameTexture:(GLuint)texID textureTarget:(GLenum)target imageRegion:(NSRect)region textureDimensions:(NSSize)size flipped:(BOOL)isFlipped; + +/*! + Binds an FBO for you to publish a frame of the given dimensions by drawing into the server's context (check it using the context property). If YES is returned, you must pair this with a call to -unbindAndPublish once you have finished drawing. If NO is returned you should abandon drawing and not call -unbindAndPublish. + This method does not lock the server's CGL context. If there is a chance other threads may use the context during calls to this method, bracket it with calls to CGLLockContext() and CGLUnlockContext(), passing in the value of the server's context property as the argument. + @param size The size the frame you wish to publish. + @returns YES if binding succeeded, NO otherwise. +*/ + +- (BOOL)bindToDrawFrameOfSize:(NSSize)size; + +/*! + Restores any previously bound FBO and publishes the just-drawn frame. This method will flush the GL context (so you don't have to). + This method does not lock the server's CGL context. If there is a chance of other threads using the context during calls to this method, bracket it with calls to CGLLockContext() and CGLUnlockContext(), passing in the value of the server's context property as the argument. +*/ + +- (void)unbindAndPublish; + +/*! + Returns a SyphonImage representing the current output from the server, valid in the server's CGL context. Call this method every time you wish to access the current server frame. This object has a limited useful lifetime, and may have GPU resources associated with it: you should release it as soon as you are finished drawing with it. + + This method does not lock the CGL context. If there is a chance other threads may use the context during calls to this method, or while you are drawing with the returned SyphonImage, bracket access with calls to CGLLockContext() and CGLUnlockContext(). + + @returns A SyphonImage representing the current output from the server. YOU ARE RESPONSIBLE FOR RELEASING THIS OBJECT when you are finished with it. + */ +- (BlendySyphonImage *)newFrameImage; + +/*! + Stops the server instance. In garbage-collected applications you must call this method prior to removing strong references to the server. In non-garbage-collected applications, use of this method is optional. +*/ + +- (void)stop; +/** @} */ +@end + +@compatibility_alias SyphonServer BlendySyphonServer; diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.h b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.h new file mode 100644 index 0000000..ccf76de --- /dev/null +++ b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Headers/SyphonServerDirectory.h @@ -0,0 +1,128 @@ +/* + SyphonServerDirectory.h + Syphon + + Copyright 2010-2011 bangnoise (Tom Butterworth) & vade (Anton Marini). + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import + +/*! @name Server Description Dictionary Key Constants */ +/*! @{ */ + +/*! + @relates SyphonServerDirectory + The object for this key is a NSString which uniquely identifies a SyphonServer instance. If two dictionaries contain the same string for this key, they represent the same server. This is provided solely to allow you to programmatically determine the identity of a server, and should never be displayed to users in interface elements. +*/ + +extern NSString * const SyphonServerDescriptionUUIDKey; + +/*! + @relates SyphonServerDirectory + The object for this key is a NSString which is the human-readable non-unique name for the SyphonServer. If this string exists and is non-empty, you should use it in interface elements to identify the server, usually in combination with the name of the server's application (see SyphonServerDescriptionAppNameKey). +*/ + +extern NSString * const SyphonServerDescriptionNameKey; + +/*! + @relates SyphonServerDirectory + The object for this key is a NSString with the localized name of the application in which the SyphonServer is running. Use this in combination with the server's name (if present) to identify the server in interface elements. +*/ + +extern NSString * const SyphonServerDescriptionAppNameKey; + +/*! + @relates SyphonServerDirectory + The object for this key is a NSImage representation of the icon of the application in which the SyphonServer is running. +*/ + +extern NSString * const SyphonServerDescriptionIconKey; + +/*! @} */ + +/*! @name Notifications */ +/*! @{ */ + +/*! + @relates SyphonServerDirectory + A new SyphonServer is available on the system. The notification object is a NSDictionary describing the server. +*/ + +extern NSString * const SyphonServerAnnounceNotification; + +/*! + @relates SyphonServerDirectory + An existing SyphonServer instance has changed its description. The notification object is a NSDictionary describing the server. +*/ + +extern NSString * const SyphonServerUpdateNotification; + +/*! + @relates SyphonServerDirectory + A SyphonServer instance will no longer be available. The notification object is a NSDictionary describing the retiring server. +*/ + +extern NSString * const SyphonServerRetireNotification; + +/*! @} */ + +/*! + @nosubgrouping + SyphonServerDirectory provides information on available Syphon Servers. Servers are represented by dictionaries. Generally you can expect to find some or all of the keys listed in Constants. +*/ + +@interface BlendySyphonServerDirectory : NSObject { +@private + NSMutableArray *_servers; + pthread_mutex_t _generalLock; + pthread_mutex_t _mutateLock; + NSMutableSet *_pings; +} + +/*! + Returns the shared server directory instance. This object is KVO complaint, and can be used to observe changes in server availability, server names and statuses. + @returns the shared server instance +*/ + ++ (BlendySyphonServerDirectory *)sharedDirectory; + +/*! + NSArray of NSDictionaries that describe (using the keys above) currently available SyphonServer instances on the system. +*/ + +@property (readonly) NSArray *servers; + +/*! + Use this method to discover servers based soley on their name, or application host name. Both parameters are optional. If you do not specify either, all available SyphonServers will be returned. + @param name Optional (pass nil to not specify) Name of the published SyphonServer, matches the key value for SyphonServerDescriptionNameKey + @param appname Optional (pass nil to not specify) Application Name of the published SyphonServer, matches the key value for SyphonServerDescriptionAppNameKey + @returns An array of NSDictionaries matching the query you specified. +*/ + +- (NSArray *)serversMatchingName:(NSString *)name appName:(NSString *)appname; + +@end + +@compatibility_alias SyphonServerDirectory BlendySyphonServerDirectory; diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Resources/English.lproj/InfoPlist.strings b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Resources/English.lproj/InfoPlist.strings new file mode 100644 index 0000000..5e45963 Binary files /dev/null and b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Resources/English.lproj/InfoPlist.strings differ diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Resources/Info.plist b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Resources/Info.plist new file mode 100644 index 0000000..0adaa75 --- /dev/null +++ b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,40 @@ + + + + + BuildMachineOSBuild + 13F1066 + CFBundleDevelopmentRegion + English + CFBundleExecutable + Syphon + CFBundleIdentifier + info.v002.Syphon + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Syphon + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 6A2008a + DTPlatformVersion + GM + DTSDKBuild + 14A382 + DTSDKName + macosx10.10 + DTXcode + 0611 + DTXcodeBuild + 6A2008a + + diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Syphon b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Syphon new file mode 100755 index 0000000..3b7934d Binary files /dev/null and b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/A/Syphon differ diff --git a/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/Current b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/R20/SyphonR21/source/Syphon/lib/Syphon.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/R20/SyphonR21/source/Syphon/src/SyphonC4DServer.h b/R20/SyphonR21/source/Syphon/src/SyphonC4DServer.h new file mode 100644 index 0000000..baea5cc --- /dev/null +++ b/R20/SyphonR21/source/Syphon/src/SyphonC4DServer.h @@ -0,0 +1,91 @@ +/* + SyphonC4DServer.h + Cinder Syphon Implementation + + Created by astellato on 2/6/11 + + Copyright 2011 astellato, bangnoise (Tom Butterworth) & vade (Anton Marini). + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +//#include "cinder/app/AppBasic.h" +//#include "cinder/gl/Texture.h" +#include +#include "opengl/gl.h" + +typedef signed int c4d_Int32; +typedef float c4d_Float32; + +#ifdef __OBJC__ +@class SyphonServer; +@class NSDictionary; +#else +class SyphonServer; +class NSDictionary; +#endif +class PixelPost; +class VPBuffer; + +class SyphonC4DServer { + public: + SyphonC4DServer(); + ~SyphonC4DServer(); + + static SyphonC4DServer & Instance(); + void shutdown(); + + void * getCurrentContext(); + + void start (std::string n, bool privateServer=false); + void setSize (int width, int height, bool alpha=false); + void setArea (int startX, int startY, int endX, int endY); + + std::string getName(); + std::string getUUID(); + NSDictionary * getDescription(); + bool isRunning() {return (bool)mSyphon; } + + void publishLine( PixelPost *pp ); + void publishBuffer( VPBuffer *buf ); + + //void publishLine( c4d_Int32 line, c4d_Float32 *col, c4d_Int32 xmin, c4d_Int32 xmax, c4d_Int32 comp, bool aa ) + + +protected: + SyphonServer *mSyphon; + GLenum mTarget; + GLuint mTexID; + GLint mIntFormat; + GLenum mFormat; + GLuint mWidth, mHeight; + GLuint mFbo; + int mStartX, mStartY, mAreaWidth, mAreaHeight; + bool bAlpha; + + void publish(); + +}; + diff --git a/R20/SyphonR21/source/Syphon/src/SyphonC4DServer.mm b/R20/SyphonR21/source/Syphon/src/SyphonC4DServer.mm new file mode 100644 index 0000000..3a055cd --- /dev/null +++ b/R20/SyphonR21/source/Syphon/src/SyphonC4DServer.mm @@ -0,0 +1,335 @@ +/* + SyphonC4DServer.mm + Cinder Syphon Implementation + + Created by astellato on 2/6/11 + + Copyright 2011 astellato, bangnoise (Tom Butterworth) & vade (Anton Marini). + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// This will solve redefinition of UInt on ge_sys_math.h +#define SYPHON + +#ifndef C4DR13 +#import "osx_include.h" // Resolves UInt conflict +#endif +#import +#import +#import +#import "SyphonC4DServer.h" +#import "c4d.h" + +static SyphonC4DServer _instance; +static NSOpenGLContext* _gl = NULL; +#define _glctx ((CGLContextObj)[_gl CGLContextObj]) + +#define BIND_CONTEXT()\ + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];\ + NSOpenGLContext * prevContext = [NSOpenGLContext currentContext];\ + [_gl makeCurrentContext];\ + CGLLockContext(_glctx); + +#define UNBIND_CONTEXT()\ + CGLUnlockContext(_glctx);\ + if ( prevContext )\ + [prevContext makeCurrentContext];\ + else\ + [NSOpenGLContext clearCurrentContext];\ + [pool drain]; + + + +SyphonC4DServer & SyphonC4DServer::Instance() +{ + return _instance; +} + +SyphonC4DServer::SyphonC4DServer() +{ + //_openGLContext = NULL; + mSyphon = nil; + mTarget = GL_TEXTURE_RECTANGLE_ARB; + mIntFormat = GL_RGB8; + mFormat = GL_RGB; + mWidth = 0; + mHeight = 0; + bAlpha = false; + mTexID = 0; + mFbo = 0; +} + +SyphonC4DServer::~SyphonC4DServer() +{ + this->shutdown(); +} + +NSDictionary * SyphonC4DServer::getDescription() +{ + return ( mSyphon ? mSyphon.serverDescription : nil ); +} + + +void SyphonC4DServer::shutdown() +{ + BIND_CONTEXT() + + if ( mTexID > 0 ) + glDeleteTextures(1, &mTexID); + if ( mFbo > 0 ) + glDeleteFramebuffersEXT(1, &mFbo); + if (mSyphon) + { + //NSLog(@"Syphpn shutdown..."); + [mSyphon stop]; + [mSyphon release]; + mSyphon = nil; + } + + UNBIND_CONTEXT() +} + +void * SyphonC4DServer::getCurrentContext() +{ + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + NSOpenGLContext * currContext = [NSOpenGLContext currentContext]; + [pool drain]; + return (void*)currContext; +} + + +void SyphonC4DServer::start(std::string n, bool privateServer) +{ + // https://developer.apple.com/library/mac/documentation/graphicsimaging/conceptual/opengl-macprogguide/opengl_contexts/opengl_contexts.html + // https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSOpenGLContext_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40004074 + // https://developer.apple.com/library/mac/documentation/graphicsimaging/conceptual/opengl-macprogguide/opengl_pixelformats/opengl_pixelformats.html + if (_gl == NULL) + { + NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; + //NSLog(@"CREATE CONTEXT ctx 0 [%ld]",(long)[[NSOpenGLContext currentContext] CGLContextObj]); + NSOpenGLPixelFormatAttribute attribs [] = { NSOpenGLPFADoubleBuffer, NSOpenGLPFAPixelBuffer, 0 }; + NSOpenGLPixelFormat * pf = [(NSOpenGLPixelFormat *)[NSOpenGLPixelFormat alloc] + initWithAttributes:attribs]; + _gl = [[NSOpenGLContext alloc] initWithFormat:pf shareContext:nil]; + [pool drain]; + } + + BIND_CONTEXT() + + NSString *title = [NSString stringWithCString:n.c_str() + encoding:[NSString defaultCStringEncoding]]; + if (!mSyphon) + { + NSDictionary *options = nil; + if ( privateServer ) + // http://rypress.com/tutorials/objective-c/data-types/nsdictionary.html + options = @{ SyphonServerOptionIsPrivate : [NSNumber numberWithBool:privateServer] }; + //mSyphon = [[SyphonServer alloc] initWithName:title context:CGLGetCurrentContext() options:options]; + mSyphon = [[SyphonServer alloc] initWithName:title context:_glctx options:options]; + } + else + { + [mSyphon setName:title]; + } + + UNBIND_CONTEXT() +} + +std::string SyphonC4DServer::getName() +{ + std::string name; + if (mSyphon) + { + NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; + name = [[mSyphon name] cStringUsingEncoding:[NSString defaultCStringEncoding]]; + [pool drain]; + } + return name; +} + +std::string SyphonC4DServer::getUUID() +{ + std::string uuid; + if ( mSyphon ) + { + NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; + NSString * u = [mSyphon.serverDescription objectForKey:SyphonServerDescriptionUUIDKey]; + uuid = std::string( [u UTF8String] ); + [pool drain]; + } + return uuid; +} + +void SyphonC4DServer::setSize(int width, int height, bool alpha) +{ + BIND_CONTEXT() + + //NSLog(@"MAKE TEX...\n"); + // same size! + //if ( mWidth == width && mHeight == height && bAlpha == alpha ) + // return; + + // delete old + if ( mTexID > 0 ) + glDeleteTextures(1, &mTexID); + if ( mFbo > 0 ) + glDeleteFramebuffersEXT(1, &mFbo); + + // init + mTarget = GL_TEXTURE_RECTANGLE_ARB; + mIntFormat = GL_RGB8; + mFormat = GL_RGB; + mWidth = width; + mHeight = height; + bAlpha = alpha; + mTexID = 0; + mFbo = 0; + this->setArea( 0, 0, mWidth, mHeight ); + + // make new + if ( width > 0 && height > 0 ) + { + //NSLog(@"MAKE TEX %d %d\n",width,height); + + // Make texture + glEnable(mTarget); + glGenTextures(1, &mTexID); + glBindTexture(mTarget, mTexID); + //glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + mIntFormat = ( bAlpha ? GL_RGBA8 : GL_RGB8 ); + mFormat = ( bAlpha ? GL_RGBA : GL_RGB ); + // http://www.opengl.org/sdk/docs/man/html/glTexImage2D.xhtml + glTexImage2D( mTarget, 0, mIntFormat, mWidth, mHeight, + 0, mFormat, GL_UNSIGNED_BYTE, NULL); + + // Make FBO + glGenFramebuffersEXT(1, &mFbo); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFbo); + glFramebufferTextureEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, mTexID, 0); + glClearColor( 0, 0, 0, 0 ); + glClear( GL_COLOR_BUFFER_BIT ); + + // unbind all + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0); + glBindTexture( mTarget, 0 ); + + //NSLog(@"TEX OK!!!\n"); + + //this->publish(); + } + + UNBIND_CONTEXT() +} +void SyphonC4DServer::setArea (int startX, int startY, int endX, int endY) +{ + mStartX = startX; + mStartY = startY; + mAreaWidth = endX-mStartX; + mAreaHeight = endY-mStartY; +} + +void SyphonC4DServer::publishLine( PixelPost *pp ) +{ + // Copy Line + if ( pp == NULL ) + return; + + BIND_CONTEXT() + + glEnable(mTarget); + glBindTexture(mTarget, mTexID); + + // file:///Volumes/HDD/Dev/C4D/_SDK/C4DR13SDKHTML20120522/help/pages/c4d_videopostdata/struct_PixelPost1139.html + int bpp = pp->comp; + GLenum fmt = ( bpp == 4 ? GL_RGBA : GL_RGB ); + int x = pp->xmin; + int y = pp->line; + int w = pp->xmax - pp->xmin + 1; + //NSLog(@"publishLine xy [%d %d] w [%d] bpp [%d] aa [%d]",x,y,w,bpp,pp->aa); + if ( ! pp->aa ) + { + // http://www.opengl.org/sdk/docs/man/html/glTexSubImage2D.xhtml + glTexSubImage2D( mTarget, 0, + x, (mHeight-y-1), w, 1, + fmt, GL_FLOAT, pp->col ); + } + else + { + // AA: 4 pixels per pixel + // file:///Volumes/HDD/Dev/C4D/_SDK/C4DR13SDKHTML20120522/help/pages/c4d_videopostdata/struct_PixelPost1139.html#aa5 + Float32 line[w*bpp]; + for (int i = 0 ; i < w ; i++) + for (int b = 0 ; b < bpp ; b++) + line[i*bpp+b] = (pp->col[i*bpp*4+b+0] + pp->col[i*bpp*4+b+4] + pp->col[i*bpp*4+b+8] + pp->col[i*bpp*4+b+12]) / 4.0f; + glTexSubImage2D( mTarget, 0, + x, (mHeight-y-1), w, 1, + fmt, GL_FLOAT, line ); + } + + this->publish(); + + UNBIND_CONTEXT() +} + + +void SyphonC4DServer::publishBuffer( VPBuffer *buf ) +{ + if ( buf == NULL ) + return; + + BIND_CONTEXT() + + glEnable(mTarget); + glBindTexture(mTarget, mTexID); + + int bpp = buf->GetCpp(); + unsigned char line[mWidth*bpp]; + GLenum fmt = ( bpp == 4 ? GL_RGBA : GL_RGB ); + for (unsigned y = 0 ; y < mHeight ; y++) + { + buf->GetLine(0,y,mWidth,&line,8,true); + // http://www.opengl.org/sdk/docs/man/html/glTexSubImage2D.xhtml + glTexSubImage2D( mTarget, 0, + 0, (mHeight-y-1), mWidth, 1, + fmt, GL_UNSIGNED_BYTE, line ); + } + + this->publish(); + + //NSLog(@"publishBuffer PUBLISHED!"); + + UNBIND_CONTEXT() +} + +void SyphonC4DServer::publish() +{ + //NSLog(@"PUBLISH ctx [%ld]",(long)[[NSOpenGLContext currentContext] CGLContextObj]); + [mSyphon publishFrameTexture:mTexID + textureTarget:mTarget + imageRegion:NSMakeRect(mStartX, mStartY, mAreaWidth, mAreaHeight) + textureDimensions:NSMakeSize(mWidth, mHeight) + flipped:false]; + //NSLog(@"PUBLISHED!"); +} + diff --git a/R20/SyphonR21/source/SyphonVP.cpp b/R20/SyphonR21/source/SyphonVP.cpp new file mode 100644 index 0000000..aa424fa --- /dev/null +++ b/R20/SyphonR21/source/SyphonVP.cpp @@ -0,0 +1,217 @@ +///////////////////////////////////////////////////////////// +// CINEMA 4D SDK // +///////////////////////////////////////////////////////////// +// (c) 1989-2004 MAXON Computer GmbH, all rights reserved // +///////////////////////////////////////////////////////////// + +#include "main.h" +#include "c4d.h" +#include "c4d_symbols.h" +#include "lib_clipmap.h" +#include "SyphonC4DServer.h" +#include "SyphonPlugin.h" +#include +#include +#include +#include +#include + +#include +void _printf(const char *format,...); +void _printf(const char *format,...) +{ +#ifndef RELEASE + char fmt[1024]; + sprintf(fmt,"--- Syphon: %s",format); + va_list arp; + va_start(arp,format); + char buf[1024]; + vsprintf_safe(buf,sizeof(buf),fmt,arp); + GePrint(maxon::String(buf)); + va_end(arp); +#endif +} + +// Syphon must be static because of multithreading +class SyphonVP; +static SyphonVP * thePlugin = NULL; + + +//////////////////////////////////// +// +// PLUGIN CLASS +// +class SyphonVP : public VideoPostData +{ + INSTANCEOF(SyphonVP,VideoPostData) + +public: + + Bool Init(GeListNode *node); + void Free(GeListNode *node); + Bool GetDEnabling(GeListNode *node, const DescID &id,const GeData &t_data,DESCFLAGS_ENABLE flags,const BaseContainer *itemdesc); + static NodeData *Alloc(void) { +#ifdef C4DR13 + return gNew SyphonVP; +#else + return NewObjClear(SyphonVP); +#endif + } + void AllocateBuffers(BaseVideoPost* node, Render* render, BaseDocument* doc); + + VIDEOPOSTINFO GetRenderInfo(BaseVideoPost* node); + RENDERRESULT Execute(BaseVideoPost *node, VideoPostStruct *vps); + void ExecuteLine(BaseVideoPost* node, PixelPost* pp); + +private: + + // plugin options + Bool bSyphonEnabled; + Int32 mSyphonMode; + + // scene info + bool bAlpha; + Vector res; // Frame resolution + CameraObject *mCamera; + + // syphon lock + pthread_mutex_t _lineLock; + +}; + + +///////////////////////////////////////////// +// +// VIDEOPOST +// +Bool SyphonVP::Init(GeListNode *node) +{ + thePlugin = this; + + pthread_mutex_init(&_lineLock, NULL); + + BaseVideoPost *pp = (BaseVideoPost*)node; + BaseContainer *nodeData = pp->GetDataInstance(); + + nodeData->SetBool( VP_SYPHON_ENABLED, true); + nodeData->SetInt32( VP_SYPHON_MODE, VP_SYPHON_MODE_REALTIME); + + return true; +} + +void SyphonVP::Free(GeListNode *node) +{ + if ( thePlugin ) + { + thePlugin = NULL; + pthread_mutex_destroy(&_lineLock); + } +} + +Bool SyphonVP::GetDEnabling(GeListNode *node, const DescID &id,const GeData &t_data,DESCFLAGS_ENABLE flags,const BaseContainer *itemdesc) +{ + bool enabled = true; + BaseContainer *data = ((BaseObject*)node)->GetDataInstance(); + switch (id[0].id) + { + case VP_SYPHON_MODE: + enabled = data->GetBool(VP_SYPHON_ENABLED); + break; + } + return enabled; +} + +void SyphonVP::AllocateBuffers(BaseVideoPost* node, Render* render, BaseDocument* doc) + +{ + // Get camera + mCamera = NULL; + BaseDraw *bd_render = doc->GetRenderBaseDraw(); // the view set as "Render View" + BaseDraw *bd_active = doc->GetActiveBaseDraw(); // The current view + Int32 proj = bd_active->GetProjection(); + BaseDraw *bd = ( proj == Pperspective ? bd_active : bd_render ); + + if ( bd ) + { + mCamera = (CameraObject*) bd->GetSceneCamera(doc); // the active camera + if ( ! mCamera ) + mCamera = (CameraObject*) bd->GetEditorCamera(); // the defaut camera + } + + if ( mCamera == NULL ) + { + SyphonC4DServer::Instance().shutdown(); + _printf("Can't find camera! Syphon Server Disabled."); + } +} + +VIDEOPOSTINFO SyphonVP::GetRenderInfo(BaseVideoPost* node) +{ + return VIDEOPOSTINFO::EXECUTELINE; +} + +RENDERRESULT SyphonVP::Execute(BaseVideoPost *node, VideoPostStruct *vps) +{ + BaseDocument *doc = vps->doc; + BaseContainer *nodeData = node->GetDataInstance(); + + // For each RENDER + if (vps->vp==VIDEOPOSTCALL::FRAMESEQUENCE && vps->open) + { + BaseContainer renderData = ( vps->render ? vps->render->GetRenderData() : doc->GetActiveRenderData()->GetData() ); + + bSyphonEnabled = nodeData->GetBool(VP_SYPHON_ENABLED); + mSyphonMode = nodeData->GetInt32(VP_SYPHON_MODE); + bAlpha = renderData.GetBool(RDATA_ALPHACHANNEL); + res.x = renderData.GetFloat(RDATA_XRES); + res.y = renderData.GetFloat(RDATA_YRES); + + // Cinema4D appears to be sending invalid data on alpha channel + // so no alpha for this server + bAlpha = false; + + if ( bSyphonEnabled ) + { + SyphonC4DServer::Instance().start("SyphonC4D"); + SyphonC4DServer::Instance().setSize( int(res.x), int(res.y), bAlpha ); + } + else + { + SyphonC4DServer::Instance().shutdown(); + } + } + // Executed after each frame + else if (vps->vp==VIDEOPOSTCALL::FRAME && ! vps->open) + { + // Publish full frame to Syphon Server + if ( bSyphonEnabled )//&& mSyphonMode == VP_SYPHON_MODE_FRAME ) + { + VPBuffer * buf = vps->render->GetBuffer(VPBUFFER_RGBA,0); + SyphonC4DServer::Instance().publishBuffer( buf ); + } + } + + return RENDERRESULT::OK; +} + + +void SyphonVP::ExecuteLine(BaseVideoPost* node, PixelPost* pp) +{ + // Publish line to Syphon Server + if ( bSyphonEnabled && mSyphonMode == VP_SYPHON_MODE_REALTIME && pp->valid_line ) + { + // several processes may be rendering + // but only one may be publishing + pthread_mutex_lock(&_lineLock); + SyphonC4DServer::Instance().publishLine( pp ); + pthread_mutex_unlock(&_lineLock); + } +} + +Bool RegisterSyphonPlugin(void) +{ + _printf("READY!"); + return RegisterVideoPostPlugin(ID_SYPHON,GeLoadString(IDS_SYPHONVP),PLUGINFLAG_VIDEOPOST_MULTIPLE,SyphonVP::Alloc,"SyphonPlugin"_s,0,0); +} + + diff --git a/R20/SyphonR21/source/install.sh b/R20/SyphonR21/source/install.sh new file mode 100755 index 0000000..c6ea805 --- /dev/null +++ b/R20/SyphonR21/source/install.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# +# install.sh +# SyphonR20 +# +# Created by Roger S on 22/3/2015 +# + +# Get preprocessor macros to shell (not working) +#eval "${GCC_PREPROCESSOR_DEFINITIONS}" +#eval "${GCC_PREPROCESSOR_MACROS}" + +# Change Syphon searchpath +# http://lessons.runrev.com/m/4071/l/15029-linking-an-osx-external-bundle-with-a-dylib-library +# http://qin.laya.com/tech_coding_help/dylib_linking.html +export THE_LIB="${TARGET_BUILD_DIR}/${EXECUTABLE_NAME}" +install_name_tool -change @loader_path/../Frameworks/Syphon.framework/Versions/A/Syphon @loader_path/Syphon.framework/Versions/A/Syphon "$THE_LIB" +otool -L "$THE_LIB" | grep Syphon.framework + +# Check cinema install version +# http://askubuntu.com/questions/299710/how-to-determine-if-a-string-is-a-substring-of-another-in-bash +# R21 build +if [ "${GCC_PREPROCESSOR_DEFINITIONS/C4DR21}" != "$GCC_PREPROCESSOR_DEFINITIONS" ]; then + export C4D="R21" + export SOURCE_DIR="${R21_DIR}" +# R20 build +else + export C4D="R20" + export SOURCE_DIR="${PROJECT_DIR}" +fi +export DEST_FOLDER="${LOCAL_APPS_DIR}/MAXON/CINEMA 4D ${C4D}/plugins/${TARGET_NAME}" +echo "Installing for [${C4D}] on [${DEST_FOLDER}]..." + +# make plugin folder +sudo mkdir -p "${DEST_FOLDER}" +sudo chmod a+rw "${DEST_FOLDER}" + +# copy files +sudo cp "${THE_LIB}" "${PROJECT_DIR}" +sudo cp "${THE_LIB}" "${DEST_FOLDER}" + +# copy res folder +export THE_RES="${SOURCE_DIR}/res" +if [ -d "${DEST_FOLDER}/res" ]; then + rm -rf "${DEST_FOLDER}/res" +fi +cp -R "${THE_RES}" "${DEST_FOLDER}/" + +# finito! +ls -l "${DEST_FOLDER}" diff --git a/R20/SyphonR21/source/main.cpp b/R20/SyphonR21/source/main.cpp new file mode 100644 index 0000000..99b6fd0 --- /dev/null +++ b/R20/SyphonR21/source/main.cpp @@ -0,0 +1,88 @@ +#include "main.h" +#include "c4d_basedocument.h" +#include + +Bool PluginStart(void) +{ + if (!RegisterSyphonPlugin()) + return false; + + return true; +} + +void PluginEnd(void) +{ +} + +Bool PluginMessage(Int32 id, void* data) +{ + switch (id) + { + case C4DPL_INIT_SYS: + if (!g_resource.Init()) + return false; // don't start plugin without resource + + // register example datatype. This is happening at the earliest possible time + //if (!RegisterExampleDataType()) + // return false; + + // serial hook example; if used must be registered before PluginStart(), best in C4DPL_INIT_SYS + //if (!RegisterExampleSNHook()) + // return false; + + return true; + + case C4DMSG_PRIORITY: + //react to this message to set a plugin priority (to determine in which order plugins are initialized or loaded + //SetPluginPriority(data, mypriority); + // ROGER + SetPluginPriority(data, C4DPL_INIT_PRIORITY_PLUGINS-1000000); + return true; + + case C4DPL_BUILDMENU: + //react to this message to dynamically enhance the menu + //EnhanceMainMenu(); + break; + + case C4DPL_COMMANDLINEARGS: + //react to this message to react to command line arguments on startup + /*{ + C4DPL_CommandLineArgs *args = (C4DPL_CommandLineArgs*)data; + Int32 i; + + for (i = 0; iargc; i++) + { + if (!args->argv[i]) continue; + + if (!strcmp(args->argv[i],"--help") || !strcmp(args->argv[i],"-help")) + { + // do not clear the entry so that other plugins can make their output!!! + GePrint("\x01-SDK is here :-)"); + } + else if (!strcmp(args->argv[i],"-SDK")) + { + args->argv[i] = nullptr; + GePrint("\x01-SDK executed:-)"); + } + else if (!strcmp(args->argv[i],"-plugincrash")) + { + args->argv[i] = nullptr; + *((Int32*)0) = 1234; + } + } + }*/ + break; + + case C4DPL_EDITIMAGE: + /*{ + C4DPL_EditImage *editimage = (C4DPL_EditImage*)data; + if (!data) break; + if (editimage->return_processed) break; + GePrint("C4DSDK - Edit Image Hook: "+editimage->imagefn->GetString()); + // editimage->return_processed = true; if image was processed + }*/ + return false; + } + + return false; +} diff --git a/R20/SyphonR21/source/main.h b/R20/SyphonR21/source/main.h new file mode 100644 index 0000000..88f7d0c --- /dev/null +++ b/R20/SyphonR21/source/main.h @@ -0,0 +1,10 @@ +#pragma once + +#include "c4d.h" + +// If you are developeing a new plugin based on this one +// be sure to use a unique ID obtained from www.plugincafe.com +// http://www.plugincafe.com/developer_plugid.asp +#define ID_SYPHON 1032312 + +Bool RegisterSyphonPlugin(void); diff --git a/R20/SyphonR21/syphonr21.xlib b/R20/SyphonR21/syphonr21.xlib new file mode 100755 index 0000000..d3feff2 Binary files /dev/null and b/R20/SyphonR21/syphonr21.xlib differ diff --git a/R20.055/gen.sh b/R20/gen_R20.055.sh similarity index 93% rename from R20.055/gen.sh rename to R20/gen_R20.055.sh index de0ac80..4f32554 100755 --- a/R20.055/gen.sh +++ b/R20/gen_R20.055.sh @@ -2,7 +2,7 @@ # Configure export FRAMEWORKS_DIR="../../C4DSDK/R20.055/frameworks/" -export TOOL_DIR="../../C4DSDK/R20_tools/ProjectTool_20180829" +export TOOL_DIR="../../C4DSDK/Toos/ProjectTool_R20_20180906" # Create link to frameworks export FRAMEWORKS_LINK="./frameworks" diff --git a/R20/gen_R21.016.sh b/R20/gen_R21.016.sh new file mode 100755 index 0000000..209aaf8 --- /dev/null +++ b/R20/gen_R21.016.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# Configure +export FRAMEWORKS_DIR="../../C4DSDK/R21.016/frameworks/" +export TOOL_DIR="../../C4DSDK/Tools/ProjectTool_R21_20190205" + +# Create link to frameworks +export FRAMEWORKS_LINK="./frameworks" +ln -sf "$FRAMEWORKS_DIR" "$FRAMEWORKS_LINK" + +# Generate project +export GENERATED_DIR="$PWD/SyphonR21" +if [ "$1" = "project" ]; then + # options: $TOOL_DIR/resource/config.txt + echo "Generating project..." + export TOOL_BIN="$TOOL_DIR/kernel_app.app/Contents/MacOS/kernel_app" + "$TOOL_BIN" g_updateproject="$GENERATED_DIR" + echo "Done!" +elif [ "$1" = "code" ]; then + # usage: sourceprocessor.py [-h] [--registeronly] [--singlethreaded] [-f] [--option OPTION] [--doxygen] [--publicframeworks] directories [directories ...] + echo "Generating code..." + python "$FRAMEWORKS_LINK/settings/sourceprocessor/sourceprocessor.py" "$GENERATED_DIR" + echo "Done!" +else + echo "usage: ./gen.sh project" + echo "usage: ./gen.sh code" +fi + +# cleanup +#unlink "$FRAMEWORKS_LINK" diff --git a/R20.055/install.sh b/R20/install_R20.055.sh similarity index 100% rename from R20.055/install.sh rename to R20/install_R20.055.sh diff --git a/R20/install_R21.016.sh b/R20/install_R21.016.sh new file mode 100755 index 0000000..e969c1d --- /dev/null +++ b/R20/install_R21.016.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Change Syphon searchpath +# http://lessons.runrev.com/m/4071/l/15029-linking-an-osx-external-bundle-with-a-dylib-library +# http://qin.laya.com/tech_coding_help/dylib_linking.html +# otool -L Blendy360Cam.dylib +# +# MUST ADD TO OTHER LINKER FLAGS: -headerpad_max_install_names +# +export PLUGIN_NAME="SyphonR21" +export THE_LIB="${PROJECT_DIR}/${EXECUTABLE_NAME}" +if [ ! -f "${THE_LIB}" ]; then + export THE_LIB="${PROJECT_DIR}/../${EXECUTABLE_NAME}" +fi +if [ ! -f "${THE_LIB}" ]; then + echo "Lib not found: ${THE_LIB}" + exit 1 +fi +ls -l "${THE_LIB}" + +#install_name_tool -change @loader_path/../Frameworks/Syphon.framework/Versions/A/Syphon @loader_path/Syphon.framework/Versions/A/Syphon "${THE_LIB}" +install_name_tool -change @loader_path/../Frameworks/Syphon.framework/Versions/A/Syphon @rpath/Syphon "${THE_LIB}" +install_name_tool -add_rpath "@loader_path/Syphon.framework/Versions/A/" "${THE_LIB}" +install_name_tool -add_rpath "@loader_path/../resources/Syphon/lib/Syphon.framework/Versions/A/" "${THE_LIB}" +install_name_tool -add_rpath "@executable_path/../../../plugins/${PLUGIN_NAME}/res/libs/osx/Syphon.framework/Versions/A/" "${THE_LIB}" +otool -L "${THE_LIB}" | grep Syphon + + +################## +# +# Deploy +# +export TARGET_PLUGINS_FOLDER="/Applications/MAXON/CINEMA 4D R21/plugins" +export TARGET_FOLDER="$TARGET_PLUGINS_FOLDER/SyphonR21" +export TARGET_RES_FOLDER="$TARGET_FOLDER/res" +export TARGET_LIBS_FOLDER="$TARGET_RES_FOLDER/libs/osx" +export PROJECT_FOLDER=".." + +if [ -d "$TARGET_FOLDER" ] +then + rm -rf "$TARGET_FOLDER" +fi +mkdir "$TARGET_FOLDER" + +cp "$PROJECT_FOLDER/"*.xlib "$TARGET_FOLDER/" +cp -R "$PROJECT_FOLDER/res" "$TARGET_FOLDER/" + +mkdir -p "$TARGET_LIBS_FOLDER" +cp -R "../source/Syphon/lib/Syphon.framework" "$TARGET_LIBS_FOLDER/" diff --git a/README.md b/README.md index 646fb33..eeaef30 100644 --- a/README.md +++ b/README.md @@ -33,12 +33,34 @@ Tested and validated on... * Cinema 4D R18.057 : Yes (use R16 version) * Cinema 4D R19.053 : Yes (use R16 version) * Cinema 4D R20.055 : Yes -* Cinema 4D R21+ : Hopefully Yes +* Cinema 4D R21.016 : Yes +* Cinema 4D R22+ : Probably no -## Compiling the Source +## Compiling the Source (R20+) -The XCode projects are configured for the default location of Cinema 4D: `/Applications/MAXON/CINEMA 4D Rxx/` +But the commited projects are ready to build. + +In case you need to replicate with another SDK, inside R20 folder, there's one script for generating the C4D project and sources and another for installing. + +The generation script (`gen_RXX.YYY.sh`) need to be updated with your SDK and Tools folder. You can/need to generate project and sources separated: + +* `./gen_RXX.YYY.sh project` +* `./gen_RXX.YYY.sh code` + +If you re-generate the project, you need to manually do this to the XCode project... + +* Remove everything inside `source/Syphon/lib` +* Add to `Syphon.framework` to `source/Syphon/lib` +* Build Phases, Link Binary with Libraries, add: + * Syphon.framework + * OpenGL.framework + * AppKit.framework +* Build Phases, add new Run Script Phase with: + * `../../install_RXX.YYY.sh` +* Maybe relink frameworks and configuration files +* (optional) Edit **syphonr21** schema and set your `Cinema 4D.app` on **Run**, **Executable** to be able to run and debug the plugin from XCode. + +The install script (`install_RXX.YYY.sh`) is configured for the default location of Cinema 4D: `/Applications/MAXON/CINEMA 4D Rxx/`. If your installation is on another place, edit it. -If your installation is on another place, relink the Cinema 4D libs and edit `install.sh`