diff --git a/src/graphics/render/LinesRenderer.cpp b/src/graphics/render/LinesRenderer.cpp new file mode 100644 index 00000000..a5d92550 --- /dev/null +++ b/src/graphics/render/LinesRenderer.cpp @@ -0,0 +1,14 @@ +#include "LinesRenderer.hpp" + +#include "graphics/core/LineBatch.hpp" + +void LinesRenderer::draw(LineBatch& batch) { + for (const auto& line : queue) { + batch.line(line.a, line.b, line.color); + } + queue.clear(); +} + +void LinesRenderer::pushLine(const glm::vec3& a, const glm::vec3& b, const glm::vec4& color) { + queue.push_back({a, b, color}); +} diff --git a/src/graphics/render/LinesRenderer.hpp b/src/graphics/render/LinesRenderer.hpp new file mode 100644 index 00000000..4c42e4f5 --- /dev/null +++ b/src/graphics/render/LinesRenderer.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include +#include +#include + +class LineBatch; + +class LinesRenderer { +public: + struct Line { + glm::vec3 a; + glm::vec3 b; + glm::vec4 color; + }; + + void draw(LineBatch& batch); + + void pushLine(const glm::vec3& a, const glm::vec3& b, const glm::vec4& color); +private: + std::vector queue; +}; diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index ba1e580b..f2425e0b 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -52,6 +52,7 @@ #include "TextsRenderer.hpp" #include "ChunksRenderer.hpp" #include "GuidesRenderer.hpp" +#include "LinesRenderer.hpp" #include "ModelBatch.hpp" #include "Skybox.hpp" #include "Emitter.hpp" @@ -118,6 +119,7 @@ WorldRenderer::WorldRenderer( hands = std::make_unique( *assets, *modelBatch, skeletons->createSkeleton("hand", &skeletonConfig) ); + lines = std::make_unique(); } WorldRenderer::~WorldRenderer() = default; @@ -481,6 +483,10 @@ void WorldRenderer::draw( // Drawing background sky plane skybox->draw(ctx, camera, assets, worldInfo.daytime, clouds); + linesShader.use(); + lines->draw(*lineBatch); + lineBatch->flush(); + { auto sctx = ctx.sub(); sctx.setCullFace(true); diff --git a/src/graphics/render/WorldRenderer.hpp b/src/graphics/render/WorldRenderer.hpp index e53a5d80..600e2e4f 100644 --- a/src/graphics/render/WorldRenderer.hpp +++ b/src/graphics/render/WorldRenderer.hpp @@ -23,6 +23,7 @@ class PrecipitationRenderer; class HandsRenderer; class NamedSkeletons; class GuidesRenderer; +class LinesRenderer; class TextsRenderer; class Shader; class Frustum; @@ -102,6 +103,7 @@ public: std::unique_ptr blockWraps; std::unique_ptr precipitation; std::unique_ptr skeletons; + std::unique_ptr lines; static bool showChunkBorders; static bool showEntitiesDebug;