Pointers 将数据盒从SlimDX转换为SharpDX(dBox.Data.Write)

Pointers 将数据盒从SlimDX转换为SharpDX(dBox.Data.Write),pointers,sharpdx,data-stream,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> { d

我正在试图找出如何将下面的代码(用于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);

通过SlimDX源代码读取,看起来它们存储的是
数据流
,而SharpDX存储的是
指针
,我不确定如何继续,因为我以前从未使用过指针。如果您能帮助我们实现这一目标,或者找到一种替代方法来达到同样的效果,我们将不胜感激。

因此,我自己已经解决了这个问题,我能够做到这一点的方法是:

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


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

不要忘记在处理完数据流后处理它。
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))   
    )
);