Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Вниз

"Вертикальная синхронизация"   Найти похожие ветки 

 
Зм1й ©   (2006-07-16 21:13) [0]

Как её програмно (и вообще) отключить? И ещё вопрос: что она на самом деле из себя представляет? :)


 
KreeS ©   (2006-07-16 22:07) [1]

Вертикальная синхронизация означает, что отрисовка нового кадра каждый раз будет совпадать с обновлением экрана, т.е. частота обновления монитора будет ограничителем для 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;


 
Cash ©   (2006-07-16 22:22) [2]

... А через Direct3D эта блямба отрубается так:

// В структуре PresentParams: TD3DPresent_Parameters делаем так:
  PresentParams.PresentationInterval := D3DPRESENT_INTERVAL_ONE; // для включения

  PresentParams.PresentationInterval := D3DPRESENT_INTERVAL_IMMEDIATE; // для выключения

// А потом:
Device.Reset(PresentParams);


 
@!!ex ©   (2006-07-16 23:34) [3]

Ваще то, для отключения в OpenGL достаточно:
wglSwapIntervalEXT(1); - для включения.
wglSwapIntervalEXT(0); - для выключения.

А зачем ее отключать? Чем мешаеться?
ИМХО отключать нужно только тогда, когда реальные FPS необходимо посчитать.


 
Cash ©   (2006-07-16 23:49) [4]

А я ваще эту фичу на усмотрение юзверя оставляю... :)


 
TWINc ©   (2006-07-17 01:17) [5]

а я сам ограничиваю фпс ;)


 
tButton ©   (2006-07-17 04:39) [6]

а вообще, больше 30 ФПС на глаз не видно =)


 
Cash ©   (2006-07-17 07:42) [7]

tButton ©   (17.07.06 04:39) [6]:
Гы-гы-гы. :)
Особенно, когда мышу со скоростью 45-120 пикселей в секунду двигаешь! :)


 
tButton ©   (2006-07-17 08:09) [8]

странно.
двигаю мышу со скоростью ~100пкс/с
развёртка монитора стоит 72Гц
один хрен глаз не видит плавного движения
(винда)
или это у меня глаза такие? =)


 
Cash ©   (2006-07-17 08:47) [9]

КВС (FPS) для устройства GDI составляет 320 - 400, в зависимости от
конфига. 72 квс, а ты со скоростью ~100 пвс. Дай мыше сразу 150 и более
пвс, тогда увидишь неплавное перемещение мыши. У меня min 1500 пвс, дак
я не то чтобы скачков, у меня мышь как по маслу ялозит! Так все плавно,
что прям противно! :)))


 
tButton ©   (2006-07-17 08:53) [10]

да я его плавного и так не вижу =)
а во всяких FPS (First Person Shooter) курсора вообще нет, там только прицел =)
и вообще, нефик мышью так дёргать! =)))


 
ancara ©   (2006-07-17 11:26) [11]


> а вообще, больше 30 ФПС на глаз не видно =)


не, к играм это не относится. Была где-то статейка, если найду ссылку, выложу, там подробно так рассказывалось, почему для фильма 25 fps нормально, а для игрушки нет. Главная причина - физика и движение объектов, остальные не помню... щас поищу...


 
tButton ©   (2006-07-17 11:28) [12]


> Главная причина - физика и движение объектов

пардоньте, 30 фпс для вывода картинки - вполне достаточно
никто не мешает обсчитывать физику с частотой 500ФПС
это вообще отдельная вещь.


 
ancara ©   (2006-07-17 11:29) [13]

во нашел: http://www.nvworld.ru/docs/30fps.html


 
Зм1й ©   (2006-07-17 17:43) [14]


> KreeS ©   (16.07.06 22:07) [1]

Спасибо большое. Но странно, что отключение синхронизации никак не повлияло на fps. Вывожу 3 тыс. треугольников с текстурой и fps 62-66 к/с. В чём может быть загвоздка?

> Cash ©   (16.07.06 22:22) [2]

Спасибо, может тоже когда-нибудь пригодится! :)


 
cyborg ©   (2006-07-17 19:44) [15]

> Но странно, что отключение синхронизации никак не повлияло
> на fps.

Могу предположить что рисуешь по таймеру?


 
KreeS ©   (2006-07-17 19:46) [16]


> Зм1й ©   (17.07.06 17:43) [14]

А частота экрана какая?
Можт это тормоза просто?


 
Зм1й ©   (2006-07-17 19:58) [17]


