|
|
Context c = renderer.m_context;
point_size = MulDiv(size, GetDeviceCaps(c, LOGPIXELSY), 72);
HFONT font = 0;
if (font_size_lookup[in_size] == 0)
{
// Set up the LOGFONT structure
LOGFONT logical_font;
logical_font.lfHeight = get_point_size(); //?????????????????
logical_font.lfWidth = 0; //???????????????????lfWidth???0????????????????????????????????
logical_font.lfEscapement = 0; //?????????????????????????????
logical_font.lfOrientation = 0; //?????????????????????????
logical_font.lfWeight = FW_NORMAL; //????????Windows?????????????????????
logical_font.lfItalic = false; //?lfItalic?TRUE?????
logical_font.lfUnderline = false; //?lfUnderline?TRUE?????????
logical_font.lfStrikeOut = false; //?lfStrikeOut?TRUE?????????
logical_font.lfCharSet = ANSI_CHARSET; //?????
logical_font.lfOutPrecision = OUT_DEFAULT_PRECIS; //??????
logical_font.lfClipPrecision = CLIP_DEFAULT_PRECIS;//??????
logical_font.lfQuality = PROOF_QUALITY; //??????
logical_font.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;//???????????
lstrcpy(logical_font.lfFaceName, fontname.c_str());
font = CreateFontIndirect(&logical_font);
HFONT previous_font = (HFONT)SelectObject(c, font);
wglUseFontBitmapsW(c, 0, 128, next_call_list_start);
font_size_lookup[in_size] = next_call_list_start;
font_handle_lookup[in_size] = font;
next_call_list_start += 130;
SelectObject(c, previous_font);
}
TextWriter& Text: perator<<(TextWriter& tw) const
{
int draw_x;
int draw_y;
calculate_position_and_advance_cursor(tw, &draw_x, &draw_y);
// TODO: This isn't Unicode!
std::string narrow(m_text.begin(), m_text.end());
glBindTexture(GL_TEXTURE_2D, 0);
glPushMatrix();
tw.renderer.SetColor(m_color);
glListBase(font_size_lookup[tw.size]);
glRasterPos2i(draw_x, draw_y + tw.size);
glCallLists(static_cast<int>(narrow.length()), GL_UNSIGNED_BYTE, narrow.c_str());
glPopMatrix();
// TODO: Should probably delete these on shutdown.
//glDeleteLists(1000, 128);
return tw;
}
????????ASCLL?128?????????????????
????????logical_font.lfCharSet = GB2312_CHARSET;????????wglUseFontBitmapsW(c, 0, 65535????????????????, next_call_list_start???????1?);???????
glCallLists(static_cast<int>(narrow.length()), GL_UNSIGNED_SHORT, narrow.c_str());
?????????????????????????????????????/0???????????????????????????
|
|