資源簡介
利用D3D9創(chuàng)建紋理,進行不同D3D9設(shè)備之間的資源共享。

代碼片段和文件信息
#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);?//創(chuàng)建D3D此次不能用Direct3DCreate否則設(shè)置Texture的ShareHandle參數(shù)會失敗。
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?后者會更多的占用內(nèi)存。
if?(hr?!=?D3D_OK)??return?false;
if?(hSharedHandle?==?NULL)
{
//源創(chuàng)建紋理
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
{
//目標創(chuàng)建紋理,格式大小必須與源相同才能共享。
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);//給表面緩沖區(qū)刷上顏色
m_pD3ddev->Present(NULL?NULL?NULL?NULL);//將緩沖區(qū)刷到屏幕上
IDirect3DSurface9*?pBackBuffer;
HRESULT?hr?=?m_pD3ddev->GetBackBuffer(0?0?D3DBACKBUFFER_TYPE_MONO?&pBackBuffer);//取得第一個表面緩沖區(qū)
if?(FAILED(hr))??return;
IDirect3DSurface9*?pSharedSurface?=?NULL;
m_pTexture->GetSurfaceLevel(0?&pSharedSurface);//取得紋理的最上層緩沖區(qū)(創(chuàng)建紋理時只建了一個緩沖區(qū))
hr?=?m_pD3ddev->StretchRect(pBackBuffer?NULL?pSharedSurface?NULL?D3DTEXF_NONE);//表面緩沖區(qū)拷貝到紋理緩沖區(qū)
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文件
評論
共有 條評論