• 大小: 7.95MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-06
  • 语言: 其他
  • 标签: D3D9  

资源简介

利用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个文件信息

评论

共有 条评论