Общество изобретателей велосипедов
GameDev.ru / Сообщества / Вело-изобретатели / Форум / 2D движок SR2D, Софтверный движок для работы с 2D графикой на VB6, vb.net, C# (2 стр)

2D движок SR2D, Софтверный движок для работы с 2D графикой на VB6, vb.net, C# (2 стр)

Поделиться

Страницы: 1 2 3 4 ... 17 ... 32 33 34 Следующая

igoЗабаненwww9 окт. 201012:00#15
по 1. - офигительно...
2. - опупительно...
и как быстро?... т.е. десяток тысяч спрайтов потянет с размером меняющимся постоянно к примеру от 10x10 до 200x200 - 30 кадров в секунду? или это ваще для софтварного ресайза невозможно?
мне на него терпения - не хватило, у меня спрайты на sse, без ресайза...

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

сейчас припиливаю agg_lite к своей библиотеке и на большой скорость(sse) - т.е. будут практически любые векторные формы с очень качественным - aa... и режимами наложения... усе в открытых кодах...

а че для C++ такой библы не сделаешь?... сеж VB - чудная ниша)))...

а че, за еще более сложные режимы наложения? интересно...
я че-то не увидел кайфа делать то, что более одной, двумя инструкциями делается на sse, т.е. получается: add, sub, mul, avr, мягкий и жесткий avr, put и put с alpha...


так вот я о чем, давай сбацем исчерпывающие, ты свой, я свой вариант софтварных 2D библиотек... обмениваясь исходниками... у меня сейчас тока ресайза спрайтов например - не хватает... поворот -  я просто подозреваю - серавно тормоз тотальный, если качественно...
усе шо есть лежит в открытых на: http://nemehanika.ru/cg/ - никаких ограничений, можно брать что угодно, использовать как угодно и копирайты не вставлять (у меня их и нету там)...

кстати у меня тока по отрисовке 2D - движек... однако есть все базовые и хитрые тоже - 3Д преобразования... иерархии, система контроллеров, концепция текущего объекта - для создания сложных развесистых систем и управления ими... и т.п... - усе компактненько, неизбыточно...

специализация движка (скорее уж фреймворк он) - сеж не игродел, а компутерный арт...

Правка: 9 окт. 2010 12:16

MikleМодераторwww9 окт. 201016:04#16
igo
> десяток тысяч спрайтов потянет с размером меняющимся постоянно к примеру от
> 10x10 до 200x200 - 30 кадров в секунду? или это ваще для софтварного ресайза
> невозможно?
Боюсь, что невозможно. По крайней мере в одном потоке. Но я и не для такого позиционирую SR2D - он для небольших, зато очень простых, программ. Одной строкой загружаем спрайт из файла, одной строкой отображаем. Программа на SR2D не регистрирует никаких ActiveX, не устанавливает никаких фреймворков. То есть без проблем запустится даже на Висте без прав администратора.
igo
> а че для C++ такой библы не сделаешь?... сеж VB - чудная ниша)))...
В общем-то библиотеку можно использовать и из-под C++, Delphi и т. п. Это просто набор stdcall API-подобных функций. Под VB6 я сделал ПОРТ - то есть просто подключаемый модуль, в котором объявлены нужные одращения к DLL, выделяется при необходимости память, и сделаны некоторые предварительные расчёты.
Немного подробнее про расчёты: спрайт источнмк может не полностью попадать на спрайт приёмник:
SR2D | 2D движок SR2D, Софтверный движок для работы с 2D графикой на VB6, vb.net, C#
Ф-ция из моей DLL получает от порта в качестве параметров указатели не на начало данных спрайтов, а на точки, попадающие на точку "O", эти указатели вычисляет порт. Плюс передаются w, h, wd, ws.
igo
> а че, за еще более сложные режимы наложения? интересно...
EBM и DP3 бамп, линейная интерполяция, работа с битовыми плоскостями, использование второго спрайта источника в качестве маски. Посмотри примеры к старой версии, там всё скомпилировано, можно и без бейсика смотреть.
igo
> так вот я о чем, давай сбацем исчерпывающие, ты свой, я свой вариант софтварных
> 2D библиотек... обмениваясь исходниками...
Давай, исходники я не скрываю. особенно хорошо было бы прийти к единому соглашению на сигнатуры ф-ций, чтобы можно было легко сравнивать, взаимозаменять.

