Blender V5.0
GPU_matrix.hh File Reference

Go to the source code of this file.

Classes

struct  GPUMatrixUnproject_Precalc

Namespaces

namespace  blender
namespace  blender::gpu

Macros

#define _GPU_MAT3_CONST_CAST(x)
#define _GPU_MAT3_CAST(x)
#define _GPU_MAT4_CONST_CAST(x)
#define _GPU_MAT4_CAST(x)
#define GPU_matrix_mul(x)
#define GPU_matrix_set(x)
#define GPU_matrix_projection_set(x)
#define GPU_matrix_model_view_get(x)
#define GPU_matrix_projection_get(x)
#define GPU_matrix_model_view_projection_get(x)
#define GPU_matrix_normal_get(x)
#define GPU_matrix_normal_inverse_get(x)

Functions

void GPU_matrix_reset ()
void GPU_matrix_push ()
void GPU_matrix_pop ()
void GPU_matrix_identity_set ()
void GPU_matrix_scale_1f (float factor)
void GPU_matrix_set (const float m[4][4])
void GPU_matrix_mul (const float m[4][4])
void GPU_matrix_translate_3f (float x, float y, float z)
void GPU_matrix_translate_3fv (const float vec[3])
void GPU_matrix_scale_3f (float x, float y, float z)
void GPU_matrix_scale_3fv (const float vec[3])
void GPU_matrix_rotate_3f (float deg, float x, float y, float z)
void GPU_matrix_rotate_3fv (float deg, const float axis[3])
void GPU_matrix_rotate_axis (float deg, char axis)
void GPU_matrix_look_at (float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ)
void GPU_matrix_translate_2f (float x, float y)
void GPU_matrix_translate_2fv (const float vec[2])
void GPU_matrix_scale_2f (float x, float y)
void GPU_matrix_scale_2fv (const float vec[2])
void GPU_matrix_rotate_2d (float deg)
void GPU_matrix_push_projection ()
void GPU_matrix_pop_projection ()
void GPU_matrix_identity_projection_set ()
void GPU_matrix_projection_set (const float m[4][4])
void GPU_matrix_ortho_set (float left, float right, float bottom, float top, float near, float far)
void GPU_matrix_ortho_set_z (float near, float far)
void GPU_matrix_frustum_set (float left, float right, float bottom, float top, float near, float far)
void GPU_matrix_perspective_set (float fovy, float aspect, float near, float far)
bool GPU_matrix_unproject_precalc (GPUMatrixUnproject_Precalc *unproj_precalc, const float model[4][4], const float proj[4][4], const int view[4])
void GPU_matrix_project_3fv (const float world[3], const float model[4][4], const float proj[4][4], const int view[4], float r_win[3])
void GPU_matrix_project_2fv (const float world[3], const float model[4][4], const float proj[4][4], const int view[4], float r_win[2])
bool GPU_matrix_unproject_3fv (const float win[3], const float model_inverted[4][4], const float proj[4][4], const int view[4], float r_world[3])
void GPU_matrix_ortho_2d_set (float left, float right, float bottom, float top)
const float(* GPU_matrix_model_view_get (float m[4][4]))[4]
const float(* GPU_matrix_projection_get (float m[4][4]))[4]
const float(* GPU_matrix_model_view_projection_get (float m[4][4]))[4]
const float(* GPU_matrix_normal_get (float m[3][3]))[3]
const float(* GPU_matrix_normal_inverse_get (float m[3][3]))[3]
void GPU_matrix_bind (blender::gpu::Shader *shader)
bool GPU_matrix_dirty_get ()
float GPU_polygon_offset_calc (const float(*winmat)[4], float viewdist, float dist)
void GPU_polygon_offset (float viewdist, float dist)

Variables

static constexpr int GPU_MATRIX_ORTHO_CLIP_NEAR_DEFAULT = -100
static constexpr int GPU_MATRIX_ORTHO_CLIP_FAR_DEFAULT = 100

Macro Definition Documentation

◆ _GPU_MAT3_CAST

#define _GPU_MAT3_CAST ( x)
Value:
(float (*)[3])(x)
nullptr float

Definition at line 207 of file GPU_matrix.hh.

