Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Загрузка процессора [Windows]


Страницы:   1 2 3

DillerXX ©   (2007-01-10 21:24:00) 

Пишу тут скриптсейвер. Если делать основной цикл без слипов, то картинка движется правно, всё хорошо. Но, загрузка проца 100%, это как-то не этично, да и вообще, делают же люди по-нормальному. В любых играх, например ElastoMania, в меню загрузка проца маленькая, хотя шарики там бегают. Если поставить хоть Sleep(1), загрузка уменьшается до 0%, но появляются дёрганья, слишком мало управления получает поток :( Как этого можно избежать? Изменение приоритета нити(потока) процесса никак не помогает...


XProger   (2007-01-16 14:06:00) [1]

100% в диспетчере задач ещё не значит что процессор выполняет "полезную работу". У меня в проекте нагрузка 100% и при этом в цикле рендера я без ущерба для FPS могу запускать циклы порядка 10 000 000 сложений...


Vga   (2007-01-16 10:07:00) [2]

> [40] DillerXX ©   (13.01.07 12:40)
> Я не понял, тоесть 1 обновление экрана за секунду?! Ужас...
> Как это вообще может быть...

Меньше даже

> Фигасе, как это как может быть... Там же не слипов, должна
> быть загрузка 100%. Как у тебя с движением в обоих программах?

В 65fps - нормуль, в 300fps - как может выглядеть движение при 1FPS?
Видимо в 300fps ты что-то накосячил.

> [43] ors_archangel ©   (14.01.07 20:46)

А сколько он в том же меню выдает FPS? Вот тут и оптимизации... Игры такие все практически грузят проц на 100%.


grisme   (2007-01-16 04:32:00) [3]

да я имел ввиду, что в Quake этот нагруз на CPU не особо заметен - точнее совсем не заметен :] Я понимаю, что нужно придерживаться точного определения ScreenSaver(то, что должен кушать мало ресурсов), но нагрузка в 100%, если сделать ее незаметной - не столь существенна.


ors_archangel   (2007-01-14 20:46:00) [4]

grisme[42]
Тогда уж протокол подари :) Ладно, извини меня, грешного, пожалуйста. Но насчёт оптимизации не понял, что ты имел в виду. Движки id действительно быстрые, но если меню грузит 100%, то тут какие оптимизации имеются в виду?


grisme   (2007-01-14 20:04:00) [5]

ors_archangel ©   (10.01.07 22:08) [10]

аха, ты думаешь ты настолько умнее ребят из ID, что они совсем упустили из рук оптимизацию? ххххех..
точно так же, отчего-то не видел чтобы "давали http"...сервер тебе подарить? так эта, к хостерам, к хостерам...

ЗЫ. ответ на буквоедство


_no_name_   (2007-01-14 04:06:00) [6]

int Sys_Milliseconds (void)
{
int   curtime;
static int base;
static bool initialized = false;

if (!initialized)
{ // let base retain 16 bits of effectively random data
 base = timeGetTime() & 0xffff0000;
 initialized = true;
}
curtime = timeGetTime() - base;

return curtime;
}

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
   MSG  msg;
int  time, oldtime, newtime;

oldtime  = Sys_Milliseconds ();

while (true)
{
 while (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))
 {
  if (!GetMessage (&msg, NULL, 0, 0))
   Sys_Done ();

  TranslateMessage (&msg);
     DispatchMessage (&msg);
 }

 do
 {
  newtime = Sys_Milliseconds ();
  time = newtime - oldtime;
 } while (time < 1);
 
 UpDateInputs (time);
 UpDateScreen (time);

 oldtime = newtime;
}
}


DillerXX   (2007-01-13 12:40:00) [7]


> circles_fps300 - FPS менее единицы на взгляд...


