diff options
author | Sriharsha Kotcharlakot <k.venkatsriharsha@gmail.com> | 2020-09-15 18:51:14 +0300 |
---|---|---|
committer | Sriharsha Kotcharlakot <k.venkatsriharsha@gmail.com> | 2020-09-15 20:43:01 +0300 |
commit | f137022f9919f4dd315ec6b325a08e1bf5aec6fb (patch) | |
tree | 4b15aa230eb100e77b41dfffb8ef5e7501c55db5 /source/blender/draw/engines/overlay/overlay_shader.c | |
parent | bedbd8655ed1d331aeaf756874c46dbed93168a1 (diff) |
Liquid Simulation Display Options (GSoC 2020)
All the changes made in the branch `soc-2020-fluid-tools` are included in this patch.
**Major changes:**
=== Viewport Display ===
- //Raw voxel display// or //closest (nearest-neighbor)// interpolation for displaying the underlying voxel data of the simulation grids more clearly.
- An option to display //gridlines// when the slicing method is //single//.
==== Grid Display ====
- Visualization for flags, pressure and level-set representation grids with a fixed color coding based on Manta GUI.
==== Vector Display ====
- //**M**arker **A**nd **C**ell// grid visualization options for vector grids like velocity or external forces.
- Made vector display options available for external forces.
==== Coloring options for //gridlines// ====
- Range highlighting and cell filtering options for displaying the simulation grid data more precisely.
- Color gridlines with flags.
- Also, made slicing and interpolation options available for Volume Object.
Reviewed By: JacquesLucke, sebbas
Differential Revision: https://developer.blender.org/D8705
Diffstat (limited to 'source/blender/draw/engines/overlay/overlay_shader.c')
-rw-r--r-- | source/blender/draw/engines/overlay/overlay_shader.c | 65 |
1 files changed, 63 insertions, 2 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c index 4530d6e8adf..5c1b7c786f4 100644 --- a/source/blender/draw/engines/overlay/overlay_shader.c +++ b/source/blender/draw/engines/overlay/overlay_shader.c @@ -115,6 +115,7 @@ extern char datatoc_particle_frag_glsl[]; extern char datatoc_sculpt_mask_vert_glsl[]; extern char datatoc_sculpt_mask_frag_glsl[]; extern char datatoc_volume_velocity_vert_glsl[]; +extern char datatoc_volume_gridlines_vert_glsl[]; extern char datatoc_wireframe_vert_glsl[]; extern char datatoc_wireframe_frag_glsl[]; extern char datatoc_xray_fade_frag_glsl[]; @@ -214,7 +215,11 @@ typedef struct OVERLAY_Shaders { GPUShader *sculpt_mask; GPUShader *uniform_color; GPUShader *volume_velocity_needle_sh; + GPUShader *volume_velocity_mac_sh; GPUShader *volume_velocity_sh; + GPUShader *volume_gridlines_sh; + GPUShader *volume_gridlines_flags_sh; + GPUShader *volume_gridlines_range_sh; GPUShader *wireframe_select; GPUShader *wireframe[2]; GPUShader *xray_fade; @@ -1414,7 +1419,7 @@ struct GPUShader *OVERLAY_shader_uniform_color(void) return sh_data->uniform_color; } -struct GPUShader *OVERLAY_shader_volume_velocity(bool use_needle) +struct GPUShader *OVERLAY_shader_volume_velocity(bool use_needle, bool use_mac) { OVERLAY_Shaders *sh_data = &e_data.sh_data[0]; if (use_needle && !sh_data->volume_velocity_needle_sh) { @@ -1426,6 +1431,15 @@ struct GPUShader *OVERLAY_shader_volume_velocity(bool use_needle) "#define blender_srgb_to_framebuffer_space(a) a\n" "#define USE_NEEDLE\n"); } + else if (use_mac && !sh_data->volume_velocity_mac_sh) { + sh_data->volume_velocity_mac_sh = DRW_shader_create_with_lib( + datatoc_volume_velocity_vert_glsl, + NULL, + datatoc_gpu_shader_3D_smooth_color_frag_glsl, + datatoc_common_view_lib_glsl, + "#define blender_srgb_to_framebuffer_space(a) a\n" + "#define USE_MAC\n"); + } else if (!sh_data->volume_velocity_sh) { sh_data->volume_velocity_sh = DRW_shader_create_with_lib( datatoc_volume_velocity_vert_glsl, @@ -1434,7 +1448,54 @@ struct GPUShader *OVERLAY_shader_volume_velocity(bool use_needle) datatoc_common_view_lib_glsl, "#define blender_srgb_to_framebuffer_space(a) a\n"); } - return (use_needle) ? sh_data->volume_velocity_needle_sh : sh_data->volume_velocity_sh; + if (use_needle) { + return sh_data->volume_velocity_needle_sh; + } + if (use_mac) { + return sh_data->volume_velocity_mac_sh; + } + + return sh_data->volume_velocity_sh; +} + +struct GPUShader *OVERLAY_shader_volume_gridlines(bool color_with_flags, bool color_range) +{ + OVERLAY_Shaders *sh_data = &e_data.sh_data[0]; + if (!sh_data->volume_gridlines_flags_sh && color_with_flags) { + sh_data->volume_gridlines_flags_sh = DRW_shader_create_with_lib( + datatoc_volume_gridlines_vert_glsl, + NULL, + datatoc_gpu_shader_flat_color_frag_glsl, + datatoc_common_view_lib_glsl, + "#define blender_srgb_to_framebuffer_space(a) a\n" + "#define SHOW_FLAGS\n"); + } + else if (!sh_data->volume_gridlines_range_sh && color_range) { + sh_data->volume_gridlines_range_sh = DRW_shader_create_with_lib( + datatoc_volume_gridlines_vert_glsl, + NULL, + datatoc_gpu_shader_flat_color_frag_glsl, + datatoc_common_view_lib_glsl, + "#define blender_srgb_to_framebuffer_space(a) a\n" + "#define SHOW_RANGE\n"); + } + else if (!sh_data->volume_gridlines_sh) { + sh_data->volume_gridlines_sh = DRW_shader_create_with_lib( + datatoc_volume_gridlines_vert_glsl, + NULL, + datatoc_gpu_shader_flat_color_frag_glsl, + datatoc_common_view_lib_glsl, + "#define blender_srgb_to_framebuffer_space(a) a\n"); + } + + if (color_with_flags) { + return sh_data->volume_gridlines_flags_sh; + } + if (color_range) { + return sh_data->volume_gridlines_range_sh; + } + + return sh_data->volume_gridlines_sh; } GPUShader *OVERLAY_shader_wireframe_select(void) |