>
> Могу предположить что рисуешь по таймеру?

Нет

> Можт это тормоза просто?

Нет, ничего не тормозит, всё идёт быстро

> А частота экрана какая?

Что ты имеешь ввиду?


 
cyborg ©   (2006-07-17 20:16) [18]

В драйвере посмотри, может стоять принудительная синхронизация, поставь "по выбору приложения".


 
Зм1й ©   (2006-07-17 20:54) [19]


> cyborg ©   (17.07.06 20:16) [18]

Я тут, честно говоря, не особо шарю.. :)
Там есть пункты "Режим и синхронизация", "Стандарт синхронизации". Везде установлено "Пользовательские значения". Ещё есть варианты DMT, CVT, GTF...


 
KreeS ©   (2006-07-18 01:06) [20]


> Что ты имеешь ввиду?

Полазь в свойствах экрана, найди частоту обновления, посмотри какая. Если совпадает с ФПС, значит поставлена принудительная синхронизация, хотя поидее должна все равно отключаться.


 
Зм1й ©   (2006-07-18 15:32) [21]


> KreeS ©   (18.07.06 01:06) [20]

Нет, частота обновления 75 герц, а fps принимает одно из трёх значений: 62.5, 66.7, inf.

P.s. Даже когда вывожу пару треугольников...


 
cyborg ©   (2006-07-18 16:02) [22]

> [21] Зм1й ©   (18.07.06 15:32)

Sleep?


 
Зм1й ©   (2006-07-18 16:06) [23]


> cyborg ©   (18.07.06 16:02) [22]

Использую ли я sleep? Нет, конечно :)


 
@!!ex ©   (2006-07-18 16:20) [24]

Зм1й ©
Это однозначно не верт. синх виноват.
При нем у тебя бы значение было стабильно 75 кадлров, в редких случаях колеблется на +-1FPS.
inf - это от infinity(бесконечность)
Как же ты считаешь ФПС-то???


 
Зм1й ©   (2006-07-18 16:27) [25]

Для предотвращения возможных вопросов

 while not QUIT_GAME and not FATAL_ERROR do
 if PeekMessage (Msg, 0, 0, 0, PM_NOREMOVE) then
 begin
   if GetMessage (Msg, 0, 0, 0) then
   begin
     Translatemessage (Msg);
     DispatchMessage (Msg);
   end;
 end else Rendering (Wnd);

procedure Rendering (hWnd: HWND);
var
ps: TPaintStruct;
begin
 FPS := 1000 / (GetTickCount - GlobalCntr);
 GlobalCntr := GetTickCount;

 DC := BeginPaint(hWnd, ps);
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

 DrawGame (hWnd);

 SwapBuffers(DC);
 EndPaint(hWnd, ps);

 Inc (ShowFpsCntr);
 if ShowFpsCntr = 20 then
 begin
   TextFPS.Text[0] := "FPS " + FloatToStr(FPS);
   ShowFpsCntr := 0;
 end;
end;


 
cyborg ©   (2006-07-18 16:30) [26]

Что это такое?
FPS := 1000 / (GetTickCount - GlobalCntr);
GlobalCntr := GetTickCount;

Где тут кол-во кадров?


 
Зм1й ©   (2006-07-18 16:36) [27]

GlobalCntr - последнее замеченное время
GetTickCount - GlobalCntr - врямя, которое уходит на одну процедуру Rendering
1000 / (GetTickCount - GlobalCntr) - сколько таких процедур можно выполнить за одну секунду


 
@!!ex ©   (2006-07-18 16:39) [28]

>>GetTickCount - GlobalCntr
Время которое заняла отрисовка предидущего кадра

>>FPS := 1000 / (GetTickCount - GlobalCntr);
Делим 1000 на длительность прорисовки одного кадра. Получаем, сколько кадров за секунду отрисуеться при такой скорости отрисовки одного кадра.
Это не реальное FPS. Это предполагаемое FPS.

Зм1й
Попробуй отрисовывать не раз в 20 кадров. А каждый кадр. Какой результат будет?


 
@!!ex ©   (2006-07-18 16:40) [29]

Упс. Прошу прощения. Зм1й уже ответил.


 
Зм1й ©   (2006-07-18 16:45) [30]


> Попробуй отрисовывать не раз в 20 кадров. А каждый кадр.
>  Какой результат будет?

