From 1899a0e27942d636efc118465ded667e23fbd94a Mon Sep 17 00:00:00 2001 From: luboslenco Date: Tue, 5 May 2026 22:50:19 +0200 Subject: [PATCH] paint: per mesh unwrap --- paint/sources/tab_plugins.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/paint/sources/tab_plugins.c b/paint/sources/tab_plugins.c index f30ad2ca..374b0702 100644 --- a/paint/sources/tab_plugins.c +++ b/paint/sources/tab_plugins.c @@ -114,17 +114,34 @@ void plugin_uv_unwrap_button() { } void plugin_uv_unwrap_per_object_button(mesh_object_t *mo) { - mesh_data_t *md = mo->data; - raw_mesh_t *mesh = - GC_ALLOC_INIT(raw_mesh_t, - {.posa = md->vertex_arrays->buffer[0]->values, .nora = md->vertex_arrays->buffer[1]->values, .texa = NULL, .inda = md->index_array}); - proc_uv_unwrap(mesh); - md->vertex_arrays->buffer[0]->values = mesh->posa; - md->vertex_arrays->buffer[1]->values = mesh->nora; - md->vertex_arrays->buffer[2]->values = mesh->texa; - md->index_array = mesh->inda; - mesh_data_build(md); + mesh_data_t *md = mo->data; + i16_array_t *md_posa = md->vertex_arrays->buffer[0]->values; + i16_array_t *md_nora = md->vertex_arrays->buffer[1]->values; + u32_array_t *md_inda = md->index_array; + i16_array_t *posa = malloc(sizeof(i16_array_t)); + posa->length = posa->capacity = md_posa->length; + posa->buffer = malloc(md_posa->length * sizeof(i16)); + memcpy(posa->buffer, md_posa->buffer, md_posa->length * sizeof(i16)); + + i16_array_t *nora = malloc(sizeof(i16_array_t)); + nora->length = nora->capacity = md_nora->length; + nora->buffer = malloc(md_nora->length * sizeof(i16)); + memcpy(nora->buffer, md_nora->buffer, md_nora->length * sizeof(i16)); + + u32_array_t *inda = malloc(sizeof(u32_array_t)); + inda->length = inda->capacity = md_inda->length; + inda->buffer = malloc(md_inda->length * sizeof(u32)); + memcpy(inda->buffer, md_inda->buffer, md_inda->length * sizeof(u32)); + + raw_mesh_t *mesh = GC_ALLOC_INIT(raw_mesh_t, {.posa = posa, .nora = nora, .texa = NULL, .inda = inda}); + + proc_uv_unwrap(mesh); + md->vertex_arrays->buffer[0]->values = mesh->posa; + md->vertex_arrays->buffer[1]->values = mesh->nora; + md->vertex_arrays->buffer[2]->values = mesh->texa; + md->index_array = mesh->inda; + mesh_data_build(md); } #endif