ui_nodes_ext.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. let ui_nodes_ext_last_vertices: buffer_view_t = null; // Before displacement
  2. function ui_nodes_ext_draw_buttons(ew: f32, start_y: f32) {
  3. let ui = ui_nodes_ui;
  4. if (zui_button(tr("Run"))) {
  5. let delay_idle_sleep = function () {
  6. krom_delay_idle_sleep();
  7. }
  8. app_notify_on_render_2d(delay_idle_sleep);
  9. console_progress(tr("Processing"));
  10. krom_g4_swap_buffers();
  11. let timer = time_time();
  12. parser_logic_parse(project_canvas);
  13. photo_to_pbr_node_cached_source = null;
  14. let texbase: image_t = logic_node_get_as_image(brush_output_node_inst.base, channel_type_t.BASE_COLOR);
  15. let texocc: image_t = logic_node_get_as_image(brush_output_node_inst.base, channel_type_t.OCCLUSION);
  16. let texrough: image_t = logic_node_get_as_image(brush_output_node_inst.base, channel_type_t.ROUGHNESS);
  17. let texnor: image_t = logic_node_get_as_image(brush_output_node_inst.base, channel_type_t.NORMAL_MAP);
  18. let texheight: image_t = logic_node_get_as_image(brush_output_node_inst.base, channel_type_t.HEIGHT);
  19. if (texbase != null) {
  20. let texpaint = map_get(render_path_render_targets, "texpaint")._image;
  21. g2_begin(texpaint);
  22. g2_draw_scaled_image(texbase, 0, 0, config_get_texture_res_x(), config_get_texture_res_y());
  23. g2_end();
  24. }
  25. if (texnor != null) {
  26. let texpaint_nor = map_get(render_path_render_targets, "texpaint_nor")._image;
  27. g2_begin(texpaint_nor);
  28. g2_draw_scaled_image(texnor, 0, 0, config_get_texture_res_x(), config_get_texture_res_y());
  29. g2_end();
  30. }
  31. if (base_pipe_copy == null) {
  32. base_make_pipe();
  33. }
  34. if (base_pipe_copy_a == null) {
  35. base_make_pipe_copy_a();
  36. }
  37. if (const_data_screen_aligned_vb == null) {
  38. const_data_create_screen_aligned_data();
  39. }
  40. let texpaint_pack = map_get(render_path_render_targets, "texpaint_pack")._image;
  41. if (texocc != null) {
  42. g2_begin(texpaint_pack);
  43. g2_set_pipeline(base_pipe_copy_r);
  44. g2_draw_scaled_image(texocc, 0, 0, config_get_texture_res_x(), config_get_texture_res_y());
  45. g2_set_pipeline(null);
  46. g2_end();
  47. }
  48. if (texrough != null) {
  49. g2_begin(texpaint_pack);
  50. g2_set_pipeline(base_pipe_copy_g);
  51. g2_draw_scaled_image(texrough, 0, 0, config_get_texture_res_x(), config_get_texture_res_y());
  52. g2_set_pipeline(null);
  53. g2_end();
  54. }
  55. if (texheight != null) {
  56. g4_begin(texpaint_pack);
  57. g4_set_pipeline(base_pipe_copy_a);
  58. g4_set_tex(base_pipe_copy_a_tex, texheight);
  59. g4_set_vertex_buffer(const_data_screen_aligned_vb);
  60. g4_set_index_buffer(const_data_screen_aligned_ib);
  61. g4_draw();
  62. g4_end();
  63. if (ui_header_worktab.position == space_type_t.SPACE3D &&
  64. brush_output_node_inst.base.inputs[channel_type_t.HEIGHT].node.get != float_node_get) {
  65. // Make copy of vertices before displacement
  66. let o = project_paint_objects[0];
  67. let g = o.data;
  68. let vertices = g4_vertex_buffer_lock(g._.vertex_buffer);
  69. if (ui_nodes_ext_last_vertices == null || buffer_view_size(ui_nodes_ext_last_vertices) != buffer_view_size(vertices)) {
  70. ui_nodes_ext_last_vertices = buffer_view_create(buffer_create(buffer_view_size(vertices)));
  71. for (let i: i32 = 0; i < math_floor(buffer_view_size(vertices) / 2); ++i) {
  72. buffer_view_set_i16(ui_nodes_ext_last_vertices, i * 2, buffer_view_get_i16(vertices, i * 2));
  73. }
  74. }
  75. else {
  76. for (let i: i32 = 0; i < math_floor(buffer_view_size(vertices) / 2); ++i) {
  77. buffer_view_set_i16(vertices, i * 2, buffer_view_get_i16(ui_nodes_ext_last_vertices, i * 2));
  78. }
  79. }
  80. g4_vertex_buffer_unlock(g._.vertex_buffer);
  81. // Apply displacement
  82. if (config_raw.displace_strength > 0) {
  83. console_progress(tr("Apply Displacement"));
  84. krom_g4_swap_buffers();
  85. let uv_scale = scene_meshes[0].data.scale_tex * context_raw.brush_scale;
  86. util_mesh_apply_displacement(texpaint_pack, 0.05 * config_raw.displace_strength, uv_scale);
  87. util_mesh_calc_normals();
  88. }
  89. }
  90. }
  91. console_log("Processing finished in " + (time_time() - timer));
  92. krom_ml_unload();
  93. console_progress(null);
  94. context_raw.ddirty = 2;
  95. app_remove_render_2d(delay_idle_sleep);
  96. ///if (krom_direct3d12 || krom_vulkan || krom_metal)
  97. render_path_raytrace_ready = false;
  98. ///end
  99. }
  100. ui._x += ew + 3;
  101. ui._y = 2 + start_y;
  102. ///if (krom_android || krom_ios)
  103. let base_res_combo: string[] = ["2K", "4K"];
  104. zui_combo(base_res_handle, base_res_combo, tr("Resolution"));
  105. ///else
  106. let base_res_combo: string[] = ["2K", "4K", "8K", "16K"];
  107. zui_combo(base_res_handle, base_res_combo, tr("Resolution"));
  108. ///end
  109. if (base_res_handle.changed) {
  110. base_on_layers_resized();
  111. }
  112. ui._x += ew + 3;
  113. ui._y = 2 + start_y;
  114. }