Blender V4.3
bitmap_draw_2d.cc File Reference
#include <climits>
#include "MEM_guardedalloc.h"
#include "BLI_bitmap_draw_2d.h"
#include "BLI_math_base.h"
#include "BLI_sort.h"
#include "BLI_utildefines.h"
#include "BLI_strict_flags.h"

Go to the source code of this file.

Functions

Draw Line
void BLI_bitmap_draw_2d_line_v2v2i (const int p1[2], const int p2[2], bool(*callback)(int, int, void *), void *user_data)
 
Draw Filled Polygon
static int draw_poly_v2i_n__span_y_sort (const void *a_p, const void *b_p, void *verts_p)
 
void BLI_bitmap_draw_2d_poly_v2i_n (const int xmin, const int ymin, const int xmax, const int ymax, const Span< int2 > verts, void(*callback)(int x, int x_end, int y, void *), void *user_data)
 

Draw Filled Triangle

#define ORDERED_SWAP(ty, a, b)
 
#define ORDERED_SWAP_BY(ty, a, b, by)
 
#define ORDER_VARS2(ty, a, b)
 
#define ORDER_VARS3_BY(ty, a, b, c, by)
 
static float inv_slope (const int a[2], const int b[2])
 
static void draw_tri_flat_max (const int p[2], const int max_y, const float inv_slope1, const float inv_slope2, void(*callback)(int x, int x_end, int y, void *), void *user_data)
 
static void draw_tri_flat_min (const int p[2], const int min_y, const float inv_slope1, const float inv_slope2, void(*callback)(int x, int x_end, int y, void *), void *user_data)
 
void BLI_bitmap_draw_2d_tri_v2i (const int p1[2], const int p2[2], const int p3[2], void(*callback)(int x, int x_end, int y, void *), void *user_data)
 

Detailed Description

Utility functions for primitive drawing operations.

Definition in file bitmap_draw_2d.cc.

Macro Definition Documentation

◆ ORDER_VARS2

#define ORDER_VARS2 ( ty,
a,
b )
Value:
{ \
ORDERED_SWAP(ty, a, b); \
} \
((void)0)
local_group_size(16, 16) .push_constant(Type b

Definition at line 136 of file bitmap_draw_2d.cc.

Referenced by BLI_bitmap_draw_2d_tri_v2i().

◆ ORDER_VARS3_BY

#define ORDER_VARS3_BY ( ty,
a,
b,
c,
by )
Value:
{ \
ORDERED_SWAP_BY(ty, b, c, by); \
ORDERED_SWAP_BY(ty, a, c, by); \
ORDERED_SWAP_BY(ty, a, b, by); \
} \
((void)0)

Definition at line 142 of file bitmap_draw_2d.cc.

Referenced by BLI_bitmap_draw_2d_tri_v2i().

◆ ORDERED_SWAP

#define ORDERED_SWAP ( ty,
a,
b )
Value:
if (a > b) { \
SWAP(ty, a, b); \
} \
((void)0)

Fill a triangle

Standard algorithm, See: http://www.sunshine2k.de/coding/java/TriangleRasterization/TriangleRasterization.html

Changes to the basic implementation:

  • Reuse slope calculation when drawing the second triangle.
  • Don't calculate the 4th point at all for the triangle split.
  • Order line drawing from left to right (minor detail).
  • 1-pixel offsets are applied so adjacent triangles don't overlap.

This is not clipped, a clipped version can be added if needed.

Definition at line 124 of file bitmap_draw_2d.cc.

◆ ORDERED_SWAP_BY

#define ORDERED_SWAP_BY ( ty,
a,
b,
by )
Value:
if ((a by) > (b by)) { \
SWAP(ty, a, b); \
} \
((void)0)

Definition at line 130 of file bitmap_draw_2d.cc.

Function Documentation

◆ BLI_bitmap_draw_2d_line_v2v2i()

void BLI_bitmap_draw_2d_line_v2v2i ( const int p1[2],
const int p2[2],
bool(* callback )(int, int, void *),
void * user_data )

Plot a line from p1 to p2 (inclusive).

Note
For clipped line drawing, see: http://stackoverflow.com/a/40902741/432509

Definition at line 30 of file bitmap_draw_2d.cc.

References callback, and error().

Referenced by ED_view3d_depth_read_cached_seg(), and blender::ui::eyedropper_colorband_sample_segment().

◆ BLI_bitmap_draw_2d_poly_v2i_n()

void BLI_bitmap_draw_2d_poly_v2i_n ( const int xmin,
const int ymin,
const int xmax,
const int ymax,
const Span< int2 > verts,
void(* callback )(int x, int x_end, int y, void *),
void * user_data )

◆ BLI_bitmap_draw_2d_tri_v2i()

void BLI_bitmap_draw_2d_tri_v2i ( const int p1[2],
const int p2[2],
const int p3[2],
void(* callback )(int x, int x_end, int y, void *),
void * user_data )
Note
Unclipped (clipped version can be added if needed).

Definition at line 207 of file bitmap_draw_2d.cc.

References BLI_assert, callback, draw_tri_flat_max(), draw_tri_flat_min(), inv_slope(), ORDER_VARS2, and ORDER_VARS3_BY.

Referenced by BKE_icon_geom_rasterize().

◆ draw_poly_v2i_n__span_y_sort()

static int draw_poly_v2i_n__span_y_sort ( const void * a_p,
const void * b_p,
void * verts_p )
static

Definition at line 285 of file bitmap_draw_2d.cc.

References b, int, and verts.

Referenced by BLI_bitmap_draw_2d_poly_v2i_n().

◆ draw_tri_flat_max()

static void draw_tri_flat_max ( const int p[2],
const int max_y,
const float inv_slope1,
const float inv_slope2,
void(* callback )(int x, int x_end, int y, void *),
void * user_data )
static
*---*
\ /
  *

Definition at line 162 of file bitmap_draw_2d.cc.

References callback, and float.

Referenced by BLI_bitmap_draw_2d_tri_v2i().

◆ draw_tri_flat_min()

static void draw_tri_flat_min ( const int p[2],
const int min_y,
const float inv_slope1,
const float inv_slope2,
void(* callback )(int x, int x_end, int y, void *),
void * user_data )
static
  *
 / \
*---*

Definition at line 188 of file bitmap_draw_2d.cc.

References callback, and float.

Referenced by BLI_bitmap_draw_2d_tri_v2i().

◆ inv_slope()

static float inv_slope ( const int a[2],
const int b[2] )
static

Definition at line 150 of file bitmap_draw_2d.cc.

References b, and float.

Referenced by BLI_bitmap_draw_2d_tri_v2i().