diff options
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/src/main.cpp b/src/main.cpp index c073a43..6f825b1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,6 +5,8 @@ #include "../include/RenderBackend/OpenGL/DeviceFrame.hpp" #include "../include/Triangle.hpp" +#include "../include/model_loader/ObjModelLoader.hpp" + #include <cstdio> #include <chrono> @@ -21,6 +23,10 @@ static GLFWwindow *createWindow(); static std::unique_ptr<Shader> load_shader_from_file(const char *filepath, Shader::Type shader_type); static std::unique_ptr<ShaderProgram> build_shader_program_from_shaders(const std::vector<Shader*> &shaders); +struct Userdata { + float cam_dist; +}; + int main() { initGlfw(); @@ -44,7 +50,10 @@ int main() Vertex3D(0.0f, 1.0f, 0.0f) ), }; - DataView<Triangle3D> cpuTriangles(cpuTriangle.data(), cpuTriangle.size()); + //DataView<Triangle3D> cpuTriangles(cpuTriangle.data(), cpuTriangle.size()); + std::vector<Triangle3D> triangles; + ObjModelLoader::load_from_file("/home/dec05eba/Downloads/FinalBaseMesh.obj", triangles); + DataView<Triangle3D> cpuTriangles(triangles.data(), triangles.size()); DeviceMemory *gpuTriangle = frame.alloc(); gpuTriangle->copy(cpuTriangles, DeviceMemory::StorageType::STATIC); @@ -64,9 +73,19 @@ int main() Result<Uniform> view_uniform = shader_program->get_uniform_by_name("view"); Result<Uniform> model_uniform = shader_program->get_uniform_by_name("model"); - glm::vec3 character_pos(0.0f, 3.0f, 3.0f); + Userdata userdata; + userdata.cam_dist = 3.0f; + glm::vec3 character_pos(0.0f, 0.0f, userdata.cam_dist); auto t_start = std::chrono::high_resolution_clock::now(); + + glfwSetWindowUserPointer(window, &userdata); + + glfwSetScrollCallback(window, [](GLFWwindow *window, double xoffset, double yoffset){ + Userdata *userdata = (Userdata*)glfwGetWindowUserPointer(window); + userdata->cam_dist += yoffset; + }); + //glEnable(GL_CULL_FACE); while(!glfwWindowShouldClose(window)) { glfwPollEvents(); if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) @@ -76,10 +95,17 @@ int main() float time_delta = std::chrono::duration_cast<std::chrono::duration<float>>(t_now - t_start).count(); t_start = t_now; + float move_speed = time_delta * 3.0f; if(glfwGetKey(window, GLFW_KEY_W)) - character_pos.y -= time_delta; + character_pos.y -= move_speed; if(glfwGetKey(window, GLFW_KEY_S)) - character_pos.y += time_delta; + character_pos.y += move_speed; + if(glfwGetKey(window, GLFW_KEY_A)) + character_pos.x += move_speed; + if(glfwGetKey(window, GLFW_KEY_D)) + character_pos.x -= move_speed; + + character_pos.z = userdata.cam_dist; glm::mat4 view = glm::lookAt( character_pos, @@ -100,7 +126,9 @@ int main() glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Do the actual screen clearing, using the color set using glClearColor glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); frame.draw(shader_program.get()); + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glfwSwapBuffers(window); } @@ -121,7 +149,7 @@ void initGlfw() exit(-1); } - glfwWindowHint(GLFW_SAMPLES, 4); + glfwWindowHint(GLFW_SAMPLES, 4); // anti aliasing glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); @@ -138,7 +166,12 @@ void initGlew() { } } +static void error_callback(int error, const char *description) { + fprintf(stderr, "Opengl error: %s (%d)\n", description, error); +} + GLFWwindow* createWindow() { + glfwSetErrorCallback(error_callback); GLFWwindow *window = glfwCreateWindow(1280, 720, "Amalgine", nullptr, nullptr); if(!window) { @@ -149,7 +182,7 @@ GLFWwindow* createWindow() { glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_FALSE); glfwMakeContextCurrent(window); - glfwSwapInterval(0); + glfwSwapInterval(1); // 1 = enable vsync initGlew(); return window; } |