|
|
|
|
@@ -29,6 +29,8 @@
|
|
|
|
|
#include "ED_image.h"
|
|
|
|
|
#include "ED_view3d.h"
|
|
|
|
|
|
|
|
|
|
#include "UI_resources.h"
|
|
|
|
|
|
|
|
|
|
#include "overlay_private.h"
|
|
|
|
|
|
|
|
|
|
enum {
|
|
|
|
|
@@ -61,7 +63,8 @@ void OVERLAY_grid_init(OVERLAY_Data *vedata)
|
|
|
|
|
SpaceImage *sima = (SpaceImage *)draw_ctx->space_data;
|
|
|
|
|
shd->grid_flag = ED_space_image_has_buffer(sima) ? 0 : PLANE_IMAGE | SHOW_GRID;
|
|
|
|
|
shd->grid_distance = 1.0f;
|
|
|
|
|
shd->grid_mesh_size = 1.0f;
|
|
|
|
|
copy_v3_fl3(
|
|
|
|
|
shd->grid_size, (float)sima->tile_grid_shape[0], (float)sima->tile_grid_shape[1], 1.0f);
|
|
|
|
|
for (int step = 0; step < 8; step++) {
|
|
|
|
|
shd->grid_steps[step] = powf(4, step) * (1.0f / 16.0f);
|
|
|
|
|
}
|
|
|
|
|
@@ -169,11 +172,11 @@ void OVERLAY_grid_init(OVERLAY_Data *vedata)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (winmat[3][3] == 0.0f) {
|
|
|
|
|
shd->grid_mesh_size = dist;
|
|
|
|
|
copy_v3_fl(shd->grid_size, dist);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
float viewdist = 1.0f / min_ff(fabsf(winmat[0][0]), fabsf(winmat[1][1]));
|
|
|
|
|
shd->grid_mesh_size = viewdist * dist;
|
|
|
|
|
copy_v3_fl(shd->grid_size, viewdist * dist);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
shd->grid_distance = dist / 2.0f;
|
|
|
|
|
@@ -203,18 +206,19 @@ void OVERLAY_grid_cache_init(OVERLAY_Data *vedata)
|
|
|
|
|
struct GPUBatch *geom = DRW_cache_grid_get();
|
|
|
|
|
|
|
|
|
|
if (pd->is_image_editor) {
|
|
|
|
|
float mat[4][4];
|
|
|
|
|
|
|
|
|
|
/* add quad background */
|
|
|
|
|
sh = OVERLAY_shader_grid_image();
|
|
|
|
|
grp = DRW_shgroup_create(sh, psl->grid_ps);
|
|
|
|
|
DRW_shgroup_call(grp, DRW_cache_quad_get(), NULL);
|
|
|
|
|
float color_back[4];
|
|
|
|
|
interp_v4_v4v4(color_back, G_draw.block.colorBackground, G_draw.block.colorGrid, 0.5);
|
|
|
|
|
DRW_shgroup_uniform_vec4_copy(grp, "color", color_back);
|
|
|
|
|
|
|
|
|
|
/* add wire border */
|
|
|
|
|
grp = DRW_shgroup_create(sh, psl->grid_ps);
|
|
|
|
|
DRW_shgroup_call(grp, DRW_cache_quad_wires_get(), NULL);
|
|
|
|
|
DRW_shgroup_uniform_vec4_copy(grp, "color", G_draw.block.colorGrid);
|
|
|
|
|
unit_m4(mat);
|
|
|
|
|
mat[0][0] = shd->grid_size[0];
|
|
|
|
|
mat[1][1] = shd->grid_size[1];
|
|
|
|
|
mat[2][2] = shd->grid_size[2];
|
|
|
|
|
DRW_shgroup_call_obmat(grp, DRW_cache_quad_get(), mat);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sh = OVERLAY_shader_grid();
|
|
|
|
|
@@ -225,7 +229,7 @@ void OVERLAY_grid_cache_init(OVERLAY_Data *vedata)
|
|
|
|
|
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_float_copy(grp, "meshSize", shd->grid_mesh_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);
|
|
|
|
|
if (shd->zneg_flag) {
|
|
|
|
|
@@ -250,6 +254,26 @@ void OVERLAY_grid_cache_init(OVERLAY_Data *vedata)
|
|
|
|
|
if (shd->zpos_flag) {
|
|
|
|
|
DRW_shgroup_call(grp, geom, NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pd->is_image_editor) {
|
|
|
|
|
float theme_color[4];
|
|
|
|
|
UI_GetThemeColorShade4fv(TH_BACK, 60, theme_color);
|
|
|
|
|
srgb_to_linearrgb_v4(theme_color, theme_color);
|
|
|
|
|
|
|
|
|
|
float mat[4][4];
|
|
|
|
|
/* add wire border */
|
|
|
|
|
sh = OVERLAY_shader_grid_image();
|
|
|
|
|
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++) {
|
|
|
|
|
mat[3][0] = x;
|
|
|
|
|
for (int y = 0; y < shd->grid_size[1]; y++) {
|
|
|
|
|
mat[3][1] = y;
|
|
|
|
|
DRW_shgroup_call_obmat(grp, DRW_cache_quad_wires_get(), mat);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void OVERLAY_grid_draw(OVERLAY_Data *vedata)
|
|
|
|
|
|