繁体   English   中英

什么是OpenGL(OpenTK)中顶点表示的C#结构大小?

[英]Whats the sizeof C# structs for vertex representation in OpenGL (OpenTK)?

目前我正在用C#试验OpenGL(通过OpenTK)。 我查看了几个教程并经常发现,结构用于描述顶点。

struct ColoredVertex
{
    public const int Size = (3 + 4) * 4;

    private readonly Vector3 position;
    private readonly Color4 color;

    public ColoredVertex(Vector3 position, Color4 color)
    {
        this.position = position;
        this.color = color;
    }
}

然后我问自己为什么他们不使用C#的sizeof()函数并注意到,由于打包等原因它不适用于结构。

好的,但这不是问题吗? 如果我认为是正确的,使用GL.BufferData将ColoredVertex数组上传到具有GranVertex.Size步长的GPU可能会导致错误的数据解释,因为CLR可能决定对结构数组使用不同的打包,我对吗?

那么告诉OpenGL有关Vertex布局的最佳方法是什么? 像编译器那样使用Marshal.sizeof或不安全块?

CS0233  'Vec3' does not have a predefined size, therefore sizeof can
only be used in an unsafe context (consider using
System.Runtime.InteropServices.Marshal.SizeOf)

[StructLayout(LayoutKind.Explicit)]属性应用于结构,然后将[FieldOffset(n)]应用于每个字段,以将其定位在所选的字节位置n

这使您可以对位置进行细粒度控制,并且因为C#中基元类型的大小不依赖于平台(64 vs 32位),它也会告诉您大小和完整布局。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM