我在 PowerVR 网格绘图代码中找到了这个,但我真的不知道如何阅读它。
&((unsigned short*)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]
这里发生了什么?这是对 void 的引用,强制转换为无符号短指针,然后偏移 (3*mesh(etc...) + batchNum) 吗?这让我伤透了脑筋。
它是在 glDrawElements 调用的上下文中找到的:
glDrawElements(GL_TRIANGLES, i32Tris * 3, GL_UNSIGNED_SHORT,
&((unsigned short*)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]);
让我们从内到外看看。
(unsigned short*)0
这是铸造0
到无符号短指针。这将用于计算内存偏移量,根据无符号短整型的大小计算。
3 * mesh.sBoneBatches.pnBatchOffset[batchNum]
这大概是某批三角形在内存中的偏移量。三角形由 3 个短裤组成,因此看起来它们存储了三角形数量的偏移量,然后乘以 3 即可得到短裤的数量。
((unsigned short*)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]
现在正在使用这个0
查找给定偏移量的内存位置的指针。这通常会返回该内存位置的值,但他们希望将指针传递到 glDrawElements 中,因此使用&
运算符来获取指向该内存位置的指针:
&((unsigned short*)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)