Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2008, 18:53   #511
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

размер объекта 250*270, т.е. он занимает примерно 20*20 клеток. А значит BitBlt вызывается не 7 раз, а ~7*20*20 = 2800 ? что-то слишком много или я неправильно считаю.

М.б. сделать цикл по объектам. Вычислить область каждого объекта с точностью до размера клетки и вывести эту область. Вот тогда будет 7 раз и области будут небольшие. Даже если объекты перекрываются, ничего страшного не будет. В буфере ведь уже отрисовано правильно.
alexBlack вне форума Ответить с цитированием
Старый 17.05.2008, 19:57   #512
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

250х270 пикселей размер области, которую будет отрисовывать BitBlt, таких объектов 7 на карте (сам буфер 1024х768 пикселей), пока цикл перебирает все ячейки карты, он встречает Map[dt,dz].Index>0 точно 7 раз. Я просто неправильно написал условие, оно гораздо сложнее пришлось упростить и скобки [dt,dz] потерялись. Правильнее будет if Map[dt,dz].Index>0 then begin ...

...и еще, ...смещение идет по 12 пикселей по-Y и 24 пиксела по-X, но один тайл размера 49х25, это изометрия, поэтому чтобы правильно располагать тайлы нужно половинное смещение.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 17.05.2008 в 20:01.
Beermonza вне форума Ответить с цитированием
Старый 17.05.2008, 23:07   #513
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Попробовал у себя, действительно не впечатляет, я ожидал большего эффекта.
При выводе буфера полностью, но разбитого на 100 частей, скорость падает на 10%, при выводе 50% (50 частей) повышается где-то на 10%, а при выводе 20% (20 частей) повышается процентов на 50. Вывод производится на канву формы с помощью BitBlt.
Тест во вложении. Чтобы увидеть наглядно степень обновления в разных режимах, задвиньте окно за экран и выньте обратно.
Вложения
Тип файла: rar Test2.rar (785.5 Кб, 85 просмотров)
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 18.05.2008, 23:58   #514
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

В общем, не важно выходит, ...однократный BitBlit всего буфера быстрее, чем анализ областей и многократный BitBlt участков. Главный тормоз теперь - операции смешивания цветов, и чем больше объектов, тем больше тормозов. Тут будем думать. От Pointer'ов уже избавились, ScanLine тоже удален, Bitmap'ов в памяти нет, только область данных и начало. Работает в 2 раза быстрее чем прежде. Еще немного добить варианты с обработкой сразу 8 байт, если выйдет, то можно на этом завязывать ) Поможете?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 19.05.2008, 08:45   #515
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

А из 509 поста с 4-мя байтами не пробовали (речь об этом ?). В моих тестах это работало процентов на 10-15 быстрее. Вот то же самое с 8-ю байтами:

Код:
const C1:int64 = $FFFFFFFFFFFFFFFF;
   asm // подготовка маски
      pxor      xmm7, xmm7      //
      mov       eax, $FFFFFFFF  // маска
      movq      xmm3, C1
      PUNPCKLBW xmm3, xmm7
   end;
   for yy:=y_up to y_down do begin

      TexPixel  := P24Color(TexPointer );
      MapPixel  := P24Color(MapPointer );
      ZonePixel := P24Color(ZonePointer);
      C := (x_right-x_left+1)*3 div 8;
      if C <= 0 then break;

      asm
         //push edi
         //push esi
         //push edx
         //push ecx

         mov ecx, C
         mov esi, [TexPixel]
         mov edx, [ZonePixel]
         mov edi, [MapPixel]
       @@1:
         cmp dword ptr [edi], 0
         jne @@mix
         cmp dword ptr [edi+4], 0
         je  @@Next

       @@mix:
         movq      xmm0, [esi]     // tex
         PUNPCKLBW xmm0, xmm7      // convert to word

         movq      xmm1, [edx]     // zone
         PUNPCKLBW xmm1, xmm7
         psubw     xmm0, xmm1      // tex-zone

         movq      xmm2, [edi]     // map
         PUNPCKLBW xmm2, xmm7

         pmullw    xmm0, xmm2      // (tex-zone)*map
         psrlw     xmm0, 8         // shr 8
         paddw     xmm1, xmm0      // zone + (tex-zone)*map shr 8

         pand      xmm1, xmm3
         packuswb  xmm1, xmm1      // convert to byte

         movq      [edx], xmm1

       @@next:
         add esi, 8
         add edx, 8
         add edi, 8
         loop @@1

         //pop ecx
         //pop edx
         //pop esi
         //pop edi
      end;
      TexPointer  := TexPointer  -texLine;
      MapPointer  := MapPointer  -texLine;
      ZonePointer := ZonePointer -DrawLine;
   end;
   asm
      emms
   end;
