-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprintText.cpp
78 lines (47 loc) · 1.69 KB
/
printText.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "stdafx.h"
#include "printText.h"
GLuint base; // 绘制字体的显示列表的开始位置
GLfloat cnt1; // 字体移动计数器1
GLfloat cnt2; // 字体移动计数器2
GLvoid BuildFont(HDC hDC) // 创建位图字体
{
HFONT font; // 字体句柄
HFONT oldfont; // 旧的字体句柄
base = glGenLists(96); // 创建96个显示列表
font = CreateFont(-24, // 字体高度
0, // 字体宽度
0, // 字体的旋转角度 Angle Of Escapement
0, // 字体底线的旋转角度Orientation Angle
FW_BOLD, // 字体的重量
FALSE, // 是否使用斜体
FALSE, // 是否使用下划线
FALSE, // 是否使用删除线
ANSI_CHARSET, // 设置字符集
OUT_TT_PRECIS, // 输出精度
CLIP_DEFAULT_PRECIS, // 裁剪精度
ANTIALIASED_QUALITY, // 输出质量
FF_DONTCARE | DEFAULT_PITCH, // Family And Pitch
L"Courier New"); // 字体名称
oldfont = (HFONT)SelectObject(hDC, font); // 选择我们需要的字体
wglUseFontBitmaps(hDC, 32, 96, base); // 创建96个显示列表,绘制从ASCII码为32-128的字符
SelectObject(hDC, oldfont); // 选择原来的字体
DeleteObject(font); // 删除字体
}
GLvoid KillFont(GLvoid) // 删除显示列表
{
glDeleteLists(base, 96); //删除96个显示列表
}
GLvoid glPrint(const char *fmt, ...) // 自定义GL输出字体函数
{
char text[1024]; // 保存文字串
va_list ap; // 指向一个变量列表的指针
if (fmt == NULL) // 如果无输入则返回
return;
va_start(ap, fmt); // 分析可变参数
vsprintf(text, fmt, ap); // 把参数值写入字符串
va_end(ap);
glPushAttrib(GL_LIST_BIT); // 把显示列表属性压入属性堆栈
glListBase(base - 32); // 设置显示列表的基础值
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text); // 调用显示列表绘制字符串
glPopAttrib(); // 弹出属性堆栈
}