连续内存,OpenGL,以及如何包装顶点?

joh*_*ers 5 c++ opengl 3d graphics opengl-es

因此,OpenGL编程的一个关键要求是以一种保证连续内存的方式存储顶点.我最近看过专业图形程序员的几本不错的书,他们都使用了相同想法的变体:将顶点打包成struct3 floats,x,y,z,然后将多个顶点打包成c风格阵列或std::vector这些structs.它有效.

但我已经看到它在这个网站上一次又一次地说struct,不保证内存连续性.有人说,如果你的结构包含所有,floats那么它们可能是连续的,但不能保证.arraystd::vector你保证它,但是这无关紧要,如果你正在投入数组或向量是不连续的.

对于生产代码,我希望" 可能 "不会削减它.因此,尽管这两本书中的建议显然更适合学习,但我想知道还有哪些其他好的技术可以方便地组织顶点数据以保证连续的内存,或者,我接受建议我不应该担心这一点,这可能应该足够好了.

图形领域中使用的其他常用和好方法有哪些?

dat*_*olf 5

因此,OpenGL编程的一个关键要求是以一种保证连续内存的方式存储顶点.

不,不是真的.连续的内存节省了空间,但只要属性之间的步幅(以字节为单位)在所有元素之间是相同的,这件事就可以了.

图形领域中使用的其他常用和好方法有哪些?

简单,简单,平面的原始数据类型数组std::vector<float>,或者std::vector<char>如果你只是想要一块内存,你可以手动分配数据.你可以使用getter和setter方法以及抽象偏移量和步幅计算的迭代器接口很好地将它包装在一个类中.

如果可以使用编译器扩展来指定其内存布局,也可以使用结构.例如,GCC __attribute__((packed))将在元素之间形成紧密的结构,而没有间隙.