◆ _GPU_MAT3_CONST_CAST

#define _GPU_MAT3_CONST_CAST ( x)
Value:
(const float (*)[3])(x)

Definition at line 206 of file GPU_matrix.hh.

◆ _GPU_MAT4_CAST

#define _GPU_MAT4_CAST ( x)
Value:
(float (*)[4])(x)

Definition at line 209 of file GPU_matrix.hh.

◆ _GPU_MAT4_CONST_CAST

#define _GPU_MAT4_CONST_CAST ( x)
Value:
(const float (*)[4])(x)

Definition at line 208 of file GPU_matrix.hh.

◆ GPU_matrix_model_view_get

#define GPU_matrix_model_view_get ( x)

◆ GPU_matrix_model_view_projection_get

#define GPU_matrix_model_view_projection_get ( x)
Value:

Definition at line 218 of file GPU_matrix.hh.

Referenced by GPU_matrix_bind().

◆ GPU_matrix_mul

#define GPU_matrix_mul ( x)
Value:
#define GPU_matrix_mul(x)
#define _GPU_MAT4_CONST_CAST(x)

Definition at line 213 of file GPU_matrix.hh.

Referenced by arrow_draw_intern(), button2d_draw_intern(), clip_draw_grease_pencil(), clip_main_region_draw(), blender::ed::curves::curve_draw_stroke_3d(), curve_draw_stroke_3d(), dial_3d_draw_util(), draw_distortion(), draw_plane_marker_image(), draw_stabilization_border(), draw_tracking_tracks(), blender::ed::transform::drawEdgeSlide(), blender::ed::transform::drawVertSlide(), blender::ed::sculpt_paint::dyntopo::dyntopo_detail_size_edit_draw(), ed_gizmo_draw_preset_geometry(), ED_mask_draw_region(), ED_view3d_init_mats_rv3d_gl(), EDBM_preselect_edgering_draw(), EDBM_preselect_elem_draw(), gizmo_axis_draw(), gizmo_cage2d_draw_intern(), gizmo_cage3d_draw_intern(), gizmo_primitive_draw_intern(), GPU_matrix_look_at(), GPU_matrix_rotate_3fv(), GPU_matrix_scale_1f(), GPU_matrix_scale_2f(), GPU_matrix_scale_3f(), GPU_matrix_translate_2f(), GPU_matrix_translate_3f(), move3d_draw_intern(), blender::ed::sculpt_paint::brushes::multiplane_scrape_preview_draw(), blender::ed::sculpt_paint::paint_cursor_cursor_draw_3d_view_brush_cursor_active(), blender::ed::sculpt_paint::paint_cursor_draw_3d_view_brush_cursor_inactive(), blender::ed::sculpt_paint::paint_cursor_drawing_setup_cursor_space(), blender::ed::sculpt_paint::cloth::plane_falloff_preview_draw(), pygpu_matrix_multiply_matrix(), blender::ed::sculpt_paint::SCULPT_layer_brush_height_preview_draw(), blender::ed::sculpt_paint::cloth::simulation_limits_draw(), v3d_cursor_snap_draw_fn(), blender::ed::object::voxel_size_edit_draw(), wm_software_cursor_draw_bitmap(), and wm_xr_controller_model_draw().

◆ GPU_matrix_normal_get

#define GPU_matrix_normal_get ( x)
Value:
#define GPU_matrix_normal_get(x)
#define _GPU_MAT3_CAST(x)

Definition at line 220 of file GPU_matrix.hh.

Referenced by GPU_matrix_bind(), GPU_matrix_normal_inverse_get(), and pygpu_matrix_get_normal_matrix().

◆ GPU_matrix_normal_inverse_get

#define GPU_matrix_normal_inverse_get ( x)
Value:

Definition at line 221 of file GPU_matrix.hh.

◆ GPU_matrix_projection_get

◆ GPU_matrix_projection_set

◆ GPU_matrix_set

Function Documentation

◆ GPU_matrix_bind()

◆ GPU_matrix_dirty_get()

bool GPU_matrix_dirty_get ( )

Definition at line 655 of file gpu_matrix.cc.

