12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #ifndef _RENDERER_H_
- #define _RENDERER_H_
- #include <linmath.h>
- #include <stdbool.h>
- #include <stdlib.h>
- #include <glad/glad.h>
- #include <GLFW/glfw3.h>
- #define UNIFORMS_COUNT 1
- #define PROGRAMS_COUNT 2
- #define DEFAULT_PROGRAM 0
- #define NUKLEAR_PROGRAM 1
- typedef int RENDERER_ERROR;
- #define RENDERER_ERROR_OK 0
- #define RENDERER_ERROR_GLFW -1
- #define RENDERER_ERROR_GLAD -2
- #define ERROR_AND_QUIT(R, ...) \
- ( R==RENDERER_ERROR_GLFW ? fprintf(stderr, "GLFW: %s\n", __VA_ARGS__) \
- : R==RENDERER_ERROR_GLAD ? fprintf(stderr, "GLAD: %s\n", __VA_ARGS__) \
- : fprintf(stderr, "%s\n", __VA_ARGS__)); exit(1)
- #if 0
- struct nk_glfw_vertex {
- float position[2];
- float uv[2];
- nk_byte col[4];
- };
- #endif
- typedef struct {
- GLFWwindow *window;
- int width;
- int height;
- GLuint vao;
- GLuint vbo;
- GLuint ebo;
- mat4x4 projection;
- GLuint texture_color;
-
- GLuint uniforms[UNIFORMS_COUNT];
- GLuint programs[PROGRAMS_COUNT];
- GLint attrib_pos;
- GLint attrib_uv;
- GLint attrib_col;
- #if 0
- /* nuklear */
- struct nk_context *ctx;
- GLuint font_tex;
- struct nk_draw_null_texture tex_null;
- struct nk_buffer cmds;
- #endif
- } Renderer;
- RENDERER_ERROR renderer_init(Renderer *renderer, int width, int height);
- RENDERER_ERROR renderer_init_glfw(Renderer* renderer, int width, int height);
- void renderer_init_shaders(Renderer *renderer);
- void renderer_init_textures(Renderer *renderer);
- void renderer_init_quad(Renderer *renderer);
- void renderer_destroy(Renderer* renderer);
- void render_quad(Renderer* renderer, vec2 pos, vec2 size, vec4 color);
- void renderer_init_nk(Renderer* renderer);
- void read_shader_source(GLchar* source, const char* file_path);
- static const char* shader_type_as_cstr(GLuint shader);
- static bool compile_shader_source(const GLchar* source, GLenum shader_type, GLuint* shader);
- static void attach_shaders_to_program(GLuint* shaders, size_t shaders_count, GLuint program);
- static bool link_program(GLuint program, const char* file_path, size_t line);
- static void renderer_upload_atlas(Renderer* renderer, const void* image, int width, int height);
- #endif // _RENDERER_H_
|