world render refactor

This commit is contained in:
MihailRis 2023-11-19 00:22:12 +03:00
parent dda9c40c41
commit 6c70bb531b
5 changed files with 27 additions and 43 deletions

View File

@ -301,7 +301,7 @@ void MenuScreen::draw(float delta) {
LevelScreen::LevelScreen(Engine* engine, Level* level)
: Screen(engine),
level(level) {
worldRenderer = new WorldRenderer(level, engine->getAssets());
worldRenderer = new WorldRenderer(engine, level);
hud = new HudRenderer(engine, level);
}
@ -351,11 +351,9 @@ void LevelScreen::update(float delta) {
}
void LevelScreen::draw(float delta) {
EngineSettings& settings = engine->getSettings();
Camera* camera = level->player->camera;
float fogFactor = 18.0f / (float)settings.chunks.loadDistance;
worldRenderer->draw(camera, occlusion, fogFactor, settings.graphics.fogCurve);
worldRenderer->draw(camera, occlusion);
hud->draw();
if (level->player->debug) {
hud->drawDebug( 1 / delta, occlusion);

View File

@ -11,7 +11,6 @@
#include "../graphics/Shader.h"
#include "../graphics/Texture.h"
#include "../graphics/LineBatch.h"
#include "../graphics/Batch3D.h"
#include "../voxels/Chunks.h"
#include "../voxels/Chunk.h"
#include "../voxels/Block.h"
@ -22,13 +21,15 @@
#include "../assets/Assets.h"
#include "../objects/player_control.h"
#include "../maths/FrustumCulling.h"
#include "../settings.h"
#include "../engine.h"
using glm::vec3;
using std::shared_ptr;
WorldRenderer::WorldRenderer(Level* level, Assets* assets) : assets(assets), level(level) {
WorldRenderer::WorldRenderer(Engine* engine, Level* level)
: engine(engine), level(level) {
lineBatch = new LineBatch(4096);
batch3d = new Batch3D(1024);
renderer = new ChunksRenderer(level);
frustumCulling = new Frustum();
level->events->listen(EVT_CHUNK_HIDDEN, [this](lvl_event_type type, Chunk* chunk) {
@ -37,7 +38,6 @@ WorldRenderer::WorldRenderer(Level* level, Assets* assets) : assets(assets), lev
}
WorldRenderer::~WorldRenderer() {
delete batch3d;
delete lineBatch;
delete renderer;
delete frustumCulling;
@ -65,7 +65,9 @@ bool WorldRenderer::drawChunk(size_t index, Camera* camera, Shader* shader, bool
}
void WorldRenderer::draw(Camera* camera, bool occlusion, float fogFactor, float fogCurve){
void WorldRenderer::draw(Camera* camera, bool occlusion){
EngineSettings& settings = engine->getSettings();
Assets* assets = engine->getAssets();
Chunks* chunks = level->chunks;
vec3 skyColor(0.7f, 0.81f, 1.0f);
@ -77,6 +79,8 @@ void WorldRenderer::draw(Camera* camera, bool occlusion, float fogFactor, float
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
float fogFactor = 18.0f / (float)settings.chunks.loadDistance;
Texture* texture = assets->getTexture("block");
Shader* shader = assets->getShader("main");
Shader* linesShader = assets->getShader("lines");
@ -87,7 +91,7 @@ void WorldRenderer::draw(Camera* camera, bool occlusion, float fogFactor, float
shader->uniform3f("u_skyLightColor", 1.1f,1.1f,1.1f);
shader->uniform3f("u_fogColor", skyColor);
shader->uniform1f("u_fogFactor", fogFactor);
shader->uniform1f("u_fogCurve", fogCurve);
shader->uniform1f("u_fogCurve", settings.graphics.fogCurve);
shader->uniform3f("u_cameraPos", camera->position);
Block* cblock = Block::blocks[level->player->choosenBlock];
@ -124,9 +128,6 @@ void WorldRenderer::draw(Camera* camera, bool occlusion, float fogFactor, float
}
shader->uniformMatrix("u_model", mat4(1.0f));
batch3d->begin();
// draw 3D stuff here
batch3d->render();
if (level->playerController->selectedBlockId != -1){
Block* selectedBlock = Block::blocks[level->playerController->selectedBlockId];
@ -142,6 +143,8 @@ void WorldRenderer::draw(Camera* camera, bool occlusion, float fogFactor, float
lineBatch->render();
}
glDisable(GL_DEPTH_TEST);
if (level->player->debug) {
float length = 40.f;
@ -153,16 +156,13 @@ void WorldRenderer::draw(Camera* camera, bool occlusion, float fogFactor, float
-(float)Window::height, 0.f,
-length, length) * model * glm::inverse(camera->rotation));
glDisable(GL_DEPTH_TEST);
glLineWidth(4.0f);
lineBatch->lineWidth(4.0f);
lineBatch->line(0.f, 0.f, 0.f, length, 0.f, 0.f, 0.f, 0.f, 0.f, 1.f);
lineBatch->line(0.f, 0.f, 0.f, 0.f, length, 0.f, 0.f, 0.f, 0.f, 1.f);
lineBatch->line(0.f, 0.f, 0.f, 0.f, 0.f, length, 0.f, 0.f, 0.f, 1.f);
lineBatch->render();
glEnable(GL_DEPTH_TEST);
glLineWidth(2.0f);
lineBatch->lineWidth(2.0f);
lineBatch->line(0.f, 0.f, 0.f, length, 0.f, 0.f, 1.f, 0.f, 0.f, 1.f);
lineBatch->line(0.f, 0.f, 0.f, 0.f, length, 0.f, 0.f, 1.f, 0.f, 1.f);
lineBatch->line(0.f, 0.f, 0.f, 0.f, 0.f, length, 0.f, 0.f, 1.f, 1.f);

View File

@ -10,32 +10,28 @@
#include <glm/ext.hpp>
#include <glm/gtc/matrix_transform.hpp>
class World;
class Level;
class Camera;
class Assets;
class LineBatch;
class Batch3D;
class ChunksRenderer;
class Shader;
class Texture;
class Framebuffer;
class Frustum;
class Engine;
class WorldRenderer {
Batch3D* batch3d;
Assets* assets;
Engine* engine;
Level* level;
Frustum* frustumCulling;
LineBatch* lineBatch;
ChunksRenderer* renderer;
bool drawChunk(size_t index, Camera* camera, Shader* shader, bool occlusion);
public:
ChunksRenderer* renderer;
LineBatch* lineBatch;
WorldRenderer(Level* level, Assets* assets);
WorldRenderer(Engine* engine, Level* level);
~WorldRenderer();
void draw(Camera* camera, bool occlusion, float fogFactor, float fogCurve);
void draw(Camera* camera, bool occlusion);
};

View File

@ -1,10 +1,3 @@
/*
* LineBatch.cpp
*
* Created on: Jun 25, 2020
* Author: MihailRis
*/
#include "LineBatch.h"
#include "Mesh.h"
@ -67,7 +60,6 @@ void LineBatch::box(float x, float y, float z, float w, float h, float d,
line(x+w, y+h, z-d, x+w, y+h, z+d, r,g,b,a);
}
#include <iostream>
void LineBatch::render(){
if (index == 0)
return;
@ -75,3 +67,7 @@ void LineBatch::render(){
mesh->draw(GL_LINES);
index = 0;
}
void LineBatch::lineWidth(float width) {
glLineWidth(width);
}

View File

@ -1,10 +1,3 @@
/*
* LineBatch.h
*
* Created on: Jun 25, 2020
* Author: MihailRis
*/
#ifndef GRAPHICS_LINEBATCH_H_
#define GRAPHICS_LINEBATCH_H_
@ -27,6 +20,7 @@ public:
float r, float g, float b, float a);
void render();
void lineWidth(float width);
};
#endif /* GRAPHICS_LINEBATCH_H_ */