268 lines
10 KiB
C
268 lines
10 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
* Copyright 2022 Blender Foundation. */
|
|
|
|
/** \file
|
|
* \ingroup draw
|
|
*/
|
|
|
|
#ifndef GPU_SHADER
|
|
# include "GPU_shader_shared_utils.h"
|
|
|
|
typedef struct GlobalsUboStorage GlobalsUboStorage;
|
|
#endif
|
|
|
|
/* Future Plan: These globals were once shared between multiple overlay engines. But now that they
|
|
* have been merged into one engine, there is no reasons to keep these globals out of the overlay
|
|
* engine. */
|
|
|
|
#define UBO_FIRST_COLOR color_wire
|
|
#define UBO_LAST_COLOR color_uv_shadow
|
|
|
|
/* Used as ubo but colors can be directly referenced as well */
|
|
/* \note Also keep all color as vec4 and between #UBO_FIRST_COLOR and #UBO_LAST_COLOR. */
|
|
struct GlobalsUboStorage {
|
|
/* UBOs data needs to be 16 byte aligned (size of vec4) */
|
|
float4 color_wire;
|
|
float4 color_wire_edit;
|
|
float4 color_active;
|
|
float4 color_select;
|
|
float4 color_library_select;
|
|
float4 color_library;
|
|
float4 color_transform;
|
|
float4 color_light;
|
|
float4 color_speaker;
|
|
float4 color_camera;
|
|
float4 color_camera_path;
|
|
float4 color_empty;
|
|
float4 color_vertex;
|
|
float4 color_vertex_select;
|
|
float4 color_vertex_unreferenced;
|
|
float4 color_vertex_missing_data;
|
|
float4 color_edit_mesh_active;
|
|
float4 color_edge_select;
|
|
float4 color_edge_seam;
|
|
float4 color_edge_sharp;
|
|
float4 color_edge_crease;
|
|
float4 color_edge_bweight;
|
|
float4 color_edge_face_select;
|
|
float4 color_edge_freestyle;
|
|
float4 color_face;
|
|
float4 color_face_select;
|
|
float4 color_face_freestyle;
|
|
float4 color_gpencil_vertex;
|
|
float4 color_gpencil_vertex_select;
|
|
float4 color_normal;
|
|
float4 color_vnormal;
|
|
float4 color_lnormal;
|
|
float4 color_facedot;
|
|
float4 color_skinroot;
|
|
|
|
float4 color_deselect;
|
|
float4 color_outline;
|
|
float4 color_light_no_alpha;
|
|
|
|
float4 color_background;
|
|
float4 color_background_gradient;
|
|
float4 color_checker_primary;
|
|
float4 color_checker_secondary;
|
|
float4 color_clipping_border;
|
|
float4 color_edit_mesh_middle;
|
|
|
|
float4 color_handle_free;
|
|
float4 color_handle_auto;
|
|
float4 color_handle_vect;
|
|
float4 color_handle_align;
|
|
float4 color_handle_autoclamp;
|
|
float4 color_handle_sel_free;
|
|
float4 color_handle_sel_auto;
|
|
float4 color_handle_sel_vect;
|
|
float4 color_handle_sel_align;
|
|
float4 color_handle_sel_autoclamp;
|
|
float4 color_nurb_uline;
|
|
float4 color_nurb_vline;
|
|
float4 color_nurb_sel_uline;
|
|
float4 color_nurb_sel_vline;
|
|
float4 color_active_spline;
|
|
|
|
float4 color_bone_pose;
|
|
float4 color_bone_pose_active;
|
|
float4 color_bone_pose_active_unsel;
|
|
float4 color_bone_pose_constraint;
|
|
float4 color_bone_pose_ik;
|
|
float4 color_bone_pose_spline_ik;
|
|
float4 color_bone_pose_target;
|
|
float4 color_bone_solid;
|
|
float4 color_bone_locked;
|
|
float4 color_bone_active;
|
|
float4 color_bone_active_unsel;
|
|
float4 color_bone_select;
|
|
float4 color_bone_ik_line;
|
|
float4 color_bone_ik_line_no_target;
|
|
float4 color_bone_ik_line_spline;
|
|
|
|
float4 color_text;
|
|
float4 color_text_hi;
|
|
|
|
float4 color_bundle_solid;
|
|
|
|
float4 color_mball_radius;
|
|
float4 color_mball_radius_select;
|
|
float4 color_mball_stiffness;
|
|
float4 color_mball_stiffness_select;
|
|
|
|
float4 color_current_frame;
|
|
|
|
float4 color_grid;
|
|
float4 color_grid_emphasis;
|
|
float4 color_grid_axis_x;
|
|
float4 color_grid_axis_y;
|
|
float4 color_grid_axis_z;
|
|
|
|
float4 color_face_back;
|
|
float4 color_face_front;
|
|
|
|
float4 color_uv_shadow;
|
|
|
|
/* NOTE: Put all color before #UBO_LAST_COLOR. */
|
|
float4 size_viewport; /* Packed as vec4. */
|
|
|
|
/* Pack individual float at the end of the buffer to avoid alignment errors */
|
|
float size_pixel, pixel_fac;
|
|
float size_object_center, size_light_center, size_light_circle, size_light_circle_shadow;
|
|
float size_vertex, size_edge, size_edge_fix, size_face_dot;
|
|
float size_checker;
|
|
float size_vertex_gpencil;
|
|
};
|
|
BLI_STATIC_ASSERT_ALIGN(GlobalsUboStorage, 16)
|
|
|
|
#ifdef GPU_SHADER
|
|
/* Keep compatibility_with old global scope syntax. */
|
|
/* TODO(@fclem) Mass rename and remove the camel case. */
|
|
# define colorWire globalsBlock.color_wire
|
|
# define colorWireEdit globalsBlock.color_wire_edit
|
|
# define colorActive globalsBlock.color_active
|
|
# define colorSelect globalsBlock.color_select
|
|
# define colorLibrarySelect globalsBlock.color_library_select
|
|
# define colorLibrary globalsBlock.color_library
|
|
# define colorTransform globalsBlock.color_transform
|
|
# define colorLight globalsBlock.color_light
|
|
# define colorSpeaker globalsBlock.color_speaker
|
|
# define colorCamera globalsBlock.color_camera
|
|
# define colorCameraPath globalsBlock.color_camera_path
|
|
# define colorEmpty globalsBlock.color_empty
|
|
# define colorVertex globalsBlock.color_vertex
|
|
# define colorVertexSelect globalsBlock.color_vertex_select
|
|
# define colorVertexUnreferenced globalsBlock.color_vertex_unreferenced
|
|
# define colorVertexMissingData globalsBlock.color_vertex_missing_data
|
|
# define colorEditMeshActive globalsBlock.color_edit_mesh_active
|
|
# define colorEdgeSelect globalsBlock.color_edge_select
|
|
# define colorEdgeSeam globalsBlock.color_edge_seam
|
|
# define colorEdgeSharp globalsBlock.color_edge_sharp
|
|
# define colorEdgeCrease globalsBlock.color_edge_crease
|
|
# define colorEdgeBWeight globalsBlock.color_edge_bweight
|
|
# define colorEdgeFaceSelect globalsBlock.color_edge_face_select
|
|
# define colorEdgeFreestyle globalsBlock.color_edge_freestyle
|
|
# define colorFace globalsBlock.color_face
|
|
# define colorFaceSelect globalsBlock.color_face_select
|
|
# define colorFaceFreestyle globalsBlock.color_face_freestyle
|
|
# define colorGpencilVertex globalsBlock.color_gpencil_vertex
|
|
# define colorGpencilVertexSelect globalsBlock.color_gpencil_vertex_select
|
|
# define colorNormal globalsBlock.color_normal
|
|
# define colorVNormal globalsBlock.color_vnormal
|
|
# define colorLNormal globalsBlock.color_lnormal
|
|
# define colorFaceDot globalsBlock.color_facedot
|
|
# define colorSkinRoot globalsBlock.color_skinroot
|
|
# define colorDeselect globalsBlock.color_deselect
|
|
# define colorOutline globalsBlock.color_outline
|
|
# define colorLightNoAlpha globalsBlock.color_light_no_alpha
|
|
# define colorBackground globalsBlock.color_background
|
|
# define colorBackgroundGradient globalsBlock.color_background_gradient
|
|
# define colorCheckerPrimary globalsBlock.color_checker_primary
|
|
# define colorCheckerSecondary globalsBlock.color_checker_secondary
|
|
# define colorClippingBorder globalsBlock.color_clipping_border
|
|
# define colorEditMeshMiddle globalsBlock.color_edit_mesh_middle
|
|
# define colorHandleFree globalsBlock.color_handle_free
|
|
# define colorHandleAuto globalsBlock.color_handle_auto
|
|
# define colorHandleVect globalsBlock.color_handle_vect
|
|
# define colorHandleAlign globalsBlock.color_handle_align
|
|
# define colorHandleAutoclamp globalsBlock.color_handle_autoclamp
|
|
# define colorHandleSelFree globalsBlock.color_handle_sel_free
|
|
# define colorHandleSelAuto globalsBlock.color_handle_sel_auto
|
|
# define colorHandleSelVect globalsBlock.color_handle_sel_vect
|
|
# define colorHandleSelAlign globalsBlock.color_handle_sel_align
|
|
# define colorHandleSelAutoclamp globalsBlock.color_handle_sel_autoclamp
|
|
# define colorNurbUline globalsBlock.color_nurb_uline
|
|
# define colorNurbVline globalsBlock.color_nurb_vline
|
|
# define colorNurbSelUline globalsBlock.color_nurb_sel_uline
|
|
# define colorNurbSelVline globalsBlock.color_nurb_sel_vline
|
|
# define colorActiveSpline globalsBlock.color_active_spline
|
|
# define colorBonePose globalsBlock.color_bone_pose
|
|
# define colorBonePoseActive globalsBlock.color_bone_pose_active
|
|
# define colorBonePoseActiveUnsel globalsBlock.color_bone_pose_active_unsel
|
|
# define colorBonePoseConstraint globalsBlock.color_bone_pose_constraint
|
|
# define colorBonePoseIK globalsBlock.color_bone_pose_ik
|
|
# define colorBonePoseSplineIK globalsBlock.color_bone_pose_spline_ik
|
|
# define colorBonePoseTarget globalsBlock.color_bone_pose_target
|
|
# define colorBoneSolid globalsBlock.color_bone_solid
|
|
# define colorBoneLocked globalsBlock.color_bone_locked
|
|
# define colorBoneActive globalsBlock.color_bone_active
|
|
# define colorBoneActiveUnsel globalsBlock.color_bone_active_unsel
|
|
# define colorBoneSelect globalsBlock.color_bone_select
|
|
# define colorBoneIKLine globalsBlock.color_bone_ik_line
|
|
# define colorBoneIKLineNoTarget globalsBlock.color_bone_ik_line_no_target
|
|
# define colorBoneIKLineSpline globalsBlock.color_bone_ik_line_spline
|
|
# define colorText globalsBlock.color_text
|
|
# define colorTextHi globalsBlock.color_text_hi
|
|
# define colorBundleSolid globalsBlock.color_bundle_solid
|
|
# define colorMballRadius globalsBlock.color_mball_radius
|
|
# define colorMballRadiusSelect globalsBlock.color_mball_radius_select
|
|
# define colorMballStiffness globalsBlock.color_mball_stiffness
|
|
# define colorMballStiffnessSelect globalsBlock.color_mball_stiffness_select
|
|
# define colorCurrentFrame globalsBlock.color_current_frame
|
|
# define colorGrid globalsBlock.color_grid
|
|
# define colorGridEmphasis globalsBlock.color_grid_emphasis
|
|
# define colorGridAxisX globalsBlock.color_grid_axis_x
|
|
# define colorGridAxisY globalsBlock.color_grid_axis_y
|
|
# define colorGridAxisZ globalsBlock.color_grid_axis_z
|
|
# define colorFaceBack globalsBlock.color_face_back
|
|
# define colorFaceFront globalsBlock.color_face_front
|
|
# define colorUVShadow globalsBlock.color_uv_shadow
|
|
# define sizeViewport globalsBlock.size_viewport.xy
|
|
# define sizeViewportInv globalsBlock.size_viewport.zw
|
|
# define sizePixel globalsBlock.size_pixel
|
|
# define pixelFac globalsBlock.pixel_fac
|
|
# define sizeObjectCenter globalsBlock.size_object_center
|
|
# define sizeLightCenter globalsBlock.size_light_center
|
|
# define sizeLightCircle globalsBlock.size_light_circle
|
|
# define sizeLightCircleShadow globalsBlock.size_light_circle_shadow
|
|
# define sizeVertex globalsBlock.size_vertex
|
|
# define sizeEdge globalsBlock.size_edge
|
|
# define sizeEdgeFix globalsBlock.size_edge_fix
|
|
# define sizeFaceDot globalsBlock.size_face_dot
|
|
# define sizeChecker globalsBlock.size_checker
|
|
# define sizeVertexGpencil globalsBlock.size_vertex_gpencil
|
|
#endif
|
|
|
|
/* See: 'draw_cache_impl.h' for matching includes. */
|
|
#define VERT_GPENCIL_BEZT_HANDLE (1 << 30)
|
|
/* data[0] (1st byte flags) */
|
|
#define FACE_ACTIVE (1 << 0)
|
|
#define FACE_SELECTED (1 << 1)
|
|
#define FACE_FREESTYLE (1 << 2)
|
|
#define VERT_UV_SELECT (1 << 3)
|
|
#define VERT_UV_PINNED (1 << 4)
|
|
#define EDGE_UV_SELECT (1 << 5)
|
|
#define FACE_UV_ACTIVE (1 << 6)
|
|
#define FACE_UV_SELECT (1 << 7)
|
|
/* data[1] (2st byte flags) */
|
|
#define VERT_ACTIVE (1 << 0)
|
|
#define VERT_SELECTED (1 << 1)
|
|
#define VERT_SELECTED_BEZT_HANDLE (1 << 2)
|
|
#define EDGE_ACTIVE (1 << 3)
|
|
#define EDGE_SELECTED (1 << 4)
|
|
#define EDGE_SEAM (1 << 5)
|
|
#define EDGE_SHARP (1 << 6)
|
|
#define EDGE_FREESTYLE (1 << 7)
|
|
|
|
#define COMMON_GLOBALS_LIB
|