在 SharpDX 中,如何从 Texture2D 数组绘制到单个 Texture2D?
In SharpDX, how can I draw to a single Texture2D from a Texture2D array?
我目前正在使用 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
}
});
对两个目标的操作仅应用于第一个目标。
为了为纹理数组创建切片视图,视图尺寸应为:
Dimension = RenderTargetViewDimension.Texture2DArray
使用 Texture2D 会成功,但始终附加第一个切片。
我目前正在使用 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
}
});
对两个目标的操作仅应用于第一个目标。
为了为纹理数组创建切片视图,视图尺寸应为:
Dimension = RenderTargetViewDimension.Texture2DArray
使用 Texture2D 会成功,但始终附加第一个切片。