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

在DirectX 11和DirectX 10之间共享纹理,directx,textures,shared,directx-11,directx-10,Directx,Textures,Shared,Directx 11,Directx 10,众所周知,DX11不再支持向屏幕写入文本。我想通过使用DX11创建纹理并将其共享给DX10,这样它就可以使用ID3DX10Font接口绘制纹理。然后使用DX11着色器混合所有内容。尝试使用Dx10打开Dx11创建的纹理时出错。代码如下: D3D11_TEXTURE2D_DESC desc; ZeroMemory(&desc,sizeof(D3D11_TEXTURE2D_DESC)); desc.ArraySize = 1; desc.BindFlags = D3D11_BIND_REND

众所周知,DX11不再支持向屏幕写入文本。我想通过使用DX11创建纹理并将其共享给DX10,这样它就可以使用ID3DX10Font接口绘制纹理。然后使用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设备都是使用驱动程序类型硬件标志创建的,并且都使用R8G8B8A8 UNORM作为后台缓冲区格式。

您不需要处理此类邪恶的黑客行为,因为:

  • ID3DX10Font
    ID3DX10Sprite
    都非常慢而且糟糕
  • 网上有许多图书馆:

    • 来自微软的SpriteFont
    • -超高速
    • 用于OpenGL的吨数(您可以轻松地进行调整)
    • 做你自己的:。会成功的 简单

  • 你不需要对付这些邪恶的黑客,因为:

  • ID3DX10Font
    ID3DX10Sprite
    都非常慢而且糟糕
  • 网上有许多图书馆:

    • 来自微软的SpriteFont
    • -超高速
    • 用于OpenGL的吨数(您可以轻松地进行调整)
    • 做你自己的:。会成功的 简单

  • 这并不能真正回答互操作问题,但它解决了您的问题-中提供了与DX11兼容的Sprite字体实现作为源。这并不能真正回答互操作问题,但它解决了您的问题-中提供了与DX11兼容的Sprite字体实现作为源。