【问题标题】:Stack Allocated Objects Optimized Away With XNAMATH使用 XNAMATH 优化堆栈分配的对象
【发布时间】: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


【解决方案1】:

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

Crash after m = XMMatrixIdentity() - aligment memory in classes? 课堂上

【讨论】:

  • 这确实是问题所在。我将 XMMATRIX 存储为类数据成员。不久前已解决,但感谢您将其恢复。
猜你喜欢
  • 2016-10-25
  • 2013-01-25
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 2020-08-24
  • 2017-11-08
相关资源
最近更新 更多