繁体   English   中英

C ++:OpenGL,glm和struct padding

[英]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.

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