You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/3rd/VTK7.1/source/VTK-7.1.1/Rendering/OpenGL/vtkOpenGLHardwareSelector.cxx

218 lines
5.3 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkOpenGLHardwareSelector.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 "vtkOpenGLHardwareSelector.h"
#include "vtkObjectFactory.h"
#include "vtkRenderWindow.h"
#include "vtkOpenGLRenderWindow.h"
#include "vtkOpenGLExtensionManager.h"
#include "vtkgl.h"
#include "vtkOpenGLError.h"
// Description:
// Internal state and helper methods.
class vtkOpenGLHardwareSelector::vtkInternals
{
public:
vtkOpenGLRenderWindow *Context;
bool MultisampleSupport;
bool OriginalMultisample;
bool OriginalLighting;
bool OriginalBlending;
vtkInternals() :
Context(NULL),
MultisampleSupport(false),
OriginalMultisample(false),
OriginalLighting(false),
OriginalBlending(false)
{}
// Description:
// Set the rendering context and load the required
// extensions.
void SetContext(vtkRenderWindow *context)
{
if (this->Context != context)
{
this->MultisampleSupport = false;
this->Context = vtkOpenGLRenderWindow::SafeDownCast(context);
if (this->Context)
{
vtkOpenGLExtensionManager *manager
= this->Context->GetExtensionManager();
// don't need any of the functions so don't bother
// to load the extension, but do make sure enums are
// defined.
this->MultisampleSupport
= manager->ExtensionSupported("GL_ARB_multisample")==1;
}
}
}
// Description:
// Enable/disable lighting
void EnableLighting(bool mode)
{
if (mode)
{
glEnable(GL_LIGHTING);
}
else
{
glDisable(GL_LIGHTING);
}
}
// Description:
// Check if lighting is enabled.
bool QueryLighting()
{
if (glIsEnabled(GL_LIGHTING))
{
return true;
}
else
{
return false;
}
}
// Description:
// Enable/disable multisampling.
void EnableMultisampling(bool mode)
{
if (this->MultisampleSupport)
{
if (mode)
{
glEnable(vtkgl::MULTISAMPLE);
}
else
{
glDisable(vtkgl::MULTISAMPLE);
}
}
}
// Description:
// Check if multisample is enabled.
bool QueryMultisampling()
{
if (this->MultisampleSupport && glIsEnabled(vtkgl::MULTISAMPLE))
{
return true;
}
else
{
return false;
}
}
// Description:
// Enable/Disable blending
void EnableBlending(bool mode)
{
if (mode)
{
glEnable(GL_BLEND);
}
else
{
glDisable(GL_BLEND);
}
}
// Description:
// Check if blending is enabled.
bool QueryBlending()
{
if (glIsEnabled(GL_BLEND))
{
return true;
}
else
{
return false;
}
}
};
//----------------------------------------------------------------------------
vtkStandardNewMacro(vtkOpenGLHardwareSelector);
//----------------------------------------------------------------------------
vtkOpenGLHardwareSelector::vtkOpenGLHardwareSelector()
{
#ifdef vtkOpenGLHardwareSelectorDEBUG
cerr << "=====vtkOpenGLHardwareSelector::vtkOpenGLHardwareSelector" << endl;
#endif
this->Internals = new vtkInternals;
}
//----------------------------------------------------------------------------
vtkOpenGLHardwareSelector::~vtkOpenGLHardwareSelector()
{
#ifdef vtkOpenGLHardwareSelectorDEBUG
cerr << "=====vtkOpenGLHardwareSelector::~vtkOpenGLHardwareSelector" << endl;
#endif
delete this->Internals;
}
//----------------------------------------------------------------------------
void vtkOpenGLHardwareSelector::BeginRenderProp(vtkRenderWindow *context)
{
#ifdef vtkOpenGLHardwareSelectorDEBUG
cerr << "=====vtkOpenGLHardwareSelector::BeginRenderProp" << endl;
#endif
this->Internals->SetContext(context);
// Disable multisample, lighting, and blending.
this->Internals->OriginalMultisample = this->Internals->QueryMultisampling();
this->Internals->EnableMultisampling(false);
this->Internals->OriginalLighting = this->Internals->QueryLighting();
this->Internals->EnableLighting(false);
this->Internals->OriginalBlending = this->Internals->QueryBlending();
this->Internals->EnableBlending(false);
}
//----------------------------------------------------------------------------
void vtkOpenGLHardwareSelector::EndRenderProp(vtkRenderWindow *)
{
#ifdef vtkOpenGLHardwareSelectorDEBUG
cerr << "=====vtkOpenGLHardwareSelector::EndRenderProp" << endl;
#endif
// Restore multisample, lighting, and blending.
this->Internals->EnableMultisampling(this->Internals->OriginalMultisample);
this->Internals->EnableLighting(this->Internals->OriginalLighting);
this->Internals->EnableBlending(this->Internals->OriginalBlending);
}
//----------------------------------------------------------------------------
void vtkOpenGLHardwareSelector::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os, indent);
os
<< indent << "MultisampleSupport: "
<< this->Internals->MultisampleSupport
<< endl;
}