![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Вертикальная синхронизация" [Delphi, ogl]
Зм1й © (2006-07-16 21:13:00)Как её програмно (и вообще) отключить? И ещё вопрос: что она на самом деле из себя представляет? :)
TWINc (2006-07-17 01:17:00) [81]а я сам ограничиваю фпс ;)
Cash (2006-07-16 23:49:00) [82]А я ваще эту фичу на усмотрение юзверя оставляю... :)
@!!ex (2006-07-16 23:34:00) [83]Ваще то, для отключения в OpenGL достаточно:
wglSwapIntervalEXT(1); - для включения.
wglSwapIntervalEXT(0); - для выключения.
А зачем ее отключать? Чем мешаеться?
ИМХО отключать нужно только тогда, когда реальные FPS необходимо посчитать.
Cash (2006-07-16 22:22:00) [84]... А через Direct3D эта блямба отрубается так:
// В структуре PresentParams: TD3DPresent_Parameters делаем так:
PresentParams.PresentationInterval := D3DPRESENT_INTERVAL_ONE; // для включения
PresentParams.PresentationInterval := D3DPRESENT_INTERVAL_IMMEDIATE; // для выключения
// А потом:
Device.Reset(PresentParams);
KreeS (2006-07-16 22:07:00) [85]Вертикальная синхронизация означает, что отрисовка нового кадра каждый раз будет совпадать с обновлением экрана, т.е. частота обновления монитора будет ограничителем для FPS.
Через OpenGL...
procedure UseVSync(ToUse: Boolean);
var
wglSwapIntervalEXT : function(Interval: Integer) : ByteBool; stdcall;
wglGetSwapIntervalEXT: function : Integer; stdcall;
begin
wglSwapIntervalEXT := wglGetProcAddress('wglSwapIntervalEXT');
wglGetSwapIntervalEXT := wglGetProcAddress('wglGetSwapIntervalEXT');
if addr(wglGetSwapIntervalEXT) <> nil then
if wglGetSwapIntervalEXT <> ord(ToUse) then
begin
if addr(wglSwapIntervalEXT) <> nil then
wglSwapIntervalEXT(ord(ToUse));
end;
end;