From 180b7e642ea711683a4a5239251831fc62535dbf Mon Sep 17 00:00:00 2001 From: luboslenco Date: Tue, 26 May 2026 21:53:52 +0200 Subject: [PATCH] paint: path layer fixes --- paint/sources/uniforms.c | 6 +++--- paint/sources/util_layer.c | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/paint/sources/uniforms.c b/paint/sources/uniforms.c index 064837fc..b365e2ad 100644 --- a/paint/sources/uniforms.c +++ b/paint/sources/uniforms.c @@ -176,9 +176,9 @@ f32 uniforms_ext_vec2d(f32 x) { vec4_t uniforms_ext_vec3_link(object_t *object, material_data_t *mat, char *link) { vec4_t v = vec4_nan(); if (string_equals(link, "_brush_direction")) { - // Discard first paint for directional brush - bool allow_paint = g_context->prev_paint_vec_x != g_context->last_paint_vec_x && g_context->prev_paint_vec_y != g_context->last_paint_vec_y && - g_context->prev_paint_vec_x > 0 && g_context->prev_paint_vec_y > 0; + // Discard first paint for directional brush (no prev position yet) + bool allow_paint = g_context->prev_paint_vec_x > 0 && g_context->prev_paint_vec_y > 0 && + (g_context->prev_paint_vec_x != g_context->paint_vec.x || g_context->prev_paint_vec_y != g_context->paint_vec.y); f32 x = g_context->paint_vec.x; f32 y = g_context->paint_vec.y; f32 lastx = g_context->prev_paint_vec_x; diff --git a/paint/sources/util_layer.c b/paint/sources/util_layer.c index 68dcd5d4..7ff1c999 100644 --- a/paint/sources/util_layer.c +++ b/paint/sources/util_layer.c @@ -115,6 +115,8 @@ static void path_paint_curved(f32_array_t *points, f32_array_t *points_world, f3 f32 prev_bwx = wx0; f32 prev_bwy = wy0; f32 prev_bwz = wz0; + g_context->prev_paint_vec_x = prev_px; + g_context->prev_paint_vec_y = prev_py; if (sphere_mode) { // Pre-sample bezier to build arc-length table, then paint at evenly-spaced positions f32 sbx[33]; @@ -222,6 +224,8 @@ static void path_paint_straight(f32_array_t *points, f32_array_t *points_world, f32 len = sqrtf(dx * dx + dy * dy); i32 n = dot_spacing > 0.5f ? (i32)ceilf(len / dot_spacing) : 17; n = n < 1 ? 1 : n > 64 ? 64 : n; + g_context->prev_paint_vec_x = ppx; + g_context->prev_paint_vec_y = ppy; for (i32 s = 1; s <= n; s++) { f32 t = s / (f32)n; f32 iwx = pwx + t * (cwx - pwx);