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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2010, 17:49   #1
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию Alpha blending using mmx

Господа, вопрос такой, а кто-нибудь пользуется/вался mmx для создания эффектов полупрозрачности в directdraw? Если у кого-то есть готовые сниппеты, поделитесь пожалуйста, очень хочется делать Fade2Black в играх, ну и всякие там другие штуки при помощи полупрозрачности. Я в интернете посерфил, скачал кое-что, но чего-то не работает. Хотелось бы иметь интерфейс вроде этого:

Код:
RenderSurfaceAlfa(LPDIRECTDRAWSURFACE lpDestSrf, LPDIRECTDRAWSURFACE lpSrcSrface, int destX, int destY, LPRECT lpSrcRect, int alpha);
sashonk вне форума Ответить с цитированием
Старый 29.04.2010, 23:19   #2
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

берешь куду или opencl или intel compiler и все это дело паралелишь на кучу потоков, тогда точно тормозов не будет)))
А вообще тут немного написано про sse
http://ru.wikipedia.org/wiki/Streaming_SIMD_Extensions
Kostia вне форума Ответить с цитированием
Старый 30.04.2010, 11:41   #3
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

возможно я сам когда-нибудь и займусь написанием функций альфа-блендинга с использованием ассемблерных вставок (если будут идеи по оптимизации и куча свободного времени и желания), но пока предпочитаю пользоваться готовеньким)) я тут сам кое-что нашел по этой теме
http://www.gamedev.net/reference/art...rticle1487.asp

человек написал функции альфа - блендинга для directdraw с использованием mmx. Я немного разворошил там код, адаптировал под свою платформу и теперь у меня работает альфа-блендинг. Но вот проблема, у чувака там рендерится текстура размером 800на600 с фпс=60, а у меня где-то 300на200 и фпс падает аж до 10-15 кад/с. Вот какая-то такая хрень. Сам пока не пойму где косяк. Ах, да, еще когда сворачиваю/разворачиваю окно, приложенияе падает, если там рендерились поверхности функцией альфа-блендинга. Рад, что хоть кое-как работает

ЗЫ вообще, полезно, наверное, было бы вспомнить ассемблер и заняться таки этим самому. Кучу бы сил потратил, зато потом в таких темах смело постил бы верные ответы)))
sashonk вне форума Ответить с цитированием
Старый 30.04.2010, 11:53   #4
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от Kostia Посмотреть сообщение
берешь куду или opencl или intel compiler и все это дело паралелишь на кучу потоков, тогда точно тормозов не будет)))
А вообще тут немного написано про sse
http://ru.wikipedia.org/wiki/Streaming_SIMD_Extensions
а в ОпенГЛ случайно нет встроенной поддержки альфа-блендинга?
sashonk вне форума Ответить с цитированием
Старый 30.04.2010, 12:36   #5
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

А как же!
DirectDraw уже давно устарел, было время когда я его тоже ковырял. В DirectX есть такая штука, как потеря устройства которая случается при сворачивании программы, то бишь происходит передача управления вывода на экран Windows и DX теряет все свое "имущество". Нужно делать проверку на потерю устройства и когда его можно будет восстановить восстанавливать.
Для Direct3D я делал так:
Код:
function DXTest: HRESULT;
begin
  Result:=ppiD3DDevice9.TestCooperativeLevel;
end;

procedure DXResetDevice();
begin
  ppiD3DDevice9.Reset(d3dpp);
//настройка матрицы проекции
  DXReshape(BufferWidth, BufferHeight);
  DXLoadIdentity;
//выставляем нужные режими
  ppiD3DDevice9.SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
  ppiD3DDevice9.SetRenderState(D3DRS_LIGHTING, 0);
  ppiD3DDevice9.SetRenderState(D3DRS_ALPHABLENDENABLE, 0);
  ppiD3DDevice9.SetRenderState(D3DRS_ZENABLE, 0);
end;

procedure Display();
var
  res: HRESULT;
begin
//lost device
  res:=DXTest;
  if res=DXERR_DEVICELOST then exit;
  if res=DXERR_DEVICENOTRESET then
  begin
    DXResetDevice();
//пересоздаем все ресы
    DXCreateFont(24,0,'Script',Font);
    DXLoadTextureFromFile('gfx/Arrow.png',cur,0);
    DXLoadTextureFromFile('gfx/Fon.bmp',fon,0);
  end;
...
Т.е. сначала проверяем, если DXERR_DEVICELOST то выходим из функции, а если DXERR_DEVICENOTRESET т.е. устройство можно восстановить, то восстанавливаем его.
В DD я с этой проблемой никак не боролся)))
Kostia вне форума Ответить с цитированием
Старый 30.04.2010, 13:30   #6
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
А как же!
че, серьезно? А как там со скоростью? Скажем полноэкранную анимацию сделать можно при нормальном фпс, гденибудь кадров 30 в секунду?

ЗЫ на счет потери устройства, я тоже заморачивался в directdraw (с direct3d не довелось поработать). Только там еще нужно всю графику заново на поверхности подгружать

предупреждение, ...за нецензурную лексику

Последний раз редактировалось Beermonza; 30.04.2010 в 16:05.
sashonk вне форума Ответить с цитированием
Старый 30.04.2010, 13:34   #7
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

с другой стороны для directx у меня уже весь код есть, вся платформа под него сделана. Так что переходить на ОпенГЛ второпях пока точно не стоит. Для этого требуется время и подготовка моральной базы)))
sashonk вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Alpha skins dolphin705 Компоненты Delphi 36 27.12.2010 11:10
деление при помощи mmx команд Tecka Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 19.12.2009 20:09
MMX инструкции , С++ и *.bmp gizmonder Общие вопросы C/C++ 0 14.11.2009 22:39
Регистры и команды i486 i586 i686 SSE MMX SSE2 etc в качестве альтернативы памяти. Ivan_32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 02.06.2009 00:30
Alpha Controls v3.56 Михаил Юрьевич Компоненты Delphi 3 01.05.2008 15:52