Форум: "Игры";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизDD and Color Найти похожие ветки
← →
Evgeniy_K (2004-07-30 20:39) [0]Как вы считаете какой оптимальней юзать цвет в DD проекте?
Кое-кто настоятельно рекомендует 8-бит. Где-то написано, что можно и 16-бит.
Попробовал 32-бит. Начинает тормозить при создании проекта средней сложности.
А что скажете вы?
← →
cyborg © (2004-07-30 21:00) [1]Моя считает до 16 - адын дива тиры читыры ...
← →
parovoZZ © (2004-07-30 21:39) [2]В принципе можно использовать 256 цветов, но всё-же 16-битный цвет выглядит куда более красочнее. 32 - это, имхо, перебор для DD.
← →
Evgeniy_K (2004-07-30 22:04) [3]А 16-битовый какой сложности проект выдержит?
← →
cyborg © (2004-07-30 22:09) [4]Любой.
← →
Evgeniy_K (2004-07-30 22:16) [5]Сколько в среднем объектов?
← →
cyborg © (2004-07-30 22:29) [6]смотря на какой видеокарте и процессоре, у меня например 2700 спрайтов размером 20х20 ~40 кадров в секунду выводится.
GF FX 5200 + Duron 800 + PC133 + XP
в 98-ом в 1,5-2 раза быстрее.
← →
cyborg © (2004-07-30 22:30) [7]Это если спрайты в видеопамяти.
← →
Evgeniy_K (2004-07-31 12:04) [8]А кто-нибудь когда-нибдь делал игру с поддержкой 32-бит под DD? Какие скорости были и сколько эффектов было заложено?
← →
Sapersky (2004-07-31 14:08) [9]Кое-кто настоятельно рекомендует 8-бит
8 бит со свистом пойдут и в софтвере.
16, 32 - вообще разница в скорости есть, на картах с относительно медленной памятью (самых распространённых) может быть в два раза. Хотя что может тормозить в проекте DD (и как на экран помещается 2700 спрайтов) - непонятно. Если это частицы (particles) - см. Direct3D, большое кол-во одинаковых спрайтов он выводит быстрее, не говоря уже о возможных спецэффектах.
← →
Evgeniy_K (2004-07-31 14:23) [10]Я говорю исключительно про DD. Если поставить поддержку 32-битных цветов, но на GeF4 FPS падает с 300 до 30.
И еще неясно почему работа идет быстрее, когда поверхность в видеопамяти, а не в системной. Кто-то мне говорил, что видео медленнее, чем системная, а на практике выходит наоборот. При том, что на разных картах зависимость сохраняется.
Смотрел результаты тестов winbench и 3dmark в инете, так там примерно такая же картина, но все-таки падение в 5 раз, а не в 10.
Тут с человеком поспорили, он утверждает, что 32-бит должно летать в DD, потому что у него летает в GDI. А DD в 7 раз производительнее GDI.
Я в тупике...
← →
Sapersky (2004-07-31 19:46) [11]Если поставить поддержку 32-битных цветов, но на GeF4 FPS падает с 300 до 30.
Странно. Может, какая-то поверхность создаётся другого (16-битного, например) формата, и из-за конвертирования скорость так сильно падает. На то, что видеопамяти не хватает - не похоже, её у GeF4 навалом, наверное.
У меня на GF2MX 32 бит медленее примерно в 2 раза - как и полагается.
И еще неясно почему работа идет быстрее, когда поверхность в видеопамяти, а не в системной. Кто-то мне говорил, что видео медленнее, чем системная, а на практике выходит наоборот.
Возможно, этот кто-то имел в виду - блокировка (Lock) быстрее. Это да. Но блиттинг всегда быстрее с видео - сам подумай, если бы видеопамять была медленнее, зачем она тогда? Сравни частоты. Расстояние в см от чипа видеокарты до той и другой памяти :)
А DD в 7 раз производительнее GDI.
Это зависит от случая... Вполне допускаю и такой, при котором DD окажется медленнее - чем дядя Билли не шутит.
← →
cyborg © (2004-07-31 20:25) [12]
> как на экран помещается 2700 спрайтов
Посчитай - узнаешь.
> [10] Evgeniy_K (31.07.04 14:23)
В видеопамяти будет быстрее выводиться. Грузи всё в видео, будет быстро, а твои создания 32 битовых поверхностей в оперативке тормозят.
← →
Evgeniy_K (2004-08-01 12:19) [13]Странно. Может, какая-то поверхность создаётся другого (16-битного, например) формата, и из-за конвертирования скорость так сильно падает.
Вот я тоже удивляюсь. Поверхности все 32. Но я использую доступ к пикселям на прямую - вот из-за этого и падает, но почему так сильно. Стоит мне поменять PWORD на PDWORD, так сразу все начинает сильно тормозить.
У меня на GF2MX 32 бит медленее примерно в 2 раза - как и полагается.
Да, так и должно быть,: 2-3 раза, а у меня выходит 6-10 раз :-?
У кого есть какие мысли?
← →
Sapersky (2004-08-01 14:09) [14]Но я использую доступ к пикселям на прямую - вот из-за этого и падает, но почему так сильно.
Что, ВСЕ выводятся непосредственным доступом? Надо сказать, что DD предназначен в первую очередь для блиттинга, и если в обязательном порядке нужно рисовать попиксельно, возможно, лучше и софтвер (или некая смесь, как у Miek"а в последней версии SpriteUtils - всё рисуется софтверно на поверхность в системной памяти, потом она блиттится на экран).
И что именно делается этим непосредственным доступом? Может, всё-таки можно задействовать D3D, а то такие мощности (GeF4) - и простаивают, по сути.
По DD могу порекомендовать только убрать DDLOCK_NOSYSLOCK, если он используется. Хотя принципиально это процесс не ускорит.
← →
Evgeniy_K (2004-08-01 15:57) [15]Попиксельно рисуется всего-то несколько эффектов, где-то 10000 пикселей/кадр - максимум, в наихудшем случае. Если убирать эти эффекты, то все равно тормозит прилично, но работает где-то в 2 раза побыстрее, чем с ними.
← →
Sapersky (2004-08-01 19:18) [16]То, что без эффектов (блиттингом) - создавать в видео. То, что с эффектами - в системной, плюс ещё можно фрагмент бэкбуфера при непосредственном доступе загонять в системную, применять эффект, и обратно в видео ( на Королевстве Дельфи была статья - http://www.delphikingdom.ru/asp/viewitem.asp?UrlItem=/helloworld/directx4.htm )
← →
Evgeniy_K (2004-08-01 20:05) [17]почитаем-с...
← →
parovoZZ © (2004-08-01 20:12) [18]А вот в фотошопе с какой глубиной лучше сохранять бмп-шку?
← →
Evgeniy_K (2004-08-02 11:16) [19]если важен размер, то 16, качество - 32
← →
NikeOLD (2004-08-02 11:49) [20]А у тебя спрайты на одной поверхности собраны или нет? Если на разных, то вот тебе и падение в производительности. У меня 600 спрайтов (примерно твоих размеров) в 32 даже на старенькой Риве лихо тянут. При этом иногда вращается битмап размером 200 на 200 в ручном режиме (FPS конечно падает, но не смертельно).
1. Сделай свои спрайты на одной-двух поверхностях.
2. Распредели так, чтобы малоиспользуемые были в системной памяти.
3. Иногда оправданне держать в системной памяти задний буфер, а не спрайты. Надо следить какая поверхность где создается. ОЧень может быть, что в твоем случае все спрайты в системной памяти сидят.
← →
Sapersky (2004-08-02 12:44) [21]почитаем-с...
На самом деле, автор там местами явно перегибает, так что на 100% верить не рекомендую (что поверхность при локе полностью копируется в системную - сомнительно, скорее, копируется только то, что нужно, т.к. нет разницы по скорости, блокировать нужный кусок или всю; ну и ещё кое-что, см. также мои комментарии к статье).
И вывод, кстати, тоже хорош - непосредственный доступ работает с приемлемой скоростью только с новыми картами (уровня GeForce). Которые рассматриваемый в статье предмет (блендинг) могут делать аппаратно :)
Впрочем, бывалым DD-шникам, это, кажется, глубоко фиолетово - им хоть GeForceFX дай - будут блокировать и блендить попиксельно.
Ну всё-таки намекну ещё раз: D3D7 может работать вместе с DD, так что не придётся выбрасывать существующий код и переписывать всё заново. Пример могу дать.
А у тебя спрайты на одной поверхности собраны или нет?
Точно. А я и забыл. У Краснова был пример, где показана разница - в скорости инициализации, в основном, но и вывода тоже.
← →
NikeOLD (2004-08-02 13:01) [22]
> Впрочем, бывалым DD-шникам, это, кажется, глубоко фиолетово
> - им хоть GeForceFX дай - будут блокировать и блендить попиксельно.
Естественно попиксельно. Ну если нету в DD соответсвующих механизмов. И не надо забывать в какие годы царствовал DD, когда никаких GeForce и в зачатках-то не существовало, а игры летали на машинах ниже 300 pentium. Вспомним-ка Warcraft, Diablo...
Один выход - следить, что в какой памяти сидит и ответить на вопрос, а должно ли оно сидеть там или где-то еще?
← →
Sapersky (2004-08-02 13:37) [23]И не надо забывать в какие годы царствовал DD
Да не забываю я. И этот же аргумент привожу в защиту нежно любимого блиттера, если кто-то на него наезжает :)
Но сейчас-то годы уже немного не те? Какие карты у наших DD-шников? GeForce4, GeForceFX... Да и взять рядового (офисного) пользователя - интегрированные карты на интеловских чипсетах тоже вполне себе ускорители (во всяком случае, для D3D-2D, или как тут его обозвали, хватит).
← →
Evgeniy_K (2004-08-03 11:15) [24]Все поверхности у меня в видеопамяти. Пробовал часть загонять в системную, но это только приводит к снижению FPS.
Не совсем ясно какая разница когда сспрайты на одной или n-поверхностях? Я ведь все-равно буду делать блиттинг n раз. Поясните, если не затруднит.
← →
Evgeniy_K (2004-08-03 11:15) [25]Все поверхности у меня в видеопамяти. Пробовал часть загонять в системную, но это только приводит к снижению FPS.
Не совсем ясно какая разница когда сспрайты на одной или n-поверхностях? Я ведь все-равно буду делать блиттинг n раз. Поясните, если не затруднит.
← →
NikeOLD (2004-08-03 15:20) [26]Проблема в быстродействии, скорее всего из-за слишком сильной раздробленности видеопамяти.
В книге Краснова есть хороший пример (стр.168-178), посвященный этому вопросу.
Создание множества поверхностей сильно затормозит процесс инициализации (создания поверхностей и заливки битмапов). Кроме того, в случае потери поверхности, тебе придется восстановить их все и залить битмапы снова. Это тоже займет очень много времени.
Если же все твои спрайты будут на одной поверхности, время инициализации и восстановления существенно сократится.
Однако не стоит забывать, что некотрые видеокарты не могут создавать поверхности, превышающие по размерам первичную.
Я думаю несложно объединить всю графику в один файл и заливать на одну поверхность. Координаты рисунков целесообразно хранить в этом же файле. А заодно и собственный формат.
← →
Evgeniy_K (2004-08-03 19:15) [27][26] Тоже вариант - графика в кучу.
Процесс инициализации пока идет нормально.
Поверхности создаются друг за другом. Мне не ясно как они могут быть раздроблены в видеопамяти. Имхо, они должны быть поочереди - лапшой.
← →
NikeOLD (2004-08-03 20:10) [28]Не будут они по очереди никогда. Дело в том, что происходит выравнивание памяти. Если делал Lock/Unlock, то должен знать, что твоя поверхность (с длиной строки, например, 640 пикселей) в видеопамяти редко будет 640. Как правило, она будет больше на величину, называемую pitch. Отсюда память на большое количество малых фрагментов расходуется неэкономно. Ее всегда требуется значительно больше.
← →
Evgeniy_K (2004-08-03 20:38) [29]Да, я это знаю. Да еще маленький вопросец, как выдрать из 24 битового цвета красную составляющую. Вот например зеленая:
Color shr 8
← →
cyborg © (2004-08-03 20:41) [30]Color shr 16
← →
Evgeniy_K (2004-08-03 22:19) [31]А синий?
← →
cyborg © (2004-08-04 07:28) [32]Ты ещё про альфу спроси :)
Color : Cardinal;
A:=Color shr 24;
R:=(Color and $00FF0000) shr 16;
G:=(Color and $0000FF00) shr 8;
B:=(Color and $000000FF);
Почитай чего нибудь по теме "как хранятся данные" и по работе с битами.
Что такое бит, байт, слово и двойное слово. Сейчас уже актуально и Int64.
← →
Evgeniy_K (2004-08-04 09:00) [33]=) Да знаю я все это, просто лишний раз убедиться хотел.
← →
Evgeniy_K (2004-08-04 09:07) [34]А нафига and? :)
← →
cyborg © (2004-08-04 09:11) [35]Судя по [34] Evgeniy_K (04.08.04 09:07) я сомневаюсь в [33] Evgeniy_K (04.08.04 09:00)
← →
Evgeniy_K (2004-08-04 17:18) [36]дык и без него работает... может это мой клон... :)
← →
Вась-Вась (2004-11-30 20:45) [37]>Почитай чего нибудь по теме "как хранятся данные" и по работе с >битами.
>Что такое бит, байт, слово и двойное слово. Сейчас уже >актуально и Int64.
А можно узнать, где на эту тему можно чего-нибудь почитать, т.к. я весь интернет перерыл, а ничего дельного не нашёл! Подскажите, а то я в этом деле мало чего соображаю, а это (отсутствие соображения) хотелось бы побыстрее исправить! Заранее спасибо за большое количество ссылок и названий книг!
← →
cyborg © (2004-11-30 21:16) [38]
> [37] Вась-Вась (30.11.04 20:45)
Книг я таких не видел.
Разряд = бит = вкл/выкл = единица/ноль
1 байт = 8 бит
слово (Word) = 2 байта = 16 бит
Двойное слово (DWord) = 4 байта = 32 бита
Int64 = 8 байт = 64 бита
1 байт = 8 разрядов (Вкл/Выкл) = 11111111
0 (число) = 00000000
1 (число) = 00000001
2 (число) = 00000010
3 (число) = 00000011
4 (число) = 00000100
и т.д.
Сложение разрядов производится аналогично десятичной системы (напр. в столбик) при переполнении (более 9 в десятичной системе или 1 в бинарной) переносим значение
1+1=2:
00000001 (1)
00000001 (1)
---------
00000010 (2)
2+1=3:
00000010 (2)
00000001 (1)
---------
00000011 (3)
3+1=4:
00000011 (3)
00000001 (1)
---------
00000100 (4)
Сдвиг это смещение битов влево или вправо
например сдвиг байта со значением 1 влево на один разряд
Byte:=1;
Byte:=Byte Shl 1;
00000001 Shl 1 = 00000010
Или например сдвиг влево на 7 разрядов
00000001 Shl 8 = 10000000
--------------------------------
Как это применяется, например нам надо из 24 битового цвета формата RGB888 сделать 16 битовое формата RGB565.
Сначала получаем отдельный байты значения цвета R G B, в формате RGB888 в битах это будет выглядеть так RRRRRRRRGGGGGGGGBBBBBBBB - 24 бита, первые 8 бит это значение красного цвета, следующие 8 бит значение зелёного цвета и последние 8 бит это значение синего цвета. Формат 16 битового цвета формата RGB565 хранится в двух байтах в виде RRRRRGGGGGGRRRRR - первые 5 бит значение красного цвета, следующие 6 бит значение зелёного цвета и последние 5 бит значение синего цвета.
Чтобы получить красный цвет из цвета формата RGB888 нам нужно сдвинуть 16 бит вправо - R:=RGB888 SHR 16;
Чтобы получить зелёный цвет, можно пойти двумя путями. Первый путь это сначала сдвинуть биты влево на 8 разрядов, затем сдвинуть вправо на 16 разрядов. Либо воспользоваться битовым сравнением а затем сдвинуть вправо на 8 бит. R:=(RGB888 and $00FF0000) shr 8;
В общем дальше расписывать не буду, лень мне :).
← →
cyborg © (2004-11-30 21:18) [39]
> Или например сдвиг влево на 7 разрядов
>
> 00000001 Shl 8 = 10000000
пардон, опечатался, тут семёрка :)
← →
cyborg © (2004-11-30 21:19) [40]Мда, и тут R:=(RGB888 and $00FF0000) shr 8; криво написал :)
R:=(RGB888 and $0000FF00) shr 8;
← →
Вась-Вась (2004-11-30 21:21) [41]Спасибо! Слава отечественным Мастерам Delphi!
Страницы: 1 2 вся ветка
Форум: "Игры";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.052 c