Fixed DrawPoly()
This commit is contained in:
parent
f0ef9fc0cf
commit
d818adf2a2
|
@ -255,6 +255,11 @@ namespace SHADE
|
||||||
storage.emplace_back(PointVertex{ endPt, color });
|
storage.emplace_back(PointVertex{ endPt, color });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SHDebugDrawSystem::drawLineSet(std::vector<PointVertex>& storage, const SHVec4& color, std::initializer_list<SHVec3> pointList)
|
||||||
|
{
|
||||||
|
drawLineSet(storage, color, pointList.begin(), pointList.end());
|
||||||
|
}
|
||||||
|
|
||||||
void SHDebugDrawSystem::drawPoly(std::vector<PointVertex>& storage, const SHVec4& color, std::initializer_list<SHVec3> pointList)
|
void SHDebugDrawSystem::drawPoly(std::vector<PointVertex>& storage, const SHVec4& color, std::initializer_list<SHVec3> pointList)
|
||||||
{
|
{
|
||||||
drawPoly(storage, color, pointList.begin(), pointList.end());
|
drawPoly(storage, color, pointList.begin(), pointList.end());
|
||||||
|
@ -281,7 +286,7 @@ namespace SHADE
|
||||||
const SHVec3 TOP_LEFT_FRONT = UNIT_TOP_LEFT_FRONT * size;
|
const SHVec3 TOP_LEFT_FRONT = UNIT_TOP_LEFT_FRONT * size;
|
||||||
const SHVec3 TOP_RIGHT_FRONT = UNIT_TOP_RIGHT_FRONT * size;
|
const SHVec3 TOP_RIGHT_FRONT = UNIT_TOP_RIGHT_FRONT * size;
|
||||||
|
|
||||||
drawPoly
|
drawLineSet
|
||||||
(
|
(
|
||||||
storage,
|
storage,
|
||||||
color,
|
color,
|
||||||
|
@ -316,6 +321,6 @@ namespace SHADE
|
||||||
spherePoints.emplace_back(SPHERE.VertexPositions[idx]);
|
spherePoints.emplace_back(SPHERE.VertexPositions[idx]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
drawPoly(storage, color, spherePoints.begin(), spherePoints.end());
|
drawLineSet(storage, color, spherePoints.begin(), spherePoints.end());
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -239,6 +239,9 @@ namespace SHADE
|
||||||
/* Helper Draw Functions */
|
/* Helper Draw Functions */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
void drawLine(std::vector<PointVertex>& storage, const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt);
|
void drawLine(std::vector<PointVertex>& storage, const SHVec4& color, const SHVec3& startPt, const SHVec3& endPt);
|
||||||
|
void drawLineSet(std::vector<PointVertex>& storage, const SHVec4& color, std::initializer_list<SHVec3> pointList);
|
||||||
|
template<typename IterType>
|
||||||
|
void drawLineSet(std::vector<PointVertex>& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd);
|
||||||
void drawPoly(std::vector<PointVertex>& storage, const SHVec4& color, std::initializer_list<SHVec3> pointList);
|
void drawPoly(std::vector<PointVertex>& storage, const SHVec4& color, std::initializer_list<SHVec3> pointList);
|
||||||
template<typename IterType>
|
template<typename IterType>
|
||||||
void drawPoly(std::vector<PointVertex>& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd);
|
void drawPoly(std::vector<PointVertex>& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd);
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace SHADE
|
||||||
/* Helper Draw Functions */
|
/* Helper Draw Functions */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
template<typename IterType>
|
template<typename IterType>
|
||||||
void SHDebugDrawSystem::drawPoly(std::vector<PointVertex>& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd)
|
void SHDebugDrawSystem::drawLineSet(std::vector<PointVertex>& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd)
|
||||||
{
|
{
|
||||||
// Ensure dereferenced type is SHVec3
|
// Ensure dereferenced type is SHVec3
|
||||||
static_assert(std::is_same_v<SHVec3, std::remove_cvref_t<decltype(*pointListBegin)>>, "Parameters to DrawPoly must be SHVec3.");
|
static_assert(std::is_same_v<SHVec3, std::remove_cvref_t<decltype(*pointListBegin)>>, "Parameters to DrawPoly must be SHVec3.");
|
||||||
|
@ -54,4 +54,36 @@ namespace SHADE
|
||||||
storage.emplace_back(PointVertex{ *pointIter, color });
|
storage.emplace_back(PointVertex{ *pointIter, color });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
template<typename IterType>
|
||||||
|
void SHDebugDrawSystem::drawPoly(std::vector<PointVertex>& storage, const SHVec4& color, IterType pointListBegin, IterType pointListEnd)
|
||||||
|
{
|
||||||
|
// Ensure dereferenced type is SHVec3
|
||||||
|
static_assert(std::is_same_v<SHVec3, std::remove_cvref_t<decltype(*pointListBegin)>>, "Parameters to DrawPoly must be SHVec3.");
|
||||||
|
|
||||||
|
// Check if points exceeded max
|
||||||
|
if (storage.size() > MAX_POINTS)
|
||||||
|
{
|
||||||
|
SHLOG_WARNING("[DebugDraw] Exceeded maximum size of drawable debug elements.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const size_t POINTS_COUNT = pointListEnd - pointListBegin;
|
||||||
|
// Invalid polygon
|
||||||
|
if (POINTS_COUNT < 2)
|
||||||
|
{
|
||||||
|
SHLOG_WARNING("[SHDebugDraw] Invalid polygon provided to DrawPoly().");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Trace the polygon
|
||||||
|
for (auto pointIter = pointListBegin + 1; pointIter != pointListEnd; ++pointIter)
|
||||||
|
{
|
||||||
|
storage.emplace_back(PointVertex{ *(pointIter - 1), color });
|
||||||
|
storage.emplace_back(PointVertex{ *pointIter , color });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the line loop
|
||||||
|
storage.emplace_back(PointVertex{ *(pointListEnd - 1), color });
|
||||||
|
storage.emplace_back(PointVertex{ *pointListBegin , color });
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue