|
@@ -1,6 +1,11 @@
|
|
|
+#include <cmath>
|
|
|
+#include <cfloat>
|
|
|
+
|
|
|
#include "client/rendering/Engine.h"
|
|
|
#include "client/rendering/wrapper/GLFWWrapper.h"
|
|
|
#include "client/rendering/wrapper/GLWrapper.h"
|
|
|
+#include "client/rendering/Renderer.h"
|
|
|
+#include "client/math/Plane.h"
|
|
|
|
|
|
Engine::Engine(Shaders& shaders, Framebuffers& fb, Camera& camera, const WindowSize& size,
|
|
|
RenderSettings& renderSettings) :
|
|
@@ -19,10 +24,12 @@ void Engine::renderTick(float lag, const Game& game) {
|
|
|
camera.update(lag);
|
|
|
updateWorldProjection();
|
|
|
updateWorldView();
|
|
|
-
|
|
|
- renderShadow(lag, game);
|
|
|
+
|
|
|
+ if(renderSettings.shadows) {
|
|
|
+ renderShadow(lag, game);
|
|
|
+ }
|
|
|
renderWorld(lag, game);
|
|
|
- if(renderSettings.useSSAO) {
|
|
|
+ if(renderSettings.ssao) {
|
|
|
renderSSAO();
|
|
|
}
|
|
|
renderPostWorld();
|
|
@@ -53,6 +60,7 @@ void Engine::renderWorld(float lag, const Game& game) {
|
|
|
model.clear();
|
|
|
shaders.world.setMatrix("model", model.get().getValues());
|
|
|
fb.shadow.bindDepthTexture(1);
|
|
|
+ shaders.world.setInt("shadows", renderSettings.shadows);
|
|
|
shaders.world.setFloat("radius", renderSettings.testRadius);
|
|
|
shaders.world.setFloat("bias", renderSettings.testBias);
|
|
|
Renderer renderer(shaders.world, model);
|
|
@@ -89,7 +97,8 @@ void Engine::renderPostWorld() {
|
|
|
fb.ssaoBlur.bindRedTexture(1);
|
|
|
fb.world.bindRedTexture(2);
|
|
|
fb.world.bindNormalTexture(3);
|
|
|
- shaders.postWorld.setInt("useSSAO", renderSettings.useSSAO);
|
|
|
+ shaders.postWorld.setInt("ssao", renderSettings.ssao);
|
|
|
+ shaders.postWorld.setInt("shadows", renderSettings.shadows);
|
|
|
rectangle.draw();
|
|
|
}
|
|
|
|
|
@@ -113,6 +122,10 @@ void Engine::renderTextOverlay(float lag, const Game& game) {
|
|
|
|
|
|
void Engine::updateWorldProjection() {
|
|
|
frustum.setProjection(worldProj, size.width, size.height);
|
|
|
+
|
|
|
+ if(!renderSettings.shadows) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
// http://cgvr.informatik.uni-bremen.de/teaching/cg_literatur/lighthouse3d_view_frustum_culling/index.html
|
|
|
const float fovY = 60.0f;
|
|
@@ -251,6 +264,10 @@ void Engine::updateWorldView() {
|
|
|
worldView.set(12, right.dotInverse(pos));
|
|
|
worldView.set(13, up.dotInverse(pos));
|
|
|
worldView.set(14, back.dotInverse(pos));
|
|
|
+
|
|
|
+ if(!renderSettings.shadows) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
right.set(0.939693f, 0.0f, -0.34202f);
|
|
|
back.set(0.280166f, 0.573576f, 0.769751f);
|