The following call fails at wglUseFontOutlines. The @ERR (WIN32 GetLastError())reveals 0x8 which is <Not enough storage is available to process this command.> GetNewDisplayListIDs suceeds.
This is using a Matrox 400 with 0.5 GBytes RAM. <This is a modification of Fosner’s working code.>
Any ideas?
Thanks
===========================================
GLuint TGSS_OpenGL::GenerateDisplayListForFont( char* fontname, double xt )
{
const unsigned int nf = 0xff;
GLuint id=0xffffffff;
DWORD err = GetLastError();
if ( 0 == globalHDC | |
0 == fontname | |
(GLuint)0 == (id = GetNewDisplayListIDs(nf)) )
{
return 0;
}
LOGFONT logfont;
GLYPHMETRICSFLOAT gmf[nf];
// lfHeight can't be used to change the font size
logfont.lfHeight = -12; // use glScale to change size
logfont.lfWidth = 0;
logfont.lfEscapement = 0;
logfont.lfOrientation = logfont.lfEscapement;
logfont.lfWeight = FW_NORMAL;
logfont.lfItalic = FALSE;
logfont.lfUnderline = FALSE;
logfont.lfStrikeOut = FALSE;
logfont.lfCharSet = ANSI_CHARSET;
logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logfont.lfQuality = DEFAULT_QUALITY;
logfont.lfPitchAndFamily = FF_DONTCARE|DEFAULT_PITCH;
lstrcpy ( logfont.lfFaceName, "Arial" );
HFONT newfont;
::CreateFontIndirect( &logfont );
/*oldfont =*/ ::SelectObject(globalHDC, &newfont );
// ASSERT( 0 != oldfont );
err = GetLastError();
if ( 0 != err | |
FALSE == ::wglUseFontOutlines( globalHDC, 0, nf, id, 0.0f,
(float)xt, WGL_FONT_POLYGONS, gmf) )
{
err = GetLastError();
::glDeleteLists( id, nf );
id = 0xdddddddd;
}
else
{
::SelectObject(globalHDC,::GetStockObject( SYSTEM_FONT ));
}
DeleteObject(newfont);
return id;
}
GLuint TGSS_OpenGL::GetNewDisplayListIDs( GLsizei range )
{
ASSERT( 0 < range );
return ::glGenLists( range );
}
[This message has been edited by iss (edited 05-18-2001).]