首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用QVector<QVector3D>填充VBO

用QVector<QVector3D>填充VBO
EN

Stack Overflow用户
提问于 2014-04-23 16:25:50
回答 1查看 1.1K关注 0票数 0

我在一个教程中看到,您可以使用这样的std::vector<glm::vec3>直接填充VBO:

代码语言:javascript
复制
std::vector< glm::vec3 > vertices;
// fill the vector and create VBO
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW);

现在,我想知道我是否可以用QVector<QVector3D>来做同样的事情。QVector可以代替std::vector,因为它们的内存是连续的。但是QVector3Dglm::vec3都是非POD的(如果我错了,请纠正我),并且不知何故glm::vec3起作用了。这是标准行为吗?我能试着用QVector3D做同样的事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-23 17:15:52

我不愿意以这种方式使用glm::vec3 3,因为我不记得有任何文档指定了它的内部布局。事实上,在glm::value_ptr(obj)中定义了一个type_ptr.hpp (Obj)助手,这使我更加怀疑。

尽管如此,您可以检查它的源代码,并自己验证它确实有3个浮动,没有额外的字段,还可以在编译时检查== 3的大小(glm::vec3),以防struct做任何有趣的事情。

粗略地查看一下QVector3D的文档不会显示任何内部内存布局的指示。因此,与glm::vec3 3一样,您需要检查其源代码,以验证x、y、z是否按您所期望的顺序排列,然后验证(QVector3d) == sizeof(GLfloat) *3的大小。

还请记住,虽然它可能工作在您的特定编译器/平台,YMMV,如果试图移植到其他平台。或者就这一点而言,如果更新到任何一个库的新版本。

编辑:关于OP上关于POD的评论,我不认为这实际上是相关的?“琐碎”和“标准布局”都不意味着类中没有额外的字段用于簿记,也没有任何关于填充的内容,而且我不确定您是否能够根据发布的文档首先保证这两种分类。trivial vs. standard layout vs. POD

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23250160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档