Implement async shader compilation plus caching for GL ES 3
Async. compilation via ubershader is currently available in the scene and particles shaders only. Bonus: - Use `#if defined()` syntax for not true conditionals, so they don't unnecessarily take a bit in the version flagset. - Remove unused `ENABLE_CLIP_ALPHA` from scene shader. - Remove unused `PARTICLES_COPY` from the particles shader. - Remove unused uniform related code. - Shader language/compiler: use ordered hash maps for deterministic code generation (needed for caching).
This commit is contained in:
@ -207,6 +207,7 @@ void RasterizerGLES3::begin_frame(double frame_step) {
|
||||
storage->frame.time[2] = Math::fmod(time_total, 900);
|
||||
storage->frame.time[3] = Math::fmod(time_total, 60);
|
||||
storage->frame.count++;
|
||||
storage->frame.shader_compiles_started = 0;
|
||||
storage->frame.delta = frame_step;
|
||||
|
||||
storage->update_dirty_resources();
|
||||
@ -214,6 +215,8 @@ void RasterizerGLES3::begin_frame(double frame_step) {
|
||||
storage->info.render_final = storage->info.render;
|
||||
storage->info.render.reset();
|
||||
|
||||
ShaderGLES3::current_frame = storage->frame.count;
|
||||
|
||||
scene->iteration();
|
||||
}
|
||||
|
||||
@ -410,6 +413,8 @@ void RasterizerGLES3::end_frame(bool p_swap_buffers) {
|
||||
}
|
||||
}
|
||||
|
||||
ShaderGLES3::advance_async_shaders_compilation();
|
||||
|
||||
if (p_swap_buffers) {
|
||||
OS::get_singleton()->swap_buffers();
|
||||
} else {
|
||||
@ -487,6 +492,8 @@ RasterizerGLES3::RasterizerGLES3() {
|
||||
|
||||
time_total = 0;
|
||||
time_scale = 1;
|
||||
|
||||
ShaderGLES3::compiles_started_this_frame = &storage->frame.shader_compiles_started;
|
||||
}
|
||||
|
||||
RasterizerGLES3::~RasterizerGLES3() {
|
||||
|
||||
Reference in New Issue
Block a user