Skip to content
Snippets Groups Projects
Commit 7dfbf181 authored by Jaswant Panchumarti (Kitware)'s avatar Jaswant Panchumarti (Kitware)
Browse files

Support module autoinit in wasm scene manager

- include the relevant module.h headers of the optional module which provides factory overrides  in vtkWasmSceneManager.h so that they are registered with the vtkObjectFactory
-  call `vtk_module_autoinit` with the optional modules in cmake.
parent 8e554a2e
No related branches found
No related tags found
No related merge requests found
......@@ -42,7 +42,7 @@ public:
/**
* Loads the default (de)serialization handlers and constructors for VTK classes
*/
bool Initialize();
virtual bool Initialize();
bool InitializeDefaultHandlers();
///@}
......
......@@ -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}
......
......@@ -10,3 +10,8 @@ DEPENDS
VTK::SerializationManager
PRIVATE_DEPENDS
VTK::RenderingCore
OPTIONAL_DEPENDS
VTK::RenderingContextOpenGL2
VTK::RenderingOpenGL2
VTK::RenderingUI
VTK::RenderingVolumeOpenGL2
......@@ -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)
{
......
......@@ -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.
......
......@@ -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();
}
//-------------------------------------------------------------------------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment