/*
* Copyright (c) 2003 - 2012 NVIDIA Corporation. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
* This software is based upon texfont, with consent from Mark J. Kilgard,
* provided under the following terms:
*
* Copyright (c) Mark J. Kilgard, 1997.
*
* This program is freely distributable without licensing fees and is
* provided without guarantee or warrantee expressed or implied. This
* program is -not- in the public domain.
*/
#ifndef __NV_TEXFONT_H__
#define __NV_TEXFONT_H__
/**
* @file
* NVIDIA Graphics 3D Font Text API
*
* @b Description: NVTexfont is an NVIDIA library that draws font text in
* a 3D scene.
*/
/**
* @defgroup 3d_group 3D Font Text APIs
*
* Implements 3D APIs for font text used by applications.
*
* For details on the original implementation, see:
*
* http://www.opengl.org/code/detail/texfont_glut_based_library_for_creating_fonts_out_of_textures.
*
* The OpenGL ES 2.0 NVTexfont library has been expanded to include both raster
* and vector fonts. The main functions are described below.
*
* @ingroup graph_group
* @{
*/
#ifdef __cplusplus
extern "C" {
#endif
//
// Public data types
//
#define TXF_FORMAT_BYTE 0
#define TXF_FORMAT_BITMAP 1
typedef void * NVTexfontContext;
typedef enum {
NV_TEXFONT_DEFAULT = 0,
NV_TEXFONT_HELVETICA = 0,
} NVTexfontRasterFontName;
typedef enum {
NV_VECTOR_TEXFONT_DEFAULT = 0,
NV_VECTOR_TEXFONT_INCONSOLATA = 0
} NVTexfontVectorFontName;
typedef struct _NVTexfontRasterFont NVTexfontRasterFont;
typedef struct _NVTexfontVectorFont NVTexfontVectorFont;
//
// General functions
//
extern char*
nvtexfontErrorString(void);
/**
* Allocates a handle for an NVTexfont context. Default settings are
* held for each context.
*/
extern NVTexfontContext
nvtexfontAllocContext(void);
/**
* Frees the specified NVTexfont context handle.
*/
extern void
nvtexfontFreeContext(
NVTexfontContext tfc);
/**
* Sets the x,y attributes for the NVTexfont context \a tfc.
*
* \param tfc Specifies the NVTexfont context for which to set attributes.
* \param x Specifies the x attribute to set.
* \param y Specifies the y attribute to set.
*/
extern void
nvtexfontSetContextPos(
NVTexfontContext tfc,
float x,
float y);
/**
* Sets the x,y attributes for the NVTexfont context \a tfc.
*
* \param tfc Specifies the NVTexfont context for which to set attributes.
* \param scaleX Specifies the scale value for X.
* \param scaleY Specifies the scale value for Y.
*/
extern void
nvtexfontSetContextScale(
NVTexfontContext tfc,
float scaleX,
float scaleY);
extern void
nvtexfontSetContextColor(
NVTexfontContext tfc,
float r,
float g,
float b);
// TODO: Raster and vector font structures/functions should be merged
// TODO: so that we initialize a font object as one or the other and
// TODO: then use the same set of top level functions for rendering.
/** @name Raster Font Functions
*
*/
/*@{*/
extern int
nvtexfontInRasterFont(
NVTexfontRasterFont *txf,
int c);
/**
* Initializes an \c %NVTexfontRasterFont.
*
* By default, NVTexfont supports only the ::NV_TEXFONT_HELVETICA font.
* ::NV_TEXFONT_DEFAULT is the same as \c NV_TEXFONT_HELVETICA. More may be
* compiled into the library, at the cost of making the library larger.
*
* \param font Specifies the raster font to initialize.
* \param texobj Specifies the texture object. If 0, a name is generated
* using the OpenGL 4 \c glGenTextures function.
* \param setupMipmaps Specifies the MIP maps to accompany this texture.
* \param minFilter Specifies the minimum filter for the MIP maps.
* \param magFilter Specifies the maximum filter for the MIP maps.
*/
extern NVTexfontRasterFont*
nvtexfontInitRasterFont(
NVTexfontRasterFontName font,
GLuint texobj,
GLboolean setupMipmaps,
GLenum minFilter,
GLenum magFilter);
/**
* Frees textures used by the font \a txf.
*
* \param txf A pointer to the textures to free.
*/
extern void
nvtexfontUnloadRasterFont(
NVTexfontRasterFont *txf);
/**
* Renders the specified null-terminated string by using the NVTexfont \a txf.
*
* The text gets drawn at position (x, y) on the screen with the relevant scale
* and the color (r,g,b).
*
* The size of the text is one unit per font pixel. This is scaled so that
* the height of the text is 1/10th the height of the screen when scale = 1.0.
* \c txfGetStringMetrics may be used to get the width, maximum ascent from
* baseline, and maximum descent from baseline.
*
* \param txf A pointer to the texture font.
* \param string A pointer to the string to render.
* \param x The x position at which to render.
* \param y The y position at which to render.
* \param scaleX The X scale.
* \param scaleY The Y scale.
* \param r The red value.
* \param g The green value.
* \param b The blue value.
*/
extern void
nvtexfontRenderString_All(
NVTexfontRasterFont *txf,
char *string,
float x,
float y,
float scaleX,
float scaleY,
float r,
float g,
float b);
/**
* Renders the specified null-terminated string as above but uses the
* position/scale/color from the \c NVTexfontContext where omitted.
*
* \param txf A pointer to the texture font.
* \param tfc The texture font context.
* \param string A pointer to the string to render.
* \param x The x position at which to draw.
* \param y The y position at which to draw.
*/
extern void
nvtexfontRenderString_Pos(
NVTexfontRasterFont *txf,
NVTexfontContext tfc,
char *string,
float x,
float y);
extern void
nvtexfontRenderString(
NVTexfontRasterFont *txf,
NVTexfontContext tfc,
char *string);
extern void
nvtexfontGetStringMetrics(
NVTexfontRasterFont *txf,
char *string,
int len,
int *width,
int *max_ascent,
int *max_descent);
/*@}*/
/** @name Vector Font Functions
*
*/
/*@{*/
extern int
nvtexfontInVectorFont(
NVTexfontVectorFont *vtf,
int c);
/**
* Initialize an NVTexfontVectorFont.
*
* By default, NVTexfont supports one vector font:
* ::NV_VECTOR_TEXFONT_INCONSOLATA. ::NV_TEXFONT_DEFAULT is the same as
* \c NV_VECTOR_TEXFONT_INCONSOLATA.
*
* \param font Specifies the vector font to initialize.
* \param antialias Specifies whether the text should be antialiased when drawn.
* \param use_vbo Specifies whether a vertex buffer object (VBO) should be
* used to speed up the rendering.
*/
extern NVTexfontVectorFont*
nvtexfontInitVectorFont(
NVTexfontVectorFontName font,
GLboolean antialias,
GLboolean use_vbo);
/**
* Frees resources used by the vector font \a vtf, including the VBO if used.
*
* \param vtf A pointer to the vector font resources to free.
*/
extern void
nvtexfontUnloadVectorFont(
NVTexfontVectorFont *vtf);
/**
* Renders the specified null-terminated string by using the
* \c NVTexfontVectorFont \a vtf.
*
* A scale of 1.0 is equivalent to 1/10 the height of the viewport. The text
* gets drawn in the color specified by (r,g,b).
*
* \param vtf A pointer to the vector font to use when rendering.
* \param string A pointer to the string to render.
* \param scaleX The scale for X.
* \param scaleY The scale for Y.
* \param x The x position at which to draw, after being adjusted for \a scaleX.
* \param y The y position at which to draw, after being adjusted for \a scaleY.
* \param r The red value.
* \param g The green value.
* \param b The blue value.
*/
extern void
nvtexfontRenderVecString_All(
NVTexfontVectorFont *vtf,
char *string,
float x,
float y,
float scaleX,
float scaleY,
float r,
float g,
float b);
/**
* Renders the specified null-terminated string as above but uses the
* position/scale/color from the \c NVTexfontContext where omitted.
*
* \param vtf A pointer to the vector font to use when rendering.
* \param tfc The texture font context.
* \param string A pointer to the string to render.
* \param x The x position at which to draw.
* \param y The y position at which to draw.
*/
extern void
nvtexfontRenderVecString_Pos(
NVTexfontVectorFont *vtf,
NVTexfontContext tfc,
char *string,
float x,
float y);
/**
* Renders the specified null-terminated string as above but uses the
* position/scale/color from the \c NVTexfontContext where omitted.
*
* \param vtf A pointer to the vector font to use when rendering.
* \param tfc The texture font context.
* \param string A pointer to the string to render.
*/
extern void
nvtexfontRenderVecString(
NVTexfontVectorFont *vtf,
NVTexfontContext tfc,
char *string);
/** @} */
#ifdef __cplusplus
}
#endif
/** @} */
#endif /* __NV_TEXFONT_H__ */