|
我写一个Font类,头文件是:
#include <stdio.h>
class Font
{
public:
Font();
virtual ~Font();
GLuint Base;
void drawString(int x,int y,char* str,...);
};
源文件是:
#include "stdafx.h"
#include "Font.h"
#include "OpenGL.h"
extern OpenGL opengl;
Font::Font()
{
}
Font::~Font()
{
}
void Font::drawString(int x,int y,char* str,...){
char text[256]; va_list argList; if(str==NULL) return; va_start(argList,str); vsprintf(text,str,argList);
va_end(argList);
Base=glGenLists(96);
wglUseFontBitmaps(opengl.hDC,32,96,Base);
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glPushAttrib(GL_LIST_BASE);
glListBase(Base-32); glColor3f(1.0f,1.0f,1.0f); glRasterPos2i(x,y); glCallLists(strlen(text),GL_UNSIGNED_BYTE,text);
glPopAttrib();
glEnable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
glDeleteLists(Base,96);
}
后来我感觉这个drawString方法效率太差了,于是把Base=glGenLists(96);和wglUseFontBitmaps(opengl.hDC,32,96,Base);这两行挪到构造函数里,于是源文件改为:
#include "stdafx.h"
#include "Font.h"
#include "OpenGL.h"
extern OpenGL opengl;
Font::Font()
{
Base=glGenLists(96);
wglUseFontBitmaps(opengl.hDC,32,96,Base);
}
Font::~Font()
{
glDeleteLists(Base,96);
}
void Font::drawString(int x,int y,char* str,...){
char text[256]; va_list argList; if(str==NULL) return; va_start(argList,str); vsprintf(text,str,argList);
va_end(argList);
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glPushAttrib(GL_LIST_BASE);
glListBase(Base-32); glColor3f(1.0f,1.0f,1.0f); glRasterPos2i(x,y); glCallLists(strlen(text),GL_UNSIGNED_BYTE,text);
glPopAttrib();
glEnable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
}
可是这样子就显示不出来文字了,请问难道我这样修改不行吗? |
|