directx - 在 DirectX 11 和 DirectX 10 之间共享纹理

标签 directx textures shared directx-11 directx-10

众所周知,DX11不再支持向屏幕写入文本。我想通过使用 DX11 创建纹理并将其共享给 DX10 来实现这一点,这样它就可以使用 ID3DX10Font 接口(interface)进行绘制。然后使用 DX11 着色器混合所有内容。尝试使用 Dx10 打开 Dx11 创建的纹理时出现错误。这是代码:

D3D11_TEXTURE2D_DESC desc;
ZeroMemory(&desc,sizeof(D3D11_TEXTURE2D_DESC));
desc.ArraySize = 1;
desc.BindFlags = D3D11_BIND_RENDER_TARGET;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.Height = 480;
desc.Width = 640;
desc.MipLevels = 1;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX;


Globals::hr = D3D10CreateDevice(0,D3D10_DRIVER_TYPE_HARDWARE,0,0,D3D10_SDK_VERSION,&Globals::pD3D10Device);
Globals::hr = Globals::pD3D11Device->CreateTexture2D(&desc,0,&Globals::backBuffer10);

//keyed mutex for DX11 device
Globals::hr = Globals::backBuffer10->QueryInterface(__uuidof(IDXGIKeyedMutex),(void**)(&Globals::mutex11));

//Get the shared handle so that DX10 can render on texture
IDXGIResource *sharedResource10;
Globals::hr = Globals::backBuffer10->QueryInterface(__uuidof(IDXGIResource),(void**)(&sharedResource10));
Globals::hr = sharedResource10->GetSharedHandle(&Globals::sharedHandle);
sharedResource10->Release();

//open texture for DX10
IDXGISurface *sharedSurface10;
ID3D10Texture2D *sharedTexture10;
Globals::hr = Globals::pD3D10Device->OpenSharedResource(Globals::sharedHandle,__uuidof(IDXGISurface),(void**)(&sharedSurface10));

我从代码的最后一行得到了 E_INVALIDARGS。有什么想法吗? DX11 和 DX10 设备都是使用 DRIVER_TYPE_HARDWARE 标志创建的,并且都具有 R8G8B8A8_UNORM 作为后台缓冲区格式。

最佳答案

您不需要应对此类邪恶的黑客攻击,因为:

  1. ID3DX10FontID3DX10Sprite 真的很慢而且很糟糕
  2. 网络上有很多库:

关于directx - 在 DirectX 11 和 DirectX 10 之间共享纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868677/

相关文章:

c++ - 为什么 EndScene Hook 需要参数?

swift - for循环中的额外数据

intellij-idea - 在 JetBrains 工具中,如何在多个开发人员之间共享 IDE 和项目设置?

c++ - 智能指针 - 程序终止时的段错误

c++ - DirectX 11 和 FreeType

c - 处理位图 header

c# - DirectX 教程/书籍

javascript - 纹理未加载到 webgl 中。从 2D Canvas 读取和操作,存储在数组中

java - 使用纹理对象使用 JOGL 进行基本纹理绘制

c++ - ram 中的共享内存或命名管道?