Scanframe Modular Application 0.1.0
Loading...
Searching...
No Matches
sf::xgl::TVertexArray< VertexMembers > Class Template Reference

OpenGL base class and wrapper template for vertex arrays. Automates most of the things needed for primitive objects. More...

#include <TVertexArray.h>

Inheritance diagram for sf::xgl::TVertexArray< VertexMembers >:
Collaboration diagram for sf::xgl::TVertexArray< VertexMembers >:

Classes

struct  ModeRange
 Modes to be called on the available indices. More...
 
struct  VT_Position
 Available structure for a typical selection of members. More...
 
struct  VT_PositionColor
 Available structure for a typical selection of members. More...
 
struct  VT_PositionNormal
 Available structure for a typical selection of members. More...
 
struct  VT_PositionNormalColor
 Available structure for a typical selection of members. More...
 
struct  VT_PositionNormalColorTexture
 Available structure for a typical selection of members. More...
 
struct  VT_PositionNormalTexture
 Available structure for a typical selection of members. More...
 
struct  VT_PositionTexture
 Available structure for a typical selection of members. More...
 

Public Member Functions

 TVertexArray (ShaderProgram *sp)
 Constructor.
 
 ~TVertexArray () override
 Virtual destructor.
 
ShaderProgramshaderProgram ()
 Gets the associated shader program.
 
void draw () final
 Overridden from base class VertexArrayBase. Uses new style OpenGL with a shader program.
 
void paint () final
 Overridden from base class VertexArrayBase. Uses old style OpenGL without a shader program.
 
bool hasColor () const final
 Overridden from base class VertexArrayBase.
 
bool hasTexture () const final
 Overridden from base class VertexArrayBase.
 
void setTexture (QOpenGLTexture *texture)
 Assigns the texture.
 
NormalsDataType getNormalsData () const override
 Overridden from base class.
 
void clearData () override
 Clears the data to generate array buffers.
 
- Public Member Functions inherited from sf::xgl::VertexArrayBase
 VertexArrayBase (QObject *parent=nullptr)
 Default Qt object constructor.
 
void triggerGenerate ()
 Sets a flag to trigger data generation when the data is called for.
 
void setRenderOptions (RenderOptions options)
 Modify the render options which will trigger a regeneration of the vertices and indices.
 
RenderOptions getRenderOptions () const
 Gets the render options.
 

Protected Types

using Vertex = std::conditional_t< VertexMembers==vmPosition, VT_Position, std::conditional_t< VertexMembers==(vmPosition|vmColor), VT_PositionColor, std::conditional_t< VertexMembers==(vmPosition|vmNormal), VT_PositionNormal, std::conditional_t< VertexMembers==(vmPosition|vmNormal|vmColor), VT_PositionNormalColor, std::conditional_t< VertexMembers==(vmPosition|vmTexCoord), VT_PositionTexture, std::conditional_t< VertexMembers==(vmPosition|vmNormal|vmTexCoord), VT_PositionNormalTexture, std::conditional_t< VertexMembers==(vmPosition|vmNormal|vmColor|vmTexCoord), VT_PositionNormalColorTexture, void > > > > > > >
 Conditional vertex structure type. Used for memory locations.
 
typedef TVector< GLuint > IndexVectorType
 Type definition for storing indices.
 

Protected Member Functions

bool setup () override
 Sets up the vertex array for the OpenGL context.
 
void setupLayout ()
 Sets up the layout of the Vertex structure for OpenGL.
 
template<typename VertexType , typename FieldType >
void setAttribPointer (ShaderProgram::Attribute sa, size_t offset)
 Makes a call to setVertexAttribPointer().
 
void callModifyContext (const ModeRange &mr, bool before, bool draw, size_t mode_index)
 Calls the function modifyContext when overridden.
 
bool checkData () const
 Check the data integrity of indices to vertices,.
 
- Protected Member Functions inherited from sf::xgl::VertexArrayBase
bool callGenerate ()
 Makes a call to virtual function generate() when the #_generateFlag is set using triggerGenerate().
 
virtual void generate ()=0
 Generate the data needed for creation of vertex array and/or indices. Is or must be called by setup() function.
 
virtual void modifyContext (bool before, bool draw, size_t mode_index)
 Allows modifying the OpenGL context before and after drawing.
 
