add in-world lines renderer

This commit is contained in:
MihailRis 2025-07-28 23:00:27 +03:00
parent e0123f85ea
commit 70c5c67bd1
4 changed files with 44 additions and 0 deletions

View File

@ -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});
}

View File

@ -0,0 +1,22 @@
#pragma once
#include <glm/vec3.hpp>
#include <glm/vec4.hpp>
#include <vector>
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<Line> queue;
};

View File

@ -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<HandsRenderer>(
*assets, *modelBatch, skeletons->createSkeleton("hand", &skeletonConfig)
);
lines = std::make_unique<LinesRenderer>();
}
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);

View File

@ -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<BlockWrapsRenderer> blockWraps;
std::unique_ptr<PrecipitationRenderer> precipitation;
std::unique_ptr<NamedSkeletons> skeletons;
std::unique_ptr<LinesRenderer> lines;
static bool showChunkBorders;
static bool showEntitiesDebug;