Directx Windows7中的D3D9和D3D9Ex表面共享
目的是尝试在两个不同版本的不同d3d设备之间共享表面,一个是d3d9,另一个是d3d9Ex或更高版本 基于MSDN文档,其中说明您可以从中执行此操作 Direct3D资源现在可以在设备或进程之间共享。这适用于任何Direct3D资源,包括纹理、顶点缓冲区、索引缓冲区或曲面(例如渲染目标、深度模具缓冲区或屏幕外平面曲面) 也基于MSDN文档,其中说明您不能从 Direct3D 10.0、Direct3D 9c和较早版本的Direct3D运行时不支持共享曲面。系统内存拷贝将继续用于与基于GDI或DXGI的API的互操作性 验证就是自己尝试,因此代码:Directx Windows7中的D3D9和D3D9Ex表面共享,directx,direct3d,directx-9,Directx,Direct3d,Directx 9,目的是尝试在两个不同版本的不同d3d设备之间共享表面,一个是d3d9,另一个是d3d9Ex或更高版本 基于MSDN文档,其中说明您可以从中执行此操作 Direct3D资源现在可以在设备或进程之间共享。这适用于任何Direct3D资源,包括纹理、顶点缓冲区、索引缓冲区或曲面(例如渲染目标、深度模具缓冲区或屏幕外平面曲面) 也基于MSDN文档,其中说明您不能从 Direct3D 10.0、Direct3D 9c和较早版本的Direct3D运行时不支持共享曲面。系统内存拷贝将继续用于与基于GDI或DX
HANDLE SharedHandle = NULL;
IDirect3DTexture9 *d3d9Tex;
pD3D9Dev->CreateTexture(Width, Height, 1, D3DUSAGE_RENDERTARGET, Format, D3DPOOL_DEFAULT, &d3d9Tex, &SharedHanlde);
if(FAILED(hr))
{
LOG("failed %s %s", GetD3DErrorString(hr), CNGetErrorString(GetLastError()));
}
IDirect3DTexture9 *d3d9ExTex;
pD3D9DevEx->CreateTexture(Width, Height, 1, D3DUSAGE_RENDERTARGET, Format, D3DPOOL_DEFAULT, &d3d9ExTex, &SharedHanlde);
if(FAILED(hr))
{
LOG("failed %s %s", GetD3DErrorString(hr), CNGetErrorString(GetLastError()));
}
其中:
Direct3D9: (ERROR) :Device is not capable of sharing resource. CreateTexture fails.
CreateRenderTarget提供相同的结果
我对结果非常失望,我的问题是,资源共享是否真的适用于d3d9,还是我错过了我应该做的事情
- Direct3D 11、Direct2D和Direct3D 10.1支持同步曲面共享
- Direct3D 9Ex支持非同步表面共享
- Direct3D 10.0、Direct3D 9c和较早版本的Direct3D运行时不支持曲面共享
如果要将D3D9Ex设备存储到D3D9设备的指针中,请使用IID_IDirect3DDevice9的QueryInterface。谢谢。我认为你是对的。我的印象是,由于最初的文档是关于d3d9ex的,所以表面共享是在d3d9和d3d9ex之间进行的。