ded

Dramatic EDitor
Index Commits Files Refs README LICENSE
src/simple_renderer.h (2521B)
   1 #ifndef SIMPLE_RENDERER_H_
   2 #define SIMPLE_RENDERER_H_
   3 
   4 #include <assert.h>
   5 
   6 #define GLEW_STATIC
   7 #include <GL/glew.h>
   8 
   9 #define GL_GLEXT_PROTOTYPES
  10 #include <SDL2/SDL_opengl.h>
  11 
  12 #include "./la.h"
  13 
  14 typedef enum {
  15     UNIFORM_SLOT_TIME = 0,
  16     UNIFORM_SLOT_RESOLUTION,
  17     UNIFORM_SLOT_CAMERA_POS,
  18     UNIFORM_SLOT_CAMERA_SCALE,
  19     COUNT_UNIFORM_SLOTS,
  20 } Uniform_Slot;
  21 
  22 typedef enum {
  23     SIMPLE_VERTEX_ATTR_POSITION = 0,
  24     SIMPLE_VERTEX_ATTR_COLOR,
  25     SIMPLE_VERTEX_ATTR_UV,
  26 } Simple_Vertex_Attr;
  27 
  28 typedef struct {
  29     Vec2f position;
  30     Vec4f color;
  31     Vec2f uv;
  32 } Simple_Vertex;
  33 
  34 #define SIMPLE_VERTICIES_CAP (3*640*1000)
  35 
  36 static_assert(SIMPLE_VERTICIES_CAP%3 == 0, "Simple renderer vertex capacity must be divisible by 3. We are rendring triangles after all.");
  37 
  38 typedef enum {
  39     SHADER_FOR_COLOR = 0,
  40     SHADER_FOR_IMAGE,
  41     SHADER_FOR_TEXT,
  42     SHADER_FOR_EPICNESS, // This is the one that does that cool rainbowish animation
  43     COUNT_SIMPLE_SHADERS,
  44 } Simple_Shader;
  45 
  46 typedef struct {
  47     GLuint vao;
  48     GLuint vbo;
  49     GLuint programs[COUNT_SIMPLE_SHADERS];
  50     Simple_Shader current_shader;
  51 
  52     GLint uniforms[COUNT_UNIFORM_SLOTS];
  53     Simple_Vertex verticies[SIMPLE_VERTICIES_CAP];
  54     size_t verticies_count;
  55 
  56     Vec2f resolution;
  57     float time;
  58 
  59     Vec2f camera_pos;
  60     float camera_scale;
  61     float camera_scale_vel;
  62     Vec2f camera_vel;
  63 } Simple_Renderer;
  64 
  65 void simple_renderer_init(Simple_Renderer *sr);
  66 
  67 void simple_renderer_reload_shaders(Simple_Renderer *sr);
  68 
  69 void simple_renderer_vertex(Simple_Renderer *sr,
  70                             Vec2f p, Vec4f c, Vec2f uv);
  71 void simple_renderer_set_shader(Simple_Renderer *sr, Simple_Shader shader);
  72 void simple_renderer_triangle(Simple_Renderer *sr,
  73                               Vec2f p0, Vec2f p1, Vec2f p2,
  74                               Vec4f c0, Vec4f c1, Vec4f c2,
  75                               Vec2f uv0, Vec2f uv1, Vec2f uv2);
  76 void simple_renderer_quad(Simple_Renderer *sr,
  77                           Vec2f p0, Vec2f p1, Vec2f p2, Vec2f p3,
  78                           Vec4f c0, Vec4f c1, Vec4f c2, Vec4f c3,
  79                           Vec2f uv0, Vec2f uv1, Vec2f uv2, Vec2f uv3);
  80 void simple_renderer_solid_rect(Simple_Renderer *sr, Vec2f p, Vec2f s, Vec4f c);
  81 void simple_renderer_image_rect(Simple_Renderer *sr, Vec2f p, Vec2f s, Vec2f uvp, Vec2f uvs, Vec4f c);
  82 void simple_renderer_flush(Simple_Renderer *sr);
  83 void simple_renderer_sync(Simple_Renderer *sr);
  84 void simple_renderer_draw(Simple_Renderer *sr);
  85 
  86 #endif  // SIMPLE_RENDERER_H_