В настоящее время я экспериментирую с OpenGL (через OpenTK) в C #.
Я просмотрел несколько уроков и часто обнаруживал, что структуры используются для
описать вершину.
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;
}
}
Тогда я спросил себя, почему они не используют функцию sizeof () C #
и заметил, что он не работает на конструкциях из-за упаковки или около того.
Хорошо, но разве это не проблема? Если я думаю правильно, использование GL.BufferData для загрузки массива ColoredVertex в GPU с шагом ColoredVertex.Size может привести к неправильной интерпретации данных, поскольку 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)