From 93b32237372562f4dd815ddf7fc670a4d5174a21 Mon Sep 17 00:00:00 2001 From: Lars Date: Fri, 28 May 2021 12:08:12 +0200 Subject: [PATCH 1/2] [testing] shader ddoesnt work, still on it --- src/entities/Camera.h | 2 +- src/gui/gui_interactable.cpp | 1 + src/main.cpp | 65 +++++++++++++++++------------ src/scenes/in_Game_Scene.cpp | 79 ++++++++++++++++++++++++++++++++++++ src/scenes/in_Game_Scene.h | 19 +++++++++ src/scenes/scene.cpp | 7 ++++ src/scenes/scene.h | 34 ++++++++++++++++ src/scenes/startup_Scene.cpp | 35 ++++++++++++++++ src/scenes/startup_Scene.h | 20 +++++++++ wk2_fps.vcxproj | 6 +++ wk2_fps.vcxproj.filters | 18 ++++++++ 11 files changed, 259 insertions(+), 27 deletions(-) create mode 100644 src/scenes/in_Game_Scene.cpp create mode 100644 src/scenes/in_Game_Scene.h create mode 100644 src/scenes/scene.cpp create mode 100644 src/scenes/scene.h create mode 100644 src/scenes/startup_Scene.cpp create mode 100644 src/scenes/startup_Scene.h diff --git a/src/entities/Camera.h b/src/entities/Camera.h index 6f6fe0a..a47af65 100644 --- a/src/entities/Camera.h +++ b/src/entities/Camera.h @@ -1,5 +1,5 @@ #pragma once - +#include #include #include diff --git a/src/gui/gui_interactable.cpp b/src/gui/gui_interactable.cpp index d96250c..4681554 100644 --- a/src/gui/gui_interactable.cpp +++ b/src/gui/gui_interactable.cpp @@ -1,3 +1,4 @@ +#include #include #include "gui_interactable.h" diff --git a/src/main.cpp b/src/main.cpp index bd57547..bcf181b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,6 +3,7 @@ #include #define STB_IMAGE_IMPLEMENTATION #include +#include #include "stb_image.h" #include @@ -16,6 +17,9 @@ #include "renderEngine/renderer.h" #include "shaders/entity_shader.h" #include "toolbox/toolbox.h" +#include "scenes/scene.h" +#include "scenes/in_Game_Scene.h" +#include "scenes/startup_Scene.h" #pragma comment(lib, "glfw3.lib") #pragma comment(lib, "glew32s.lib") @@ -23,8 +27,9 @@ static double UpdateDelta(); -static GLFWwindow* window; - +GLFWwindow* window; +std::map scenes; +scene::Scene* current_scene = nullptr; int main(void) { @@ -44,42 +49,48 @@ int main(void) glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int scancode, int action, int mods) { + current_scene->onKey(key, scancode, action, mods); if (key == GLFW_KEY_ESCAPE) glfwSetWindowShouldClose(window, true); }); + + + scenes[scene::Scenes::STARTUP] = new scene::Startup_Scene(); + scenes[scene::Scenes::INGAME] = new scene::In_Game_Scene(); + current_scene = scenes[scene::Scenes::STARTUP]; - models::RawModel raw_model = render_engine::LoadObjModel("res/House.obj"); + /* models::RawModel raw_model = render_engine::LoadObjModel("res/House.obj"); models::ModelTexture texture = { render_engine::loader::LoadTexture("res/Texture.png") }; texture.shine_damper = 10; texture.reflectivity = 0; - models::TexturedModel model = { raw_model, texture }; + models::TexturedModel model = { raw_model, texture };*/ /** * load and add some models (in this case some level sections) to the entities list. * */ - std::vector entities; + /*std::vector entities; int z = 0; for (int i = 0; i < 5; ++i) { entities.push_back(entities::Entity(model, glm::vec3(0, -50, -50 - z), glm::vec3(0, 90, 0), 20)); z += (raw_model.model_size.x * 20); - } + }*/ - std::vector lights; + /* std::vector lights; lights.push_back(entities::Light(glm::vec3(0, 1000, -7000), glm::vec3(5, 5, 5))); lights.push_back(entities::Light(glm::vec3(0, 0, -30), glm::vec3(2, 0, 2), glm::vec3(0.0001f, 0.0001f, 0.0001f))); - lights.push_back(entities::Light(glm::vec3(0, 0, -200), glm::vec3(0, 2, 0), glm::vec3(0.0001f, 0.0001f, 0.0001f))); + lights.push_back(entities::Light(glm::vec3(0, 0, -200), glm::vec3(0, 2, 0), glm::vec3(0.0001f, 0.0001f, 0.0001f)));*/ - shaders::EntityShader shader; + /*shaders::EntityShader shader; shader.Init(); - render_engine::renderer::Init(shader); + render_engine::renderer::Init(shader);*/ - entities::Camera camera(glm::vec3(0, 0, 0), glm::vec3(0, 0, 0)); + //entities::Camera camera(glm::vec3(0, 0, 0), glm::vec3(0, 0, 0)); // GUI stuff - shaders::GuiShader gui_shader; + /* shaders::GuiShader gui_shader; gui_shader.Init(); std::vector guis; @@ -91,36 +102,38 @@ int main(void) std::cout << "I got clicked on!" << std::endl; }); guis.push_back(&button); - + */ // Main game loop while (!glfwWindowShouldClose(window)) { // Update const double delta = UpdateDelta(); - camera.Move(window); - button.Update(window); + //camera.Move(window); + current_scene->update(); + // button.Update(window); + current_scene->render(); // Render - render_engine::renderer::Prepare(); + //render_engine::renderer::Prepare(); // Start rendering the entities - shader.Start(); - shader.LoadSkyColor(render_engine::renderer::SKY_COLOR); - shader.LoadLights(lights); - shader.LoadViewMatrix(camera); + //shader.Start(); + //shader.LoadSkyColor(render_engine::renderer::SKY_COLOR); + //shader.LoadLights(lights); + //shader.LoadViewMatrix(camera); // Renders each entity in the entities list - for (entities::Entity& entity : entities) + /* for (entities::Entity& entity : entities) { render_engine::renderer::Render(entity, shader); - } + }*/ // Stop rendering the entities - shader.Stop(); + //shader.Stop(); // Render GUI items - render_engine::renderer::Render(guis, gui_shader); + //render_engine::renderer::Render(guis, gui_shader); // Finish up glfwSwapBuffers(window); @@ -128,8 +141,8 @@ int main(void) } // Clean up - shader.CleanUp(); - gui_shader.CleanUp(); + //shader.CleanUp(); + // gui_shader.CleanUp(); render_engine::loader::CleanUp(); glfwTerminate(); return 0; diff --git a/src/scenes/in_Game_Scene.cpp b/src/scenes/in_Game_Scene.cpp new file mode 100644 index 0000000..4dd6261 --- /dev/null +++ b/src/scenes/in_Game_Scene.cpp @@ -0,0 +1,79 @@ +#include +#include +#include "in_Game_Scene.h" +#include "startup_Scene.h" +#include "../gui/gui_interactable.h" +#include "../models/model.h" +#include "../renderEngine/loader.h" +#include "../renderEngine/obj_loader.h" +#include "../renderEngine/renderer.h" +#include "../shaders/entity_shader.h" +#include "../toolbox/toolbox.h" + + +namespace scene +{ + std::vector entities; + std::vector lights; + models::RawModel raw_model; + models::ModelTexture texture; + shaders::EntityShader shader; + entities::Camera camera(glm::vec3(0, 0, 0), glm::vec3(0, 0, 0)); + + extern GLFWwindow* window; + + + void scene::In_Game_Scene::start() + { + raw_model = render_engine::LoadObjModel("res/House.obj"); + texture = { render_engine::loader::LoadTexture("res/Texture.png") }; + texture.shine_damper = 10; + texture.reflectivity = 0; + models::TexturedModel model = { raw_model, texture }; + + int z = 0; + for (int i = 0; i < 5; ++i) + { + entities.push_back(entities::Entity(model, glm::vec3(0, -50, -50 - z), glm::vec3(0, 90, 0), 20)); + z += (raw_model.model_size.x * 20); + } + + shader.Init(); + render_engine::renderer::Init(shader); + + lights.push_back(entities::Light(glm::vec3(0, 1000, -7000), glm::vec3(5, 5, 5))); + lights.push_back(entities::Light(glm::vec3(0, 0, -30), glm::vec3(2, 0, 2), glm::vec3(0.0001f, 0.0001f, 0.0001f))); + lights.push_back(entities::Light(glm::vec3(0, 0, -200), glm::vec3(0, 2, 0), glm::vec3(0.0001f, 0.0001f, 0.0001f))); + + } + + void scene::In_Game_Scene::render() + { + // Render + render_engine::renderer::Prepare(); + + shader.Start(); + shader.LoadSkyColor(render_engine::renderer::SKY_COLOR); + shader.LoadLights(lights); + shader.LoadViewMatrix(camera); + // Renders each entity in the entities list + for (entities::Entity& entity : entities) + { + render_engine::renderer::Render(entity, shader); + } + + // Stop rendering the entities + shader.Stop(); + } + + void scene::In_Game_Scene::update() + { + camera.Move(window); + } + + void scene::In_Game_Scene::onKey(int key, int scancode, int action, int mods) + { + + } + +} diff --git a/src/scenes/in_Game_Scene.h b/src/scenes/in_Game_Scene.h new file mode 100644 index 0000000..60d0e2a --- /dev/null +++ b/src/scenes/in_Game_Scene.h @@ -0,0 +1,19 @@ +#pragma once +#include "scene.h" + +namespace scene +{ + class In_Game_Scene : public scene::Scene + { + private: + + + public: + virtual void start() override; + virtual void render() override; + virtual void update() override; + virtual void onKey(int key, int scancode, int action, int mods) override; + }; +} + + diff --git a/src/scenes/scene.cpp b/src/scenes/scene.cpp new file mode 100644 index 0000000..7183938 --- /dev/null +++ b/src/scenes/scene.cpp @@ -0,0 +1,7 @@ +#include "scene.h" + +namespace scene +{ + +} + diff --git a/src/scenes/scene.h b/src/scenes/scene.h new file mode 100644 index 0000000..66ef021 --- /dev/null +++ b/src/scenes/scene.h @@ -0,0 +1,34 @@ +#pragma once +#include +#include +#include + + +namespace scene { + + + + class Scene + { + public: + virtual void start() = 0; + virtual void render() = 0; + virtual void update() = 0; + virtual void onKey(int key, int scancode, int action, int mods) {}; + + }; + + enum class Scenes + { + STARTUP, + INGAME, + GAMEOVER, + CALIBRATION + }; + + extern std::map scenes; + extern Scene* current_scene; + extern GLFWwindow* window; +} + + diff --git a/src/scenes/startup_Scene.cpp b/src/scenes/startup_Scene.cpp new file mode 100644 index 0000000..49cbf10 --- /dev/null +++ b/src/scenes/startup_Scene.cpp @@ -0,0 +1,35 @@ +#include +#include +#include +#include "startup_Scene.h" + +namespace scene +{ + std::map scenes; + Scene* current_scene; + GLFWwindow* window; + + void scene::Startup_Scene::start() + { + + } + + void scene::Startup_Scene::render() + { + + } + + void scene::Startup_Scene::update() + { + + } + + void scene::Startup_Scene::onKey(int key, int scancode, int action, int mods) + { + if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) + { + current_scene = scenes[Scenes::INGAME]; + current_scene->start(); + } + } +} diff --git a/src/scenes/startup_Scene.h b/src/scenes/startup_Scene.h new file mode 100644 index 0000000..953ec68 --- /dev/null +++ b/src/scenes/startup_Scene.h @@ -0,0 +1,20 @@ +#pragma once +#include "scene.h" +#include + +namespace scene +{ + class Startup_Scene : public scene::Scene + { + private: + + + public: + virtual void start() override; + virtual void render() override; + virtual void update() override; + virtual void onKey(int key, int scancode, int action, int mods) override; + }; +} + + diff --git a/wk2_fps.vcxproj b/wk2_fps.vcxproj index c644541..d9d0953 100644 --- a/wk2_fps.vcxproj +++ b/wk2_fps.vcxproj @@ -19,6 +19,8 @@ + + @@ -30,8 +32,11 @@ + + + @@ -46,6 +51,7 @@ + 16.0 diff --git a/wk2_fps.vcxproj.filters b/wk2_fps.vcxproj.filters index 6b55913..44c9164 100644 --- a/wk2_fps.vcxproj.filters +++ b/wk2_fps.vcxproj.filters @@ -48,6 +48,15 @@ Source Files + + Source Files + + + Source Files + + + Source Files + @@ -92,5 +101,14 @@ Header Files + + Header Files + + + Header Files + + + Header Files + \ No newline at end of file From 5d31327a47854cea34a9df71e50962ab7fd89bb3 Mon Sep 17 00:00:00 2001 From: Lars Date: Fri, 28 May 2021 16:04:41 +0200 Subject: [PATCH 2/2] [ADD] The scene switching works now, the only thing to do is controling the scenes with the keys! --- src/main.cpp | 125 ++++++++++----------------------- src/scenes/in_Game_Scene.cpp | 71 ++++++++++++++----- src/scenes/in_Game_Scene.h | 13 ++-- src/scenes/scene.h | 29 ++++---- src/scenes/startup_Scene.cpp | 21 +++--- src/scenes/startup_Scene.h | 12 ++-- src/shaders/shader_program.cpp | 1 + 7 files changed, 133 insertions(+), 139 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index bcf181b..a2b49ce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,9 +27,8 @@ static double UpdateDelta(); -GLFWwindow* window; -std::map scenes; -scene::Scene* current_scene = nullptr; +static GLFWwindow* window; +scene::Scene* current_scene; int main(void) { @@ -47,103 +46,51 @@ int main(void) glGetError(); #pragma endregion + + current_scene = new scene::Startup_Scene(); + + + + glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int scancode, int action, int mods) - { - current_scene->onKey(key, scancode, action, mods); - if (key == GLFW_KEY_ESCAPE) - glfwSetWindowShouldClose(window, true); - }); - - - scenes[scene::Scenes::STARTUP] = new scene::Startup_Scene(); - scenes[scene::Scenes::INGAME] = new scene::In_Game_Scene(); - current_scene = scenes[scene::Scenes::STARTUP]; - - - /* models::RawModel raw_model = render_engine::LoadObjModel("res/House.obj"); - models::ModelTexture texture = { render_engine::loader::LoadTexture("res/Texture.png") }; - texture.shine_damper = 10; - texture.reflectivity = 0; - models::TexturedModel model = { raw_model, texture };*/ - - /** - * load and add some models (in this case some level sections) to the entities list. - * */ - /*std::vector entities; - int z = 0; - for (int i = 0; i < 5; ++i) - { - entities.push_back(entities::Entity(model, glm::vec3(0, -50, -50 - z), glm::vec3(0, 90, 0), 20)); - z += (raw_model.model_size.x * 20); - }*/ - - /* std::vector lights; - lights.push_back(entities::Light(glm::vec3(0, 1000, -7000), glm::vec3(5, 5, 5))); - lights.push_back(entities::Light(glm::vec3(0, 0, -30), glm::vec3(2, 0, 2), glm::vec3(0.0001f, 0.0001f, 0.0001f))); - lights.push_back(entities::Light(glm::vec3(0, 0, -200), glm::vec3(0, 2, 0), glm::vec3(0.0001f, 0.0001f, 0.0001f)));*/ - - /*shaders::EntityShader shader; - shader.Init(); - render_engine::renderer::Init(shader);*/ - - //entities::Camera camera(glm::vec3(0, 0, 0), glm::vec3(0, 0, 0)); - - - // GUI stuff - /* shaders::GuiShader gui_shader; - gui_shader.Init(); - - std::vector guis; - gui::Button button(render_engine::loader::LoadTexture("res/Mayo.png"), glm::vec2(0.5f, 0.0f), glm::vec2(0.25f, 0.25f)); - button.SetHoverTexture(render_engine::loader::LoadTexture("res/Texture.png")); - button.SetClickedTexture(render_engine::loader::LoadTexture("res/Mayo.png")); - button.SetOnClickAction([]() { - std::cout << "I got clicked on!" << std::endl; + current_scene->onKey(window, key, scancode, action, mods); + if (key == GLFW_KEY_ESCAPE) + glfwSetWindowShouldClose(window, true); }); - guis.push_back(&button); - */ - + + bool window_open = true; // Main game loop - while (!glfwWindowShouldClose(window)) + while (!glfwWindowShouldClose(window) && window_open) { - // Update + //Update const double delta = UpdateDelta(); - //camera.Move(window); - current_scene->update(); - // button.Update(window); - current_scene->render(); - // Render - //render_engine::renderer::Prepare(); - - // Start rendering the entities - //shader.Start(); - //shader.LoadSkyColor(render_engine::renderer::SKY_COLOR); - //shader.LoadLights(lights); - //shader.LoadViewMatrix(camera); - - // Renders each entity in the entities list - /* for (entities::Entity& entity : entities) - { - render_engine::renderer::Render(entity, shader); - }*/ + scene::Scenes return_value = current_scene->start(window); + delete current_scene; - // Stop rendering the entities - //shader.Stop(); + switch (return_value) { + case scene::Scenes::STOP: + window_open = false; + break; - // Render GUI items - //render_engine::renderer::Render(guis, gui_shader); + case scene::Scenes::STARTUP: + current_scene = new scene::Startup_Scene(); + break; - // Finish up - glfwSwapBuffers(window); - glfwPollEvents(); + case scene::Scenes::INGAME: + current_scene = new scene::In_Game_Scene(); + break; + + default: + std::cout << "Wrong return value!!! ->" << std::endl; + break; + } } - // Clean up - //shader.CleanUp(); - // gui_shader.CleanUp(); - render_engine::loader::CleanUp(); + // Clean up -> preventing memory leaks!!! + std::cout << "ending..." << std::endl; + delete current_scene; glfwTerminate(); return 0; } @@ -155,4 +102,4 @@ static double UpdateDelta() double delt_time = current_time - last_frame_time; last_frame_time = current_time; return delt_time; -} \ No newline at end of file +} diff --git a/src/scenes/in_Game_Scene.cpp b/src/scenes/in_Game_Scene.cpp index 4dd6261..0e7c268 100644 --- a/src/scenes/in_Game_Scene.cpp +++ b/src/scenes/in_Game_Scene.cpp @@ -1,3 +1,4 @@ +#include #include #include #include "in_Game_Scene.h" @@ -17,13 +18,23 @@ namespace scene std::vector lights; models::RawModel raw_model; models::ModelTexture texture; - shaders::EntityShader shader; + shaders::EntityShader *shader; + shaders::GuiShader *gui_shader; entities::Camera camera(glm::vec3(0, 0, 0), glm::vec3(0, 0, 0)); - - extern GLFWwindow* window; + std::vector guis; - void scene::In_Game_Scene::start() + In_Game_Scene::In_Game_Scene() + { + shader = new shaders::EntityShader; + shader->Init(); + render_engine::renderer::Init(*shader); + + gui_shader = new shaders::GuiShader(); + gui_shader->Init(); + } + + scene::Scenes scene::In_Game_Scene::start(GLFWwindow* window) { raw_model = render_engine::LoadObjModel("res/House.obj"); texture = { render_engine::loader::LoadTexture("res/Texture.png") }; @@ -38,13 +49,34 @@ namespace scene z += (raw_model.model_size.x * 20); } - shader.Init(); - render_engine::renderer::Init(shader); - lights.push_back(entities::Light(glm::vec3(0, 1000, -7000), glm::vec3(5, 5, 5))); lights.push_back(entities::Light(glm::vec3(0, 0, -30), glm::vec3(2, 0, 2), glm::vec3(0.0001f, 0.0001f, 0.0001f))); lights.push_back(entities::Light(glm::vec3(0, 0, -200), glm::vec3(0, 2, 0), glm::vec3(0.0001f, 0.0001f, 0.0001f))); + // GUI stuff + gui::Button button(render_engine::loader::LoadTexture("res/Mayo.png"), glm::vec2(0.5f, 0.0f), glm::vec2(0.25f, 0.25f)); + button.SetHoverTexture(render_engine::loader::LoadTexture("res/Texture.png")); + button.SetClickedTexture(render_engine::loader::LoadTexture("res/Mayo.png")); + button.SetOnClickAction([]() + { + std::cout << "I got clicked on!" << std::endl; + }); + guis.push_back(&button); + + + while (return_value == scene::Scenes::INGAME) + { + update(window); + button.Update(window); + render(); + + glfwSwapBuffers(window); + glfwPollEvents(); + } + shader->CleanUp(); + gui_shader->CleanUp(); + render_engine::loader::CleanUp(); + return return_value; } void scene::In_Game_Scene::render() @@ -52,28 +84,35 @@ namespace scene // Render render_engine::renderer::Prepare(); - shader.Start(); - shader.LoadSkyColor(render_engine::renderer::SKY_COLOR); - shader.LoadLights(lights); - shader.LoadViewMatrix(camera); + shader->Start(); + shader->LoadSkyColor(render_engine::renderer::SKY_COLOR); + shader->LoadLights(lights); + shader->LoadViewMatrix(camera); + // Renders each entity in the entities list for (entities::Entity& entity : entities) { - render_engine::renderer::Render(entity, shader); + render_engine::renderer::Render(entity, *shader); } + // Render GUI items + render_engine::renderer::Render(guis, *gui_shader); + // Stop rendering the entities - shader.Stop(); + shader->Stop(); } - void scene::In_Game_Scene::update() + void scene::In_Game_Scene::update(GLFWwindow* window) { camera.Move(window); } - void scene::In_Game_Scene::onKey(int key, int scancode, int action, int mods) + void scene::In_Game_Scene::onKey(GLFWwindow* window, int key, int scancode, int action, int mods) { - + if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) + { + return_value = scene::Scenes::STOP; + } } } diff --git a/src/scenes/in_Game_Scene.h b/src/scenes/in_Game_Scene.h index 60d0e2a..4581855 100644 --- a/src/scenes/in_Game_Scene.h +++ b/src/scenes/in_Game_Scene.h @@ -3,16 +3,19 @@ namespace scene { + class In_Game_Scene : public scene::Scene { private: - + scene::Scenes return_value = scene::Scenes::INGAME; public: - virtual void start() override; - virtual void render() override; - virtual void update() override; - virtual void onKey(int key, int scancode, int action, int mods) override; + In_Game_Scene(); + + Scenes start(GLFWwindow* window) override; + void render() override; + void update(GLFWwindow* window) override; + void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) override; }; } diff --git a/src/scenes/scene.h b/src/scenes/scene.h index 66ef021..a4d07bd 100644 --- a/src/scenes/scene.h +++ b/src/scenes/scene.h @@ -6,29 +6,26 @@ namespace scene { - - - class Scene - { - public: - virtual void start() = 0; - virtual void render() = 0; - virtual void update() = 0; - virtual void onKey(int key, int scancode, int action, int mods) {}; - - }; - enum class Scenes { STARTUP, INGAME, GAMEOVER, - CALIBRATION + CALIBRATION, + STOP }; - extern std::map scenes; - extern Scene* current_scene; - extern GLFWwindow* window; + class Scene + { + public: + virtual Scenes start(GLFWwindow* window) = 0; + virtual void render() = 0; + virtual void update(GLFWwindow* window) = 0; + virtual void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) {}; + + }; + + } diff --git a/src/scenes/startup_Scene.cpp b/src/scenes/startup_Scene.cpp index 49cbf10..fe67b0f 100644 --- a/src/scenes/startup_Scene.cpp +++ b/src/scenes/startup_Scene.cpp @@ -5,13 +5,19 @@ namespace scene { - std::map scenes; - Scene* current_scene; - GLFWwindow* window; - void scene::Startup_Scene::start() + scene::Scenes scene::Startup_Scene::start(GLFWwindow *window) { + while (return_value == scene::Scenes::STARTUP) + { + render(); + update(window); + glfwSwapBuffers(window); + glfwPollEvents(); + } + + return return_value; } void scene::Startup_Scene::render() @@ -19,17 +25,16 @@ namespace scene } - void scene::Startup_Scene::update() + void scene::Startup_Scene::update(GLFWwindow* window) { } - void scene::Startup_Scene::onKey(int key, int scancode, int action, int mods) + void scene::Startup_Scene::onKey(GLFWwindow* window, int key, int scancode, int action, int mods) { if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) { - current_scene = scenes[Scenes::INGAME]; - current_scene->start(); + return_value = scene::Scenes::INGAME; } } } diff --git a/src/scenes/startup_Scene.h b/src/scenes/startup_Scene.h index 953ec68..277a750 100644 --- a/src/scenes/startup_Scene.h +++ b/src/scenes/startup_Scene.h @@ -4,16 +4,18 @@ namespace scene { + extern GLFWwindow* window; + class Startup_Scene : public scene::Scene { private: - + scene::Scenes return_value = scene::Scenes::STARTUP; public: - virtual void start() override; - virtual void render() override; - virtual void update() override; - virtual void onKey(int key, int scancode, int action, int mods) override; + Scenes start(GLFWwindow* window) override; + void render() override; + void update(GLFWwindow* window) override; + void onKey(GLFWwindow* window, int key, int scancode, int action, int mods) override; }; } diff --git a/src/shaders/shader_program.cpp b/src/shaders/shader_program.cpp index c02c73b..6feb2d9 100644 --- a/src/shaders/shader_program.cpp +++ b/src/shaders/shader_program.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include