diff --git a/Serialization/Manager/vtkObjectManager.h b/Serialization/Manager/vtkObjectManager.h index 75bd5c7990e24b692c8669dc0eeffaea1d5fe439..44ed8ba1f2ea7b0d6290fcec1c0d6758613efb87 100644 --- a/Serialization/Manager/vtkObjectManager.h +++ b/Serialization/Manager/vtkObjectManager.h @@ -42,7 +42,7 @@ public: /** * Loads the default (de)serialization handlers and constructors for VTK classes */ - bool Initialize(); + virtual bool Initialize(); bool InitializeDefaultHandlers(); ///@} diff --git a/Web/WebAssembly/CMakeLists.txt b/Web/WebAssembly/CMakeLists.txt index 8b13e97b4eaccc3956130e1f4c1de7210bb95c61..82f8fc9a0421891ff6f0ddb17e7a44ec26ab97af 100644 --- a/Web/WebAssembly/CMakeLists.txt +++ b/Web/WebAssembly/CMakeLists.txt @@ -11,6 +11,18 @@ vtk_module_add_module(VTK::WebAssembly vtk_add_test_mangling(VTK::WebAssembly) +set(_vtk_wasm_scene_manager_autoinit_mods) +get_property(_vtk_wasm_scene_manager_optional_deps GLOBAL + PROPERTY "_vtk_module_VTK::WebAssembly_optional_depends") +foreach(_module IN LISTS _vtk_wasm_scene_manager_private_deps _vtk_wasm_scene_manager_optional_deps) + if (NOT TARGET "${_module}") + continue () + endif () + list(APPEND _vtk_wasm_scene_manager_autoinit_mods "${_module}") +endforeach() +vtk_module_autoinit( + TARGETS WebAssembly + MODULES ${_vtk_wasm_scene_manager_autoinit_mods}) # ----------------------------------------------------------------------------- # Emscripten compile+link options # ----------------------------------------------------------------------------- @@ -41,7 +53,7 @@ endif () # ----------------------------------------------------------------------------- set(emscripten_optimizations) set(emscripten_debug_options) -set(vtk_scene_manager_wasm_optimize "BEST") +set(vtk_scene_manager_wasm_optimize "NO_OPTIMIZATION") set(vtk_scene_manager_wasm_optimize_NO_OPTIMIZATION "-O0") set(vtk_scene_manager_wasm_optimize_LITTLE "-O1") set(vtk_scene_manager_wasm_optimize_MORE "-O2") @@ -59,7 +71,7 @@ else () message (FATAL_ERROR "Unrecognized value for vtk_scene_manager_wasm_optimize=${vtk_scene_manager_wasm_optimize}") endif () -set(vtk_scene_manager_wasm_debuginfo "NONE") +set(vtk_scene_manager_wasm_debuginfo "PROFILE") set(vtk_scene_manager_wasm_debuginfo_NONE "-g0") set(vtk_scene_manager_wasm_debuginfo_READABLE_JS "-g1") set(vtk_scene_manager_wasm_debuginfo_PROFILE "-g2") @@ -77,13 +89,11 @@ endif () vtk_module_add_executable(WasmSceneManager BASENAME vtkWasmSceneManager vtkWasmSceneManagerEmBinding.cxx) -target_link_libraries(WasmSceneManager - PRIVATE - VTK::WebAssembly - VTK::RenderingOpenGL2 - VTK::RenderingUI) add_executable("VTK::WasmSceneManager" ALIAS WasmSceneManager) +target_link_libraries(WasmSceneManager + PRIVATE + VTK::WebAssembly) target_compile_options(WasmSceneManager PRIVATE ${emscripten_compile_options} diff --git a/Web/WebAssembly/vtk.module b/Web/WebAssembly/vtk.module index ff7a6e6dfcf9700bba7f0b7e06f6586014c7b229..bf2a3ff7a12a3635ec1a635efe115c8e73d70cf1 100644 --- a/Web/WebAssembly/vtk.module +++ b/Web/WebAssembly/vtk.module @@ -10,3 +10,8 @@ DEPENDS VTK::SerializationManager PRIVATE_DEPENDS VTK::RenderingCore +OPTIONAL_DEPENDS + VTK::RenderingContextOpenGL2 + VTK::RenderingOpenGL2 + VTK::RenderingUI + VTK::RenderingVolumeOpenGL2 diff --git a/Web/WebAssembly/vtkWasmSceneManager.cxx b/Web/WebAssembly/vtkWasmSceneManager.cxx index 5dbd326586632860c9c5536e074cb263c4c9bd89..ecb70278c9e268f19eea97c306fbf2f84c3f4495 100644 --- a/Web/WebAssembly/vtkWasmSceneManager.cxx +++ b/Web/WebAssembly/vtkWasmSceneManager.cxx @@ -10,6 +10,20 @@ #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" +// Init factories. +#ifdef VTK_MODULE_ENABLE_VTK_RenderingContextOpenGL2 +#include "vtkRenderingContextOpenGL2Module.h" +#endif +#ifdef VTK_MODULE_ENABLE_VTK_RenderingOpenGL2 +#include "vtkOpenGLPolyDataMapper.h" // needed to remove unused mapper, also includes vtkRenderingOpenGL2Module.h +#endif +#ifdef VTK_MODULE_ENABLE_VTK_RenderingUI +#include "vtkRenderingUIModule.h" +#endif +#ifdef VTK_MODULE_ENABLE_VTK_RenderingVolumeOpenGL2 +#include "vtkRenderingVolumeOpenGL2Module.h" +#endif + VTK_ABI_NAMESPACE_BEGIN //------------------------------------------------------------------------------- vtkStandardNewMacro(vtkWasmSceneManager); @@ -20,6 +34,22 @@ vtkWasmSceneManager::vtkWasmSceneManager() = default; //------------------------------------------------------------------------------- vtkWasmSceneManager::~vtkWasmSceneManager() = default; +//------------------------------------------------------------------------------- +bool vtkWasmSceneManager::Initialize() +{ + bool result = this->Superclass::Initialize(); +#ifdef VTK_MODULE_ENABLE_VTK_RenderingOpenGL2 + // Remove the default vtkOpenGLPolyDataMapper as it is not used with wasm build. + /// get rid of serialization handler + this->Serializer->UnRegisterHandler(typeid(vtkOpenGLPolyDataMapper)); + /// get rid of de-serialization handler + this->Deserializer->UnRegisterHandler(typeid(vtkOpenGLPolyDataMapper)); + /// get rid of constructor + this->Deserializer->UnRegisterConstructor("vtkOpenGLPolyDataMapper"); +#endif + return result; +} + //------------------------------------------------------------------------------- void vtkWasmSceneManager::PrintSelf(ostream& os, vtkIndent indent) { diff --git a/Web/WebAssembly/vtkWasmSceneManager.h b/Web/WebAssembly/vtkWasmSceneManager.h index d386a267f7f3dbbe430053a9b61b5da503fcab40..ef2361120f24c38feb80b075724f506060c83791 100644 --- a/Web/WebAssembly/vtkWasmSceneManager.h +++ b/Web/WebAssembly/vtkWasmSceneManager.h @@ -29,6 +29,8 @@ public: vtkTypeMacro(vtkWasmSceneManager, vtkObjectManager); void PrintSelf(ostream& os, vtkIndent indent) override; + bool Initialize() override; + /** * Set the size of the `vtkRenderWindow` object at `identifier` to * the supplied dimesions. diff --git a/Web/WebAssembly/vtkWasmSceneManagerEmBinding.cxx b/Web/WebAssembly/vtkWasmSceneManagerEmBinding.cxx index 39be3f6788bee7dfb1bac1c55885d4d08348e454..e3f0dfa09f44beab978de90de1078c19523e418c 100644 --- a/Web/WebAssembly/vtkWasmSceneManagerEmBinding.cxx +++ b/Web/WebAssembly/vtkWasmSceneManagerEmBinding.cxx @@ -4,7 +4,6 @@ #include <emscripten/bind.h> #include "vtkDataArrayRange.h" -#include "vtkOpenGLPolyDataMapper.h" #include "vtkTypeUInt8Array.h" #include "vtkVersion.h" #include "vtkWasmSceneManager.h" @@ -33,12 +32,7 @@ thread_local const val JSON = val::global("JSON"); bool initialize() { Manager = vtkWasmSceneManager::New(); - bool result = Manager->Initialize(); - // Remove the default vtkOpenGLPolyDataMapper as it is not used with wasm build. - Manager->GetSerializer()->UnRegisterHandler(typeid(vtkOpenGLPolyDataMapper)); - Manager->GetDeserializer()->UnRegisterHandler(typeid(vtkOpenGLPolyDataMapper)); - Manager->GetDeserializer()->UnRegisterConstructor("vtkOpenGLPolyDataMapper"); - return result; + return Manager->Initialize(); } //-------------------------------------------------------------------------------