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:
authorLuca Rood <dev@lucarood.com>2017-06-06 10:56:27 +0300
committerLuca Rood <dev@lucarood.com>2017-06-06 10:57:18 +0300
commit4e1257f2d86d71cd883803ea15a1bcb44aa661c7 (patch)
treef7201276dfa51452483040c7ac2bf01846c623fb /source/blender/draw/modes/shaders/object_particle_dot_vert.glsl
parent443904f1f4f9f0b45e4ef10ec4b5c9392559ada0 (diff)
Make particle size follow world space instead of screen space
Diffstat (limited to 'source/blender/draw/modes/shaders/object_particle_dot_vert.glsl')
-rw-r--r--source/blender/draw/modes/shaders/object_particle_dot_vert.glsl19
1 files changed, 13 insertions, 6 deletions
diff --git a/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl b/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl
index 7b163dbdc31..6dfc212a776 100644
--- a/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl
+++ b/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl
@@ -1,6 +1,8 @@
-uniform mat4 ModelViewProjectionMatrix;
-uniform int size;
+uniform mat4 ModelViewMatrix;
+uniform mat4 ProjectionMatrix;
+uniform float pixel_size;
+uniform float size;
in vec3 pos;
in float val;
@@ -9,11 +11,14 @@ out vec4 radii;
flat out float finalVal;
void main() {
- gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
- gl_PointSize = size;
+ gl_Position = ModelViewMatrix * vec4(pos, 1.0);
+
+ float psize = (ProjectionMatrix[3][3] == 0.0) ? (size / (-gl_Position.z * pixel_size)) : (size / pixel_size);
+
+ gl_PointSize = psize;
// calculate concentric radii in pixels
- float radius = 0.5 * size;
+ float radius = 0.5 * psize;
// start at the outside and progress toward the center
radii[0] = radius;
@@ -22,7 +27,9 @@ void main() {
radii[3] = radius - 2.0;
// convert to PointCoord units
- radii /= size;
+ radii /= psize;
+
+ gl_Position = ProjectionMatrix * gl_Position;
finalVal = val;
}