Blender V5.0
workbench_composite_infos.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#ifdef GPU_SHADER
6# pragma once
8
9# include "gpu_shader_compat.hh"
10
12
13# include "draw_view_infos.hh"
15
16# define WORKBENCH_LIGHTING_STUDIO
17# define WORKBENCH_LIGHTING_MATCAP
18# define WORKBENCH_LIGHTING_FLAT
19# define WORKBENCH_CURVATURE
20# define WORKBENCH_CAVITY
21# define WORKBENCH_SHADOW
22#endif
23
25#include "workbench_defines.hh"
26
27/* -------------------------------------------------------------------- */
30
31GPU_SHADER_CREATE_INFO(workbench_composite)
32SAMPLER(3, sampler2DDepth, depth_tx)
33SAMPLER(4, sampler2D, normal_tx)
34SAMPLER(5, sampler2D, material_tx)
36TYPEDEF_SOURCE("workbench_shader_shared.hh")
37PUSH_CONSTANT(bool, force_shadowing)
38FRAGMENT_OUT(0, float4, frag_color)
39FRAGMENT_SOURCE("workbench_composite_frag.glsl")
40ADDITIONAL_INFO(gpu_fullscreen)
41ADDITIONAL_INFO(draw_view)
43
44/* Lighting */
45
46GPU_SHADER_CREATE_INFO(workbench_resolve_opaque_studio)
47DEFINE("WORKBENCH_LIGHTING_STUDIO")
49
50GPU_SHADER_CREATE_INFO(workbench_resolve_opaque_matcap)
51DEFINE("WORKBENCH_LIGHTING_MATCAP")
54
55GPU_SHADER_CREATE_INFO(workbench_resolve_opaque_flat)
56DEFINE("WORKBENCH_LIGHTING_FLAT")
58
59/* Effects */
60
61GPU_SHADER_CREATE_INFO(workbench_resolve_curvature)
62DEFINE("WORKBENCH_CURVATURE")
63SAMPLER(6, usampler2D, object_id_tx)
65
66GPU_SHADER_CREATE_INFO(workbench_resolve_cavity)
67DEFINE("WORKBENCH_CAVITY")
68/* TODO(@pragma37): GPU_SAMPLER_EXTEND_MODE_REPEAT is set in CavityEffect,
69 * it doesn't work here? */
70SAMPLER(7, sampler2D, jitter_tx)
71UNIFORM_BUF(5, float4, cavity_samples[512])
73
74GPU_SHADER_CREATE_INFO(workbench_resolve_shadow)
75DEFINE("WORKBENCH_SHADOW")
76SAMPLER(8, usampler2D, stencil_tx)
78
79/* Variations */
80
81#define WORKBENCH_RESOLVE_SHADOW_VARIATION(prefix, ...) \
82 CREATE_INFO_VARIANT(prefix##_shadow, workbench_resolve_shadow, __VA_ARGS__) \
83 CREATE_INFO_VARIANT(prefix##_no_shadow, __VA_ARGS__)
84
85#define WORKBENCH_CURVATURE_VARIATIONS(prefix, ...) \
86 WORKBENCH_RESOLVE_SHADOW_VARIATION( \
87 prefix##_curvature, workbench_resolve_curvature, __VA_ARGS__) \
88 WORKBENCH_RESOLVE_SHADOW_VARIATION(prefix##_no_curvature, __VA_ARGS__)
89
90#define WORKBENCH_CAVITY_VARIATIONS(prefix, ...) \
91 WORKBENCH_CURVATURE_VARIATIONS(prefix##_cavity, workbench_resolve_cavity, __VA_ARGS__) \
92 WORKBENCH_CURVATURE_VARIATIONS(prefix##_no_cavity, __VA_ARGS__)
93
94#define WORKBENCH_LIGHTING_VARIATIONS(prefix, ...) \
95 WORKBENCH_CAVITY_VARIATIONS( \
96 prefix##_opaque_studio, workbench_resolve_opaque_studio, __VA_ARGS__) \
97 WORKBENCH_CAVITY_VARIATIONS( \
98 prefix##_opaque_matcap, workbench_resolve_opaque_matcap, __VA_ARGS__) \
99 WORKBENCH_CAVITY_VARIATIONS(prefix##_opaque_flat, workbench_resolve_opaque_flat, __VA_ARGS__)
100
101WORKBENCH_LIGHTING_VARIATIONS(workbench_resolve, workbench_composite)
102
103#undef WORKBENCH_FINAL_VARIATION
104#undef WORKBENCH_CURVATURE_VARIATIONS
105#undef WORKBENCH_CAVITY_VARIATIONS
106#undef WORKBENCH_LIGHTING_VARIATIONS
107
#define GPU_SHADER_CREATE_INFO(_info)
#define GPU_SHADER_CREATE_END()
#define TYPEDEF_SOURCE(filename)
#define SAMPLER(slot, type, name)
#define UNIFORM_BUF(slot, type_name, name)
#define FRAGMENT_SOURCE(filename)
#define ADDITIONAL_INFO(info_name)
#define PUSH_CONSTANT(type, name)
#define DEFINE(name)
#define FRAGMENT_OUT(slot, type, name)
SamplerBase< float, 2, false, false, false, true > sampler2DDepth
SamplerBase< float, 2, false, true > sampler2DArray
SamplerBase< float, 2 > sampler2D
SamplerBase< uint, 2 > usampler2D
#define WORKBENCH_LIGHTING_VARIATIONS(prefix,...)
#define WB_MATCAP_SLOT
#define WB_WORLD_SLOT