kong test
This commit is contained in:
@@ -38,7 +38,7 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte
|
||||
|
||||
node_shader_add_out(kong, "tex_coord: float2");
|
||||
kong.frag_wvpposition = true;
|
||||
node_shader_add_uniform(kong, "VP: float4x4", "_view_proj_matrix");
|
||||
node_shader_add_constant(kong, "VP: float4x4", "_view_proj_matrix");
|
||||
kong.vert_wposition = true;
|
||||
|
||||
let texture_count: i32 = 0;
|
||||
@@ -51,10 +51,10 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte
|
||||
node_shader_write_vert(kong, "wposition += wnormal * float3(height, height, height) * float3(" + displace_3 + ");");
|
||||
}
|
||||
|
||||
node_shader_write_vert(kong, "output.pos = VP * float4(wposition.xyz, 1.0);");
|
||||
node_shader_write_vert(kong, "output.pos = constants.VP * float4(wposition.xyz, 1.0);");
|
||||
let brush_scale: f32 = context_raw.brush_scale;
|
||||
node_shader_add_uniform(kong, "tex_scale: float", "_tex_unpack");
|
||||
node_shader_write_vert(kong, "tex_coord = tex * " + brush_scale + " * tex_scale;");
|
||||
node_shader_add_constant(kong, "tex_scale: float", "_tex_unpack");
|
||||
node_shader_write_vert(kong, "output.tex_coord = input.tex * " + brush_scale + " * constants.tex_scale;");
|
||||
|
||||
kong.frag_out = "float4[3]";
|
||||
kong.frag_n = true;
|
||||
@@ -84,20 +84,20 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte
|
||||
}
|
||||
|
||||
if (context_raw.viewport_mode == viewport_mode_t.LIT && context_raw.render_mode == render_mode_t.FORWARD) {
|
||||
node_shader_add_uniform(kong, "senvmap_brdf: tex2d", "$brdf.k");
|
||||
node_shader_add_uniform(kong, "senvmap_radiance: tex2d", "_envmap_radiance");
|
||||
node_shader_add_texture(kong, "senvmap_brdf", "$brdf.k");
|
||||
node_shader_add_texture(kong, "senvmap_radiance", "_envmap_radiance");
|
||||
}
|
||||
|
||||
node_shader_add_shared_sampler(kong, "texpaint: tex2d");
|
||||
node_shader_write_frag(kong, "texpaint_sample = sample_lod_shared(texpaint" + ", tex_coord, 0.0);");
|
||||
node_shader_add_shared_sampler(kong, "texpaint");
|
||||
node_shader_write_frag(kong, "texpaint_sample = sample_lod_shared(texpaint" + ", input.tex_coord, 0.0);");
|
||||
node_shader_write_frag(kong, "texpaint_opac = texpaint_sample.a;");
|
||||
|
||||
node_shader_write_frag(kong, "basecol = texpaint_sample.rgb * texpaint_opac;");
|
||||
node_shader_add_shared_sampler(kong, "texpaint_nor: tex2d");
|
||||
node_shader_write_frag(kong, "texpaint_nor_sample = sample_lod_shared(texpaint_nor" + ", tex_coord, 0.0);");
|
||||
node_shader_add_shared_sampler(kong, "texpaint_nor");
|
||||
node_shader_write_frag(kong, "texpaint_nor_sample = sample_lod_shared(texpaint_nor" + ", input.tex_coord, 0.0);");
|
||||
node_shader_write_frag(kong, "ntex = lerp(ntex, texpaint_nor_sample.rgb, texpaint_opac);");
|
||||
node_shader_add_shared_sampler(kong, "texpaint_pack: tex2d");
|
||||
node_shader_write_frag(kong, "texpaint_pack_sample = sample_lod_shared(texpaint_pack" + ", tex_coord, 0.0);");
|
||||
node_shader_add_shared_sampler(kong, "texpaint_pack");
|
||||
node_shader_write_frag(kong, "texpaint_pack_sample = sample_lod_shared(texpaint_pack" + ", input.tex_coord, 0.0);");
|
||||
node_shader_write_frag(kong, "occlusion = lerp(occlusion, texpaint_pack_sample.r, texpaint_opac);");
|
||||
node_shader_write_frag(kong, "roughness = lerp(roughness, texpaint_pack_sample.g, texpaint_opac);");
|
||||
node_shader_write_frag(kong, "metallic = lerp(metallic, texpaint_pack_sample.b, texpaint_opac);");
|
||||
@@ -115,7 +115,7 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte
|
||||
}
|
||||
|
||||
kong.frag_vvec = true;
|
||||
node_shader_write_frag(kong, "var TBN: float3x3 = cotangent_frame(n, vvec, tex_coord);");
|
||||
node_shader_write_frag(kong, "var TBN: float3x3 = cotangent_frame(n, vvec, input.tex_coord);");
|
||||
node_shader_write_frag(kong, "n = ntex * 2.0 - 1.0;");
|
||||
node_shader_write_frag(kong, "n.y = -n.y;");
|
||||
node_shader_write_frag(kong, "n = normalize(TBN * n);");
|
||||
@@ -136,17 +136,24 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte
|
||||
kong.frag_vvec = true;
|
||||
node_shader_write_frag(kong, "var dotnv: float = max(0.0, dot(n, vvec));");
|
||||
node_shader_write_frag(kong, "var env_brdf: float2 = senvmap_brdf[int2(float2(roughness, 1.0 - dotnv) * 256.0)].xy;");
|
||||
node_shader_add_uniform(kong, "envmap_num_mipmaps: int", "_envmap_num_mipmaps");
|
||||
node_shader_add_uniform(kong, "envmap_data: float4", "_envmap_data"); // angle, sin(angle), cos(angle), strength
|
||||
node_shader_add_constant(kong, "envmap_num_mipmaps: int", "_envmap_num_mipmaps");
|
||||
node_shader_add_constant(kong, "envmap_data: float4", "_envmap_data"); // angle, sin(angle), cos(angle), strength
|
||||
node_shader_write_frag(kong, "var wreflect: float3 = reflect(-vvec, n);");
|
||||
node_shader_write_frag(kong, "var envlod: float = roughness * float(envmap_num_mipmaps);");
|
||||
node_shader_write_frag(kong, "var envlod: float = roughness * float(constants.envmap_num_mipmaps);");
|
||||
node_shader_add_function(frag, str_envmap_equirect);
|
||||
node_shader_write_frag(kong, "var prefiltered_color: float3 = sample_lod(senvmap_radiance, envmap_equirect(wreflect, envmap_data.x), envlod).rgb;");
|
||||
node_shader_add_uniform(kong, "shirr: float4[7]", "_envmap_irradiance");
|
||||
node_shader_write_frag(kong, "var prefiltered_color: float3 = sample_lod(senvmap_radiance, envmap_equirect(wreflect, constants.envmap_data.x), envlod).rgb;");
|
||||
// node_shader_add_constant(kong, "shirr: float4[7]", "_envmap_irradiance");
|
||||
node_shader_add_constant(kong, "shirr0: float4", "_envmap_irradiance0");
|
||||
node_shader_add_constant(kong, "shirr1: float4", "_envmap_irradiance1");
|
||||
node_shader_add_constant(kong, "shirr2: float4", "_envmap_irradiance2");
|
||||
node_shader_add_constant(kong, "shirr3: float4", "_envmap_irradiance3");
|
||||
node_shader_add_constant(kong, "shirr4: float4", "_envmap_irradiance4");
|
||||
node_shader_add_constant(kong, "shirr5: float4", "_envmap_irradiance5");
|
||||
node_shader_add_constant(kong, "shirr6: float4", "_envmap_irradiance6");
|
||||
node_shader_add_function(kong, str_sh_irradiance);
|
||||
node_shader_write_frag(kong, "var indirect: float3 = albedo * (sh_irradiance(float3(n.x * envmap_data.z - n.y * envmap_data.y, n.x * envmap_data.y + n.y * envmap_data.z, n.z), shirr) / 3.14159265);");
|
||||
node_shader_write_frag(kong, "var indirect: float3 = albedo * (sh_irradiance(float3(n.x * constants.envmap_data.z - n.y * constants.envmap_data.y, n.x * constants.envmap_data.y + n.y * constants.envmap_data.z, n.z)) / 3.14159265);");
|
||||
node_shader_write_frag(kong, "indirect += prefiltered_color * (f0 * env_brdf.x + env_brdf.y) * 1.5;");
|
||||
node_shader_write_frag(kong, "indirect *= envmap_data.w * occlusion;");
|
||||
node_shader_write_frag(kong, "indirect *= constants.envmap_data.w * occlusion;");
|
||||
node_shader_write_frag(kong, "output[1].rgba = float4(indirect, 1.0);");
|
||||
}
|
||||
else { // Deferred, Pathtraced
|
||||
@@ -186,7 +193,7 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte
|
||||
// node_shader_write_frag(kong, "n.xy = n.z >= 0.0 ? n.xy : octahedron_wrap(n.xy);");
|
||||
node_shader_write_frag(kong, "if (n.z < 0.0) { n.xy = octahedron_wrap(n.xy); }");
|
||||
node_shader_write_frag(kong, "output[0].rgba = float4(n.xy, roughness, pack_f32_i16(metallic, uint(int(matid * 255.0) % 3)));");
|
||||
node_shader_write_frag(kong, "output[2].rgba = float4(0.0, 0.0, tex_coord.xy);");
|
||||
node_shader_write_frag(kong, "output[2].rgba = float4(0.0, 0.0, input.tex_coord.xy);");
|
||||
|
||||
parser_material_finalize(con_mesh);
|
||||
con_mesh.data.shader_from_source = true;
|
||||
|
||||
@@ -44,16 +44,16 @@ function make_paint_run(data: material_t, matcon: material_context_t): node_shad
|
||||
// Mangle vertices to form full screen triangle
|
||||
node_shader_write_vert(kong, "output.pos = float4(-1.0 + float((gl_VertexID & 1) << 2), -1.0 + float((gl_VertexID & 2) << 1), 0.0, 1.0);");
|
||||
|
||||
node_shader_add_uniform(kong, "gbuffer2: tex2d");
|
||||
node_shader_add_uniform(kong, "gbuffer_size: float2", "_gbuffer_size");
|
||||
node_shader_add_uniform(kong, "inp: float4", "_input_brush");
|
||||
node_shader_add_texture(kong, "gbuffer2");
|
||||
node_shader_add_constant(kong, "gbuffer_size: float2", "_gbuffer_size");
|
||||
node_shader_add_constant(kong, "inp: float4", "_input_brush");
|
||||
|
||||
node_shader_write_frag(kong, "var tex_coord_inp: float2 = gbuffer2[int2(inp.x * gbuffer_size.x, inp.y * gbuffer_size.y)].ba;");
|
||||
node_shader_write_frag(kong, "var tex_coord_inp: float2 = gbuffer2[int2(constants.inp.x * constants.gbuffer_size.x, constants.inp.y * constants.gbuffer_size.y)].ba;");
|
||||
|
||||
kong.frag_out = "float4[4]";
|
||||
node_shader_add_uniform(kong, "texpaint: tex2d");
|
||||
node_shader_add_uniform(kong, "texpaint_nor: tex2d");
|
||||
node_shader_add_uniform(kong, "texpaint_pack: tex2d");
|
||||
node_shader_add_texture(kong, "texpaint");
|
||||
node_shader_add_texture(kong, "texpaint_nor");
|
||||
node_shader_add_texture(kong, "texpaint_pack");
|
||||
node_shader_write_frag(kong, "output[0].rgba = sample_lod(texpaint, tex_coord_inp, 0.0);");
|
||||
node_shader_write_frag(kong, "output[1].rgba = sample_lod(texpaint_nor, tex_coord_inp, 0.0);");
|
||||
node_shader_write_frag(kong, "output[2].rgba = sample_lod(texpaint_pack, tex_coord_inp, 0.0);");
|
||||
@@ -67,29 +67,29 @@ function make_paint_run(data: material_t, matcon: material_context_t): node_shad
|
||||
|
||||
node_shader_write_vert(kong, "output.pos = float4(tpos, 0.0, 1.0);");
|
||||
|
||||
node_shader_add_uniform(kong, "WVP: float4x4", "_world_view_proj_matrix");
|
||||
node_shader_add_constant(kong, "WVP: float4x4", "_world_view_proj_matrix");
|
||||
|
||||
node_shader_add_out(kong, "ndc: float4");
|
||||
node_shader_write_attrib_vert(kong, "ndc = WVP * float4(pos.xyz, 1.0);");
|
||||
node_shader_write_attrib_vert(kong, "output.ndc = constants.WVP * float4(input.pos.xyz, 1.0);");
|
||||
|
||||
node_shader_write_attrib_vert(kong, "var sp: float3 = float3((ndc.xyz / ndc.w) * 0.5 + 0.5);");
|
||||
node_shader_write_attrib_vert(kong, "var sp: float3 = float3((output.ndc.xyz / output.ndc.w) * 0.5 + 0.5);");
|
||||
node_shader_write_attrib_vert(kong, "sp.y = 1.0 - sp.y;");
|
||||
node_shader_write_attrib_vert(kong, "sp.z -= 0.0001;"); // small bias
|
||||
|
||||
node_shader_add_uniform(kong, "inp: float4", "_input_brush");
|
||||
node_shader_add_uniform(kong, "inplast: float4", "_input_brush_last");
|
||||
node_shader_add_uniform(kong, "aspect_ratio: float", "_aspect_ratio_window");
|
||||
node_shader_add_constant(kong, "inp: float4", "_input_brush");
|
||||
node_shader_add_constant(kong, "inplast: float4", "_input_brush_last");
|
||||
node_shader_add_constant(kong, "aspect_ratio: float", "_aspect_ratio_window");
|
||||
node_shader_write_frag(kong, "var bsp: float2 = sp.xy * 2.0 - 1.0;");
|
||||
node_shader_write_frag(kong, "bsp.x *= aspect_ratio;");
|
||||
node_shader_write_frag(kong, "bsp.x *= constants.aspect_ratio;");
|
||||
node_shader_write_frag(kong, "bsp = bsp * 0.5 + 0.5;");
|
||||
|
||||
node_shader_add_uniform(kong, "gbufferD: tex2d");
|
||||
node_shader_add_texture(kong, "gbufferD");
|
||||
|
||||
kong.frag_out = "float4[4]";
|
||||
|
||||
node_shader_add_uniform(kong, "brush_radius: float", "_brush_radius");
|
||||
node_shader_add_uniform(kong, "brush_opacity: float", "_brush_opacity");
|
||||
node_shader_add_uniform(kong, "brush_hardness: float", "_brush_hardness");
|
||||
node_shader_add_constant(kong, "brush_radius: float", "_brush_radius");
|
||||
node_shader_add_constant(kong, "brush_opacity: float", "_brush_opacity");
|
||||
node_shader_add_constant(kong, "brush_hardness: float", "_brush_hardness");
|
||||
|
||||
if (context_raw.tool == workspace_tool_t.ERASER ||
|
||||
context_raw.tool == workspace_tool_t.CLONE ||
|
||||
@@ -98,18 +98,18 @@ function make_paint_run(data: material_t, matcon: material_context_t): node_shad
|
||||
|
||||
node_shader_write_frag(kong, "var dist: float = 0.0;");
|
||||
|
||||
node_shader_write_frag(kong, "var depth: float = sample_lod(gbufferD, inp.xy, 0.0).r;");
|
||||
node_shader_write_frag(kong, "var depth: float = sample_lod(gbufferD, constants.inp.xy, 0.0).r;");
|
||||
|
||||
node_shader_add_uniform(kong, "invVP: float4x4", "_inv_view_proj_matrix");
|
||||
node_shader_write_frag(kong, "var winp: float4 = float4(float2(inp.x, 1.0 - inp.y) * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0);");
|
||||
node_shader_write_frag(kong, "winp = invVP * winp;");
|
||||
node_shader_add_constant(kong, "invVP: float4x4", "_inv_view_proj_matrix");
|
||||
node_shader_write_frag(kong, "var winp: float4 = float4(float2(constants.inp.x, 1.0 - constants.inp.y) * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0);");
|
||||
node_shader_write_frag(kong, "winp = constants.invVP * winp;");
|
||||
node_shader_write_frag(kong, "winp.xyz /= winp.w;");
|
||||
kong.frag_wposition = true;
|
||||
|
||||
node_shader_write_frag(kong, "var depthlast: float = sample_lod(gbufferD, inplast.xy, 0.0).r;");
|
||||
node_shader_write_frag(kong, "var depthlast: float = sample_lod(gbufferD, constants.inplast.xy, 0.0).r;");
|
||||
|
||||
node_shader_write_frag(kong, "var winplast: float4 = float4(float2(inplast.x, 1.0 - inplast.y) * 2.0 - 1.0, depthlast * 2.0 - 1.0, 1.0);");
|
||||
node_shader_write_frag(kong, "winplast = invVP * winplast;");
|
||||
node_shader_write_frag(kong, "var winplast: float4 = float4(float2(constants.inplast.x, 1.0 - constants.inplast.y) * 2.0 - 1.0, depthlast * 2.0 - 1.0, 1.0);");
|
||||
node_shader_write_frag(kong, "winplast = constants.invVP * winplast;");
|
||||
node_shader_write_frag(kong, "winplast.xyz /= winplast.w;");
|
||||
|
||||
node_shader_write_frag(kong, "var pa: float3 = wposition - winp.xyz;");
|
||||
@@ -119,15 +119,15 @@ function make_paint_run(data: material_t, matcon: material_context_t): node_shad
|
||||
node_shader_write_frag(kong, "var h: float = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0);");
|
||||
node_shader_write_frag(kong, "dist = length(pa - ba * h);");
|
||||
|
||||
node_shader_write_frag(kong, "if (dist > brush_radius) { discard; }");
|
||||
node_shader_write_frag(kong, "if (dist > constants.brush_radius) { discard; }");
|
||||
}
|
||||
|
||||
if (context_raw.tool == workspace_tool_t.CLONE || context_raw.tool == workspace_tool_t.BLUR || context_raw.tool == workspace_tool_t.SMUDGE) {
|
||||
node_shader_add_uniform(kong, "gbuffer2: tex2d");
|
||||
node_shader_add_uniform(kong, "gbuffer_size: float2", "_gbuffer_size");
|
||||
node_shader_add_uniform(kong, "texpaint_undo: tex2d", "_texpaint_undo");
|
||||
node_shader_add_uniform(kong, "texpaint_nor_undo: tex2d", "_texpaint_nor_undo");
|
||||
node_shader_add_uniform(kong, "texpaint_pack_undo: tex2d", "_texpaint_pack_undo");
|
||||
node_shader_add_texture(kong, "gbuffer2");
|
||||
node_shader_add_constant(kong, "gbuffer_size: float2", "_gbuffer_size");
|
||||
node_shader_add_texture(kong, "texpaint_undo", "_texpaint_undo");
|
||||
node_shader_add_texture(kong, "texpaint_nor_undo", "_texpaint_nor_undo");
|
||||
node_shader_add_texture(kong, "texpaint_pack_undo", "_texpaint_pack_undo");
|
||||
|
||||
if (context_raw.tool == workspace_tool_t.CLONE) {
|
||||
}
|
||||
@@ -138,17 +138,17 @@ function make_paint_run(data: material_t, matcon: material_context_t): node_shad
|
||||
node_shader_write_frag(kong, "var opacity: float = 1.0;");
|
||||
node_shader_write_frag(kong, "if (opacity == 0.0) { discard; }");
|
||||
|
||||
node_shader_write_frag(kong, "var str: float = clamp((brush_radius - dist) * brush_hardness * 400.0, 0.0, 1.0) * opacity;");
|
||||
node_shader_write_frag(kong, "var str: float = clamp((constants.brush_radius - dist) * constants.brush_hardness * 400.0, 0.0, 1.0) * opacity;");
|
||||
|
||||
// Manual blending to preserve memory
|
||||
kong.frag_wvpposition = true;
|
||||
node_shader_write_frag(kong, "var sample_tc: float2 = float2(wvpposition.xy / wvpposition.w) * 0.5 + 0.5;");
|
||||
node_shader_write_frag(kong, "sample_tc.y = 1.0 - sample_tc.y;");
|
||||
node_shader_add_uniform(kong, "paintmask: tex2d");
|
||||
node_shader_add_texture(kong, "paintmask");
|
||||
node_shader_write_frag(kong, "var sample_mask: float = sample_lod(paintmask, sample_tc, 0.0).r;");
|
||||
node_shader_write_frag(kong, "str = max(str, sample_mask);");
|
||||
|
||||
node_shader_add_uniform(kong, "texpaint_undo: tex2d", "_texpaint_undo");
|
||||
node_shader_add_texture(kong, "texpaint_undo", "_texpaint_undo");
|
||||
node_shader_write_frag(kong, "var sample_undo: float4 = sample_lod(texpaint_undo, sample_tc, 0.0);");
|
||||
|
||||
if (context_raw.tool == workspace_tool_t.ERASER) {
|
||||
|
||||
Reference in New Issue
Block a user