mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2025-10-05 05:42:18 +00:00
initial commit. This is icculus version 5542b94cae02a6333845854bbbd1abe0a259f1a4
This commit is contained in:
commit
3096eaf5e2
2519 changed files with 816064 additions and 0 deletions
275
ExternalLibs/FTGL/include/FTVectoriser.h
Normal file
275
ExternalLibs/FTGL/include/FTVectoriser.h
Normal file
|
@ -0,0 +1,275 @@
|
|||
#ifndef __FTVectoriser__
|
||||
#define __FTVectoriser__
|
||||
|
||||
|
||||
#include "FTContour.h"
|
||||
#include "FTList.h"
|
||||
#include "FTPoint.h"
|
||||
#include "FTVector.h"
|
||||
#include "FTGL.h"
|
||||
|
||||
|
||||
#ifndef CALLBACK
|
||||
#define CALLBACK
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* FTTesselation captures points that are output by OpenGL's gluTesselator.
|
||||
*/
|
||||
class FTGL_EXPORT FTTesselation
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
FTTesselation( GLenum m)
|
||||
: meshType(m)
|
||||
{
|
||||
pointList.reserve( 128);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
~FTTesselation()
|
||||
{
|
||||
pointList.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a point to the mesh.
|
||||
*/
|
||||
void AddPoint( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z)
|
||||
{
|
||||
pointList.push_back( FTPoint( x, y, z));
|
||||
}
|
||||
|
||||
/**
|
||||
* The number of points in this mesh
|
||||
*/
|
||||
size_t PointCount() const { return pointList.size();}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
const FTPoint& Point( unsigned int index) const { return pointList[index];}
|
||||
|
||||
/**
|
||||
* Return the OpenGL polygon type.
|
||||
*/
|
||||
GLenum PolygonType() const { return meshType;}
|
||||
|
||||
private:
|
||||
/**
|
||||
* Points generated by gluTesselator.
|
||||
*/
|
||||
typedef FTVector<FTPoint> PointVector;
|
||||
PointVector pointList;
|
||||
|
||||
/**
|
||||
* OpenGL primitive type from gluTesselator.
|
||||
*/
|
||||
GLenum meshType;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* FTMesh is a container of FTTesselation's that make up a polygon glyph
|
||||
*/
|
||||
class FTGL_EXPORT FTMesh
|
||||
{
|
||||
typedef FTVector<FTTesselation*> TesselationVector;
|
||||
typedef FTList<FTPoint> PointList;
|
||||
|
||||
public:
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
FTMesh();
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
~FTMesh();
|
||||
|
||||
/**
|
||||
* Add a point to the mesh
|
||||
*/
|
||||
void AddPoint( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z);
|
||||
|
||||
/**
|
||||
* Create a combine point for the gluTesselator
|
||||
*/
|
||||
const FTGL_DOUBLE* Combine( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z);
|
||||
|
||||
/**
|
||||
* Begin a new polygon
|
||||
*/
|
||||
void Begin( GLenum meshType);
|
||||
|
||||
/**
|
||||
* End a polygon
|
||||
*/
|
||||
void End();
|
||||
|
||||
/**
|
||||
* Record a gluTesselation error
|
||||
*/
|
||||
void Error( GLenum e) { err = e;}
|
||||
|
||||
/**
|
||||
* The number of tesselations in the mesh
|
||||
*/
|
||||
unsigned int TesselationCount() const { return tesselationList.size();}
|
||||
|
||||
/**
|
||||
* Get a tesselation by index
|
||||
*/
|
||||
const FTTesselation* const Tesselation( unsigned int index) const;
|
||||
|
||||
/**
|
||||
* Return the temporary point list. For testing only.
|
||||
*/
|
||||
const PointList& TempPointList() const { return tempPointList;}
|
||||
|
||||
/**
|
||||
* Get the GL ERROR returned by the glu tesselator
|
||||
*/
|
||||
GLenum Error() const { return err;}
|
||||
|
||||
private:
|
||||
/**
|
||||
* The current sub mesh that we are constructing.
|
||||
*/
|
||||
FTTesselation* currentTesselation;
|
||||
|
||||
/**
|
||||
* Holds each sub mesh that comprises this glyph.
|
||||
*/
|
||||
TesselationVector tesselationList;
|
||||
|
||||
/**
|
||||
* Holds extra points created by gluTesselator. See ftglCombine.
|
||||
*/
|
||||
PointList tempPointList;
|
||||
|
||||
/**
|
||||
* GL ERROR returned by the glu tesselator
|
||||
*/
|
||||
GLenum err;
|
||||
|
||||
};
|
||||
|
||||
const FTGL_DOUBLE FTGL_FRONT_FACING = 1.0;
|
||||
const FTGL_DOUBLE FTGL_BACK_FACING = -1.0;
|
||||
|
||||
/**
|
||||
* FTVectoriser class is a helper class that converts font outlines into
|
||||
* point data.
|
||||
*
|
||||
* @see FTExtrdGlyph
|
||||
* @see FTOutlineGlyph
|
||||
* @see FTPolyGlyph
|
||||
* @see FTContour
|
||||
* @see FTPoint
|
||||
*
|
||||
*/
|
||||
class FTGL_EXPORT FTVectoriser
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param glyph The freetype glyph to be processed
|
||||
*/
|
||||
FTVectoriser( const FT_GlyphSlot glyph);
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
virtual ~FTVectoriser();
|
||||
|
||||
/**
|
||||
* Build an FTMesh from the vector outline data.
|
||||
*
|
||||
* @param zNormal The direction of the z axis of the normal
|
||||
* for this mesh
|
||||
*/
|
||||
void MakeMesh( FTGL_DOUBLE zNormal = FTGL_FRONT_FACING);
|
||||
|
||||
/**
|
||||
* Get the current mesh.
|
||||
*/
|
||||
const FTMesh* const GetMesh() const { return mesh;}
|
||||
|
||||
/**
|
||||
* Get the total count of points in this outline
|
||||
*
|
||||
* @return the number of points
|
||||
*/
|
||||
size_t PointCount();
|
||||
|
||||
/**
|
||||
* Get the count of contours in this outline
|
||||
*
|
||||
* @return the number of contours
|
||||
*/
|
||||
size_t ContourCount() const { return ftContourCount;}
|
||||
|
||||
/**
|
||||
* Return a contour at index
|
||||
*
|
||||
* @return the number of contours
|
||||
*/
|
||||
const FTContour* const Contour( unsigned int index) const;
|
||||
|
||||
/**
|
||||
* Get the number of points in a specific contour in this outline
|
||||
*
|
||||
* @param c The contour index
|
||||
* @return the number of points in contour[c]
|
||||
*/
|
||||
size_t ContourSize( int c) const { return contourList[c]->PointCount();}
|
||||
|
||||
/**
|
||||
* Get the flag for the tesselation rule for this outline
|
||||
*
|
||||
* @return The contour flag
|
||||
*/
|
||||
int ContourFlag() const { return contourFlag;}
|
||||
|
||||
private:
|
||||
/**
|
||||
* Process the freetype outline data into contours of points
|
||||
*/
|
||||
void ProcessContours();
|
||||
|
||||
/**
|
||||
* The list of contours in the glyph
|
||||
*/
|
||||
FTContour** contourList;
|
||||
|
||||
/**
|
||||
* A Mesh for tesselations
|
||||
*/
|
||||
FTMesh* mesh;
|
||||
|
||||
/**
|
||||
* The number of contours reported by Freetype
|
||||
*/
|
||||
short ftContourCount;
|
||||
|
||||
/**
|
||||
* A flag indicating the tesselation rule for the glyph
|
||||
*/
|
||||
int contourFlag;
|
||||
|
||||
/**
|
||||
* A Freetype outline
|
||||
*/
|
||||
FT_Outline outline;
|
||||
};
|
||||
|
||||
|
||||
#endif // __FTVectoriser__
|
Loading…
Add table
Add a link
Reference in a new issue