make_material.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. let make_material_default_scon: shader_context_t = null;
  2. let make_material_default_mcon: material_context_t = null;
  3. let make_material_height_used: bool = false;
  4. type parse_node_preview_result_t = {
  5. scon: shader_context_t;
  6. mcon: material_context_t;
  7. };
  8. function make_material_parse_mesh_material() {
  9. let m: material_data_t = project_material_data;
  10. for (let i: i32 = 0; i < m._.shader.contexts.length; ++i) {
  11. let c: shader_context_t = m._.shader.contexts[i];
  12. if (c.name == "mesh") {
  13. array_remove(m._.shader.contexts, c);
  14. array_remove(m._.shader._.contexts, c);
  15. make_material_delete_context(c);
  16. break;
  17. }
  18. }
  19. let mm: material_t = {
  20. name: "Material",
  21. canvas: null
  22. };
  23. let con: node_shader_context_t = make_mesh_run(mm);
  24. let scon: shader_context_t = shader_context_create(con.data);
  25. let override_context: _shader_override_t = {};
  26. // if (con.frag.shared_samplers.length > 0) {
  27. // let sampler: string = con.frag.shared_samplers[0];
  28. // override_context.shared_sampler = substring(sampler, string_last_index_of(sampler, " ") + 1, sampler.length);
  29. // }
  30. if (!context_raw.texture_filter) {
  31. override_context.filter = "point";
  32. }
  33. override_context.addressing = "repeat";
  34. scon._.override_context = override_context;
  35. array_push(m._.shader.contexts, scon);
  36. array_push(m._.shader._.contexts, scon);
  37. context_raw.ddirty = 2;
  38. ///if arm_voxels
  39. make_material_make_voxel(m);
  40. ///end
  41. ///if (arm_direct3d12 || arm_vulkan)
  42. render_path_raytrace_dirty = 1;
  43. ///end
  44. }
  45. ///if arm_voxels
  46. function make_material_make_voxel(m: material_data_t) {
  47. let rebuild: bool = true; // height_used;
  48. if (config_raw.rp_gi != false && rebuild) {
  49. let scon: shader_context_t = null;
  50. for (let i: i32 = 0; i < m._.shader._.contexts.length; ++i) {
  51. let c: shader_context_t = m._.shader._.contexts[i];
  52. if (c.name == "voxel") {
  53. scon = c;
  54. break;
  55. }
  56. }
  57. if (scon != null) make_voxel_run(scon);
  58. }
  59. }
  60. ///end
  61. function make_material_parse_paint_material() {
  62. let m: material_data_t = project_material_data;
  63. let scon: shader_context_t = null;
  64. let mcon: material_context_t = null;
  65. for (let i: i32 = 0; i < m._.shader.contexts.length; ++i) {
  66. let c: shader_context_t = m._.shader.contexts[i];
  67. if (c.name == "paint") {
  68. array_remove(m._.shader.contexts, c);
  69. array_remove(m._.shader._.contexts, c);
  70. if (c != make_material_default_scon) {
  71. make_material_delete_context(c);
  72. }
  73. break;
  74. }
  75. }
  76. for (let i: i32 = 0; i < m.contexts.length; ++i) {
  77. let c: material_context_t = m.contexts[i];
  78. if (c.name == "paint") {
  79. array_remove(m.contexts, c);
  80. array_remove(m._.contexts, c);
  81. break;
  82. }
  83. }
  84. let sdata: material_t = { name: "Material", canvas: null };
  85. let mcon2: material_context_t = { name: "paint", bind_textures: [] };
  86. let con: node_shader_context_t = make_paint_run(sdata, mcon2);
  87. let compile_error: bool = false;
  88. let scon2: shader_context_t;
  89. let _scon: shader_context_t = shader_context_create(con.data);
  90. if (_scon == null) {
  91. compile_error = true;
  92. }
  93. scon2 = _scon;
  94. if (compile_error) {
  95. return;
  96. }
  97. let override_context: _shader_override_t = {};
  98. override_context.addressing = "repeat";
  99. scon2._.override_context = override_context;
  100. let mcon3: material_context_t = material_context_create(mcon2);
  101. array_push(m._.shader.contexts, scon2);
  102. array_push(m._.shader._.contexts, scon2);
  103. array_push(m.contexts, mcon3);
  104. array_push(m._.contexts, mcon3);
  105. if (make_material_default_scon == null) {
  106. make_material_default_scon = scon2;
  107. }
  108. if (make_material_default_mcon == null) {
  109. make_material_default_mcon = mcon3;
  110. }
  111. }
  112. function make_material_get_displace_strength(): f32 {
  113. let sc: vec4_t = context_main_object().base.transform.scale;
  114. return config_raw.displace_strength * 0.02 * sc.x;
  115. }
  116. function make_material_voxelgi_half_extents(): string {
  117. let ext: i32 = context_raw.vxao_ext;
  118. return "const vec3 voxelgi_half_extents = vec3(" + ext + ", " + ext + ", " + ext + ");";
  119. }
  120. function make_material_delete_context(c: shader_context_t) {
  121. app_notify_on_next_frame(function (c: shader_context_t) { // Ensure pipeline is no longer in use
  122. shader_context_delete(c);
  123. }, c);
  124. }
  125. function make_material_parse_brush() {
  126. // parser_logic_parse(context_raw.brush.canvas);
  127. }
  128. function make_material_parse_mesh_preview_material(md: material_data_t = null) {
  129. }
  130. function make_material_parse_node_preview_material(node: ui_node_t, group: ui_node_canvas_t = null, parents: ui_node_t[] = null): parse_node_preview_result_t {
  131. return null;
  132. }
  133. function make_material_parse_particle_material() {
  134. }