![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Двойная буфферизация [Delphi, Windows]
ЛенаОД © (2006-03-09 18:49:00)Я пишу интерактивное приложение для работы с графикой.использую OpenGL(с двойной буфферизацией).Но текст мне нужно выводить Windows-овский(тип шрифта менять и т.д.), решила использовать функцию TextOut, но он мерцает.Написала Form1.DoubleBuffered:=True; - не помогает.
ЛенаОД (2006-03-09 20:34:00) [1]Спасибо за поздравления и за информацию
KreeS (2006-03-09 19:46:00) [2]можешь заглянуть в соседнюю тему про War Metal, там в моей демке текст консоли выводитя точно таким способом, буквально из своего движка кусок скопировал, налетайте, халява :)
KreeS (2006-03-09 19:43:00) [3]Можешь, нужно просто в качестве Name указывать имя windows шрифта, например "Courier New" или "Arial".
Шрифт получается точно такой же как в системе, если его не масштабировать, а рисовать того же размера, какой указан при создании.
PS. С прошедшим :)
ЛенаОД (2006-03-09 19:18:00) [4]Я так уже делала, но во-первых текст достаточно кривоват, даже сглаживание не помогает, а во-вторых я ж не могу таким образом выбирать встроеные шрифты Windows
KreeS (2006-03-09 18:56:00) [5]вот примерно как windows'овский шрифт делается в OGL...
function glCreateFont(const Name: String; Width, Height, Weight: Integer; DC: HDC) : Cardinal;
var
font : HFONT;
begin
Result := glGenLists(256);
font := CreateFont(Height, Width, 0, 0, Weight, 0, 0, 0, RUSSIAN_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE or DEFAULT_PITCH, PChar(Name));
SelectObject(DC, font);
wglUseFontBitmaps(DC, 0, 256, Result);
DeleteObject(font);
end;
procedure glFontFree(Font: Cardinal);
begin
glDeleteLists(Font, 256);
end;
procedure glTextOut(const Text: String; X, Y: Single; Font: Cardinal);
begin
glDisable(GL_TEXTURE_2D);
glRasterPos2f(X, Y);
glListBase(Font);
glCallLists(Length(Text), GL_UNSIGNED_BYTE, PChar(Text));
end;
потом делаешь так...
var
courier_new: Cardinal;
...
courier_new := CreateFont...
Ну и дальше все просто.
Ничего мерцать не должно.