Как это раз? DrawGame вызывается каждый кадр, а вот обновление текстовой строки с fps - каждый двадцатый


 
cyborg ©   (2006-07-18 16:49) [31]

В расчётах у тебя не хватает кол-вао кадров.
Каждый кадр увеличивай счётчик кадров. Затем, если прошло времени больше секунды (1000 мс.), то делай перерасчёт времени, умножай на кол-во кадров текущую формулу и счётчик кадров сбрасывай.


 
@!!ex ©   (2006-07-18 16:54) [32]

cyborg ©
все у него хватает.

Зм1й
я имел ввиду, отрисовывай FPS не раз в 20 кадров, а каждый кадр.


 
Зм1й ©   (2006-07-18 17:01) [33]


> cyborg ©   (18.07.06 16:49) [31]

если сделать так

 Inc (GlobalCntr);
 if GetTickCount - LastTickCntr >= 1000 then
 begin
  FPS := GlobalCntr;
  LastTickCntr := GetTickCount;
  GlobalCntr := 0;
 end;

то fps = 75 :((


> @!!ex ©   (18.07.06 16:54) [32]

такой же результат (62,66)


 
@!!ex ©   (2006-07-18 17:12) [34]

cyborg ©
поршу прощения. не обратил внимания. Вы были права.


 
Зм1й ©   (2006-07-18 17:21) [35]

Вот допустим у меня по методу cyborg"а теперь 75 к/с. Значит всё-таки дело в синхронизации?


 
grisme ©   (2006-07-18 17:39) [36]

Да, теперь к-во кадров совпадает с частотой вертикальной развертки твоего экрана..если это не меняется даже в случае описанных выше примеров, то скорее всего, включена принудительная верт.синхронизация..как быть в этом случае, описывалось у С.Гайдукова "OpenGL проф.программрование 3d графики на C++"..


 
cyborg ©   (2006-07-18 17:46) [37]

[33] Зм1й ©   (18.07.06 17:01)
Только у тебя здесь всё равно с ошибкой считает (хотя это не относится к решению вопроса). Например вдург время межэду расчётами прошло не 1 секунда, а две грубо говоря.

Нужно так:
ФПС=кадры* 1000 / прошедшее время.


 
Зм1й ©   (2006-07-18 17:48) [38]


> grisme ©   (18.07.06 17:39) [36]

А как хотя бы вручную отключить эту синхронизацию?


 
ancara ©   (2006-07-18 17:48) [39]

GetTickCount очень неточно тики показывает.
см. MSDN: If you need a higher resolution timer, use a multimedia timer or a high-resolution timer.

Если в цикле вызывать GetTickCount его значение будет изменятся скачками, по 55 кажись, непомню...
Так что мерить FPS надо как и полагается его сутью: считать количество кадров отрендеренных за посленюю секунду. В каждом кадре увеличивай счетчик, и каждую секунду показывай значение. Надо только хороший таймер организовать, чтоб РОВНО через секнду срабатывал.

А если стабильно показывает 75 fps - на 95% уверен, что включена верт. синхр.
Какая видюха у тебя кстати? У меня щас на работе GF2MX400 имеет опции вкл. выкл. и "определяется приложением", т.е. ее можно принудительно выключить. Дома на Радеоне 9600 та же история.


 
grisme ©   (2006-07-18 17:52) [40]

Обычно это в настройках экрана(Правый_щелчок_на_десктопе->свойства->параметры->дополнительно) где-то там, все зависит от твоей карты..


 
Зм1й ©   (2006-07-18 17:53) [41]


> ancara ©   (18.07.06 17:48) [39]

GeForce4 Ti 4200 with AGP8X


 
ancara ©   (2006-07-18 18:06) [42]

у меня это выглядит так http://img117.imageshack.us/img117/6666/vsyncpr3.jpg


 
@!!ex ©   (2006-07-18 18:11) [43]

Зм1й
Тебе же в самом начале дали код функции.
И даже с описанием загрузки функции из dll.


 
cyborg ©   (2006-07-18 18:11) [44]

> [42] ancara ©   (18.07.06 18:06)

Совесть есть такую картинку в 183 кило выкладывать? Я её в gif спокойно в 33 килобайта сконвертил.


 
Зм1й ©   (2006-07-18 18:18) [45]

Нашёл, выключил синхронизацию, стало 400-500 fps (тоже не шибко много, но всё же :)), однако теперь хотелось бы сделать это програмно...


 
Зм1й ©   (2006-07-18 18:20) [46]


> @!!ex ©   (18.07.06 18:11) [43]

Так этот код не действует, как оказалось


 
@!!ex ©   (2006-07-18 18:32) [47]

Тааак. Что не рабоает? Дебаггером смотрел, указатели все корректные?


 
@!!ex ©   (2006-07-18 18:35) [48]

Попробуй вот в таком виде:

procedure UseVSync(ToUse: Boolean);
var
wglSwapIntervalEXT   : function(Interval: Integer) : ByteBool; stdcall;
begin
wglSwapIntervalEXT    := wglGetProcAddress("wglSwapIntervalEXT");
wglSwapIntervalEXT(ord(ToUse));
end;


 
@!!ex ©   (2006-07-18 18:37) [49]

Функция кастрированная, если все будет плохо, упадет при обращении к функции по адрес NULL, но зато есть от чего плясать.


 
@!!ex ©   (2006-07-18 18:37) [50]

Или вот в таком, чтобы не падало:

procedure UseVSync(ToUse: Boolean);
var
wglSwapIntervalEXT   : function(Interval: Integer) : ByteBool; stdcall;
begin
wglSwapIntervalEXT    := wglGetProcAddress("wglSwapIntervalEXT");
if addr(wglSwapIntervalEXT)<>nil then
wglSwapIntervalEXT(ord(ToUse));
end;


 
Зм1й ©   (2006-07-18 18:39) [51]

Нет, они равны nil


 
Зм1й ©   (2006-07-18 18:44) [52]


> procedure UseVSync(ToUse: Boolean);
> var
> wglSwapIntervalEXT   : function(Interval: Integer) : ByteBool;
>  stdcall;
> begin
> wglSwapIntervalEXT    := wglGetProcAddress("wglSwapIntervalEXT");
>
> wglSwapIntervalEXT(ord(ToUse));
> end;

Access Violation

> procedure UseVSync(ToUse: Boolean);
> var
> wglSwapIntervalEXT   : function(Interval: Integer) : ByteBool;
>  stdcall;
> begin
> wglSwapIntervalEXT    := wglGetProcAddress("wglSwapIntervalEXT");
>
> if addr(wglSwapIntervalEXT)<>nil then
> wglSwapIntervalEXT(ord(ToUse));
> end;

Не работает, потому что условие не выполняется


 
@!!ex ©   (2006-07-18 19:02) [53]

Значит у тебя по каким то причинам не доступно расширение OpenGL.
Какая Windows?


 
grisme ©   (2006-07-18 19:08) [54]

Блин, посмотрел я в книге Гайдукова...:) Он не говорил, как это обходить, он просто сказал, что драйвер карточки может игнорить твои указания насчет верт.синхронизации (если принудительно включена), поэтому программное переключение в таком случае невозможно..Пришивай на мануал-переключение(причем выводи, если невозможно выключить/включить) либо пиши собственный драйвер для видео-системы(аля Quake 3)


 
@!!ex ©   (2006-07-18 19:08) [55]

