2

インメモリ データから SharpDX.Direct3D11.Texture2D を作成しようとしていますが、常に SharpDXException (HRESULT: 0x80070057、「パラメーターが正しくありません。」) が発生します。問題なく作成できる前に、この目的のために Texture1D を使用しました。

コードをこのサンプルに減らしましたが、それでも例外が発生します。

using (var device = new Device(DriverType.Hardware, DeviceCreationFlags.Debug)) {
    // empty stream sufficient for example
    var stream = new DataStream(16 * 4, true, true);

    var description1D = new Texture1DDescription() {
        Width = 16,
        ArraySize = 1,
        Format = Format.R8G8B8A8_UNorm,
        MipLevels = 1,
    };
    using (var texture1D = new Texture1D(device, description1D, new[] { new DataBox(stream.DataPointer) })) {
        // no exception on Texture1D
    }

    var description2D = new Texture2DDescription() {
        Width = 8,
        Height = 2,
        ArraySize = 1,
        MipLevels = 1,
        Format = Format.R8G8B8A8_UNorm,
        SampleDescription = new SampleDescription(1, 0),
    };
    using (var texture2D = new Texture2D(device, description2D, new[] { new DataBox(stream.DataPointer) })) {
        // HRESULT: [0x80070057], Module: [Unknown], ApiCode: [Unknown/Unknown], Message: The parameter is incorrect.
    }
}

データを渡さずにテクスチャを作成するとうまくいきます。Texture2D の初期化を修正する方法を教えてもらえますか?

4

1 に答える 1

9

テクスチャ 2D の行ストライドを DataBox に渡す必要があります。何かのようなもの:

new DataBox(stream.DataPointer, 8 * 4)

または、より一般的な方法で:

new DataBox(stream.DataPointer, description2D.Width
            * (int)FormatHelper.SizeOfInBytes(description2D.Format))
于 2012-11-07T01:24:24.967 に答える