D3D9 GetTransform无法运行Windows XP

时间:2014-01-28 22:14:22

标签: directx windows-xp hook

在我的DrawIndexedPrimite函数中,我有:

myDevice->GetTransform( D3DTS_VIEW, &view_matrix );
myDevice->GetTransform( D3DTS_PROJECTION, &proj_matrix );
myDevice->GetTransform( D3DTS_WORLD, &world_matrix );
myDevice->GetViewport( &d3dvp );

这在Windows 7上运行正常:

View Matrix:
     view_matrix._11 : -1
     view_matrix._12 : -8.74095e-008
     view_matrix._13 : -0
     view_matrix._14 : 0
     view_matrix._21 : 8.73962e-008
     view_matrix._22 : -0.999848
     view_matrix._23 : -0.0174524
     view_matrix._24 : 0
     view_matrix._31 : -1.5255e-009
     view_matrix._32 : 0.0174524
     view_matrix._33 : -0.999848
     view_matrix._34 : 0
     view_matrix._41 : -32.4
     view_matrix._42 : 23.3582
     view_matrix._43 : 39.061
     view_matrix._44 : 1
Projection Matrix:
     proj_matrix._11 : 1.19175
     proj_matrix._12 : 0
     proj_matrix._13 : 0
     proj_matrix._14 : 0
     proj_matrix._21 : 0
     proj_matrix._22 : 1.60573
     proj_matrix._23 : 0
     proj_matrix._24 : 0
     proj_matrix._31 : -0
     proj_matrix._32 : -0
     proj_matrix._33 : 1.00025
     proj_matrix._34 : 1
     proj_matrix._41 : 0
     proj_matrix._42 : 0
     proj_matrix._43 : -0.125031
     proj_matrix._44 : 0
World Matrix:
     world_matrix._11 : 0.0245525
     world_matrix._12 : -0.00470921
     world_matrix._13 : 0
     world_matrix._14 : 0
     world_matrix._21 : -0.00470921
     world_matrix._22 : -0.0245525
     world_matrix._23 : 3.7749e-009
     world_matrix._24 : 0
     world_matrix._31 : -7.11072e-010
     world_matrix._32 : -3.70732e-009
     world_matrix._33 : -0.025
     world_matrix._34 : 0
     world_matrix._41 : -54.0003
     world_matrix._42 : 5.19991
     world_matrix._43 : 8.63542
     world_matrix._44 : 1
Viewport:
     d3dvp.X      : 0
     d3dvp.Y      : 0
     d3dvp.Width  : 1024
     d3dvp.Height : 760
     d3dvp.MinZ   : 0
     d3dvp.MaxZ   : 1

但是在WINDOWS XP上我得到了:

View Matrix:
     view_matrix._11 : 1.88473e-017
     view_matrix._12 : 1.68653
     view_matrix._13 : 1.35358e-017
     view_matrix._14 : 1
     view_matrix._21 : 5.6036e-038
     view_matrix._22 : 0
     view_matrix._23 : 0
     view_matrix._24 : 0
     view_matrix._31 : 0
     view_matrix._32 : 1.63149
     view_matrix._33 : 0
     view_matrix._34 : 0
     view_matrix._41 : -0
     view_matrix._42 : -0
     view_matrix._43 : 1.00025
     view_matrix._44 : 7.69183e+009
Projection Matrix:
     proj_matrix._11 : 2.37597e-039
     proj_matrix._12 : 2.08572e-039
     proj_matrix._13 : 2.37597e-039
     proj_matrix._14 : 2.37598e-039
     proj_matrix._21 : 0
     proj_matrix._22 : 1.73879e-039
     proj_matrix._23 : 1.7389e-039
     proj_matrix._24 : 8.22303e+009
     proj_matrix._31 : -1.#QNAN
     proj_matrix._32 : 1.73892e-039
     proj_matrix._33 : 7.69167e+009
     proj_matrix._34 : 2.37597e-039
     proj_matrix._41 : 0
     proj_matrix._42 : 3.27402e-039
     proj_matrix._43 : 7.69167e+009
     proj_matrix._44 : 2.37598e-039
World Matrix:
     world_matrix._11 : 3.4712e-035
     world_matrix._12 : 2.38806e-039
     world_matrix._13 : 7.95398e-037
     world_matrix._14 : 2.37598e-039
     world_matrix._21 : 0
     world_matrix._22 : 1.73887e-039
     world_matrix._23 : 1.7394e-039
     world_matrix._24 : 8.22302e+009
     world_matrix._31 : 1.4013e-045
     world_matrix._32 : 3.72838e-035
     world_matrix._33 : 7.85314e-037
     world_matrix._34 : 2.37597e-039
     world_matrix._41 : 0
     world_matrix._42 : 3.27402e-039
     world_matrix._43 : 0
     world_matrix._44 : 4.48416e-044
Viewport:
     d3dvp.X      : 0
     d3dvp.Y      : 0
     d3dvp.Width  : 1024
     d3dvp.Height : 748
     d3dvp.MinZ   : 0
     d3dvp.MaxZ   : 1

这里最“正确”的东西似乎是视口。

有关如何“修复”的建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

GetTransform失败但GetViewport成功的常见情况是使用D3DCREATE_PUREDEVICE创建设备的位置。

对于GetTransform,MSDN说:

  

此方法不会返回已创建设备的设备状态   使用D3DCREATE_PUREDEVICE。如果要使用此方法,则必须使用此方法   使用D3DCREATE中的任何其他标志值创建您的设备。

然而,对于GetViewport,MSDN说:

  

通常,返回状态的方法不适用于设备   使用D3DCREATE_PUREDEVICE创建。但是,这种方法可行   甚至在纯粹的设备上。

我怀疑在两个操作系统上设备创建的处理方式不同。正如您使用 hook 标记了您的问题,我猜您可能无法访问源代码,但如果您这样做 - 也许您可以发布设备创建部分。