C++:OpenGL,glm和struct padding

Kr0*_*r0e 12 c++ opengl vertex-buffer c++11

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

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

我不太确定,因为在我看来,struct padding(成员对齐)可能会导致一些麻烦,尽管我测试的所有编译器都会返回预期的大小.

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

Nic*_*las 8

定义"安全".

C++为它们认为合适的填充结构提供了宽泛的实现.因此,就ISO C++而言,这种"有效"是否依赖于实现行为.

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

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