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.

120 lines
3.5 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkOpenGLGlyph3DMapper.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 vtkOpenGLGlyph3DMapper
* @brief vtkOpenGLGlyph3D on the GPU.
*
* Do the same job than vtkGlyph3D but on the GPU. For this reason, it is
* a mapper not a vtkPolyDataAlgorithm. Also, some methods of vtkOpenGLGlyph3D
* don't make sense in vtkOpenGLGlyph3DMapper: GeneratePointIds, old-style
* SetSource, PointIdsName, IsPointVisible.
*
* @sa
* vtkOpenGLGlyph3D
*/
#ifndef vtkOpenGLGlyph3DMapper_h
#define vtkOpenGLGlyph3DMapper_h
#include "vtkGlyph3DMapper.h"
#include "vtkNew.h" // For vtkNew
#include "vtkRenderingOpenGL2Module.h" // For export macro
class vtkOpenGLGlyph3DHelper;
class vtkBitArray;
class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLGlyph3DMapper : public vtkGlyph3DMapper
{
public:
static vtkOpenGLGlyph3DMapper* New();
vtkTypeMacro(vtkOpenGLGlyph3DMapper, vtkGlyph3DMapper);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Method initiates the mapping process. Generally sent by the actor
* as each frame is rendered.
*/
void Render(vtkRenderer* ren, vtkActor* a) 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* window) override;
//@{
/**
* Get the maximum number of LOD. OpenGL context must be bound.
* The maximum number of LOD depends on GPU capabilities.
*/
vtkIdType GetMaxNumberOfLOD() override;
/**
* Set the number of LOD.
*/
void SetNumberOfLOD(vtkIdType nb) override;
/**
* Configure LODs. Culling must be enabled.
* distance have to be a positive value, it is the distance to the camera scaled by
* the instanced geometry bounding box.
* targetReduction have to be between 0 and 1, 0 disable decimation, 1 draw a point.
*
* @sa vtkDecimatePro::SetTargetReduction
*/
virtual void SetLODDistanceAndTargetReduction(
vtkIdType index, float distance, float targetReduction) override;
//@}
protected:
vtkOpenGLGlyph3DMapper();
~vtkOpenGLGlyph3DMapper() override;
/**
* Render setup
*/
virtual void Render(vtkRenderer*, vtkActor*, vtkDataSet*);
/**
* Send mapper ivars to sub-mapper.
* \pre mapper_exists: mapper != 0
*/
void CopyInformationToSubMapper(vtkOpenGLGlyph3DHelper*);
void SetupColorMapper();
vtkMapper* ColorMapper;
class vtkOpenGLGlyph3DMapperEntry;
class vtkOpenGLGlyph3DMapperSubArray;
class vtkOpenGLGlyph3DMapperArray;
vtkOpenGLGlyph3DMapperArray* GlyphValues; // array of value for datasets
/**
* Build data structures associated with
*/
virtual void RebuildStructures(vtkOpenGLGlyph3DMapperSubArray* entry, vtkIdType numPts,
vtkActor* actor, vtkDataSet* dataset, vtkBitArray* maskArray);
vtkMTimeType BlockMTime; // Last time BlockAttributes was modified.
private:
vtkOpenGLGlyph3DMapper(const vtkOpenGLGlyph3DMapper&) = delete;
void operator=(const vtkOpenGLGlyph3DMapper&) = delete;
};
#endif