PDA

View Full Version : Implementing wglUseFontBitmaps



Kev~
10-11-2002, 05:20 AM
Hello,

I am trying to write my own version of wglUseFontBitmaps but it seems to mess up the character spacing sometimes. i am really stumped. any help much appreciated.

code:

BOOL GLTUseFontBitmaps( HDC hdc, // DC with font
DWORD firstChar, // First character
DWORD numChars, // Number of Chars
DWORD dispListBase, // Starting display)
{

// 2D Rotation matrix.
// Uses fixed point representation

MAT2 mat2;

// Identity matrix

// I thought this would be 1,1 but maybe it is because
// of the OpenGL/Windows origin differences?

mat2.eM11.fract = 0;
mat2.eM11.value = 1;

mat2.eM12.fract = 0;
mat2.eM12.value = 0;

mat2.eM21.fract = 0;
mat2.eM21.value = 0;

mat2.eM22.fract = 0;
mat2.eM22.value = -1;

GLYPHMETRICS gm;

// The bitmap returned by GetGlyphOutline is a DWORD-aligned row-oriented
// array of 1 byte values.

glPixelStorei(GL_UNPACK_ALIGNMENT, sizeof(DWORD));

for(int i = 0; i < (int)numChars; i++)
{
BYTE *pBuffer = NULL;

// Call once to establish the size of the buffer

int iSize = GetGlyphOutline(hdc,
firstChar + i,
GGO_BITMAP,
&gm,
0,
NULL,
&mat2);

pBuffer = new BYTE[iSize];

// Get the bitmap bits into the struct with a 2nd call

GetGlyphOutline(hdc,
firstChar + i,
GGO_BITMAP,
&gm,
iSize,
pBuffer,
&mat2);

// Build the display list

glNewList (dispListBase + i, GL_COMPILE);

glBitmap(gm.gmBlackBoxX,
gm.gmBlackBoxY,
gm.gmptGlyphOrigin.x,
gm.gmptGlyphOrigin.y,
gm.gmCellIncX,
gm.gmCellIncY,
pBuffer);

glEndList();

delete [] pBuffer;

}

return TRUE;
}