| 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, |