bool isTriggered () const
 Gets the flag if data is to be (re-)generated. Flag is set to True initially.
 

Protected Attributes

TVector< Vertex_vertices
 Holds the data of the vertices before being copied to OpenGL memory.
 
IndexVectorType _indices
 Holds the data of the indices for solid and wire drawing.
 
TVector< ModeRange_modes
 Modes to call glDrawArrays() or glDrawElements() depending on the _indices member not being empty.
 

Additional Inherited Members

- Public Types inherited from sf::xgl::VertexArrayBase
enum  EVertexMember : VertexMember { vmPosition = 1 << 0 , vmNormal = 1 << 1 , vmColor = 1 << 2 , vmTexCoord = 1 << 3 }
 Possible member of a vertex structure. Where the position can not be omitted as part of the vertex. More...
 
enum  EDrawMode { dmDrawArrays , dmDrawElements }
 Drawing mode of by the template. More...
 
enum  ERenderOption : int { roNone = 0 , roWires = 1 << 0 , roNormals = 1 << 1 }
 Render options. More...
 
typedef unsigned VertexMember
 Type used to describe vertex structure members.
 
typedef TVector< std::pair< vector3f, vector3f > > NormalsDataType
 Type for extracting normals from all used vertices.
 
- Static Public Member Functions inherited from sf::xgl::VertexArrayBase
static const ColorgetDefaultColor ()
 Gets the default color used by the vertex structures when not set by the derived class. Created to have a single location for the default color.
An example how it is used:
 
static void setDefaultColor (const QColor &color)
 Sets the default color used by the vertex structures when not set by the derived class.
 

Detailed Description

template<VertexArrayBase::VertexMember VertexMembers>
class sf::xgl::TVertexArray< VertexMembers >

OpenGL base class and wrapper template for vertex arrays. Automates most of the things needed for primitive objects.

Member Typedef Documentation

◆ IndexVectorType

template<VertexArrayBase::VertexMember VertexMembers>
typedef TVector<GLuint> sf::xgl::TVertexArray< VertexMembers >::IndexVectorType
protected

Type definition for storing indices.

◆ Vertex

template<VertexArrayBase::VertexMember VertexMembers>
using sf::xgl::TVertexArray< VertexMembers >::Vertex = std::conditional_t< VertexMembers == vmPosition, VT_Position, std::conditional_t< VertexMembers == (vmPosition | vmColor), VT_PositionColor, std::conditional_t< VertexMembers == (vmPosition | vmNormal), VT_PositionNormal, std::conditional_t< VertexMembers == (vmPosition | vmNormal | vmColor), VT_PositionNormalColor, std::conditional_t< VertexMembers == (vmPosition | vmTexCoord), VT_PositionTexture, std::conditional_t< VertexMembers == (vmPosition | vmNormal | vmTexCoord), VT_PositionNormalTexture, std::conditional_t< VertexMembers == (vmPosition | vmNormal | vmColor | vmTexCoord), VT_PositionNormalColorTexture, void> >> >> >>
protected

Conditional vertex structure type. Used for memory locations.

Constructor & Destructor Documentation

◆ TVertexArray()

template<VertexArrayBase::VertexMember VertexMembers>
sf::xgl::TVertexArray< VertexMembers >::TVertexArray ( ShaderProgram sp)
explicit

Constructor.

Parameters
spShader program instance.

◆ ~TVertexArray()

template<VertexArrayBase::VertexMember VertexMembers>
sf::xgl::TVertexArray< VertexMembers >::~TVertexArray ( )
override

Virtual destructor.

Member Function Documentation

◆ callModifyContext()

template<VertexArrayBase::VertexMember VertexMembers>
void sf::xgl::TVertexArray< VertexMembers >::callModifyContext ( const ModeRange mr,
bool  before,
bool  draw,
size_t  mode_index 
)
protected

Calls the function modifyContext when overridden.

Parameters
mrMode range getting rendered.
before
draw
mode_index

◆ checkData()

template<VertexArrayBase::VertexMember VertexMembers>
bool sf::xgl::TVertexArray< VertexMembers >::checkData ( ) const
protected

Check the data integrity of indices to vertices,.

Returns
False when data does not check out.

◆ clearData()

template<VertexArrayBase::VertexMember VertexMembers>
void sf::xgl::TVertexArray< VertexMembers >::clearData ( )
overridevirtual

