Overlay: Use global viewport size instead of DRWView one

This is part of the effor to simplify the View struct in order to implement
multiview rendering.
This commit is contained in:
Clément Foucault
2022-10-07 11:01:55 +02:00
parent 126d485b83
commit 70b35c7ad0
27 changed files with 43 additions and 193 deletions

View File

@@ -490,7 +490,6 @@ set(GLSL_SRC
intern/shaders/common_debug_shape_lib.glsl
intern/shaders/common_fullscreen_vert.glsl
intern/shaders/common_fxaa_lib.glsl
intern/shaders/common_globals_lib.glsl
intern/shaders/common_gpencil_lib.glsl
intern/shaders/common_hair_lib.glsl
intern/shaders/common_hair_refine_comp.glsl

View File

@@ -122,21 +122,25 @@ void OVERLAY_outline_cache_init(OVERLAY_Data *vedata)
pd->outlines_grp = grp = DRW_shgroup_create(sh_geom, psl->outlines_prepass_ps);
DRW_shgroup_uniform_bool_copy(grp, "isTransform", (G.moving & G_TRANSFORM_OBJ) != 0);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
GPUShader *sh_geom_ptcloud = OVERLAY_shader_outline_prepass_pointcloud();
pd->outlines_ptcloud_grp = grp = DRW_shgroup_create(sh_geom_ptcloud, psl->outlines_prepass_ps);
DRW_shgroup_uniform_bool_copy(grp, "isTransform", (G.moving & G_TRANSFORM_OBJ) != 0);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
GPUShader *sh_gpencil = OVERLAY_shader_outline_prepass_gpencil();
pd->outlines_gpencil_grp = grp = DRW_shgroup_create(sh_gpencil, psl->outlines_prepass_ps);
DRW_shgroup_uniform_bool_copy(grp, "isTransform", (G.moving & G_TRANSFORM_OBJ) != 0);
DRW_shgroup_uniform_float_copy(grp, "gpStrokeIndexOffset", 0.0);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
GPUShader *sh_curves = OVERLAY_shader_outline_prepass_curves();
pd->outlines_curves_grp = grp = DRW_shgroup_create(sh_curves, psl->outlines_prepass_ps);
DRW_shgroup_uniform_bool_copy(grp, "isTransform", (G.moving & G_TRANSFORM_OBJ) != 0);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
}
/* outlines_prepass_ps is still needed for selection of probes. */

View File

@@ -14,7 +14,7 @@ GPU_SHADER_CREATE_INFO(overlay_outline_prepass)
/* Using uint because 16bit uint can contain more ids than int. */
.fragment_out(0, Type::UINT, "out_object_id")
.fragment_source("overlay_outline_prepass_frag.glsl")
.additional_info("draw_resource_handle");
.additional_info("draw_resource_handle", "draw_globals");
GPU_SHADER_CREATE_INFO(overlay_outline_prepass_mesh)
.do_static_compilation(true)
@@ -72,7 +72,7 @@ GPU_SHADER_CREATE_INFO(overlay_outline_prepass_gpencil)
/* Using uint because 16bit uint can contain more ids than int. */
.fragment_out(0, Type::UINT, "out_object_id")
.fragment_source("overlay_outline_prepass_gpencil_frag.glsl")
.additional_info("draw_gpencil", "draw_resource_handle");
.additional_info("draw_gpencil", "draw_resource_handle", "draw_globals");
GPU_SHADER_CREATE_INFO(overlay_outline_prepass_gpencil_clipped)
.do_static_compilation(true)

View File

@@ -137,7 +137,7 @@ void main()
vec2 ofs_dir = compute_dir(ss0, ss1, ss2);
/* Offset away from the center to avoid overlap with solid shape. */
gl_Position.xy += ofs_dir * drw_view.viewport_size_inverse * gl_Position.w;
gl_Position.xy += ofs_dir * sizeViewportInv * gl_Position.w;
edgeStart = edgePos = proj(gl_Position);

View File

