main.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include <iostream>
  2. #define GLFW_INCLUDE_NONE
  3. #include <GLFW/glfw3.h>
  4. #include <glad/glad.h>
  5. #include <spdlog/spdlog.h>
  6. #include <glm/gtc/matrix_transform.hpp>
  7. #include "callbacks.h"
  8. #include "shader.h"
  9. #include "renderer.h"
  10. #define WINDOW_WIDTH 800
  11. #define WINDOW_HEIGHT 600
  12. void process_input(GLFWwindow* window);
  13. int main() {
  14. if (!glfwInit()) {
  15. spdlog::error("Could not intialize GLFW.");
  16. glfwTerminate();
  17. return EXIT_FAILURE;
  18. }
  19. glfwSetErrorCallback(error_callback);
  20. glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
  21. glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
  22. glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  23. GLFWwindow *window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "My New Window", NULL, NULL);
  24. if (!window) {
  25. spdlog::error("Could not create GLFW Window.");
  26. glfwTerminate();
  27. return EXIT_FAILURE;
  28. }
  29. glfwMakeContextCurrent(window);
  30. if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
  31. spdlog::error("Failed to initialize GLAD");
  32. return EXIT_FAILURE;
  33. }
  34. glfwSetKeyCallback(window, key_callback);
  35. glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
  36. glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
  37. glEnable(GL_BLEND);
  38. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  39. Shader basic = Shader("vert.glsl", "frag.glsl");
  40. basic.use();
  41. glm::mat4 projection = glm::ortho(0.0f, static_cast<float>(WINDOW_WIDTH),
  42. static_cast<float>(WINDOW_HEIGHT), 0.0f, -1.0f, 1.0f);
  43. basic.setMatrix4("projection", projection);
  44. Renderer r = Renderer(basic);
  45. float deltaTime = 0.0f;
  46. float lastFrame = 0.0f;
  47. while (!glfwWindowShouldClose(window)) {
  48. float currentFrame = glfwGetTime();
  49. deltaTime = currentFrame - lastFrame;
  50. lastFrame = currentFrame;
  51. glfwPollEvents();
  52. process_input(window);
  53. glm::vec2 pos = glm::vec2(0,0);
  54. glm::vec2 size(400.0f, 300.0f);
  55. glm::vec3 color(0.5f, 0.5f, 0.5f);
  56. glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
  57. glClear(GL_COLOR_BUFFER_BIT);
  58. r.draw(pos, size, 0.0f, color);
  59. glfwSwapBuffers(window);
  60. }
  61. glfwDestroyWindow(window);
  62. glfwTerminate();
  63. return EXIT_SUCCESS;
  64. }
  65. void process_input(GLFWwindow* window) {
  66. if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
  67. glfwSetWindowShouldClose(window, true);
  68. }