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:
authorAntonio Vazquez <blendergit@gmail.com>2020-01-23 18:56:26 +0300
committerAntonio Vazquez <blendergit@gmail.com>2020-01-23 18:56:26 +0300
commitfb671035be082a67e6ffc58fb098c0d5140ba6b0 (patch)
treed8befc157c786d22c4ae66aa490b990adc7958ef /source/blender/draw
parent8482ba6d2e1a97e038175a7fb693ed40c03ca5d9 (diff)
parentd9d11e2faf0502eab215f8f13661972f9b459d3a (diff)
Merge branch 'blender-v2.82-release'
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl14
-rw-r--r--source/blender/draw/engines/overlay/overlay_extra.c5
-rw-r--r--source/blender/draw/intern/draw_cache.c28
3 files changed, 29 insertions, 18 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl
index ca4940ceffb..5277bfa32bb 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl
@@ -41,6 +41,12 @@ float max_v4(vec4 v)
return max(max(v.x, v.y), max(v.z, v.w));
}
+vec4 safe_color(vec4 c)
+{
+ /* Clamp to avoid black square artifacts if a pixel goes NaN. */
+ return clamp(c, vec4(0.0), vec4(1e20)); /* 1e20 arbitrary. */
+}
+
#define THRESHOLD 1.0
#ifdef STEP_DOWNSAMPLE
@@ -57,10 +63,10 @@ void main(void)
ivec4 uvs = ivec4(gl_FragCoord.xyxy) * 2 + ivec4(0, 0, 1, 1);
/* custom downsampling */
- vec4 color1 = texelFetch(colorBuffer, uvs.xy, 0);
- vec4 color2 = texelFetch(colorBuffer, uvs.zw, 0);
- vec4 color3 = texelFetch(colorBuffer, uvs.zy, 0);
- vec4 color4 = texelFetch(colorBuffer, uvs.xw, 0);
+ vec4 color1 = safe_color(texelFetch(colorBuffer, uvs.xy, 0));
+ vec4 color2 = safe_color(texelFetch(colorBuffer, uvs.zw, 0));
+ vec4 color3 = safe_color(texelFetch(colorBuffer, uvs.zy, 0));
+ vec4 color4 = safe_color(texelFetch(colorBuffer, uvs.xw, 0));
/* Leverage SIMD by combining 4 depth samples into a vec4 */
vec4 depth;
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
index c5dc6860ac2..fc52efb0174 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.c
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -623,8 +623,9 @@ void OVERLAY_light_cache_populate(OVERLAY_Data *vedata, Object *ob)
copy_m4_m4(instdata.mat, ob->obmat);
/* FIXME / TODO: clipend has no meaning nowadays.
* In EEVEE, Only clipsta is used shadowmaping.
- * Clip end is computed automatically based on light power. */
- instdata.clip_end = la->clipend;
+ * Clip end is computed automatically based on light power.
+ * For now, always use the custom distance as clipend. */
+ instdata.clip_end = la->att_dist;
instdata.clip_sta = la->clipsta;
DRW_buffer_add_entry(cb->groundline, instdata.pos);
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
index a0e4af8fc8d..bfb74a9576f 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -1208,10 +1208,11 @@ GPUBatch *DRW_cache_field_curve_get(void)
GPUBatch *DRW_cache_field_tube_limit_get(void)
{
#define CIRCLE_RESOL 32
+#define SIDE_STIPPLE 32
if (!SHC.drw_field_tube_limit) {
GPUVertFormat format = extra_vert_format();
- int v_len = 2 * (CIRCLE_RESOL * 2 + 4);
+ int v_len = 2 * (CIRCLE_RESOL * 2 + 4 * SIDE_STIPPLE / 2);
GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format);
GPU_vertbuf_data_alloc(vbo, v_len);
@@ -1219,14 +1220,14 @@ GPUBatch *DRW_cache_field_tube_limit_get(void)
int flag = VCLASS_EMPTY_SIZE;
/* Caps */
for (int i = 0; i < 2; i++) {
- float z = (float)i * 2.0f - 1.0f;
- circle_verts(vbo, &v, CIRCLE_RESOL, 1.0f, z, flag);
+ float z = i * 2.0f - 1.0f;
+ circle_dashed_verts(vbo, &v, CIRCLE_RESOL, 1.0f, z, flag);
}
/* Side Edges */
for (int a = 0; a < 4; a++) {
- for (int i = 0; i < 2; i++) {
- float z = (float)i * 2.0f - 1.0f;
- float angle = (2.0f * M_PI * a) / 4.0f;
+ float angle = (2.0f * M_PI * a) / 4.0f;
+ for (int i = 0; i < SIDE_STIPPLE; i++) {
+ float z = (i / (float)SIDE_STIPPLE) * 2.0f - 1.0f;
GPU_vertbuf_vert_set(vbo, v++, &(Vert){{sinf(angle), cosf(angle), z}, flag});
}
}
@@ -1234,16 +1235,18 @@ GPUBatch *DRW_cache_field_tube_limit_get(void)
SHC.drw_field_tube_limit = GPU_batch_create_ex(GPU_PRIM_LINES, vbo, NULL, GPU_BATCH_OWNS_VBO);
}
return SHC.drw_field_tube_limit;
+#undef SIDE_STIPPLE
#undef CIRCLE_RESOL
}
GPUBatch *DRW_cache_field_cone_limit_get(void)
{
#define CIRCLE_RESOL 32
+#define SIDE_STIPPLE 32
if (!SHC.drw_field_cone_limit) {
GPUVertFormat format = extra_vert_format();
- int v_len = 2 * (CIRCLE_RESOL * 2 + 4);
+ int v_len = 2 * (CIRCLE_RESOL * 2 + 4 * SIDE_STIPPLE / 2);
GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format);
GPU_vertbuf_data_alloc(vbo, v_len);
@@ -1251,14 +1254,14 @@ GPUBatch *DRW_cache_field_cone_limit_get(void)
int flag = VCLASS_EMPTY_SIZE;
/* Caps */
for (int i = 0; i < 2; i++) {
- float z = (float)i * 2.0f - 1.0f;
- circle_verts(vbo, &v, CIRCLE_RESOL, 1.0f, z, flag);
+ float z = i * 2.0f - 1.0f;
+ circle_dashed_verts(vbo, &v, CIRCLE_RESOL, 1.0f, z, flag);
}
/* Side Edges */
for (int a = 0; a < 4; a++) {
- for (int i = 0; i < 2; i++) {
- float z = (float)i * 2.0f - 1.0f;
- float angle = (2.0f * M_PI * a) / 4.0f;
+ float angle = (2.0f * M_PI * a) / 4.0f;
+ for (int i = 0; i < SIDE_STIPPLE; i++) {
+ float z = (i / (float)SIDE_STIPPLE) * 2.0f - 1.0f;
GPU_vertbuf_vert_set(vbo, v++, &(Vert){{sinf(angle) * z, cosf(angle) * z, z}, flag});
}
}
@@ -1266,6 +1269,7 @@ GPUBatch *DRW_cache_field_cone_limit_get(void)
SHC.drw_field_cone_limit = GPU_batch_create_ex(GPU_PRIM_LINES, vbo, NULL, GPU_BATCH_OWNS_VBO);
}
return SHC.drw_field_cone_limit;
+#undef SIDE_STIPPLE
#undef CIRCLE_RESOL
}