Castor3D 0.12.0
Multiplatform 3D engine
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
castor3d::MeshSubdivider Class Referenceabstract

#include <Subdivider.hpp>

Collaboration diagram for castor3d::MeshSubdivider:
Collaboration graph
[legend]

Public Member Functions

C3D_API MeshSubdivider ()
 Default constructor. More...
 
virtual C3D_API ~MeshSubdivider ()
 Destructor. More...
 
virtual C3D_API void subdivide (SubmeshSPtr submesh, int occurences, bool generateBuffers=true, bool threaded=false)
 Main subdivision function. More...
 
virtual C3D_API void cleanup ()
 Cleans all member variables. More...
 
C3D_API SubmeshVertexaddPoint (float x, float y, float z)
 Creates and adds a vertex to my list. More...
 
C3D_API SubmeshVertexaddPoint (castor::Point3f const &position)
 adds a vertex to my list More...
 
C3D_API SubmeshVertexaddPoint (float *position)
 Creates and adds a vertex to my list. More...
 
virtual C3D_API Face addFace (uint32_t a, uint32_t b, uint32_t c)
 Creates and adds a face. More...
 
virtual C3D_API int isInMyPoints (castor::Point3f const &vertex, double precision)
 Tests if the given Point3f is in mine. More...
 
C3D_API uint32_t getPointsCount () const
 Retrieves the points count. More...
 
C3D_API SubmeshVertexgetPoint (uint32_t i) const
 Retrieves the wanted position. More...
 
C3D_API InterleavedVertexArray const & getPoints () const
 
void setSubdivisionEndCallback (MeshSubdivisionEndFunction subdivisionEndFunc)
 Defines a function to execute when the threaded subdivision ends. More...
 

Protected Types

typedef std::function< void(MeshSubdivider &) > MeshSubdivisionEndFunction
 

Protected Member Functions

C3D_API uint32_t doSubdivideThreaded ()
 Threaded subdivision function. More...
 
C3D_API SubmeshVertexdoTryAddPoint (castor::Point3f const &position)
 Checks if the given position is in my list and if not creates and adds it. More...
 
virtual C3D_API void doSubdivideOnce (SubmeshSPtr submesh, bool generateBuffers, bool threaded)
 Main subdivision function. More...
 
virtual C3D_API void doInitialise ()
 Initialisation function. More...
 
virtual C3D_API void doAddGeneratedFaces ()=0
 Adds generated faces to the submesh. More...
 
C3D_API void doSwapBuffers ()
 Swaps the internal faces with the submeshes ones. More...
 
virtual C3D_API void doSubdivide ()=0
 Effectively subdivides the submesh. More...
 
C3D_API void doSetTextCoords (SubmeshVertex const &a, SubmeshVertex const &b, SubmeshVertex const &c, SubmeshVertex &d, SubmeshVertex &e, SubmeshVertex &f)
 Computes the texture coordinates for given vertices, creates the faces. More...
 
C3D_API void doSetTextCoords (SubmeshVertex const &a, SubmeshVertex const &b, SubmeshVertex const &c, SubmeshVertex &p)
 Computes the texture coordinates for the new vertex, creates the faces. More...
 

Protected Attributes

SubmeshSPtr m_submesh
 The submesh being subdivided. More...
 
std::vector< std::unique_ptr< SubmeshVertex > > m_points
 The points. More...
 
FaceArray m_arrayFaces
 The faces. More...
 
bool m_generateBuffers
 Tells if the buffers must be generated. More...
 
MeshSubdivisionEndFunction m_onSubdivisionEnd
 The subdivision end callback. More...
 
std::shared_ptr< std::thread > m_thread
 The subdivision thread. More...
 
bool m_threaded
 Tells that the subdivision is threaded. More...
 
std::recursive_mutex m_mutex
 The subdivision thread mutex. More...
 

Member Typedef Documentation

◆ MeshSubdivisionEndFunction

typedef std::function< void( MeshSubdivider & ) > castor3d::MeshSubdivider::MeshSubdivisionEndFunction
protected

Constructor & Destructor Documentation

◆ MeshSubdivider()

C3D_API castor3d::MeshSubdivider::MeshSubdivider ( )

Default constructor.

◆ ~MeshSubdivider()

virtual C3D_API castor3d::MeshSubdivider::~MeshSubdivider ( )
virtual

Destructor.

Member Function Documentation

◆ addFace()

virtual C3D_API Face castor3d::MeshSubdivider::addFace ( uint32_t  a,
uint32_t  b,
uint32_t  c 
)
virtual

Creates and adds a face.

Parameters
[in]aThe first face's vertex index
[in]bThe second face's vertex index
[in]cThe third face's vertex index
Returns
The created face

◆ addPoint() [1/3]

C3D_API SubmeshVertex & castor3d::MeshSubdivider::addPoint ( castor::Point3f const &  position)

adds a vertex to my list

Parameters
[in]positionThe vertex to add
Returns
The created vertex

◆ addPoint() [2/3]

C3D_API SubmeshVertex & castor3d::MeshSubdivider::addPoint ( float *  position)

Creates and adds a vertex to my list.

Parameters
[in]positionThe vertex coordinates
Returns
The created vertex

◆ addPoint() [3/3]

C3D_API SubmeshVertex & castor3d::MeshSubdivider::addPoint ( float  x,
float  y,
float  z 
)

Creates and adds a vertex to my list.

Parameters
[in]x,y,zThe vertex coordinates
Returns
The created vertex

◆ cleanup()

