1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
/*=========================================================================
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"
VTK_ABI_NAMESPACE_BEGIN
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);
}
VTK_ABI_NAMESPACE_END
|