| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- function make_node_preview_run(data: material_t, matcon: material_context_t, node: zui_node_t, group: zui_node_canvas_t, parents: zui_node_t[]): node_shader_context_t {
- let context_id: string = "mesh";
- let props: shader_context_t = {
- name: context_id,
- depth_write: false,
- compare_mode: "always",
- cull_mode: "clockwise",
- vertex_elements: [
- {
- name: "pos",
- data: "short4norm"
- },
- {
- name: "nor",
- data: "short2norm"
- },
- {
- name: "tex",
- data: "short2norm"
- },
- {
- name: "col",
- data: "short4norm"
- }
- ],
- color_attachments: ["RGBA32"]
- };
- let con_mesh: node_shader_context_t = node_shader_context_create(data, props);
- con_mesh.allow_vcols = true;
- let vert: node_shader_t = node_shader_context_make_vert(con_mesh);
- let frag: node_shader_t = node_shader_context_make_frag(con_mesh);
- frag.ins = vert.outs;
- node_shader_write_attrib(vert, "gl_Position = vec4(pos.xy * 3.0, 0.0, 1.0);"); // Pos unpack
- node_shader_write_attrib(vert, "const vec2 madd = vec2(0.5, 0.5);");
- node_shader_add_out(vert, "vec2 texCoord");
- node_shader_write_attrib(vert, "texCoord = gl_Position.xy * madd + madd;");
- ///if (!krom_opengl)
- node_shader_write_attrib(vert, "texCoord.y = 1.0 - texCoord.y;");
- ///end
- parser_material_init();
- parser_material_canvases = [context_raw.material.canvas];
- parser_material_nodes = context_raw.material.canvas.nodes;
- parser_material_links = context_raw.material.canvas.links;
- if (group != null) {
- parser_material_push_group(group);
- parser_material_parents = parents;
- }
- let links: zui_node_link_t[] = parser_material_links;
- let link: zui_node_link_t = { id: zui_get_link_id(links), from_id: node.id, from_socket: context_raw.node_preview_socket, to_id: -1, to_socket: -1 };
- array_push(links, link);
- parser_material_con = con_mesh;
- parser_material_vert = vert;
- parser_material_frag = frag;
- parser_material_curshader = frag;
- parser_material_matcon = matcon;
- parser_material_transform_color_space = false;
- let res: string = parser_material_write_result(link);
- parser_material_transform_color_space = true;
- let st: string = node.outputs[link.from_socket].type;
- if (st != "RGB" && st != "RGBA" && st != "VECTOR") {
- res = parser_material_to_vec3(res);
- }
- array_remove(links, link);
- node_shader_add_out(frag, "vec4 fragColor");
- node_shader_write(frag, "vec3 basecol = " + res + ";");
- node_shader_write(frag, "fragColor = vec4(basecol.rgb, 1.0);");
- // frag.ndcpos = true;
- // add_out(vert, "vec4 ndc");
- // write_attrib(vert, "ndc = vec4(gl_Position.xyz * vec3(0.5, 0.5, 0.0) + vec3(0.5, 0.5, 0.0), 1.0);");
- parser_material_finalize(con_mesh);
- con_mesh.data.shader_from_source = true;
- con_mesh.data.vertex_shader = node_shader_get(vert);
- con_mesh.data.fragment_shader = node_shader_get(frag);
- return con_mesh;
- }
|