References blender::gpu::Context::get(), blender::gpu::Context::matrix_state, and state.

Referenced by GPU_shader_bind().

◆ GPU_matrix_frustum_set()

void GPU_matrix_frustum_set ( float left,
float right,
float bottom,
float top,
float near,
float far )

◆ GPU_matrix_identity_projection_set()

◆ GPU_matrix_identity_set()

◆ GPU_matrix_look_at()

void GPU_matrix_look_at ( float eyeX,
float eyeY,
float eyeZ,
float centerX,
float centerY,
float centerZ,
float upX,
float upY,
float upZ )

Definition at line 436 of file gpu_matrix.cc.

References GPU_matrix_mul, GPU_matrix_translate_3f(), and mat4_look_from_origin().

◆ GPU_matrix_model_view_get()

const float(* GPU_matrix_model_view_get ( float m[4][4]) )[4]

Definition at line 551 of file gpu_matrix.cc.

References copy_m4_m4(), and ModelView.

◆ GPU_matrix_model_view_projection_get()

const float(* GPU_matrix_model_view_projection_get ( float m[4][4]) )[4]

Definition at line 571 of file gpu_matrix.cc.

References ModelView, mul_m4_m4m4(), and Projection.

◆ GPU_matrix_mul()

void GPU_matrix_mul ( const float m[4][4])

◆ GPU_matrix_normal_get()

const float(* GPU_matrix_normal_get ( float m[3][3]) )[3]

Definition at line 582 of file gpu_matrix.cc.

References copy_m3_m4(), GPU_matrix_model_view_get, invert_m3(), and transpose_m3().

◆ GPU_matrix_normal_inverse_get()

const float(* GPU_matrix_normal_inverse_get ( float m[3][3]) )[3]

Definition at line 597 of file gpu_matrix.cc.

References GPU_matrix_normal_get, and invert_m3().

◆ GPU_matrix_ortho_2d_set()

void GPU_matrix_ortho_2d_set ( float left,
float right,
float bottom,
float top )

Definition at line 413 of file gpu_matrix.cc.

References CHECKMAT, gpu_matrix_state_active_set_dirty(), left, mat4_ortho_set(), and top.

◆ GPU_matrix_ortho_set()

void GPU_matrix_ortho_set ( float left,
float right,
float bottom,
float top,
float near,
float far )

◆ GPU_matrix_ortho_set_z()

void GPU_matrix_ortho_set_z ( float near,
float far )

Definition at line 405 of file gpu_matrix.cc.

References CHECKMAT, gpu_matrix_state_active_set_dirty(), and Projection.

Referenced by gizmo_axis_draw(), and ui_draw_but_UNITVEC().

◆ GPU_matrix_perspective_set()

void GPU_matrix_perspective_set ( float fovy,
float aspect,
float near,
float far )

Definition at line 429 of file gpu_matrix.cc.

References GPU_matrix_frustum_set(), M_PI, and tanf.

◆ GPU_matrix_pop()

void GPU_matrix_pop ( )

Definition at line 125 of file gpu_matrix.cc.

References BLI_assert, gpu_matrix_state_active_set_dirty(), and ModelViewStack.

