帮我评估一下这个选角

2024-03-10

我在 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(使用前将#替换为@)

帮我评估一下这个选角 的相关文章

随机推荐