5#include "vraythrow.hpp"
14#include "_vraysdk_utils.hpp"
18 class VRayServerNative;
20 class VRayLiveLinkServerNative;
21 class VRayLiveLinkServer;
32 enum ExportSceneFlags {
33 ExportSceneFlags_Full = 0,
34 ExportSceneFlags_Changes = 1 << 0,
35 ExportSceneFlags_Deleted = 1 << 1,
39 enum SceneUpdateActionCode {
43 AC_PARAMVALUE_CHANGED,
44 AC_RECOMPILE_GEOMETRY,
54 AC_BEGIN_CHANGE = 100,
55 AC_PREAPPLY_CHANGE = 101,
75 enum AssetCacheLimit {
79 } cachedAssetsLimitType;
119 std::swap(flags, options.flags);
120 std::swap(cachedAssetsLimitType, options.cachedAssetsLimitType);
122 std::swap(dr2Flags, options.dr2Flags);
139 LiveLinkServerOptions() :
portNumber(0), flags() {
141 LiveLinkServerOptions(
const LiveLinkServerOptions& options) =
default;
142 LiveLinkServerOptions(LiveLinkServerOptions&& options) =
default;
143 LiveLinkServerOptions& operator=(
const LiveLinkServerOptions& options) =
default;
144 LiveLinkServerOptions& operator=(LiveLinkServerOptions&& options) =
default;
146 void swap(LiveLinkServerOptions& options)
noexcept {
148 std::swap(flags, options.flags);
157 const char* remoteScenePath;
158 const char* pluginLibraryPath;
159 const char* includePaths;
161 ServerOptions::AssetCacheLimit cachedAssetsLimitType;
162 float cachedAssetsLimitValue;
164 const char* dr2HttpProxy;
165 int dr2WorkerThreadsPerServer;
166 int dr2ConnectTimeout;
167 int dr2UpstreamChannels;
176 cachedAssetsLimitType = opts.cachedAssetsLimitType;
178 dr2Flags = opts.dr2Flags;
199#include "_vraysrv_import.hpp"
202 inline std::string LicenseError::toString()
const {
203 char* str = Internal::VRay_getLicenseErrorTextStringFromErrorCode(errs);
204 std::string res = str;
205 Internal::C_memory_free(str);
209 inline std::ostream& operator <<(std::ostream& stream,
const LicenseError& err) {
210 char* str = Internal::VRay_getLicenseErrorTextStringFromErrorCode(err.errs);
211 stream << (str ? str :
"");
212 Internal::C_memory_free(str);
221 const char* getData()
const {
222 return reinterpret_cast<const char*
>(
this);
225 return reinterpret_cast<char*
>(
this);
227 static void operator delete(
void* p) {
228 Internal::C_memory_free(p);
230 static void*
operator new (size_t) =
delete;
231 static void*
operator new[](size_t) =
delete;
232 static void operator delete[](
void*) =
delete;
235#if !defined(VRAY_RUNTIME_LOAD_PRIMARY) && !defined(VRAY_RUNTIME_LOAD_SECONDARY)
244 Internal::VRay_LicenseManager_releaseLicense();
248#elif defined(VRAY_RUNTIME_LOAD_PRIMARY)
251# pragma warning(push)
252# pragma warning(disable: 4706)
260 initialize(libraryFileName);
264 if (Internal::VRay_LicenseManager_releaseLicense)
265 Internal::VRay_LicenseManager_releaseLicense();
269 operator bool()
const {
276 Internal::HModule hLib;
277 std::string errString;
280 void makeError(
const std::string &errMsg) {
286 void initialize(
const char* libraryFileName) {
287 if (!libraryFileName) {
288 if ((hLib = LoadUtils::tryPreloadSDKLibraryFromEnvVar(VRAY_XSTRING(APPSDK_ENV_VAR_BIN_FOLDER),
false))) {
292 if ((hLib = LoadUtils::tryPreloadSDKLibraryFromEnvVar(VRAY_XSTRING(VRAY_SDK_ENV_VAR),
true))) {
297 hLib = LoadUtils::loadLibrary(libraryFileName);
301 void importFunctions() {
303# define PROC_IMPORT_FAIL(message) return makeError(LoadUtils::getLoaderError(message))
305# define PROC_IMPORT_FAIL(message) throw InitErr( (errString = LoadUtils::getLoaderError(message)) )
309 PROC_IMPORT_FAIL(
"Cannot load V-Ray SDK Library file.");
311# define VRAY_INTERNAL_GENERATE_IMPORT_CODE
312# include "_vraysrv_import.hpp"
313# undef VRAY_INTERNAL_GENERATE_IMPORT_CODE
323 Internal::FreeLibrary(hLib);
325 Internal::dlclose(hLib);
337 VRayServerNative* serverNative;
340 static VRayServer* getVRayServer(
void* serverNative) {
341 return static_cast<VRayServer*
>(Internal::VRay_VRayServer_getUserData(
static_cast<VRayServerNative*
>(serverNative), 0));
345 serverNative = Internal::VRay_VRayServer_create(options, &licErr.errs);
346 if (serverNative) Internal::VRay_VRayServer_setUserData(serverNative, 0,
this);
355 static void serverStartCallback(
const Internal::CallbackParamsBase* params) {
356 VRayServer* server = getVRayServer(params->self);
357 auto fn = (void(*)(
VRayServer&, double,
void*))params->userObject;
358 fn(*server, params->instant, params->userData);
361 template<
class T,
void (T::*TMethod)(VRayServer&,
double instant,
void* userData)>
362 static void serverStartCallbackT(
const Internal::CallbackParamsBase* params) {
363 VRayServer* server = getVRayServer(params->self);
364 (
static_cast<T*
>(params->userObject)->*TMethod)(*server, params->instant, params->userData);
367 static void hostConnectedCallback(
const Internal::ConnectParams* params) {
368 VRayServer* server = getVRayServer(params->self);
369 auto fn = (void(*)(
VRayServer&,
const char*, double,
void*))params->userObject;
370 fn(*server, params->hostname, params->instant, params->userData);
373 template<
class T,
void (T::*TMethod)(VRayServer&, const
char* hostName,
double instant,
void* userData)>
374 static void hostConnectedCallbackT(
const Internal::ConnectParams* params) {
375 VRayServer* server = getVRayServer(params->self);
376 (
static_cast<T*
>(params->userObject)->*TMethod)(*server, params->hostname, params->instant, params->userData);
379 static void logMessageCallback(
const Internal::LogMessageParams* params) {
380 VRayServer* server = getVRayServer(params->self);
381 auto fn = (void(*)(
VRayServer&,
const char*, MessageLevel, double,
void*))params->userObject;
382 fn(*server, params->message,
static_cast<MessageLevel
>(params->level), params->instant, params->userData);
385 template<
class T,
void (T::*TMethod)(VRayServer& renderer, const
char* msg, MessageLevel level,
double instant,
void* userData)>
386 static void logMessageCallbackT(
const Internal::LogMessageParams* params) {
387 VRayServer* server = getVRayServer(params->self);
388 (
static_cast<T*
>(params->userObject)->*TMethod)(*server, params->message,
static_cast<MessageLevel
>(params->level), params->instant, params->userData);
391 static void progressCallback(
const Internal::ProgressParams* params) {
392 VRayServer* server = getVRayServer(params->self);
393 auto fn = (void(*)(
VRayServer&,
const char*, int, int, double,
void*))params->userObject;
394 fn(*server, params->message, params->progress, params->total, params->instant, params->userData);
397 template<
class T,
void (T::*TMethod)(VRayServer&, const
char* msg,
int elementNumber,
int elementsCount,
double,
void* userData)>
398 static void progressCallbackT(
const Internal::ProgressParams* params) {
399 VRayServer* server = getVRayServer(params->self);
400 (
static_cast<T*
>(params->userObject)->*TMethod)(*server, params->message, params->progress, params->total, params->instant, params->userData);
403 static void sceneUpdateCallback(
const Internal::SceneUpdateParams* params) {
404 VRayServer* server = getVRayServer(params->self);
405 auto fn = (void(*)(
VRayServer&, int, uint64_t, uint64_t,
const char*, double,
void*))params->userObject;
406 fn(*server, params->action, params->changeIndex, params->pluginId, params->name, params->instant, params->userData);
409 template<
class T,
void (T::*TMethod)(VRayServer&,
int, u
int64_t, u
int64_t, const
char* name,
double instant,
void* userData)>
410 static void sceneUpdateCallbackT(
const Internal::SceneUpdateParams* params) {
411 VRayServer* server = getVRayServer(params->self);
412 (
static_cast<T*
>(params->userObject)->*TMethod)(*server, params->action, params->changeIndex, params->pluginId, params->name, params->instant, params->userData);
417 createInstance(
nullptr);
422 createInstance(&optionsInternal);
427 Internal::VRay_VRayServer_release(serverNative);
433 operator bool ()
const {
434 return !!serverNative;
437 LicenseError getLicenseError()
const {
441 void setOnServerStart(
void (*callback)(VRayServer&,
double instant,
void*),
const void* userData =
nullptr) {
442 Internal::CallbackData<Internal::OnServerStart> callbackData = { serverStartCallback, serverNative, (
void*)callback, userData };
443 Internal::VRay_VRayServer_setServerStartCallback(serverNative, callback ? &callbackData :
nullptr);
446 template<
class T,
void (T::*TMethod)(VRayServer&,
double,
void*)>
447 void setOnServerStart(T&
object,
const void* userData =
nullptr) {
448 Internal::CallbackData<Internal::OnServerStart> callbackData = { &serverStartCallbackT<T, TMethod>, serverNative, &object, userData };
449 Internal::VRay_VRayServer_setServerStartCallback(serverNative, &callbackData);
452 void setOnServerClose(
void (*callback)(VRayServer&,
double instant,
void*),
const void* userData =
nullptr) {
453 Internal::CallbackData<Internal::OnServerClose> callbackData = { serverStartCallback, serverNative, (
void*)callback, userData };
454 Internal::VRay_VRayServer_setServerCloseCallback(serverNative, callback ? &callbackData :
nullptr);
457 template<
class T,
void (T::*TMethod)(VRayServer&,
double,
void*)>
458 void setOnServerClose(T&
object,
const void* userData =
nullptr) {
459 Internal::CallbackData<Internal::OnServerClose> callbackData = { &serverStartCallbackT<T, TMethod>, serverNative, &object, userData };
460 Internal::VRay_VRayServer_setServerCloseCallback(serverNative, &callbackData);
463 void setOnConnect(
void (*callback)(VRayServer&,
const char* msg,
double instant,
void*),
const void* userData =
nullptr) {
464 Internal::CallbackData<Internal::OnConnect> callbackData = { hostConnectedCallback, serverNative, (
void*)callback, userData };
465 Internal::VRay_VRayServer_setConnectCallback(serverNative, callback ? &callbackData :
nullptr);
468 template<
class T,
void (T::*TMethod)(VRayServer&, const
char* msg,
double,
void*)>
469 void setOnDisconnect(T&
object,
const void* userData =
nullptr) {
470 Internal::CallbackData<Internal::OnConnect> callbackData = { &hostConnectedCallbackT<T, TMethod>, serverNative, &object, userData };
471 Internal::VRay_VRayServer_setDisconnectCallback(serverNative, &callbackData);
474 void setOnDisconnect(
void (*callback)(VRayServer&,
const char* msg,
double instant,
void*),
const void* userData =
nullptr) {
475 Internal::CallbackData<Internal::OnConnect> callbackData = { hostConnectedCallback, serverNative, (
void*)callback, userData };
476 Internal::VRay_VRayServer_setDisconnectCallback(serverNative, callback ? &callbackData :
nullptr);
479 template<
class T,
void (T::*TMethod)(VRayServer&, const
char* msg,
double,
void*)>
480 void setOnConnect(T&
object,
const void* userData =
nullptr) {
481 Internal::CallbackData<Internal::OnConnect> callbackData = { &hostConnectedCallbackT<T, TMethod>, serverNative, &object, userData };
482 Internal::VRay_VRayServer_setConnectCallback(serverNative, &callbackData);
485 void setOnLogMessage(
void (*callback)(VRayServer&,
const char* msg, MessageLevel level,
double instant,
void*), MessageLevel minLevel = MessageInfo,
const void* userData =
nullptr) {
486 Internal::CallbackData<Internal::OnLogMessage> callbackData = { logMessageCallback, serverNative, (
void*)callback, userData };
487 Internal::VRay_VRayServer_setDumpMessageCallback(serverNative, callback ? &callbackData :
nullptr, (
int)minLevel);
490 template<
class T,
void (T::*TMethod)(VRayServer&, const
char* msg, MessageLevel level,
double,
void*)>
491 void setOnLogMessage(T&
object, MessageLevel minLevel = MessageInfo,
const void* userData =
nullptr) {
492 Internal::CallbackData<Internal::OnLogMessage> callbackData = { &logMessageCallbackT<T, TMethod>, serverNative, &object, userData };
493 Internal::VRay_VRayServer_setDumpMessageCallback(serverNative, &callbackData, (
int)minLevel);
496 void setOnProgress(
void (*callback)(VRayServer&,
const char* msg,
int elementNumber,
int elementsCount,
double instant,
void*),
const void* userData =
nullptr) {
497 Internal::CallbackData<Internal::OnProgress> callbackData = { progressCallback, serverNative, (
void*)callback, userData };
498 Internal::VRay_VRayServer_setProgressCallback(serverNative, callback ? &callbackData :
nullptr);
501 template<
class T,
void (T::*TMethod)(VRayServer&, const
char* msg,
int elementNumber,
int elementsCount,
double instant,
void* userData)>
502 void setOnProgress(T&
object,
const void* userData =
nullptr) {
503 Internal::CallbackData<Internal::OnProgress> callbackData = { &progressCallbackT<T, TMethod>, serverNative, &object, userData };
504 Internal::VRay_VRayServer_setProgressCallback(serverNative, &callbackData);
515 void setOnSceneUpdate(
void (*callback)(
VRayServer& vray,
int action, uint64_t changeIndex, uint64_t pluginId,
const char* name,
double instant,
void*),
const void* userData =
nullptr) {
516 Internal::CallbackData<Internal::OnSceneUpdate> callbackData = { sceneUpdateCallback, serverNative, (
void*)callback, userData };
517 Internal::VRay_VRayServer_setSceneUpdateCallback(serverNative, callback ? &callbackData :
nullptr);
521 template<
class T,
void (T::*TMethod)(VRayServer&,
int, u
int64_t, u
int64_t, const
char* name,
double instant,
void* userData)>
523 Internal::CallbackData<Internal::OnSceneUpdate> callbackData = { &sceneUpdateCallbackT<T, TMethod>, serverNative, &object, userData };
524 Internal::VRay_VRayServer_setSceneUpdateCallback(serverNative, &callbackData);
529 return Internal::VRay_VRayServer_run(serverNative);
534 return Internal::VRay_VRayServer_start(serverNative);
539 Internal::VRay_VRayServer_stop(serverNative);
548 char* data = Internal::VRay_VRayServer_exportSceneBuffer(serverNative, len, flags);
550 if (data && len > 0) {
551 buf.assign(data, len);
552 Internal::C_memory_free(data);
562 return reinterpret_cast<ExternalString*
>(Internal::VRay_VRayServer_exportSceneBuffer(serverNative, length, flags));
565 int addHosts(
const char* hosts) {
566 if (Internal::VRay_isDR2())
567 return Internal::VRay_VRayServer_addHosts(serverNative, hosts);
576 int removeHosts(
const char* hosts) {
577 if (Internal::VRay_isDR2())
578 return Internal::VRay_VRayServer_removeHosts(serverNative, hosts);
581 throw NotSupportedErr();
587 int resetHosts(
const char* hosts) {
588 if (Internal::VRay_isDR2())
589 return Internal::VRay_VRayServer_resetHosts(serverNative, hosts);
592 throw NotSupportedErr();
598 char* getAllHosts(
int* size)
const {
599 if (Internal::VRay_isDR2())
600 return Internal::VRay_VRayServer_getAllHosts(serverNative, size);
603 throw NotSupportedErr();
609 char* getActiveHosts(
int* size)
const {
610 if (Internal::VRay_isDR2())
611 return Internal::VRay_VRayServer_getActiveHosts(serverNative, size);
614 throw NotSupportedErr();
620 char* getInactiveHosts(
int* size)
const {
621 if (Internal::VRay_isDR2())
622 return Internal::VRay_VRayServer_getInactiveHosts(serverNative, size);
625 throw NotSupportedErr();
636 VRayLiveLinkServerNative* serverNative;
640 if (Internal::VRay_isDR2())
641 return static_cast<VRayLiveLinkServer*
>(Internal::VRay_VRayLiveLinkServer_getUserData(
static_cast<VRayLiveLinkServerNative*
>(serverNative), 0));
647 if (Internal::VRay_isDR2()) {
648 serverNative = Internal::VRay_VRayLiveLinkServer_create(options, &licErr.errs);
649 if (serverNative) Internal::VRay_VRayLiveLinkServer_setUserData(serverNative, 0,
this);
659 static void serverStartCallback(
const Internal::CallbackParamsBase* params) {
662 fn(*server, params->instant, params->userData);
665 template<
class T,
void (T::* TMethod)(VRayServer&,
double instant,
void* userData)>
666 static void serverStartCallbackT(
const Internal::CallbackParamsBase* params) {
668 (
static_cast<T*
>(params->userObject)->*TMethod)(*server, params->instant, params->userData);
671 static void hostConnectedCallback(
const Internal::ConnectParams* params) {
673 auto fn = (void(*)(
VRayLiveLinkServer&,
const char*, double,
void*))params->userObject;
674 fn(*server, params->hostname, params->instant, params->userData);
677 template<
class T,
void (T::* TMethod)(VRayServer&, const
char* hostName,
double instant,
void* userData)>
678 static void hostConnectedCallbackT(
const Internal::ConnectParams* params) {
680 (
static_cast<T*
>(params->userObject)->*TMethod)(*server, params->hostname, params->instant, params->userData);
683 static void logMessageCallback(
const Internal::LogMessageParams* params) {
685 auto fn = (void(*)(
VRayLiveLinkServer&,
const char*, MessageLevel, double,
void*))params->userObject;
686 fn(*server, params->message,
static_cast<MessageLevel
>(params->level), params->instant, params->userData);
689 template<
class T,
void (T::* TMethod)(VRayLiveLinkServer& renderer, const
char* msg, MessageLevel level,
double instant,
void* userData)>
690 static void logMessageCallbackT(
const Internal::LogMessageParams* params) {
692 (
static_cast<T*
>(params->userObject)->*TMethod)(*server, params->message,
static_cast<MessageLevel
>(params->level), params->instant, params->userData);
695 static void progressCallback(
const Internal::ProgressParams* params) {
697 auto fn = (void(*)(
VRayLiveLinkServer&,
const char*, int, int, double,
void*))params->userObject;
698 fn(*server, params->message, params->progress, params->total, params->instant, params->userData);
701 template<
class T,
void (T::* TMethod)(VRayServer&, const
char* msg,
int elementNumber,
int elementsCount,
double,
void* userData)>
702 static void progressCallbackT(
const Internal::ProgressParams* params) {
704 (
static_cast<T*
>(params->userObject)->*TMethod)(*server, params->message, params->progress, params->total, params->instant, params->userData);
707 static void sceneUpdateCallback(
const Internal::SceneUpdateParams* params) {
709 auto fn = (void(*)(
VRayLiveLinkServer&, int, uint64_t, uint64_t,
const char*, double,
void*))params->userObject;
710 fn(*server, params->action, params->changeIndex, params->pluginId, params->name, params->instant, params->userData);
713 template<
class T,
void (T::* TMethod)(VRayLiveLinkServer&,
int, u
int64_t, u
int64_t, const
char* name,
double instant,
void* userData)>
714 static void sceneUpdateCallbackT(
const Internal::SceneUpdateParams* params) {
716 (
static_cast<T*
>(params->userObject)->*TMethod)(*server, params->action, params->changeIndex, params->pluginId, params->name, params->instant, params->userData);
721 createInstance(
nullptr);
726 createInstance(&optionsInternal);
731 Internal::VRay_VRayLiveLinkServer_release(serverNative);
737 operator bool()
const {
738 return !!serverNative;
741 LicenseError getLicenseError()
const {
745 void setOnServerStart(
void (*callback)(VRayLiveLinkServer&,
double instant,
void*),
const void* userData =
nullptr) {
746 Internal::CallbackData<Internal::OnServerStart> callbackData = { serverStartCallback, serverNative, (
void*)callback, userData };
747 Internal::VRay_VRayLiveLinkServer_setServerStartCallback(serverNative, callback ? &callbackData :
nullptr);
750 template<
class T,
void (T::* TMethod)(VRayLiveLinkServer&,
double,
void*)>
751 void setOnServerStart(T&
object,
const void* userData =
nullptr) {
752 Internal::CallbackData<Internal::OnServerStart> callbackData = { &serverStartCallbackT<T, TMethod>, serverNative, &object, userData };
753 Internal::VRay_VRayLiveLinkServer_setServerStartCallback(serverNative, &callbackData);
756 void setOnServerClose(
void (*callback)(VRayLiveLinkServer&,
double instant,
void*),
const void* userData =
nullptr) {
757 Internal::CallbackData<Internal::OnServerClose> callbackData = { serverStartCallback, serverNative, (
void*)callback, userData };
758 Internal::VRay_VRayLiveLinkServer_setServerCloseCallback(serverNative, callback ? &callbackData :
nullptr);
761 template<
class T,
void (T::* TMethod)(VRayLiveLinkServer&,
double,
void*)>
762 void setOnServerClose(T&
object,
const void* userData =
nullptr) {
763 Internal::CallbackData<Internal::OnServerClose> callbackData = { &serverStartCallbackT<T, TMethod>, serverNative, &object, userData };
764 Internal::VRay_VRayLiveLinkServer_setServerCloseCallback(serverNative, &callbackData);
767 void setOnConnect(
void (*callback)(VRayLiveLinkServer&,
const char* msg,
double instant,
void*),
const void* userData =
nullptr) {
768 Internal::CallbackData<Internal::OnConnect> callbackData = { hostConnectedCallback, serverNative, (
void*)callback, userData };
769 Internal::VRay_VRayLiveLinkServer_setConnectCallback(serverNative, callback ? &callbackData :
nullptr);
772 template<
class T,
void (T::* TMethod)(VRayLiveLinkServer&, const
char* msg,
double,
void*)>
773 void setOnDisconnect(T&
object,
const void* userData =
nullptr) {
774 Internal::CallbackData<Internal::OnConnect> callbackData = { &hostConnectedCallbackT<T, TMethod>, serverNative, &object, userData };
775 Internal::VRay_VRayLiveLinkServer_setDisconnectCallback(serverNative, &callbackData);
778 void setOnDisconnect(
void (*callback)(VRayLiveLinkServer&,
const char* msg,
double instant,
void*),
const void* userData =
nullptr) {
779 Internal::CallbackData<Internal::OnConnect> callbackData = { hostConnectedCallback, serverNative, (
void*)callback, userData };
780 Internal::VRay_VRayLiveLinkServer_setDisconnectCallback(serverNative, callback ? &callbackData :
nullptr);
783 template<
class T,
void (T::* TMethod)(VRayLiveLinkServer&, const
char* msg,
double,
void*)>
784 void setOnConnect(T&
object,
const void* userData =
nullptr) {
785 Internal::CallbackData<Internal::OnConnect> callbackData = { &hostConnectedCallbackT<T, TMethod>, serverNative, &object, userData };
786 Internal::VRay_VRayLiveLinkServer_setConnectCallback(serverNative, &callbackData);
789 void setOnLogMessage(
void (*callback)(VRayLiveLinkServer&,
const char* msg, MessageLevel level,
double instant,
void*), MessageLevel minLevel = MessageInfo,
const void* userData =
nullptr) {
790 Internal::CallbackData<Internal::OnLogMessage> callbackData = { logMessageCallback, serverNative, (
void*)callback, userData };
791 Internal::VRay_VRayLiveLinkServer_setDumpMessageCallback(serverNative, callback ? &callbackData :
nullptr, (
int)minLevel);
794 template<
class T,
void (T::* TMethod)(VRayLiveLinkServer&, const
char* msg, MessageLevel level,
double,
void*)>
795 void setOnLogMessage(T&
object, MessageLevel minLevel = MessageInfo,
const void* userData =
nullptr) {
796 Internal::CallbackData<Internal::OnLogMessage> callbackData = { &logMessageCallbackT<T, TMethod>, serverNative, &object, userData };
797 Internal::VRay_VRayLiveLinkServer_setDumpMessageCallback(serverNative, &callbackData, (
int)minLevel);
800 void setOnProgress(
void (*callback)(VRayLiveLinkServer&,
const char* msg,
int elementNumber,
int elementsCount,
double instant,
void*),
const void* userData =
nullptr) {
801 Internal::CallbackData<Internal::OnProgress> callbackData = { progressCallback, serverNative, (
void*)callback, userData };
802 Internal::VRay_VRayLiveLinkServer_setProgressCallback(serverNative, callback ? &callbackData :
nullptr);
805 template<
class T,
void (T::* TMethod)(VRayLiveLinkServer&, const
char* msg,
int elementNumber,
int elementsCount,
double instant,
void* userData)>
806 void setOnProgress(T&
object,
const void* userData =
nullptr) {
807 Internal::CallbackData<Internal::OnProgress> callbackData = { &progressCallbackT<T, TMethod>, serverNative, &object, userData };
808 Internal::VRay_VRayLiveLinkServer_setProgressCallback(serverNative, &callbackData);
819 void setOnSceneUpdate(
void (*callback)(
VRayLiveLinkServer& vray,
int action, uint64_t changeIndex, uint64_t pluginId,
const char* name,
double instant,
void*),
const void* userData =
nullptr) {
820 Internal::CallbackData<Internal::OnSceneUpdate> callbackData = { sceneUpdateCallback, serverNative, (
void*)callback, userData };
821 Internal::VRay_VRayLiveLinkServer_setSceneUpdateCallback(serverNative, callback ? &callbackData :
nullptr);
825 template<
class T,
void (T::* TMethod)(VRayLiveLinkServer&,
int, u
int64_t, u
int64_t, const
char* name,
double instant,
void* userData)>
827 Internal::CallbackData<Internal::OnSceneUpdate> callbackData = { &sceneUpdateCallbackT<T, TMethod>, serverNative, &object, userData };
828 Internal::VRay_VRayLiveLinkServer_setSceneUpdateCallback(serverNative, &callbackData);
833 return Internal::VRay_VRayLiveLinkServer_run(serverNative);
838 return Internal::VRay_VRayLiveLinkServer_start(serverNative);
843 Internal::VRay_VRayLiveLinkServer_stop(serverNative);
852 char* data = Internal::VRay_VRayLiveLinkServer_exportSceneBuffer(serverNative, len, flags);
854 if (data && len > 0) {
855 buf.assign(data, len);
856 Internal::C_memory_free(data);
866 return reinterpret_cast<ExternalString*
>(Internal::VRay_VRayLiveLinkServer_exportSceneBuffer(serverNative, length, flags));
Definition: vraysrv.hpp:632
int start()
Starts V-Ray LiveLink Server in a separate thread. Non-blocking call.
Definition: vraysrv.hpp:837
ExternalString * exportSceneBufferFast(size_t &length, int flags) const
Definition: vraysrv.hpp:865
int run()
Starts V-Ray LiveLink Server. Blocking call.
Definition: vraysrv.hpp:832
void stop()
Terminates the server started by 'start' in a separate thread.
Definition: vraysrv.hpp:842
void setOnSceneUpdate(T &object, const void *userData=nullptr)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: vraysrv.hpp:826
void setOnSceneUpdate(void(*callback)(VRayLiveLinkServer &vray, int action, uint64_t changeIndex, uint64_t pluginId, const char *name, double instant, void *), const void *userData=nullptr)
Definition: vraysrv.hpp:819
std::string exportSceneBuffer(int flags) const
Definition: vraysrv.hpp:850
Definition: vraysrv.hpp:333
std::string exportSceneBuffer(int flags) const
Definition: vraysrv.hpp:546
ExternalString * exportSceneBufferFast(size_t &length, int flags) const
Definition: vraysrv.hpp:561
void setOnSceneUpdate(void(*callback)(VRayServer &vray, int action, uint64_t changeIndex, uint64_t pluginId, const char *name, double instant, void *), const void *userData=nullptr)
Definition: vraysrv.hpp:515
int run()
Starts V-Ray Server. Blocking call.
Definition: vraysrv.hpp:528
int start()
Starts V-Ray Server in a separate thread. Non-blocking call.
Definition: vraysrv.hpp:533
void setOnSceneUpdate(T &object, const void *userData=nullptr)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: vraysrv.hpp:522
void stop()
Terminates the server started by 'start' in a separate thread.
Definition: vraysrv.hpp:538
Definition: vraysrv.hpp:237
@ Internal
No UI should be created in its "Properties" UI.
Definition: vraysdk.hpp:350
Definition: vraysrv.hpp:216
This is thrown when a renderer instance can't be created. This is usually due to a license issue.
Definition: vraythrow.hpp:32
Definition: vraysrv.hpp:186
Definition: vraysrv.hpp:154
Definition: vraysrv.hpp:130
bool noRenderLicensePreCheck
Do not check if RenderNode license is available when creating the server (it's always checked when re...
Definition: vraysrv.hpp:135
int portNumber
Which port to accept connections on (leave at 0 for default - 20207 (DR1) or 20209 (DR2))
Definition: vraysrv.hpp:131
This is thrown when unsupported function is called, e.g. DR1 function in DR2 build.
Definition: vraythrow.hpp:86
Definition: vraysrv.hpp:59
bool dr2ListenOnIpv4
Whether to listen on IPv4 local sockets.
Definition: vraysrv.hpp:90
std::string pluginLibraryPath
Alternative path to folder containing V-Ray plugins.
Definition: vraysrv.hpp:63
bool dr2DisableUdp
Whether UDP discovery should be disabled.
Definition: vraysrv.hpp:89
float cachedAssetsLimitValue
Value for the cache limit (hours or GB).
Definition: vraysrv.hpp:80
bool keepSceneInMemory
Do not write a temporary vrscene-file, keep the scene data in memory only, default: false.
Definition: vraysrv.hpp:70
bool dr2ListenOnIpv6
Whether to listen on IPv6 local sockets.
Definition: vraysrv.hpp:91
bool dr2SecureConnection
Whether SSL/TSL should be enabled for connections from/to this dispatcher/server.
Definition: vraysrv.hpp:88
int dr2WorkerThreadsPerServer
Number of worker threads per each server instance we start.
Definition: vraysrv.hpp:96
int dr2ConnectTimeout
Initial connection timeout in seconds.
Definition: vraysrv.hpp:97
bool overwriteLocalCacheSettings
True to override any local cache settings on the render servers with the value from the client machin...
Definition: vraysrv.hpp:71
bool changeCurrentDirectory
Change the current folder to remoteScenePath, default: false.
Definition: vraysrv.hpp:69
bool dr2RunLocalRenderServer
(Dispatcher only) Whether the dispatcher should run a local render server
Definition: vraysrv.hpp:87
bool dr2AsDispatcher
Whether the instance will act as a Dedicated Dispatcher.
Definition: vraysrv.hpp:86
bool dr2PipelinedUpstream
Whether to use pipelining. Note pipelining will be disabled internally (even if requested),...
Definition: vraysrv.hpp:92
int portNumber
Which port to accept connections on (leave at 0 for default - 20207 (DR1) or 20209 (DR2))
Definition: vraysrv.hpp:60
bool runAsLiveLink
True to use the underlying renderer as a dr/live-link interface. Default: false.
Definition: vraysrv.hpp:72
std::string remoteScenePath
The folder in which the received vrscene-file will be written, default is the temp folder.
Definition: vraysrv.hpp:62
std::string includePaths
Semicolon separated list of file system paths to the folders containing scene include files.
Definition: vraysrv.hpp:64
bool noRenderLicensePreCheck
Do not check if RenderNode license is available when creating the server (it's always checked when re...
Definition: vraysrv.hpp:68
int numThreads
Number of threads to use for rendering (leave at 0 for all available).
Definition: vraysrv.hpp:61
int dr2UpstreamChannels
Number of upstream connections, which the client side will use, when pipelining is not enabled.
Definition: vraysrv.hpp:98
std::string dr2HttpProxy
server:port connection parameter for http connections via proxy
Definition: vraysrv.hpp:95