13 .vertex_in(0, Type::VEC3,
"pos")
14 .vertex_in(1, Type::VEC3,
"nor")
15 .vertex_in(2, Type::VEC4,
"ac")
16 .vertex_in(3, Type::VEC2,
"au")
17 .vertex_source(
"workbench_prepass_vert.glsl")
18 .additional_info(
"draw_modelmat_new_with_custom_id",
"draw_resource_handle_new");
23 .push_constant(Type::INT,
"emitter_object_id")
24 .vertex_source(
"workbench_prepass_hair_vert.glsl")
25 .additional_info(
"draw_modelmat_new_with_custom_id",
26 "draw_resource_handle_new",
30 .vertex_source(
"workbench_prepass_pointcloud_vert.glsl")
31 .additional_info(
"draw_modelmat_new_with_custom_id",
32 "draw_resource_handle_new",
33 "draw_pointcloud_new");
44 .define(
"WORKBENCH_LIGHTING_MATCAP")
54 .smooth(Type::VEC3,
"normal_interp")
55 .smooth(Type::VEC3,
"color_interp")
56 .smooth(Type::FLOAT,
"alpha_interp")
57 .smooth(Type::VEC2,
"uv_interp")
58 .flat(Type::INT,
"object_id")
59 .flat(Type::FLOAT,
"_roughness")
60 .flat(Type::FLOAT,
"metallic");
63 .define(
"WORKBENCH_COLOR_MATERIAL")
67 .define(
"WORKBENCH_COLOR_TEXTURE")
68 .define(
"WORKBENCH_TEXTURE_IMAGE_ARRAY")
69 .define(
"WORKBENCH_COLOR_MATERIAL")
73 .sampler(
WB_TILE_DATA_SLOT, ImageType::FLOAT_1D_ARRAY,
"imageTileData", Frequency::BATCH)
74 .push_constant(Type::BOOL,
"isImageTile")
75 .push_constant(Type::BOOL,
"imagePremult")
76 .push_constant(Type::FLOAT,
"imageTransparencyCutoff");
81 .define(
"WORKBENCH_NEXT")
83 .vertex_out(workbench_material_iface)
84 .additional_info(
"draw_view");
95 .fragment_out(0, Type::VEC4,
"out_transparent_accum")
96 .fragment_out(1, Type::VEC4,
"out_revealage_accum")
97 .fragment_out(2, Type::UINT,
"out_object_id")
98 .push_constant(Type::BOOL,
"forceShadowing")
99 .typedef_source(
"workbench_shader_shared.h")
100 .fragment_source(
"workbench_transparent_accum_frag.glsl");
103 .fragment_out(0, Type::VEC4,
"out_material")
104 .fragment_out(1, Type::VEC2,
"out_normal")
105 .fragment_out(2, Type::UINT,
"out_object_id")
106 .typedef_source(
"workbench_shader_shared.h")
107 .fragment_source(
"workbench_prepass_frag.glsl");
119#define WORKBENCH_FINAL_VARIATION(name, ...) \
120 GPU_SHADER_CREATE_INFO(name).additional_info(__VA_ARGS__).do_static_compilation(true);
122#define WORKBENCH_CLIPPING_VARIATIONS(prefix, ...) \
123 WORKBENCH_FINAL_VARIATION(prefix##_clip, "drw_clipped", __VA_ARGS__) \
124 WORKBENCH_FINAL_VARIATION(prefix##_no_clip, __VA_ARGS__)
126#define WORKBENCH_COLOR_VARIATIONS(prefix, ...) \
127 WORKBENCH_CLIPPING_VARIATIONS(prefix##_material, "workbench_color_material", __VA_ARGS__) \
128 WORKBENCH_CLIPPING_VARIATIONS(prefix##_texture, "workbench_color_texture", __VA_ARGS__) \
129 WORKBENCH_CLIPPING_VARIATIONS(prefix##_vertex, "workbench_color_vertex", __VA_ARGS__)
131#define WORKBENCH_SHADING_VARIATIONS(prefix, ...) \
132 WORKBENCH_COLOR_VARIATIONS(prefix##_flat, "workbench_lighting_flat", __VA_ARGS__) \
133 WORKBENCH_COLOR_VARIATIONS(prefix##_studio, "workbench_lighting_studio", __VA_ARGS__) \
134 WORKBENCH_COLOR_VARIATIONS(prefix##_matcap, "workbench_lighting_matcap", __VA_ARGS__)
136#define WORKBENCH_PIPELINE_VARIATIONS(prefix, ...) \
137 WORKBENCH_SHADING_VARIATIONS(prefix##_transparent, "workbench_transparent_accum", __VA_ARGS__) \
138 WORKBENCH_SHADING_VARIATIONS(prefix##_opaque, "workbench_opaque", __VA_ARGS__)
140#define WORKBENCH_GEOMETRY_VARIATIONS(prefix, ...) \
141 WORKBENCH_PIPELINE_VARIATIONS(prefix##_mesh, "workbench_mesh", __VA_ARGS__) \
142 WORKBENCH_PIPELINE_VARIATIONS(prefix##_curves, "workbench_curves", __VA_ARGS__) \
143 WORKBENCH_PIPELINE_VARIATIONS(prefix##_ptcloud, "workbench_pointcloud", __VA_ARGS__)
147#undef WORKBENCH_FINAL_VARIATION
148#undef WORKBENCH_CLIPPING_VARIATIONS
149#undef WORKBENCH_TEXTURE_VARIATIONS
150#undef WORKBENCH_DATATYPE_VARIATIONS
151#undef WORKBENCH_PIPELINE_VARIATIONS
#define GPU_SHADER_INTERFACE_INFO(_interface, _inst_name)
#define GPU_SHADER_CREATE_INFO(_info)
#define WB_TILE_DATA_SLOT
#define WB_CURVES_COLOR_SLOT
#define WB_CURVES_UV_SLOT
#define WB_TILE_ARRAY_SLOT
#define WORKBENCH_GEOMETRY_VARIATIONS(prefix,...)