From e5d2e09f021cc956be53e3e3aceb37d3af910c2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Wed, 13 Dec 2023 10:45:42 +0100 Subject: [PATCH] Some code simplification --- Common/Render/ManagedTexture.cpp | 41 ++++++++++++++------------------ Common/Render/ManagedTexture.h | 5 +--- Common/UI/AsyncImageFileView.cpp | 1 + Common/UI/AsyncImageFileView.h | 2 +- 4 files changed, 21 insertions(+), 28 deletions(-) diff --git a/Common/Render/ManagedTexture.cpp b/Common/Render/ManagedTexture.cpp index 601d0c8976..1a894acc16 100644 --- a/Common/Render/ManagedTexture.cpp +++ b/Common/Render/ManagedTexture.cpp @@ -116,7 +116,7 @@ bool TempImage::LoadTextureLevels(const uint8_t *data, size_t size, ImageFileTyp return numLevels > 0; } -Draw::Texture *CreateTextureFromTempImage(Draw::DrawContext *draw, const uint8_t *data, size_t dataSize, const TempImage &image, bool generateMips, const char *name) { +Draw::Texture *CreateTextureFromTempImage(Draw::DrawContext *draw, const TempImage &image, bool generateMips, const char *name) { using namespace Draw; _assert_(image.levels[0] != nullptr && image.width[0] > 0 && image.height[0] > 0); @@ -147,7 +147,7 @@ Draw::Texture *CreateTextureFromFileData(Draw::DrawContext *draw, const uint8_t if (!image.LoadTextureLevels(data, dataSize, type)) { return nullptr; } - Draw::Texture *texture = CreateTextureFromTempImage(draw, data, dataSize, image, generateMips, name); + Draw::Texture *texture = CreateTextureFromTempImage(draw, image, generateMips, name); image.Free(); return texture; } @@ -165,24 +165,6 @@ Draw::Texture *CreateTextureFromFile(Draw::DrawContext *draw, const char *filena return texture; } -bool ManagedTexture::LoadFromFileData(const uint8_t *data, size_t dataSize, ImageFileType type, bool generateMips, const char *name) { - generateMips_ = generateMips; - - // Free the old texture, if any. - if (texture_) { - texture_->Release(); - texture_ = nullptr; - } - - TempImage image; - if (!image.LoadTextureLevels(data, dataSize, type)) { - return false; - } - texture_ = CreateTextureFromTempImage(draw_, data, dataSize, image, generateMips, name); - image.Free(); - return texture_ != nullptr; -} - bool ManagedTexture::LoadFromFile(const std::string &filename, ImageFileType type, bool generateMips) { INFO_LOG(SYSTEM, "ManagedTexture::LoadFromFile (%s)", filename.c_str()); generateMips_ = generateMips; @@ -193,15 +175,28 @@ bool ManagedTexture::LoadFromFile(const std::string &filename, ImageFileType typ ERROR_LOG(IO, "Failed to read file '%s'", filename.c_str()); return false; } - bool retval = LoadFromFileData(buffer, fileSize, type, generateMips, filename.c_str()); - if (retval) { + + // Free the old texture, if any. + if (texture_) { + texture_->Release(); + texture_ = nullptr; + } + + TempImage image; + if (!image.LoadTextureLevels(buffer, fileSize, type)) { + return false; + } + texture_ = CreateTextureFromTempImage(draw_, image, generateMips, filename.c_str()); + image.Free(); + + if (texture_) { filename_ = filename; } else { filename_.clear(); ERROR_LOG(IO, "Failed to load texture '%s'", filename.c_str()); } delete[] buffer; - return retval; + return texture_ != 0; } std::unique_ptr CreateManagedTextureFromFile(Draw::DrawContext *draw, const char *filename, ImageFileType type, bool generateMips) { diff --git a/Common/Render/ManagedTexture.h b/Common/Render/ManagedTexture.h index 9e59144b75..8db5459210 100644 --- a/Common/Render/ManagedTexture.h +++ b/Common/Render/ManagedTexture.h @@ -16,15 +16,12 @@ enum ImageFileType { class ManagedTexture { public: - ManagedTexture(Draw::DrawContext *draw) : draw_(draw) { - } + ManagedTexture(Draw::DrawContext *draw) : draw_(draw) {} ~ManagedTexture() { if (texture_) texture_->Release(); } - bool LoadFromFile(const std::string &filename, ImageFileType type = ImageFileType::DETECT, bool generateMips = false); - bool LoadFromFileData(const uint8_t *data, size_t dataSize, ImageFileType type, bool generateMips, const char *name); Draw::Texture *GetTexture(); // For immediate use, don't store. int Width() const { return texture_->Width(); } int Height() const { return texture_->Height(); } diff --git a/Common/UI/AsyncImageFileView.cpp b/Common/UI/AsyncImageFileView.cpp index a29941a64e..9948a9986f 100644 --- a/Common/UI/AsyncImageFileView.cpp +++ b/Common/UI/AsyncImageFileView.cpp @@ -2,6 +2,7 @@ #include "Common/UI/AsyncImageFileView.h" #include "Common/UI/Context.h" #include "Common/Render/DrawBuffer.h" +#include "Common/Render/ManagedTexture.h" AsyncImageFileView::AsyncImageFileView(const Path &filename, UI::ImageSizeMode sizeMode, UI::LayoutParams *layoutParams) : UI::Clickable(layoutParams), canFocus_(true), filename_(filename), color_(0xFFFFFFFF), sizeMode_(sizeMode), textureFailed_(false), fixedSizeW_(0.0f), fixedSizeH_(0.0f) {} diff --git a/Common/UI/AsyncImageFileView.h b/Common/UI/AsyncImageFileView.h index 5acaca30a5..36e8cf8593 100644 --- a/Common/UI/AsyncImageFileView.h +++ b/Common/UI/AsyncImageFileView.h @@ -1,10 +1,10 @@ #pragma once #include "Common/UI/View.h" -#include "Common/Render/ManagedTexture.h" #include "Common/File/Path.h" class UIContext; +class ManagedTexture; // AsyncImageFileView loads a texture from a file, and reloads it as necessary. // TODO: Actually make async, doh.