1

我试图弄清楚如何将下面的代码(用于 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 存储了 a pointer,我不确定如何继续,因为我以前从未使用过指针。任何有关如何使其工作或实现相同结果的替代方法的帮助将不胜感激。

4

1 回答 1

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))   
    )
);

希望这有助于其他可能有类似问题的人。

于 2014-02-28T17:28:50.277 回答