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.
153 lines
4.7 KiB
C++
153 lines
4.7 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkOpenGLPolyDataMapper2D.h
|
|
|
|
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.
|
|
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkOpenGLPolyDataMapper2D
|
|
* @brief 2D PolyData support for OpenGL
|
|
*
|
|
* vtkOpenGLPolyDataMapper2D provides 2D PolyData annotation support for
|
|
* vtk under OpenGL. Normally the user should use vtkPolyDataMapper2D
|
|
* which in turn will use this class.
|
|
*
|
|
* @sa
|
|
* vtkPolyDataMapper2D
|
|
*/
|
|
|
|
#ifndef vtkOpenGLPolyDataMapper2D_h
|
|
#define vtkOpenGLPolyDataMapper2D_h
|
|
|
|
#include "vtkNew.h" // used for ivars
|
|
#include "vtkOpenGLHelper.h" // used for ivars
|
|
#include "vtkPolyDataMapper2D.h"
|
|
#include "vtkRenderingOpenGL2Module.h" // For export macro
|
|
#include <map> //for used data arrays & vbos
|
|
#include <string> // For API.
|
|
#include <vector> //for ivars
|
|
|
|
class vtkActor2D;
|
|
class vtkGenericOpenGLResourceFreeCallback;
|
|
class vtkMatrix4x4;
|
|
class vtkOpenGLBufferObject;
|
|
class vtkOpenGLCellToVTKCellMap;
|
|
class vtkOpenGLHelper;
|
|
class vtkOpenGLVertexBufferObjectGroup;
|
|
class vtkPoints;
|
|
class vtkRenderer;
|
|
class vtkTextureObject;
|
|
class vtkTransform;
|
|
|
|
class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLPolyDataMapper2D : public vtkPolyDataMapper2D
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkOpenGLPolyDataMapper2D, vtkPolyDataMapper2D);
|
|
static vtkOpenGLPolyDataMapper2D* New();
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* Actually draw the poly data.
|
|
*/
|
|
void RenderOverlay(vtkViewport* viewport, vtkActor2D* actor) override;
|
|
|
|
/**
|
|
* Release any graphics resources that are being consumed by this mapper.
|
|
* The parameter window could be used to determine which graphic
|
|
* resources to release.
|
|
*/
|
|
void ReleaseGraphicsResources(vtkWindow*) override;
|
|
|
|
protected:
|
|
vtkOpenGLPolyDataMapper2D();
|
|
~vtkOpenGLPolyDataMapper2D() override;
|
|
|
|
vtkGenericOpenGLResourceFreeCallback* ResourceCallback;
|
|
|
|
/**
|
|
* Does the shader source need to be recomputed
|
|
*/
|
|
virtual bool GetNeedToRebuildShaders(vtkOpenGLHelper& cellBO, vtkViewport* ren, vtkActor2D* act);
|
|
|
|
/**
|
|
* Build the shader source code
|
|
*/
|
|
virtual void BuildShaders(std::string& VertexCode, std::string& fragmentCode,
|
|
std::string& geometryCode, vtkViewport* ren, vtkActor2D* act);
|
|
|
|
/**
|
|
* Determine what shader to use and compile/link it
|
|
*/
|
|
virtual void UpdateShaders(vtkOpenGLHelper& cellBO, vtkViewport* viewport, vtkActor2D* act);
|
|
|
|
/**
|
|
* Set the shader parameteres related to the mapper/input data, called by UpdateShader
|
|
*/
|
|
virtual void SetMapperShaderParameters(
|
|
vtkOpenGLHelper& cellBO, vtkViewport* ren, vtkActor2D* act);
|
|
|
|
/**
|
|
* Set the shader parameteres related to the Camera
|
|
*/
|
|
void SetCameraShaderParameters(vtkOpenGLHelper& cellBO, vtkViewport* viewport, vtkActor2D* act);
|
|
|
|
/**
|
|
* Set the shader parameteres related to the property
|
|
*/
|
|
void SetPropertyShaderParameters(vtkOpenGLHelper& cellBO, vtkViewport* viewport, vtkActor2D* act);
|
|
|
|
/**
|
|
* Perform string replacements on the shader templates, called from
|
|
* ReplaceShaderValues
|
|
*/
|
|
virtual void ReplaceShaderPicking(std::string& fssource, vtkRenderer* ren, vtkActor2D* act);
|
|
|
|
/**
|
|
* Update the scene when necessary.
|
|
*/
|
|
void UpdateVBO(vtkActor2D* act, vtkViewport* viewport);
|
|
|
|
// The VBO and its layout.
|
|
vtkOpenGLVertexBufferObjectGroup* VBOs;
|
|
|
|
// Structures for the various cell types we render.
|
|
vtkOpenGLHelper Points;
|
|
vtkOpenGLHelper Lines;
|
|
vtkOpenGLHelper Tris;
|
|
vtkOpenGLHelper TriStrips;
|
|
vtkOpenGLHelper* LastBoundBO;
|
|
|
|
vtkTextureObject* CellScalarTexture;
|
|
vtkOpenGLBufferObject* CellScalarBuffer;
|
|
bool HaveCellScalars;
|
|
int PrimitiveIDOffset;
|
|
|
|
vtkTimeStamp VBOUpdateTime; // When was the VBO updated?
|
|
vtkPoints* TransformedPoints;
|
|
vtkNew<vtkTransform> VBOTransformInverse;
|
|
vtkNew<vtkMatrix4x4> VBOShiftScale;
|
|
|
|
int LastPickState;
|
|
vtkTimeStamp PickStateChanged;
|
|
|
|
// do we have wide lines that require special handling
|
|
virtual bool HaveWideLines(vtkViewport*, vtkActor2D*);
|
|
|
|
// stores the mapping from vtk cells to gl_PrimitiveId
|
|
vtkNew<vtkOpenGLCellToVTKCellMap> CellCellMap;
|
|
|
|
private:
|
|
vtkOpenGLPolyDataMapper2D(const vtkOpenGLPolyDataMapper2D&) = delete;
|
|
void operator=(const vtkOpenGLPolyDataMapper2D&) = delete;
|
|
};
|
|
|
|
#endif
|