|
Katana Plug-in APIs 0.1
|
00001 // Copyright (c) 2013 The Foundry Visionmongers Ltd. All Rights Reserved. 00002 00003 #ifndef FNRENDER_RENDERBASE_H 00004 #define FNRENDER_RENDERBASE_H 00005 00006 #include <stdlib.h> 00007 00008 #include "FnAttribute/FnAttribute.h" 00009 00010 #include "FnPluginSystem/FnPlugin.h" 00011 #include "FnPluginSystem/FnPluginSystem.h" 00012 00013 #include "FnRender/FnRenderAPI.h" 00014 #include "FnRender/plugin/DiskRenderOutputProcess.h" 00015 #include "FnRender/suite/FnRenderPluginSuite.h" 00016 00017 #include "FnScenegraphIterator/FnScenegraphIterator.h" 00018 00019 namespace Foundry 00020 { 00021 namespace Katana 00022 { 00023 namespace Render 00024 { 00051 class FNRENDER_API RenderBase 00052 { 00053 public: 00064 RenderBase( 00065 FNSCENEGRAPHITERATOR_NAMESPACE::FnScenegraphIterator rootIterator, 00066 FnAttribute::GroupAttribute arguments) : 00067 _rootIterator(rootIterator), 00068 _arguments(arguments) 00069 { 00070 } 00071 virtual ~RenderBase() {} 00072 00079 virtual int setup() { return 0; } 00080 00086 virtual int cleanup() { return 0; } 00087 00094 virtual void setRootIterator( 00095 FNSCENEGRAPHITERATOR_NAMESPACE::FnScenegraphIterator rootIterator) 00096 { 00097 _rootIterator = rootIterator; 00098 } 00099 00109 virtual int start() = 0; 00110 00118 virtual int pause() { return 0; } 00119 00127 virtual int resume() { return 0; } 00128 00136 virtual int stop() { return 0; } 00137 00143 virtual int startLiveEditing() { return 0; } 00144 00150 virtual int stopLiveEditing() { return 0; } 00151 00160 virtual int processControlCommand(const std::string & command) { return 0; } 00161 00192 virtual int queueDataUpdates(FnAttribute::GroupAttribute updateAttribute) { return 0; } 00193 00206 virtual int applyPendingDataUpdates() { return 0; } 00207 00216 virtual bool hasPendingDataUpdates() const { return false; } 00217 00249 virtual void configureDiskRenderOutputProcess(DiskRenderOutputProcess& diskRenderOutputProcess, 00250 const std::string& outputName, 00251 const std::string& outputPath, 00252 const std::string& renderMethodName, 00253 const float& frameTime) const {} 00254 00255 // non-virtual implementations to do conversions from virtual functions above 00256 FnAttribute::Attribute _configureDiskRenderOutputProcess(const std::string& outputName, 00257 const std::string& outputPath, 00258 const std::string& renderMethodName, 00259 const float& frameTime) const; 00260 00261 static FnPlugStatus setHost(FnPluginHost* host); 00262 static FnPluginHost* getHost(); 00263 00264 static FnRenderPluginSuite createSuite(FnRenderPluginHandle(*create)( 00265 FnSgIteratorHandle, FnAttributeHandle)); 00266 static FnRenderPluginHandle newRenderHandle(RenderBase* renderBase); 00267 00268 static unsigned int _apiVersion; 00269 static const char* _apiName; 00270 00271 protected: 00282 FNSCENEGRAPHITERATOR_NAMESPACE::FnScenegraphIterator 00283 getRootIterator() const { return _rootIterator; } 00284 00297 std::string getRenderMethodName() const; 00298 00310 std::string findArgument(const std::string& argumentName, const std::string & defaultValue="") const; 00311 00322 bool applyRenderThreadsOverride(int& numberOfRenderThreads) const; 00323 00327 std::string getKatanaBasePath() const { return findArgument("katanaRoot"); } 00328 00335 std::string getKatanaTempDirectory() const { return findArgument("tempDir"); } 00336 00344 std::string getKatanaHost() const { return findArgument("host"); } 00345 00353 float getRenderTime() const; 00354 00368 bool useRenderPassID() const; 00369 00378 std::string getRenderOutputFile() const { return findArgument("renderOutputFile"); } 00379 00391 bool isExpandProceduralActive(bool defaultValue=false) const; 00392 00398 std::string getRenderPluginDirectory() const { return findArgument("pluginDsoPath"); } 00399 00405 std::string getEnvironmentVariable(const std::string& name) const; 00406 00421 template <typename T, typename A> 00422 T getAttrValue(const FnAttribute::Attribute& attr, const T& defaultValue) const 00423 { 00424 A typedAttr = attr; 00425 if(typedAttr.isValid()) 00426 return typedAttr.getValue(); 00427 00428 return defaultValue; 00429 } 00430 00439 inline std::string getStringAttrValue(const FnAttribute::Attribute& attr, const std::string & defaultValue = "") const 00440 { 00441 return getAttrValue<std::string, FnAttribute::StringAttribute>(attr, defaultValue); 00442 } 00443 00444 private: 00445 FNSCENEGRAPHITERATOR_NAMESPACE::FnScenegraphIterator _rootIterator; 00446 FnAttribute::GroupAttribute _arguments; 00447 00448 static FnPluginHost* _host; 00449 }; 00453 } 00454 } 00455 } 00456 00457 namespace FnKat = Foundry::Katana; 00458 00459 // Plugin Registering Macro. 00460 #define DEFINE_RENDER_PLUGIN(RENDER_CLASS) \ 00461 \ 00462 FnPlugin RENDER_CLASS##_plugin; \ 00463 \ 00464 FnRenderPluginHandle RENDER_CLASS##_create(FnSgIteratorHandle sg, \ 00465 FnAttributeHandle args) \ 00466 { \ 00467 return Foundry::Katana::Render::RenderBase::newRenderHandle( \ 00468 RENDER_CLASS::create( \ 00469 Foundry::Katana::FnScenegraphIterator(sg), \ 00470 FnAttribute::Attribute::CreateAndRetain(args))); \ 00471 } \ 00472 \ 00473 FnRenderPluginSuite RENDER_CLASS##_suite = \ 00474 Foundry::Katana::Render::RenderBase::createSuite( \ 00475 RENDER_CLASS##_create); \ 00476 \ 00477 const void* RENDER_CLASS##_getSuite() \ 00478 { \ 00479 return &RENDER_CLASS##_suite; \ 00480 } 00481 00482 #endif
1.7.3