gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:19:53 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

定义“安全”。

C++ 为实现提供了广泛的填充结构,因为它们认为合适。所以就 ISO C++ 而言,这是否“有效”是依赖于实现的行为。

它通常适用于桌面平台的许多编译器。我不能说 ARM CPU,但一般来说,glm::vec3 的大小是 3 个 float 。但是,如果你想确保,你总是可以执行一个简单的 static_assert:

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

关于C++:OpenGL、glm 和结构填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13571898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com