В принципе я могу выложить opengl32.dll.
Сделаешь backup, заменишь, глядишь все заработает.
Хотя, конечно, проблема может быть в другом.


 
@!!ex ©   (2006-07-18 19:10) [56]

>>Блин, посмотрел я в книге Гайдукова...:) Он не говорил, как это обходить, он просто сказал, что драйвер карточки может игнорить твои указания насчет верт.синхронизации (если принудительно включена), поэтому программное переключение в таком случае невозможно..Пришивай на мануал-переключение(причем выводи, если невозможно выключить/включить) либо пиши собственный драйвер для видео-системы(аля Quake 3)

Проблема явно не в этом.
Учитывая, что функция не грузиться.


 
Зм1й ©   (2006-07-18 19:11) [57]


> Какая Windows?

XP home sp2

> В принципе я могу выложить opengl32.dll

Выложи пожалуйста


 
@!!ex ©   (2006-07-18 19:13) [58]

http://www.afera-net.narod.ru/opengl32.rar
У тебя не старая операционка. Боюсь проблема не в этом........

проверь этот вариант, не прокатит(а он скорее всего не прокатит), подумаем, че еще может быть.


 
grisme ©   (2006-07-18 19:14) [59]

@!!ex ©   (18.07.06 19:08) [55]

Проблема у него всего лишь в том, что включена/выключена принудительно синхронизация..:) Выключить/включить ее программно невозможно, если только драйвер не надрессирован на "интимные" отношения(чай-кофе-потанцуем :0) с внешними приложениями, но это не гарантировано и не на всех дровах может быть такая багофича...Единственная альтернатива - это либо жевать бублики(читай смириться), либо писать "нечто", что напрямую будет работать с видеокартой, обходя драйвер


 
@!!ex ©   (2006-07-18 19:15) [60]