> Версия с 300 фпс благополучно отрисовывала 1 кадр в секунду(по
> показаниям Fraps'a).

Я не понял, тоесть 1 обновление экрана за секунду?! Ужас... Как это вообще может быть...

> Sleep(0) попробуйте еще

Не помогает.

> я что-то не понял, CIRCLES_fps300.exe дает нагрузку от нуля
> до двух процентов на проц

Фигасе, как это как может быть... Там же не слипов, должна быть загрузка 100%. Как у тебя с движением в обоих программах?


Rouse_   (2007-01-13 12:02:00) [8]

я что-то не понял, CIRCLES_fps300.exe дает нагрузку от нуля до двух процентов на проц, CIRCLES_fps65.exe от нуля до единицы. Что за проблему вы обсуждаете?


Piroxyline   (2007-01-13 11:53:00) [9]

Sleep(0) попробуйте еще


Vga   (2007-01-13 11:27:00) [10]

> [36] @!!ex ©   (13.01.07 09:42)

У меня такие же сомнения... Зачем сделал именно так уже и сам не помню... Вроде какая-то причина была.


@!!ex   (2007-01-13 09:42:00) [11]

А зафиг ее каждый кадр трогать?
Вроде достаточно один раз установиьт в начале работы приложения.


Vga   (2007-01-13 04:03:00) [12]

> [33] DillerXX ©   (12.01.07 17:11)

circles_fps65 - хорошо работает, плавное движение
circles_fps300 - FPS менее единицы на взгляд...
65FPS - для плавного движения более чем достаточно, ТВ хватает 25FPS. Рывки наверняка из-за нестабильности временных интервалов между кадрами.
А по теме - используй вертикальную синхронизацию. В openGL она вполне управляема. Работает естественно только при двойной или более буферизации.
Сама вертикальная синхронизация у меня сделана так:

   if WGL_EXT_swap_control and (FVSync<>wglGetSwapIntervalEXT)
     then wglSwapIntervalEXT(FVSync);
   SwapBuffers(FDC);

Это в конце отрисовки. FVSync - целочисленная, при 1 вертикальная синхронизация включена, при 0 - выключена.


@!!ex   (2007-01-12 18:42:00) [13]

1) Запустил версию с 65 фпс. ИМХо все замечательно. Движение плавное, никаких дерганий не заметил.
варианта три:
а) со зрением проблемы(врядли, в своем проекте вроде даже дергание отдельных пикселей вижу)
б) проблемка в разнице оборудования.
в) автор гонит.

2) Версия с 300 фпс благополучно отрисовывала 1 кадр в секунду(по показаниям Fraps'a).

3) пересечение двух сфер - этож вроде банальность, нафиг курс векторной алгебры? Если расстояние между центрами меньше суммы радиусов - значит коллизия есть, сила тож вродь не сложно считается...

4) То что сферы слепялются судя по тому что я вижу - это баг?
Кстати, через несколько секунд после сцепления они подъехали к краю сцены, большая сфера остановилась, а меньшая начала дергаться между стеной и большей сферой....

5) Это вообще что подразумевается?


DillerXX   (2007-01-12 17:11:00) [14]

Вы посмотрите файлы, невооружённым глазом с двух метров видно что 65 фпс слишком мало.


Da Stranger   (2007-01-12 11:41:00) [15]

Проверку столкновений, движение и прочую физику можно делать чаще чем текущий FPS. То есть выбираешь минимальный нужный FPS, обычно это 30, можно 60, помню мне как-то нужна была точность в 1000 FPS для расчёта FPS-независимой инерции, а дальше делаешь так (в процедуре прорисовке кадра):

procedure Proceed(DeltaTime: Single);
const
 MIN_DELTA = 0.1; //10 FPS
begin
 while DeltaTime > MIN_DELTA do
 begin
   DoMove(MIN_DELTA);
   DoCollisionCheck(..);
   DoSmthElse(MIN_DELTA);
   DeltaTime := DeltaTime - MIN_DELTA;
 end;

 DoMove(DeltaTime);
 DoCollisionCheck(..);
 DoSmthElse(DeltaTime);
end;


ors_archangel   (2007-01-12 07:32:00) [16]


