最好保留VEC4而不是VEC3,以避免始终铸造

Better to keep vec4 instead of vec3 to avoid always casting?

本文关键字:VEC3 保留 VEC4      更新时间:2023-10-16

我正在使用OpenGL,在我的代码中,我有一些不可读的且令人讨厌的行,例如:

newChild->dposition = dvec_4(dvec_4(newChild->boundingVerts[2].position, 1) + newChild->parent->dposition);

这个想法是在VEC3中保持位置,场景中的许多对象可能构成良好的存储空间,甚至更重要的是减少发送到图形卡的缓冲区的大小。但这确实导致很难阅读铸造和第四个代码,以及我想象的所有演员表都花了一些钱。因此,保留VEC4以避免铸造更好吗?

无需访问所有代码,很难说。但是,我宁愿说使用VEC4可能会带来性能/代码质量好处:

  • 猜测数据可能是在GPU上使用的,与VEC3相比,加载/存储VEC4的效率可能更有效。我不确定,但是我认为没有一个指令加载VEC3。我认为它将被分解为加载vec2和浮标。
  • 稍后,您可以轻松地将一些其他数据存储到该附加的浮标中。
  • 更少的铸造和使代码更可读。
  • 取决于结构的内存布局/成员类型,可能是使结构与16个字节保持一致。

如果出了问题,请纠正我。