帮我评估这个演员

spe*_*wah 3 c++ opengl

我在PowerVR网格绘图代码中发现了这一点,我真的不知道如何阅读它.

&((unsigned short*)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?这是对无效转换的引用作为无符号短指针然后偏移(3*mesh(etc ...)+ batchNum)?它打破了我的大脑.

它是在glDrawElements调用的上下文中找到的:

glDrawElements(GL_TRIANGLES, i32Tris * 3, GL_UNSIGNED_SHORT, 
               &((unsigned short*)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]);
Run Code Online (Sandbox Code Playgroud)

Bri*_*ell 6

让我们从里到外.

(unsigned short*)0
Run Code Online (Sandbox Code Playgroud)

这是0一个无符号短指针.这将用于计算根据无符号短路的大小计算的存储器偏移.

3 * mesh.sBoneBatches.pnBatchOffset[batchNum]
Run Code Online (Sandbox Code Playgroud)

据推测,这是一些三角形的记忆偏移.三角形由3个短裤组成,因此看起来它们以三角形数量存储偏移量,然后乘以3得到短路数量.

((unsigned short*)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]
Run Code Online (Sandbox Code Playgroud)

现在使用该0指针来查找给定偏移的内存位置.这通常会返回该内存位置的值,但是它们需要一个指针传递给glDrawElements,因此使用&运算符来获取指向该内存位置的指针:

&((unsigned short*)0)[3 * mesh.sBoneBatches.pnBatchOffset[batchNum]]
Run Code Online (Sandbox Code Playgroud)