我开始在c#中使用directx和slimdx包装器。对于许多方法,有必要计算对象的大小,例如在缓冲区和绘制调用的情况下。特别是,“步幅”是连续元素之间的字节数。
到目前为止,我传递的数据是一个长度为12个字节的Vector3。因此,使用的缓冲区大小是元素数量* 12.在这个简单的情况下,很容易看出大小应该是多少。但是,如何计算更复杂的例子呢?例如:
struct VertexType
{
public Vector3 position;
public Vector4 color;
}
这是(12 + 16)大小?它是否在结构中排列的事实是否会添加任何元素的大小?
我尝试过使用sizeof,但这会引发一个错误,指出该对象不是预定的大小。什么是正确的方法?
答案 0 :(得分:0)
尝试Marshal.SizeOf - http://msdn.microsoft.com/en-us/library/System.Runtime.InteropServices.Marshal.SizeOf(v=vs.110).aspx
using System.Runtime.InteropServices;
VertexType v = new VertexType;
Marshal.SizeOf(typeof(VertexType)); //For the type
Marshal.SizeOf(v); //For an instance