/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkOSPRayViewNodeFactory.cxx

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
#include "vtkOSPRayViewNodeFactory.h"
#include "vtkObjectFactory.h"

#include "vtkOSPRayActorNode.h"
#include "vtkOSPRayAMRVolumeMapperNode.h"
#include "vtkOSPRayCameraNode.h"
#include "vtkOSPRayCompositePolyDataMapper2Node.h"
#include "vtkOSPRayLightNode.h"
#include "vtkOSPRayRendererNode.h"
#include "vtkOSPRayPolyDataMapperNode.h"
#include "vtkOSPRayVolumeMapperNode.h"
#include "vtkOSPRayVolumeNode.h"
#include "vtkOSPRayTetrahedraMapperNode.h"

vtkViewNode *ren_maker()
{
  vtkOSPRayRendererNode *vn = vtkOSPRayRendererNode::New();
  return vn;
}

vtkViewNode *amrm_maker()
{
  vtkOSPRayAMRVolumeMapperNode *vn = vtkOSPRayAMRVolumeMapperNode::New();
  return vn;
}

vtkViewNode *act_maker()
{
  vtkOSPRayActorNode *vn = vtkOSPRayActorNode::New();
  return vn;
}

vtkViewNode *vol_maker()
{
  return vtkOSPRayVolumeNode::New();
}

vtkViewNode *cam_maker()
{
  vtkOSPRayCameraNode *vn = vtkOSPRayCameraNode::New();
  return vn;
}

vtkViewNode *light_maker()
{
  vtkOSPRayLightNode *vn = vtkOSPRayLightNode::New();
  return vn;
}

vtkViewNode *pd_maker()
{
  vtkOSPRayPolyDataMapperNode *vn = vtkOSPRayPolyDataMapperNode::New();
  return vn;
}

vtkViewNode *vm_maker()
{
  vtkOSPRayVolumeMapperNode *vn = vtkOSPRayVolumeMapperNode::New();
  return vn;
}

vtkViewNode *cpd_maker()
{
  vtkOSPRayCompositePolyDataMapper2Node *vn = vtkOSPRayCompositePolyDataMapper2Node::New();
  return vn;
}

vtkViewNode *tetm_maker()
{
  vtkOSPRayTetrahedraMapperNode *vn = vtkOSPRayTetrahedraMapperNode::New();
  return vn;
}


//============================================================================
vtkStandardNewMacro(vtkOSPRayViewNodeFactory);

//----------------------------------------------------------------------------
vtkOSPRayViewNodeFactory::vtkOSPRayViewNodeFactory()
{
  //see vtkRenderWindow::GetRenderLibrary
  this->RegisterOverride("vtkOpenGLRenderer", ren_maker);
  this->RegisterOverride("vtkOpenGLActor", act_maker);
  this->RegisterOverride("vtkPVLODActor", act_maker);
  this->RegisterOverride("vtkPVLODVolume", vol_maker);
  this->RegisterOverride("vtkVolume", vol_maker);
  this->RegisterOverride("vtkOpenGLCamera", cam_maker);
  this->RegisterOverride("vtkOpenGLLight", light_maker);
  this->RegisterOverride("vtkPVLight", light_maker);
  this->RegisterOverride("vtkPainterPolyDataMapper", pd_maker);
  this->RegisterOverride("vtkOpenGLPolyDataMapper", pd_maker);
  this->RegisterOverride("vtkSmartVolumeMapper", vm_maker);
  this->RegisterOverride("vtkOSPRayVolumeMapper", vm_maker);
  this->RegisterOverride("vtkOpenGLGPUVolumeRayCastMapper", vm_maker);
  this->RegisterOverride("vtkCompositePolyDataMapper2", cpd_maker);
  this->RegisterOverride("vtkOpenGLProjectedTetrahedraMapper", tetm_maker);
  this->RegisterOverride("vtkUnstructuredGridVolumeZSweepMapper", tetm_maker);
  this->RegisterOverride("vtkUnstructuredGridVolumeRayCastMapper", tetm_maker);
  this->RegisterOverride("vtkAMRVolumeMapper", amrm_maker);
}

//----------------------------------------------------------------------------
vtkOSPRayViewNodeFactory::~vtkOSPRayViewNodeFactory()
{
}

//----------------------------------------------------------------------------
void vtkOSPRayViewNodeFactory::PrintSelf(ostream& os, vtkIndent indent)
{
  this->Superclass::PrintSelf(os, indent);
}
