feat: revamp 2D pipeline to use SDF's for rendering
This commit is contained in:
+49
-1
@@ -7,6 +7,7 @@
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include <glm/gtc/constants.hpp>
|
||||
#include <glm/gtc/packing.hpp>
|
||||
|
||||
#include <destrum/Event.h>
|
||||
@@ -31,7 +32,7 @@
|
||||
#include <destrum/Components/Animator.h>
|
||||
#include <destrum/Components/CameraComponent.h>
|
||||
#include <destrum/Graphics/Resources/PrimitiveMeshes.h>
|
||||
#include <destrum/Graphics/Managers/LineRenderingManager.h>
|
||||
#include <destrum/Graphics/Managers/Renderer2D.h>
|
||||
#include <destrum/Components/LightComponent.h>
|
||||
#include <destrum/Components/Physics/Rigidbody.h>
|
||||
#include <destrum/Graphics/Material.h>
|
||||
@@ -431,6 +432,52 @@ namespace {
|
||||
SceneManager::GetInstance().Destroy();
|
||||
}
|
||||
|
||||
void testRenderer2DShapes()
|
||||
{
|
||||
auto& r2d = Renderer2D::GetInstance();
|
||||
r2d.Clear();
|
||||
|
||||
r2d.DrawRect({10.0f, 20.0f}, {30.0f, 40.0f}, glm::vec4{0.5f});
|
||||
const Shape2D& rect = r2d.GetShapes().back();
|
||||
check(rect.type == Shape2DType::Rect &&
|
||||
rect.center == glm::vec2{25.0f, 40.0f} &&
|
||||
rect.halfSize == glm::vec2{15.0f, 20.0f} &&
|
||||
rect.textureId == NULL_IMAGE_ID &&
|
||||
rect.outline == 0.0f,
|
||||
"rects must be anchored at their top left corner and filled by default");
|
||||
|
||||
r2d.DrawEllipseOutline({50.0f, 50.0f}, {20.0f, 10.0f}, 2.0f, glm::vec4{1.0f});
|
||||
const Shape2D& ellipse = r2d.GetShapes().back();
|
||||
check(ellipse.type == Shape2DType::Ellipse &&
|
||||
ellipse.center == glm::vec2{50.0f} &&
|
||||
ellipse.halfSize == glm::vec2{20.0f, 10.0f} &&
|
||||
ellipse.outline == 2.0f,
|
||||
"ellipses must be centered with their radii as half size");
|
||||
|
||||
r2d.DrawTriangle({0.0f, 10.0f}, {5.0f, 0.0f}, {10.0f, 10.0f}, glm::vec4{1.0f});
|
||||
const Shape2D& triangle = r2d.GetShapes().back();
|
||||
check(triangle.type == Shape2DType::Triangle &&
|
||||
triangle.center == glm::vec2{5.0f} &&
|
||||
triangle.halfSize == glm::vec2{5.0f} &&
|
||||
triangle.p0 == glm::vec2{-5.0f, 5.0f} &&
|
||||
triangle.p1 == glm::vec2{0.0f, -5.0f} &&
|
||||
triangle.p2 == glm::vec2{5.0f, 5.0f},
|
||||
"triangle points must be stored relative to their bounding box center");
|
||||
|
||||
r2d.DrawLine({0.0f, 0.0f}, {0.0f, 10.0f}, 4.0f, glm::vec4{1.0f}, LineCap::Round);
|
||||
const Shape2D& line = r2d.GetShapes().back();
|
||||
check(line.type == Shape2DType::Rect &&
|
||||
line.center == glm::vec2{0.0f, 5.0f} &&
|
||||
close(line.halfSize.x, 7.0f) && close(line.halfSize.y, 2.0f) &&
|
||||
close(line.rotation, glm::half_pi<float>()) &&
|
||||
close(line.cornerRadius, 2.0f),
|
||||
"round capped lines must be rotated rects extended by half their thickness");
|
||||
|
||||
check(r2d.GetShapes().size() == 4, "every draw call must submit exactly one shape");
|
||||
r2d.Clear();
|
||||
check(r2d.GetShapes().empty(), "clear must drop all submitted shapes");
|
||||
}
|
||||
|
||||
void testCapsuleColliderDebugLines()
|
||||
{
|
||||
GameObject object{"capsule"};
|
||||
@@ -1131,6 +1178,7 @@ int main()
|
||||
testPrimitiveBoxMesh();
|
||||
testColliderCenterOffset();
|
||||
testCapsuleColliderDebugLines();
|
||||
testRenderer2DShapes();
|
||||
std::cout << "destrum tests passed\n";
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user