Skip to main content
gamedev.net
🔒 Locked

Drawing Text

Started by Enfekted 1 reply 350+ views
Original Post
Enfekted
Enfekted
I just am finishing up switching my graphics engine from DirectX to OpenGL. Everything has gone smoothly up until I got to the font system. I think everything is loading correctly and all the settings are right for the camera, but no fonts are showing up at all. I'm loading the font like this
HRESULT CEGIFont::Initialize( HDC hDC, int nPointSize, LPCTSTR pFaceName )
{
	if ( m_bInitialized ) return E_FAIL;
	
	m_Base = glGenLists(96);
	
	m_hFont = CreateFont( nPointSize, 0, 0, 0, FW_NORMAL, false, false, false, 
						  ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY,
						  FF_DONTCARE, pFaceName );

	if ( m_hFont == NULL ) return E_FAIL;

	SelectObject( hDC, m_hFont );
	if ( !wglUseFontOutlines( hDC, 0, 255, m_Base, 0, 50, WGL_FONT_POLYGONS, m_gmf ) )
	{
		DWORD e = GetLastError();
	}

//	InitializeDimensions( hDC );

	
	m_bInitialized = TRUE;
return true;
}

And printing a string with this
void CEGIFont::PrintString( int x, int y, char *String, COLORREF FontColor, UINT nFormat )
{
	if ( !String || !m_bInitialized ) return;

	float xPos = float(x);
	float yPos = float(y);
	float width = WidthOf( String );
	
	if ( nFormat == DT_RIGHT ) xPos = float(x-WidthOf( String ));
	else if ( nFormat == DT_CENTER ) xPos = float(x-(WidthOf( String )/2));
	
	glPushMatrix();

		glEnable( GL_COLOR_MATERIAL );
		glEnable( GL_CULL_FACE );

		glCullFace(GL_BACK); 

		glTranslatef( xPos, yPos, 0 );

		glColor3ub( GetRValue(FontColor), GetGValue(FontColor), GetBValue(FontColor) );				
		
		glPushAttrib( GL_LIST_BIT );
			glListBase( m_Base );
			glCallLists( GLsizei(strlen(String)), GL_UNSIGNED_BYTE, String );
		glPopAttrib();	

		glDisable( GL_COLOR_MATERIAL );

	glPopMatrix();
}

And the world is initialized like this
void CGraphicSystem::SetView( RECT r)
{
	RECT cr;
	GetClientRect( m_hParent, &cr );
	
	glViewport( cr.left, cr.top, cr.right-cr.left, cr.bottom-cr.top );

	glMatrixMode( GL_PROJECTION );
	glLoadIdentity();
	
	glOrtho( r.left, r.right, r.bottom, r.top, 100, -100 );
	
	glMatrixMode( GL_MODELVIEW );
	glLoadIdentity();
	
	m_ViewRect = r;
}

// In CGraphicSystem::Init()

// ...

	glEnable( GL_BLEND );
	glEnable( GL_ALPHA_TEST );
	glEnable( GL_DEPTH_TEST );
	glEnable( GL_CULL_FACE );
	glEnable( GL_TEXTURE_2D );
		
	glShadeModel( GL_SMOOTH );
	glFrontFace( GL_CW );
	
	glAlphaFunc( GL_GREATER, 0 );
	glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
	glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
	
	RECT r;
	SetRect( &r, 0, 0, 1024, 768 );
	SetView( r );
// ...

If anyone can see what I'm doing wrong, please let me know. Thanks [edited by - enfekted on January 23, 2004 9:35:52 PM]
shadow12345
shadow12345
-You don''t need material coloring for bitmap fonts, only for outline fonts

-You probably haven''t got the text lined up on the screen, I''d try using normal OpenGL projections by pushing the unit one unit farther into the screen than the close clipping plane by using glTranslatef, or just try setting it to 0,0 for the time being if you absolutely need to keep it in ortho

Why don't alcoholics make good calculus teachers?Because they don't know their limits!Oh come on, Newton wasn't THAT smart...
Enfekted
Enfekted
thanks for the reply shadow.

This actually is a outline font.

I tried manually setting the position to {400,400,0} which is within the 0to1024 x 0to768 x -100to100 orthographic view, but no luck.

The only things I can think of is that the font is too small, the blending functions i set for my textures might be messing it up, or the fonts I'm using aren't supported in wglUseFontOutlines.

But, I tried scaling the text by 100x, removed all the glEnable() calls in Init(), and tried other true type fonts and nothing seems to work.

I'm out of ideas...


[edited by - enfekted on January 23, 2004 10:09:34 PM]

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.