alexBlack вне форума Ответить с цитированием
Старый 19.05.2008, 16:03   #516
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

alexBlack, скорость обработки просто умопомрачительная!, в разы отличается от прежних вариантов, ...НО и тот (4) и этот (8) ASM творят с текстурами непонятно что, на скрине показал это безобразие )) ...причем эта некорректность обработки зависит от положения текстуры в буфере и по-X и по-Y, в некоторых местах объект вообще не выводится. Текстура выполнена кратной 8-и в обеих пропорциях. Где-то ползет нечетность, это видно по смене кадров анимации.
Изображения
Тип файла: jpg Test_asm_colormix_8.jpg (34.1 Кб, 276 просмотров)
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 19.05.2008, 16:12   #517
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Все "проблема" отпала, ...вернул в код PUSH и POP , совсем про них забыл )
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 19.05.2008, 16:22   #518
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
alexBlack, скорость обработки просто умопомрачительная!, в разы отличается от прежних вариантов...
Неужели в разы ? На моих тестах разница была незначительной. Но у меня один объект. Может когда несколько объектов это лучше видно.
alexBlack вне форума Ответить с цитированием
Старый 19.05.2008, 16:47   #519
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
Неужели в разы ? На моих тестах разница была незначительной. Но у меня один объект. Может когда несколько объектов это лучше видно.
Я тестил на карте со 100 объектами, из них 50 объектов - крупные деревья, и остальное 1/4 от размера деревьев, ...в общем экран засажен полностью, так что персонажу не пройти, и его самого не видно за этой густотой ) ...перебор с точки зрения игры , и причем серьезный.
Результаты:
Было - 38% CPU
Стало с "ASM8" - 6% CPU , ...в 6 раз быстрее!

Итак, ...объявляется благодарность alexBlack , mutabor и Kostia за консультацию и непосредственную помощь в продвижении проекта MMO 2D RPG!, ...в кредитах будет отмечен этот факт.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 19.05.2008 в 17:06.
Beermonza вне форума Ответить с цитированием
Старый 25.06.2008, 17:54   #520
SnUrik
Новичок
Джуниор
 
Регистрация: 17.05.2008
Сообщений: 1
По умолчанию

Всем труженикам проэкта респект и мои комменты:
В сообщениях я встретил довольно много нелесных слов о DelphiX, не хочу вас огорчать, но DelphiX- всего-лишь расширение Delphi(точнее набор заголовков функций), для работы с DirectX (нужен лишь для возможности использования функций DirectX в Delphi). Поэтому рассуждения о скорости вывода сводится только к умению писать программы на DirectX.
Также встретил рассуждения на выбор между OpenGl-ем и DirectX-ом, в которых утверждалось что в DirectX предпочтительнее только потому что его выберают крупные производители игр, а как вам то что Doom 3 писался на OpenGl-е?
Все выше сказанное- из статей нарытых в интеренете в течении месяца, в поисках выбора языка программирования и графической библиотеки для создания своего 2d движка. Итог: программировать буду на Delphi(я прекрасно знаю Паскаль, и в Delphi разобратся довольно просто), я за вывод на экран будет от отвечать OpenGl(OpenGl более предпочтителен именно для Delphi-не требует никаких заморочек для своего использования- пишем в uses OpenGL и вуаля- пользуемся всем чем захотим).
SnUrik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уроки по созданию игр для новичков... -=DeS=- Gamedev - cоздание игр: Unity, OpenGL, DirectX 750 14.11.2017 20:26
Музыка программистов - как вы относитесь к АРИИ? Весёлый Жека Свободное общение 46 10.10.2008 22:32
Конкурсы по созданию игр на Delphi mutabor Свободное общение 0 15.06.2007 12:40
Работа по созданию ПО remix Фриланс 3 22.04.2007 11:00