Правка: 9 окт. 2010 16:24

igoЗабаненwww9 окт. 201017:20#17
а, понятно, я думал мож еще какие цветовые взаимодействия есть, шо можно реализовать быстро... но по большому счету мне из фотошопа может только еще оверлей и хочется...

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

т.е. спрайт например так:

BaseSPR spr(L"img.png");
spr->Place (100, 100, modeADD);
spr->Draw();

причем если альфа(маска) вдруг отдельно идет, да еще другой размер придать надо(ресайзит качественно, но тока при загрузке) , то будет например:

BaseSPR spr(L"img.png",L"img_mask.png", 640, 480);
spr->Place (100, 100, modePUTALPHA);
spr->Draw();

сам определяет где оно... если в ресурсах нет - пойдет на винт...

в плане соглашений... я еще не все детские болезни именования функций победил, поэтому у меня на это счет внешний авторитет:
для меня эталон лаконичности - эт. Processing... хотел уже делать его порт на C++, да оказалось уже делают - openFrameworks - называется, токо он пока 0.06 - в нем 2D не полностью реализовано пока... а чистого(не OpenGL) - и подавно нет, aa - не везде, а без него уже картинка не катит сейчас... еще пару лет будет строится, они не торопятся похоже...

на самом деле не видел ни одной 2D либы софтварной исчерпывающей и одновременно - быстрой, все что перебрал - весьма не торопливо...
то бишь написание таковой - даже велосипедом пока не назовешь... кода культурного быстрого - даже выдрать неоткуда толком... впервые такой подарок свалился как agg_lite... потенциал ускорения кашмарный - все более менее культурно написанно..., но! весь fill через  - chars... о! как он полетит скоро)))...

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

Правка: 9 окт. 2010 17:26

MikleМодераторwww9 окт. 201017:31#18
igo
> spr->Place (100, 100, modeADD);
Destination не указывается, то есть подразумевается некий BackBuffer?
А у меня нет BackBuffer-а, любой спрайт можно рисовать на любой другой. Потом любой отобразить на форму, как будто это и есть BackBuffer.
igo
> в плане соглашений... я еще не все детские болезни именования функций победил,
Так я про имена молчу. Речь о сигнатурах только.

Правка: 9 окт. 2010 17:33

igoЗабаненwww9 окт. 201019:22#19
DrawBits.... туды все рисуется...
их можно много завести, разных размеров и менять как перчатки, в каждый момент активен(доступен для рисования) токо один...
т.е. если пользователю не надо несколько плоскостей, то и заморочек дополнительных не возникнет, а если надо - есть и такое...

и конечно двойная буферизация сразу включена...
т.е. для отображения на экране надо: DrawPaint();

я не очень люлю когда в вызовах фигурируют переменные, которые новичкам кажутся мудреными и избыточными... система должа ко всем быть добра - и к новичкам и тем кому поглубже зарыться охота...

напомни, шо таке - сигнатуры, то ли забыл, то ли не знал)))...

MikleМодераторwww9 окт. 201020:25#20
Сигнатура - описание количества параметров ф-ции и их типов. Например при вызове ф-ции через указатель, если вместо ф-ции с двумя параметрами типа int подставить ф-цию с тремя, то мы получим ошибку стека, потому что сигнатура ф-ции не та.
igo
> DrawBits.... туды все рисуется...
А можно потом использовать отрисованное изображение, как источник? У меня можно, без всяких локов, в этом "фишка".
igoЗабаненwww10 окт. 20109:12#21
конечно... можно... шо за локи такие сам - не понимаю)))...(в смысле знаю шо таке есть, но зачем заморочка - непонимай...)...
у меня там вообще вся архитектура наизнанку... это как бы вопрос - проявленных парадигм... т.е. под слоем BaseSPR... лежат более дубовые функциии оперирующие источниками, приемниками... но канечно бахалайская(на визуальный арт) направленность - дает себя знать местами)))...

про сигнатуру понял, энто с dll-ками актуально, я пока просто не заморачивался...  поскольку исходники сеж - компактны - их компиляция не долгА... так и распрастраняется...