Referenced by arrow_draw_geom(), arrow_draw_intern(), blf_batch_draw_begin(), blf_draw_gpu__end(), button2d_draw_intern(), clip_draw_grease_pencil(), clip_main_region_draw(), cursor_point_draw(), blender::ed::curves::curve_draw_stroke_3d(), curve_draw_stroke_3d(), dial_3d_draw_util(), dial_ghostarc_draw_helpline(), blender::render::hydra::DrawTexture::draw(), blender::ed::vse::draw_channel_headers(), draw_cross(), blender::ed::vse::draw_cursor_2d(), draw_distortion(), draw_fcurve(), draw_fcurve_curve_keys(), draw_fcurve_curve_samples(), draw_marker_areas(), draw_marker_outline(), draw_marker_slide_zones(), blender::ed::space_node::draw_nodespace_back_pix(), draw_plane_marker_image(), draw_render_info(), draw_stabilization_border(), blender::ed::vse::draw_strip_in_view(), draw_tracking_tracks(), blender::ed::transform::drawEdgeSlide(), blender::ed::transform::drawLine(), blender::ed::transform::drawPropCircle(), blender::ed::transform::drawVertSlide(), drw_text_cache_draw_ex(), blender::ed::sculpt_paint::dyntopo::dyntopo_detail_size_edit_draw(), ed_gizmo_draw_preset_geometry(), ED_markers_draw(), ED_mask_draw_region(), ED_region_image_metadata_draw(), ED_region_image_render_region_draw(), ED_view3d_draw_offscreen(), EDBM_preselect_edgering_draw(), EDBM_preselect_elem_draw(), gizmo_axis_draw(), gizmo_cage2d_draw_intern(), gizmo_cage3d_draw_intern(), gizmo_primitive_draw_intern(), gizmo_ruler_draw(), GPU_viewport_stereo_composite(), blender::ed::greasepencil::image_render::image_render_end(), knifetool_draw_angle(), knifetool_draw_visible_distances(), blender::ed::sculpt_paint::min_distance_edit::min_distance_edit_draw(), move3d_draw_intern(), blender::ed::space_node::node_draw_space(), blender::ed::sculpt_paint::paint_cursor_cursor_draw_3d_view_brush_cursor_active(), blender::ed::sculpt_paint::paint_cursor_draw_3d_view_brush_cursor_inactive(), blender::ed::sculpt_paint::paint_draw_alpha_overlay(), blender::ed::sculpt_paint::paint_draw_cursor_overlay(), blender::ed::sculpt_paint::paint_draw_curve_cursor(), blender::ed::sculpt_paint::paint_draw_tex_overlay(), playanim_toscreen_ex(), pygpu_matrix_pop(), pygpu_matrix_stack_context_exit(), radial_control_paint_cursor(), radial_control_paint_tex(), region_draw_azones(), blender::ed::sculpt_paint::SCULPT_layer_brush_height_preview_draw(), blender::ed::sculpt_paint::cloth::simulation_limits_draw(), timeline_cache_draw_geometry_nodes(), timeline_cache_draw_single(), tracking_segment_knot_cb(), blender::ed::transform::transform_draw_cursor_draw(), UI_block_draw(), ui_draw_but_TRACKPREVIEW(), ui_draw_but_UNITVEC(), ui_draw_but_VECTORSCOPE(), ui_draw_but_WAVEFORM(), ui_draw_pie_center(), blender::ed::vse::update_gpu_scopes(), blender::ed::object::voxel_size_edit_draw(), wm_software_cursor_draw_bitmap(), wm_xr_controller_model_draw(), and wm_xr_raycast_destination_draw().

◆ GPU_matrix_pop_projection()

◆ GPU_matrix_project_2fv()

void GPU_matrix_project_2fv ( const float world[3],
const float model[4][4],
const float proj[4][4],
const int view[4],
float r_win[2] )

Definition at line 480 of file gpu_matrix.cc.

References mul_m4_v4(), mul_v2_fl(), mul_v4_m4v3(), v, and view.

Referenced by ED_view3d_project_v2().

◆ GPU_matrix_project_3fv()

void GPU_matrix_project_3fv ( const float world[3],
const float model[4][4],
const float proj[4][4],
const int view[4],
float r_win[3] )

Definition at line 460 of file gpu_matrix.cc.

References mul_m4_v4(), mul_v3_fl(), mul_v4_m4v3(), v, and view.

Referenced by ED_view3d_project_v3().

◆ GPU_matrix_projection_get()

const float(* GPU_matrix_projection_get ( float m[4][4]) )[4]

Definition at line 561 of file gpu_matrix.cc.

References copy_m4_m4(), and Projection.

◆ GPU_matrix_projection_set()

void GPU_matrix_projection_set ( const float m[4][4])

Definition at line 160 of file gpu_matrix.cc.

References CHECKMAT, copy_m4_m4(), gpu_matrix_state_active_set_dirty(), and Projection.

◆ GPU_matrix_push()

void GPU_matrix_push ( )

Push a new matrix unto the stack (copying the previous matrix).

Note
A function GPU_matrix_push_identity could be added instead of calling GPU_matrix_identity_set after pushing.

