From 22d80d6152b9cc266056f93f7f8b114f6a4dc492 Mon Sep 17 00:00:00 2001 From: Attila Uygun Date: Tue, 20 Jun 2023 00:06:20 +0200 Subject: [PATCH] Cleanup & refactor --- src/demo/sky_quad.h | 5 ----- src/engine/engine.cc | 28 ++++++++++++++-------------- src/engine/engine.h | 5 ----- src/engine/image_quad.cc | 1 - 4 files changed, 14 insertions(+), 25 deletions(-) diff --git a/src/demo/sky_quad.h b/src/demo/sky_quad.h index 16e146b..0b9738b 100644 --- a/src/demo/sky_quad.h +++ b/src/demo/sky_quad.h @@ -5,11 +5,6 @@ #include "engine/animatable.h" #include "engine/animator.h" -#include -#include -#include -#include - namespace eng { class Shader; } // namespace eng diff --git a/src/engine/engine.cc b/src/engine/engine.cc index 7183b81..932356c 100644 --- a/src/engine/engine.cc +++ b/src/engine/engine.cc @@ -276,14 +276,8 @@ void Engine::SetImageSource(const std::string& asset_name, return; } - auto& t = textures_[asset_name] = {CreateRenderResource(), - create_image, persistent, 0}; - - if (persistent) { - auto image = create_image(); - if (image) - t.texture->Update(std::move(image)); - } + textures_[asset_name] = {std::make_unique(renderer_.get()), + create_image, persistent, 0}; } void Engine::RefreshImage(const std::string& asset_name) { @@ -297,8 +291,6 @@ void Engine::RefreshImage(const std::string& asset_name) { auto image = it->second.create_image(); if (image) it->second.texture->Update(std::move(image)); - else - it->second.texture->Destroy(); } } @@ -310,8 +302,11 @@ Texture* Engine::AcquireTexture(const std::string& asset_name) { } it->second.use_count++; - if (!it->second.texture->IsValid()) - RefreshImage(it->first); + if (!it->second.texture->IsValid()) { + auto image = it->second.create_image(); + if (image) + it->second.texture->Update(std::move(image)); + } return it->second.texture.get(); } @@ -335,7 +330,8 @@ void Engine::LoadCustomShader(const std::string& asset_name, return; } - auto& s = shaders_[asset_name] = {CreateRenderResource(), file_name}; + auto& s = shaders_[asset_name] = {std::make_unique(renderer_.get()), + file_name}; auto source = std::make_unique(); if (!source->Load(file_name)) @@ -623,7 +619,11 @@ void Engine::ContextLost() { for (auto& t : textures_) { t.second.texture->SetRenderer(renderer_.get()); - RefreshImage(t.first); + if (t.second.persistent || t.second.use_count > 0) { + auto image = t.second.create_image(); + if (image) + t.second.texture->Update(std::move(image)); + } } for (auto& s : shaders_) { diff --git a/src/engine/engine.h b/src/engine/engine.h index bbbe77f..78e1991 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -61,11 +61,6 @@ class Engine : public PlatformObserver { // Convert position form pixels to viewport coordinates. base::Vector2f ToPosition(const base::Vector2f& vec); - template - std::unique_ptr CreateRenderResource() { - return std::unique_ptr(static_cast(new T(renderer_.get()))); - } - void SetImageSource(const std::string& asset_name, const std::string& file_name, bool persistent = false); diff --git a/src/engine/image_quad.cc b/src/engine/image_quad.cc index dee7504..c0c78af 100644 --- a/src/engine/image_quad.cc +++ b/src/engine/image_quad.cc @@ -32,7 +32,6 @@ void ImageQuad::Create(const std::string& asset_name, asset_name_ = asset_name; } -// TODO: typo void ImageQuad::Destroy() { if (texture_) { Engine::Get().ReleaseTexture(asset_name_);