资源简介
利用D3D9创建纹理,进行不同D3D9设备之间的资源共享。
代码片段和文件信息
#include “MyD3D.h“
LPDIRECT3D9EX d3dex = NULL;
MyD3D::MyD3D()
{
m_hSharedSurfaceHandle = NULL;
}
MyD3D::~MyD3D()
{
if (m_pD3ddev) m_pD3ddev->Release();
if (m_pTexture) m_pTexture->Release();
}
bool MyD3D::CreateEx()
{
HRESULT hr = Direct3DCreate9Ex(D3D_SDK_VERSION&d3dex); //创建D3D此次不能用Direct3DCreate否则设置Texture的ShareHandle参数会失败。
if (hr != D3D_OK)
{
return false;
}
return true;
}
HANDLE MyD3D::GetSharedHandle()
{
return m_hSharedSurfaceHandle;
}
bool MyD3D::InitDev(HWND window HANDLE hSharedHandle)
{
srand(time(NULL));
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp sizeof(d3dpp));
d3dpp.Windowed = true;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferWidth = TEXTUREW;
d3dpp.BackBufferHeight = TEXTUREH;
d3dpp.hDeviceWindow = window;
HRESULT hr = d3dex->CreateDevice(D3DADAPTER_DEFAULT D3DDEVTYPE_HAL window D3DCREATE_HARDWARE_VERTEXPROCESSING &d3dpp &m_pD3ddev);
//D3DCREATE_HARDWARE_VERTEXPROCESSING 和D3DCREATE_SOFTWARE_VERTEXPROCESSING 后者会更多的占用内存。
if (hr != D3D_OK) return false;
if (hSharedHandle == NULL)
{
//源创建纹理
HRESULT result = m_pD3ddev->CreateTexture(TEXTUREW TEXTUREH 1 D3DUSAGE_RENDERTARGET D3DFMT_X8R8G8B8 D3DPOOL_DEFAULT &m_pTexture &m_hSharedSurfaceHandle);
if (result != D3D_OK) return false;
}
else
{
//目标创建纹理,格式大小必须与源相同才能共享。
HRESULT result = m_pD3ddev->CreateTexture(TEXTUREW TEXTUREH 1 D3DUSAGE_RENDERTARGET D3DFMT_X8R8G8B8 D3DPOOL_DEFAULT &m_pTexture &hSharedHandle);
if (result != D3D_OK) return false;
}
return true;
}
void MyD3D::D3dSource(HWND hwnd)
{
if (!m_pD3ddev) return;
int r = rand() % 255;
int g = rand() % 255;
int b = rand() % 255;
m_pD3ddev->Clear(0 NULL D3DCLEAR_TARGET D3DCOLOR_XRGB(r g b) 1.0f 0);//给表面缓冲区刷上颜色
m_pD3ddev->Present(NULL NULL NULL NULL);//将缓冲区刷到屏幕上
IDirect3DSurface9* pBackBuffer;
HRESULT hr = m_pD3ddev->GetBackBuffer(0 0 D3DBACKBUFFER_TYPE_MONO &pBackBuffer);//取得第一个表面缓冲区
if (FAILED(hr)) return;
IDirect3DSurface9* pSharedSurface = NULL;
m_pTexture->GetSurfaceLevel(0 &pSharedSurface);//取得纹理的最上层缓冲区(创建纹理时只建了一个缓冲区)
hr = m_pD3ddev->StretchRect(pBackBuffer NULL pSharedSurface NULL D3DTEXF_NONE);//表面缓冲区拷贝到纹理缓冲区
if (FAILED(hr)) return;
//free resource
pBackBuffer->Release();
pSharedSurface->Release();
pBackBuffer = NULL;
pSharedSurface = NULL;
}
void MyD3D::D3dOutcome(wchar_t* filename)
{
WCHAR out_file[1024] = { 0 };
CreateDirectory(filename NULL);
swprintf(out_file 100 L“.//%s//Out_%d.bmp“ filename cont);
D3DXSaveTextureToFile(out_file D3DXIFF_BMP m_pTexture NULL);//将纹理存到文件
cont++;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4264 2018-06-13 16:52 D3DWin32Pro\D3DWin32Pro\D3DWin32Pro.vcxproj
文件 1331 2018-06-13 16:52 D3DWin32Pro\D3DWin32Pro\D3DWin32Pro.vcxproj.filters
文件 887 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Debug\D3DWin32Pro.Build.CppClean.log
文件 106 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Debug\D3DWin32Pro.log
文件 287 2018-06-15 10:30 D3DWin32Pro\D3DWin32Pro\Head.h
文件 2887 2018-06-15 11:05 D3DWin32Pro\D3DWin32Pro\MyD3D.cpp
文件 666 2018-06-15 10:47 D3DWin32Pro\D3DWin32Pro\MyD3D.h
文件 1103 2018-06-15 10:31 D3DWin32Pro\D3DWin32Pro\MyGame.cpp
文件 1321 2018-06-13 17:31 D3DWin32Pro\D3DWin32Pro\WinMain.cpp
文件 979 2018-06-13 15:42 D3DWin32Pro\D3DWin32Pro.sln
..A..H. 24064 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro.v12.suo
目录 0 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Debug\D3DWin32Pro.tlog
目录 0 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Debug
目录 0 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro
目录 0 2018-06-15 11:09 D3DWin32Pro\Debug
目录 0 2018-06-15 11:09 D3DWin32Pro
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out1\Out_0.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out1\Out_1.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out1\Out_2.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out1\Out_3.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out1\Out_4.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out1\Out_5.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out1\Out_6.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out1\Out_7.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out1\Out_8.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out1\Out_9.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out2\Out_0.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out2\Out_1.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out2\Out_2.bmp
文件 1048632 2018-06-15 11:09 D3DWin32Pro\D3DWin32Pro\Out2\Out_3.bmp
............此处省略12个文件信息
- 上一篇:DoozyUI和DoTween双插件
- 下一篇:landsat全国轨道号shp文件
评论
共有 条评论