使用XNAMATH优化的堆栈分配对象

时间:2013-05-26 03:17:00

标签: c++ visual-studio-2012 x86 directx-11 xna-math-library

我最近开始分析和优化历史上使用x64平台配置开发的DirectX 11应用程序。切换到x86以测试使用扩展指令集时的行为,我开始注意到我的某些对象正在被优化掉,最具体的是堆栈分配的XMMATRIX对象。这只发生在x86 Release配置中构建(在x64版本中正常工作),并且我确保链接到正确的库。我还测试了一个新的项目,以确保我不会意外地改变埋藏的项目设置。我已经确认关闭C ++代码优化可以解决问题。在为Windows x86平台开发时尝试使用XNAMATH库时是否有任何特定的使用要求?

使用代码段更新

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);
 }

1 个答案:

答案 0 :(得分:1)

可能与我在内存对齐方面遇到的类似问题有关吗?

Crash after m = XMMatrixIdentity() - aligment memory in classes? 在类