> >  вот это для меня не очевидно, почему не удивительно?
> Слип > позволяет делать лишь 65 фпс, что недостаточно. Дерганий
> > не будет либо при синхронизации с монитором, либо при
> уменьшении > скорости движения. Но последнее неприятно.
> А первое так > вообще даже не знаю, на сколько я понял это
> cв-во драйверов > конкретной видюхи, а значит ненастраиваемо
> для меня.
> Чтож у тебя за задача, что 65 фпс не достаточно?

Присоединяюсь - 30 fps всегда хватало с головой


DillerXX   (2007-01-11 23:29:00) [17]

Забыл добавить :) Особая гордость - расчёт столкновений делал полностью сам, не пользуясь формулой которая валяется на каждом углу (понять её так и не смог, поэтому расчитал сам). Курс векторной алгебры не прошёл напрасно ;)


DillerXX   (2007-01-11 23:23:00) [18]


> Как привязку ко времени делать - в курсе?

Да потом уже догадался что надо и как, так что вкурсе. Проблема будет при проверке коллизий, т.к. при большом фпсе фактическое передвижение объектов за квант времени будет очень мало, а значит столкновение может просчитаться ещё раз... Я тебе даже могу ехе's скинуть с 65 фпс и 300 фпс. Заметна разница будет.
http://dillerator.chat.ru/circles_fps_diff.rar скачивать либо качалкой либо FireFox'om или Oper'oй, а то IE что-то глючит на это серве. Там будет вестись output.txt файл с фпс за каждую секунду. Если кому интересно можете посмотреть. Потом добавлю разные красивости, расчёт трения-вращения, текстуру с альфа-каналом, фон, может быть звуки ну и так далее.. очки двойных столкновений, бонусный шарик )) или управление мышкой.
Модель пока начальная, погоняйте примерно 2-3 минуты файл с 300 фпс, там 2 шарика в конце сцепятся и будут вальс танцевать... :)) Кстати прикольно, сотая доля начального угла полёта одного шарика в корне поменяет всю дальнейшую судьбу системы. Терия Хаоса прям...


@!!ex   (2007-01-11 22:54:00) [19]


> Нету привязки. Я только потом про неё подумал, т.к. писать
> графические программы начал только позавчера. И об элементарных
> правилах этого дела не знал. Да и сейчас собственно не знаю,
>  но изучаю :) Рабочая модель уже готова. Нужно исправить
> в ней выявившиеся деффекты, и затем перевести на динамический
> фпс (с привязкой ко времени естественно).

Как привязку ко времени делать - в курсе?


>  вот это для меня не очевидно, почему не удивительно? Слип
> позволяет делать лишь 65 фпс, что недостаточно. Дерганий
> не будет либо при синхронизации с монитором, либо при уменьшении
> скорости движения. Но последнее неприятно. А первое так
> вообще даже не знаю, на сколько я понял это cв-во драйверов
> конкретной видюхи, а значит ненастраиваемо для меня.

Чтож у тебя за задача, что 65 фпс не достаточно? :))
Вспомни любую игру. Как она себя ведет при 30 кадрах в секунду?
Видно дискретность? Нифига.
Что за проекто делаеш? Хоть скин кинь.
Интересно ж.


DillerXX   (2007-01-11 22:21:00) [20]


> @!!ex

Нету привязки. Я только потом про неё подумал, т.к. писать графические программы начал только позавчера. И об элементарных правилах этого дела не знал. Да и сейчас собственно не знаю, но изучаю :) Рабочая модель уже готова. Нужно исправить в ней выявившиеся деффекты, и затем перевести на динамический фпс (с привязкой ко времени естественно).

> Не удивительно что при Слипе кадры дергаются...

А вот это для меня не очевидно, почему не удивительно? Слип позволяет делать лишь 65 фпс, что недостаточно. Дерганий не будет либо при синхронизации с монитором, либо при уменьшении скорости движения. Но последнее неприятно. А первое так вообще даже не знаю, на сколько я понял это cв-во драйверов конкретной видюхи, а значит ненастраиваемо для меня.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо