src/scene.c

changeset 82
4e1e698f4b0d
parent 76
eb16be99b0ad
child 83
f7ce0db6f72b
equal deleted inserted replaced
81:84a546e282b7 82:4e1e698f4b0d
28 #include "ascension/scene.h" 28 #include "ascension/scene.h"
29 29
30 #include "ascension/context.h" 30 #include "ascension/context.h"
31 #include "ascension/utils.h" 31 #include "ascension/utils.h"
32 32
33 #include "ascension/2d.h"
34
33 #include <cx/linked_list.h> 35 #include <cx/linked_list.h>
34 #include <cx/array_list.h> 36 #include <cx/array_list.h>
35 #include <cx/tree.h> 37 #include <cx/tree.h>
36 #include <cx/utils.h> 38 #include <cx/utils.h>
37 39
38 #include "ascension/shader.h"
39 #include <GL/glew.h> 40 #include <GL/glew.h>
40 41
41 #include <assert.h> 42 #include <assert.h>
42 43
43 static CxTreeIterator asc_scene_node_iterator( 44 static CxTreeIterator asc_scene_node_iterator(
54 static CxTreeVisitor asc_scene_node_visitor(AscSceneNode *node) { 55 static CxTreeVisitor asc_scene_node_visitor(AscSceneNode *node) {
55 return cx_tree_visitor(node, 56 return cx_tree_visitor(node,
56 offsetof(AscSceneNode, children), 57 offsetof(AscSceneNode, children),
57 offsetof(AscSceneNode, next) 58 offsetof(AscSceneNode, next)
58 ); 59 );
59 }
60
61 static void asc_sprite_draw(AscSprite const *node) {
62 // Obtain shader
63 AscShaderSprite *shader = ASC_SHADER_SPRITE;
64
65 // Upload model matrix
66 glUniformMatrix4fv(shader->program.model, 1,
67 GL_FALSE, node->data.world_transform);
68
69 // Bind texture
70 asc_texture_bind(&node->tex, shader->tex, 0);
71
72 // Apply depth
73 glUniform1f(shader->depth, (float)(node->data.depth));
74
75 // Draw mesh
76 asc_primitives_draw_plane();
77 } 60 }
78 61
79 void asc_scene_draw(AscSceneNode *root, asc_recti viewport, AscCamera *camera) { 62 void asc_scene_draw(AscSceneNode *root, asc_recti viewport, AscCamera *camera) {
80 // create render groups 63 // create render groups
81 CxList *render_group[ASC_RENDER_GROUP_COUNT]; 64 CxList *render_group[ASC_RENDER_GROUP_COUNT];

mercurial