@@ -56,7 +56,7 @@ void main(void)
gl_Position = geom_in[1].pPos;
/* Offset away from the center to avoid overlap with solid shape. */
gl_Position.xy += (edge_dir - perp) * drw_view.viewport_size_inverse * gl_Position.w;
gl_Position.xy += (edge_dir - perp) * sizeViewportInv * gl_Position.w;
/* Improve AA bleeding inside bone silhouette. */
gl_Position.z -= (is_persp) ? 1e-4 : 1e-6;
edgeStart = edgePos = ((gl_Position.xy / gl_Position.w) * 0.5 + 0.5) * sizeViewport;
@@ -65,7 +65,7 @@ void main(void)
gl_Position = geom_in[2].pPos;
/* Offset away from the center to avoid overlap with solid shape. */
gl_Position.xy += (edge_dir + perp) * drw_view.viewport_size_inverse * gl_Position.w;
gl_Position.xy += (edge_dir + perp) * sizeViewportInv * gl_Position.w;
/* Improve AA bleeding inside bone silhouette. */
gl_Position.z -= (is_persp) ? 1e-4 : 1e-6;
edgeStart = edgePos = ((gl_Position.xy / gl_Position.w) * 0.5 + 0.5) * sizeViewport.xy;

View File

@@ -160,7 +160,7 @@ void main()
if (line_vertex_id == 0) {
gl_Position = pPos[1];
/* Offset away from the center to avoid overlap with solid shape. */
gl_Position.xy += (edge_dir - perp) * drw_view.viewport_size_inverse * gl_Position.w;
gl_Position.xy += (edge_dir - perp) * sizeViewportInv * gl_Position.w;
/* Improve AA bleeding inside bone silhouette. */
gl_Position.z -= (is_persp) ? 1e-4 : 1e-6;
edgeStart = edgePos = ((gl_Position.xy / gl_Position.w) * 0.5 + 0.5) * sizeViewport.xy;
@@ -169,7 +169,7 @@ void main()
else {
gl_Position = pPos[2];
/* Offset away from the center to avoid overlap with solid shape. */
gl_Position.xy += (edge_dir + perp) * drw_view.viewport_size_inverse * gl_Position.w;
gl_Position.xy += (edge_dir + perp) * sizeViewportInv * gl_Position.w;
/* Improve AA bleeding inside bone silhouette. */
gl_Position.z -= (is_persp) ? 1e-4 : 1e-6;
edgeStart = edgePos = ((gl_Position.xy / gl_Position.w) * 0.5 + 0.5) * sizeViewport.xy;

View File

@@ -63,7 +63,7 @@ void main()
/* Offset away from the center to avoid overlap with solid shape. */
vec2 ofs_dir = normalize(proj(gl_Position) - proj(center));
gl_Position.xy += ofs_dir * drw_view.viewport_size_inverse * gl_Position.w;
gl_Position.xy += ofs_dir * sizeViewportInv * gl_Position.w;
edgeStart = edgePos = proj(gl_Position);

View File

@@ -64,7 +64,7 @@ void main()
if (finalInnerColor.a > 0.0) {
float stick_size = sizePixel * 5.0;
gl_Position = (is_head) ? p0 : p1;
gl_Position.xy += stick_size * (vpos * drw_view.viewport_size_inverse);
gl_Position.xy += stick_size * (vpos * sizeViewportInv);
gl_Position.z += (is_bone) ? 0.0 : 1e-6; /* Avoid Z fighting of head/tails. */
view_clipping_distances((is_head ? boneStart_4d : boneEnd_4d).xyz);
}

View File

@@ -83,7 +83,7 @@ void main()
vec4(inner_color.rgb, 0.0);
vec2 v1_2 = (v2.xy / v2.w - v1.xy / v1.w);
vec2 offset = sizeEdge * 4.0 * drw_view.viewport_size_inverse; /* 4.0 is eyeballed */
vec2 offset = sizeEdge * 4.0 * sizeViewportInv; /* 4.0 is eyeballed */
if (abs(v1_2.x * sizeViewport.x) < abs(v1_2.y * sizeViewport.y)) {
offset.y = 0.0;

View File

@@ -56,7 +56,7 @@ void main()
half_size += 0.5;
}
vec3 edge_ofs = vec3(half_size * drw_view.viewport_size_inverse, 0.0);
vec3 edge_ofs = vec3(half_size * sizeViewportInv, 0.0);
bool horizontal = line.x > line.y;
edge_ofs = (horizontal) ? edge_ofs.zyz : edge_ofs.xzz;

View File

@@ -181,7 +181,7 @@ void main()
half_size += 0.5;
#endif
vec3 edge_ofs = vec3(half_size * drw_view.viewport_size_inverse, 0.0);
vec3 edge_ofs = vec3(half_size * sizeViewportInv, 0.0);
bool horizontal = line.x > line.y;
edge_ofs = (horizontal) ? edge_ofs.zyz : edge_ofs.xzz;

View File

@@ -36,7 +36,7 @@ void main()
vec2 line = ss_pos[0] - ss_pos[1];
vec2 line_dir = normalize(line);
vec2 line_perp = vec2(-line_dir.y, line_dir.x);
vec2 edge_ofs = line_perp * drw_view.viewport_size_inverse * ceil(half_size);
vec2 edge_ofs = line_perp * sizeViewportInv * ceil(half_size);
float selectFac0 = geom_in[0].selectionFac;
float selectFac1 = geom_in[1].selectionFac;
#ifdef USE_EDGE_SELECT

View File

@@ -5,8 +5,8 @@ void main()
vec3 world_pos = point_object_to_world(vec3(au, 0.0));
gl_Position = point_world_to_ndc(world_pos);
/* Snap vertices to the pixel grid to reduce artifacts. */
vec2 half_viewport_res = drw_view.viewport_size * 0.5;
vec2 half_pixel_offset = drw_view.viewport_size_inverse * 0.5;
vec2 half_viewport_res = sizeViewport * 0.5;
vec2 half_pixel_offset = sizeViewportInv * 0.5;
gl_Position.xy = floor(gl_Position.xy * half_viewport_res) / half_viewport_res +
half_pixel_offset;

View File

@@ -218,8 +218,7 @@ void main()
/* HACK: to avoid losing sub-pixel object in selections, we add a bit of randomness to the
* wire to at least create one fragment that will pass the occlusion query. */
/* TODO(fclem): Limit this workaround to selection. It's not very noticeable but still... */
gl_Position.xy += drw_view.viewport_size_inverse * gl_Position.w *
((gl_VertexID % 2 == 0) ? -1.0 : 1.0);
gl_Position.xy += sizeViewportInv * gl_Position.w * ((gl_VertexID % 2 == 0) ? -1.0 : 1.0);
#endif
view_clipping_distances(world_pos);

View File

@@ -16,8 +16,7 @@ void main()
/* HACK: to avoid losing sub-pixel object in selections, we add a bit of randomness to the
* wire to at least create one fragment that will pass the occlusion query. */
/* TODO(fclem): Limit this workaround to selection. It's not very noticeable but still... */
gl_Position.xy += drw_view.viewport_size_inverse * gl_Position.w *
((gl_VertexID % 2 == 0) ? -1.0 : 1.0);
gl_Position.xy += sizeViewportInv * gl_Position.w * ((gl_VertexID % 2 == 0) ? -1.0 : 1.0);
#endif
stipple_coord = stipple_start = screen_position(gl_Position);

View File

@@ -12,8 +12,7 @@ vec2 compute_dir(vec2 v0, vec2 v1)
void main(void)
{
vec2 t;
vec2 edge_dir = compute_dir(interp_in[0].ss_pos, interp_in[1].ss_pos) *
drw_view.viewport_size_inverse;
vec2 edge_dir = compute_dir(interp_in[0].ss_pos, interp_in[1].ss_pos) * sizeViewportInv;
bool is_persp = (drw_view.winmat[3][3] == 0.0);
float line_size = float(lineThickness) * sizePixel;

View File

@@ -124,7 +124,7 @@ void main()
* Each vertex shader invocation is one vertex in the output primitive, so outptut
* required ID. */
vec2 t;
vec2 edge_dir = compute_dir(ssPos[0], ssPos[1]) * drw_view.viewport_size_inverse;
vec2 edge_dir = compute_dir(ssPos[0], ssPos[1]) * sizeViewportInv;
bool is_persp = (ProjectionMatrix[3][3] == 0.0);
float line_size = float(lineThickness) * sizePixel;

View File

@@ -36,7 +36,7 @@ bvec4 gather_edges(vec2 uv, uint ref)
#ifdef GPU_ARB_texture_gather
ids = textureGather(outlineId, uv);
#else
vec3 ofs = vec3(0.5, 0.5, -0.5) * drw_view.viewport_size_inverse.xyy;
vec3 ofs = vec3(0.5, 0.5, -0.5) * sizeViewportInv.xyy;
ids.x = textureLod(outlineId, uv - ofs.xz, 0.0).r;
ids.y = textureLod(outlineId, uv + ofs.xy, 0.0).r;
ids.z = textureLod(outlineId, uv + ofs.xz, 0.0).r;
@@ -161,8 +161,8 @@ void main()
uint ref = textureLod(outlineId, uvcoordsvar.xy, 0.0).r;
uint ref_col = ref;
vec2 uvs = gl_FragCoord.xy * drw_view.viewport_size_inverse;
vec3 ofs = vec3(drw_view.viewport_size_inverse.xy, 0.0);
vec2 uvs = gl_FragCoord.xy * sizeViewportInv;
vec3 ofs = vec3(sizeViewportInv.xy, 0.0);
vec2 depth_uv = uvs;
@@ -269,13 +269,13 @@ void main()
switch (edge_case) {
/* Straight lines. */
case YPOS:
extra_edges = gather_edges(uvs + drw_view.viewport_size_inverse * vec2(2.5, 0.5), ref);
extra_edges2 = gather_edges(uvs + drw_view.viewport_size_inverse * vec2(-2.5, 0.5), ref);
extra_edges = gather_edges(uvs + sizeViewportInv * vec2(2.5, 0.5), ref);
extra_edges2 = gather_edges(uvs + sizeViewportInv * vec2(-2.5, 0.5), ref);
straight_line_dir(extra_edges, extra_edges2, line_start, line_end);
break;
case YNEG:
extra_edges = gather_edges(uvs + drw_view.viewport_size_inverse * vec2(-2.5, -0.5), ref);
extra_edges2 = gather_edges(uvs + drw_view.viewport_size_inverse * vec2(2.5, -0.5), ref);
extra_edges = gather_edges(uvs + sizeViewportInv * vec2(-2.5, -0.5), ref);
extra_edges2 = gather_edges(uvs + sizeViewportInv * vec2(2.5, -0.5), ref);
extra_edges = rotate_180(extra_edges);
extra_edges2 = rotate_180(extra_edges2);
straight_line_dir(extra_edges, extra_edges2, line_start, line_end);
@@ -283,8 +283,8 @@ void main()
line_end = rotate_180(line_end);
break;
case XPOS:
extra_edges = gather_edges(uvs + drw_view.viewport_size_inverse * vec2(0.5, 2.5), ref);
extra_edges2 = gather_edges(uvs + drw_view.viewport_size_inverse * vec2(0.5, -2.5), ref);
extra_edges = gather_edges(uvs + sizeViewportInv * vec2(0.5, 2.5), ref);
extra_edges2 = gather_edges(uvs + sizeViewportInv * vec2(0.5, -2.5), ref);
extra_edges = rotate_90(extra_edges);
extra_edges2 = rotate_90(extra_edges2);
straight_line_dir(extra_edges, extra_edges2, line_start, line_end);
@@ -292,8 +292,8 @@ void main()
line_end = rotate_90(line_end);
break;
case XNEG:
extra_edges = gather_edges(uvs + drw_view.viewport_size_inverse * vec2(-0.5, 2.5), ref);
extra_edges2 = gather_edges(uvs + drw_view.viewport_size_inverse * vec2(-0.5, -2.5), ref);
extra_edges = gather_edges(uvs + sizeViewportInv * vec2(-0.5, 2.5), ref);
extra_edges2 = gather_edges(uvs + sizeViewportInv * vec2(-0.5, -2.5), ref);
extra_edges = rotate_270(extra_edges);
extra_edges2 = rotate_270(extra_edges2);
straight_line_dir(extra_edges, extra_edges2, line_start, line_end);

View File

@@ -45,8 +45,8 @@ void main()
vec3 world_pos;
if (hairThicknessRes > 1) {
/* Calculate the thickness, thicktime, worldpos taken into account the outline. */
float outline_width = point_world_to_ndc(center_wpos).w * 1.25 *
drw_view.viewport_size_inverse.y * drw_view.wininv[1][1];
float outline_width = point_world_to_ndc(center_wpos).w * 1.25 * sizeViewportInv.y *
drw_view.wininv[1][1];
thickness += outline_width;
float thick_time = float(gl_VertexID % hairThicknessRes) / float(hairThicknessRes - 1);
thick_time = thickness * (thick_time * 2.0 - 1.0);

View File

@@ -23,7 +23,7 @@ void main()
if (!gpStrokeOrder3d) {
/* Stroke order 2D. Project to gpDepthPlane. */
bool is_persp = drw_view.winmat[3][3] == 0.0;
vec2 uvs = vec2(gl_FragCoord.xy) * drw_view.viewport_size_inverse;
vec2 uvs = vec2(gl_FragCoord.xy) * sizeViewportInv;
vec3 pos_ndc = vec3(uvs, gl_FragCoord.z) * 2.0 - 1.0;
vec4 pos_world = drw_view.viewinv * (drw_view.wininv * vec4(pos_ndc, 1.0));
vec3 pos = pos_world.xyz / pos_world.w;

View File

@@ -47,7 +47,7 @@ void main()
col1,
col2,
fcol1,
vec4(drw_view.viewport_size, drw_view.viewport_size_inverse),
vec4(sizeViewport, sizeViewportInv),
world_pos,
unused_N,
unused_color,

View File

@@ -17,10 +17,10 @@ void main()
vec2 dir = lineOutput.xy * 2.0 - 1.0;
bool dir_horiz = abs(dir.x) > abs(dir.y);
vec2 uv = gl_FragCoord.xy * drw_view.viewport_size_inverse;
vec2 uv = gl_FragCoord.xy * sizeViewportInv;
float depth_occluder = texture(depthTex, uv).r;
float depth_min = depth_occluder;
vec2 texel_uv_size = drw_view.viewport_size_inverse;
vec2 texel_uv_size = sizeViewportInv;
if (dir_horiz) {
depth_min = min(depth_min, texture(depthTex, uv + vec2(-texel_uv_size.x, 0.0)).r);

View File

@@ -96,7 +96,7 @@ void main()
wofs = normal_world_to_view(wofs);
/* Push vertex half a pixel (maximum) in normal direction. */
gl_Position.xy += wofs.xy * drw_view.viewport_size_inverse * gl_Position.w;
gl_Position.xy += wofs.xy * sizeViewportInv * gl_Position.w;
/* Push the vertex towards the camera. Helps a bit. */
gl_Position.z -= facing_ratio * curvature * 1.0e-6 * gl_Position.w;
@@ -136,8 +136,7 @@ void main()
#ifdef SELECT_EDGES
/* HACK: to avoid losing sub-pixel object in selections, we add a bit of randomness to the
* wire to at least create one fragment that will pass the occlusion query. */
gl_Position.xy += drw_view.viewport_size_inverse * gl_Position.w *
((gl_VertexID % 2 == 0) ? -1.0 : 1.0);
gl_Position.xy += sizeViewportInv * gl_Position.w * ((gl_VertexID % 2 == 0) ? -1.0 : 1.0);
#endif
view_clipping_distances(wpos);

View File

@@ -279,8 +279,6 @@ struct GPUVertBuf *DRW_mesh_batch_cache_pos_vertbuf_get(struct Mesh *me);
int DRW_mesh_material_count_get(const struct Object *object, const struct Mesh *me);
/* See 'common_globals_lib.glsl' for duplicate defines. */
/* Edit mesh bitflags (is this the right place?) */
enum {
VFLAG_VERT_ACTIVE = 1 << 0,

View File

@@ -180,7 +180,6 @@ void DRW_globals_update(void)
gb->pixel_fac = *DRW_viewport_pixelsize_get();
/* Deprecated, use drw_view.viewport_size instead */
copy_v2_v2(&gb->size_viewport[0], DRW_viewport_size_get());
copy_v2_v2(&gb->size_viewport[2], &gb->size_viewport[0]);
invert_v2(&gb->size_viewport[2]);

View File

@@ -228,6 +228,7 @@ BLI_STATIC_ASSERT_ALIGN(GlobalsUboStorage, 16)
# 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

View File

@@ -1,147 +0,0 @@
#define COMMON_GLOBALS_LIB
#ifdef USE_GPU_SHADER_CREATE_INFO
# error Use draw_globals as additional_info instead of common_globals_lib.glsl
#endif
/* keep in sync with GlobalsUboStorage */
layout(std140) uniform globalsBlock
{
vec4 colorWire;
vec4 colorWireEdit;
vec4 colorActive;
vec4 colorSelect;
vec4 colorLibrarySelect;
vec4 colorLibrary;
vec4 colorTransform;
vec4 colorLight;
vec4 colorSpeaker;
vec4 colorCamera;
vec4 colorCameraPath;
vec4 colorEmpty;
vec4 colorVertex;
vec4 colorVertexSelect;
vec4 colorVertexUnreferenced;
vec4 colorVertexMissingData;
vec4 colorEditMeshActive;
vec4 colorEdgeSelect;
vec4 colorEdgeSeam;
vec4 colorEdgeSharp;
vec4 colorEdgeCrease;
vec4 colorEdgeBWeight;
vec4 colorEdgeFaceSelect;
vec4 colorEdgeFreestyle;
vec4 colorFace;
vec4 colorFaceSelect;
vec4 colorFaceFreestyle;
vec4 colorGpencilVertex;
vec4 colorGpencilVertexSelect;
vec4 colorNormal;
vec4 colorVNormal;
vec4 colorLNormal;
vec4 colorFaceDot;
vec4 colorSkinRoot;
vec4 colorDeselect;
vec4 colorOutline;
vec4 colorLightNoAlpha;
vec4 colorBackground;
vec4 colorBackgroundGradient;
vec4 colorCheckerPrimary;
vec4 colorCheckerSecondary;
vec4 colorClippingBorder;
vec4 colorEditMeshMiddle;
vec4 colorHandleFree;
vec4 colorHandleAuto;
vec4 colorHandleVect;
vec4 colorHandleAlign;
vec4 colorHandleAutoclamp;
vec4 colorHandleSelFree;
vec4 colorHandleSelAuto;
vec4 colorHandleSelVect;
vec4 colorHandleSelAlign;
vec4 colorHandleSelAutoclamp;
vec4 colorNurbUline;
vec4 colorNurbVline;
vec4 colorNurbSelUline;
vec4 colorNurbSelVline;
vec4 colorActiveSpline;
vec4 colorBonePose;
vec4 colorBonePoseActive;
vec4 colorBonePoseActiveUnsel;
vec4 colorBonePoseConstraint;
vec4 colorBonePoseIK;
vec4 colorBonePoseSplineIK;
vec4 colorBonePoseTarget;
vec4 colorBoneSolid;
vec4 colorBoneLocked;
vec4 colorBoneActive;
vec4 colorBoneActiveUnsel;
vec4 colorBoneSelect;
vec4 colorBoneIKLine;
vec4 colorBoneIKLineNoTarget;
vec4 colorBoneIKLineSpline;
vec4 colorText;
vec4 colorTextHi;
vec4 colorBundleSolid;
vec4 colorMballRadius;
vec4 colorMballRadiusSelect;
vec4 colorMballStiffness;
vec4 colorMballStiffnessSelect;
vec4 colorCurrentFrame;
vec4 colorGrid;
vec4 colorGridEmphasis;
vec4 colorGridAxisX;
vec4 colorGridAxisY;
vec4 colorGridAxisZ;
vec4 colorFaceBack;
vec4 colorFaceFront;
vec4 colorUVShadow;
vec4 sizeViewport; /* Inverted size in zw. */
float sizePixel; /* This one is for DPI scaling. */
float pixelFac; /* To use with mul_project_m4_v3_zfac() */
float sizeObjectCenter;
float sizeLightCenter;
float sizeLightCircle;
float sizeLightCircleShadow;
float sizeVertex;
float sizeEdge;
float sizeEdgeFix;
float sizeFaceDot;
float sizeChecker;
float sizeVertexGpencil;
};
#define sizeViewportInv (sizeViewport.zw)
/* 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)