私は最近、歴史的に x64 プラットフォーム構成を使用して開発されてきた DirectX 11 アプリケーションのプロファイリングと最適化を開始しました。拡張命令セットを使用するときの動作をテストするために x86 に切り替えた後、特定のオブジェクトが最適化されていないことに気付き始めました。具体的には、スタック割り当て XMMATRIX オブジェクトです。これは、x86 リリース構成 (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);
}