|
@@ -8,7 +8,6 @@
|
|
#include "utils/Random.h"
|
|
#include "utils/Random.h"
|
|
#include "wrapper/GL.h"
|
|
#include "wrapper/GL.h"
|
|
|
|
|
|
-static Window window;
|
|
|
|
static Shader worldShader;
|
|
static Shader worldShader;
|
|
static Shader ssaoShader;
|
|
static Shader ssaoShader;
|
|
static Shader ssaoBlurShader;
|
|
static Shader ssaoBlurShader;
|
|
@@ -19,8 +18,7 @@ static Framebuffer<5> worldBuffer;
|
|
static Framebuffer<1> ssaoBuffer;
|
|
static Framebuffer<1> ssaoBuffer;
|
|
static Framebuffer<1> ssaoBlurBuffer;
|
|
static Framebuffer<1> ssaoBlurBuffer;
|
|
static Framebuffer<1> shadowBuffer;
|
|
static Framebuffer<1> shadowBuffer;
|
|
-static Size lastSize{0, 0};
|
|
+static Frustum frustum{60.0f, 0.1f, 1000.0f, Window::getSize()};
|
|
-static Frustum frustum{60.0f, 0.1f, 1000.0f, window.getSize()};
|
|
|
|
static MatrixStack<16> model;
|
|
static MatrixStack<16> model;
|
|
Renderer Engine::renderer;
|
|
Renderer Engine::renderer;
|
|
ShaderMatrix Engine::matrix{nullptr, model, nullptr};
|
|
ShaderMatrix Engine::matrix{nullptr, model, nullptr};
|
|
@@ -120,18 +118,18 @@ static void initNoise() {
|
|
|
|
|
|
bool Engine::init() {
|
|
bool Engine::init() {
|
|
WindowOptions options(4, 0, {1024, 620}, false, "test");
|
|
WindowOptions options(4, 0, {1024, 620}, false, "test");
|
|
- Error error = window.open(options);
|
|
+ Error error = Window::open(options);
|
|
if(error.has()) {
|
|
if(error.has()) {
|
|
LOG_ERROR(error.message);
|
|
LOG_ERROR(error.message);
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
- lastSize = window.getSize();
|
|
+ Window::show();
|
|
error = initShaders();
|
|
error = initShaders();
|
|
if(error.has()) {
|
|
if(error.has()) {
|
|
LOG_ERROR(error.message);
|
|
LOG_ERROR(error.message);
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
- error = initFramebuffers(window.getSize());
|
|
+ error = initFramebuffers(Window::getSize());
|
|
if(error.has()) {
|
|
if(error.has()) {
|
|
LOG_ERROR(error.message);
|
|
LOG_ERROR(error.message);
|
|
return true;
|
|
return true;
|
|
@@ -187,9 +185,8 @@ static void renderSSAO() {
|
|
rProj *= worldProj;
|
|
rProj *= worldProj;
|
|
|
|
|
|
ssaoShader.setMatrix("proj", rProj.getValues());
|
|
ssaoShader.setMatrix("proj", rProj.getValues());
|
|
- const Size& size = window.getSize();
|
|
+ ssaoShader.setInt("width", Window::getSize().width);
|
|
- ssaoShader.setInt("width", size.width);
|
|
+ ssaoShader.setInt("height", Window::getSize().height);
|
|
- ssaoShader.setInt("height", size.height);
|
|
|
|
worldBuffer.bindTextureTo(0, 0);
|
|
worldBuffer.bindTextureTo(0, 0);
|
|
worldBuffer.bindTextureTo(4, 1);
|
|
worldBuffer.bindTextureTo(4, 1);
|
|
ssaoNoise.bindTo(2);
|
|
ssaoNoise.bindTo(2);
|
|
@@ -219,9 +216,9 @@ static void renderOverlay() {
|
|
GL::disableDepthTesting();
|
|
GL::disableDepthTesting();
|
|
overlayShader.use();
|
|
overlayShader.use();
|
|
|
|
|
|
- const Size& size = window.getSize();
|
|
|
|
Matrix m;
|
|
Matrix m;
|
|
- m.scale(Vector3(2.0f / size.width, -2.0f / size.height, 1.0f))
|
|
+ m.scale(Vector3(2.0f / Window::getSize().width,
|
|
|
|
+ -2.0f / Window::getSize().height, 1.0f))
|
|
.translate(Vector3(-1.0f, 1.0f, 0.0f));
|
|
.translate(Vector3(-1.0f, 1.0f, 0.0f));
|
|
overlayShader.setMatrix("view", m.getValues());
|
|
overlayShader.setMatrix("view", m.getValues());
|
|
model.clear();
|
|
model.clear();
|
|
@@ -265,11 +262,9 @@ static void updateWorldView() {
|
|
}
|
|
}
|
|
|
|
|
|
static void startRender() {
|
|
static void startRender() {
|
|
- const Size& size = window.getSize();
|
|
+ if(Window::hasSizeChanged()) {
|
|
- if(size.width != lastSize.width || size.height != lastSize.height) {
|
|
+ GL::setViewport(Window::getSize().width, Window::getSize().height);
|
|
- GL::setViewport(size.width, size.height);
|
|
+ resizeFramebuffers(Window::getSize());
|
|
- resizeFramebuffers(size);
|
|
|
|
- lastSize = size;
|
|
|
|
}
|
|
}
|
|
GL::printError("loop error");
|
|
GL::printError("loop error");
|
|
|
|
|
|
@@ -287,53 +282,23 @@ static void startRender() {
|
|
renderOverlay();
|
|
renderOverlay();
|
|
}
|
|
}
|
|
|
|
|
|
-struct Loop final {
|
|
+static void render(float lag) {
|
|
- void render(float lag) {
|
|
+ Engine::lag = lag;
|
|
- Engine::lag = lag;
|
|
+ startRender();
|
|
- startRender();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- void tick() {
|
|
|
|
- Game::tick();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- bool isRunning() const {
|
|
|
|
- return running;
|
|
|
|
- }
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-void Engine::run() {
|
|
|
|
- Loop loop;
|
|
|
|
- window.run(loop, 50'000'000);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-void Engine::stop() {
|
|
+static void tick() {
|
|
- running = false;
|
|
+ Game::tick();
|
|
}
|
|
}
|
|
|
|
|
|
-void Engine::setTextInput(TextInput* input) {
|
|
+static bool isRunning() {
|
|
- window.textInput = input;
|
|
+ return running && !Window::shouldClose();
|
|
- if(input != nullptr) {
|
|
|
|
- input->setActive(true);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-bool Engine::isActiveTextInput(TextInput* input) {
|
|
+void Engine::run() {
|
|
- return window.textInput == input;
|
|
+ Window::run<isRunning, tick, render>(50'000'000);
|
|
-}
|
|
|
|
-
|
|
|
|
-Buttons& Engine::getButtons() {
|
|
|
|
- return window.buttons;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-const Size& Engine::getSize() {
|
|
|
|
- return window.getSize();
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-const Clock& Engine::getFrameClock() {
|
|
|
|
- return window.getFrameClock();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-const Clock& Engine::getTickClock() {
|
|
+void Engine::stop() {
|
|
- return window.getTickClock();
|
|
+ running = false;
|
|
}
|
|
}
|