|
@@ -8,7 +8,7 @@
|
|
#include "client/math/Plane.h"
|
|
#include "client/math/Plane.h"
|
|
|
|
|
|
Engine::Engine(Shaders& shaders, Framebuffers& fb, const WindowSize& size, RenderSettings& renderSettings) :
|
|
Engine::Engine(Shaders& shaders, Framebuffers& fb, const WindowSize& size, RenderSettings& renderSettings) :
|
|
-shaders(shaders), fb(fb), size(size), renderSettings(renderSettings), frustum(60.0f, 0.1f, 80.0f) {
|
|
+shaders(shaders), framebuffers(fb), size(size), renderSettings(renderSettings), frustum(60.0f, 0.1f, 80.0f) {
|
|
rectangle.add(Triangle(
|
|
rectangle.add(Triangle(
|
|
Vertex(Vector3(-1, -1, 0), Vector2(0, 0)),
|
|
Vertex(Vector3(-1, -1, 0), Vector2(0, 0)),
|
|
Vertex(Vector3(1, 1, 0), Vector2(1, 1)),
|
|
Vertex(Vector3(1, 1, 0), Vector2(1, 1)),
|
|
@@ -23,7 +23,7 @@ shaders(shaders), fb(fb), size(size), renderSettings(renderSettings), frustum(60
|
|
void Engine::renderTick(float lag, const Game& game) {
|
|
void Engine::renderTick(float lag, const Game& game) {
|
|
updateWorldProjection();
|
|
updateWorldProjection();
|
|
updateWorldView();
|
|
updateWorldView();
|
|
-
|
|
+
|
|
if(renderSettings.shadows) {
|
|
if(renderSettings.shadows) {
|
|
renderShadow(lag, game);
|
|
renderShadow(lag, game);
|
|
}
|
|
}
|
|
@@ -37,8 +37,7 @@ void Engine::renderTick(float lag, const Game& game) {
|
|
}
|
|
}
|
|
|
|
|
|
void Engine::renderShadow(float lag, const Game& game) {
|
|
void Engine::renderShadow(float lag, const Game& game) {
|
|
-
|
|
+ framebuffers.shadow.bind();
|
|
- fb.shadow.bind();
|
|
|
|
GLWrapper::enableDepthTesting();
|
|
GLWrapper::enableDepthTesting();
|
|
shaders.shadow.use();
|
|
shaders.shadow.use();
|
|
worldShadowProjView.set(worldShadowProj).mul(worldShadowView);
|
|
worldShadowProjView.set(worldShadowProj).mul(worldShadowView);
|
|
@@ -50,8 +49,7 @@ void Engine::renderShadow(float lag, const Game& game) {
|
|
}
|
|
}
|
|
|
|
|
|
void Engine::renderWorld(float lag, const Game& game) {
|
|
void Engine::renderWorld(float lag, const Game& game) {
|
|
-
|
|
+ framebuffers.world.bind();
|
|
- fb.world.bind();
|
|
|
|
GLWrapper::enableDepthTesting();
|
|
GLWrapper::enableDepthTesting();
|
|
shaders.world.use();
|
|
shaders.world.use();
|
|
|
|
|
|
@@ -63,7 +61,7 @@ void Engine::renderWorld(float lag, const Game& game) {
|
|
shaders.world.setMatrix("view", worldView.setToIdentity().getValues());
|
|
shaders.world.setMatrix("view", worldView.setToIdentity().getValues());
|
|
model.clear();
|
|
model.clear();
|
|
shaders.world.setMatrix("model", model.get().getValues());
|
|
shaders.world.setMatrix("model", model.get().getValues());
|
|
- fb.shadow.bindDepthTexture(1);
|
|
+ framebuffers.shadow.bindDepthTexture(1);
|
|
shaders.world.setInt("shadows", renderSettings.shadows);
|
|
shaders.world.setInt("shadows", renderSettings.shadows);
|
|
shaders.world.setFloat("radius", renderSettings.testRadius);
|
|
shaders.world.setFloat("radius", renderSettings.testRadius);
|
|
shaders.world.setFloat("zbias", renderSettings.testBias);
|
|
shaders.world.setFloat("zbias", renderSettings.testBias);
|
|
@@ -72,7 +70,6 @@ void Engine::renderWorld(float lag, const Game& game) {
|
|
}
|
|
}
|
|
|
|
|
|
void Engine::renderSSAO() {
|
|
void Engine::renderSSAO() {
|
|
-
|
|
|
|
shaders.ssao.use();
|
|
shaders.ssao.use();
|
|
|
|
|
|
Matrix rProj;
|
|
Matrix rProj;
|
|
@@ -81,35 +78,33 @@ void Engine::renderSSAO() {
|
|
shaders.ssao.setMatrix("proj", rProj.getValues());
|
|
shaders.ssao.setMatrix("proj", rProj.getValues());
|
|
shaders.ssao.setInt("width", size.width);
|
|
shaders.ssao.setInt("width", size.width);
|
|
shaders.ssao.setInt("height", size.height);
|
|
shaders.ssao.setInt("height", size.height);
|
|
- fb.world.bindPositionTexture(0);
|
|
+ framebuffers.world.bindPositionTexture(0);
|
|
- fb.world.bindNormalTexture(1);
|
|
+ framebuffers.world.bindNormalTexture(1);
|
|
- fb.world.bindColorTexture(2);
|
|
+ framebuffers.world.bindColorTexture(2);
|
|
- fb.world.bindDepthTexture(3);
|
|
+ framebuffers.world.bindDepthTexture(3);
|
|
ssaoNoise.bind(4);
|
|
ssaoNoise.bind(4);
|
|
- fb.ssao.bind();
|
|
+ framebuffers.ssao.bind();
|
|
rectangle.draw();
|
|
rectangle.draw();
|
|
|
|
|
|
shaders.ssaoBlur.use();
|
|
shaders.ssaoBlur.use();
|
|
- fb.ssao.bindRedTexture(0);
|
|
+ framebuffers.ssao.bindRedTexture(0);
|
|
- fb.ssaoBlur.bind();
|
|
+ framebuffers.ssaoBlur.bind();
|
|
rectangle.draw();
|
|
rectangle.draw();
|
|
}
|
|
}
|
|
|
|
|
|
void Engine::renderPostWorld() {
|
|
void Engine::renderPostWorld() {
|
|
-
|
|
|
|
GLWrapper::prepareMainFramebuffer();
|
|
GLWrapper::prepareMainFramebuffer();
|
|
shaders.postWorld.use();
|
|
shaders.postWorld.use();
|
|
- fb.world.bindColorTexture(0);
|
|
+ framebuffers.world.bindColorTexture(0);
|
|
- fb.ssaoBlur.bindRedTexture(1);
|
|
+ framebuffers.ssaoBlur.bindRedTexture(1);
|
|
- fb.world.bindRedTexture(2);
|
|
+ framebuffers.world.bindRedTexture(2);
|
|
- fb.world.bindNormalTexture(3);
|
|
+ framebuffers.world.bindNormalTexture(3);
|
|
shaders.postWorld.setInt("ssao", renderSettings.ssao);
|
|
shaders.postWorld.setInt("ssao", renderSettings.ssao);
|
|
shaders.postWorld.setInt("shadows", renderSettings.shadows);
|
|
shaders.postWorld.setInt("shadows", renderSettings.shadows);
|
|
rectangle.draw();
|
|
rectangle.draw();
|
|
}
|
|
}
|
|
|
|
|
|
void Engine::renderTextOverlay(float lag, const Game& game) {
|
|
void Engine::renderTextOverlay(float lag, const Game& game) {
|
|
-
|
|
|
|
GLWrapper::disableDepthTesting();
|
|
GLWrapper::disableDepthTesting();
|
|
shaders.text.use();
|
|
shaders.text.use();
|
|
|
|
|