Definition at line 118 of file gpu_matrix.cc.

References BLI_assert, copy_m4_m4(), MATRIX_STACK_DEPTH, ModelView, and ModelViewStack.

Referenced by arrow_draw_geom(), arrow_draw_intern(), blf_batch_draw_begin(), blf_draw_gpu__start(), button2d_draw_intern(), clip_draw_grease_pencil(), clip_main_region_draw(), cursor_point_draw(), blender::ed::curves::curve_draw_stroke_3d(), curve_draw_stroke_3d(), dial_3d_draw_util(), dial_ghostarc_draw_helpline(), blender::render::hydra::DrawTexture::draw(), blender::ed::vse::draw_channel_headers(), draw_cross(), blender::ed::vse::draw_cursor_2d(), draw_distortion(), draw_fcurve(), draw_fcurve_curve_keys(), draw_fcurve_curve_samples(), draw_marker_areas(), draw_marker_outline(), draw_marker_slide_zones(), blender::ed::space_node::draw_nodespace_back_pix(), draw_plane_marker_image(), draw_render_info(), draw_stabilization_border(), blender::ed::vse::draw_strip_in_view(), draw_tracking_tracks(), blender::ed::transform::drawEdgeSlide(), blender::ed::transform::drawLine(), blender::ed::transform::drawPropCircle(), blender::ed::transform::drawVertSlide(), drw_text_cache_draw_ex(), blender::ed::sculpt_paint::dyntopo::dyntopo_detail_size_edit_draw(), ed_gizmo_draw_preset_geometry(), ED_markers_draw(), ED_mask_draw_region(), ED_region_image_metadata_draw(), ED_region_image_render_region_draw(), ED_view3d_draw_offscreen(), EDBM_preselect_edgering_draw(), EDBM_preselect_elem_draw(), gizmo_axis_draw(), gizmo_cage2d_draw_intern(), gizmo_cage3d_draw_intern(), gizmo_primitive_draw_intern(), gizmo_ruler_draw(), GPU_viewport_stereo_composite(), blender::ed::greasepencil::image_render::image_render_begin(), knifetool_draw_angle(), knifetool_draw_visible_distances(), blender::ed::sculpt_paint::min_distance_edit::min_distance_edit_draw(), move3d_draw_intern(), blender::ed::space_node::node_draw_space(), blender::ed::sculpt_paint::paint_cursor_cursor_draw_3d_view_brush_cursor_active(), blender::ed::sculpt_paint::paint_cursor_draw_3d_view_brush_cursor_inactive(), blender::ed::sculpt_paint::paint_draw_alpha_overlay(), blender::ed::sculpt_paint::paint_draw_cursor_overlay(), blender::ed::sculpt_paint::paint_draw_curve_cursor(), blender::ed::sculpt_paint::paint_draw_tex_overlay(), playanim_toscreen_ex(), pygpu_matrix_push(), pygpu_matrix_stack_context_enter(), radial_control_paint_cursor(), radial_control_paint_tex(), region_draw_azones(), blender::ed::sculpt_paint::SCULPT_layer_brush_height_preview_draw(), blender::ed::sculpt_paint::cloth::simulation_limits_draw(), timeline_cache_draw_geometry_nodes(), timeline_cache_draw_single(), tracking_segment_knot_cb(), blender::ed::transform::transform_draw_cursor_draw(), UI_block_draw(), ui_draw_but_TRACKPREVIEW(), ui_draw_but_UNITVEC(), ui_draw_but_VECTORSCOPE(), ui_draw_but_WAVEFORM(), ui_draw_pie_center(), blender::ed::vse::update_gpu_scopes(), blender::ed::object::voxel_size_edit_draw(), wm_software_cursor_draw_bitmap(), wm_xr_controller_model_draw(), and wm_xr_raycast_destination_draw().

◆ GPU_matrix_push_projection()

void GPU_matrix_push_projection ( )

◆ GPU_matrix_reset()

void GPU_matrix_reset ( )

◆ GPU_matrix_rotate_2d()

void GPU_matrix_rotate_2d ( float deg)

◆ GPU_matrix_rotate_3f()

