/*========================================================================= Program: Visualization Toolkit Module: vtkTexturedActor2D.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 "vtkTexturedActor2D.h" #include "vtkInformation.h" #include "vtkObjectFactory.h" #include "vtkRenderer.h" #include "vtkTexture.h" vtkStandardNewMacro(vtkTexturedActor2D); vtkCxxSetObjectMacro(vtkTexturedActor2D, Texture, vtkTexture); //------------------------------------------------------------------------------ vtkTexturedActor2D::vtkTexturedActor2D() { this->Texture = nullptr; } //------------------------------------------------------------------------------ vtkTexturedActor2D::~vtkTexturedActor2D() { this->SetTexture(nullptr); } //------------------------------------------------------------------------------ void vtkTexturedActor2D::ReleaseGraphicsResources(vtkWindow* win) { this->Superclass::ReleaseGraphicsResources(win); // Pass this information to the texture. if (this->Texture) { this->Texture->ReleaseGraphicsResources(win); } } //------------------------------------------------------------------------------ int vtkTexturedActor2D::RenderOverlay(vtkViewport* viewport) { // Render the texture. vtkRenderer* ren = vtkRenderer::SafeDownCast(viewport); vtkInformation* info = this->GetPropertyKeys(); if (this->Texture) { this->Texture->Render(ren); if (!info) { info = vtkInformation::New(); this->SetPropertyKeys(info); info->Delete(); } info->Set(vtkProp::GeneralTextureUnit(), this->Texture->GetTextureUnit()); } else if (info) { info->Remove(vtkProp::GeneralTextureUnit()); } int result = this->Superclass::RenderOverlay(viewport); if (this->Texture) { this->Texture->PostRender(ren); } return result; } //------------------------------------------------------------------------------ int vtkTexturedActor2D::RenderOpaqueGeometry(vtkViewport* viewport) { // Render the texture. vtkRenderer* ren = vtkRenderer::SafeDownCast(viewport); if (this->Texture) { this->Texture->Render(ren); } int result = this->Superclass::RenderOpaqueGeometry(viewport); if (this->Texture) { this->Texture->PostRender(ren); } return result; } //------------------------------------------------------------------------------ int vtkTexturedActor2D::RenderTranslucentPolygonalGeometry(vtkViewport* viewport) { // Render the texture. vtkRenderer* ren = vtkRenderer::SafeDownCast(viewport); if (this->Texture) { this->Texture->Render(ren); } int result = this->Superclass::RenderTranslucentPolygonalGeometry(viewport); if (this->Texture) { this->Texture->PostRender(ren); } return result; } //------------------------------------------------------------------------------ vtkMTimeType vtkTexturedActor2D::GetMTime() { vtkMTimeType mTime = vtkActor2D::GetMTime(); vtkMTimeType time; if (this->Texture) { time = this->Texture->GetMTime(); mTime = (time > mTime ? time : mTime); } return mTime; } //------------------------------------------------------------------------------ void vtkTexturedActor2D::ShallowCopy(vtkProp* prop) { vtkTexturedActor2D* a = vtkTexturedActor2D::SafeDownCast(prop); if (a) { this->SetTexture(a->GetTexture()); } // Now do superclass. this->Superclass::ShallowCopy(prop); } //------------------------------------------------------------------------------ void vtkTexturedActor2D::PrintSelf(ostream& os, vtkIndent indent) { this->Superclass::PrintSelf(os, indent); os << indent << "Texture: " << (this->Texture ? "" : "(none)") << endl; if (this->Texture) { this->Texture->PrintSelf(os, indent.GetNextIndent()); } }