src/sprite.c

changeset 222
2cb9a71df7a6
parent 221
14eddd43b3f7
child 223
4f32c7755138
equal deleted inserted replaced
221:14eddd43b3f7 222:2cb9a71df7a6
38 typedef struct asc_sprite_shader_s { 38 typedef struct asc_sprite_shader_s {
39 AscShaderProgram program; 39 AscShaderProgram program;
40 asc_uniform_loc tex; 40 asc_uniform_loc tex;
41 } AscSpriteShader; 41 } AscSpriteShader;
42 42
43 static void asc_sprite_shader_init(AscShaderProgram *p, cx_attr_unused int flags) {
44 asc_shader_init_uniform_loc_nice(p, AscSpriteShader, tex);
45 }
46
43 static AscShaderProgram *asc_sprite_shader_create(int rect) { 47 static AscShaderProgram *asc_sprite_shader_create(int rect) {
44 AscShaderCodes codes; 48 return asc_shader_create((AscShaderCodeInfo){
45 if (asc_shader_load_code_files((AscShaderCodeInfo){
46 .files.vtx = "sprite_vtx.glsl", 49 .files.vtx = "sprite_vtx.glsl",
47 .files.frag = "sprite_frag.glsl", 50 .files.frag = "sprite_frag.glsl",
48 .defines.frag = rect ? "#define USE_RECT" : NULL, 51 .defines.frag = rect ? "#define USE_RECT" : NULL,
49 }, &codes)) { 52 }, sizeof(AscSpriteShader), asc_sprite_shader_init, 0);
50 asc_error("Loading sprite shader failed.");
51 return NULL;
52 }
53 AscShaderProgram *shader = asc_shader_create(codes, sizeof(AscSpriteShader));
54 if (asc_shader_invalid(shader)) {
55 asc_shader_free_codes(codes);
56 return shader;
57 }
58 asc_ptr_cast(AscSpriteShader, sprite_shader, shader);
59 sprite_shader->tex = asc_shader_get_uniform_loc(shader, "tex");
60 asc_shader_free_codes(codes);
61
62 if (asc_error_catch_gl("Creating sprite shader")) {
63 // TODO: error handling
64 }
65
66 return shader;
67 } 53 }
68 54
69 static void asc_sprite_destroy(AscSceneNode *node) { 55 static void asc_sprite_destroy(AscSceneNode *node) {
70 asc_ptr_cast(AscSprite, sprite, node); 56 asc_ptr_cast(AscSprite, sprite, node);
71 asc_mesh_destroy(&sprite->mesh); 57 asc_mesh_destroy(&sprite->mesh);

mercurial