在SharpDX中,如何从Texture2D数组绘制到单个Texture2D?

时间:2017-07-10 17:21:14

标签: c# directx directx-11 sharpdx

我目前正在使用SharpDX开发Windows混合现实应用程序,从另一个VR应用程序平台转换。在混合现实中,API要求用户绘制一个提供的后缓冲区,该缓冲区是大小为2的Texture2D数组(每只眼睛一个元素),但VR框架要求用户绘制两个手动提交的单独纹理。

最好,我希望能够将此数组中的每个单独纹理元素作为单独的Texture2D提取,这样我的VR后端仍然可以正常地绘制到这些纹理。混合现实样本应用程序在此方向上没有提供任何帮助,因为它使用实例化绘制调用一次绘制到两个纹理。是否有可能在DirectX中获取对单个纹理的引用,或者我是否必须更改后端才能使用该数组?

编辑:根据文档,我发现RenderTargetViews似乎是渲染到一个资源的方式,就好像它是一个不同的资源,包括渲染到数组切片如果它是一个单一的纹理。但是,当我使用此格式创建两个渲染目标视图时,

RenderTargetView l_target_view = new RenderTargetView(cameraBackBuffer.Device, cameraBackBuffer, new RenderTargetViewDescription()
{
    Format = (SharpDX.DXGI.Format)parameters.Direct3D11BackBuffer.Description.Format,
    Dimension = RenderTargetViewDimension.Texture2D,
    Texture2DArray = new RenderTargetViewDescription.Texture2DArrayResource()
    {
        ArraySize = 1,
        FirstArraySlice = 0
    }
});
RenderTargetView r_target_view = new RenderTargetView(cameraBackBuffer.Device, cameraBackBuffer, new RenderTargetViewDescription()
{
    Format = (SharpDX.DXGI.Format)parameters.Direct3D11BackBuffer.Description.Format,
    Dimension = RenderTargetViewDimension.Texture2D,
    Texture2DArray = new RenderTargetViewDescription.Texture2DArrayResource()
    {
        ArraySize = 1,
        FirstArraySlice = 1
    }
});

两个目标的操作仅适用于第一个目标。

1 个答案:

答案 0 :(得分:1)

要为纹理数组创建切片视图,视图尺寸应为:

Dimension = RenderTargetViewDimension.Texture2DArray

使用Texture2D会成功,但总是会附加第一个切片。