|
|
@@ -18,56 +18,191 @@ namespace lol |
|
|
|
{ |
|
|
|
|
|
|
|
//Resets draw infos |
|
|
|
void Debug::ResetDrawSetup() |
|
|
|
void Debug::DrawSetupReset() |
|
|
|
{ |
|
|
|
g_scene->SetLineTime(); |
|
|
|
g_scene->SetLineMask(); |
|
|
|
} |
|
|
|
//Sets draw infos |
|
|
|
void Debug::DrawSetup(float new_time) |
|
|
|
void Debug::DrawSetupTime(float new_time) |
|
|
|
{ |
|
|
|
g_scene->SetLineTime(new_time); |
|
|
|
} |
|
|
|
void Debug::DrawSetup(int new_mask) |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawSetupMask(int new_mask) |
|
|
|
{ |
|
|
|
g_scene->SetLineMask(new_mask); |
|
|
|
} |
|
|
|
void Debug::DrawSetup(float new_time, int new_mask) |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawSetupSegment(float new_segment_size) |
|
|
|
{ |
|
|
|
g_scene->SetLineTime(new_time); |
|
|
|
g_scene->SetLineMask(new_mask); |
|
|
|
g_scene->SetLineSegmentSize(new_segment_size); |
|
|
|
} |
|
|
|
|
|
|
|
void Debug::DrawLine(vec3 a, vec3 b, vec4 color) |
|
|
|
//-- |
|
|
|
void Debug::DrawSetupColor(vec4 color) |
|
|
|
{ |
|
|
|
g_scene->AddLine(a, b, color); |
|
|
|
g_scene->SetLineColor(color); |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawSetup(float new_time, int new_mask, float segment_size, vec4 color) |
|
|
|
{ |
|
|
|
Debug::DrawSetupTime(new_time); |
|
|
|
Debug::DrawSetupMask(new_mask); |
|
|
|
Debug::DrawSetupSegment(segment_size); |
|
|
|
Debug::DrawSetupColor(color); |
|
|
|
} |
|
|
|
|
|
|
|
//Draw stuff |
|
|
|
void Debug::DrawLine(vec3 a, vec3 b) |
|
|
|
{ |
|
|
|
Debug::DrawLine(a, b, g_scene->GetLineColor()); |
|
|
|
} |
|
|
|
void Debug::DrawLine(vec3 a, vec3 b, vec4 color) |
|
|
|
{ g_scene->AddLine(a, b, color); } |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawBox(box3 a) |
|
|
|
{ DrawBox(a.A, a.B, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawBox(box3 a, vec4 color) |
|
|
|
{ |
|
|
|
DrawBox(a.A, a.B, color); |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawBox(vec3 a, vec3 b) |
|
|
|
{ Debug::DrawBox(a, b, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawBox(vec3 a, vec3 b, vec4 color) |
|
|
|
{ |
|
|
|
vec3 v[8]; |
|
|
|
Debug::DrawBox(a, b, mat4::identity, color); |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawBox(box3 a, mat4 transform) |
|
|
|
{ DrawBox(a.A, a.B, transform, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawBox(box3 a, mat4 transform, vec4 color) |
|
|
|
{ |
|
|
|
DrawBox(a.A, a.B, transform, color); |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawBox(vec3 a, vec3 b, mat4 transform) |
|
|
|
{ Debug::DrawBox(a, b, transform, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawBox(vec3 a, vec3 b, mat4 transform, vec4 color) |
|
|
|
{ |
|
|
|
vec4 v[8]; |
|
|
|
for (int i = 0; i < 8; i++) |
|
|
|
{ |
|
|
|
v[i].x = i & 1 ? a.x : b.x; |
|
|
|
v[i].y = i & 2 ? a.y : b.y; |
|
|
|
v[i].z = i & 4 ? a.z : b.z; |
|
|
|
v[i].w = 1.f; |
|
|
|
} |
|
|
|
|
|
|
|
for (int i = 0; i < 4; i++) |
|
|
|
{ |
|
|
|
int j = ((i & 1) << 1) | ((i >> 1) ^ 1); |
|
|
|
|
|
|
|
Debug::DrawLine(v[i], v[i + 4], color); |
|
|
|
Debug::DrawLine(v[i], v[j], color); |
|
|
|
Debug::DrawLine(v[i + 4], v[j + 4], color); |
|
|
|
Debug::DrawLine((transform * v[i]).xyz, (transform * v[i + 4]).xyz, color); |
|
|
|
Debug::DrawLine((transform * v[i]).xyz, (transform * v[j]).xyz, color); |
|
|
|
Debug::DrawLine((transform * v[i + 4]).xyz, (transform * v[j + 4]).xyz, color); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawCircle(vec3 a, vec3 n) |
|
|
|
{ Debug::DrawCircle(a, n, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawCircle(vec3 a, vec3 n, vec4 color) |
|
|
|
{ |
|
|
|
vec3 x = orthogonal(n); |
|
|
|
vec3 y = cross(normalize(n), normalize(x)) * length(n); |
|
|
|
DrawCircle(a, x, y, color); |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawCircle(vec3 a, vec3 x, vec3 y) |
|
|
|
{ Debug::DrawCircle(a, x, y, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawCircle(vec3 a, vec3 x, vec3 y, vec4 color) |
|
|
|
{ |
|
|
|
float size = F_PI * 2.f * lol::max(length(x), length(y)); |
|
|
|
int segment_nb = lol::max(1, (int)((size * .25f) / g_scene->GetLineSegmentSize())); |
|
|
|
for (int i = 0; i < segment_nb; i++) |
|
|
|
{ |
|
|
|
float a0 = (((float)i) / (float)segment_nb) * F_PI_2; |
|
|
|
float a1 = (((float)i + 1) / (float)segment_nb) * F_PI_2; |
|
|
|
vec2 p0 = vec2(lol::cos(a0), lol::sin(a0)); |
|
|
|
vec2 p1 = vec2(lol::cos(a1), lol::sin(a1)); |
|
|
|
|
|
|
|
Debug::DrawLine(a + p0.x * x + p0.y * y, a + p1.x * x + p1.y * y, color); |
|
|
|
Debug::DrawLine(a + p0.x * -x + p0.y * -y, a + p1.x * -x + p1.y * -y, color); |
|
|
|
Debug::DrawLine(a + p0.x * x + p0.y * -y, a + p1.x * x + p1.y * -y, color); |
|
|
|
Debug::DrawLine(a + p0.x * -x + p0.y * y, a + p1.x * -x + p1.y * y, color); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawSphere(vec3 a, float s) |
|
|
|
{ Debug::DrawSphere(a, s, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawSphere(vec3 a, float s, vec4 color) |
|
|
|
{ |
|
|
|
Debug::DrawSphere(a, vec3::axis_x * s, vec3::axis_y * s, vec3::axis_z * s, color); |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawSphere(vec3 a, vec3 x, vec3 y, vec3 z) |
|
|
|
{ Debug::DrawSphere(a, x, y, z, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawSphere(vec3 a, vec3 x, vec3 y, vec3 z, vec4 color) |
|
|
|
{ |
|
|
|
Debug::DrawCircle(a, x, y, color); |
|
|
|
Debug::DrawCircle(a, y, z, color); |
|
|
|
Debug::DrawCircle(a, z, x, color); |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawCapsule(vec3 a, float s, vec3 h) |
|
|
|
{ Debug::DrawCapsule(a, s, h, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawCapsule(vec3 a, float s, vec3 h, vec4 color) |
|
|
|
{ |
|
|
|
vec3 x = orthonormal(h) * s; |
|
|
|
vec3 y = cross(normalize(h), normalize(x)) * s; |
|
|
|
Debug::DrawCapsule(a, x, y, normalize(h) * s, h, color); |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawCapsule(vec3 a, vec3 x, vec3 y, vec3 z, vec3 h) |
|
|
|
{ Debug::DrawCapsule(a, x, y, z, h, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawCapsule(vec3 a, vec3 x, vec3 y, vec3 z, vec3 h, vec4 color) |
|
|
|
{ |
|
|
|
float size = F_PI * 2.f * lol::max(length(x), length(y)); |
|
|
|
int segment_nb = lol::max(1, (int)((size * .25f) / g_scene->GetLineSegmentSize())); |
|
|
|
for (int i = -1; i < 2; i += 2) |
|
|
|
{ |
|
|
|
vec3 b = a + h * .5f * (float)i; |
|
|
|
vec3 c = a - h * .5f * (float)i; |
|
|
|
Debug::DrawCircle(b, x, y, color); |
|
|
|
Debug::DrawLine(b + x * (float)i, c + x * (float)i, color); |
|
|
|
Debug::DrawLine(b + y * (float)i, c + y * (float)i, color); |
|
|
|
for (int j = 0; j < segment_nb; j++) |
|
|
|
{ |
|
|
|
float a0 = (((float)j) / (float)segment_nb) * F_PI_2; |
|
|
|
float a1 = (((float)j + 1) / (float)segment_nb) * F_PI_2; |
|
|
|
vec2 p0 = vec2(lol::cos(a0), lol::sin(a0)); |
|
|
|
vec2 p1 = vec2(lol::cos(a1), lol::sin(a1)); |
|
|
|
|
|
|
|
Debug::DrawLine(b + p0.x * x + p0.y * z * (float)i, b + p1.x * x + p1.y * z * (float)i, color); |
|
|
|
Debug::DrawLine(b + p0.x * -x + p0.y * z * (float)i, b + p1.x * -x + p1.y * z * (float)i, color); |
|
|
|
Debug::DrawLine(b + p0.x * y + p0.y * z * (float)i, b + p1.x * y + p1.y * z * (float)i, color); |
|
|
|
Debug::DrawLine(b + p0.x * -y + p0.y * z * (float)i, b + p1.x * -y + p1.y * z * (float)i, color); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawViewProj(mat4 view, mat4 proj) |
|
|
|
{ Debug::DrawViewProj(view, proj, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawViewProj(mat4 view, mat4 proj, vec4 color) |
|
|
|
{ |
|
|
|
mat4 const view_proj = proj * view; |
|
|
@@ -91,6 +226,9 @@ void Debug::DrawViewProj(mat4 view, mat4 proj, vec4 color) |
|
|
|
Debug::DrawViewProj(view_proj, color); |
|
|
|
} |
|
|
|
|
|
|
|
//-- |
|
|
|
void Debug::DrawViewProj(mat4 view_proj) |
|
|
|
{ Debug::DrawViewProj(view_proj, g_scene->GetLineColor()); } |
|
|
|
void Debug::DrawViewProj(mat4 view_proj, vec4 color) |
|
|
|
{ |
|
|
|
//Near plane |
|
|
|