include(vtkObjectFactory)

find_package(DirectXModern REQUIRED)

set(Module_SRCS
  ${CMAKE_CURRENT_BINARY_DIR}/${vtk-module}ObjectFactory.cxx
  vtkDirect3DActor.cxx
  vtkDirect3DBufferObject.cxx
  vtkDirect3DCamera.cxx
  vtkDirect3DConstantBufferObject.cxx
  vtkDirect3DHelper.cxx
  vtkDirect3DIndexBufferObject.cxx
  vtkDirect3DPolyDataMapper.cxx
  vtkDirect3DProperty.cxx
  vtkDirect3DRenderPass.cxx
  vtkDirect3DRenderWindow.cxx
  vtkDirect3DRenderWindowInteractor.cxx
  vtkDirect3DRenderer.cxx
  vtkDirect3DShader.cxx
  vtkDirect3DShaderCache.cxx
  vtkDirect3DShaderProgram.cxx
  vtkDirect3DVertexBufferObject.cxx
  )

set(shader_files
  hlsl/vtkPolyDataFS.hlsl
  hlsl/vtkPolyDataVS.hlsl
  )
unset(shader_h_files)
foreach(file ${shader_files})
  get_filename_component(file_we ${file} NAME_WE)
  set(src  ${CMAKE_CURRENT_SOURCE_DIR}/${file})
  set(res  ${CMAKE_CURRENT_BINARY_DIR}/${file_we}.cxx)
  set(resh ${CMAKE_CURRENT_BINARY_DIR}/${file_we}.h)
  list(APPEND shader_h_files ${resh})
  add_custom_command(
    OUTPUT ${res} ${resh}
    DEPENDS ${src} vtkEncodeString
    COMMAND vtkEncodeString
    ARGS ${res} ${src} ${file_we}
      --build-header VTKRENDERINGDIRECT3D_EXPORT vtkRenderingDirect3DModule.h
    )
  list(APPEND Module_SRCS ${res})
  set_source_files_properties(${file_we}
    PROPERTIES
      WRAP_EXCLUDE 1
      WRAP_EXCLUDE_PYTHON 1
    )
endforeach()

# setup factory overrides
set(d3d_overrides
  Actor
  Camera
  PolyDataMapper
  Property
  Renderer
  RenderWindow
  RenderWindowInteractor
  )

foreach(_override ${d3d_overrides})
  vtk_add_override(vtk${_override} vtkDirect3D${_override})
endforeach()

vtk_object_factory_configure("${vtk_module_overrides}")

list(APPEND ${vtk-module}_SYSTEM_INCLUDE_DIRS ${DirectX_D3D11_INCLUDE_DIR})

vtk_module_library(${vtk-module} ${Module_SRCS})

vtk_module_link_libraries(${vtk-module} LINK_PRIVATE ${DirectX_D3D11_LIBRARY} )
