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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2010, 19:58   #111
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Так вы мне скажите, как вы альфу сделали на DDraw, или это секретом фирмы останется?

Ну да ладно. На самом деле у меня вопрос, а точнее несколько.
С текстурированием разобрался, всё, работает везде.

-Теперь другая проблема, неожиданная такая вполне. Не работает метод UpdateTexture. Странно так не работает, просто вешается.
Создаю две текстуры вот так:

Код:
	d3dev9	CreateTexture, [pdev], 1024, 1024, 0, 0, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, \
		addr [pIDXtexBig1], 0

	d3dev9	CreateTexture, [pdev], 1024, 1024, 0, 0, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, \
		addr [pIDXtexBig1Mem], 0

Потом пытаюсь, собственно, закинуть кусок картинки из памяти в видюху вот так:
Код:
	d3dev9	UpdateTexture, [pdev], [pIDXtexBig1Mem], [pIDXtexBig1]
И вот на этом вызове приложение складывается. Help.

-Я тут вот ещё чего подумал, если примитивы, на которые я текстуры натягиваю, заиндексировать, быстрее работать будет, или нет? Ну просто я отказался сейчас от Lock буфера вершин и считаю буфер вершин сразу в ОЗУ, а затем DrawPrimitiveUP. Это оказалось гораздо быстрее, чем для каждого объекта лочить и пересчитывать вершины. Но зато при рисовании пришлось отказаться от D3DPT_TRIANGLESTRIP в пользу D3DPT_TRIANGLELIST и теперь в буфере вершин избыточность в две точки на один квадратик. Поидее индексы должны уменьшить общий объём памяти. Наверное, должно быстрее с индексами стать.

-И ещё одна неприятность. На нетбуке стандартное разрешение монитора 1024*600. И когда я запускаю свой тест, то колобки получаются сплющенные. Хотя на рабочем столе все иконки выглядят нормально. Я так полагаю, что надо что-то с RHW подшаманить, но чёт не соображу как.

Цитата:
Сообщение от .pixel
Да, этот рисунок (кадр из теста Beermonz’ы) и копируется… просто он в оригинальном размере… что-то около ~1150*730+ поэтому что бы тест заработал корректно, текущее разрешение экрана должно быть не меньшим)
Ну так это, уменьши тогда. А то какой-то странный тест получается, чтобы его запустить, надо рабочий стол подшаманить (это неправильно).
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 05.11.2010, 23:47   #112
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Ulex
Так вы мне скажите, как вы альфу сделали на DDraw, или это секретом фирмы останется?
Нет, не секрет. В DirectDraw нету аппаратной альфы, только ключ прозрачности, или может и есть способ, но я пока в командах не вижу что-то типа "AlphaBlt".

Задача сводится к созданию первичной поверхности (PrimarySurface) в видеопамяти (DDSCAPS_PRIMARYSURFACE or DDSCAPS_VIDEOMEMORY) и поскольку в оконном режиме флипировать и подключать один или несколько задников нельзя, создается так же невидимая поверхность задника (BackBuffer) в видеопамяти (DDSCAPS_OFFSCREENPLAIN or DDSCAPS_VIDEOMEMORY).

Вот так будет выглядеть последовательность построения кадра:

Код:
// вывод фона
DD7BackBuffer.BltFast(0, 0, DD7Buf, nil, DDBLTFAST_WAIT);

Цикл по числу объектов
  AlphaBlt(параметры);
конец цикла

Процедура проверки области окна (rcScreen, rcView), если нужно - изменение области вывода

// показать на экране готовый кадр
DD7PrimarySurface.Blt(@rcScreen, DD7BackBuffer, @rcView, DDBLT_WAIT, nil);
С рукописной процедурой AlphaBlt не все просто. Я пробовал создавать в видеопамяти поверхности для всех движущихся персонажей, и потом через указатель lpSurface структуры TDDSURFACEDESC2, отрисовывать в тот же BackBuffer. Со 100 персонажами получил 22fps и 45% CPU, не шибко много да? ...если то же самое делать аппараткой без альфа-канала, т.е. без рукописных процедур, все в видеопамяти и видеокарта все выполняет полностью, получается 105 fps и 10-16% CPU.

