我想弄清楚如何将下面的代码(适用于SlimDX)转换为SharpDX。
var texure2d = new Texture2D(_device, texDesc);
var dbox = _deviceContext.MapSubresource(texure2d, 0, MapMode.WriteDiscard, MapFlags.None);
foreach (var thisColor4 in color) // color is a List<Color4>
{
dbox.Data.Write((byte)(thisColor4.Red * 255));
dbox.Data.Write((byte)(thisColor4.Green * 255));
dbox.Data.Write((byte)(thisColor4.Blue * 255));
dbox.Data.Write((byte)(0));
}
_deviceContext.UnmapSubresource(texure2d, 0);
我对DataRectagle也有类似的问题:
var heightMapTexure = new Texture2D(device, textureDesc,
new DataRectangle(
HeightMapWidth * Marshal.SizeOf(typeof(Half)), // Pitch
new DataStream(hmap.ToArray(), false, false) // dataStream
)
);
通过SlimDX源读取它看起来像是存储DataStreams
而SharpDX存储pointer
,我不确定如何继续,因为我之前从未使用过指针。任何帮助如何使这种工作或替代方法,以实现相同的结果将不胜感激。
答案 0 :(得分:1)
所以我自己想出来了,我能做到这一点的方式是:
DataStream mappedResource;
deviceContext.MapSubresource(texure2d, 0, MapMode.WriteDiscard, MapFlags.None, out mappedResource);
foreach (var thisColor4 in color)
{
mappedResource.Write((byte)(thisColor4.Red * 255));
mappedResource.Write((byte)(thisColor4.Green * 255));
mappedResource.Write((byte)(thisColor4.Blue * 255));
mappedResource.Write((byte)(0));
}
deviceContext.UnmapSubresource(texure2d, 0);
var heightMapTexure = new Texture2D(device, textureDesc,
new DataRectangle(
DataStream.Create(hmap.ToArray(), false, false).DataPointer,
HeightMapWidth * Marshal.SizeOf(typeof(Half))
)
);
希望这有助于其他可能有类似问题的人。