我要发帖 回复

正式会员

6

主题

35

积分

0

专家分

:

私信
发表时间 : 2008-9-24 11:26:25 | 浏览 : 2106    评论 : 8
rt,看了一些资料 用wglUseFontOutlines来显示中文字体,在自己的一个MFC openGL框架程序中测试成功,想转移到vega下用回调函数实现显示出现问题
调用显示列表时无显示
我的代码如下:
//制作显示列表子函数
static int num=0;      //全局变量,保存显示列表数目
static unsigned short*  plist=NULL;    //全局变量,保存各个显示列表序号
void CVisSceneView::makeText(CString str)
{
    int zlist;
   unsigned short* list=new unsigned short[str.GetLength()];  //临时保存显示列表序号
for(int i=0;i<str.GetLength();i++){
  unsigned char uChar=str;
  unsigned short dword;
  if(::IsDBCSLeadByte(uChar))
   dword=MAKEWORD(str[++i],uChar);   //若为双字节则多处理一个字节
  else
   dword=(WORD)uChar;
  zlist=glGenLists(1);
  wglUseFontOutlines(wglGetCurrentDC(),dword,1,zlist,0.0f,0.0f,1,NULL);
  list[num++]=zlist;
}
    plist=new unsigned short[num];
memcpy(plist,list,num*sizeof(unsigned short));
}
//在主循环之前加载回调函数
void CVisSceneView::postConfiged()
{
    vgAddFunc(m_pChan,VGCHAN_POSTDRAW,DrawCallback,NULL);
}
//执行回调函数
void DrawCallback(vgCommon* chan,void* data){
   GLint matmode;
GLfloat projmat[16];

pfPushState();
pfDisable(PFEN_TEXTURE);
pfDisable(PFEN_FOG);
pfDisable(PFEN_LIGHTING);
pfTransparency(PFTR_FAST);
   
glDisable(GL_DEPTH_TEST);
glGetIntegerv(GL_MATRIX_MODE,&matmode);
    glMatrixMode(GL_PROJECTION);
glGetFloatv(GL_PROJECTION_MATRIX,projmat);
glMatrixMode(matmode);
pfPushIdentMatrix();
glGetIntegerv(GL_MATRIX_MODE,&matmode);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,1280,0,1024);
glColor3f(1.0,1.0,0.0);
/*char text[256];
strcpy(text,"Welcome to vega!");
vgFontSize(15,20);
vgFontPos(40,20,0);
    vgDrawFont(text);    */

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(40,20,0);
glCallLists(num,GL_UNSIGNED_SHORT,plist);
glMatrixMode(matmode);
pfPopMatrix();
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(projmat);
glMatrixMode(matmode);
glEnable(GL_DEPTH_TEST);
pfPopState();
}
中间注释部分是用vgFont显示英文字体,能正常显示
为什么调用显示列表不能显示?  请高手指教我错哪儿了?

最近VR访客

lalaWang 评论于2008-9-24 11:28:08
makeText函数在OnCreate函数中调用,为str设置内容
lalaWang 评论于2008-9-24 15:21:50

更新

自己调试发现textMake里面glGenLists(1)返回的一直是0??
这又是怎么回事?
wgfvirtools 评论于2008-9-28 18:50:24
楼主努力
嘲风 评论于2008-10-17 17:05:10
学习中
xupengss1978 评论于2010-3-25 00:17:58
不错,支持
shwbuaa 评论于2010-4-2 16:46:08
大家能发个做好的程序吗,我怎么调用回调函数老是有问题呢。
提示说error C2440: 'type cast' : cannot convert from '' to 'void (__cdecl *)(class vgCommon *,void *)'
        None of the functions with this name in scope match the target type
帮帮忙吧
VGLL 评论于2010-4-3 23:00:34
你的代码我看了一下,能否把原程序发过来?
个人的看法,
makeText  和 DrawCallback
应该设为全局静态函数。
你过给我我给你调一下
Vega158@163.com
QQ: 1329460345
ggw0122 评论于2011-4-7 22:19:20
学习了,谢谢

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-4-21 09:12 PM

返回顶部