diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2021-10-14 12:27:30 +0300 |
---|---|---|
committer | Philipp Oeser <info@graphics-engineer.com> | 2021-11-02 14:38:09 +0300 |
commit | 71799d46b4be335e2e0f62fb345e8e549503c50c (patch) | |
tree | 216d6a7a70a040428d45a794bb1c16631915e6b7 /source/blender/draw/engines/overlay/shaders/image_vert.glsl | |
parent | dff17b0893c5c8c23c68531557109d1f053933ac (diff) |
Fix T91398 Overlay: Camera BG jitter offset (regression)
This was caused by camera background being rendered in world space, causing
floating point imprecision issues when camera was far from origin.
Adding a uniform to change vertex shader to process everything in viewspace
to fix the problem.
Diffstat (limited to 'source/blender/draw/engines/overlay/shaders/image_vert.glsl')
-rw-r--r-- | source/blender/draw/engines/overlay/shaders/image_vert.glsl | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/source/blender/draw/engines/overlay/shaders/image_vert.glsl b/source/blender/draw/engines/overlay/shaders/image_vert.glsl index 621e1d8068b..a44ea7081ba 100644 --- a/source/blender/draw/engines/overlay/shaders/image_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/image_vert.glsl @@ -1,5 +1,6 @@ uniform bool depthSet; +uniform bool isCameraBackground; in vec3 pos; @@ -7,8 +8,14 @@ out vec2 uvs; void main() { - vec3 world_pos = point_object_to_world(pos); - gl_Position = point_world_to_ndc(world_pos); + if (isCameraBackground) { + vec3 vP = (ModelMatrix * vec4(pos, 1.0)).xyz; + gl_Position = point_view_to_ndc(vP); + } + else { + vec3 world_pos = point_object_to_world(pos); + gl_Position = point_world_to_ndc(world_pos); + } if (depthSet) { /* Result in a position at 1.0 (far plane). Small epsilon to avoid precision issue. |