Additional mat3 constructors added, global variable namespace collisions for uniform and object color avoided via re-name. Metal vertex format compatibility added for shaders wherein vertex data goes through a double-conversion and cannot be implicitly converted during Metal vertex assembly e.g. bitmasks passed directly as unsigned type in shader interface for certain shader interfaces. Authored by Apple: Michael Parkin-White Ref T96261 Reviewed By: fclem Differential Revision: https://developer.blender.org/D16433
92 lines
2.5 KiB
C++
92 lines
2.5 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#ifndef GPU_SHADER
|
|
# include "GPU_shader_shared_utils.h"
|
|
|
|
# include "DNA_action_types.h"
|
|
# include "DNA_view3d_types.h"
|
|
|
|
# ifdef __cplusplus
|
|
extern "C" {
|
|
# else
|
|
typedef enum OVERLAY_GridBits OVERLAY_GridBits;
|
|
# endif
|
|
typedef struct OVERLAY_GridData OVERLAY_GridData;
|
|
#endif
|
|
|
|
/* TODO(fclem): Should eventually become OVERLAY_BackgroundType.
|
|
* But there is no uint push constant functions at the moment. */
|
|
#define BG_SOLID 0
|
|
#define BG_GRADIENT 1
|
|
#define BG_CHECKER 2
|
|
#define BG_RADIAL 3
|
|
#define BG_SOLID_CHECKER 4
|
|
#define BG_MASK 5
|
|
|
|
enum OVERLAY_GridBits {
|
|
SHOW_AXIS_X = (1u << 0u),
|
|
SHOW_AXIS_Y = (1u << 1u),
|
|
SHOW_AXIS_Z = (1u << 2u),
|
|
SHOW_GRID = (1u << 3u),
|
|
PLANE_XY = (1u << 4u),
|
|
PLANE_XZ = (1u << 5u),
|
|
PLANE_YZ = (1u << 6u),
|
|
CLIP_ZPOS = (1u << 7u),
|
|
CLIP_ZNEG = (1u << 8u),
|
|
GRID_BACK = (1u << 9u),
|
|
GRID_CAMERA = (1u << 10u),
|
|
PLANE_IMAGE = (1u << 11u),
|
|
CUSTOM_GRID = (1u << 12u),
|
|
};
|
|
#ifndef GPU_SHADER
|
|
ENUM_OPERATORS(OVERLAY_GridBits, CUSTOM_GRID)
|
|
#endif
|
|
|
|
/* Match: #SI_GRID_STEPS_LEN */
|
|
#define OVERLAY_GRID_STEPS_LEN 8
|
|
|
|
struct OVERLAY_GridData {
|
|
float4 steps[OVERLAY_GRID_STEPS_LEN]; /* float arrays are padded to float4 in std130. */
|
|
float4 size; /* float3 padded to float4. */
|
|
float distance;
|
|
float line_size;
|
|
float zoom_factor; /* Only for UV editor */
|
|
float _pad0;
|
|
};
|
|
BLI_STATIC_ASSERT_ALIGN(OVERLAY_GridData, 16)
|
|
|
|
#ifdef GPU_SHADER
|
|
/* Keep the same values as in `draw_cache_imp_curve.c` */
|
|
# define ACTIVE_NURB (1u << 2)
|
|
# define BEZIER_HANDLE (1u << 3)
|
|
# define EVEN_U_BIT (1u << 4)
|
|
# define COLOR_SHIFT 5u
|
|
|
|
/* Keep the same value in `handle_display` in `DNA_view3d_types.h` */
|
|
# define CURVE_HANDLE_SELECTED 0u
|
|
# define CURVE_HANDLE_ALL 1u
|
|
|
|
# define GP_EDIT_POINT_SELECTED 1u /* 1 << 0 */
|
|
# define GP_EDIT_STROKE_SELECTED 2u /* 1 << 1 */
|
|
# define GP_EDIT_MULTIFRAME 4u /* 1 << 2 */
|
|
# define GP_EDIT_STROKE_START 8u /* 1 << 3 */
|
|
# define GP_EDIT_STROKE_END 16u /* 1 << 4 */
|
|
# define GP_EDIT_POINT_DIMMED 32u /* 1 << 5 */
|
|
|
|
# define MOTIONPATH_VERT_SEL (1u << 0)
|
|
# define MOTIONPATH_VERT_KEY (1u << 1)
|
|
|
|
#else
|
|
/* TODO(fclem): Find a better way to share enums/defines from DNA files with GLSL. */
|
|
BLI_STATIC_ASSERT(CURVE_HANDLE_SELECTED == 0u, "Ensure value is sync");
|
|
BLI_STATIC_ASSERT(CURVE_HANDLE_ALL == 1u, "Ensure value is sync");
|
|
BLI_STATIC_ASSERT(MOTIONPATH_VERT_SEL == (1u << 0), "Ensure value is sync");
|
|
BLI_STATIC_ASSERT(MOTIONPATH_VERT_KEY == (1u << 1), "Ensure value is sync");
|
|
#endif
|
|
|
|
#ifndef GPU_SHADER
|
|
# ifdef __cplusplus
|
|
}
|
|
# endif
|
|
#endif
|