Я использую
matrix = *((fxMatrix*)&d3dMatrix);
довольно долго. Он работал нормально, пока мой экран не стал черным и не получил разочарование на моем столе.
fxMatrix содержит 4 fxVectors. Раньше fxVector составлял 16 байтов, но теперь он внезапно стал равным 20. Это произошло потому, что он унаследовал fxStreamable, который добавил vTable.
Таким образом, одно из решений, конечно, состоит в том, чтобы просто не наследовать fxStreamable, и оставить комментарий о том, что он всегда должен быть 16 байтов и никогда больше.
Другим решением было бы сделать функции преобразования и полностью скопировать матрицу. Это делает его более безопасным, но влияет на производительность. Я полагаю, это лучшая идея.
Другое решение - вообще не конвертировать и придерживаться D3DXMATRIX, но это делает двигатель несовместимым, и мне лично очень не нравится эта идея.
Каково ваше мнение?