将DataBox从SlimDX转换为SharpDX(dBox.Data.Write)

时间:2014-02-24 19:16:17

标签: pointers sharpdx data-stream

我想弄清楚如何将下面的代码(适用于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,我不确定如何继续,因为我之前从未使用过指针。任何帮助如何使这种工作或替代方法,以实现相同的结果将不胜感激。

1 个答案:

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

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