1.1 --- a/src/scene.c Tue Mar 26 20:37:21 2024 +0100 1.2 +++ b/src/scene.c Thu Mar 28 23:30:21 2024 +0100 1.3 @@ -123,12 +123,18 @@ 1.4 node->update_func(node); 1.5 } 1.6 if (node->need_transform_update) { 1.7 - assert(node->transform_update_func != NULL); 1.8 node->need_transform_update = false; 1.9 - asc_transform_identity(node->local_transform); 1.10 - asc_transform_copy(node->world_transform, node->parent->world_transform); 1.11 - node->transform_update_func(node); 1.12 - asc_mat4f_mulst(node->final_transform, node->local_transform, node->world_transform); 1.13 + asc_transform_from_parts( 1.14 + node->transform, 1.15 + node->position, 1.16 + node->scale, 1.17 + node->rotation 1.18 + ); 1.19 + asc_mat4f_mulst( 1.20 + node->world_transform, 1.21 + node->transform, 1.22 + node->parent->world_transform 1.23 + ); 1.24 } 1.25 1.26 // add to render group 1.27 @@ -174,7 +180,7 @@ 1.28 // Sprites 1.29 // ------- 1.30 // TODO: see if we can really always ignore the view matrix 1.31 - shader = &asc_context.active_window->glctx.shader.sprite; 1.32 + shader = &asc_context.active_window->glctx.shader.sprite.base; 1.33 glUseProgram(shader->id); 1.34 glUniformMatrix4fv(shader->projection, 1, 1.35 GL_FALSE, camera->projection); 1.36 @@ -192,9 +198,8 @@ 1.37 AscSceneNode *asc_scene_node_empty(void) { 1.38 AscSceneNode *node = calloc(1, sizeof(AscSceneNode)); 1.39 node->free_func = (asc_scene_free_func) free; 1.40 - asc_transform_identity(node->local_transform); 1.41 + asc_transform_identity(node->transform); 1.42 asc_transform_identity(node->world_transform); 1.43 - asc_transform_identity(node->final_transform); 1.44 return node; 1.45 } 1.46 1.47 @@ -260,9 +265,12 @@ 1.48 ); 1.49 } 1.50 1.51 -void asc_node_update_transform(AscSceneNode *node) { 1.52 +void asc_update_transform(AscSceneNode *node) { 1.53 + if (node->need_transform_update) return; 1.54 + 1.55 CxTreeIterator iter = asc_scene_node_iterator(node, false); 1.56 cx_foreach(AscSceneNode*, n, iter) { 1.57 + // TODO: break/continue when subtree is already marked for update 1.58 n->need_transform_update = true; 1.59 } 1.60 -} 1.61 \ No newline at end of file 1.62 +}