src/2d.c

changeset 168
f70569c49c24
parent 167
8e6a661c87db
equal deleted inserted replaced
167:8e6a661c87db 168:f70569c49c24
30 #include "ascension/constants.h" 30 #include "ascension/constants.h"
31 #include "ascension/context.h" 31 #include "ascension/context.h"
32 #include "ascension/error.h" 32 #include "ascension/error.h"
33 #include "ascension/shader.h" 33 #include "ascension/shader.h"
34 34
35 // TODO: implement abstraction in shader.h to remove glew.h include here
36 #include <GL/glew.h>
37 #include <assert.h> 35 #include <assert.h>
38 36
39 typedef struct asc_rectangle_shader_s { 37 typedef struct asc_rectangle_shader_s {
40 AscShaderProgram program; 38 AscShaderProgram program;
41 GLint color; 39 asc_uniform_loc color;
42 GLint border_color; 40 asc_uniform_loc border_color;
43 GLint size; 41 asc_uniform_loc size;
44 GLint thickness; 42 asc_uniform_loc thickness;
45 GLint radius; 43 asc_uniform_loc radius;
46 } AscRectangleShader; 44 } AscRectangleShader;
47 45
48 #define ASC_RECTANGLE_SHADER_FLAG_FILL 1 46 #define ASC_RECTANGLE_SHADER_FLAG_FILL 1
49 #define ASC_RECTANGLE_SHADER_FLAG_ROUND 2 47 #define ASC_RECTANGLE_SHADER_FLAG_ROUND 2
50 #define ASC_RECTANGLE_SHADER_FLAG_BORDER 4 48 #define ASC_RECTANGLE_SHADER_FLAG_BORDER 4
69 AscRectangleShader *shader = asc_shader_create(codes, sizeof(*shader)); 67 AscRectangleShader *shader = asc_shader_create(codes, sizeof(*shader));
70 if (asc_shader_invalid(&shader->program)) { 68 if (asc_shader_invalid(&shader->program)) {
71 asc_shader_free_codes(codes); 69 asc_shader_free_codes(codes);
72 return (AscShaderProgram*) shader; 70 return (AscShaderProgram*) shader;
73 } 71 }
74 shader->size = glGetUniformLocation(shader->program.gl_id, "size"); 72 shader->size = asc_shader_get_uniform_loc(&shader->program, "size");
75 if (asc_test_flag(flags, ASC_RECTANGLE_SHADER_FLAG_FILL)) { 73 if (asc_test_flag(flags, ASC_RECTANGLE_SHADER_FLAG_FILL)) {
76 shader->color = glGetUniformLocation(shader->program.gl_id, "color"); 74 shader->color = asc_shader_get_uniform_loc(&shader->program, "color");
77 } else { 75 } else {
78 shader->color = -1; 76 shader->color = -1;
79 } 77 }
80 if (asc_test_flag(flags, ASC_RECTANGLE_SHADER_FLAG_BORDER)) { 78 if (asc_test_flag(flags, ASC_RECTANGLE_SHADER_FLAG_BORDER)) {
81 shader->thickness = glGetUniformLocation(shader->program.gl_id, "thickness"); 79 shader->thickness = asc_shader_get_uniform_loc(&shader->program, "thickness");
82 shader->border_color = glGetUniformLocation(shader->program.gl_id, "border_color"); 80 shader->border_color = asc_shader_get_uniform_loc(&shader->program, "border_color");
83 } else { 81 } else {
84 shader->thickness = -1; 82 shader->thickness = -1;
85 shader->border_color = -1; 83 shader->border_color = -1;
86 } 84 }
87 if (asc_test_flag(flags, ASC_RECTANGLE_SHADER_FLAG_ROUND)) { 85 if (asc_test_flag(flags, ASC_RECTANGLE_SHADER_FLAG_ROUND)) {
88 shader->radius = glGetUniformLocation(shader->program.gl_id, "radius"); 86 shader->radius = asc_shader_get_uniform_loc(&shader->program, "radius");
89 } else { 87 } else {
90 shader->radius = -1; 88 shader->radius = -1;
91 } 89 }
92 asc_shader_free_codes(codes); 90 asc_shader_free_codes(codes);
93 91

mercurial