void GPU_matrix_rotate_3f ( float deg,
float x,
float y,
float z )

Axis of rotation should be a unit vector.

Definition at line 260 of file gpu_matrix.cc.

References GPU_matrix_rotate_3fv(), x, y, and z().

Referenced by dial_ghostarc_draw_helpline(), and radial_control_paint_cursor().

◆ GPU_matrix_rotate_3fv()

void GPU_matrix_rotate_3fv ( float deg,
const float axis[3] )

Axis of rotation should be a unit vector.

Definition at line 266 of file gpu_matrix.cc.

References axis_angle_to_mat4(), DEG2RADF, and GPU_matrix_mul.

Referenced by GPU_matrix_rotate_3f().

◆ GPU_matrix_rotate_axis()

void GPU_matrix_rotate_axis ( float deg,
char axis )

◆ GPU_matrix_scale_1f()

◆ GPU_matrix_scale_2f()

◆ GPU_matrix_scale_2fv()

void GPU_matrix_scale_2fv ( const float vec[2])

Definition at line 225 of file gpu_matrix.cc.

References GPU_matrix_scale_2f().

Referenced by pygpu_matrix_scale(), and radial_control_paint_cursor().

◆ GPU_matrix_scale_3f()

void GPU_matrix_scale_3f ( float x,
float y,
float z )

Definition at line 230 of file gpu_matrix.cc.

References GPU_matrix_mul, x, y, and z().

Referenced by arrow_draw_geom(), and GPU_matrix_scale_3fv().

◆ GPU_matrix_scale_3fv()

void GPU_matrix_scale_3fv ( const float vec[3])

Definition at line 240 of file gpu_matrix.cc.

References GPU_matrix_scale_3f().

Referenced by blf_draw_gpu__start(), and pygpu_matrix_scale().

◆ GPU_matrix_set()

void GPU_matrix_set ( const float m[4][4])

Definition at line 146 of file gpu_matrix.cc.

References CHECKMAT, copy_m4_m4(), gpu_matrix_state_active_set_dirty(), and ModelView.

◆ GPU_matrix_translate_2f()

◆ GPU_matrix_translate_2fv()

◆ GPU_matrix_translate_3f()

◆ GPU_matrix_translate_3fv()

void GPU_matrix_translate_3fv ( const float vec[3])

◆ GPU_matrix_unproject_3fv()

bool GPU_matrix_unproject_3fv ( const float win[3],
const float model_inverted[4][4],
const float proj[4][4],
const int view[4],
float r_world[3] )

The same result could be obtained as follows:

float projinv[4][4];
invert_m4_m4(projinv, projview);
copy_v3_v3(r_world, in);
mul_project_m4_v3(projinv, r_world);
void mul_project_m4_v3(const float mat[4][4], float vec[3])
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
#define in

But that solution loses much precision. Therefore, get the same result without inverting the project view matrix.

Definition at line 499 of file gpu_matrix.cc.

References FLT_MAX, in, is_finite_v3(), isinf, mul_v3_m4v3(), out, view, and zero_v3().

Referenced by ED_view3d_unproject_v3(), and gizmo_find_intersected_3d_intern().

◆ GPU_matrix_unproject_precalc()

bool GPU_matrix_unproject_precalc ( GPUMatrixUnproject_Precalc * unproj_precalc,
const float model[4][4],
const float proj[4][4],
const int view[4] )

References left, top, and view.

◆ GPU_polygon_offset()

void GPU_polygon_offset ( float viewdist,
float dist )

◆ GPU_polygon_offset_calc()

float GPU_polygon_offset_calc ( const float(*) winmat[4],
float viewdist,
float dist )

Variable Documentation

◆ GPU_MATRIX_ORTHO_CLIP_FAR_DEFAULT

int GPU_MATRIX_ORTHO_CLIP_FAR_DEFAULT = 100
staticconstexpr

Definition at line 227 of file GPU_matrix.hh.

Referenced by wmGetProjectionMatrix(), and wmOrtho2().

◆ GPU_MATRIX_ORTHO_CLIP_NEAR_DEFAULT

int GPU_MATRIX_ORTHO_CLIP_NEAR_DEFAULT = -100
staticconstexpr