【发布时间】:2013-05-26 03:17:00
【问题描述】:
我最近开始分析和优化一个过去使用 x64 平台配置开发的 DirectX 11 应用程序。在切换到 x86 以测试使用扩展指令集时的行为后,我开始注意到我的某些对象正在被优化掉,尤其是堆栈分配的 XMMATRIX 对象。这仅在构建 x86 版本配置时发生(在 x64 版本中工作正常),并且我已确保链接到正确的库。我还测试了一个新项目,以确保我没有意外更改隐藏的项目设置。我已经验证关闭 C++ 代码优化可以解决问题。在为 Windows x86 平台开发时尝试使用 XNAMATH 库时,我是否忽略了任何特定的使用要求?
使用代码 sn-p 更新
class Camera : public InputListener
{
public:
Camera();
~Camera();
/* Public functions here */
private:
XMMATRIX mViewMatrix;
XMMATRIX mInvView;
XMMATRIX mProjectionMatrix;
XMMATRIX mRotationMatrix;
XMVECTOR mPosition;
XMVECTOR mLookAt;
/* Other variables and private funcctions here */
};
Camera::Camera() : mViewMatrix(),
mProjectionMatrix(),
mRightHold(false),
mRotationMatrix(),
mPosition(),
/*other initializations*/
{
InputManager::GetInstance().RegisterListener(this);
mAspectRatio = (float)mViewWidth/(float)mViewHeight;
mProjectionMatrix = XMMatrixPerspectiveFovLH( mAngle, mAspectRatio, mNearClipDist, mFarClipDist );
mPosition = XMVectorSet( 0, 0, -100.0f,0.0f );
XMVECTOR Up = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
mViewMatrix = XMMatrixLookAtLH(mPosition,XMVectorSet(0,0,0,0),Up);
mHeightReciprocal = 1/(float)mViewHeight;
mWidthReciprocal = 1/(float)mViewWidth;
mAngleTangent = tanf(mAngle * 0.5f);
}
【问题讨论】:
-
你能告诉我们some code有这个问题吗?什么行为让您相信
XMMATRIX对象正在被优化掉? -
已更新以反映在程序流程中第一次遇到 XMMATRIX(或任何 XNAMATH)的使用情况。相机是在场景构建期间分配的堆。我得到的行为只是空指针异常,在尝试构造投影矩阵时首先遇到。看到我的 XMMATRIX 是一个堆栈分配的结构,我认为它要么正在被优化(并且错误只是误导),要么它是 XNAMATH 函数调用中其他东西的症状。
标签: c++ visual-studio-2012 x86 directx-11 xna-math-library