diff --git a/application.cc b/application.cc new file mode 100644 index 0000000..339e8b7 --- /dev/null +++ b/application.cc @@ -0,0 +1,85 @@ +#include "application.hh" + +#include + +Application::Application() { + graphics = Graphics(glm::uvec2(1024, 786), 0.1f, 150.0f); +} + +void Application::init() +{ + // Don't change this! + ignoredMouseUpdates = 0; + cameraLock = true; + // set Skybox size + level.setSkydomeSize((graphics.getFarPlane()/2.0f)-10.0f); + + // define where shaders and textures can be found: + ACGL::Base::Settings::the()->setResourcePath("../"); + ACGL::Base::Settings::the()->setShaderPath("Shader/"); + ACGL::Base::Settings::the()->setTexturePath("Levels/Textures/"); + ACGL::Base::Settings::the()->setGeometryPath("Levels/Geometry/"); + + // construct VAO to give shader correct Attribute locations + ACGL::OpenGL::SharedArrayBuffer ab = std::make_shared(); + ab->defineAttribute("aPosition", GL_FLOAT, 3); + ab->defineAttribute("aTexCoord", GL_FLOAT, 2); + ab->defineAttribute("aNormal", GL_FLOAT, 3); + ACGL::OpenGL::SharedVertexArrayObject vao = std::make_shared(); + vao->attachAllAttributes(ab); + + // look up all shader files starting with 'phong' and build a ShaderProgram from it: + shader = ACGL::OpenGL::ShaderProgramCreator("phong").attributeLocations( + vao->getAttributeLocations()).create(); + shader->use(); + + // load Level + level.load(); + + // just in case: check for errors + openGLCriticalError(); +} + +Graphics* Application::getGraphics() { + return &graphics; +} + +Level* Application::getLevel() { + return &level; +} + +ACGL::OpenGL::SharedShaderProgram Application::getShader() { + return shader; +} + +void Application::setFocused(bool focused) { + this->focused = focused; +} + +bool Application::isFocused() { + return focused; +} + +void Application::setCameraLock(bool locked) { + // Prevent camera jumping huge distances + if (!locked) { + ignoreNextMouseUpdate(); + } + cameraLock = locked; +} + +void Application::ignoreNextMouseUpdate() { + ignoredMouseUpdates++; +} + +void Application::ignoredOneMouseUpdate() { + ignoredMouseUpdates--; +} + +int Application::getIgnoredMouseUpdates() { + return ignoredMouseUpdates; +} + +bool Application::isLocked() { + return cameraLock; +} diff --git a/application.hh b/application.hh new file mode 100644 index 0000000..60fa7d8 --- /dev/null +++ b/application.hh @@ -0,0 +1,31 @@ +#ifndef APPLICATION_HH_INCLUDED +#define APPLICATION_HH_INCLUDED + +#include "physics.hh" +#include "graphics.hh" +#include "level.hh" + +class Application { + public: + Application(); + Graphics* getGraphics(); + Level* getLevel(); + ACGL::OpenGL::SharedShaderProgram getShader(); + void init(); + void setFocused(bool focused); + bool isFocused(); + void setCameraLock(bool locked); + bool isLocked(); + void ignoreNextMouseUpdate(); + int getIgnoredMouseUpdates(); + void ignoredOneMouseUpdate(); + private: + int ignoredMouseUpdates; + bool focused; + bool cameraLock; + Graphics graphics; + Level level; + ACGL::OpenGL::SharedShaderProgram shader; +}; + +#endif diff --git a/main.cc b/main.cc index 0646a68..0072312 100644 --- a/main.cc +++ b/main.cc @@ -11,60 +11,10 @@ #include #include #include -#include #include #include -Application::Application() { - graphics = Graphics(glm::uvec2(1024, 786), 0.1f, 150.0f); -} - -Graphics* Application::getGraphics() { - return &graphics; -} - -Level* Application::getLevel() { - return &level; -} - -ACGL::OpenGL::SharedShaderProgram Application::getShader() { - return shader; -} - -void Application::init() -{ - // Don't change this! - ignoredMouseUpdates = 0; - cameraLock = true; - // set Skybox size - level.setSkydomeSize((graphics.getFarPlane()/2.0f)-10.0f); - - // define where shaders and textures can be found: - ACGL::Base::Settings::the()->setResourcePath("../"); - ACGL::Base::Settings::the()->setShaderPath("Shader/"); - ACGL::Base::Settings::the()->setTexturePath("Levels/Textures/"); - ACGL::Base::Settings::the()->setGeometryPath("Levels/Geometry/"); - - // construct VAO to give shader correct Attribute locations - ACGL::OpenGL::SharedArrayBuffer ab = std::make_shared(); - ab->defineAttribute("aPosition", GL_FLOAT, 3); - ab->defineAttribute("aTexCoord", GL_FLOAT, 2); - ab->defineAttribute("aNormal", GL_FLOAT, 3); - ACGL::OpenGL::SharedVertexArrayObject vao = std::make_shared(); - vao->attachAllAttributes(ab); - - // look up all shader files starting with 'phong' and build a ShaderProgram from it: - shader = ACGL::OpenGL::ShaderProgramCreator("phong").attributeLocations( - vao->getAttributeLocations()).create(); - shader->use(); - - // load Level - level.load(); - - // just in case: check for errors - openGLCriticalError(); -} void resizeCallback(GLFWwindow* window, int newWidth, int newHeight) { @@ -110,39 +60,6 @@ static void focusCallback(GLFWwindow* window, int focused) { } } -void Application::setFocused(bool focused) { - this->focused = focused; -} - -bool Application::isFocused() { - return focused; -} - -void Application::setCameraLock(bool locked) { - // Prevent camera jumping huge distances - if (!locked) { - ignoreNextMouseUpdate(); - } - cameraLock = locked; -} - -void Application::ignoreNextMouseUpdate() { - ignoredMouseUpdates++; -} - -void Application::ignoredOneMouseUpdate() { - ignoredMouseUpdates--; -} - -int Application::getIgnoredMouseUpdates() { - return ignoredMouseUpdates; -} - -bool Application::isLocked() { - return cameraLock; -} - - int main( int argc, char *argv[] ) { //Application app = Application(); diff --git a/main.hh b/main.hh index a61a53b..eb928a1 100644 --- a/main.hh +++ b/main.hh @@ -5,35 +5,8 @@ #include #include -//////////////////////////////////////////////////////////////////// -#include "physics.hh" -#include "graphics.hh" -#include "level.hh" - -///////////////////////////////////////////////////////////////// -class Application { - public: - Application(); - Graphics* getGraphics(); - Level* getLevel(); - ACGL::OpenGL::SharedShaderProgram getShader(); - void init(); - void setFocused(bool focused); - bool isFocused(); - void setCameraLock(bool locked); - bool isLocked(); - void ignoreNextMouseUpdate(); - int getIgnoredMouseUpdates(); - void ignoredOneMouseUpdate(); - private: - int ignoredMouseUpdates; - bool focused; - bool cameraLock; - Graphics graphics; - Level level; - ACGL::OpenGL::SharedShaderProgram shader; -}; +#include "application.hh" Application app; #endif