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.
164 lines
5.2 KiB
C++
164 lines
5.2 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkCameraPass.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.
|
|
|
|
=========================================================================*/
|
|
|
|
#ifndef vtkCompositeMapperHelper2_h
|
|
#define vtkCompositeMapperHelper2_h
|
|
|
|
#ifndef __VTK_WRAP__
|
|
|
|
#include "vtkColor.h"
|
|
#include "vtkOpenGL.h"
|
|
#include "vtkOpenGLPolyDataMapper.h"
|
|
#include "vtkRenderingOpenGL2Module.h"
|
|
|
|
class vtkPolyData;
|
|
class vtkCompositePolyDataMapper2;
|
|
|
|
// this class encapsulates values tied to a
|
|
// polydata
|
|
class vtkCompositeMapperHelperData
|
|
{
|
|
public:
|
|
vtkPolyData* Data;
|
|
unsigned int FlatIndex;
|
|
double Opacity;
|
|
bool IsOpaque;
|
|
bool Visibility;
|
|
bool Pickability;
|
|
bool OverridesColor;
|
|
vtkColor3d AmbientColor;
|
|
vtkColor3d DiffuseColor;
|
|
|
|
bool Marked;
|
|
|
|
unsigned int StartVertex;
|
|
unsigned int NextVertex;
|
|
|
|
// point line poly strip edge stripedge
|
|
unsigned int StartIndex[vtkOpenGLPolyDataMapper::PrimitiveEnd];
|
|
unsigned int NextIndex[vtkOpenGLPolyDataMapper::PrimitiveEnd];
|
|
|
|
// stores the mapping from vtk cells to gl_PrimitiveId
|
|
vtkNew<vtkOpenGLCellToVTKCellMap> CellCellMap;
|
|
};
|
|
|
|
//===================================================================
|
|
// We define a helper class that is a subclass of vtkOpenGLPolyDataMapper
|
|
class VTKRENDERINGOPENGL2_EXPORT vtkCompositeMapperHelper2 : public vtkOpenGLPolyDataMapper
|
|
{
|
|
public:
|
|
static vtkCompositeMapperHelper2* New();
|
|
vtkTypeMacro(vtkCompositeMapperHelper2, vtkOpenGLPolyDataMapper);
|
|
|
|
void SetParent(vtkCompositePolyDataMapper2* p) { this->Parent = p; }
|
|
|
|
vtkCompositeMapperHelperData* AddData(vtkPolyData* pd, unsigned int flatIndex);
|
|
|
|
// Description:
|
|
// Implemented by sub classes. Actual rendering is done here.
|
|
void RenderPiece(vtkRenderer* ren, vtkActor* act) override;
|
|
|
|
// keep track of what data is being used as the multiblock
|
|
// can change
|
|
void ClearMark();
|
|
void RemoveUnused();
|
|
bool GetMarked() { return this->Marked; }
|
|
void SetMarked(bool v) { this->Marked = v; }
|
|
|
|
/**
|
|
* Accessor to the ordered list of PolyData that we last drew.
|
|
*/
|
|
std::vector<vtkPolyData*> GetRenderedList() { return this->RenderedList; }
|
|
|
|
/**
|
|
* allows a mapper to update a selections color buffers
|
|
* Called from a prop which in turn is called from the selector
|
|
*/
|
|
void ProcessSelectorPixelBuffers(
|
|
vtkHardwareSelector* sel, std::vector<unsigned int>& pixeloffsets, vtkProp* prop) override;
|
|
|
|
virtual void ProcessCompositePixelBuffers(vtkHardwareSelector* sel, vtkProp* prop,
|
|
vtkCompositeMapperHelperData* hdata, std::vector<unsigned int>& mypixels);
|
|
|
|
protected:
|
|
vtkCompositePolyDataMapper2* Parent;
|
|
std::map<vtkPolyData*, vtkCompositeMapperHelperData*> Data;
|
|
|
|
bool Marked;
|
|
|
|
vtkCompositeMapperHelper2() { this->Parent = nullptr; };
|
|
~vtkCompositeMapperHelper2() override;
|
|
|
|
void DrawIBO(vtkRenderer* ren, vtkActor* actor, int primType, vtkOpenGLHelper& CellBO,
|
|
GLenum mode, int pointSize);
|
|
|
|
virtual void SetShaderValues(
|
|
vtkShaderProgram* prog, vtkCompositeMapperHelperData* hdata, size_t primOffset);
|
|
|
|
/**
|
|
* Make sure appropriate shaders are defined, compiled and bound. This method
|
|
* orchistrates the process, much of the work is done in other methods
|
|
*/
|
|
void UpdateShaders(vtkOpenGLHelper& cellBO, vtkRenderer* ren, vtkActor* act) override;
|
|
|
|
// Description:
|
|
// Perform string replacements on the shader templates, called from
|
|
// ReplaceShaderValues
|
|
void ReplaceShaderColor(
|
|
std::map<vtkShader::Type, vtkShader*> shaders, vtkRenderer* ren, vtkActor* act) override;
|
|
|
|
// Description:
|
|
// Build the VBO/IBO, called by UpdateBufferObjects
|
|
void BuildBufferObjects(vtkRenderer* ren, vtkActor* act) override;
|
|
virtual void AppendOneBufferObject(vtkRenderer* ren, vtkActor* act,
|
|
vtkCompositeMapperHelperData* hdata, vtkIdType& flat_index, std::vector<unsigned char>& colors,
|
|
std::vector<float>& norms);
|
|
|
|
// Description:
|
|
// Returns if we can use texture maps for scalar coloring. Note this doesn't
|
|
// say we "will" use scalar coloring. It says, if we do use scalar coloring,
|
|
// we will use a texture. Always off for this mapper.
|
|
int CanUseTextureMapForColoring(vtkDataObject*) override;
|
|
|
|
std::vector<unsigned int> VertexOffsets;
|
|
|
|
// vert line poly strip edge stripedge
|
|
std::vector<unsigned int> IndexArray[PrimitiveEnd];
|
|
|
|
void RenderPieceDraw(vtkRenderer* ren, vtkActor* act) override;
|
|
|
|
bool PrimIDUsed;
|
|
bool OverideColorUsed;
|
|
|
|
vtkHardwareSelector* CurrentSelector;
|
|
|
|
// bookkeeping required by vtkValuePass
|
|
std::vector<vtkPolyData*> RenderedList;
|
|
|
|
// used by the hardware selector
|
|
std::vector<std::vector<unsigned int> > PickPixels;
|
|
|
|
std::map<vtkAbstractArray*, vtkDataArray*> ColorArrayMap;
|
|
|
|
private:
|
|
vtkCompositeMapperHelper2(const vtkCompositeMapperHelper2&) = delete;
|
|
void operator=(const vtkCompositeMapperHelper2&) = delete;
|
|
};
|
|
|
|
#endif
|
|
|
|
#endif
|
|
// VTK-HeaderTest-Exclude: vtkCompositePolyDataMapper2Internal.h
|