diff --git a/src/render/cpu/line.zig b/src/render/cpu/line.zig index 086f81b..8343046 100644 --- a/src/render/cpu/line.zig +++ b/src/render/cpu/line.zig @@ -114,32 +114,6 @@ fn clipLineToBuffer(ctx: *DrawContext, a: *Point2_i, b: *Point2_i, thickness: i3 return true; } -/// Точка (px, py) лежит строго внутри круга с центром (cx, cy) и радиусом в квадрате r_sq (граница не включается). -fn insideCircle(px: i32, py: i32, cx: i32, cy: i32, r_sq: i32) bool { - const dx = px - cx; - const dy = py - cy; - return dx * dx + dy * dy < r_sq; -} - -/// Заливает круг в буфере (для скруглённых концов отрезка). -fn fillCircleAtBuffer(ctx: *DrawContext, cx: i32, cy: i32, radius: i32, color: Color.PMA) void { - const bw: i32 = @intCast(ctx.buf_width); - const bh: i32 = @intCast(ctx.buf_height); - const r_sq = radius * radius; - var dy: i32 = -radius; - while (dy <= radius) : (dy += 1) { - var dx: i32 = -radius; - while (dx <= radius) : (dx += 1) { - const px = cx + dx; - const py = cy + dy; - if (!insideCircle(px, py, cx, cy, r_sq)) continue; - if (px >= 0 and px < bw and py >= 0 and py < bh) { - ctx.blendPixelAtBuffer(@intCast(px), @intCast(py), color); - } - } - } -} - fn drawLineInBuffer(ctx: *DrawContext, bx0: i32, by0: i32, bx1: i32, by1: i32, color: Color.PMA, thickness_px: u32) void { // Коррекция толщины в зависимости от угла линии. var thickness_corrected: u32 = thickness_px; @@ -193,8 +167,9 @@ fn drawLineInBuffer(ctx: *DrawContext, bx0: i32, by0: i32, bx1: i32, by1: i32, c while (thick <= half_thickness) { const x = if (use_vertical) x0 + thick else x0; const y = if (use_vertical) y0 else y0 + thick; - if (x >= 0 and y >= 0) + if (x >= 0 and y >= 0) { ctx.blendPixelAtBuffer(@intCast(x), @intCast(y), color); + } thick += 1; }