без ресайза у меня кстати десятками тысяч спрайтов ворочает... и еще есть... хитрых спрайт с предрасчитанными хреновинами(и кой какими ограничениями конечно) - который тоже бегает в десятках тысяч с ресайзом...

просто скорость, как никрути  - дает устроить фиееерию и патаму - гость весьма желанный)))...

Правка: 10 окт. 2010 9:14

MikleМодераторwww12 окт. 201014:55#22
Накатал небольшой спидтест:
http://tuapse-mikle.narod.ru/SR2D/SpeedTest.zip
На Intel Core2 (2.4 ГГц на ядро) 1000 спрайтов 64*64 с альфаканалом - 104 fps.
igoЗабаненwww12 окт. 201016:53#23
если это кодом прямым(без маштабирования) - то наверно медленно, если универсальным (маштабирующим) - то наверно нормально, а может даже быстро...
тока когда ресайс не нужен - должен нересайзовый код работать, по идее...

у меня на Core 2 Duo 1.2Ггц (ноут) твоя демка - 33fps, проц загружен не полностью...

у меня спрайты наверно заметно быстрее, лень тест собирать для точности... но обычно это 5000 - 25000 спрайтов при 25-30fps на полный экран на Athlon 64 3000 (2.4Ггц), спрайты среднего размера наверно около тех же 64x64... - с фейковым маштабированием... (без интерполяции, но исходник размыт на 2-4 пикселя - получаем дармовую интерполяцию в ущерб использованию памяти - шо пофиг)

немаштабирумые - еще сильно быстрей... да и sse дает раза 1.5 минимум в этом случае против mmx...

Правка: 12 окт. 2010 16:54

MikleМодераторwww12 окт. 201017:03#24
Это без ресайза (то есть ресайз идёт заранее)
igo
> проц загружен не полностью...
Один поток. Моя библиотека, кстати, позволяет параллельно работать в несколько потоков без ограничений. Но это уже на VB6 не запустишь, как-нибудь соберу демку на vb.net.
igo
> у меня спрайты наверно заметно быстрее, лень тест собирать для точности...
было бы интересно посмотреть...
igoЗабаненwww12 окт. 201017:18#25
ну да один поток... но он почему то недогружен на 20-25 процентов...

посмотреть тут можно: http://nemehanika.ru/
ставишь движек... запускаешь с десктопа nm Engine
на сайте кликаешь - по второй демке слева, сверху (буковки)... это первая глава из алисы - 8000 знаков с хвостиком... ну и столько же значит спрайтов...
или с сайта или сам энджайн Алисы  можно запустить прям из утилиты немеханики шо в трее поселяется... это как бы - ненастроенные, из них можно много шо собрать дергая настройки - тама: 8x8x8, Alisa, Contact, Nobody Tale, Pursuit I-II, Surniki - на спрайтах... полный список настроек на F1

шоб смотреть скоростя:
жмешь 6 - запрет на переход в пониженное разрешение... потом F2 - вывод информации... увидишь fps - и примерную загрузку проца, если не краснеет - значит справляется... жмешь 0 - прибавка 5 fps, еще... - как проц покраснел, значит это и есть потолок...

перед тем как будешь отинсталять - высели из трея утилиту...

Правка: 12 окт. 2010 17:21

sb3dУдалёнwww13 окт. 20101:58#26
Mikle
> Накатал небольшой спидтест:
Наскоро собрал тест, копирующий твой тест.
(У меня тоже софтовый двиг, для тех кто не в курсе.)

http://sb-games.com/wp-content/uploads/SPEEDT.ZIP
Важно! На всякий случай. Было лень отключать ограничение фпс, и в моём тесте оно не поднимется выше 65-75.
А загрузка проца не упадёт ниже 50 процентов. Так всё сложно.
=))

На 1000 спрайтах у меня 21, у тебя 20 фпс. На 10000 у тебя 3, у меня 2. Пентиум 4 2.5 Ггц, память ddr1.

Делаю вывод, что всё упирается в пропускную способность памяти, и изыски в коде не влияют на софтовую заливку. Вот если натягивание на 4 точки сравнить - тут код будет более влиять.

Впрочем, даже этот тест интересно было бы сравнить на разных компах. =)