grisme ©
Проблема у него в том, что функция не грузиться из dll"ки(на это указывает нулевой указатель). А это ну никак не может зависить от настроек драйвера.


 
Зм1й ©   (2006-07-18 19:21) [61]


> @!!ex ©   (18.07.06 19:13) [58]

Не покатило.
Завтра надо подумать, но сегодня со всеми прощаюсь, т. к. надо готовиться к долбаным экзаменам :(


 
grisme ©   (2006-07-18 19:23) [62]

А может просто расширение OpenGL самой картой не поддерживается?


 
@!!ex ©   (2006-07-18 19:24) [63]

Ни пуха.
У меня тоже зватра экзамен. :)Правда экзамен по информатике. Че к нему готовиться? :)


 
@!!ex ©   (2006-07-18 19:26) [64]

grisme ©
Возможно, конечно. Но ИМХо мало вероятно.... ХОтя кто знает.

Зм1й,
проверь поддержку этого расширения.


 
KreeS ©   (2006-07-18 20:01) [65]

Может дело в дровах?


 
@!!ex ©   (2006-07-18 20:16) [66]

KreeS ©
Фича то в том, что функция с указателем не ассоциируеться.
Такое ощущение, что ее вообще нету в dll"ке....


 
grisme ©   (2006-07-18 20:17) [67]

Такое ощущение, что ее вообще нету в dll"ке....

Дык кудаж она делась-то?(:


 
Cash ©   (2006-07-18 20:24) [68]

...Можно с таймером влезти? :)
На счет GetTickCount, это бяка, я таймер сделал двояким, с одной стороны
на этом GetTickCount-е, а с другой -- на качественном таймере.
(Плюс, у меня еще проверяется поддержка Intel RDTSC, и если да, то
считается через тактовую частоту)

Дак вот, про качественный таймер:
WINAPI bool QueryPerformanceFrequency(int64);
Эта штука даст возможную частоту обновления таймера, и даст знать
возможен ли таймер вобще.

bool QueryPerformanceCounter(int64)
Эта штука даст показание качественного счетчика, и тоже даст понять
о возможности счета.

А про VSYNC -- там детонаторы стоят или ForceWare?
И, это, в оконном или полноэкранном режиме прога работает?


 
Зм1й ©   (2006-07-18 21:57) [69]

Пожалуй, пока хватит готовиться :) (ещё целых три дня)

> @!!ex ©
> У меня тоже зватра экзамен

Удачи :)

> проверь поддержку этого расширения.

Как проверить?

> Такое ощущение, что ее вообще нету в dll"ке....

Ну вот если я например пишу

function wglSwapIntervalEXT  (Interval: Integer): ByteBool; stdcall; external OpenGl32;
wglSwapIntervalEXT (0);


то точка входа в процедуру не найдена...


> в оконном или полноэкранном режиме прога работает?

в оконном


 
Cash ©   (2006-07-18 22:53) [70]

> в оконном

Ах, ты, блин, онаж в оконном то не должна вааще реагировать! Этож только
в полноэкранном режиме должно работать!!!


 
MeF Dei Corvi ©   (2006-07-18 23:02) [71]


> Ну вот если я например пишу

А ты пиши

var wglSwapIntervalEXT: function(interval: TGLint): Boolean; stdcall;
...
wglSwapIntervalEXT := wglGetProcAddress("wglSwapIntervalEXT");


> Этож тольков полноэкранном режиме должно работать!!!

А что такое полноэкранный режим? По сути это же то же окошко, просто на весь экран? :)


 
grisme ©   (2006-07-18 23:36) [72]

Ну вот если я например пишу

function wglSwapIntervalEXT  (Interval: Integer): ByteBool; stdcall; external OpenGl32;
wglSwapIntervalEXT (0);


Не надо так писать(даже например).(: потому что эта функция входит в расширение OpenGL) и в библиотеке ее нет.) Если ты внимательно читал хэлп по ф-ии wglGetProcAddress, то не шайтанил бы так..:)

