最好保留VEC4而不是VEC3,以避免始终铸造
Better to keep vec4 instead of vec3 to avoid always casting?
我正在使用OpenGL,在我的代码中,我有一些不可读的且令人讨厌的行,例如:
newChild->dposition = dvec_4(dvec_4(newChild->boundingVerts[2].position, 1) + newChild->parent->dposition);
这个想法是在VEC3中保持位置,场景中的许多对象可能构成良好的存储空间,甚至更重要的是减少发送到图形卡的缓冲区的大小。但这确实导致很难阅读铸造和第四个代码,以及我想象的所有演员表都花了一些钱。因此,保留VEC4以避免铸造更好吗?
无需访问所有代码,很难说。但是,我宁愿说使用VEC4可能会带来性能/代码质量好处:
- 猜测数据可能是在GPU上使用的,与VEC3相比,加载/存储VEC4的效率可能更有效。我不确定,但是我认为没有一个指令加载VEC3。我认为它将被分解为加载vec2和浮标。
- 稍后,您可以轻松地将一些其他数据存储到该附加的浮标中。
- 更少的铸造和使代码更可读。
- 取决于结构的内存布局/成员类型,可能是使结构与16个字节保持一致。
如果出了问题,请纠正我。
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 为多个会话保留XPtr
- 保留对其他类的成员函数的引用
- 指针保留字符串
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 如何让 GCC/Clang 在保留标识符上出错
- 必须为 C++20 协程帧保留多少内存?
- 如何将一个窗口保留在另一个应用程序窗口的前面
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 局部变量保留函数中的值
- 保留函数指针模板参数
- 变量超出范围后如何保留向量值?
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 当为可变性配置时,boost::heap::d_ary_heap 保留的额外 std::list 的目的是什么?
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- 即使在使用 delete[] 后仍保留的元素
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 将成员函数保留为未定义
- C++:如何为多个重载函数保留通用代码路径?
- 最好保留VEC4而不是VEC3,以避免始终铸造