virtual C3D_API void castor3d::MeshSubdivider::cleanup ( )
virtual

Cleans all member variables.

◆ doAddGeneratedFaces()

virtual C3D_API void castor3d::MeshSubdivider::doAddGeneratedFaces ( )
protectedpure virtual

Adds generated faces to the submesh.

◆ doInitialise()

virtual C3D_API void castor3d::MeshSubdivider::doInitialise ( )
protectedvirtual

Initialisation function.

◆ doSetTextCoords() [1/2]

C3D_API void castor3d::MeshSubdivider::doSetTextCoords ( SubmeshVertex const &  a,
SubmeshVertex const &  b,
SubmeshVertex const &  c,
SubmeshVertex d,
SubmeshVertex e,
SubmeshVertex f 
)
protected

Computes the texture coordinates for given vertices, creates the faces.

Parameters
[in]a,b,cThe source vertices
[out]d,e,fThe new vertices

◆ doSetTextCoords() [2/2]

C3D_API void castor3d::MeshSubdivider::doSetTextCoords ( SubmeshVertex const &  a,
SubmeshVertex const &  b,
SubmeshVertex const &  c,
SubmeshVertex p 
)
protected

Computes the texture coordinates for the new vertex, creates the faces.

Parameters
[in]a,b,cThe source vertices
[out]pThe new vertex

◆ doSubdivide()

virtual C3D_API void castor3d::MeshSubdivider::doSubdivide ( )
protectedpure virtual

Effectively subdivides the submesh.

◆ doSubdivideOnce()

virtual C3D_API void castor3d::MeshSubdivider::doSubdivideOnce ( SubmeshSPtr  submesh,
bool  generateBuffers,
bool  threaded 
)
protectedvirtual

Main subdivision function.

Parameters
[in]submeshThe submesh to subdivide
[in]generateBuffersTells if the buffers must be generated after subdivision
[in]threadedTells if subdivision must be threaded

◆ doSubdivideThreaded()

C3D_API uint32_t castor3d::MeshSubdivider::doSubdivideThreaded ( )
protected

Threaded subdivision function.

◆ doSwapBuffers()

C3D_API void castor3d::MeshSubdivider::doSwapBuffers ( )
protected

Swaps the internal faces with the submeshes ones.

◆ doTryAddPoint()

C3D_API SubmeshVertex & castor3d::MeshSubdivider::doTryAddPoint ( castor::Point3f const &  position)
protected

Checks if the given position is in my list and if not creates and adds it.

Parameters
[in]positionThe vertex coordinates
Returns
The created vertex

◆ getPoint()

C3D_API SubmeshVertex & castor3d::MeshSubdivider::getPoint ( uint32_t  i) const

Retrieves the wanted position.

Parameters
[in]iThe position index
Returns
The value

◆ getPoints()

C3D_API InterleavedVertexArray const & castor3d::MeshSubdivider::getPoints ( ) const
Returns
Retrieves the points array

◆ getPointsCount()

C3D_API uint32_t castor3d::MeshSubdivider::getPointsCount ( ) const

Retrieves the points count.

Returns
The value

◆ isInMyPoints()

virtual C3D_API int castor3d::MeshSubdivider::isInMyPoints ( castor::Point3f const &  vertex,
double  precision 
)
virtual

Tests if the given Point3f is in mine.

Parameters
[in]vertexThe vertex to test
[in]precisionThe comparison precision
Returns
The index of the vertex equal to parameter, -1 if not found

◆ setSubdivisionEndCallback()

void castor3d::MeshSubdivider::setSubdivisionEndCallback ( MeshSubdivisionEndFunction  subdivisionEndFunc)
inline

Defines a function to execute when the threaded subdivision ends.

Remarks
That function MUST NEITHER destroy the thread NOR the subdivider
Parameters
[in]subdivisionEndFuncPointer over the function to execute

References m_onSubdivisionEnd.

◆ subdivide()

virtual C3D_API void castor3d::MeshSubdivider::subdivide ( SubmeshSPtr  submesh,
int  occurences,
bool  generateBuffers = true,
bool  threaded = false 
)
virtual

Main subdivision function.

Parameters
[in]submeshThe submesh to subdivide
[in]occurencesThe subdivisions occurences
[in]generateBuffersTells if the buffers must be generated after subdivision
[in]threadedTells if subdivision must be threaded

Member Data Documentation

◆ m_arrayFaces

FaceArray castor3d::MeshSubdivider::m_arrayFaces
protected

The faces.

◆ m_generateBuffers

bool castor3d::MeshSubdivider::m_generateBuffers
protected

Tells if the buffers must be generated.

◆ m_mutex

std::recursive_mutex castor3d::MeshSubdivider::m_mutex
protected

The subdivision thread mutex.

◆ m_onSubdivisionEnd

MeshSubdivisionEndFunction castor3d::MeshSubdivider::m_onSubdivisionEnd
protected

The subdivision end callback.

Referenced by setSubdivisionEndCallback().

◆ m_points

std::vector< std::unique_ptr< SubmeshVertex > > castor3d::MeshSubdivider::m_points
protected

The points.

◆ m_submesh

SubmeshSPtr castor3d::MeshSubdivider::m_submesh
protected

The submesh being subdivided.

◆ m_thread

std::shared_ptr< std::thread > castor3d::MeshSubdivider::m_thread
protected

The subdivision thread.

◆ m_threaded

bool castor3d::MeshSubdivider::m_threaded
protected

Tells that the subdivision is threaded.


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