Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.08.23;
Скачать: [xml.tar.bz2];

Вниз

IDirect3DTexture9 самый простой способ копирования данных с HDC.   Найти похожие ветки 

 
Холивар   (2009-06-21 23:22) [0]

Или попиксельно.

Конечно можно использовать IDirect3DTexture9::GetSurfaceLevel и затем уже IDirect3DSurface9::GetDC но данная строчка:

IDirect3DSurface9::GetDC is valid on the following formats only: D3DFMT_R5G6B5, D3DFMT_X1R5G5B5, D3DFMT_R8G8B8, and D3DFMT_X8R8G8B8. Formats that contain Alpha are not supported because the GDI implementations don"t have a well-defined behavior on the alpha channel.

А как можно скопировать данные с форматом D3DFMT_A8R8G8B8?


 
Sapersky   (2009-06-22 14:06) [1]

Вообще, наверное, блокировкой - Lock или LockRect, не помню точно как оно называется в DX9. Копирование - это просто Move, никаких сложностей с реализацией возникнуть не должно.
Что касается скорости - зависит от типа текстуры, если managed - никаких проблем, DX при блокировке просто возьмёт данные из сист. памяти. Если текстура существует только в видеопамяти (render target и т.п.), то на некоторых картах, возможно, будет быстрее сценарий "создать поверхность в сист. памяти, копировать туда CopyRects, потом взять данные из этой повехности". Хотя насчёт CopyRects не уверен, я проверял с DX7.surface.Blt.

З.Ы. Подобные вопросы уместнее задавать в Медиа/Играх. Они не так мертвы, как кажутся :)


 
Холивар   (2009-06-22 20:43) [2]

Разобрался.

Просто текстуру нужно создавать в таком формате
if (FAILED(D3DXCreateTexture(fd3dDevice, fTexBmp->GetWidth(), fTexBmp->GetHeight(), D3DX_DEFAULT, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &f3DTexture)))
 return false;
LPDIRECT3DSURFACE9 lTexSurface;
if (FAILED(f3DTexture->GetSurfaceLevel(0, &lTexSurface)))
 return false;

HDC surDC;
if (FAILED(lTexSurface->GetDC( &surDC)))
 return false;

Gdiplus::Graphics* texGraph;
texGraph = new Gdiplus::Graphics(surDC);
texGraph->SetInterpolationMode(Gdiplus::InterpolationModeNearestNeighbor);
texGraph->DrawImage(fTexBmp, 0,0, fTexBmp->GetWidth(), fTexBmp->GetHeight());

//write text GDI+
Gdiplus::Font gpFont(L"Arial", 8);
Gdiplus::PointF origin(0,0);
Gdiplus::SolidBrush gpBrush(Gdiplus::Color(255, 255, 0, 0));

//string
wchar_t lbuff[100];
wsprintf(lbuff,L"%d", fSceneCount);

//draw text
texGraph->DrawString(lbuff,-1,&gpFont,origin,&gpBrush);

delete texGraph;

lTexSurface->ReleaseDC(surDC);
lTexSurface->Release();



А вот если добавить в флаги D3DUSAGE_DYNAMIC то уже не работает



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.08.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.004 c
15-1245993547
Dennis I. Komarov
2009-06-26 09:19
2009.08.23
ASUS WL-520GU или еще какой...


15-1245866318
Игорь Шевченко
2009-06-24 21:58
2009.08.23
Чем можно распаковать многотомный tar-архив под windows ?


2-1245834432
Worldmen
2009-06-24 13:07
2009.08.23
Редактирование отчета FastReport в программе


1-1212564995
Trei
2008-06-04 11:36
2009.08.23
Ссылка


15-1245875404
Юрий
2009-06-25 00:30
2009.08.23
С днем рождения ! 25 июня 2009 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский