renderer.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef _RENDERER_H_
  2. #define _RENDERER_H_
  3. #include <linmath.h>
  4. #include <stdbool.h>
  5. #include <stdlib.h>
  6. #include <glad/glad.h>
  7. #include <GLFW/glfw3.h>
  8. #define UNIFORMS_COUNT 1
  9. #define PROGRAMS_COUNT 2
  10. #define DEFAULT_PROGRAM 0
  11. #define NUKLEAR_PROGRAM 1
  12. typedef int RENDERER_ERROR;
  13. #define RENDERER_ERROR_OK 0
  14. #define RENDERER_ERROR_GLFW -1
  15. #define RENDERER_ERROR_GLAD -2
  16. #define ERROR_AND_QUIT(R, ...) \
  17. ( R==RENDERER_ERROR_GLFW ? fprintf(stderr, "GLFW: %s\n", __VA_ARGS__) \
  18. : R==RENDERER_ERROR_GLAD ? fprintf(stderr, "GLAD: %s\n", __VA_ARGS__) \
  19. : fprintf(stderr, "%s\n", __VA_ARGS__)); exit(1)
  20. #if 0
  21. struct nk_glfw_vertex {
  22. float position[2];
  23. float uv[2];
  24. nk_byte col[4];
  25. };
  26. #endif
  27. typedef struct {
  28. GLFWwindow *window;
  29. int width;
  30. int height;
  31. GLuint vao;
  32. GLuint vbo;
  33. GLuint ebo;
  34. mat4x4 projection;
  35. GLuint texture_color;
  36. GLuint uniforms[UNIFORMS_COUNT];
  37. GLuint programs[PROGRAMS_COUNT];
  38. GLint attrib_pos;
  39. GLint attrib_uv;
  40. GLint attrib_col;
  41. #if 0
  42. /* nuklear */
  43. struct nk_context *ctx;
  44. GLuint font_tex;
  45. struct nk_draw_null_texture tex_null;
  46. struct nk_buffer cmds;
  47. #endif
  48. } Renderer;
  49. RENDERER_ERROR renderer_init(Renderer *renderer, int width, int height);
  50. RENDERER_ERROR renderer_init_glfw(Renderer* renderer, int width, int height);
  51. void renderer_init_shaders(Renderer *renderer);
  52. void renderer_init_textures(Renderer *renderer);
  53. void renderer_init_quad(Renderer *renderer);
  54. void renderer_destroy(Renderer* renderer);
  55. void render_quad(Renderer* renderer, vec2 pos, vec2 size, vec4 color);
  56. void renderer_init_nk(Renderer* renderer);
  57. void read_shader_source(GLchar* source, const char* file_path);
  58. static const char* shader_type_as_cstr(GLuint shader);
  59. static bool compile_shader_source(const GLchar* source, GLenum shader_type, GLuint* shader);
  60. static void attach_shaders_to_program(GLuint* shaders, size_t shaders_count, GLuint program);
  61. static bool link_program(GLuint program, const char* file_path, size_t line);
  62. static void renderer_upload_atlas(Renderer* renderer, const void* image, int width, int height);
  63. #endif // _RENDERER_H_