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/editors/uvedit/uvedit_draw.c')
-rw-r--r--source/blender/editors/uvedit/uvedit_draw.c58
1 files changed, 31 insertions, 27 deletions
diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c
index df8d3cfb8db..044fca2310c 100644
--- a/source/blender/editors/uvedit/uvedit_draw.c
+++ b/source/blender/editors/uvedit/uvedit_draw.c
@@ -237,10 +237,10 @@ static void draw_uvs_shadow(SpaceImage *sima,
if (edges) {
if (sima->flag & SI_SMOOTH_UV) {
GPU_line_smooth(true);
- GPU_blend(true);
+ GPU_blend(GPU_BLEND_ALPHA);
}
else if (overlay_alpha < 1.0f) {
- GPU_blend(true);
+ GPU_blend(GPU_BLEND_ALPHA);
}
col[3] = overlay_alpha;
@@ -250,10 +250,10 @@ static void draw_uvs_shadow(SpaceImage *sima,
if (sima->flag & SI_SMOOTH_UV) {
GPU_line_smooth(false);
- GPU_blend(false);
+ GPU_blend(GPU_BLEND_NONE);
}
else if (overlay_alpha < 1.0f) {
- GPU_blend(false);
+ GPU_blend(GPU_BLEND_NONE);
}
}
}
@@ -288,10 +288,6 @@ static void draw_uvs_texpaint(const Scene *scene, Object *ob, Depsgraph *depsgra
uint idx = 0;
bool prev_ma_match = (mpoly->mat_nr == (ob_eval->actcol - 1));
- GPU_matrix_bind(geom->interface);
- GPU_shader_set_srgb_uniform(geom->interface);
- GPU_batch_bind(geom);
-
/* TODO(fclem): If drawcall count becomes a problem in the future
* we can use multi draw indirect drawcalls for this.
* (not implemented in GPU module at the time of writing). */
@@ -299,7 +295,7 @@ static void draw_uvs_texpaint(const Scene *scene, Object *ob, Depsgraph *depsgra
bool ma_match = (mpoly->mat_nr == (ob_eval->actcol - 1));
if (ma_match != prev_ma_match) {
if (ma_match == false) {
- GPU_batch_draw_advanced(geom, draw_start, idx - draw_start, 0, 0);
+ GPU_batch_draw_range(geom, draw_start, idx - draw_start);
}
else {
draw_start = idx;
@@ -309,10 +305,8 @@ static void draw_uvs_texpaint(const Scene *scene, Object *ob, Depsgraph *depsgra
prev_ma_match = ma_match;
}
if (prev_ma_match == true) {
- GPU_batch_draw_advanced(geom, draw_start, idx - draw_start, 0, 0);
+ GPU_batch_draw_range(geom, draw_start, idx - draw_start);
}
-
- GPU_batch_program_use_end(geom);
}
else {
GPU_batch_draw(geom);
@@ -355,8 +349,7 @@ static void draw_uvs(SpaceImage *sima,
interpedges = (ts->uv_selectmode == UV_SELECT_VERTEX);
}
- GPU_blend_set_func_separate(
- GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA);
+ GPU_blend(GPU_BLEND_ALPHA);
if (batch->faces) {
GPU_batch_program_set_builtin(batch->faces,
@@ -366,7 +359,7 @@ static void draw_uvs(SpaceImage *sima,
GPU_SHADER_2D_UV_FACES);
if (!draw_stretch) {
- GPU_blend(true);
+ GPU_blend(GPU_BLEND_ALPHA);
UI_GetThemeColor4fv(TH_FACE, col1);
UI_GetThemeColor4fv(TH_FACE_SELECT, col2);
@@ -393,16 +386,16 @@ static void draw_uvs(SpaceImage *sima,
GPU_batch_draw(batch->faces);
if (!draw_stretch) {
- GPU_blend(false);
+ GPU_blend(GPU_BLEND_NONE);
}
}
if (batch->edges) {
if (sima->flag & SI_SMOOTH_UV) {
GPU_line_smooth(true);
- GPU_blend(true);
+ GPU_blend(GPU_BLEND_ALPHA);
}
else if (overlay_alpha < 1.0f) {
- GPU_blend(true);
+ GPU_blend(GPU_BLEND_ALPHA);
}
{
@@ -455,24 +448,26 @@ static void draw_uvs(SpaceImage *sima,
}
col1[3] = overlay_alpha;
+ GPU_batch_program_set_builtin(batch->edges, shader);
+
/* Inner Line. Use depth test to insure selection is drawn on top. */
- GPU_depth_test(true);
+ GPU_depth_test(GPU_DEPTH_LESS_EQUAL);
GPU_line_width(1.0f);
GPU_batch_uniform_4fv(batch->edges, "edgeColor", col1);
GPU_batch_uniform_4fv(batch->edges, "selectColor", col2);
GPU_batch_uniform_1f(batch->edges, "dashWidth", dash_width);
GPU_batch_draw(batch->edges);
- GPU_depth_test(false);
+ GPU_depth_test(GPU_DEPTH_NONE);
GPU_provoking_vertex(GPU_VERTEX_LAST);
}
if (sima->flag & SI_SMOOTH_UV) {
GPU_line_smooth(false);
- GPU_blend(false);
+ GPU_blend(GPU_BLEND_NONE);
}
else if (overlay_alpha < 1.0f) {
- GPU_blend(false);
+ GPU_blend(GPU_BLEND_NONE);
}
}
@@ -482,7 +477,7 @@ static void draw_uvs(SpaceImage *sima,
const float point_size = UI_GetThemeValuef(TH_VERTEX_SIZE);
const float pinned_col[4] = {1.0f, 0.0f, 0.0f, 1.0f}; /* TODO Theme? */
UI_GetThemeColor4fv(TH_VERTEX, col1);
- GPU_blend(true);
+ GPU_blend(GPU_BLEND_ALPHA);
GPU_program_point_size(true);
GPU_batch_program_set_builtin(batch->verts, GPU_SHADER_2D_UV_VERTS);
@@ -491,7 +486,12 @@ static void draw_uvs(SpaceImage *sima,
GPU_batch_uniform_4fv(batch->verts, "pinnedColor", pinned_col);
GPU_batch_uniform_1f(batch->verts, "pointSize", (point_size + 1.5f) * M_SQRT2);
GPU_batch_uniform_1f(batch->verts, "outlineWidth", 0.75f);
- GPU_batch_draw(batch->verts);
+
+ /* #GPU_batch_draw_advanced is needed as unbinding the shader and redrawing
+ * causes the vertices not to draw at the right size. */
+ GPU_shader_bind(batch->verts->shader);
+
+ GPU_batch_draw_advanced(batch->verts, 0, 0, 0, 0);
/* We have problem in this mode when face order make some verts
* appear unselected because an adjacent face is not selected and
@@ -500,9 +500,13 @@ static void draw_uvs(SpaceImage *sima,
* on top. A bit overkill but it's simple. */
GPU_batch_uniform_4fv(batch->verts, "vertColor", transparent);
GPU_batch_uniform_4fv(batch->verts, "selectColor", col2);
- GPU_batch_draw(batch->verts);
- GPU_blend(false);
+ GPU_batch_draw_advanced(batch->verts, 0, 0, 0, 0);
+
+ GPU_shader_unbind();
+ /* Finish #GPU_batch_draw_advanced drawing. */
+
+ GPU_blend(GPU_BLEND_NONE);
GPU_program_point_size(false);
}
if (batch->facedots) {
@@ -557,8 +561,8 @@ void ED_uvedit_draw_main(SpaceImage *sima,
Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
view_layer, ((View3D *)NULL), &objects_len);
if (objects_len > 0) {
+ GPU_depth_mask(true);
GPU_clear_depth(1.0f);
- GPU_clear(GPU_DEPTH_BIT);
}
/* go over all objects and create the batches + add their areas to the total */