mirror of https://gitee.com/openkylin/vtk9.git
114 lines
3.2 KiB
C++
114 lines
3.2 KiB
C++
|
/*=========================================================================
|
||
|
|
||
|
Program: Visualization Toolkit
|
||
|
Module: vtkOpenGLContextActor.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 "vtkOpenGLContextActor.h"
|
||
|
|
||
|
#include "vtkContext2D.h"
|
||
|
#include "vtkContext3D.h"
|
||
|
#include "vtkContextScene.h"
|
||
|
#include "vtkObjectFactory.h"
|
||
|
#include "vtkOpenGLContextDevice2D.h"
|
||
|
#include "vtkOpenGLContextDevice3D.h"
|
||
|
#include "vtkRenderer.h"
|
||
|
|
||
|
vtkStandardNewMacro(vtkOpenGLContextActor);
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
vtkOpenGLContextActor::vtkOpenGLContextActor() = default;
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
vtkOpenGLContextActor::~vtkOpenGLContextActor() = default;
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
void vtkOpenGLContextActor::ReleaseGraphicsResources(vtkWindow* window)
|
||
|
{
|
||
|
vtkOpenGLContextDevice2D* device =
|
||
|
vtkOpenGLContextDevice2D::SafeDownCast(this->Context->GetDevice());
|
||
|
if (device)
|
||
|
{
|
||
|
device->ReleaseGraphicsResources(window);
|
||
|
}
|
||
|
|
||
|
if (this->Scene)
|
||
|
{
|
||
|
this->Scene->ReleaseGraphicsResources();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
// Renders an actor2D's property and then it's mapper.
|
||
|
int vtkOpenGLContextActor::RenderOverlay(vtkViewport* viewport)
|
||
|
{
|
||
|
vtkDebugMacro(<< "vtkContextActor::RenderOverlay");
|
||
|
|
||
|
if (!this->Context)
|
||
|
{
|
||
|
vtkErrorMacro(<< "vtkContextActor::Render - No painter set");
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if (!this->Initialized)
|
||
|
{
|
||
|
this->Initialize(viewport);
|
||
|
}
|
||
|
|
||
|
vtkOpenGLContextDevice3D::SafeDownCast(this->Context3D->GetDevice())->Begin(viewport);
|
||
|
|
||
|
return this->Superclass::RenderOverlay(viewport);
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
void vtkOpenGLContextActor::Initialize(vtkViewport* viewport)
|
||
|
{
|
||
|
vtkContextDevice2D* dev2D = nullptr;
|
||
|
vtkDebugMacro("Using OpenGL 2 for 2D rendering.");
|
||
|
if (this->ForceDevice)
|
||
|
{
|
||
|
dev2D = this->ForceDevice;
|
||
|
dev2D->Register(this);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
dev2D = vtkOpenGLContextDevice2D::New();
|
||
|
}
|
||
|
|
||
|
if (dev2D)
|
||
|
{
|
||
|
this->Context->Begin(dev2D);
|
||
|
|
||
|
vtkOpenGLContextDevice2D* oglDev2D = vtkOpenGLContextDevice2D::SafeDownCast(dev2D);
|
||
|
if (oglDev2D)
|
||
|
{
|
||
|
vtkOpenGLContextDevice3D* dev3D = vtkOpenGLContextDevice3D::New();
|
||
|
dev3D->Initialize(vtkRenderer::SafeDownCast(viewport), oglDev2D);
|
||
|
this->Context3D->Begin(dev3D);
|
||
|
dev3D->Delete();
|
||
|
}
|
||
|
|
||
|
dev2D->Delete();
|
||
|
this->Initialized = true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Failed
|
||
|
vtkErrorMacro("Error: failed to initialize the render device.");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
void vtkOpenGLContextActor::PrintSelf(ostream& os, vtkIndent indent)
|
||
|
{
|
||
|
this->Superclass::PrintSelf(os, indent);
|
||
|
}
|