C++:OpenGL,glm和结构填充



我可以安全地使用 glm::* 类型(例如 vec4、mat4)来填充顶点缓冲区对象吗?

std::vector<glm::vec3> vertices;    
glBufferData(GL_ARRAY_BUFFER,  sizeof(glm::vec3) * vertices.size(), &vertices[0], GL_STATIC_DRAW);

不太确定这一点,因为在我看来,结构填充(成员对齐)可能会造成一些麻烦,尽管我测试过的所有编译器都返回预期的大小。

我正在为 C++11 编译器开发(也许这会有所作为)。

定义"safe"。

C++ 为实现提供了他们认为合适的填充结构的广泛自由度。因此,就 ISO C++而言,这是否"有效"是依赖于实现的行为。

它通常适用于桌面平台的许多编译器。我不能代表 ARM CPU,但一般来说,glm::vec3的大小将是 3 个浮点数。但是,如果要确保,则始终可以执行简单的static_assert

static_assert(sizeof(glm::vec3) == sizeof(GLfloat) * 3, "Platform doesn't support this directly.");

是的,glm 是专门为此而设计和构建的。

最新更新