Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/overlay/overlay_grid.c')
-rw-r--r--source/blender/draw/engines/overlay/overlay_grid.c356
1 files changed, 174 insertions, 182 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_grid.c b/source/blender/draw/engines/overlay/overlay_grid.c
index 3d42765a5e5..55013d0429b 100644
--- a/source/blender/draw/engines/overlay/overlay_grid.c
+++ b/source/blender/draw/engines/overlay/overlay_grid.c
@@ -19,32 +19,22 @@
#include "overlay_private.h"
-enum {
- SHOW_AXIS_X = (1 << 0),
- SHOW_AXIS_Y = (1 << 1),
- SHOW_AXIS_Z = (1 << 2),
- SHOW_GRID = (1 << 3),
- PLANE_XY = (1 << 4),
- PLANE_XZ = (1 << 5),
- PLANE_YZ = (1 << 6),
- CLIP_ZPOS = (1 << 7),
- CLIP_ZNEG = (1 << 8),
- GRID_BACK = (1 << 9),
- GRID_CAMERA = (1 << 10),
- PLANE_IMAGE = (1 << 11),
- CUSTOM_GRID = (1 << 12),
-};
+BLI_STATIC_ASSERT(SI_GRID_STEPS_LEN == OVERLAY_GRID_STEPS_LEN, "")
void OVERLAY_grid_init(OVERLAY_Data *vedata)
{
OVERLAY_PrivateData *pd = vedata->stl->pd;
- OVERLAY_ShadingData *shd = &pd->shdata;
+ OVERLAY_GridData *grid = &pd->grid_data;
const DRWContextState *draw_ctx = DRW_context_state_get();
- shd->grid_flag = 0;
- shd->zneg_flag = 0;
- shd->zpos_flag = 0;
- shd->grid_line_size = max_ff(0.0f, U.pixelsize - 1.0f) * 0.5f;
+ float *grid_axes = pd->grid.grid_axes;
+ float *zplane_axes = pd->grid.zplane_axes;
+ float grid_steps[SI_GRID_STEPS_LEN] = {
+ 0.001f, 0.01f, 0.1f, 1.0f, 10.0f, 100.0f, 1000.0f, 10000.0f};
+ OVERLAY_GridBits grid_flag = 0, zneg_flag = 0, zpos_flag = 0;
+ grid->line_size = max_ff(0.0f, U.pixelsize - 1.0f) * 0.5f;
+ /* Default, nothing is drawn. */
+ pd->grid.grid_flag = pd->grid.zneg_flag = pd->grid.zpos_flag = 0;
if (pd->space_type == SPACE_IMAGE) {
SpaceImage *sima = (SpaceImage *)draw_ctx->space_data;
@@ -58,231 +48,233 @@ void OVERLAY_grid_init(OVERLAY_Data *vedata)
SI_OVERLAY_SHOW_GRID_BACKGROUND) != 0) :
true;
if (background_enabled) {
- shd->grid_flag = GRID_BACK | PLANE_IMAGE;
+ grid_flag = GRID_BACK | PLANE_IMAGE;
}
const bool draw_grid = is_uv_edit || !ED_space_image_has_buffer(sima);
if (background_enabled && draw_grid) {
- shd->grid_flag |= SHOW_GRID;
+ grid_flag |= SHOW_GRID;
if (is_uv_edit && (sima->flag & SI_CUSTOM_GRID) != 0) {
- shd->grid_flag |= CUSTOM_GRID;
+ grid_flag |= CUSTOM_GRID;
}
}
- shd->grid_distance = 1.0f;
- copy_v3_fl3(shd->grid_size, 1.0f, 1.0f, 1.0f);
+ grid->distance = 1.0f;
+ copy_v3_fl3(grid->size, 1.0f, 1.0f, 1.0f);
if (is_uv_edit) {
- shd->grid_size[0] = (float)sima->tile_grid_shape[0];
- shd->grid_size[1] = (float)sima->tile_grid_shape[1];
+ grid->size[0] = (float)sima->tile_grid_shape[0];
+ grid->size[1] = (float)sima->tile_grid_shape[1];
}
- const int grid_size = SI_GRID_STEPS_LEN;
- shd->zoom_factor = ED_space_image_zoom_level(v2d, grid_size);
- ED_space_image_grid_steps(sima, shd->grid_steps, grid_size);
-
- return;
- }
-
- View3D *v3d = draw_ctx->v3d;
- Scene *scene = draw_ctx->scene;
- RegionView3D *rv3d = draw_ctx->rv3d;
-
- const bool show_axis_x = (pd->v3d_gridflag & V3D_SHOW_X) != 0;
- const bool show_axis_y = (pd->v3d_gridflag & V3D_SHOW_Y) != 0;
- const bool show_axis_z = (pd->v3d_gridflag & V3D_SHOW_Z) != 0;
- const bool show_floor = (pd->v3d_gridflag & V3D_SHOW_FLOOR) != 0;
- const bool show_ortho_grid = (pd->v3d_gridflag & V3D_SHOW_ORTHO_GRID) != 0;
-
- if (pd->hide_overlays || !(pd->v3d_gridflag & (V3D_SHOW_X | V3D_SHOW_Y | V3D_SHOW_Z |
- V3D_SHOW_FLOOR | V3D_SHOW_ORTHO_GRID))) {
- return;
- }
-
- float viewinv[4][4], wininv[4][4];
- float viewmat[4][4], winmat[4][4];
- DRW_view_winmat_get(NULL, winmat, false);
- DRW_view_winmat_get(NULL, wininv, true);
- DRW_view_viewmat_get(NULL, viewmat, false);
- DRW_view_viewmat_get(NULL, viewinv, true);
-
- /* If perspective view or non-axis aligned view. */
- if (winmat[3][3] == 0.0f || rv3d->view == RV3D_VIEW_USER) {
- if (show_axis_x) {
- shd->grid_flag |= PLANE_XY | SHOW_AXIS_X;
- }
- if (show_axis_y) {
- shd->grid_flag |= PLANE_XY | SHOW_AXIS_Y;
- }
- if (show_floor) {
- shd->grid_flag |= PLANE_XY | SHOW_GRID;
- }
+ grid->zoom_factor = ED_space_image_zoom_level(v2d, SI_GRID_STEPS_LEN);
+ ED_space_image_grid_steps(sima, grid_steps, SI_GRID_STEPS_LEN);
}
else {
- if (show_ortho_grid && ELEM(rv3d->view, RV3D_VIEW_RIGHT, RV3D_VIEW_LEFT)) {
- shd->grid_flag = PLANE_YZ | SHOW_AXIS_Y | SHOW_AXIS_Z | SHOW_GRID | GRID_BACK;
+ /* SPACE_VIEW3D */
+ View3D *v3d = draw_ctx->v3d;
+ Scene *scene = draw_ctx->scene;
+ RegionView3D *rv3d = draw_ctx->rv3d;
+
+ const bool show_axis_x = (pd->v3d_gridflag & V3D_SHOW_X) != 0;
+ const bool show_axis_y = (pd->v3d_gridflag & V3D_SHOW_Y) != 0;
+ const bool show_axis_z = (pd->v3d_gridflag & V3D_SHOW_Z) != 0;
+ const bool show_floor = (pd->v3d_gridflag & V3D_SHOW_FLOOR) != 0;
+ const bool show_ortho_grid = (pd->v3d_gridflag & V3D_SHOW_ORTHO_GRID) != 0;
+
+ if (pd->hide_overlays || !(pd->v3d_gridflag & (V3D_SHOW_X | V3D_SHOW_Y | V3D_SHOW_Z |
+ V3D_SHOW_FLOOR | V3D_SHOW_ORTHO_GRID))) {
+ return;
}
- else if (show_ortho_grid && ELEM(rv3d->view, RV3D_VIEW_TOP, RV3D_VIEW_BOTTOM)) {
- shd->grid_flag = PLANE_XY | SHOW_AXIS_X | SHOW_AXIS_Y | SHOW_GRID | GRID_BACK;
+
+ float viewinv[4][4], wininv[4][4];
+ float viewmat[4][4], winmat[4][4];
+ DRW_view_winmat_get(NULL, winmat, false);
+ DRW_view_winmat_get(NULL, wininv, true);
+ DRW_view_viewmat_get(NULL, viewmat, false);
+ DRW_view_viewmat_get(NULL, viewinv, true);
+
+ /* If perspective view or non-axis aligned view. */
+ if (winmat[3][3] == 0.0f || rv3d->view == RV3D_VIEW_USER) {
+ if (show_axis_x) {
+ grid_flag |= PLANE_XY | SHOW_AXIS_X;
+ }
+ if (show_axis_y) {
+ grid_flag |= PLANE_XY | SHOW_AXIS_Y;
+ }
+ if (show_floor) {
+ grid_flag |= PLANE_XY | SHOW_GRID;
+ }
}
- else if (show_ortho_grid && ELEM(rv3d->view, RV3D_VIEW_FRONT, RV3D_VIEW_BACK)) {
- shd->grid_flag = PLANE_XZ | SHOW_AXIS_X | SHOW_AXIS_Z | SHOW_GRID | GRID_BACK;
+ else {
+ if (show_ortho_grid && ELEM(rv3d->view, RV3D_VIEW_RIGHT, RV3D_VIEW_LEFT)) {
+ grid_flag = PLANE_YZ | SHOW_AXIS_Y | SHOW_AXIS_Z | SHOW_GRID | GRID_BACK;
+ }
+ else if (show_ortho_grid && ELEM(rv3d->view, RV3D_VIEW_TOP, RV3D_VIEW_BOTTOM)) {
+ grid_flag = PLANE_XY | SHOW_AXIS_X | SHOW_AXIS_Y | SHOW_GRID | GRID_BACK;
+ }
+ else if (show_ortho_grid && ELEM(rv3d->view, RV3D_VIEW_FRONT, RV3D_VIEW_BACK)) {
+ grid_flag = PLANE_XZ | SHOW_AXIS_X | SHOW_AXIS_Z | SHOW_GRID | GRID_BACK;
+ }
}
- }
- shd->grid_axes[0] = (float)((shd->grid_flag & (PLANE_XZ | PLANE_XY)) != 0);
- shd->grid_axes[1] = (float)((shd->grid_flag & (PLANE_YZ | PLANE_XY)) != 0);
- shd->grid_axes[2] = (float)((shd->grid_flag & (PLANE_YZ | PLANE_XZ)) != 0);
+ grid_axes[0] = (float)((grid_flag & (PLANE_XZ | PLANE_XY)) != 0);
+ grid_axes[1] = (float)((grid_flag & (PLANE_YZ | PLANE_XY)) != 0);
+ grid_axes[2] = (float)((grid_flag & (PLANE_YZ | PLANE_XZ)) != 0);
- /* Z axis if needed */
- if (((rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO)) && show_axis_z) {
- shd->zpos_flag = SHOW_AXIS_Z;
+ /* Z axis if needed */
+ if (((rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO)) && show_axis_z) {
+ zpos_flag = SHOW_AXIS_Z;
- float zvec[3], campos[3];
- negate_v3_v3(zvec, viewinv[2]);
- copy_v3_v3(campos, viewinv[3]);
+ float zvec[3], campos[3];
+ negate_v3_v3(zvec, viewinv[2]);
+ copy_v3_v3(campos, viewinv[3]);
+
+ /* z axis : chose the most facing plane */
+ if (fabsf(zvec[0]) < fabsf(zvec[1])) {
+ zpos_flag |= PLANE_XZ;
+ }
+ else {
+ zpos_flag |= PLANE_YZ;
+ }
+
+ zneg_flag = zpos_flag;
+
+ /* Persp : If camera is below floor plane, we switch clipping
+ * Ortho : If eye vector is looking up, we switch clipping */
+ if (((winmat[3][3] == 0.0f) && (campos[2] > 0.0f)) ||
+ ((winmat[3][3] != 0.0f) && (zvec[2] < 0.0f))) {
+ zpos_flag |= CLIP_ZPOS;
+ zneg_flag |= CLIP_ZNEG;
+ }
+ else {
+ zpos_flag |= CLIP_ZNEG;
+ zneg_flag |= CLIP_ZPOS;
+ }
- /* z axis : chose the most facing plane */
- if (fabsf(zvec[0]) < fabsf(zvec[1])) {
- shd->zpos_flag |= PLANE_XZ;
+ zplane_axes[0] = (float)((zpos_flag & (PLANE_XZ | PLANE_XY)) != 0);
+ zplane_axes[1] = (float)((zpos_flag & (PLANE_YZ | PLANE_XY)) != 0);
+ zplane_axes[2] = (float)((zpos_flag & (PLANE_YZ | PLANE_XZ)) != 0);
}
else {
- shd->zpos_flag |= PLANE_YZ;
+ zneg_flag = zpos_flag = CLIP_ZNEG | CLIP_ZPOS;
}
- shd->zneg_flag = shd->zpos_flag;
+ float dist;
+ if (rv3d->persp == RV3D_CAMOB && v3d->camera && v3d->camera->type == OB_CAMERA) {
+ Object *camera_object = DEG_get_evaluated_object(draw_ctx->depsgraph, v3d->camera);
+ dist = ((Camera *)(camera_object->data))->clip_end;
+ grid_flag |= GRID_CAMERA;
+ zneg_flag |= GRID_CAMERA;
+ zpos_flag |= GRID_CAMERA;
+ }
+ else {
+ dist = v3d->clip_end;
+ }
- /* Persp : If camera is below floor plane, we switch clipping
- * Ortho : If eye vector is looking up, we switch clipping */
- if (((winmat[3][3] == 0.0f) && (campos[2] > 0.0f)) ||
- ((winmat[3][3] != 0.0f) && (zvec[2] < 0.0f))) {
- shd->zpos_flag |= CLIP_ZPOS;
- shd->zneg_flag |= CLIP_ZNEG;
+ if (winmat[3][3] == 0.0f) {
+ copy_v3_fl(grid->size, dist);
}
else {
- shd->zpos_flag |= CLIP_ZNEG;
- shd->zneg_flag |= CLIP_ZPOS;
+ float viewdist = 1.0f / min_ff(fabsf(winmat[0][0]), fabsf(winmat[1][1]));
+ copy_v3_fl(grid->size, viewdist * dist);
}
- shd->zplane_axes[0] = (float)((shd->zpos_flag & (PLANE_XZ | PLANE_XY)) != 0);
- shd->zplane_axes[1] = (float)((shd->zpos_flag & (PLANE_YZ | PLANE_XY)) != 0);
- shd->zplane_axes[2] = (float)((shd->zpos_flag & (PLANE_YZ | PLANE_XZ)) != 0);
- }
- else {
- shd->zneg_flag = shd->zpos_flag = CLIP_ZNEG | CLIP_ZPOS;
- }
+ grid->distance = dist / 2.0f;
- float dist;
- if (rv3d->persp == RV3D_CAMOB && v3d->camera && v3d->camera->type == OB_CAMERA) {
- Object *camera_object = DEG_get_evaluated_object(draw_ctx->depsgraph, v3d->camera);
- dist = ((Camera *)(camera_object->data))->clip_end;
- shd->grid_flag |= GRID_CAMERA;
- shd->zneg_flag |= GRID_CAMERA;
- shd->zpos_flag |= GRID_CAMERA;
- }
- else {
- dist = v3d->clip_end;
- }
+ ED_view3d_grid_steps(scene, v3d, rv3d, grid_steps);
- if (winmat[3][3] == 0.0f) {
- copy_v3_fl(shd->grid_size, dist);
- }
- else {
- float viewdist = 1.0f / min_ff(fabsf(winmat[0][0]), fabsf(winmat[1][1]));
- copy_v3_fl(shd->grid_size, viewdist * dist);
+ if ((v3d->flag & (V3D_XR_SESSION_SURFACE | V3D_XR_SESSION_MIRROR)) != 0) {
+ /* The calculations for the grid parameters assume that the view matrix has no scale
+ * component, which may not be correct if the user is "shrunk" or "enlarged" by zooming in or
+ * out. Therefore, we need to compensate the values here. */
+ /* Assumption is uniform scaling (all column vectors are of same length). */
+ float viewinvscale = len_v3(viewinv[0]);
+ grid->distance *= viewinvscale;
+ }
}
- shd->grid_distance = dist / 2.0f;
-
- ED_view3d_grid_steps(scene, v3d, rv3d, shd->grid_steps);
-
- if ((v3d->flag & (V3D_XR_SESSION_SURFACE | V3D_XR_SESSION_MIRROR)) != 0) {
- /* The calculations for the grid parameters assume that the view matrix has no scale component,
- * which may not be correct if the user is "shrunk" or "enlarged" by zooming in or out.
- * Therefore, we need to compensate the values here. */
- float viewinvscale = len_v3(
- viewinv[0]); /* Assumption is uniform scaling (all column vectors are of same length). */
- shd->grid_distance *= viewinvscale;
+ /* Convert to UBO alignment. */
+ for (int i = 0; i < SI_GRID_STEPS_LEN; i++) {
+ grid->steps[i][0] = grid_steps[i];
}
+ pd->grid.grid_flag = grid_flag;
+ pd->grid.zneg_flag = zneg_flag;
+ pd->grid.zpos_flag = zpos_flag;
}
-void OVERLAY_grid_cache_init(OVERLAY_Data *vedata)
+void OVERLAY_grid_cache_init(OVERLAY_Data *ved)
{
- OVERLAY_StorageList *stl = vedata->stl;
+ OVERLAY_StorageList *stl = ved->stl;
OVERLAY_PrivateData *pd = stl->pd;
- OVERLAY_ShadingData *shd = &pd->shdata;
+ OVERLAY_GridData *grid = &pd->grid_data;
- OVERLAY_PassList *psl = vedata->psl;
+ OVERLAY_PassList *psl = ved->psl;
DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
psl->grid_ps = NULL;
- if ((shd->grid_flag == 0 && shd->zpos_flag == 0) || !DRW_state_is_fbo()) {
+ if ((pd->grid.grid_flag == 0 && pd->grid.zpos_flag == 0) || !DRW_state_is_fbo()) {
return;
}
+ if (ved->instance->grid_ubo == NULL) {
+ ved->instance->grid_ubo = GPU_uniformbuf_create(sizeof(OVERLAY_GridData));
+ }
+ GPU_uniformbuf_update(ved->instance->grid_ubo, &pd->grid_data);
+
DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA;
DRW_PASS_CREATE(psl->grid_ps, state);
DRWShadingGroup *grp;
GPUShader *sh;
struct GPUBatch *geom = DRW_cache_grid_get();
- const float line_zero = 0;
- static const float grid_steps_default[8] = {0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0, 10000.0};
-
if (pd->space_type == SPACE_IMAGE) {
float mat[4][4];
- /* add quad background */
+ /* Add quad background. */
sh = OVERLAY_shader_grid_background();
- grp = DRW_shgroup_create(sh, psl->grid_ps);
+ DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->grid_ps);
float color_back[4];
interp_v4_v4v4(color_back, G_draw.block.color_background, G_draw.block.color_grid, 0.5);
DRW_shgroup_uniform_vec4_copy(grp, "color", color_back);
DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
unit_m4(mat);
- mat[0][0] = shd->grid_size[0];
- mat[1][1] = shd->grid_size[1];
- mat[2][2] = shd->grid_size[2];
+ mat[0][0] = grid->size[0];
+ mat[1][1] = grid->size[1];
+ mat[2][2] = grid->size[2];
DRW_shgroup_call_obmat(grp, DRW_cache_quad_get(), mat);
}
- sh = OVERLAY_shader_grid();
-
- /* Create 3 quads to render ordered transparency Z axis */
- grp = DRW_shgroup_create(sh, psl->grid_ps);
- DRW_shgroup_uniform_int(grp, "gridFlag", &shd->zneg_flag, 1);
- DRW_shgroup_uniform_vec3(grp, "planeAxes", shd->zplane_axes, 1);
- DRW_shgroup_uniform_float(grp, "gridDistance", &shd->grid_distance, 1);
- DRW_shgroup_uniform_float_copy(grp, "lineKernel", shd->grid_line_size);
- DRW_shgroup_uniform_vec3(grp, "gridSize", shd->grid_size, 1);
- DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
- DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
- DRW_shgroup_uniform_float(grp, "gridSteps", grid_steps_default, 8);
- if (shd->zneg_flag & SHOW_AXIS_Z) {
- DRW_shgroup_call(grp, geom, NULL);
- }
+ {
+ DRWShadingGroup *grp;
- grp = DRW_shgroup_create(sh, psl->grid_ps);
- DRW_shgroup_uniform_int(grp, "gridFlag", &shd->grid_flag, 1);
- DRW_shgroup_uniform_float_copy(grp, "zoomFactor", shd->zoom_factor);
- DRW_shgroup_uniform_vec3(grp, "planeAxes", shd->grid_axes, 1);
- DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
- DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
- DRW_shgroup_uniform_float_copy(grp, "lineKernel", line_zero);
- DRW_shgroup_uniform_float(grp, "gridSteps", shd->grid_steps, ARRAY_SIZE(shd->grid_steps));
- if (shd->grid_flag) {
- DRW_shgroup_call(grp, geom, NULL);
- }
+ sh = OVERLAY_shader_grid();
- grp = DRW_shgroup_create(sh, psl->grid_ps);
- DRW_shgroup_uniform_int(grp, "gridFlag", &shd->zpos_flag, 1);
- DRW_shgroup_uniform_vec3(grp, "planeAxes", shd->zplane_axes, 1);
- DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
- DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
- DRW_shgroup_uniform_float_copy(grp, "lineKernel", line_zero);
- DRW_shgroup_uniform_float(grp, "gridSteps", grid_steps_default, 8);
- if (shd->zpos_flag & SHOW_AXIS_Z) {
- DRW_shgroup_call(grp, geom, NULL);
+ /* Create 3 quads to render ordered transparency Z axis */
+ grp = DRW_shgroup_create(sh, psl->grid_ps);
+ DRW_shgroup_uniform_block(grp, "grid_buf", ved->instance->grid_ubo);
+ DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
+ DRW_shgroup_uniform_texture_ref(grp, "depth_tx", &dtxl->depth);
+
+ DRW_shgroup_uniform_int_copy(grp, "grid_flag", pd->grid.zneg_flag);
+ DRW_shgroup_uniform_vec3_copy(grp, "plane_axes", pd->grid.zplane_axes);
+ if (pd->grid.zneg_flag & SHOW_AXIS_Z) {
+ DRW_shgroup_call(grp, geom, NULL);
+ }
+
+ grp = DRW_shgroup_create_sub(grp);
+ DRW_shgroup_uniform_int_copy(grp, "grid_flag", pd->grid.grid_flag);
+ DRW_shgroup_uniform_vec3_copy(grp, "plane_axes", pd->grid.grid_axes);
+ if (pd->grid.grid_flag) {
+ DRW_shgroup_call(grp, geom, NULL);
+ }
+
+ grp = DRW_shgroup_create_sub(grp);
+ DRW_shgroup_uniform_int_copy(grp, "grid_flag", pd->grid.zpos_flag);
+ DRW_shgroup_uniform_vec3_copy(grp, "plane_axes", pd->grid.zplane_axes);
+ if (pd->grid.zpos_flag & SHOW_AXIS_Z) {
+ DRW_shgroup_call(grp, geom, NULL);
+ }
}
if (pd->space_type == SPACE_IMAGE) {
@@ -293,12 +285,12 @@ void OVERLAY_grid_cache_init(OVERLAY_Data *vedata)
float mat[4][4];
/* add wire border */
sh = OVERLAY_shader_grid_image();
- grp = DRW_shgroup_create(sh, psl->grid_ps);
+ DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->grid_ps);
DRW_shgroup_uniform_vec4_copy(grp, "color", theme_color);
unit_m4(mat);
- for (int x = 0; x < shd->grid_size[0]; x++) {
+ for (int x = 0; x < grid->size[0]; x++) {
mat[3][0] = x;
- for (int y = 0; y < shd->grid_size[1]; y++) {
+ for (int y = 0; y < grid->size[1]; y++) {
mat[3][1] = y;
DRW_shgroup_call_obmat(grp, DRW_cache_quad_wires_get(), mat);
}