src/sprite.c

changeset 113
71ba88258ea0
parent 105
2b7f92ff2c15
child 114
5b91bbab1ac0
equal deleted inserted replaced
112:3e956c96dd6c 113:71ba88258ea0
30 #include "ascension/context.h" 30 #include "ascension/context.h"
31 #include "ascension/glcontext.h" 31 #include "ascension/glcontext.h"
32 32
33 #include <GL/glew.h> 33 #include <GL/glew.h>
34 34
35 static void asc_sprite_free(AscSceneNode *node) { 35 static void asc_sprite_destroy(AscSceneNode *node) {
36 AscSprite *sprite = (AscSprite *) node; 36 ((AscSprite *) node)->texture->refcount--;
37 sprite->texture->refcount--;
38 free(node);
39 } 37 }
40 38
41 AscSceneNode *asc_sprite_create(struct asc_sprite_create_args args) { 39 AscSceneNode *asc_sprite_create(struct asc_sprite_create_args args) {
42 AscSprite *sprite = calloc(1, sizeof(AscSprite)); 40 AscSprite *sprite = calloc(1, sizeof(AscSprite));
43 41
48 // basic node parameters 46 // basic node parameters
49 AscSceneNode *node = (AscSceneNode *) sprite; 47 AscSceneNode *node = (AscSceneNode *) sprite;
50 node->render_group = args.opaque 48 node->render_group = args.opaque
51 ? ASC_RENDER_GROUP_SPRITE_OPAQUE 49 ? ASC_RENDER_GROUP_SPRITE_OPAQUE
52 : ASC_RENDER_GROUP_SPRITE_BLEND; 50 : ASC_RENDER_GROUP_SPRITE_BLEND;
53 node->free_func = asc_sprite_free; 51 node->destroy_func = asc_sprite_destroy;
54 52
55 node->position = asc_vec3f_new(args.x, args.y, ASC_SCENE_2D_DEPTH_OFFSET); 53 node->position = asc_vec3f_new(args.x, args.y, ASC_SCENE_2D_DEPTH_OFFSET);
56 node->scale = asc_vec3f_new( 54 node->scale = asc_vec3f_new(
57 args.width == 0 ? args.texture->width : args.width, 55 args.width == 0 ? args.texture->width : args.width,
58 args.height == 0 ? args.texture->height : args.height, 56 args.height == 0 ? args.texture->height : args.height,

mercurial