Далее я отказываюсь от хранения поверхностей для объектов в видеопамяти, а использую указатели на динамические массивы текстур и маски в ОЗУ. Получается, что я беру указатель на невидимый BackBuffer из видеопамяти и с помощью MMX заполняю данными из ОЗУ, смикшировав по цветовым компонентам и положив снова в видеопамять. Сказать сколько получил? ...80 fps и 26-34% CPU , ...это когда видеокарта молотит на все свои возможности с обращением к ОЗУ. Нужно ограничить до 30 кадров и будет хорошо. Главное - исключена переброска подложки и BitBlt от GDI.

Работает обновление координат персонажей по стандартному таймеру SetTimer, а вот мультимедийный из MMSystem так и не заработал, выдает ошибку, как не старался и не разбирался с ним.

От VCL отказался полностью, окно создается в процессе работы.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 06.11.2010, 00:22   #113
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

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

Может всё-таки на DirectX перейти.
Я сейчас застопорился на этом самом методе UpdateTexture. Чёт не работает и всё. С перекачкой больших текстур из ОЗУ в видеопамять конечно производительность должна упасть, но вот насколько сильно, очень хотелось бы увидеть и примерно оценить, стоит овчинка выделки, или нет. Пока у меня текстуры все MANAGED, поэтому пример непоказателен, но тем не менее, на моём компе он тянет 10 тысяч объектов с альфой размером 56*56 + подложка 1024*768 по таймеру 30 мс, загрузка CPU 6-9 процентов (ну ещё бы, карточка всё делает). При 100 объектах на интервале в 1 мс выдаёт fps=818.
Пример может и не заработать, ибо писал его я, со всеми вытекающими

