diff --git a/armorlab/sources/make_material.ts b/armorlab/sources/make_material.ts index b483129a..bf9ae914 100644 --- a/armorlab/sources/make_material.ts +++ b/armorlab/sources/make_material.ts @@ -137,3 +137,7 @@ function make_material_delete_context(c: shader_context_t) { shader_context_delete(c); }, c); } + +function make_material_parse_brush() { + // parser_logic_parse(context_raw.brush.canvas); +} diff --git a/armorlab/sources/make_mesh.ts b/armorlab/sources/make_mesh.ts index f8109c20..5079b7c8 100644 --- a/armorlab/sources/make_mesh.ts +++ b/armorlab/sources/make_mesh.ts @@ -52,7 +52,8 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte vert.n = true; node_shader_write(vert, "float height = 0.0;"); let num_layers: i32 = 1; - node_shader_write(vert, "wposition += wnormal * vec3(height, height, height) * vec3(" + displace_strength +", " + displace_strength + ", " + displace_strength + ");"); + let displace_3: string = displace_strength + ", " + displace_strength + ", " + displace_strength; + node_shader_write(vert, "wposition += wnormal * vec3(height, height, height) * vec3(" + displace_3 + ");"); } node_shader_write(vert, "gl_Position = mul(vec4(wposition.xyz, 1.0), VP);"); diff --git a/armorlab/sources/nodes/upscale_node.ts b/armorlab/sources/nodes/upscale_node.ts index 39935599..fb0bc1f0 100644 --- a/armorlab/sources/nodes/upscale_node.ts +++ b/armorlab/sources/nodes/upscale_node.ts @@ -41,7 +41,7 @@ function upscale_node_get_cached_image(self: upscale_node_t): image_t { return upscale_node_image; } -function upscale_node_do_tile(source: image_t) { +function upscale_node_do_tile(source: image_t): image_t { let result: image_t = null; let size1w: i32 = source.width; let size1h: i32 = source.height; diff --git a/armorlab/sources/nodes_brush.ts b/armorlab/sources/nodes_brush.ts index 7db97601..5a57a60f 100644 --- a/armorlab/sources/nodes_brush.ts +++ b/armorlab/sources/nodes_brush.ts @@ -1,26 +1,14 @@ -let nodes_brush_categories: string[] = [_tr("Input"), _tr("Model")]; - -let nodes_brush_input: ui_node_t[] = [ - image_texture_node_def, - rgb_node_def, +let nodes_brush_categories: string[] = [ + _tr("Input"), + _tr("Model") ]; -let nodes_brush_model: ui_node_t[] = [ - inpaint_node_def, - photo_to_pbr_node_def, - text_to_photo_node_def, - tiling_node_def, - upscale_node_def, - variance_node_def, -]; +let nodes_brush_input: ui_node_t[]; +let nodes_brush_model: ui_node_t[]; +let nodes_brush_list: node_list_t[]; -let nodes_brush_list: node_list_t[] = [ - nodes_brush_input, - nodes_brush_model -] - -let nodes_brush_creates: map_t; +let nodes_brush_creates: map_tlogic_node_ext_t>; function nodes_brush_init() { nodes_brush_creates = map_create(); @@ -33,11 +21,30 @@ function nodes_brush_init() { map_set(nodes_brush_creates, "tiling_node", tiling_node_create); map_set(nodes_brush_creates, "upscale_node", upscale_node_create); map_set(nodes_brush_creates, "variance_node", variance_node_create); + + nodes_brush_input = [ + image_texture_node_def, + rgb_node_def, + ]; + + nodes_brush_model = [ + inpaint_node_def, + photo_to_pbr_node_def, + text_to_photo_node_def, + tiling_node_def, + upscale_node_def, + variance_node_def, + ]; + + nodes_brush_list = [ + nodes_brush_input, + nodes_brush_model + ]; } function nodes_brush_create_node(node_type: string): ui_node_t { for (let i: i32 = 0; i < nodes_brush_list.length; ++i) { - let c: node_list_t = nodes_brush_list[i]; + let c: ui_node_t[] = nodes_brush_list[i]; for (let j: i32 = 0; j < c.length; ++j) { let n: ui_node_t = c[j]; if (n.type == node_type) { diff --git a/armorlab/sources/render_path_paint.ts b/armorlab/sources/render_path_paint.ts index 130bc2c0..fd01c5b3 100644 --- a/armorlab/sources/render_path_paint.ts +++ b/armorlab/sources/render_path_paint.ts @@ -62,6 +62,7 @@ function render_path_paint_commands_paint(dilation: bool = true) { if (context_raw.tool == workspace_tool_t.PICKER) { + let additional: string[] = ["texpaint_nor_picker", "texpaint_pack_picker", "texpaint_uv_picker"]; ///if arm_metal // render_path_set_target("texpaint_picker"); // render_path_clear_target(0xff000000); @@ -69,9 +70,9 @@ function render_path_paint_commands_paint(dilation: bool = true) { // render_path_clear_target(0xff000000); // render_path_set_target("texpaint_pack_picker"); // render_path_clear_target(0xff000000); - render_path_set_target("texpaint_picker", ["texpaint_nor_picker", "texpaint_pack_picker", "texpaint_uv_picker"]); + render_path_set_target("texpaint_picker", additional); ///else - render_path_set_target("texpaint_picker", ["texpaint_nor_picker", "texpaint_pack_picker", "texpaint_uv_picker"]); + render_path_set_target("texpaint_picker", additional); // render_path_clear_target(0xff000000); ///end render_path_bind_target("gbuffer2", "gbuffer2"); @@ -82,14 +83,14 @@ function render_path_paint_commands_paint(dilation: bool = true) { render_path_draw_meshes("paint"); ui_header_handle.redraws = 2; - let texpaint_picker: image_t = map_get(render_path_render_targets, "texpaint_picker")._image; - let texpaint_nor_picker: image_t = map_get(render_path_render_targets, "texpaint_nor_picker")._image; - let texpaint_pack_picker: image_t = map_get(render_path_render_targets, "texpaint_pack_picker")._image; - let texpaint_uv_picker: image_t = map_get(render_path_render_targets, "texpaint_uv_picker")._image; - let a: buffer_t = image_get_pixels(texpaint_picker); - let b: buffer_t = image_get_pixels(texpaint_nor_picker); - let c: buffer_t = image_get_pixels(texpaint_pack_picker); - let d: buffer_t = image_get_pixels(texpaint_uv_picker); + let texpaint_picker: render_target_t = map_get(render_path_render_targets, "texpaint_picker"); + let texpaint_nor_picker: render_target_t = map_get(render_path_render_targets, "texpaint_nor_picker"); + let texpaint_pack_picker: render_target_t = map_get(render_path_render_targets, "texpaint_pack_picker"); + let texpaint_uv_picker: render_target_t = map_get(render_path_render_targets, "texpaint_uv_picker"); + let a: buffer_t = image_get_pixels(texpaint_picker._image); + let b: buffer_t = image_get_pixels(texpaint_nor_picker._image); + let c: buffer_t = image_get_pixels(texpaint_pack_picker._image); + let d: buffer_t = image_get_pixels(texpaint_uv_picker._image); if (context_raw.color_picker_callback != null) { context_raw.color_picker_callback(context_raw.picked_color); @@ -133,7 +134,8 @@ function render_path_paint_commands_paint(dilation: bool = true) { render_path_bind_target("texpaint_blend0", "tex"); render_path_draw_shader("shader_datas/copy_pass/copyR8_pass"); - render_path_set_target(texpaint, ["texpaint_nor" + tid, "texpaint_pack" + tid, "texpaint_blend0"]); + let additional: string[] = ["texpaint_nor" + tid, "texpaint_pack" + tid, "texpaint_blend0"]; + render_path_set_target(texpaint, additional); render_path_bind_target("_main", "gbufferD"); @@ -190,10 +192,10 @@ function render_path_paint_draw_cursor(mx: f32, my: f32, radius: f32, tint_r: f3 g4_set_pipeline(base_pipe_cursor); let img: image_t = resource_get("cursor.k"); g4_set_tex(base_cursor_tex, img); - let gbuffer0: image_t = map_get(render_path_render_targets, "gbuffer0")._image; - g4_set_tex_depth(base_cursor_gbufferd, gbuffer0); + let gbuffer0: render_target_t = map_get(render_path_render_targets, "gbuffer0"); + g4_set_tex_depth(base_cursor_gbufferd, gbuffer0._image); g4_set_float2(base_cursor_mouse, mx, my); - g4_set_float2(base_cursor_tex_step, 1 / gbuffer0.width, 1 / gbuffer0.height); + g4_set_float2(base_cursor_tex_step, 1 / gbuffer0._image.width, 1 / gbuffer0._image.height); g4_set_float(base_cursor_radius, radius); let right: vec4_t = vec4_norm(camera_object_right_world(scene_camera)); g4_set_float3(base_cursor_camera_right, right.x, right.y, right.z); @@ -203,12 +205,12 @@ function render_path_paint_draw_cursor(mx: f32, my: f32, radius: f32, tint_r: f3 help_mat = mat4_inv(scene_camera.vp); g4_set_mat(base_cursor_inv_vp, help_mat); ///if (arm_metal || arm_vulkan) - let vs: vertex_structure_t[] = [{name: "tex", data: "short2norm"}]; + let vs: vertex_structure_t[] = [{ name: "tex", data: "short2norm" }]; g4_set_vertex_buffer(mesh_data_get(geom, vs)); ///else - g4_set_vertex_buffer(geom._vertexBuffer); + g4_set_vertex_buffer(geom._.vertex_buffer); ///end - g4_set_index_buffer(geom._indexBuffers[0]); + g4_set_index_buffer(geom._.index_buffers[0]); g4_draw(); g4_disable_scissor(); @@ -251,7 +253,8 @@ function render_path_paint_draw() { render_path_set_target("texpaint_blend1"); render_path_clear_target(0x00000000); ///else - render_path_set_target("texpaint_blend0", ["texpaint_blend1"]); + let additional: string[] = ["texpaint_blend1"]; + render_path_set_target("texpaint_blend0", additional); render_path_clear_target(0x00000000); ///end } @@ -285,7 +288,8 @@ function render_path_paint_bind_layers() { t.format = "RGBA32"; map_set(render_path_render_targets, t.name, t); } - map_get(render_path_render_targets, "texpaint_node")._image = image; + let texpaint_node_rt: render_target_t = map_get(render_path_render_targets, "texpaint_node"); + texpaint_node_rt._image = image; render_path_bind_target("texpaint_node", "texpaint"); render_path_bind_target("texpaint_nor_empty", "texpaint_nor"); render_path_bind_target("texpaint_pack_empty", "texpaint_pack"); @@ -295,7 +299,8 @@ function render_path_paint_bind_layers() { let node: ui_node_t = ui_get_node(canvas.nodes, nodes.nodes_selected_id[0]); let inpaint: bool = node.type == "InpaintNode"; if (inpaint) { - map_get(render_path_render_targets, "texpaint_node_target")._image = inpaint_node_get_target(); + let texpaint_node_target_rt: render_target_t = map_get(render_path_render_targets, "texpaint_node_target"); + texpaint_node_target_rt._image = inpaint_node_get_target(); } } else { diff --git a/armorlab/sources/slot_layer.ts b/armorlab/sources/slot_layer.ts new file mode 100644 index 00000000..8da1915b --- /dev/null +++ b/armorlab/sources/slot_layer.ts @@ -0,0 +1,8 @@ + +type slot_layer_t = { + texpaint: image_t; + texpaint_nor: image_t; + texpaint_pack: image_t; + + decal_mat: mat4_t; +}; diff --git a/armorlab/sources/slot_material.ts b/armorlab/sources/slot_material.ts new file mode 100644 index 00000000..678746fe --- /dev/null +++ b/armorlab/sources/slot_material.ts @@ -0,0 +1,6 @@ + +type slot_material_t = { + nodes?: ui_nodes_t; + canvas?: ui_node_canvas_t; + +}; diff --git a/armorlab/sources/ui_nodes_ext.ts b/armorlab/sources/ui_nodes_ext.ts index b4f4bcd8..b63af3e2 100644 --- a/armorlab/sources/ui_nodes_ext.ts +++ b/armorlab/sources/ui_nodes_ext.ts @@ -25,15 +25,15 @@ function ui_nodes_ext_draw_buttons(ew: f32, start_y: f32) { let texheight: image_t = logic_node_get_as_image(brush_output_node_inst.base, channel_type_t.HEIGHT); if (texbase != null) { - let texpaint: image_t = map_get(render_path_render_targets, "texpaint")._image; - g2_begin(texpaint); + let texpaint: render_target_t = map_get(render_path_render_targets, "texpaint"); + g2_begin(texpaint._image); g2_draw_scaled_image(texbase, 0, 0, config_get_texture_res_x(), config_get_texture_res_y()); g2_end(); } if (texnor != null) { - let texpaint_nor: image_t = map_get(render_path_render_targets, "texpaint_nor")._image; - g2_begin(texpaint_nor); + let texpaint_nor: render_target_t = map_get(render_path_render_targets, "texpaint_nor"); + g2_begin(texpaint_nor._image); g2_draw_scaled_image(texnor, 0, 0, config_get_texture_res_x(), config_get_texture_res_y()); g2_end(); } @@ -48,10 +48,10 @@ function ui_nodes_ext_draw_buttons(ew: f32, start_y: f32) { const_data_create_screen_aligned_data(); } - let texpaint_pack: image_t = map_get(render_path_render_targets, "texpaint_pack")._image; + let texpaint_pack: render_target_t = map_get(render_path_render_targets, "texpaint_pack"); if (texocc != null) { - g2_begin(texpaint_pack); + g2_begin(texpaint_pack._image); g2_set_pipeline(base_pipe_copy_r); g2_draw_scaled_image(texocc, 0, 0, config_get_texture_res_x(), config_get_texture_res_y()); g2_set_pipeline(null); @@ -59,7 +59,7 @@ function ui_nodes_ext_draw_buttons(ew: f32, start_y: f32) { } if (texrough != null) { - g2_begin(texpaint_pack); + g2_begin(texpaint_pack._image); g2_set_pipeline(base_pipe_copy_g); g2_draw_scaled_image(texrough, 0, 0, config_get_texture_res_x(), config_get_texture_res_y()); g2_set_pipeline(null); @@ -67,7 +67,7 @@ function ui_nodes_ext_draw_buttons(ew: f32, start_y: f32) { } if (texheight != null) { - g4_begin(texpaint_pack); + g4_begin(texpaint_pack._image); g4_set_pipeline(base_pipe_copy_a); g4_set_tex(base_pipe_copy_a_tex, texheight); g4_set_vertex_buffer(const_data_screen_aligned_vb); @@ -101,7 +101,7 @@ function ui_nodes_ext_draw_buttons(ew: f32, start_y: f32) { iron_g4_swap_buffers(); let uv_scale: f32 = scene_meshes[0].data.scale_tex * context_raw.brush_scale; - util_mesh_apply_displacement(texpaint_pack, 0.05 * config_raw.displace_strength, uv_scale); + util_mesh_apply_displacement(texpaint_pack._image, 0.05 * config_raw.displace_strength, uv_scale); util_mesh_calc_normals(); } } diff --git a/base/sources/base.ts b/base/sources/base.ts index 045ce137..2fc0ed9e 100644 --- a/base/sources/base.ts +++ b/base/sources/base.ts @@ -1119,24 +1119,24 @@ function base_init_layers() { ///end ///if is_lab - let texpaint: image_t = map_get(render_path_render_targets, "texpaint")._image; - let texpaint_nor: image_t = map_get(render_path_render_targets, "texpaint_nor")._image; - let texpaint_pack: image_t = map_get(render_path_render_targets, "texpaint_pack")._image; - g2_begin(texpaint); + let texpaint: render_target_t = map_get(render_path_render_targets, "texpaint"); + let texpaint_nor: render_target_t = map_get(render_path_render_targets, "texpaint_nor"); + let texpaint_pack: render_target_t = map_get(render_path_render_targets, "texpaint_pack"); + g2_begin(texpaint._image); g2_draw_scaled_image(resource_get("placeholder.k"), 0, 0, config_get_texture_res_x(), config_get_texture_res_y()); // Base g2_end(); - g4_begin(texpaint_nor); + g4_begin(texpaint_nor._image); g4_clear(color_from_floats(0.5, 0.5, 1.0, 0.0)); // Nor g4_end(); - g4_begin(texpaint_pack); + g4_begin(texpaint_pack._image); g4_clear(color_from_floats(1.0, 0.4, 0.0, 0.0)); // Occ, rough, met g4_end(); - let texpaint_nor_empty: image_t = map_get(render_path_render_targets, "texpaint_nor_empty")._image; - let texpaint_pack_empty: image_t = map_get(render_path_render_targets, "texpaint_pack_empty")._image; - g4_begin(texpaint_nor_empty); + let texpaint_nor_empty: render_target_t = map_get(render_path_render_targets, "texpaint_nor_empty"); + let texpaint_pack_empty: render_target_t = map_get(render_path_render_targets, "texpaint_pack_empty"); + g4_begin(texpaint_nor_empty._image); g4_clear(color_from_floats(0.5, 0.5, 1.0, 0.0)); // Nor g4_end(); - g4_begin(texpaint_pack_empty); + g4_begin(texpaint_pack_empty._image); g4_clear(color_from_floats(1.0, 0.4, 0.0, 0.0)); // Occ, rough, met g4_end(); ///end @@ -2382,7 +2382,7 @@ function base_on_layers_resized() { ///end ///if is_lab -function base_flatten(height_to_normal: bool = false): any { +function base_flatten(height_to_normal: bool = false): slot_layer_t { let texpaint: image_t = brush_output_node_inst.texpaint; let texpaint_nor: image_t = brush_output_node_inst.texpaint_nor; let texpaint_pack: image_t = brush_output_node_inst.texpaint_pack; @@ -2394,21 +2394,29 @@ function base_flatten(height_to_normal: bool = false): any { let brush_node: logic_node_t = parser_logic_get_logic_node(node); if (brush_node != null && logic_node_get_cached_image(brush_node) != null) { texpaint = logic_node_get_cached_image(brush_node); - texpaint_nor = map_get(render_path_render_targets, "texpaint_nor_empty")._image; - texpaint_pack = map_get(render_path_render_targets, "texpaint_pack_empty")._image; + let texpaint_nor_rt: render_target_t = map_get(render_path_render_targets, "texpaint_nor_empty"); + let texpaint_pack_rt: render_target_t = map_get(render_path_render_targets, "texpaint_pack_empty"); + texpaint_nor = texpaint_nor_rt._image; + texpaint_pack = texpaint_pack_rt._image; } } - return { texpaint: texpaint, texpaint_nor: texpaint_nor, texpaint_pack: texpaint_pack }; + let l: slot_layer_t = { texpaint: texpaint, texpaint_nor: texpaint_nor, texpaint_pack: texpaint_pack }; + return l; } function base_on_layers_resized() { image_unload(brush_output_node_inst.texpaint); - brush_output_node_inst.texpaint = map_get(render_path_render_targets, "texpaint")._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y()); + let texpaint_rt: render_target_t = map_get(render_path_render_targets, "texpaint"); + brush_output_node_inst.texpaint = texpaint_rt._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y()); + image_unload(brush_output_node_inst.texpaint_nor); - brush_output_node_inst.texpaint_nor = map_get(render_path_render_targets, "texpaint_nor")._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y()); + let texpaint_nor_rt: render_target_t = map_get(render_path_render_targets, "texpaint_nor"); + brush_output_node_inst.texpaint_nor = texpaint_nor_rt._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y()); + image_unload(brush_output_node_inst.texpaint_pack); - brush_output_node_inst.texpaint_pack = map_get(render_path_render_targets, "texpaint_pack")._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y()); + let texpaint_pack_rt: render_target_t = map_get(render_path_render_targets, "texpaint_pack"); + brush_output_node_inst.texpaint_pack = texpaint_pack_rt._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y()); if (inpaint_node_image != null) { image_unload(inpaint_node_image); @@ -2433,10 +2441,13 @@ function base_on_layers_resized() { tiling_node_init(); } - image_unload(map_get(render_path_render_targets, "texpaint_blend0")._image); - map_get(render_path_render_targets, "texpaint_blend0")._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y(), tex_format_t.R8); - image_unload(map_get(render_path_render_targets, "texpaint_blend1")._image); - map_get(render_path_render_targets, "texpaint_blend1")._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y(), tex_format_t.R8); + let texpaint_blend0_rt: render_target_t = map_get(render_path_render_targets, "texpaint_blend0"); + image_unload(texpaint_blend0_rt._image); + texpaint_blend0_rt._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y(), tex_format_t.R8); + + let texpaint_blend1_rt: render_target_t = map_get(render_path_render_targets, "texpaint_blend1"); + image_unload(texpaint_blend1_rt._image); + texpaint_blend1_rt._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y(), tex_format_t.R8); if (map_get(render_path_render_targets, "texpaint_node") != null) { map_delete(render_path_render_targets, "texpaint_node"); diff --git a/base/sources/context.ts b/base/sources/context.ts index d2caf8d2..b64a8a6c 100644 --- a/base/sources/context.ts +++ b/base/sources/context.ts @@ -271,8 +271,8 @@ type context_t = { ///end ///if is_lab - material?: any; //// - layer?: any; //// + material?: slot_material_t; //// + layer?: slot_layer_t; //// tool?: workspace_tool_t; color_picker_previous_tool?: workspace_tool_t; @@ -991,7 +991,12 @@ function context_update() { let dy: i32 = math_abs(context_raw.lock_start_y - mouse_view_y()); if (dx > 1 || dy > 1) { context_raw.lock_begin = false; - dx > dy ? context_raw.lock_y = true : context_raw.lock_x = true; + if (dx > dy) { + context_raw.lock_y = true; + } + else { + context_raw.lock_x = true; + } } } diff --git a/base/sources/parser_material.ts b/base/sources/parser_material.ts index 9dab2a08..e97c2886 100644 --- a/base/sources/parser_material.ts +++ b/base/sources/parser_material.ts @@ -2040,7 +2040,3 @@ enum color_space_t { SRGB, DIRECTX_NORMAL_MAP, } - -///if is_lab -type slot_material_t = any; -///end diff --git a/base/sources/project.ts b/base/sources/project.ts index 51bd3325..cd34190d 100644 --- a/base/sources/project.ts +++ b/base/sources/project.ts @@ -795,7 +795,6 @@ type project_format_t = { ///if is_lab material?: ui_node_canvas_t; - material_groups?: ui_node_canvas_t[]; mesh_data?: mesh_data_t; mesh_icon?: buffer_t; ///end diff --git a/base/sources/tab_textures.ts b/base/sources/tab_textures.ts index 5cde2806..f7309a5f 100644 --- a/base/sources/tab_textures.ts +++ b/base/sources/tab_textures.ts @@ -296,11 +296,12 @@ function tab_textures_delete_texture(asset: asset_t) { ///end }); + ///if (is_paint || is_sculpt) for (let i: i32 = 0; i < project_materials.length; ++i) { let m: slot_material_t = project_materials[i]; tab_textures_update_texture_pointers(m.canvas.nodes, i); } - ///if (is_paint || is_sculpt) + for (let i: i32 = 0; i < project_brushes.length; ++i) { let b: slot_brush_t = project_brushes[i]; tab_textures_update_texture_pointers(b.canvas.nodes, i); diff --git a/base/sources/ui_menubar.ts b/base/sources/ui_menubar.ts index 1ddd3a85..0bdfd42c 100644 --- a/base/sources/ui_menubar.ts +++ b/base/sources/ui_menubar.ts @@ -5,7 +5,7 @@ let ui_menubar_menu_handle: ui_handle_t = ui_handle_create(); let ui_menubar_w: i32 = ui_menubar_default_w; ///if is_lab -let _ui_menubar_saved_camera: mat4_t = null; +let _ui_menubar_saved_camera: mat4_t = mat4_nan(); let _ui_menubar_plane: mesh_object_t = null; ///end @@ -138,9 +138,9 @@ function ui_menubar_render_ui() { context_main_object().skip_context = null; if (ui_header_worktab.position == space_type_t.SPACE3D) { - if (_ui_menubar_saved_camera != null) { + if (!mat4_isnan(_ui_menubar_saved_camera)) { transform_set_matrix(scene_camera.base.transform, _ui_menubar_saved_camera); - _ui_menubar_saved_camera = null; + _ui_menubar_saved_camera = mat4_nan(); } scene_meshes = [context_main_object()]; } @@ -181,7 +181,7 @@ function ui_menubar_render_ui() { array_remove(scene_meshes, _ui_menubar_plane); } - if (_ui_menubar_saved_camera == null) { + if (mat4_isnan(_ui_menubar_saved_camera)) { _ui_menubar_saved_camera = mat4_clone(scene_camera.base.transform.local); } scene_meshes = [_ui_menubar_plane];