75 const run_params& rparams);
90 const run_params& rparams)
94 const run_params& rparams)
98 const run_params& rparams)
113 void cache_uniforms()
115 cache_uniform(program.get(), u_data0,
"u_data0", gfx::uniform_type::Vec4);
116 cache_uniform(program.get(), u_data1,
"u_data1", gfx::uniform_type::Vec4);
117 cache_uniform(program.get(), s_tex[0],
"s_tex0", gfx::uniform_type::Sampler);
118 cache_uniform(program.get(), s_tex[1],
"s_tex1", gfx::uniform_type::Sampler);
119 cache_uniform(program.get(), s_tex[2],
"s_tex2", gfx::uniform_type::Sampler);
120 cache_uniform(program.get(), s_tex[3],
"s_tex3", gfx::uniform_type::Sampler);
121 cache_uniform(program.get(), s_tex[4],
"s_tex4", gfx::uniform_type::Sampler);
122 cache_uniform(program.get(), s_tex_cube,
"s_tex_cube", gfx::uniform_type::Sampler);
128 std::array<gfx::program::uniform_ptr, 5> s_tex;
131 std::unique_ptr<gpu_program> program;
134 struct box_ref_probe_program : ref_probe_program
136 void cache_uniforms()
138 ref_probe_program::cache_uniforms();
140 cache_uniform(program.get(), u_data2,
"u_data2", gfx::uniform_type::Vec4);
141 cache_uniform(program.get(), u_inv_world,
"u_inv_world", gfx::uniform_type::Mat4);
146 } box_ref_probe_program_;
148 struct sphere_ref_probe_program : ref_probe_program
150 } sphere_ref_probe_program_;
152 struct geom_program : uniforms_cache
154 void cache_uniforms()
156 cache_uniform(program.get(), s_tex_color,
"s_tex_color", gfx::uniform_type::Sampler);
157 cache_uniform(program.get(), s_tex_normal,
"s_tex_normal", gfx::uniform_type::Sampler);
158 cache_uniform(program.get(), s_tex_roughness,
"s_tex_roughness", gfx::uniform_type::Sampler);
159 cache_uniform(program.get(), s_tex_metalness,
"s_tex_metalness", gfx::uniform_type::Sampler);
160 cache_uniform(program.get(), s_tex_ao,
"s_tex_ao", gfx::uniform_type::Sampler);
161 cache_uniform(program.get(), s_tex_emissive,
"s_tex_emissive", gfx::uniform_type::Sampler);
163 cache_uniform(program.get(), u_base_color,
"u_base_color", gfx::uniform_type::Vec4);
164 cache_uniform(program.get(), u_subsurface_color,
"u_subsurface_color", gfx::uniform_type::Vec4);
165 cache_uniform(program.get(), u_emissive_color,
"u_emissive_color", gfx::uniform_type::Vec4);
166 cache_uniform(program.get(), u_surface_data,
"u_surface_data", gfx::uniform_type::Vec4);
167 cache_uniform(program.get(), u_tiling,
"u_tiling", gfx::uniform_type::Vec4);
168 cache_uniform(program.get(), u_dither_threshold,
"u_dither_threshold", gfx::uniform_type::Vec4);
169 cache_uniform(program.get(), u_surface_data2,
"u_surface_data2", gfx::uniform_type::Vec4);
171 cache_uniform(program.get(), u_camera_wpos,
"u_camera_wpos", gfx::uniform_type::Vec4);
172 cache_uniform(program.get(), u_camera_clip_planes,
"u_camera_clip_planes", gfx::uniform_type::Vec4);
173 cache_uniform(program.get(), u_lod_params,
"u_lod_params", gfx::uniform_type::Vec4);
195 std::unique_ptr<gpu_program> program;
198 geom_program geom_program_;
199 geom_program geom_program_skinned_;
201 struct color_lighting : uniforms_cache
203 void cache_uniforms()
205 cache_uniform(program.get(), u_light_position,
"u_light_position", gfx::uniform_type::Vec4);
206 cache_uniform(program.get(), u_light_direction,
"u_light_direction", gfx::uniform_type::Vec4);
207 cache_uniform(program.get(), u_light_data,
"u_light_data", gfx::uniform_type::Vec4);
208 cache_uniform(program.get(), u_light_color_intensity,
"u_light_color_intensity", gfx::uniform_type::Vec4);
209 cache_uniform(program.get(), u_camera_position,
"u_camera_position", gfx::uniform_type::Vec4);
211 cache_uniform(program.get(), s_tex[0],
"s_tex0", gfx::uniform_type::Sampler);
212 cache_uniform(program.get(), s_tex[1],
"s_tex1", gfx::uniform_type::Sampler);
213 cache_uniform(program.get(), s_tex[2],
"s_tex2", gfx::uniform_type::Sampler);
214 cache_uniform(program.get(), s_tex[3],
"s_tex3", gfx::uniform_type::Sampler);
215 cache_uniform(program.get(), s_tex[4],
"s_tex4", gfx::uniform_type::Sampler);
216 cache_uniform(program.get(), s_tex[5],
"s_tex5", gfx::uniform_type::Sampler);
217 cache_uniform(program.get(), s_tex[6],
"s_tex6", gfx::uniform_type::Sampler);
224 std::array<gfx::program::uniform_ptr, 7> s_tex;
226 std::shared_ptr<gpu_program> program;
229 struct debug_visualization_program : uniforms_cache
231 void cache_uniforms()
233 cache_uniform(program.get(), u_params,
"u_params", gfx::uniform_type::Vec4);
234 cache_uniform(program.get(), s_tex[0],
"s_tex0", gfx::uniform_type::Sampler);
235 cache_uniform(program.get(), s_tex[1],
"s_tex1", gfx::uniform_type::Sampler);
236 cache_uniform(program.get(), s_tex[2],
"s_tex2", gfx::uniform_type::Sampler);
237 cache_uniform(program.get(), s_tex[3],
"s_tex3", gfx::uniform_type::Sampler);
238 cache_uniform(program.get(), s_tex[4],
"s_tex4", gfx::uniform_type::Sampler);
239 cache_uniform(program.get(), s_tex[5],
"s_tex5", gfx::uniform_type::Sampler);
243 std::array<gfx::program::uniform_ptr, 6> s_tex;
245 std::unique_ptr<gpu_program> program;
247 } debug_visualization_program_;
249 auto get_light_program(
const light& l)
const ->
const color_lighting&;
250 auto get_light_program_no_shadows(
const light& l)
const ->
const color_lighting&;
251 void submit_pbr_material(geom_program& program,
const pbr_material& mat);
259 std::shared_ptr<int> sentinel_ = std::make_shared<int>(0);