C# SharpDX:从数据流初始化Texture2D失败(尽管Texture2D工作正常)

C# SharpDX:从数据流初始化Texture2D失败(尽管Texture2D工作正常),c#,directx,textures,directx-11,sharpdx,C#,Directx,Textures,Directx 11,Sharpdx,我试图从内存中的数据创建SharpDX.Direct3D11.Texture2D,但始终会得到一个SharpDXException(HRESULT:0x80070057,“参数不正确”)。在此之前,我使用了纹理1d,可以毫无问题地创建纹理1d 我已将代码缩减为此示例,该示例仍会生成异常: 使用(var device=新设备(DriverType.Hardware,DeviceCreationFlags.Debug)){ //例如,空流就足够了 var stream=新数据流(16*4,真,真);

我试图从内存中的数据创建SharpDX.Direct3D11.Texture2D,但始终会得到一个SharpDXException(HRESULT:0x80070057,“参数不正确”)。在此之前,我使用了纹理1d,可以毫无问题地创建纹理1d

我已将代码缩减为此示例,该示例仍会生成异常:

使用(var device=新设备(DriverType.Hardware,DeviceCreationFlags.Debug)){
//例如,空流就足够了
var stream=新数据流(16*4,真,真);
var description1D=新纹理1描述(){
宽度=16,
ArraySize=1,
Format=Format.R8G8B8A8_UNorm,
MIP级别=1,
};
使用(var texture1D=new texture1D(设备,description1D,new[]{new DataBox(stream.DataPointer)})){
//纹理1d没有例外
}
var description2D=新纹理2ddescription(){
宽度=8,
高度=2,
ArraySize=1,
MIP级别=1,
Format=Format.R8G8B8A8_UNorm,
SampleDescription=新的SampleDescription(1,0),
};
使用(var texture2D=new texture2D(设备,description2D,new[]{new DataBox(stream.DataPointer)})){
//HRESULT:[0x80070057],模块:[未知],ApiCode:[未知/未知],消息:参数不正确。
}
}

在不传递数据的情况下创建纹理效果良好。有人能告诉我如何修复Texture2D初始化吗?

您需要将texture 2D的行跨距传递到数据框中。比如:

new DataBox(stream.DataPointer, 8 * 4)
或者以更一般的方式:

new DataBox(stream.DataPointer, description2D.Width
            * (int)FormatHelper.SizeOfInBytes(description2D.Format))

谢谢,它现在可以工作了:)实际上没有相应的构造函数,只有
新的数据盒(datapointer、rowPitch、slicePitch)
。我假设slicePitch用于纹理数组,应该设置为纹理的大小?第三个参数用于Texture3D(它表示Z切片的字节大小),对于Texture2D应该设置为0。Texture1D不关心这些参数,因为整个信息已经存储在Texture1DDescription中(它只是使用width*sizeof(pixelFormat))。MSDN文档对此进行了解释:我想我已经全部掌握了(包括DataRectangle和DataBox之间的区别)。感谢您的支持和SharpDX!