tornavis/source/blender/draw/intern/draw_common_shader_shared.h

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