sb3d
На Athlon64 X2 4800+:
моя: 40 fps , 5 fps
твоя: 35 fps , 3 fps
Но у тебя ещё текст выводится, это может немного тормозить.
Mikle
> Вот моя ф-ция:
ММХ полезны, оказывается. =)
Я то на асме вставок давно не делаю, у меня всё на с++, вероятно, это и есть причина тормозов.
Спасибо, разберу твой код на досуге!
> У тебя вывод на экран через DD?
В окне, как в этом тесте - StretchDIBits, функция ГДИ.
sb3d:
а понял... да... у Mikle - получается по быстрей... я и правда - твой тест за его принял... похож очень)))... советую разные по виду - спрайты брать... на скорость не повлияет - а путаницы будет меньше....
напишите ваше разрешение окна...
Окно 800*600, 1000 (или 10000) спрайтов 64*64,
http://www.nemehanika.ru/cg/download/test.zip
и правда... что-то, куда-то упирается...
несколько побыстрее чем у sb3d и чуть медленнее чем у Mikle, однако если спрайтов 100 у меня быстрее получается почти в полтора раза... 290 против 200... на Athlon 64... интересно как оно себя на Core 2 Duo поведет... компилятор у меня обычный, потому что интеловский атлонов - не любит...
альфа конечно - значительно влияет, например режимы сложения, вычитания - раза в полтора дешевле обходятся (предполагается, что там нет альфы - ее черный цвет олицетворяет)...
теперь у меня слегка подъезжает крыша по поводу того, что фейково-ресайзовые работают так быстро... даже разбираться боязно... что бы ненароком - не вспугнуть энто чудо)))...
забавно... теперь вижу шо к Интелю у меня код - не дружественный... 21 против 32 у Mikle
Чем компиляешь?... и через что блиттинг делаешь?
igo
> Чем компиляешь?... и через что блиттинг делаешь?
C++ 2008 Express. А не всё ли равно? Ведь там всё равно асм, я раньше пользовался PowerBasic - скорость была та же.
igo
> однако если спрайтов 100 у меня быстрее получается почти в полтора раза...
Что-то другое, вместо SetDIBitsToDevice? DD?
а... ну у меня тоже самое... странно что на Атлоне - у меня примерно тоже что и у тебя... а на Core Duo ноутном - значительная просадка...
да... все правильно, от компиля не должно так зависеть... у меня там тоже почти чистый асм... усе равно очень странно... пришли пустой проект, что б настройки глянуть... кроме как на разницу компиляции - пока и подумать не на что... или у тебя алгоритмы к интелевскому контролеру памяти - более добрые...
блитинг - BitBlt обычный... на 100 спрайтах, глянул внимательней даже не 290, а около 300 гуляет +-3...
igo
> блитинг - BitBlt обычный...
Странно, он вроде равен по скорости SetDIBitsToDevice.
Вечером домой приду - пришлю проект.
кой что проясняется... если спрайты не перемещать, а только отрисовывать, то там где было:
100: 300
1000: 36
10000: 4
становится:
100: 400
1000: 51
10000: 5
т.е. явно упирается в объем кэша... но не сказать, что такой уж фатальный перепад производительности... на уровне 25%...
тот же самый результат получается, если спрайты двигать, а размер окна уменьшить до 320х240...
усе... расслабься по блитингу, получилось, шо я сжульничал неумышленно)))... цифры пришли к твоим на 100 спрайтах...
перезакачал: http://www.nemehanika.ru/cg/download/test.zip
предлагаю тему вектора тоже трогать... вот тест: http://www.nemehanika.ru/cg/download/testv.zip
все тоже, круги 64 пикселя диаметром... с взаимодействием - add (put - тоже самое по скорости, у вектора нет разницы в отличии от спрайтов)
вдруг у вас вектор в движках появится - будет с чем сравнить... это быстрейшее софтовое растрирование кругов с aa... все с чем сравнивал - отстает чуть ли не в разы...
на векторах у меня усе наоборот если на Athlon 64 2.4:
260-280
68
8
то на достаточно слабеньком ноуте Core 2 Duo 1.2:
400-450
92-97
11
как будто у ноута - тормозней память, но в целом - быстрее процессор...
т.е. мне Mikle - пасиба, но видимо не нужны твои настойки, это явно в коде спрайтов что-то не то у меня - по отношению к Интелю...
igo
> несколько побыстрее чем у sb3d и чуть медленнее чем у Mikle
Хех, не любят современные процы мой метод... Чёрти-что. =))
А у меня на Пентиуме четвёртом 2.5 Ггц:
Твой - 19 фпс
Мой - 26 фпс
Майкла - 25 фпс.
(цифры в посте 26 были при работающем радио на флэше, которое отнимало процессор, поэтому отличаются в меньшую сторону. Этот тест - при свободном процессоре.)
Кстати, рисование кружков у меня тоже есть. Правда, без сглаженных краёв. Будет время - набросаю демку.
Как интереееесноооо всё ээтоо:) Как-то ко мне программирование не пришло в школьные годы,ща в VB копаюсь,надо книгу что-ли купить какую:)а то всё сам да сам...много я упустил...никак даже простенький двиг не напишу,чтобы приступать можно было бы к разработке...всё на бумаге...там я ас:)...а низкого уровня языков совсем не знаю...что-то я изливаюсь тут прямо.
Здравствуйте SB3D,я вас на Gamin'е видел,нравится ваше графическое исполнение.
sb3d
да... да... усе правильно... почему то на интеле мои спрайты - тормозят... абыдна, поправлю как-нибудь... могу код выложить... может вы опытным взглядом поймете где я пролетел...
тест спрайты + вектор: http://www.nemehanika.ru/cg/download/testsv.zip
код вывода с альфой:
szl - фактическая ширина вывода (типа последствия клипинга - если помещается в "экране" - равна szx)
szx - действительная ширина спрайта
szy - сколько выводим строк
loffs - смещение между строками в приемнике, естественно - может быть отрицательным...
void DrawImage_PUTALPHA (dwRGB *dest, dwRGB *source, unsigned szl, unsigned szx, unsigned szy = 1, int loffs = DrawLOFFS) { _asm { pxor xmm2,xmm2 mov edx,szx shl edx,2 mov ecx,szl shl ecx,2 sub ecx,edx mov szl,ecx mov esi,edx mov eax,source mov ebx,dest mov edi,ebx _line: mov edx,esi mov ecx,esi // выясняем скоко полных xmm слов and ecx,0xfffffff8 jz _rem // нету полных add ecx,ebx _loop: movlps xmm0,[ebx] // загружаем и считаем полными словами movlps xmm1,[eax] pshufd xmm4,xmm1,0x00 pshufd xmm5,xmm1,0x55 psrld xmm4,24 psrld xmm5,24 packssdw xmm4,xmm5 punpcklbw xmm0,xmm2 punpcklbw xmm1,xmm2 psubw xmm1,xmm0 psllw xmm0,8 pmullw xmm1,xmm4 paddw xmm0,xmm1 psrlw xmm0,8 packuswb xmm0,xmm0 movlps [ebx],xmm0 add ebx,8 add eax,8 cmp ecx,ebx jne _loop _rem: and edx,0x07 // каков остаток? jz _ex // нет его add edx,ebx _loopr: movd xmm0,[ebx] // загружаем и считаем остаток movd xmm1,[eax] pshufd xmm4,xmm1,0 psrld xmm4,24 packssdw xmm4,xmm4 punpcklbw xmm0,xmm2 punpcklbw xmm1,xmm2 psubw xmm1,xmm0 psllw xmm0,8 pmullw xmm1,xmm4 paddw xmm0,xmm1 psrlw xmm0,8 packuswb xmm0,xmm0 movd [ebx],xmm0 add ebx,4 add eax,4 cmp edx,ebx jne _loopr _ex: mov ebx,edi add ebx,loffs mov edi,ebx add eax,szl mov ecx,szy dec ecx mov szy,ecx jnz _line }; };
шо у меня тут такое, шо интелю могло не понравится? видно?... не?...
заморочился... и полными xmm-словами грузил, считал... потом недорезки... а оно тормозит на Интел, как ваще он смеет Атлону в sse проигрывать?)))...
код не выровненный на 128 для полных слов - это было выше моих сил)))... - не уж-то оно так влияет... получается тогда Athlon-у - это почти пофиг...
Тема в архиве.