Clears the data to generate array buffers.

Implements sf::xgl::VertexArrayBase.

◆ draw()

template<VertexArrayBase::VertexMember VertexMembers>
void sf::xgl::TVertexArray< VertexMembers >::draw ( )
finalvirtual

Overridden from base class VertexArrayBase. Uses new style OpenGL with a shader program.

Implements sf::xgl::VertexArrayBase.

◆ getNormalsData()

template<VertexArrayBase::VertexMember VertexMembers>
NormalsDataType sf::xgl::TVertexArray< VertexMembers >::getNormalsData ( ) const
overridevirtual

Overridden from base class.

Implements sf::xgl::VertexArrayBase.

◆ hasColor()

template<VertexArrayBase::VertexMember VertexMembers>
bool sf::xgl::TVertexArray< VertexMembers >::hasColor ( ) const
finalvirtual

Overridden from base class VertexArrayBase.

Implements sf::xgl::VertexArrayBase.

◆ hasTexture()

template<VertexArrayBase::VertexMember VertexMembers>
bool sf::xgl::TVertexArray< VertexMembers >::hasTexture ( ) const
finalvirtual

Overridden from base class VertexArrayBase.

Implements sf::xgl::VertexArrayBase.

◆ paint()

template<VertexArrayBase::VertexMember VertexMembers>
void sf::xgl::TVertexArray< VertexMembers >::paint ( )
finalvirtual

Overridden from base class VertexArrayBase. Uses old style OpenGL without a shader program.

Implements sf::xgl::VertexArrayBase.

◆ setAttribPointer()

template<VertexArrayBase::VertexMember VertexMembers>
template<typename VertexType , typename FieldType >
void sf::xgl::TVertexArray< VertexMembers >::setAttribPointer ( ShaderProgram::Attribute  sa,
size_t  offset 
)
protected

Makes a call to setVertexAttribPointer().

Template Parameters
VertexTypeThe vertex structure.
FieldTypeStructure field which is a std::array<> having a 'value_type'.
Parameters
saShader attribute.
offset

◆ setTexture()

template<VertexArrayBase::VertexMember VertexMembers>
void sf::xgl::TVertexArray< VertexMembers >::setTexture ( QOpenGLTexture *  texture)

Assigns the texture.

Parameters
texture

◆ setup()

template<VertexArrayBase::VertexMember VertexMembers>
bool sf::xgl::TVertexArray< VertexMembers >::setup ( )
overrideprotectedvirtual

Sets up the vertex array for the OpenGL context.

Implements sf::xgl::VertexArrayBase.

◆ setupLayout()

template<VertexArrayBase::VertexMember VertexMembers>
void sf::xgl::TVertexArray< VertexMembers >::setupLayout ( )
protected

Sets up the layout of the Vertex structure for OpenGL.

◆ shaderProgram()

template<VertexArrayBase::VertexMember VertexMembers>
ShaderProgram * sf::xgl::TVertexArray< VertexMembers >::shaderProgram ( )

Gets the associated shader program.

Returns
Reference to the program.

Member Data Documentation

◆ _indices

template<VertexArrayBase::VertexMember VertexMembers>
IndexVectorType sf::xgl::TVertexArray< VertexMembers >::_indices
protected

Holds the data of the indices for solid and wire drawing.

◆ _modes

template<VertexArrayBase::VertexMember VertexMembers>
TVector<ModeRange> sf::xgl::TVertexArray< VertexMembers >::_modes
protected

Modes to call glDrawArrays() or glDrawElements() depending on the _indices member not being empty.

◆ _vertices

template<VertexArrayBase::VertexMember VertexMembers>
TVector<Vertex> sf::xgl::TVertexArray< VertexMembers >::_vertices
protected

Holds the data of the vertices before being copied to OpenGL memory.

◆ ebo

template<VertexArrayBase::VertexMember VertexMembers>
QOpenGLBuffer sf::xgl::TVertexArray< VertexMembers >::ebo {QOpenGLBuffer::IndexBuffer}

Holds the index buffer object for solid drawing.

◆ vbo

template<VertexArrayBase::VertexMember VertexMembers>
QOpenGLBuffer sf::xgl::TVertexArray< VertexMembers >::vbo {QOpenGLBuffer::VertexBuffer}

Holds the vertex buffer object.


The documentation for this class was generated from the following file: