Directx SharpDX:是否从D3D10.Texture2D创建D3D11.Texture2D?

Directx SharpDX:是否从D3D10.Texture2D创建D3D11.Texture2D?,directx,sharpdx,Directx,Sharpdx,我正在使用SharpDX并尝试创建一个D3D11.Texture2D,它指向与现有D3D10.Texture2D相同的数据。我想我需要得到一个DXGI.Surface,并使用它来创建新的纹理,但我总是会遇到这样一个毫无帮助的错误: HRESULT:[0x80070057],模块:[未知],ApiCode:[未知/未知],消息:参数不正确 以下是我当前编译但不起作用的代码: private D3D11.Texture2D CreateD3D11Texture2D(D3D10.Texture2D d

我正在使用SharpDX并尝试创建一个
D3D11.Texture2D
,它指向与现有
D3D10.Texture2D
相同的数据。我想我需要得到一个
DXGI.Surface
,并使用它来创建新的纹理,但我总是会遇到这样一个毫无帮助的错误:

HRESULT:[0x80070057],模块:[未知],ApiCode:[未知/未知],消息:参数不正确

以下是我当前编译但不起作用的代码:

private D3D11.Texture2D CreateD3D11Texture2D(D3D10.Texture2D d3d10Texture2D)
{
    var texDesc = new D3D11.Texture2DDescription
    {
        ArraySize = 1,
        BindFlags = D3D11.BindFlags.ShaderResource | D3D11.BindFlags.UnorderedAccess,
        CpuAccessFlags = D3D11.CpuAccessFlags.None,
        Format = DXGI.Format.B8G8R8A8_UNorm,
        Height = d3d10Texture2D.Description.Height,
        MipLevels = 1,
        OptionFlags = D3D11.ResourceOptionFlags.None,
        SampleDescription = new DXGI.SampleDescription(1, 0),
        Usage = D3D11.ResourceUsage.Default,
        Width = d3d10Texture2D.Description.Width
    };

    SharpDX.DataRectangle dataRectangle;
    using (var surface = d3d10Texture2D.QueryInterface<DXGI.Surface>())
    {
        int pitch = d3d10Texture2D.Description.Width
            * (int)DXGI.FormatHelper.SizeOfInBytes(d3d10Texture2D.Description.Format);
        dataRectangle = new SharpDX.DataRectangle(surface.NativePointer, pitch);
    }

    return new D3D11.Texture2D(this.d3d11Device, texDesc, dataRectangle);
}

它似乎起作用了。这是最好的方法吗?

要在多个纹理之间共享数据,请获取一个
DXGI.Resource
接口,然后调用
OpenSharedResource()
。以下是如何使用SharpDX:

private D3D11.Texture2D CreateD3D11Texture2D(D3D10.Texture2D d3d10Texture2D)
{
    using (var resource = d3d10Texture2D.QueryInterface<DXGI.Resource>())
    {
        return this.d3d11Device.OpenSharedResource<D3D11.Texture2D>(resource.SharedHandle);
    }
}
private D3D11.Texture2D创建D3D11Texture2D(D3D10.Texture2D d3d10Texture2D)
{
使用(var resource=d3d10Texture2D.QueryInterface())
{
返回此.d3d11设备.OpenSharedResource(resource.SharedHandle);
}
}

有关在不同DirectX设备之间共享曲面的更多一般信息,请转到另一个问题。

要在多个纹理之间共享数据,请获取
DXGI.Resource
接口,然后调用
OpenSharedResource()
。以下是如何使用SharpDX:

private D3D11.Texture2D CreateD3D11Texture2D(D3D10.Texture2D d3d10Texture2D)
{
    using (var resource = d3d10Texture2D.QueryInterface<DXGI.Resource>())
    {
        return this.d3d11Device.OpenSharedResource<D3D11.Texture2D>(resource.SharedHandle);
    }
}
private D3D11.Texture2D创建D3D11Texture2D(D3D10.Texture2D d3d10Texture2D)
{
使用(var resource=d3d10Texture2D.QueryInterface())
{
返回此.d3d11设备.OpenSharedResource(resource.SharedHandle);
}
}
有关在不同DirectX设备之间共享曲面的更多一般信息,请转到另一个问题