2024-03-14 15:31:22 +01:00
|
|
|
|
|
|
|
|
let make_material_default_scon: shader_context_t = null;
|
|
|
|
|
let make_material_default_mcon: material_context_t = null;
|
2024-05-03 21:29:39 +02:00
|
|
|
let make_material_height_used: bool = false;
|
2024-03-14 15:31:22 +01:00
|
|
|
|
2024-11-06 20:01:05 +01:00
|
|
|
type parse_node_preview_result_t = {
|
|
|
|
|
scon: shader_context_t;
|
|
|
|
|
mcon: material_context_t;
|
|
|
|
|
};
|
|
|
|
|
|
2024-03-14 15:31:22 +01:00
|
|
|
function make_material_parse_mesh_material() {
|
2024-08-31 17:24:01 +02:00
|
|
|
let m: material_data_t = project_material_data;
|
2024-03-14 15:31:22 +01:00
|
|
|
|
2024-03-21 21:06:41 +01:00
|
|
|
for (let i: i32 = 0; i < m._.shader.contexts.length; ++i) {
|
2024-08-31 17:24:01 +02:00
|
|
|
let c: shader_context_t = m._.shader.contexts[i];
|
2024-03-14 15:31:22 +01:00
|
|
|
if (c.name == "mesh") {
|
|
|
|
|
array_remove(m._.shader.contexts, c);
|
|
|
|
|
array_remove(m._.shader._.contexts, c);
|
|
|
|
|
make_material_delete_context(c);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-31 17:24:01 +02:00
|
|
|
let mm: material_t = {
|
|
|
|
|
name: "Material",
|
|
|
|
|
canvas: null
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let con: node_shader_context_t = make_mesh_run(mm);
|
2024-03-14 15:31:22 +01:00
|
|
|
let scon: shader_context_t = shader_context_create(con.data);
|
2024-03-20 16:13:54 +01:00
|
|
|
array_push(m._.shader.contexts, scon);
|
|
|
|
|
array_push(m._.shader._.contexts, scon);
|
2024-03-14 15:31:22 +01:00
|
|
|
|
|
|
|
|
context_raw.ddirty = 2;
|
|
|
|
|
|
2024-09-06 21:11:46 +02:00
|
|
|
///if (arm_direct3d12 || arm_vulkan)
|
2024-03-14 15:31:22 +01:00
|
|
|
render_path_raytrace_dirty = 1;
|
|
|
|
|
///end
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function make_material_parse_paint_material() {
|
2024-08-31 17:24:01 +02:00
|
|
|
let m: material_data_t = project_material_data;
|
2024-03-14 15:31:22 +01:00
|
|
|
let scon: shader_context_t = null;
|
|
|
|
|
let mcon: material_context_t = null;
|
2024-03-21 21:06:41 +01:00
|
|
|
for (let i: i32 = 0; i < m._.shader.contexts.length; ++i) {
|
2024-08-31 17:24:01 +02:00
|
|
|
let c: shader_context_t = m._.shader.contexts[i];
|
2024-03-14 15:31:22 +01:00
|
|
|
if (c.name == "paint") {
|
|
|
|
|
array_remove(m._.shader.contexts, c);
|
|
|
|
|
array_remove(m._.shader._.contexts, c);
|
2024-04-25 22:04:43 +02:00
|
|
|
if (c != make_material_default_scon) {
|
|
|
|
|
make_material_delete_context(c);
|
|
|
|
|
}
|
2024-03-14 15:31:22 +01:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-03-24 10:26:56 +01:00
|
|
|
for (let i: i32 = 0; i < m.contexts.length; ++i) {
|
2024-08-31 17:24:01 +02:00
|
|
|
let c: material_context_t = m.contexts[i];
|
2024-03-14 15:31:22 +01:00
|
|
|
if (c.name == "paint") {
|
|
|
|
|
array_remove(m.contexts, c);
|
|
|
|
|
array_remove(m._.contexts, c);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let sdata: material_t = { name: "Material", canvas: null };
|
|
|
|
|
let mcon2: material_context_t = { name: "paint", bind_textures: [] };
|
2024-08-31 17:24:01 +02:00
|
|
|
let con: node_shader_context_t = make_paint_run(sdata, mcon2);
|
2024-03-14 15:31:22 +01:00
|
|
|
|
2024-08-31 17:24:01 +02:00
|
|
|
let compile_error: bool = false;
|
2024-03-14 15:31:22 +01:00
|
|
|
let scon2: shader_context_t;
|
|
|
|
|
let _scon: shader_context_t = shader_context_create(con.data);
|
2024-03-20 16:13:54 +01:00
|
|
|
if (_scon == null) {
|
2024-08-31 17:24:01 +02:00
|
|
|
compile_error = true;
|
2024-03-20 16:13:54 +01:00
|
|
|
}
|
2024-03-14 15:31:22 +01:00
|
|
|
scon2 = _scon;
|
|
|
|
|
|
2024-08-31 17:24:01 +02:00
|
|
|
if (compile_error) {
|
2024-03-20 16:13:54 +01:00
|
|
|
return;
|
|
|
|
|
}
|
2024-08-31 17:24:01 +02:00
|
|
|
|
2024-03-14 15:31:22 +01:00
|
|
|
let mcon3: material_context_t = material_context_create(mcon2);
|
|
|
|
|
|
2024-03-20 16:13:54 +01:00
|
|
|
array_push(m._.shader.contexts, scon2);
|
|
|
|
|
array_push(m._.shader._.contexts, scon2);
|
|
|
|
|
array_push(m.contexts, mcon3);
|
|
|
|
|
array_push(m._.contexts, mcon3);
|
2024-03-14 15:31:22 +01:00
|
|
|
|
2024-03-20 16:13:54 +01:00
|
|
|
if (make_material_default_scon == null) {
|
|
|
|
|
make_material_default_scon = scon2;
|
|
|
|
|
}
|
|
|
|
|
if (make_material_default_mcon == null) {
|
|
|
|
|
make_material_default_mcon = mcon3;
|
|
|
|
|
}
|
2024-03-14 15:31:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function make_material_get_displace_strength(): f32 {
|
2024-09-08 21:53:39 +02:00
|
|
|
let sc: vec4_t = context_main_object().base.transform.scale;
|
|
|
|
|
return config_raw.displace_strength * 0.02 * sc.x;
|
2024-03-14 15:31:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function make_material_delete_context(c: shader_context_t) {
|
2025-03-11 19:49:42 +01:00
|
|
|
sys_notify_on_next_frame(function (c: shader_context_t) { // Ensure pipeline is no longer in use
|
2024-03-14 15:31:22 +01:00
|
|
|
shader_context_delete(c);
|
2024-04-02 15:45:49 +02:00
|
|
|
}, c);
|
2024-03-14 15:31:22 +01:00
|
|
|
}
|
2024-10-19 19:44:38 +02:00
|
|
|
|
|
|
|
|
function make_material_parse_brush() {
|
|
|
|
|
// parser_logic_parse(context_raw.brush.canvas);
|
|
|
|
|
}
|
2024-11-06 20:01:05 +01:00
|
|
|
|
|
|
|
|
function make_material_parse_mesh_preview_material(md: material_data_t = null) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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 {
|
2025-02-06 21:37:24 +01:00
|
|
|
return null;
|
2024-11-06 20:01:05 +01:00
|
|
|
}
|