From: Mikko Rasa Date: Thu, 17 Aug 2023 11:53:22 +0000 (+0300) Subject: Defer retrieval of default resources in Renderer until needed X-Git-Url: https://git.tdb.fi/?a=commitdiff_plain;h=b18533f6143aeb1597d3f0480ec155d40f05cb82;p=libs%2Fgl.git Defer retrieval of default resources in Renderer until needed This allows the Renderer to work when no resources are present. provided that all resources are explicitly supplied. --- diff --git a/source/render/renderer.cpp b/source/render/renderer.cpp index 0e3a770a..36228545 100644 --- a/source/render/renderer.cpp +++ b/source/render/renderer.cpp @@ -24,9 +24,7 @@ namespace GL { const Tag Renderer::world_obj_matrix_tag("world_obj_matrix"); const Tag Renderer::world_obj_normal_matrix_tag("world_obj_normal_matrix"); -Renderer::Renderer(): - placeholder_texture(Resources::get_global().get("_placeholder.png")), - default_sampler(Resources::get_global().get("_linear_clamp.samp")) +Renderer::Renderer() { state_stack.reserve(16); shdata_stack.reserve(32); @@ -180,9 +178,17 @@ void Renderer::set_texture(Tag tag, const Texture *tex, int level, const Sampler if(ResourceManager *res_mgr = tex->get_manager()) res_mgr->resource_used(*tex); if(!tex->is_loaded()) - tex = &placeholder_texture; + { + if(!placeholder_texture) + placeholder_texture = &Resources::get_global().get("_placeholder.png"); + tex = placeholder_texture; + } if(!samp) - samp = &default_sampler; + { + if(!default_sampler) + default_sampler = &Resources::get_global().get("_linear_clamp.samp"); + samp = default_sampler; + } } else samp = 0; diff --git a/source/render/renderer.h b/source/render/renderer.h index 3ba5e64d..b8ab0244 100644 --- a/source/render/renderer.h +++ b/source/render/renderer.h @@ -129,8 +129,8 @@ private: std::vector shdata_stack; std::vector> buffer_stack; std::vector> texture_stack; - const Texture &placeholder_texture; - const Sampler &default_sampler; + const Texture *placeholder_texture = 0; + const Sampler *default_sampler = 0; PipelineState *last_pipeline = 0; Commands commands;