![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OpenGL и WinApi
parovoZZ © (2004-06-28 22:59:00)Решил поизучать графику. ВотЪ. И сразу возник тупик:
Почему вот это работает (т.е. функция glDraw вызыается с максимально возможной частотой):
while not finished do
begin
if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then
begin
if (msg.message = WM_QUIT) then
finished := True
else
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end
else
begin
glDraw();
SwapBuffers(h_DC);
if (keys[VK_ESCAPE]) then
finished := True
else
ProcessKeys;
end;
end;
glKillWnd(FALSE);
Result := msg.wParam;
end;
а вот это нет (та же функция вызывается только тогда, когда мы что-то делаем)
begin
glCreateWnd (800, 600, false, 32);
While GetMessage (Msg, 0, 0, 0) do
begin
glDraw();
SwapBuffers(h_DC);
DispatchMessage (Msg);
end;
glKillWnd(FALSE);
end.
parovoZZ (2004-07-01 10:51:00) [1]Спасиб, разобрался. Я так понял, что лучше всё делать с помощью таймера, а то что в цикле - это для получения максимальной скорости?
jack128 (2004-07-01 01:45:00) [2]
> ...А он делает с помощью VCL. Не подходит, хочу WinApi.
?? там почти все примеры даются в двух вариантах - на апи и всл..
parovoZZ (2004-07-01 00:17:00) [3]...А он делает с помощью VCL. Не подходит, хочу WinApi.
parovoZZ (2004-06-29 21:00:00) [4]Ну ясно, будем дальше изучать.
jack128 (2004-06-28 23:46:00) [5]ИМХО первый вариант - хуже. Создает иллюзию, что все нормально работает - но бред!!! И вообще - ходячий тормоз для системы.. На Королевстве Делфи были выложены примеры Краснова (сорри если фамилию спутал) - скачай и посмотри как он делает..
Игорь Шевченко (2004-06-28 23:40:00) [6]
> Почему вот это работает
Потому что кроме графики неплохо бы еще и windows поизучать. В первом случае функция вызывается, когда отсуствует обработка сообщений, во втором вообще черт знает что происходит