【问题标题】:Converting DataBox from SlimDX to SharpDX (dBox.Data.Write)将 DataBox 从 SlimDX 转换为 SharpDX (dBox.Data.Write)
【发布时间】:2014-03-01 01:28:50
【问题描述】:

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

【问题讨论】:

    标签: pointers sharpdx data-stream


    【解决方案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))   
        )
    );
    

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

    【讨论】:

    • 完成后不要忘记处理 DataStream。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多