所以我厌倦了“标志”和字节操作,所以这里是汇编代码:
loc_4097F5:
.text:004097F5 cmp [esi+1Bh], dl
.text:004097F8 jnz short loc_409812
.text:004097FA cmp [esi+6], dl
.text:004097FD jnz short loc_409812
.text:004097FF mov ecx, [ebp+490h]
.text:00409805 test cl, 2 ; How to represent this????
.text:00409808 jz short loc_40980F
.text:0040980A test ch, 1 ; How to represent this????
.text:0040980D jz short loc_409812
.text:0040980F loc_40980F:
.text:0040980F mov [esi+25h], dl
.text:00409812 loc_409812:
.text:00409812 mov ecx, [esp+18h+arg_0]
.text:00409816 cmp [ecx+8Ch], eax
这是反编译器产生的伪代码:
v13 = a3->field_454.TextureCaps;
if ( !(v13 & 2) || BYTE1(v13) & 1 )
*(_BYTE *)(v5 + 37) = v3;
任何想法如何为VC ++ 6.0编译器代表这一点(编译此代码)??
编辑:实际上a3-> field_454是D3DCAPS9结构。
答案 0 :(得分:1)
除了反编译版本中已经存在的内容之外,还不确定您还需要什么。
您当然可以查找d3d标头中的TextureCaps
标志位,以便更加了解它。我认为这是正确的:
if (!(TextureCaps & D3DPTEXTURECAPS_POW2) || (TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL))
因此,它正在测试是否无条件支持非二次幂纹理(如果不支持,则条件评估为true
)。
另请参阅相关的msdn page。