Files
armorpaint/paint/sources/make_discard.c
T

45 lines
3.1 KiB
C
Raw Normal View History

2026-03-06 12:56:38 +01:00
void make_discard_color_id(node_shader_t *kong) {
2026-03-07 21:12:59 +01:00
node_shader_add_texture(kong, "texpaint_colorid", NULL); // 1x1 picker
2025-04-04 23:38:01 +02:00
node_shader_add_texture(kong, "texcolorid", "_texcolorid"); // color map
2025-07-13 19:06:59 +02:00
// node_shader_write_frag(kong, "var colorid_c1: float3 = texpaint_colorid[uint2(0, 0)].rgb;");
node_shader_write_frag(kong, "var colorid_c14: float4 = texpaint_colorid[uint2(uint(0), uint(0))];");
node_shader_write_frag(kong, "var colorid_c1: float3 = colorid_c14.rgb;");
node_shader_write_frag(kong, "var colorid_c2: float3 = sample_lod(texcolorid, sampler_linear, input.tex_coord_pick, 0.0).rgb;");
2025-04-02 22:52:04 +02:00
// node_shader_write_frag(kong, "if (any(colorid_c1 != colorid_c2)) { discard };");
2025-07-13 19:06:59 +02:00
node_shader_write_frag(kong, "if (colorid_c1.r != colorid_c2.r || colorid_c1.g != colorid_c2.g || colorid_c1.b != colorid_c2.b) { discard; }");
2024-03-14 15:31:22 +01:00
}
2026-03-06 12:56:38 +01:00
void make_discard_face(node_shader_t *kong) {
2026-03-07 21:12:59 +01:00
node_shader_add_texture(kong, "gbuffer2", NULL);
2025-04-04 23:38:01 +02:00
node_shader_add_texture(kong, "textrianglemap", "_textrianglemap");
node_shader_add_constant(kong, "textrianglemap_size: float2", "_texpaint_size");
node_shader_add_constant(kong, "gbuffer_size: float2", "_gbuffer_size");
2025-10-15 18:39:55 +02:00
// node_shader_write_frag(kong, "var tex_coord_inp: float2 = gbuffer2[uint2(constants.inp.x * constants.gbuffer_size.x, constants.inp.y *
// constants.gbuffer_size.y)].ba;");
node_shader_write_frag(
kong,
"var tex_coord_inp4: float4 = gbuffer2[uint2(uint(constants.inp.x * constants.gbuffer_size.x), uint(constants.inp.y * constants.gbuffer_size.y))];");
2025-07-13 19:06:59 +02:00
node_shader_write_frag(kong, "var tex_coord_inp: float2 = tex_coord_inp4.ba;");
2026-03-06 12:56:38 +01:00
node_shader_write_frag(kong, "var face_c1: float4 = textrianglemap[uint2(uint(tex_coord_inp.x * constants.textrianglemap_size.x), uint(tex_coord_inp.y * "
"constants.textrianglemap_size.y))];");
2025-07-13 19:06:59 +02:00
node_shader_write_frag(kong, "var face_c2: float4 = sample_lod(textrianglemap, sampler_linear, input.tex_coord_pick, 0.0);");
2025-04-02 22:52:04 +02:00
// node_shader_write_frag(kong, "if (any(face_c1 != face_c2)) { discard; }");
2025-07-13 19:06:59 +02:00
node_shader_write_frag(kong, "if (face_c1.x != face_c2.x || face_c1.y != face_c2.y || face_c1.z != face_c2.z || face_c1.w != face_c2.w) { discard; }");
2024-03-14 15:31:22 +01:00
}
2026-03-06 12:56:38 +01:00
void make_discard_uv_island(node_shader_t *kong) {
2025-04-04 23:38:01 +02:00
node_shader_add_texture(kong, "texuvislandmap", "_texuvislandmap");
2025-07-13 19:06:59 +02:00
node_shader_write_frag(kong, "if (sample_lod(texuvislandmap, sampler_linear, input.tex_coord_pick, 0.0).r == 0.0) { discard; }");
2024-03-14 15:31:22 +01:00
}
2026-03-06 12:56:38 +01:00
void make_discard_material_id(node_shader_t *kong) {
kong->frag_wvpposition = true;
2025-10-15 18:39:55 +02:00
node_shader_write_frag(
kong, "var picker_sample_tc: float2 = float2(input.wvpposition.x / input.wvpposition.w, input.wvpposition.y / input.wvpposition.w) * 0.5 + 0.5;");
2025-04-02 22:52:04 +02:00
node_shader_write_frag(kong, "picker_sample_tc.y = 1.0 - picker_sample_tc.y;");
2025-04-04 23:38:01 +02:00
node_shader_add_texture(kong, "texpaint_nor_undo", "_texpaint_nor_undo");
2026-03-06 12:56:38 +01:00
i32 matid = context_raw->materialid_picked / (float)255;
node_shader_write_frag(kong, string_join(string_join("if (", i32_to_string(matid)),
" != sample_lod(texpaint_nor_undo, sampler_linear, picker_sample_tc, 0.0).a) { discard; }"));
2024-03-14 15:31:22 +01:00
}