[英]C++: OpenGL, glm and struct padding
我可以安全地使用glm :: *类型(例如vec4,mat4)来填充顶点缓冲区对象吗?
std::vector<glm::vec3> vertices;
glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec3) * vertices.size(), &vertices[0], GL_STATIC_DRAW);
我不太确定,因为在我看来,struct padding(成员对齐)可能会导致一些麻烦,尽管我测试的所有编译器都会返回预期的大小。
我正在为C ++ 11编译器开发(也许这会有所不同)。
定义“安全”。
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专为此目的而设计和制造。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.