Proper SSE structure for OverlayBox_t::Transforms

This commit is contained in:
Kawe Mazidjatari 2022-07-12 12:28:23 +02:00
parent d47eaf98a0
commit 521cbad760
2 changed files with 17 additions and 12 deletions

View File

@ -247,6 +247,8 @@ void DrawAIScriptNodes()
#ifndef CLIENT_DLL #ifndef CLIENT_DLL
if (*g_pAINetwork) if (*g_pAINetwork)
{ {
OverlayBox_t::Transforms vTransforms;
for (int i = ai_script_nodes_draw_index->GetInt(); i < (*g_pAINetwork)->GetNumScriptNodes(); i++) for (int i = ai_script_nodes_draw_index->GetInt(); i < (*g_pAINetwork)->GetNumScriptNodes(); i++)
{ {
if (i < 0) if (i < 0)
@ -254,12 +256,9 @@ void DrawAIScriptNodes()
return; return;
} }
OverlayBox_t::Transforms vTransforms{}; /*!FIXME: using '__m128' without type cast shifts the stack with 0x10 despite being the same size!*/ vTransforms.xmm[0] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.x - 50.f, 0.0f, 0.0f, 1.0f);
__m128* pTransforms = reinterpret_cast<__m128*>(&vTransforms.u0); vTransforms.xmm[1] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.y - 50.f, 0.0f, 1.0f, 0.0f);
vTransforms.xmm[2] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.z - 50.f, 1.0f, 0.0f, 0.0f);
pTransforms[0] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.x - 50.f, 0.0f, 0.0f, 1.0f);
pTransforms[1] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.y - 50.f, 0.0f, 1.0f, 0.0f);
pTransforms[2] = _mm_set_ps((*g_pAINetwork)->m_ScriptNode[i].m_vOrigin.z - 50.f, 1.0f, 0.0f, 0.0f);
v_RenderBox(vTransforms, {0, 0, 0}, {100, 100, 100}, Color(0, 255, 0, 255), r_debug_overlay_zbuffer->GetBool()); v_RenderBox(vTransforms, {0, 0, 0}, {100, 100, 100}, Color(0, 255, 0, 255), r_debug_overlay_zbuffer->GetBool());

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "mathlib/vector.h" #include "mathlib/vector.h"
#include "mathlib/color.h" #include "mathlib/color.h"
#include "mathlib/vector4d.h"
// Something has to be hardcoded.. // Something has to be hardcoded..
#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1) || defined (GAMEDLL_S2) #if defined (GAMEDLL_S0) || defined (GAMEDLL_S1) || defined (GAMEDLL_S2)
@ -73,12 +74,17 @@ struct OverlayBox_t : public OverlayBase_t
struct Transforms struct Transforms
{ {
Vector3D u0; Transforms()
float x; {
Vector3D u1; xmm[0] = _mm_setzero_ps();
float y; xmm[1] = _mm_setzero_ps();
Vector3D u2; xmm[2] = _mm_setzero_ps();
float z; };
union
{
__m128 xmm[3];
Vector4D vec[3];
};
}; };
Transforms transforms; Transforms transforms;