Добавлено:
Цитата:
Работает обновление координат персонажей по стандартному таймеру SetTimer, а вот мультимедийный из MMSystem так и не заработал, выдает ошибку, как не старался и не разбирался с ним.
А как хоть ругается? Вообще странно, у меня сразу заработал (на форуме пример нашёл на Delphi). Если у тебя библиотеки нет, то как тогда мой предыдущий тест запустился?
Вложения
Тип файла: rar dx2d.rar (94.7 Кб, 13 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 06.11.2010 в 01:55.
Ulex вне форума Ответить с цитированием
Старый 06.11.2010, 16:02   #114
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ulex, это же Vista у меня (с#чая), поисковик в проводнике не нашел библиотеки для мультимедиа, кернел нашел и все остальное находит, ...когда я взял библиотеку начал перебрасывать в каталог system32 мне так любезно намекнули, мол "файл winmm.dll уже существует, заменить?" ...ну, что за #####?! ...я извиняюсь. Ошибку не показывает, вылетает виндовый обработчик и предлагает завершить приложение. Я делал все по примеру, ...да там и делать-то на 1 минуту, ...я не уверен он работает вообще вне VCL.

Цитата:
Сообщение от Ulex
Вот вот. Та же самая ерунда. Толи я его не нашёл, а может и правда нету. По старой памяти где-то на каких-то форумах какие-то люди чуть ли не пяткой себя в грудь били, что дескать есть в DD альфа. Но что-то никто так и не сказал где именно. Может мы его где то не там ищем?
"Net v DirectDraw apparatnoy podderzhki alpha", как и написано в сети. Есть люди путающие понятие альфа-канала и ключа прозрачности, последний является достоинством например GIF-формата изображений, а вот PNG-24 DD не под силу, нужно все набирать ручками. Разумеется в полноэкранном режиме работает побыстрее, но мне, например, интересен именно оконный режим, ...для многофункциональных интернет-зависимых пользователей вообще он предпочтителен.

Если выводить только на экран статичный буфер, то у меня показывает 475 fps. И вот еще одна загадка, если выполнять построение кадра и вывод на экран по таймеру, а не на всю возможность в обработчике событий, то резко подскакивает загрузка CPU, до 60%, ...хотя это вроде послабление, если нужно задействовать видеокарту только 30 раз в секунду.

По поводу непонятных треугольников и заливки, ...у меня те же проблемы на ноутбуке. Играя как-то в Героев Магии и Меча 5, заметил, после очередного красивого колдовства остаются цилиндры, полигоны, текстуры, над и под персонажами, и держатся весь бой, хотя DirectX 10 (кажется) стоит.

Дополнение:
Проверил на ноуте Intel Core 2 Duo 1,8GHz (видеокарта Intel X3100 8M + 375М), еще раз, просто задний фон, картинка fps и вывод на экран, ...без объектов, ...показывает 209 fps и 6% CPU.
Пошел за Pentium 4 3GHz (видеокарта ASUS GeForce 8600GT 256М), тот же тест показывает: 1041 fps и 5% CPU
{уточнил, что за проц в системнике, почему так мало загрузки CPU, не может быть такого на P4, ...получил внятный ответ "с нового года тут стоит Core 2 Duo 2,99GHz с оперативкой DDRII, видеокарта та же", ...теперь у меня точно негде даже примерно тестить на предмет загрузки "устаревших" систем}

...немой вопрос: эт как же ж аппаратную альфу поиметь-то??? ...может и стоит обратить внимание на DirectX, но проблемы с объемом моих текстур все равно не отпадают, все равно нужно будет грузить каждый кадр из ОЗУ, ...но я точно знаю, что просто бросить по указателю текстуру быстрее, чем в видеопамяти ее обрабатывать процессором. Значит смотрим в сторону DirectX, если он на старичках выдаст результат удовлетворительный, то на современной машине подавно. Вот тут я раздваиваюсь, ...заниматься тем чем занимался, или переходить на DirectX
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 06.11.2010 в 17:10.
Beermonza вне форума Ответить с цитированием
Старый 06.11.2010, 22:29   #115
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Мне кажется DDraw себя исчерпал. Весь интерес состоял именно в оконном режиме и аппаратной альфе. А DDraw как выясняется альфу вообще не умеет, а оконный режим сделан ч.з. какое-то место.
Я за DirectX. Нам нужно именно аппаратно целиком формировать кадр на видюхе. Вместе со всеми смешиваниями и т.д.

Было бы здорово, если можно было бы сразу лочить и копировать данные в текстуру в видеопамяти. Но как я понял это возможно только на текстурах MANAGED либо DINAMYC, а это на корню убьёт всю производительность. Копирование данных в текстуру SYSTEMMEMORY работает достаточно быстро. Ну я так понимаю, это просто кусок ОЗУ. Но установить такую текстуру для рендинга невозможно. Надо её скопировать в видеопамять. И тут как всегда, нежданчик. Я уже незнаю, чего надо этому UpdateTexture. Подскажите кто-нибудь. Чего я неправильно сделал?

Beermonza,
А что, мой пример не заработал. Если заработал, то как тебе альфа?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 07.11.2010, 00:00   #116
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Ulex Посмотреть сообщение
Beermonza, а что, мой пример не заработал? Если заработал, то как тебе альфа?
Там альфа колобка какая-то корявая, кроме тени , заряди туда моих солдатиков без анимации, посмотри что будет. Да, и так понятно быстро пашет, ...у меня 160 fps и 6% CPU при интервале 1 мс и 100 колобках, ...это Direct3D у него аппаратная альфа, тут конечно скорость, ..а гарантия есть что будет работать везде без выпендосов?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 07.11.2010, 03:00   #117
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Там альфа канал самодельный (руками сделан) и пожатый в GIF.
Просто у меня интерфейс IImgCtx благополучно погиб, поэтому загружать PNG не получается. D3DX не предлагать, ибо от SDK DirectX слегка подташнивает. Я твоих солдатиков в оригинале загрузить не могу. Может, кстати, кто подскажет программку какую. Как можно альфа канал вытащить из PNG и сохранить допустим в BMP в какой нибудь один из Color_ов (желательно в зелёный).

Цитата:
..а гарантия есть что будет работать везде без выпендосов?
Ну, знаешь, гарантии в нашей стране тильки один человек раздаёт (плывут пароходы - салют Дмитрию Анатольевичу).
А если серьёзно, то, поидее, всё от наших прямых рук зависит.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 07.11.2010 в 03:03.
Ulex вне форума Ответить с цитированием
Старый 07.11.2010, 18:20   #118
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ulex, во вложении программка для сохранения альфа-канала из PNG в BMP любого формата. Очень ценная вещь при работе с рендером 3D Max'а. Я раньше такой пользовался, только у меня было еще и автоматическое склеивание в раскадровку вместе с маской (выше в постах есть пример дерева), это прожка - часть, только на выдергивание альфы.

Я вот точно гарантии дам на GDI, только использую проверку на MMX/SSE, и баста, у кого там что тормозит, по ходу пусть переключает режим на 16 бит если уж сильно тормозит, или останусь на DirectDraw, только для вывода и подложки. Direct3D даже не хочу осваивать для этого дела. Остается проверить OpenGL.
Вложения
Тип файла: zip BZSaveAlphaToBMP.zip (246.2 Кб, 10 просмотров)
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 07.11.2010, 22:20   #119
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Сообщение от Beermonza
Я вот точно гарантии дам на GDI
Без обид, но один раз уже давал, пока на целочисленное SSE не наступил. Это во первых. Во-вторых гарантии чего, того, что на инструкциях MMX на Celeron_ах всё повесится? 16-ти битный режим не спасёт, поверь на слово, я как бы доказывать больше ничего не буду. Ну не веришь, что не провернётся GDI на этих конфигурациях с такими объёмами, дело хозяйское. Заблуждайся дальше. Я бы тоже, наверное, по сих пор заблуждался, если бы просто это не увидел. Это просто надо видеть, причём желательно контрастно. Сначала запустить на P4 и увидеть 4-5%, а затем на Celerone и увидеть 100++

Цитата:
Сообщение от Beermonza
Direct3D даже не хочу осваивать для этого дела. Остается проверить OpenGL.
Ну ладно. Я тогда завязываю со всей этой типо "оптимизацией".
Вобщем вывод у меня в твёрдом остатке такой: хотите производительности на компьютерах типа Celeron 3 - используйте DirectX, но только по полной аппаратной. Если лочить какие то поверхности и грузить их по таймеру, производительности тоже не получите, проц и шина всё сольют на перекачке этих текстур в видюху. А на компьютерах класса P4 (с памятью DDR, DDR2) и GDI неплохо проворачивается.

И конечные тесты на Celerone:

Код HTML:
Тест Beermonza Test 5 MMX
-----------|---------|----------|-------|-----------------|------------------|
кол-во перс| деревья | Подложка | BitBlt| загрузка CPU (%)| вых интервал (мс)|
-----------|---------|----------|-------|-----------------|------------------|
    10     |    0    |    +     |   +   |       99        |       31-41      |
    10     |    1    |    +     |   +   |       99        |       31-41      |
    10     |    2    |    +     |   +   |       99        |       41-51      |
    10     |    3    |    +     |   +   |       99        |       51-61      |
    20     |    0    |    +     |   +   |       99        |       31-41      |
    20     |    1    |    +     |   +   |       99        |       31-41      |
    20     |    2    |    +     |   +   |       99        |       41-51      |
    20     |    3    |    +     |   +   |       99        |       51-61      |
------------------------------------------------------------------------------
Код HTML:
Тест .pixel (DDraw)
-------------------------------------|-----------------|
             программа               | загрузка CPU (%)| 
-------------------------------------|-----------------|
test with mmx copy.exe               |       98-99     |
test with pagelock+bltfast (dma).exe |       82-85     |
-------------------------------------|-----------------|
Код HTML:
Тест Ulex (DirectX)
-----------|----------|-------|--------------|-----------------|-----------------|
кол-во перс| Подложка |  fps  | интервал (мс)| загрузка CPU (%)|   UpdateTexture |
-----------|----------|-------|--------------|-----------------|-----------------|
   100     |    +     | 11-12 |      30      |       99        |        +        |
    10     |    +     |  17   |      30      |       99        |        +        |
   500     |    +     |  33   |      30      |      0-7        |        -        |
  2000     |    +     |  33   |      30      |       37        |        -        |
  3000     |    +     |  24   |      30      |     43-59       |        -        |
     1     |    +     |  4-5  |       1      |     89-92       |        +        |
     1     |    +     |  233  |       1      |     66-71       |        -        |
-----------|----------|-------|--------------|-----------------|-----------------|
Beermonza, за программку большое спасибо. Я думаю она мне очень пригодится.

P.S.
И напоследок мои исходники. Мало ли, вдруг сгодятся кому зачем нибудь.
Вложения
Тип файла: rar use3Das2D_OUT.rar (101.7 Кб, 10 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 07.11.2010, 23:09   #120
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Цитата:
test with pagelock+bltfast (dma).exe | 82-85
мдя) бедный Celeron, загнулся от такого блиттинга... xD
Спасибо, Ulex.
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
wi-fi и скорость stenl1 Компьютерное железо 19 01.06.2010 17:48
Скорость рисования графиков Master07 Общие вопросы C/C++ 3 16.07.2009 21:45
Скорость bakanis Работа с сетью в Delphi 6 05.04.2009 12:39
Скорость скачивания Терминатор Свободное общение 3 30.03.2009 19:03
Скорость проигрывания Bigtyoma Мультимедиа в Delphi 0 30.09.2008 15:57