fix gc bug

This commit is contained in:
2026-02-25 23:26:19 -06:00
parent a840f32c4e
commit 0262ed7388
3 changed files with 42 additions and 22 deletions

View File

@@ -84,9 +84,11 @@ static void render_frame(plm_t *mpeg, plm_frame_t *frame, void *d) {
JS_ROOT(surfData, JS_NewObject(ds->js));
JS_SetPropertyStr(ds->js, surfData.val, "width", JS_NewInt32(ds->js, frame->width));
JS_SetPropertyStr(ds->js, surfData.val, "height", JS_NewInt32(ds->js, frame->height));
JS_SetPropertyStr(ds->js, surfData.val, "format", JS_NewString(ds->js, "rgba32"));
JSValue tmp = JS_NewString(ds->js, "rgba32");
JS_SetPropertyStr(ds->js, surfData.val, "format", tmp);
JS_SetPropertyStr(ds->js, surfData.val, "pitch", JS_NewInt32(ds->js, frame->width*4));
JS_SetPropertyStr(ds->js, surfData.val, "pixels", js_new_blob_stoned_copy(ds->js, rgb, frame->height*frame->width*4));
tmp = js_new_blob_stoned_copy(ds->js, rgb, frame->height*frame->width*4);
JS_SetPropertyStr(ds->js, surfData.val, "pixels", tmp);
JSValue s[1];
s[0] = surfData.val;

View File

@@ -280,13 +280,17 @@ JSValue quads_to_mesh(JSContext *js, text_vert *buffer)
JS_FRAME(js);
JS_ROOT(ret, JS_NewObject(js));
JS_SetPropertyStr(js, ret.val, "xy", js_new_blob_stoned_copy(js, xy_data, xy_size));
JSValue tmp = js_new_blob_stoned_copy(js, xy_data, xy_size);
JS_SetPropertyStr(js, ret.val, "xy", tmp);
JS_SetPropertyStr(js, ret.val, "xy_stride", JS_NewInt32(js, 2 * sizeof(float)));
JS_SetPropertyStr(js, ret.val, "uv", js_new_blob_stoned_copy(js, uv_data, uv_size));
tmp = js_new_blob_stoned_copy(js, uv_data, uv_size);
JS_SetPropertyStr(js, ret.val, "uv", tmp);
JS_SetPropertyStr(js, ret.val, "uv_stride", JS_NewInt32(js, 2 * sizeof(float)));
JS_SetPropertyStr(js, ret.val, "color", js_new_blob_stoned_copy(js, color_data, color_size));
tmp = js_new_blob_stoned_copy(js, color_data, color_size);
JS_SetPropertyStr(js, ret.val, "color", tmp);
JS_SetPropertyStr(js, ret.val, "color_stride", JS_NewInt32(js, sizeof(SDL_FColor)));
JS_SetPropertyStr(js, ret.val, "indices", js_new_blob_stoned_copy(js, indices, sizeof(uint16_t)*count));
tmp = js_new_blob_stoned_copy(js, indices, sizeof(uint16_t)*count);
JS_SetPropertyStr(js, ret.val, "indices", tmp);
JS_SetPropertyStr(js, ret.val, "num_vertices", JS_NewInt32(js, verts));
JS_SetPropertyStr(js, ret.val, "num_indices", JS_NewInt32(js, count));
JS_SetPropertyStr(js, ret.val, "size_indices", JS_NewInt32(js, 2)); // uint16_t size
@@ -711,18 +715,22 @@ JSC_CCALL(geometry_tilemap_to_data,
}
}
}
// Create result object with blob data
JS_FRAME(js);
JS_ROOT(result, JS_NewObject(js));
JS_SetPropertyStr(js, result.val, "xy", js_new_blob_stoned_copy(js, xy_data, vertex_count * 2 * sizeof(float)));
JSValue tmp = js_new_blob_stoned_copy(js, xy_data, vertex_count * 2 * sizeof(float));
JS_SetPropertyStr(js, result.val, "xy", tmp);
JS_SetPropertyStr(js, result.val, "xy_stride", JS_NewInt32(js, 2 * sizeof(float)));
JS_SetPropertyStr(js, result.val, "uv", js_new_blob_stoned_copy(js, uv_data, vertex_count * 2 * sizeof(float)));
tmp = js_new_blob_stoned_copy(js, uv_data, vertex_count * 2 * sizeof(float));
JS_SetPropertyStr(js, result.val, "uv", tmp);
JS_SetPropertyStr(js, result.val, "uv_stride", JS_NewInt32(js, 2 * sizeof(float)));
JS_SetPropertyStr(js, result.val, "color", js_new_blob_stoned_copy(js, color_data, vertex_count * sizeof(SDL_FColor)));
tmp = js_new_blob_stoned_copy(js, color_data, vertex_count * sizeof(SDL_FColor));
JS_SetPropertyStr(js, result.val, "color", tmp);
JS_SetPropertyStr(js, result.val, "color_stride", JS_NewInt32(js, sizeof(SDL_FColor)));
JS_SetPropertyStr(js, result.val, "indices", js_new_blob_stoned_copy(js, index_data, index_count * sizeof(uint16_t)));
tmp = js_new_blob_stoned_copy(js, index_data, index_count * sizeof(uint16_t));
JS_SetPropertyStr(js, result.val, "indices", tmp);
JS_SetPropertyStr(js, result.val, "num_vertices", JS_NewInt32(js, vertex_count));
JS_SetPropertyStr(js, result.val, "num_indices", JS_NewInt32(js, index_count));
JS_SetPropertyStr(js, result.val, "size_indices", JS_NewInt32(js, 2)); // using uint16_t
@@ -923,17 +931,21 @@ JSC_CCALL(geometry_sprites_to_data,
vertex_idx += 4;
}
// Create result object with blob data
JS_FRAME(js);
JS_ROOT(result, JS_NewObject(js));
JS_SetPropertyStr(js, result.val, "xy", js_new_blob_stoned_copy(js, xy_data, vertex_count * 2 * sizeof(float)));
JSValue tmp = js_new_blob_stoned_copy(js, xy_data, vertex_count * 2 * sizeof(float));
JS_SetPropertyStr(js, result.val, "xy", tmp);
JS_SetPropertyStr(js, result.val, "xy_stride", JS_NewInt32(js, 2 * sizeof(float)));
JS_SetPropertyStr(js, result.val, "uv", js_new_blob_stoned_copy(js, uv_data, vertex_count * 2 * sizeof(float)));
tmp = js_new_blob_stoned_copy(js, uv_data, vertex_count * 2 * sizeof(float));
JS_SetPropertyStr(js, result.val, "uv", tmp);
JS_SetPropertyStr(js, result.val, "uv_stride", JS_NewInt32(js, 2 * sizeof(float)));
JS_SetPropertyStr(js, result.val, "color", js_new_blob_stoned_copy(js, color_data, vertex_count * sizeof(SDL_FColor)));
tmp = js_new_blob_stoned_copy(js, color_data, vertex_count * sizeof(SDL_FColor));
JS_SetPropertyStr(js, result.val, "color", tmp);
JS_SetPropertyStr(js, result.val, "color_stride", JS_NewInt32(js, sizeof(SDL_FColor)));
JS_SetPropertyStr(js, result.val, "indices", js_new_blob_stoned_copy(js, index_data, index_count * sizeof(uint16_t)));
tmp = js_new_blob_stoned_copy(js, index_data, index_count * sizeof(uint16_t));
JS_SetPropertyStr(js, result.val, "indices", tmp);
JS_SetPropertyStr(js, result.val, "num_vertices", JS_NewInt32(js, vertex_count));
JS_SetPropertyStr(js, result.val, "num_indices", JS_NewInt32(js, index_count));
JS_SetPropertyStr(js, result.val, "size_indices", JS_NewInt32(js, 2)); // using uint16_t
@@ -1104,11 +1116,14 @@ JSC_CCALL(geometry_make_rect_quad,
// Create result object
JS_FRAME(js);
JS_ROOT(result, JS_NewObject(js));
JS_SetPropertyStr(js, result.val, "xy", js_new_blob_stoned_copy(js, xy_data, vertex_count * 2 * sizeof(float)));
JSValue tmp = js_new_blob_stoned_copy(js, xy_data, vertex_count * 2 * sizeof(float));
JS_SetPropertyStr(js, result.val, "xy", tmp);
JS_SetPropertyStr(js, result.val, "xy_stride", JS_NewInt32(js, 2 * sizeof(float)));
JS_SetPropertyStr(js, result.val, "uv", js_new_blob_stoned_copy(js, uv_data, vertex_count * 2 * sizeof(float)));
tmp = js_new_blob_stoned_copy(js, uv_data, vertex_count * 2 * sizeof(float));
JS_SetPropertyStr(js, result.val, "uv", tmp);
JS_SetPropertyStr(js, result.val, "uv_stride", JS_NewInt32(js, 2 * sizeof(float)));
JS_SetPropertyStr(js, result.val, "color", js_new_blob_stoned_copy(js, color_data, vertex_count * sizeof(SDL_FColor)));
tmp = js_new_blob_stoned_copy(js, color_data, vertex_count * sizeof(SDL_FColor));
JS_SetPropertyStr(js, result.val, "color", tmp);
JS_SetPropertyStr(js, result.val, "color_stride", JS_NewInt32(js, sizeof(SDL_FColor)));
JS_SetPropertyStr(js, result.val, "num_vertices", JS_NewInt32(js, vertex_count));
JS_RestoreFrame(_js_ctx, _js_gc_frame, _js_local_frame);

View File

@@ -858,13 +858,16 @@ CELL_USE_INIT(
JS_ROOT(mod, JS_NewObject(js));
// Create font constructor (legacy)
JS_SetPropertyStr(js, mod.val, "font", JS_NewCFunction2(js, js_font_constructor, "font", 2, JS_CFUNC_generic, 0));
JSValue fn = JS_NewCFunction2(js, js_font_constructor, "font", 2, JS_CFUNC_generic, 0);
JS_SetPropertyStr(js, mod.val, "font", fn);
// Create SDF font constructor: sdf_font(data, em_px, range_px, padding_px, sharpness)
JS_SetPropertyStr(js, mod.val, "sdf_font", JS_NewCFunction2(js, js_sdf_font_constructor, "sdf_font", 5, JS_CFUNC_generic, 0));
fn = JS_NewCFunction2(js, js_sdf_font_constructor, "sdf_font", 5, JS_CFUNC_generic, 0);
JS_SetPropertyStr(js, mod.val, "sdf_font", fn);
// Create MSDF font constructor: msdf_font(data, em_px, range_px, padding_px, sharpness)
JS_SetPropertyStr(js, mod.val, "msdf_font", JS_NewCFunction2(js, js_msdf_font_constructor, "msdf_font", 5, JS_CFUNC_generic, 0));
fn = JS_NewCFunction2(js, js_msdf_font_constructor, "msdf_font", 5, JS_CFUNC_generic, 0);
JS_SetPropertyStr(js, mod.val, "msdf_font", fn);
JS_RETURN(mod.val);
)