Есть окно с собственным устройством Direct3D, назовем его mainWindow. mainWindow и его вещи созданы другими людьми. Они дали мне несколько поверхностей Direct3D (указатели IDirect3DSurface9), которые они рисуют в mainWindow.
Я запустил поток из одного из их обратных вызовов и создал свое собственное окно с помощью winAPI. (у меня был немного похожий случай в этом вопросе)
Я хочу нарисовать эти выходные данные RTT в своем окне . поэтому я пытаюсь скопировать поверхности в поверхности/текстуры, которые я создал на своем собственном устройстве DirectX, которое рисует в моем окне.
некоторые вещи, которые я нашел, пытаясь сделать это,
- это можно легко сделать с помощью функций
D3DXSaveSurfaceToFileInMemory(...)
иD3DXCreateTextureFromFileInMemory(...)
. - Функция
StrechRect(...)
не работает для двух поверхностей, созданных двумя устройствами.
Я пробовал блокировать поверхности и копировать данные с одной на другую, но, похоже, это не сработало. но я попробую еще раз. (блокировка поверхностей с двух разных устройств одновременно незаконна?)
Есть ли способ, которым вы, люди, знаете или предлагаете это сделать?
---EDIT---
MSDN говорит (ссылка на страницу)
В Windows Vista CreateTexture может создавать текстуру из указателя системной памяти, предоставляя приложению большую гибкость в использовании, выделении и удалении системной памяти. Например, приложение может передать указатель растрового изображения системной памяти GDI и получить вокруг него интерфейс текстуры Direct3D. Использование указателя системной памяти с CreateTexture имеет следующие ограничения.
- Шаг текстуры должен быть равен ширине, умноженной на количество байтов на пиксель.
- Поддерживаются только текстуры с одним уровнем MIP-карты. Аргумент уровней должен быть равен 1.
- Аргумент пула должен быть D3DPOOL_SYSTEMMEM.
- Аргумент pSharedHandle должен быть действительным указателем на буфер, который может содержать точку системной памяти; *pSharedHandle должен быть действительным указателем на системную память с размером в байтах ширины текстуры * высоты текстуры * байтов на пиксель формата текстуры.
Я не смог найти ни одного примера создания текстуры таким образом, но я попытался сделать это, и все, что я получил, это вывод, полный шума, и ничего больше. если кто-то может помочь мне в этом, я думаю, моя проблема будет решена до некоторой степени .... есть ли хорошие примеры того, что здесь говорит msdn .. ??
CreateTexture
. согласно странице MSDN, я должен передатьvoid *
, который указывает на данные пикселя в качестве последнего параметра функцииCreateTexture
, обряд? например:void * _pt; CreateTexture(Width,Height,1,D3DUSAGE_DYNAMIC,Format,D3DPOOL_SYSTEMMEM,&mytexture,(HANDLE*)_pt);
- person Deamonpog   schedule 06.06.2012