add in-world lines renderer
This commit is contained in:
parent
e0123f85ea
commit
70c5c67bd1
14
src/graphics/render/LinesRenderer.cpp
Normal file
14
src/graphics/render/LinesRenderer.cpp
Normal 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});
|
||||||
|
}
|
||||||
22
src/graphics/render/LinesRenderer.hpp
Normal file
22
src/graphics/render/LinesRenderer.hpp
Normal 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;
|
||||||
|
};
|
||||||
@ -52,6 +52,7 @@
|
|||||||
#include "TextsRenderer.hpp"
|
#include "TextsRenderer.hpp"
|
||||||
#include "ChunksRenderer.hpp"
|
#include "ChunksRenderer.hpp"
|
||||||
#include "GuidesRenderer.hpp"
|
#include "GuidesRenderer.hpp"
|
||||||
|
#include "LinesRenderer.hpp"
|
||||||
#include "ModelBatch.hpp"
|
#include "ModelBatch.hpp"
|
||||||
#include "Skybox.hpp"
|
#include "Skybox.hpp"
|
||||||
#include "Emitter.hpp"
|
#include "Emitter.hpp"
|
||||||
@ -118,6 +119,7 @@ WorldRenderer::WorldRenderer(
|
|||||||
hands = std::make_unique<HandsRenderer>(
|
hands = std::make_unique<HandsRenderer>(
|
||||||
*assets, *modelBatch, skeletons->createSkeleton("hand", &skeletonConfig)
|
*assets, *modelBatch, skeletons->createSkeleton("hand", &skeletonConfig)
|
||||||
);
|
);
|
||||||
|
lines = std::make_unique<LinesRenderer>();
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldRenderer::~WorldRenderer() = default;
|
WorldRenderer::~WorldRenderer() = default;
|
||||||
@ -481,6 +483,10 @@ void WorldRenderer::draw(
|
|||||||
// Drawing background sky plane
|
// Drawing background sky plane
|
||||||
skybox->draw(ctx, camera, assets, worldInfo.daytime, clouds);
|
skybox->draw(ctx, camera, assets, worldInfo.daytime, clouds);
|
||||||
|
|
||||||
|
linesShader.use();
|
||||||
|
lines->draw(*lineBatch);
|
||||||
|
lineBatch->flush();
|
||||||
|
|
||||||
{
|
{
|
||||||
auto sctx = ctx.sub();
|
auto sctx = ctx.sub();
|
||||||
sctx.setCullFace(true);
|
sctx.setCullFace(true);
|
||||||
|
|||||||
@ -23,6 +23,7 @@ class PrecipitationRenderer;
|
|||||||
class HandsRenderer;
|
class HandsRenderer;
|
||||||
class NamedSkeletons;
|
class NamedSkeletons;
|
||||||
class GuidesRenderer;
|
class GuidesRenderer;
|
||||||
|
class LinesRenderer;
|
||||||
class TextsRenderer;
|
class TextsRenderer;
|
||||||
class Shader;
|
class Shader;
|
||||||
class Frustum;
|
class Frustum;
|
||||||
@ -102,6 +103,7 @@ public:
|
|||||||
std::unique_ptr<BlockWrapsRenderer> blockWraps;
|
std::unique_ptr<BlockWrapsRenderer> blockWraps;
|
||||||
std::unique_ptr<PrecipitationRenderer> precipitation;
|
std::unique_ptr<PrecipitationRenderer> precipitation;
|
||||||
std::unique_ptr<NamedSkeletons> skeletons;
|
std::unique_ptr<NamedSkeletons> skeletons;
|
||||||
|
std::unique_ptr<LinesRenderer> lines;
|
||||||
|
|
||||||
static bool showChunkBorders;
|
static bool showChunkBorders;
|
||||||
static bool showEntitiesDebug;
|
static bool showEntitiesDebug;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user