При попытке сохранить матрицы внутри структуры я получаю сообщение об ошибке Assertion Failure во время выполнения при вызове XMFLOAT4x4*
типы из структуры с использованием XMLoadFloat4X4()
,
Значения просто хранятся как:
XMFLOAT4X4 *f4x4_Scale;
XMFLOAT4X4 *f4x4_Rotation;
XMFLOAT4X4 *f4x4_Translate;
XMFLOAT4X4 *f4x4_ObjectViewSpace;
Предположительно загрузка фактических значений из XMFLOAT4x4*
расположение внутри структуры.
Я звоню XMLoadFloat4X4()
внутри функции преобразования, структура как таковая:
XMMATRIX Entity::Scale(float x, float y, float z){
XMMATRIX m_Scale = XMLoadFloat4x4(e_Asset.Asset.FileDesc.matrixTransformation.f4x4_Scale);
m_Scale = XMMatrixScaling(x, y, z);
return m_Scale;
}
Разборка показывает разрыв внутри XMLoadFloat4x4()
функционировать сам, но я не могу этого понять.
Есть ли способ / метод, который я могу использовать для устранения ошибок ошибок утверждения в отношении XMLoadFloat()
? (Или действительно хороший материал об ошибках Утверждения) и / или я делаю что-то не так?
Обновить:
Как предположил Чак Уолборн, (XMFLOAT4X4)*pSource
указатель для XMLoadFloat4X4()
было NULL
, удовлетворяющих условиям Асстера для функции. Сначала передаваемый указатель был неинициализирован, а затем я попытался установить указатель [на кучу].
Часы были установлены, и XMFLOAT4X4
значения были инициализированы в матрицу с использованием XMStoreFloat4X4()
,
XMMATRIX Identity = XMMatrixIdentity();
XMStoreFloat4x4(&e_Asset.Asset.FileDesc.matrixTransformation.f4x4_Scale, Identity);
Последним виновником был тот факт, что функции преобразования имели так много перегрузок, и я пропустил случайный шаг отладки (я установил новый XMFLOAT4X4
переменная в одной из функций и никогда ее не инициализировал) из ранее. Проблема была решена.
DirectXMath является общим источником в библиотеке, так что вы можете просто войти в функцию в отладчике.
Единственное утверждение в XMLoadFloat4x4
чтобы убедиться, что входной указатель не нулевой:
/------------------------------------------------------------------------------
_Use_decl_annotations_
inline XMMATRIX XMLoadFloat4x4
(
const XMFLOAT4X4* pSource
)
{
assert(pSource);
#if defined(_XM_NO_INTRINSICS_)
Как вы думаете, e_Asset.Asset.FileDesc.matrixTransformation.f4x4_Scale
указатель на самом деле установлен здесь?