首页 > 解决方案 > 来自 DataStream 的 SharpDX Texture2D

问题描述

我想在 VR 中展示我的一个 WPF 应用程序,但在直接从数据流渲染覆盖纹理时遇到了一个小问题。纹理未正确显示。

首先,我将我的 WPF 应用程序渲染为位图并将其保存到流中:

      RenderTargetBitmap bitmap = new RenderTargetBitmap((int)visual.ActualWidth, (int)visual.ActualHeight, 96, 96, PixelFormats.Pbgra32);
        bitmap.Render(visual);
        BitmapFrame frame = BitmapFrame.Create(bitmap);
        encoder.Frames.Add(frame);
        m_vrStream.Position = 0;
        encoder.Save(m_vrStream);

我不想在 VR 部分使用 Unity,所以我切换到 SharpDX 并创建了一个新的 Texture2D。

 var description2D = new Texture2DDescription()
 {
    Width = 1920,
    Height = 1080,
    ArraySize = 1,
    MipLevels = 1,
    Format = SharpDX.DXGI.Format.R8G8B8A8_UNorm,
    SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
 };

 m_texture = new Texture2D(m_device, description2D, new[] { new SharpDX.DataBox(m_dataStream.DataPointer,description2D.Width
            * (int)FormatHelper.SizeOfInBytes(description2D.Format),0)});

这总是会带来 System.AccessViolationException。如果我降低 Texture2DDescription 中的宽度和高度,纹理会显示但不正确(随机彩色像素)。如果我首先将数据流保存到 .png 文件中并使用

m_texture = TextureLoader.CreateTexture2DFromBitmap(m_device, TextureLoader.LoadBitmap(new SharpDX.WIC.ImagingFactory2(), "test.png"));

一切看起来都很好。

我是图形编程的新手,我相信我对 Texture2DDescription 部分有一些误解。宽度和高度是硬编码的,用于测试目的并适合我生成的图像的大小

希望有人可以给我一些提示。

谢谢并恭祝安康

标签: c#sharpdx

解决方案


推荐阅读