Cash ©   (18.07.06 22:53) [70]
Бред, доказательства в студию...:)


 
@!!ex ©   (2006-07-19 12:26) [73]

>>Ах, ты, блин, онаж в оконном то не должна вааще реагировать! Этож только в полноэкранном режиме должно работать!!!

Почему? Не вижу причин. Что мешает синхронизить отрисовку окна? Это раз.

В OpenGL, на скока я знаю, в отличие от DX нет отличия между FullScreen и Window.


 
Зм1й ©   (2006-07-19 12:51) [74]


> Ах, ты, блин, онаж в оконном то не должна вааще реагировать!
>  Этож только
> в полноэкранном режиме должно работать!!!

Причём тут это? Функция не выполняется, она вообще не грузится из библиотеки...

> @!!ex ©

А как проверить поддержку расширения? :)


 
@!!ex ©   (2006-07-19 13:50) [75]

Зм1й ©
StrPas (PChar(glGetString(GL_EXTENSIONS)))
Результат - строка со всеми поддерживаемыми расширениями.

Нужное, насколько я помню называеться:
WGL_EXT_swap_control


 
Зм1й ©   (2006-07-19 13:55) [76]

Возвращает пустую строку...


 
@!!ex ©   (2006-07-19 13:58) [77]

Я надеюсь, ты его всунул после инициализации рендеринг контекста?
Это такая же GL функция, как, например,  glClear. И без контекста работать не будет.


 
Зм1й ©   (2006-07-19 14:03) [78]

Ступил, бывает :)
А расширение-то есть


 
ancara ©   (2006-07-19 14:05) [79]

попробуй сделать свой rendering context текущим,
wglMakeCurrent(..., ...);
а затем вызови wglGetProcAdress


 
@!!ex ©   (2006-07-19 14:05) [80]

>>А расширение-то есть

Ну собственно я так и думал.

Потому что даже если бы расширения не было бы, функция должна была бы загружаться. Просто возвращала бы Fail и все....

Выложи весь код своего юнита. С Uses и т.д.


 
Зм1й ©   (2006-07-19 14:27) [81]


> ancara ©   (19.07.06 14:05) [79]
> попробуй сделать свой rendering context текущим,
> wglMakeCurrent(..., ...);
> а затем вызови wglGetProcAdress

Эврика! Спасибо большое, теперь всё работает! Кстати интересно то, что даже при установке пункта "вертикальная синхронизация" в настройках в значение Вкл. функция всё равно действует.

Но теперь возник ещё один вопрос :)
Вот говорят, что GetTickCount даёт неточные значения. А как тогда получить точные?


 
@!!ex ©   (2006-07-19 15:06) [82]

>>Эврика! Спасибо большое, теперь всё работает! Кстати интересно то, что даже при установке пункта "вертикальная синхронизация" в настройках в значение Вкл. функция всё равно действует.

А ларчик просто открывался. :) Бывает.....

>>Но теперь возник ещё один вопрос :)
Вот говорят, что GetTickCount даёт неточные значения. А как тогда получить точные?

А оно тебе надо? Писал уже кучу проектов, не чувствую какой бы то ни было напряг от использования GetTickCount. Кста, погрешность у него всего 16мс.


 
Зм1й ©   (2006-07-19 15:36) [83]


> погрешность у него всего 16мс.

Ну тогда мне хватит :)
Всем спасибо за помощь.


 
a22 ©   (2006-07-19 18:23) [84]

лучше QueryPerfomanceCounter(). посмотри в MSDN


 
@!!ex ©   (2006-07-19 18:26) [85]

>>лучше QueryPerfomanceCounter().

Чем лучше? Точнее.
Но требует гемора при использовании.
Плюс не всегда поддерживаеться.
А смысл? Нафиг те нано секи ловить?



Страницы: 1 2 3 вся ветка

Форум: "Игры";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.67 MB
Время: 0.049 c
15-1178804743
Manic Mechanic
2007-05-10 17:45
2007.06.10
СТРИМ


2-1179258010
Gaara_of_the_Desert
2007-05-15 23:40
2007.06.10
Перевод картинки в стринг и обратно


2-1179801041
ALEX][ANDR
2007-05-22 06:30
2007.06.10
ТАЙМЕР


15-1179006731
Бывший_ТСтас
2007-05-13 01:52
2007.06.10
Как восстановить пароль к форуму?


2-1179681220
flaxe
2007-05-20 21:13
2007.06.10
Изменять свойства объектов других приложений





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский