|
@@ -3,9 +3,10 @@
|
|
#include "gaming-core/wrapper/GL.h"
|
|
#include "gaming-core/wrapper/GL.h"
|
|
|
|
|
|
Engine::Engine(Shaders& shaders, Framebuffers& fb, const Size& size,
|
|
Engine::Engine(Shaders& shaders, Framebuffers& fb, const Size& size,
|
|
- RenderSettings& renderSettings)
|
|
|
|
- : shaders(shaders), framebuffers(fb), size(size),
|
|
|
|
- renderSettings(renderSettings), frustum(60.0f, 0.1f, 1000.0f, size) {
|
|
|
|
|
|
+ RenderSettings& renderSettings, Game& game)
|
|
|
|
+ : shaders(shaders), framebuffers(fb), lastSize(size), size(size),
|
|
|
|
+ renderSettings(renderSettings), game(game),
|
|
|
|
+ frustum(60.0f, 0.1f, 1000.0f, size) {
|
|
TypedBuffer<Triangle> buffer(2);
|
|
TypedBuffer<Triangle> buffer(2);
|
|
buffer.add(
|
|
buffer.add(
|
|
Triangle(Vertex(Vector3(-1.0f, -1.0f, 0.0f), Vector2(0, 0.0f)),
|
|
Triangle(Vertex(Vector3(-1.0f, -1.0f, 0.0f), Vector2(0, 0.0f)),
|
|
@@ -18,22 +19,37 @@ Engine::Engine(Shaders& shaders, Framebuffers& fb, const Size& size,
|
|
rectangle.build(buffer);
|
|
rectangle.build(buffer);
|
|
}
|
|
}
|
|
|
|
|
|
-void Engine::renderTick(float lag, Game& game) {
|
|
|
|
|
|
+void Engine::render(float lag) {
|
|
|
|
+ if(size.width != lastSize.width || size.height != lastSize.height) {
|
|
|
|
+ GL::setViewport(size.width, size.height);
|
|
|
|
+ framebuffers.resize(size);
|
|
|
|
+ lastSize = size;
|
|
|
|
+ }
|
|
|
|
+ GL::printError("loop error");
|
|
|
|
+
|
|
updateWorldProjection();
|
|
updateWorldProjection();
|
|
updateWorldView();
|
|
updateWorldView();
|
|
|
|
|
|
if(renderSettings.shadows) {
|
|
if(renderSettings.shadows) {
|
|
- renderShadow(lag, game);
|
|
|
|
|
|
+ renderShadow(lag);
|
|
}
|
|
}
|
|
- renderWorld(lag, game);
|
|
|
|
|
|
+ renderWorld(lag);
|
|
if(renderSettings.ssao) {
|
|
if(renderSettings.ssao) {
|
|
renderSSAO();
|
|
renderSSAO();
|
|
}
|
|
}
|
|
renderPostWorld();
|
|
renderPostWorld();
|
|
- renderOverlay(lag, game);
|
|
|
|
|
|
+ renderOverlay(lag);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void Engine::tick() {
|
|
|
|
+ game.tick();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+bool Engine::isRunning() const {
|
|
|
|
+ return game.isRunning();
|
|
}
|
|
}
|
|
|
|
|
|
-void Engine::renderShadow(float lag, Game& game) {
|
|
|
|
|
|
+void Engine::renderShadow(float lag) {
|
|
framebuffers.shadow.bindAndClear();
|
|
framebuffers.shadow.bindAndClear();
|
|
GL::enableDepthTesting();
|
|
GL::enableDepthTesting();
|
|
shaders.shadow.use();
|
|
shaders.shadow.use();
|
|
@@ -46,7 +62,7 @@ void Engine::renderShadow(float lag, Game& game) {
|
|
game.renderWorld(lag, sm);
|
|
game.renderWorld(lag, sm);
|
|
}
|
|
}
|
|
|
|
|
|
-void Engine::renderWorld(float lag, Game& game) {
|
|
|
|
|
|
+void Engine::renderWorld(float lag) {
|
|
framebuffers.world.bindAndClear();
|
|
framebuffers.world.bindAndClear();
|
|
GL::enableDepthTesting();
|
|
GL::enableDepthTesting();
|
|
shaders.world.use();
|
|
shaders.world.use();
|
|
@@ -104,7 +120,7 @@ void Engine::renderPostWorld() {
|
|
rectangle.draw();
|
|
rectangle.draw();
|
|
}
|
|
}
|
|
|
|
|
|
-void Engine::renderOverlay(float lag, Game& game) {
|
|
|
|
|
|
+void Engine::renderOverlay(float lag) {
|
|
GL::disableDepthTesting();
|
|
GL::disableDepthTesting();
|
|
shaders.overlay.use();
|
|
shaders.overlay.use();
|
|
|
|
|