src/scene.c

changeset 139
5d655459db85
parent 137
f8e6e0ae61a8
equal deleted inserted replaced
138:2ceb0368b02d 139:5d655459db85
94 CxIterator iter_blend_uv = cxListIterator(blend_uv); 94 CxIterator iter_blend_uv = cxListIterator(blend_uv);
95 95
96 // TODO: implement interleaving by depth 96 // TODO: implement interleaving by depth
97 if (cxIteratorValid(iter_opaque_rect)) { 97 if (cxIteratorValid(iter_opaque_rect)) {
98 glDisable(GL_BLEND); 98 glDisable(GL_BLEND);
99 AscShaderSprite *shader = ASC_SHADER_SPRITE_RECT; 99 const AscShaderProgram *shader = asc_sprite_shader_rect();
100 asc_shader_program_use(&shader->program, &scene->camera); 100 asc_shader_use(shader, &scene->camera);
101 cx_foreach(const AscSprite*, node, iter_opaque_rect) { 101 cx_foreach(const AscSprite*, node, iter_opaque_rect) {
102 asc_sprite_draw(shader, node); 102 asc_sprite_draw(shader, node);
103 } 103 }
104 } 104 }
105 if (cxIteratorValid(iter_opaque_uv)) { 105 if (cxIteratorValid(iter_opaque_uv)) {
106 glDisable(GL_BLEND); 106 glDisable(GL_BLEND);
107 AscShaderSprite *shader = ASC_SHADER_SPRITE_UV; 107 const AscShaderProgram *shader = asc_sprite_shader_uv();
108 asc_shader_program_use(&shader->program, &scene->camera); 108 asc_shader_use(shader, &scene->camera);
109 cx_foreach(const AscSprite*, node, iter_opaque_uv) { 109 cx_foreach(const AscSprite*, node, iter_opaque_uv) {
110 asc_sprite_draw(shader, node); 110 asc_sprite_draw(shader, node);
111 } 111 }
112 } 112 }
113 if (cxIteratorValid(iter_blend_rect)) { 113 if (cxIteratorValid(iter_blend_rect)) {
114 glEnable(GL_BLEND); 114 glEnable(GL_BLEND);
115 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 115 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
116 AscShaderSprite *shader = ASC_SHADER_SPRITE_RECT; 116 const AscShaderProgram *shader = asc_sprite_shader_rect();
117 asc_shader_program_use(&shader->program, &scene->camera); 117 asc_shader_use(shader, &scene->camera);
118 cx_foreach(const AscSprite*, node, iter_blend_rect) { 118 cx_foreach(const AscSprite*, node, iter_blend_rect) {
119 asc_sprite_draw(shader, node); 119 asc_sprite_draw(shader, node);
120 } 120 }
121 } 121 }
122 if (cxIteratorValid(iter_blend_uv)) { 122 if (cxIteratorValid(iter_blend_uv)) {
123 glEnable(GL_BLEND); 123 glEnable(GL_BLEND);
124 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 124 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
125 AscShaderSprite *shader = ASC_SHADER_SPRITE_UV; 125 const AscShaderProgram *shader = asc_sprite_shader_uv();
126 asc_shader_program_use(&shader->program, &scene->camera); 126 asc_shader_use(shader, &scene->camera);
127 cx_foreach(const AscSprite*, node, iter_blend_uv) { 127 cx_foreach(const AscSprite*, node, iter_blend_uv) {
128 asc_sprite_draw(shader, node); 128 asc_sprite_draw(shader, node);
129 } 129 }
130 } 130 }
131 } 131 }

mercurial