Blender  V3.3
workbench_volume_info.hh
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
4 
5 /* -------------------------------------------------------------------- */
9 GPU_SHADER_CREATE_INFO(workbench_volume)
10  .vertex_in(0, Type::VEC3, "pos")
11  .fragment_out(0, Type::VEC4, "fragColor")
12  .sampler(0, ImageType::DEPTH_2D, "depthBuffer")
13  .sampler(1, ImageType::FLOAT_3D, "densityTexture")
14  .push_constant(Type::INT, "samplesLen")
15  .push_constant(Type::FLOAT, "noiseOfs")
16  .push_constant(Type::FLOAT, "stepLength")
17  .push_constant(Type::FLOAT, "densityScale")
18  .vertex_source("workbench_volume_vert.glsl")
19  .fragment_source("workbench_volume_frag.glsl")
20  .additional_info("draw_object_infos");
21 
24 /* -------------------------------------------------------------------- */
28 GPU_SHADER_CREATE_INFO(workbench_volume_smoke)
29  .define("VOLUME_SMOKE")
30  .sampler(2, ImageType::FLOAT_3D, "flameTexture")
31  .sampler(3, ImageType::FLOAT_1D, "flameColorTexture")
32  .additional_info("draw_mesh", "draw_resource_id_varying");
33 
34 GPU_SHADER_CREATE_INFO(workbench_volume_object)
35  .define("VOLUME_OBJECT")
36  .push_constant(Type::MAT4, "volumeTextureToObject")
37  /* FIXME(fclem): This overflow the push_constant limit. */
38  .push_constant(Type::MAT4, "volumeObjectToTexture")
39  .additional_info("draw_volume", "draw_resource_id_varying");
40 
43 /* -------------------------------------------------------------------- */
47 GPU_SHADER_CREATE_INFO(workbench_volume_coba)
48  .define("USE_COBA")
49  .sampler(4, ImageType::UINT_3D, "flagTexture")
50  .sampler(5, ImageType::FLOAT_1D, "transferTexture")
51  .push_constant(Type::BOOL, "showPhi")
52  .push_constant(Type::BOOL, "showFlags")
53  .push_constant(Type::BOOL, "showPressure")
54  .push_constant(Type::FLOAT, "gridScale");
55 
56 GPU_SHADER_CREATE_INFO(workbench_volume_no_coba)
57  .sampler(4, ImageType::FLOAT_3D, "shadowTexture")
58  .push_constant(Type::VEC3, "activeColor");
59 
62 /* -------------------------------------------------------------------- */
66 GPU_SHADER_CREATE_INFO(workbench_volume_linear).define("USE_TRILINEAR");
67 GPU_SHADER_CREATE_INFO(workbench_volume_cubic).define("USE_TRICUBIC");
68 GPU_SHADER_CREATE_INFO(workbench_volume_closest).define("USE_CLOSEST");
69 
72 /* -------------------------------------------------------------------- */
76 GPU_SHADER_INTERFACE_INFO(workbench_volume_iface, "").smooth(Type::VEC3, "localPos");
77 
78 GPU_SHADER_CREATE_INFO(workbench_volume_slice)
79  .define("VOLUME_SLICE")
80  .vertex_in(1, Type::VEC3, "uvs")
81  .vertex_out(workbench_volume_iface)
82  .push_constant(Type::INT, "sliceAxis") /* -1 is no slice. */
83  .push_constant(Type::FLOAT, "slicePosition");
84 
87 /* -------------------------------------------------------------------- */
91 #define WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix, ...) \
92  GPU_SHADER_CREATE_INFO(prefix##_slice) \
93  .additional_info("workbench_volume_slice", __VA_ARGS__) \
94  .do_static_compilation(true); \
95  GPU_SHADER_CREATE_INFO(prefix##_no_slice) \
96  .additional_info(__VA_ARGS__) \
97  .do_static_compilation(true);
98 
99 #define WORKBENCH_VOLUME_COBA_VARIATIONS(prefix, ...) \
100  WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix##_coba, "workbench_volume_coba", __VA_ARGS__) \
101  WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix##_no_coba, "workbench_volume_no_coba", __VA_ARGS__)
102 
103 #define WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix, ...) \
104  WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_linear, "workbench_volume_linear", __VA_ARGS__) \
105  WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_cubic, "workbench_volume_cubic", __VA_ARGS__) \
106  WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_closest, "workbench_volume_closest", __VA_ARGS__)
107 
108 #define WORKBENCH_VOLUME_SMOKE_VARIATIONS(prefix, ...) \
109  WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix##_smoke, "workbench_volume_smoke", __VA_ARGS__) \
110  WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix##_object, "workbench_volume_object", __VA_ARGS__)
111 
112 WORKBENCH_VOLUME_SMOKE_VARIATIONS(workbench_volume, "workbench_volume")
113 
114 
#define GPU_SHADER_INTERFACE_INFO(_interface, _inst_name)
@ FLOAT
#define WORKBENCH_VOLUME_SMOKE_VARIATIONS(prefix,...)
GPU_SHADER_CREATE_INFO(workbench_volume_linear).define("USE_TRILINEAR")