diff options
Diffstat (limited to 'source/blender/gpu/GPU_immediate_util.h')
-rw-r--r-- | source/blender/gpu/GPU_immediate_util.h | 83 |
1 files changed, 80 insertions, 3 deletions
diff --git a/source/blender/gpu/GPU_immediate_util.h b/source/blender/gpu/GPU_immediate_util.h index 047c3d3da00..25672489612 100644 --- a/source/blender/gpu/GPU_immediate_util.h +++ b/source/blender/gpu/GPU_immediate_util.h @@ -31,16 +31,50 @@ extern "C" { void immRectf(uint pos, float x1, float y1, float x2, float y2); void immRecti(uint pos, int x1, int y1, int x2, int y2); -/* Same as immRectf/immRecti but does not call immBegin/immEnd. To use with GPU_PRIM_TRIS. */ +/** + * Same as #immRectf / #immRecti but does not call #immBegin / #immEnd. + * To use with #GPU_PRIM_TRIS. + */ void immRectf_fast(uint pos, float x1, float y1, float x2, float y2); void immRectf_fast_with_color( uint pos, uint col, float x1, float y1, float x2, float y2, const float color[4]); void immRecti_fast_with_color( uint pos, uint col, int x1, int y1, int x2, int y2, const float color[4]); +/** + * Pack color into 3 bytes + * + * This define converts a numerical value to the equivalent 24-bit + * color, while not being endian-sensitive. On little-endian, this + * is the same as doing a 'naive' indexing, on big-endian, it is not! + * + * \note BGR format (i.e. 0xBBGGRR)... + * + * \param x: color. + */ void imm_cpack(uint x); +/** + * Draw a circle outline with the given \a radius. + * The circle is centered at \a x, \a y and drawn in the XY plane. + * + * \param shdr_pos: The vertex attribute number for position. + * \param x: Horizontal center. + * \param y: Vertical center. + * \param rad: The circle's radius. + * \param nsegments: The number of segments to use in drawing (more = smoother). + */ void imm_draw_circle_wire_2d(uint shdr_pos, float x, float y, float radius, int nsegments); +/** + * Draw a filled circle with the given \a radius. + * The circle is centered at \a x, \a y and drawn in the XY plane. + * + * \param shdr_pos: The vertex attribute number for position. + * \param x: Horizontal center. + * \param y: Vertical center. + * \param rad: The circle's radius. + * \param nsegments: The number of segments to use in drawing (more = smoother). + */ void imm_draw_circle_fill_2d(uint shdr_pos, float x, float y, float radius, int nsegments); void imm_draw_circle_wire_aspect_2d( @@ -48,15 +82,34 @@ void imm_draw_circle_wire_aspect_2d( void imm_draw_circle_fill_aspect_2d( uint shdr_pos, float x, float y, float rad_x, float rad_y, int nsegments); -/* use this version when GPUVertFormat has a vec3 position */ +/** + * Use this version when #GPUVertFormat has a vec3 position. + */ void imm_draw_circle_wire_3d(uint pos, float x, float y, float radius, int nsegments); void imm_draw_circle_dashed_3d(uint pos, float x, float y, float radius, int nsegments); void imm_draw_circle_fill_3d(uint pos, float x, float y, float radius, int nsegments); -/* same as 'imm_draw_disk_partial_fill_2d', except it draws a wire arc. */ +/** + * Same as 'imm_draw_disk_partial_fill_2d', except it draws a wire arc. + */ void imm_draw_circle_partial_wire_2d( uint pos, float x, float y, float radius, int nsegments, float start, float sweep); +/** + * Draw a filled arc with the given inner and outer radius. + * The circle is centered at \a x, \a y and drawn in the XY plane. + * + * \note Arguments are `gluPartialDisk` compatible. + * + * \param pos: The vertex attribute number for position. + * \param x: Horizontal center. + * \param y: Vertical center. + * \param rad_inner: The inner circle's radius. + * \param rad_outer: The outer circle's radius (can be zero). + * \param nsegments: The number of segments to use in drawing (more = smoother). + * \param start: Specifies the starting angle, in degrees, of the disk portion. + * \param sweep: Specifies the sweep angle, in degrees, of the disk portion. + */ void imm_draw_disk_partial_fill_2d(uint pos, float x, float y, @@ -66,9 +119,21 @@ void imm_draw_disk_partial_fill_2d(uint pos, float start, float sweep); +/** + * Draw a lined box. + * + * \param pos: The vertex attribute number for position. + * \param x1: left. + * \param y1: bottom. + * \param x2: right. + * \param y2: top. + */ void imm_draw_box_wire_2d(uint pos, float x1, float y1, float x2, float y2); void imm_draw_box_wire_3d(uint pos, float x1, float y1, float x2, float y2); +/** + * Draw a standard checkerboard to indicate transparent backgrounds. + */ void imm_draw_box_checker_2d_ex(float x1, float y1, float x2, @@ -85,6 +150,18 @@ void imm_draw_cube_corners_3d(uint pos, const float aspect[3], const float factor); +/** + * Draw a cylinder. Replacement for #gluCylinder. + * \warning Slow, better use it only if you no other choices. + * + * \param pos: The vertex attribute number for position. + * \param nor: The vertex attribute number for normal. + * \param base: Specifies the radius of the cylinder at z = 0. + * \param top: Specifies the radius of the cylinder at z = height. + * \param height: Specifies the height of the cylinder. + * \param slices: Specifies the number of subdivisions around the z axis. + * \param stacks: Specifies the number of subdivisions along the z axis. + */ void imm_draw_cylinder_fill_normal_3d( uint pos, uint nor, float base, float top, float height, int slices, int stacks); void imm_draw_cylinder_wire_3d( |