Войти
ПроектыФорумУтилиты

Движок 'Сухарь Ванильный' (2 стр)

Страницы: 1 2 3 462 Следующая »
#15
14:56, 14 ноя. 2012

sb3d
> А попиксельного контроля при выводе через ускоритель нет. Сейчас я могу при
> выводе изменить палитру, проходить алгоритмом повышения чёткости, накладывать
> освещение, шум, лучи света, ещё кучу эффектов. А ускоритель как спрайт
> растянет, так уж и растянет. Пример добавлю: настройка масштабирования спрайта
> в духе "бикубическое", "линейное", "без сглаживания".
Тормозные софтрендеры не нужны.
Хорошие софтрендеры нужны, но их мало кто умеет делать.
Так что лучше уж hw.


#16
15:38, 14 ноя. 2012

я делаю Sleep(1) в бесконечном цикле, и потом через timeGetTime() смотрю - следует рисовать новый кадр или дальше спать.
фпс получается ограниченным сверху и на самом деле точно не достигается.
при ограничении 60, скажем, получается 58,83 (проблема чисто в целом числе миллисекунд. 1000/60 = 16.666 мс; округляем до 17; 1000/17 = 58.8235).
это работает весьма стабильно и меня такая погрешность устраивает.
процессор не грузит (по сути это 1000 раз проверить рисовать или нет и только 60 раз нарисовать).

#17
17:50, 14 ноя. 2012

CStalker
А проверял как работает со Sleep(0) и без него?
Что-то мне подсказывает что Sleep(0) разгрузит процессор, но в замен мы получим тормоза из-за не стабильного фпс, хотя конечно это все диванные теории.

#18
19:10, 14 ноя. 2012

R.I.P.
> я делаю Sleep(1) в бесконечном цикле, и потом через timeGetTime() смотрю -
> следует рисовать новый кадр или дальше спать.
> фпс получается ограниченным сверху и на самом деле точно не достигается.
> при ограничении 60, скажем, получается 58,83 (проблема чисто в целом числе
> миллисекунд. 1000/60 = 16.666 мс; округляем до 17; 1000/17 = 58.8235).
> это работает весьма стабильно и меня такая погрешность устраивает.
> процессор не грузит (по сути это 1000 раз проверить рисовать или нет и только
> 60 раз нарисовать).
Хороший вариант. А если Sleep(0), то будет ещё лучше.

#19
19:16, 14 ноя. 2012

R.I.P.
Sleep(1) выполняется 16.666 мс, чтобы было меньше, нужно использовать TimeBeginPeriod(), но тут бывают проблемы, конфликты с другими программами.
CStalker
Sleep(0) в цикле, судя по диспетчеру задач, разгружает процессор, но я встречал ситуации, когда при запуске пустого цикла с одной командой Sleep(0) БП явно начинал гудеть и от чипсета на мамке было слышно свист.

#20
19:31, 14 ноя. 2012

sb3d
> Ну, а Sleep не отдаёт управление точно в срок, а отдаёт всегда позже. Как результат - неровное движение в игре, подёргивания.
Блин, у тебя такие игры крутые вышли, что даже неловко такие вопросы слышать.
Откуда неровному движению возникнуть? Есть функция Update(), к примеру, в которую параметром передаём dt, где dt - кол-во миллисекунд, прошедших после предыдущего вызова Update(). И никаких 1/120 не должно быть в рассуждениях в принципе. Ну разве прикинуть что-нибудь приблизительно.

#21
20:42, 14 ноя. 2012

nes
> А проверял как работает со Sleep(0) и без него?
без Sleep(0) проц грузит на 100%, с ним - на 5% примерно (игрушка простенькая). Фпс всегда 60 или выше в зависимости от включения v-sync. Хотя, возможно, на слабых компьютерах или сильно перегруженных сценах Sleep(0) будет тормозить игру, надо будет проверить.

#22
20:53, 14 ноя. 2012

Mikle
> когда при запуске пустого цикла с одной командой Sleep(0) БП явно начинал гудеть
в XP при вызове Sleep(0), если не было запущено других потоков с тем же приоритетом или выше, управление возвращалось немедленно - таким образом по сути получался пустой цикл и 100% загрузка проца. В Vista и выше это исправили.

#23
22:32, 14 ноя. 2012

Mikle
> нужно использовать TimeBeginPeriod()
хм... интересно. щас загуглил что это и зачем
никогда это не использовал, всегда работало как надо
рывков, проседаний фпс не наблюдал
может быть сторонние проги автоматически ставят 1
вот пишут, что qip ставит, например) и не парится по поводу что это кому то может навредить
надо будет потом разбораться

#24
23:15, 14 ноя. 2012

CStalker
> в XP при вызове Sleep(0), если не было запущено других потоков с тем же
> приоритетом или выше, управление возвращалось немедленно - таким образом по
> сути получался пустой цикл и 100% загрузка проца. В Vista и выше это исправили.

Да ну? Не чего не исправили. Да и не баг это, имхо, чтобы его исправлять.

while(true)
    {
    Sleep(0);
    }

Ядро загружает полностью. Win7, MVSC++11

#25
23:48, 14 ноя. 2012

GeniusIsme
проверил у себя, действительно нагружает проц впустую. Тогда лучше использовать Sleep(1)

#26
0:21, 15 ноя. 2012

sb3d, скажи, а ты движок переписываешь просто ради удовольствия, или ты на нём игры собираешься делать? просто может тебе стоит изучить существующий опыт по этому вопросу? И может быть тебе стоит более чётко сформулировать какие конфигурации машин ты собираешься поддерживать? потому что совсем уж древние машины твой софтрендер не потянут. Насчёт шейдеров, видеокарт: ты можешь поузнавать подробнее, как дела обстоят. Какие стандарты сейчас широко поддерживаются, какие нет. А то мне кажется ты проверил на полторах компьютерах второпях, и потом экстраполируешь это на весь мир

Все как-то используют шейдеры и видеокарты и живые. Неужели тебе они так уж руки выкручивают своими недостатками? Может тебе надо просто изучить существующие технологии, и ты сможешь с ними работать с такой же лёгкостью, как со своим софтрендером?

#27
0:48, 15 ноя. 2012

sb3d
> MsgWaitForMultipleObjects
преимущество этой функции над Sleep только одно, она позволяет обрабатывать сообщения по их поступлению а не ждать пока закончится Sleep
а точность у таймеров и sleep примерно одинаковая,

#28
1:00, 15 ноя. 2012

R.I.P.
> я делаю Sleep(1) в бесконечном цикле, и потом через timeGetTime() смотрю -
> следует рисовать новый кадр или дальше спать.
это все конечно весело и хорошо, тока я отказался от такого подхода, потому что он ну ни чем не будет отличаться от варианта с таймером
а суть варианта в том что бы засекать время с начала кадра и засыпать на время оставшееся до нужной нам частоты
и проблема как бы в том что в ручную ты делаешь практически то же самое, но ОС это будет делать оптимальней + ты наверняка пока не проверяешь поступление сообщений в очередь, а почему бы этого не делать? ведь получается они накапливаются, и после того как ты выходишь из цикла приходится тратить процессорное время на их обработку, хотя можно было тоже самое сделать в то время пока процесс спал

#29
1:24, 15 ноя. 2012

Тваю медь.... Какой Sleep()?... игроделы...

Страницы: 1 2 3 462 Следующая »
ПроектыФорумУтилиты

Тема в архиве.