Browse Source

core update

Kajetan Johannes Hammerle 3 years ago
parent
commit
2e3cb19f0f
7 changed files with 88 additions and 99 deletions
  1. 9 48
      client/Main.cpp
  2. 21 10
      client/input/Controller.cpp
  3. 12 14
      client/input/Controller.h
  4. 26 10
      client/rendering/Engine.cpp
  5. 18 14
      client/rendering/Engine.h
  6. 1 1
      gaming-core
  7. 1 2
      meson.build

+ 9 - 48
client/Main.cpp

@@ -6,20 +6,7 @@
 #include "gaming-core/network/Client.h"
 #include "gaming-core/network/ENet.h"
 #include "gaming-core/rendering/Window.h"
-#include "gaming-core/rendering/WindowOptions.h"
-#include "gaming-core/utils/Clock.h"
 #include "gaming-core/wrapper/GL.h"
-#include "gaming-core/wrapper/GLEW.h"
-#include "gaming-core/wrapper/GLFW.h"
-
-void updateSize(const Window& window, Size& size, Framebuffers& framebuffers) {
-    Size newSize = window.getSize();
-    if(newSize.width != size.width || newSize.height != size.height) {
-        size = newSize;
-        GL::setViewport(size.width, size.height);
-        framebuffers.resize(size);
-    }
-}
 
 int main() {
     ENet enet;
@@ -32,15 +19,12 @@ int main() {
         std::cout << client.getError() << '\n';
         return 0;
     }
-    if(GLFW::init()) {
-        return 0;
-    }
-
     Size size(1024, 620);
     WindowOptions options(4, 0, size, false, "test");
     TextInput* textInput = nullptr;
-    Window window(textInput, options);
-    if(window.hasError() || GLEW::init()) {
+    Window w(textInput, options);
+    if(w.getError().has()) {
+        std::cout << w.getError().message << '\n';
         return 0;
     }
 
@@ -50,38 +34,15 @@ int main() {
     }
 
     Framebuffers framebuffers;
-    if(framebuffers.init(size)) {
+    if(framebuffers.init(w.getSize())) {
         return 0;
     }
 
     RenderSettings renderSettings;
-    Engine engine(shaders, framebuffers, size, renderSettings);
-
-    Buttons buttons(window);
-    Controller controller(buttons);
-    Clock fps;
-    Clock tps;
-    Game game(textInput, controller, fps, tps, renderSettings, size, client);
-
-    window.show();
-
-    GL::printError("setup error");
-
-    const Clock::Nanos nanosPerTick = 50000000;
-    Clock::Nanos lag = 0;
-    while(!window.shouldClose() && game.isRunning()) {
-        GL::printError("loop error");
-        updateSize(window, size, framebuffers);
-        engine.renderTick(static_cast<float>(lag) / nanosPerTick, game);
-        window.swapBuffers();
-        lag += fps.update();
-        while(lag >= nanosPerTick) {
-            lag -= nanosPerTick;
-            tps.update();
-            buttons.tick();
-            game.tick();
-        }
-        glfwPollEvents();
-    }
+    Controller controller(w.getButtons());
+    Game game(textInput, controller, w.getFrameClock(), w.getTickClock(),
+              renderSettings, w.getSize(), client);
+    Engine engine(shaders, framebuffers, w.getSize(), renderSettings, game);
+    w.run(engine, 50'000'000);
     return 0;
 }

+ 21 - 10
client/input/Controller.cpp

@@ -1,16 +1,27 @@
 #include "client/input/Controller.h"
 
 Controller::Controller(Buttons& b)
-    : buttons(b), list(b.get()), left(b.add(GLFW_KEY_A, "Left")),
-      right(b.add(GLFW_KEY_D, "Right")), up(b.add(GLFW_KEY_W, "X")),
-      down(b.add(GLFW_KEY_S, "Y")), jump(b.add(GLFW_KEY_SPACE, "L")),
-      sneak(b.add(GLFW_KEY_LEFT_SHIFT, "R")),
-      camLeft(b.add(GLFW_KEY_LEFT, "Start")),
-      camRight(b.add(GLFW_KEY_RIGHT, "Select")),
-      camUp(b.add(GLFW_KEY_UP, "Left")), camDown(b.add(GLFW_KEY_DOWN, "Right")),
-      mouseList(b.getMouse()),
-      leftClick(b.addMouse(GLFW_MOUSE_BUTTON_LEFT, "Left Click")),
-      rightClick(b.addMouse(GLFW_MOUSE_BUTTON_RIGHT, "Right Click")) {
+    : buttons(b), left(GLFW_KEY_A, "Left"), right(GLFW_KEY_D, "Right"),
+      up(GLFW_KEY_W, "X"), down(GLFW_KEY_S, "Y"), jump(GLFW_KEY_SPACE, "L"),
+      sneak(GLFW_KEY_LEFT_SHIFT, "R"), camLeft(GLFW_KEY_LEFT, "Start"),
+      camRight(GLFW_KEY_RIGHT, "Select"), camUp(GLFW_KEY_UP, "Left"),
+      camDown(GLFW_KEY_DOWN, "Right"),
+      leftClick(GLFW_MOUSE_BUTTON_LEFT, "Left Click"),
+      rightClick(GLFW_MOUSE_BUTTON_RIGHT, "Right Click") {
+    b.add(left);
+    b.add(right);
+    b.add(up);
+    b.add(down);
+    b.add(jump);
+    b.add(sneak);
+    b.add(camLeft);
+    b.add(camRight);
+    b.add(camUp);
+    b.add(camDown);
+
+    b.addMouse(leftClick);
+    b.addMouse(rightClick);
+
     b.mapGamepadAxis(left, -0.5f, GLFW_GAMEPAD_AXIS_LEFT_X);
     b.mapGamepadAxis(right, 0.5f, GLFW_GAMEPAD_AXIS_LEFT_X);
     b.mapGamepadAxis(up, -0.5f, GLFW_GAMEPAD_AXIS_LEFT_Y);

+ 12 - 14
client/input/Controller.h

@@ -8,21 +8,19 @@ class Controller {
     Buttons& buttons;
 
 public:
-    const ButtonList& list;
-    const Button& left;
-    const Button& right;
-    const Button& up;
-    const Button& down;
-    const Button& jump;
-    const Button& sneak;
-    const Button& camLeft;
-    const Button& camRight;
-    const Button& camUp;
-    const Button& camDown;
+    Button left;
+    Button right;
+    Button up;
+    Button down;
+    Button jump;
+    Button sneak;
+    Button camLeft;
+    Button camRight;
+    Button camUp;
+    Button camDown;
 
-    const MouseList& mouseList;
-    const Button& leftClick;
-    const Button& rightClick;
+    Button leftClick;
+    Button rightClick;
 
     Controller(Buttons& buttons);
 

+ 26 - 10
client/rendering/Engine.cpp

@@ -3,9 +3,10 @@
 #include "gaming-core/wrapper/GL.h"
 
 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);
     buffer.add(
         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);
 }
 
-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();
     updateWorldView();
 
     if(renderSettings.shadows) {
-        renderShadow(lag, game);
+        renderShadow(lag);
     }
-    renderWorld(lag, game);
+    renderWorld(lag);
     if(renderSettings.ssao) {
         renderSSAO();
     }
     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();
     GL::enableDepthTesting();
     shaders.shadow.use();
@@ -46,7 +62,7 @@ void Engine::renderShadow(float lag, Game& game) {
     game.renderWorld(lag, sm);
 }
 
-void Engine::renderWorld(float lag, Game& game) {
+void Engine::renderWorld(float lag) {
     framebuffers.world.bindAndClear();
     GL::enableDepthTesting();
     shaders.world.use();
@@ -104,7 +120,7 @@ void Engine::renderPostWorld() {
     rectangle.draw();
 }
 
-void Engine::renderOverlay(float lag, Game& game) {
+void Engine::renderOverlay(float lag) {
     GL::disableDepthTesting();
     shaders.overlay.use();
 

+ 18 - 14
client/rendering/Engine.h

@@ -11,24 +11,12 @@
 #include "gaming-core/math/Frustum.h"
 
 class Engine final {
-public:
-    Engine(Shaders& shaders, Framebuffers& fb, const Size& size,
-           RenderSettings& renderSettings);
-    void renderTick(float lag, Game& game);
-
-private:
-    void renderShadow(float lag, Game& game);
-    void renderWorld(float lag, Game& game);
-    void renderSSAO();
-    void renderPostWorld();
-    void renderOverlay(float lag, Game& game);
-    void updateWorldProjection();
-    void updateWorldView();
-
     Shaders& shaders;
     Framebuffers& framebuffers;
+    Size lastSize;
     const Size& size;
     RenderSettings& renderSettings;
+    Game& game;
 
     Frustum frustum;
     MatrixStack<16> model;
@@ -41,6 +29,22 @@ private:
     Matrix worldShadowProj;
     Matrix worldShadowView;
     Matrix worldShadowProjView;
+
+public:
+    Engine(Shaders& shaders, Framebuffers& fb, const Size& size,
+           RenderSettings& renderSettings, Game& game);
+    void render(float lag);
+    void tick();
+    bool isRunning() const;
+
+private:
+    void renderShadow(float lag);
+    void renderWorld(float lag);
+    void renderSSAO();
+    void renderPostWorld();
+    void renderOverlay(float lag);
+    void updateWorldProjection();
+    void updateWorldView();
 };
 
 #endif

+ 1 - 1
gaming-core

@@ -1 +1 @@
-Subproject commit 18c11759be38328c95fea4e3ef067f4a0c390c4d
+Subproject commit f771b8a0406ce86272f32374811aca8b70dac424

+ 1 - 2
meson.build

@@ -27,9 +27,7 @@ sourcesClient = ['client/Main.cpp',
     'gaming-core/math/Plane.cpp',
     'gaming-core/math/Matrix.cpp',
     'gaming-core/math/Quaternion.cpp',
-    'gaming-core/wrapper/GLFW.cpp',
     'gaming-core/wrapper/GL.cpp',
-    'gaming-core/wrapper/GLEW.cpp',
     'gaming-core/rendering/Shader.cpp',
     'gaming-core/rendering/Texture.cpp',
     'gaming-core/rendering/TextureFormat.cpp',
@@ -40,6 +38,7 @@ sourcesClient = ['client/Main.cpp',
     'gaming-core/rendering/FileTexture.cpp',
     'gaming-core/images/PNGReader.cpp',
     'gaming-core/utils/Buffer.cpp',
+    'gaming-core/utils/Error.cpp',
     'gaming-core/input/Button.cpp',
     'gaming-core/input/Buttons.cpp',
     'gaming-core/input/TextInput.cpp',