igoЗабаненwww13 окт. 20109:03#27
23fps на ноуте... проц догружает...  30 на Athlon 64 2.4ггц... причем на одноядерном - нагрузка на проц чисто 100% - а на двух ядерном - скачет на 10%...

а хде у меня на 1000 спрайтах 20?... или ты там из исходников собрал что-то? прикольно)))... пришли глянуть... неужто у меня нересайзовые спрайты медленнее ресайзовых)))...

шо это у тебя комп древний? у меня тоже... специально - не обновляю, шоб код более быстрый - писать...

Правка: 13 окт. 2010 9:13

sb3dУдалёнwww13 окт. 201010:06#28
igo
> а хде у меня на 1000 спрайтах 20?
Да нет, ты не так понял. Это я с Майклом сравнивал, это у меня его тест 20 давал на 1000 спрайтах.
А ты бы свой тест тоже собрал бы. Было бы интересно.

> шо это у тебя комп древний?
Это ещё не древний. Тот, на котором игры пишу - Duron 1300, там 10 фпс на 1000 спрайтах. =) Действительно, для того, чтобы готовые игры не тормозили. Ну, и среда для работы там создалась за годы удобная.

> 23fps на ноуте
Значит, заметное превосходство движка Майкла. На его тесте у тебя ведь 33 было на ноуте?

Mikle, если не секрет, выложи код наложения спрайта с альфаблэндом. Мне интересно, почему мой настолько заметно проигрывает.

MikleМодераторwww13 окт. 201010:26#29
igo
Странно, что на твоём компе ядро задействовано не полностью, я сколько тестил - всегда 100% загрузки ядра. На четырёхядерном можно запустить 4 копии процесса, при этом нагрузка всего компа 100%, а задачи практически не тормозят (на 1-2%). Может тут неверно показывается нагрузка на ядро с гипертредингом? (только предположение, что-то ведь должно быть...). И ещё, сколько fps показывает у тебя 100 спрайтов 32*32? Это я к тому, что может SetDIBitToDevice тормозит? Это бывает из-за дров.
Было бы интересно, если бы ты сам скомпилил демку (с чужим кодом, сам понимаешь, разбираться...). Достаточно просто нативную (не ActiveX) DLL с единственной ф-цией AlphaBlend, только чтобы stdcall. Тогда я сам соберу тест.
ЗЫ. А скринсаверы у тебя прикольные :)
sb3d
Вот моя ф-ция:
extern "C" __declspec(dllexport) void __stdcall ALPHA_B(int* src, int* dest, int w, int h, int ws, int wd)
{
    __asm
    {
    mov edi, dest
    mov esi, src
    sub esi, edi

    shl w, 2
    mov ebx, w
    shl wd, 2
    sub wd, ebx
    shl ws, 2
    sub ws, ebx
    mov eax, wd
    sub ws, eax

    mov edx, h
    pxor mm2, mm2
    mov eax, 0x80808080
    movd mm3, eax
    punpcklbw mm3, mm2
    paddusw mm3, mm3

lab0:
    mov ecx, ebx
    add ecx, edi

lab1:
    movd mm0, [edi+esi]
    punpcklbw mm0, mm2
    pshufw mm4, mm0, 0xFF

    movd mm1, [edi]
    punpcklbw mm1, mm2

    movq mm5, mm3
    psubusw mm5, mm4

    pmullw mm0, mm4
    pmullw mm1, mm5

    paddusw mm0, mm1

    psrlw mm0, 8
    packuswb mm0, mm0
    movd [edi], mm0

    add edi, 4
    cmp edi, ecx
    jne lab1

    add esi, ws
    add edi, wd
    dec edx
    jne lab0
    emms
    }
    return;
}
int* src, int* dest - указатели на источник и приёмник (не на начало массивов, а как я описывал в п.16)
int w, int h - ширина и высота отображаемого куска.
int ws, int wd - ширина источника и приёмника.
У тебя вывод на экран через DD?

Правка: 13 окт. 2010 10:55

Страницы: 1 2 3 4 ... 17 ... 32 33 34 Следующая

/ Форум / Общество изобретателей велосипедов / SR2D - софтовый 2D движок

2001—2017 © GameDev.ru — Разработка игр