| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- let ui_nodes_ext_last_vertices: buffer_view_t = null; // Before displacement
- function ui_nodes_ext_draw_buttons(ew: f32, start_y: f32) {
- let ui = ui_nodes_ui;
- if (zui_button(tr("Run"))) {
- let delay_idle_sleep = function () {
- krom_delay_idle_sleep();
- }
- app_notify_on_render_2d(delay_idle_sleep);
- console_progress(tr("Processing"));
- krom_g4_swap_buffers();
- let timer = time_time();
- parser_logic_parse(project_canvas);
- photo_to_pbr_node_cached_source = null;
- let texbase: image_t = logic_node_get_as_image(brush_output_node_inst.base, channel_type_t.BASE_COLOR);
- let texocc: image_t = logic_node_get_as_image(brush_output_node_inst.base, channel_type_t.OCCLUSION);
- let texrough: image_t = logic_node_get_as_image(brush_output_node_inst.base, channel_type_t.ROUGHNESS);
- let texnor: image_t = logic_node_get_as_image(brush_output_node_inst.base, channel_type_t.NORMAL_MAP);
- let texheight: image_t = logic_node_get_as_image(brush_output_node_inst.base, channel_type_t.HEIGHT);
- if (texbase != null) {
- let texpaint = map_get(render_path_render_targets, "texpaint")._image;
- g2_begin(texpaint);
- 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 = map_get(render_path_render_targets, "texpaint_nor")._image;
- g2_begin(texpaint_nor);
- g2_draw_scaled_image(texnor, 0, 0, config_get_texture_res_x(), config_get_texture_res_y());
- g2_end();
- }
- if (base_pipe_copy == null) {
- base_make_pipe();
- }
- if (base_pipe_copy_a == null) {
- base_make_pipe_copy_a();
- }
- if (const_data_screen_aligned_vb == null) {
- const_data_create_screen_aligned_data();
- }
- let texpaint_pack = map_get(render_path_render_targets, "texpaint_pack")._image;
- if (texocc != null) {
- g2_begin(texpaint_pack);
- 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);
- g2_end();
- }
- if (texrough != null) {
- g2_begin(texpaint_pack);
- 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);
- g2_end();
- }
- if (texheight != null) {
- g4_begin(texpaint_pack);
- 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);
- g4_set_index_buffer(const_data_screen_aligned_ib);
- g4_draw();
- g4_end();
- if (ui_header_worktab.position == space_type_t.SPACE3D &&
- brush_output_node_inst.base.inputs[channel_type_t.HEIGHT].node.get != float_node_get) {
- // Make copy of vertices before displacement
- let o = project_paint_objects[0];
- let g = o.data;
- let vertices = g4_vertex_buffer_lock(g._.vertex_buffer);
- if (ui_nodes_ext_last_vertices == null || buffer_view_size(ui_nodes_ext_last_vertices) != buffer_view_size(vertices)) {
- ui_nodes_ext_last_vertices = buffer_view_create(buffer_create(buffer_view_size(vertices)));
- for (let i: i32 = 0; i < math_floor(buffer_view_size(vertices) / 2); ++i) {
- buffer_view_set_i16(ui_nodes_ext_last_vertices, i * 2, buffer_view_get_i16(vertices, i * 2));
- }
- }
- else {
- for (let i: i32 = 0; i < math_floor(buffer_view_size(vertices) / 2); ++i) {
- buffer_view_set_i16(vertices, i * 2, buffer_view_get_i16(ui_nodes_ext_last_vertices, i * 2));
- }
- }
- g4_vertex_buffer_unlock(g._.vertex_buffer);
- // Apply displacement
- if (config_raw.displace_strength > 0) {
- console_progress(tr("Apply Displacement"));
- krom_g4_swap_buffers();
- let uv_scale = 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_calc_normals();
- }
- }
- }
- console_log("Processing finished in " + (time_time() - timer));
- krom_ml_unload();
- console_progress(null);
- context_raw.ddirty = 2;
- app_remove_render_2d(delay_idle_sleep);
- ///if (krom_direct3d12 || krom_vulkan || krom_metal)
- render_path_raytrace_ready = false;
- ///end
- }
- ui._x += ew + 3;
- ui._y = 2 + start_y;
- ///if (krom_android || krom_ios)
- let base_res_combo: string[] = ["2K", "4K"];
- zui_combo(base_res_handle, base_res_combo, tr("Resolution"));
- ///else
- let base_res_combo: string[] = ["2K", "4K", "8K", "16K"];
- zui_combo(base_res_handle, base_res_combo, tr("Resolution"));
- ///end
- if (base_res_handle.changed) {
- base_on_layers_resized();
- }
- ui._x += ew + 3;
- ui._y = 2 + start_y;
- }
|