c# - 来自 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 部分有一些误解。宽度和高度是硬编码的,用于测试目的并适合我生成的图像的大小
希望有人可以给我一些提示。
谢谢并恭祝安康
解决方案
推荐阅读
- node.js - 使用 babel-preset-env 进行转译,而不从 create-react-app 中弹出
- android - MyFragmentPagerAdapter 以“奇怪”的方式显示错误的数据,从位置 0 的位置 1 的数据开始,然后仅在位置 1 其余的
- docker - 使用 cgroups 限制每个 docker 容器的默认 CPU 数量
- css - Chrome 中的 CSS 渐变模糊
- python - 我应该将参数作为继承对象吗?
- android - Android 异步从数据库中获取数据
- javascript - 将数组中所有对象的单个字段复制到单个数组中
- java - 如何用设定的单词数制作原始图像的词云?
- arrays - 将数组打印到可变单元格范围VBA
- groovy - Groovy 的“它”是什么?