#include #include #include #include "Window.hpp" #include "Mesh.hpp" #include "Binder.hpp" #include "Shader/ShaderProgram.hpp" #define APP_NAME "Meowcraft" #define WINDOW_WIDTH 1000 #define WINDOW_HEIGHT 800 void run(); void render(MC::BindableMesh&); void setup_gl(); int main() { glfwInit(); try { run(); } catch (std::runtime_error& error) { std::cout << "An error occurred: " << error.what() << std::endl; glfwTerminate(); return 1; } glfwTerminate(); return 0; } void run() { MC::Window window(APP_NAME, WINDOW_WIDTH, WINDOW_HEIGHT); setup_gl(); glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); MC::Mesh triangle({ {-0.5, -0.5, 0.0}, {0.5, -0.5, 0.0}, {0.0, 0.5, 0.0}, }); auto mesh = MC::Binder::load(triangle); MC::ShaderProgram program(MC::Shader::create_fragment(), MC::Shader::create_vertex()); program.bind(); while (!window.should_close()) { window.start_frame(); if (window.key(GLFW_KEY_ESCAPE, GLFW_PRESS)) { window.close(); } render(mesh); } } void render(MC::BindableMesh& mesh) { glClearColor(0.65f, 0.8f, 0.8f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); mesh.bind(); glDrawArrays(GL_TRIANGLES, 0, mesh.size()); mesh.unbind(); } void setup_gl() { GLenum error; if ((error = glewInit()) != GLEW_OK) { std::string error_string(reinterpret_cast(glewGetErrorString(error))); throw std::runtime_error("Failed to load GL functions: " + error_string); } }