77 const run_params& rparams);
92 const run_params& rparams)
96 const run_params& rparams)
100 const run_params& rparams)
115 void cache_uniforms()
117 cache_uniform(program.get(), u_data0,
"u_data0", gfx::uniform_type::Vec4);
118 cache_uniform(program.get(), u_data1,
"u_data1", gfx::uniform_type::Vec4);
119 cache_uniform(program.get(), s_tex[0],
"s_tex0", gfx::uniform_type::Sampler);
120 cache_uniform(program.get(), s_tex[1],
"s_tex1", gfx::uniform_type::Sampler);
121 cache_uniform(program.get(), s_tex[2],
"s_tex2", gfx::uniform_type::Sampler);
122 cache_uniform(program.get(), s_tex[3],
"s_tex3", gfx::uniform_type::Sampler);
123 cache_uniform(program.get(), s_tex[4],
"s_tex4", gfx::uniform_type::Sampler);
124 cache_uniform(program.get(), s_tex_cube,
"s_tex_cube", gfx::uniform_type::Sampler);
130 std::array<gfx::program::uniform_ptr, 5> s_tex;
133 std::unique_ptr<gpu_program> program;
136 struct box_ref_probe_program : ref_probe_program
138 void cache_uniforms()
140 ref_probe_program::cache_uniforms();
142 cache_uniform(program.get(), u_data2,
"u_data2", gfx::uniform_type::Vec4);
143 cache_uniform(program.get(), u_inv_world,
"u_inv_world", gfx::uniform_type::Mat4);
148 } box_ref_probe_program_;
150 struct sphere_ref_probe_program : ref_probe_program
152 } sphere_ref_probe_program_;
154 struct geom_program : uniforms_cache
156 void cache_uniforms()
158 cache_uniform(program.get(), s_tex_color,
"s_tex_color", gfx::uniform_type::Sampler);
159 cache_uniform(program.get(), s_tex_normal,
"s_tex_normal", gfx::uniform_type::Sampler);
160 cache_uniform(program.get(), s_tex_roughness,
"s_tex_roughness", gfx::uniform_type::Sampler);
161 cache_uniform(program.get(), s_tex_metalness,
"s_tex_metalness", gfx::uniform_type::Sampler);
162 cache_uniform(program.get(), s_tex_ao,
"s_tex_ao", gfx::uniform_type::Sampler);
163 cache_uniform(program.get(), s_tex_emissive,
"s_tex_emissive", gfx::uniform_type::Sampler);
165 cache_uniform(program.get(), u_base_color,
"u_base_color", gfx::uniform_type::Vec4);
166 cache_uniform(program.get(), u_subsurface_color,
"u_subsurface_color", gfx::uniform_type::Vec4);
167 cache_uniform(program.get(), u_emissive_color,
"u_emissive_color", gfx::uniform_type::Vec4);
168 cache_uniform(program.get(), u_surface_data,
"u_surface_data", gfx::uniform_type::Vec4);
169 cache_uniform(program.get(), u_tiling,
"u_tiling", gfx::uniform_type::Vec4);
170 cache_uniform(program.get(), u_dither_threshold,
"u_dither_threshold", gfx::uniform_type::Vec4);
171 cache_uniform(program.get(), u_surface_data2,
"u_surface_data2", gfx::uniform_type::Vec4);
173 cache_uniform(program.get(), u_camera_wpos,
"u_camera_wpos", gfx::uniform_type::Vec4);
174 cache_uniform(program.get(), u_camera_clip_planes,
"u_camera_clip_planes", gfx::uniform_type::Vec4);
175 cache_uniform(program.get(), u_lod_params,
"u_lod_params", gfx::uniform_type::Vec4);
197 std::unique_ptr<gpu_program> program;
200 geom_program geom_program_;
201 geom_program geom_program_skinned_;
202 geom_program geom_program_instanced_;
204 struct color_lighting : uniforms_cache
206 void cache_uniforms()
208 cache_uniform(program.get(), u_light_position,
"u_light_position", gfx::uniform_type::Vec4);
209 cache_uniform(program.get(), u_light_direction,
"u_light_direction", gfx::uniform_type::Vec4);
210 cache_uniform(program.get(), u_light_data,
"u_light_data", gfx::uniform_type::Vec4);
211 cache_uniform(program.get(), u_light_color_intensity,
"u_light_color_intensity", gfx::uniform_type::Vec4);
212 cache_uniform(program.get(), u_camera_position,
"u_camera_position", gfx::uniform_type::Vec4);
214 cache_uniform(program.get(), s_tex[0],
"s_tex0", gfx::uniform_type::Sampler);
215 cache_uniform(program.get(), s_tex[1],
"s_tex1", gfx::uniform_type::Sampler);
216 cache_uniform(program.get(), s_tex[2],
"s_tex2", gfx::uniform_type::Sampler);
217 cache_uniform(program.get(), s_tex[3],
"s_tex3", gfx::uniform_type::Sampler);
218 cache_uniform(program.get(), s_tex[4],
"s_tex4", gfx::uniform_type::Sampler);
219 cache_uniform(program.get(), s_tex[5],
"s_tex5", gfx::uniform_type::Sampler);
220 cache_uniform(program.get(), s_tex[6],
"s_tex6", gfx::uniform_type::Sampler);
227 std::array<gfx::program::uniform_ptr, 7> s_tex;
229 std::shared_ptr<gpu_program> program;
232 struct debug_visualization_program : uniforms_cache
234 void cache_uniforms()
236 cache_uniform(program.get(), u_params,
"u_params", gfx::uniform_type::Vec4);
237 cache_uniform(program.get(), s_tex[0],
"s_tex0", gfx::uniform_type::Sampler);
238 cache_uniform(program.get(), s_tex[1],
"s_tex1", gfx::uniform_type::Sampler);
239 cache_uniform(program.get(), s_tex[2],
"s_tex2", gfx::uniform_type::Sampler);
240 cache_uniform(program.get(), s_tex[3],
"s_tex3", gfx::uniform_type::Sampler);
241 cache_uniform(program.get(), s_tex[4],
"s_tex4", gfx::uniform_type::Sampler);
242 cache_uniform(program.get(), s_tex[5],
"s_tex5", gfx::uniform_type::Sampler);
246 std::array<gfx::program::uniform_ptr, 6> s_tex;
248 std::unique_ptr<gpu_program> program;
250 } debug_visualization_program_;
252 auto get_light_program(
const light& l)
const ->
const color_lighting&;
253 auto get_light_program_no_shadows(
const light& l)
const ->
const color_lighting&;
254 void submit_pbr_material(geom_program& program,
const pbr_material& mat);
256 void collect_model_for_batching(
const model& model_asset,
const math::mat4& world_transform,
const pose_mat4& submesh_transforms, uint32_t lod_index,
float lod_param);
264 batch_collector batch_collector_;
270 std::shared_ptr<int> sentinel_ = std::make_shared<int>(0);