0

所以我很讨厌那些“标志”和字节操作,所以这里是汇编代码:

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 结构。

4

1 回答 1

1

除了反编译版本中已经存在的内容之外,不确定您还需要什么。您当然可以在 d3d 标头中查找TextureCaps标志位,以更了解这一点。我相信这是正确的:

if (!(TextureCaps & D3DPTEXTURECAPS_POW2) || (TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL))

因此,它正在测试是否无条件支持非二次幂纹理(条件评估为true是否支持)。另请参阅相关的msdn 页面

于 2012-11-18T15:46:20.673 回答