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-05-23 17:56:53 +0300
committerLuca Rood <dev@lucarood.com>2017-05-23 19:39:22 +0300
commit9bc88b69d81fc1839733c0ffb7179fba22d9920c (patch)
tree81f49b619b93ba1ea28341865e85b75bcbdbec50 /source/blender/draw/modes
parent99c6601a1ffe744ef8592de5da5920156a1097a6 (diff)
Implement particle velocity and acceleration visualization
Diffstat (limited to 'source/blender/draw/modes')
-rw-r--r--source/blender/draw/modes/object_mode.c5
-rw-r--r--source/blender/draw/modes/shaders/object_particle_dot_frag.glsl19
-rw-r--r--source/blender/draw/modes/shaders/object_particle_dot_vert.glsl5
-rw-r--r--source/blender/draw/modes/shaders/object_particle_prim_frag.glsl9
-rw-r--r--source/blender/draw/modes/shaders/object_particle_prim_vert.glsl3
5 files changed, 38 insertions, 3 deletions
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 0259e1055af..05c9488ba82 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -43,6 +43,7 @@
#include "BKE_global.h"
#include "BKE_particle.h"
#include "BKE_image.h"
+#include "BKE_texture.h"
#include "ED_view3d.h"
#include "ED_view3d.h"
@@ -57,6 +58,7 @@
#include "draw_common.h"
extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
+extern struct GPUTexture *globals_ramp; /* draw_common.c */
extern GlobalsUboStorage ts;
extern char datatoc_object_outline_resolve_frag_glsl[];
@@ -1414,6 +1416,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
DRW_shgroup_uniform_vec3(shgrp, "color", ma ? &ma->r : def_prim_col, 1);
DRW_shgroup_uniform_vec3(shgrp, "outlineColor", ma ? &ma->specr : def_sec_col, 1);
DRW_shgroup_uniform_short_to_int(shgrp, "size", &part->draw_size, 1);
+ DRW_shgroup_uniform_texture(shgrp, "ramp", globals_ramp);
DRW_shgroup_call_add(shgrp, geom, mat);
break;
case PART_DRAW_CROSS:
@@ -1435,9 +1438,11 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
if (draw_as != PART_DRAW_DOT) {
DRW_shgroup_attrib_float(shgrp, "pos", 3);
DRW_shgroup_attrib_float(shgrp, "rot", 4);
+ DRW_shgroup_attrib_float(shgrp, "val", 1);
DRW_shgroup_uniform_vec3(shgrp, "color", &ma->r, 1);
DRW_shgroup_uniform_short_to_int(shgrp, "draw_size", &part->draw_size, 1);
DRW_shgroup_uniform_float(shgrp, "pixel_size", DRW_viewport_pixelsize_get(), 1);
+ DRW_shgroup_uniform_texture(shgrp, "ramp", globals_ramp);
DRW_shgroup_instance_batch(shgrp, geom);
}
}
diff --git a/source/blender/draw/modes/shaders/object_particle_dot_frag.glsl b/source/blender/draw/modes/shaders/object_particle_dot_frag.glsl
index 044a949ef98..e8bf7884701 100644
--- a/source/blender/draw/modes/shaders/object_particle_dot_frag.glsl
+++ b/source/blender/draw/modes/shaders/object_particle_dot_frag.glsl
@@ -1,8 +1,11 @@
uniform vec3 color;
uniform vec3 outlineColor;
+uniform sampler1D ramp;
in vec4 radii;
+flat in float finalVal;
+
out vec4 fragColor;
void main() {
@@ -23,11 +26,23 @@ void main() {
float midStroke = 0.5 * (radii[1] + radii[2]);
if (dist > midStroke) {
- fragColor.rgb = outlineColor;
+ if (finalVal < 0.0) {
+ fragColor.rgb = outlineColor;
+ }
+ else {
+ fragColor.rgb = texture(ramp, finalVal).rgb;
+ }
+
fragColor.a = mix(1.0, 0.0, smoothstep(radii[1], radii[0], dist));
}
else {
- fragColor.rgb = mix(color, outlineColor, smoothstep(radii[3], radii[2], dist));
+ if (finalVal < 0.0) {
+ fragColor.rgb = mix(color, outlineColor, smoothstep(radii[3], radii[2], dist));
+ }
+ else {
+ fragColor.rgb = texture(ramp, finalVal).rgb;
+ }
+
fragColor.a = 1.0;
}
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 36b665173f1..7b163dbdc31 100644
--- a/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl
+++ b/source/blender/draw/modes/shaders/object_particle_dot_vert.glsl
@@ -3,7 +3,10 @@ uniform mat4 ModelViewProjectionMatrix;
uniform int size;
in vec3 pos;
+in float val;
+
out vec4 radii;
+flat out float finalVal;
void main() {
gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
@@ -20,4 +23,6 @@ void main() {
// convert to PointCoord units
radii /= size;
+
+ finalVal = val;
}
diff --git a/source/blender/draw/modes/shaders/object_particle_prim_frag.glsl b/source/blender/draw/modes/shaders/object_particle_prim_frag.glsl
index 791d38390a2..0e58d70b69b 100644
--- a/source/blender/draw/modes/shaders/object_particle_prim_frag.glsl
+++ b/source/blender/draw/modes/shaders/object_particle_prim_frag.glsl
@@ -1,14 +1,21 @@
uniform vec3 color;
+uniform sampler1D ramp;
flat in int finalAxis;
+flat in float finalVal;
out vec4 fragColor;
void main()
{
if (finalAxis == -1) {
- fragColor.rgb = color;
+ if (finalVal < 0.0) {
+ fragColor.rgb = color;
+ }
+ else {
+ fragColor.rgb = texture(ramp, finalVal).rgb;
+ }
}
else {
fragColor.rgb = vec3(0.0);
diff --git a/source/blender/draw/modes/shaders/object_particle_prim_vert.glsl b/source/blender/draw/modes/shaders/object_particle_prim_vert.glsl
index ff16f61b884..7b328c73de3 100644
--- a/source/blender/draw/modes/shaders/object_particle_prim_vert.glsl
+++ b/source/blender/draw/modes/shaders/object_particle_prim_vert.glsl
@@ -9,10 +9,12 @@ uniform int draw_size;
in vec3 pos;
in vec4 rot;
+in float val;
in vec3 inst_pos;
in int axis;
flat out int finalAxis;
+flat out float finalVal;
vec3 rotate(vec3 vec, vec4 quat)
{
@@ -46,4 +48,5 @@ void main()
}
finalAxis = axis;
+ finalVal = val;
}