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.

106 lines
3.7 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
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 vtkOpenGLIndexBufferObject_h
#define vtkOpenGLIndexBufferObject_h
#include "vtkOpenGLBufferObject.h"
#include "vtkRenderingOpenGL2Module.h" // for export macro
/**
* @brief OpenGL vertex buffer object
*
* OpenGL buffer object to store geometry and/or attribute data on the
* GPU.
*/
class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLIndexBufferObject : public vtkOpenGLBufferObject
{
public:
static vtkOpenGLIndexBufferObject* New();
vtkTypeMacro(vtkOpenGLIndexBufferObject, vtkOpenGLBufferObject);
void PrintSelf(ostream& os, vtkIndent indent) override;
// Sizes/offsets are all in bytes as OpenGL API expects them.
size_t IndexCount; // Number of indices in the VBO
// Description:
// used to create an IBO for triangle primitives
size_t CreateTriangleIndexBuffer(vtkCellArray* cells, vtkPoints* points);
// Description:
// used to create an IBO for triangle primitives
static void AppendTriangleIndexBuffer(std::vector<unsigned int>& indexArray, vtkCellArray* cells,
vtkPoints* points, vtkIdType vertexOffset);
// Description:
// create a IBO for wireframe polys/tris
size_t CreateTriangleLineIndexBuffer(vtkCellArray* cells);
// Description:
// used to create an IBO for line primitives
static void AppendLineIndexBuffer(
std::vector<unsigned int>& indexArray, vtkCellArray* cells, vtkIdType vertexOffset);
// Description:
// create a IBO for wireframe polys/tris
size_t CreateLineIndexBuffer(vtkCellArray* cells);
// Description:
// create a IBO for wireframe polys/tris
static void AppendTriangleLineIndexBuffer(
std::vector<unsigned int>& indexArray, vtkCellArray* cells, vtkIdType vertexOffset);
// Description:
// used to create an IBO for primitives as points
size_t CreatePointIndexBuffer(vtkCellArray* cells);
// Description:
// used to create an IBO for primitives as points
static void AppendPointIndexBuffer(
std::vector<unsigned int>& indexArray, vtkCellArray* cells, vtkIdType vertexOffset);
// Description:
// used to create an IBO for line strips and triangle strips
size_t CreateStripIndexBuffer(vtkCellArray* cells, bool wireframeTriStrips);
static void AppendStripIndexBuffer(std::vector<unsigned int>& indexArray, vtkCellArray* cells,
vtkIdType vertexOffset, bool wireframeTriStrips);
// Description:
// special index buffer for polys wireframe with edge visibilityflags
static void AppendEdgeFlagIndexBuffer(std::vector<unsigned int>& indexArray, vtkCellArray* cells,
vtkIdType vertexOffset, vtkDataArray* edgeflags);
size_t CreateEdgeFlagIndexBuffer(vtkCellArray* cells, vtkDataArray* edgeflags);
// Description:
// used to create an IBO for cell Vertices as points
size_t CreateVertexIndexBuffer(vtkCellArray** cells);
// Description:
// used to create an IBO for primitives as points
static void AppendVertexIndexBuffer(
std::vector<unsigned int>& indexArray, vtkCellArray** cells, vtkIdType vertexOffset);
protected:
vtkOpenGLIndexBufferObject();
~vtkOpenGLIndexBufferObject() override;
private:
vtkOpenGLIndexBufferObject(const vtkOpenGLIndexBufferObject&) = delete;
void operator=(const vtkOpenGLIndexBufferObject&) = delete;
};
#endif