Files
leocad/common/lc_texturemanager.h
Leonardo Zide 1182f883e7 Unify library cache compression with Qt
Use shared cache readers and writers for archive and directory sources, replacing raw zlib loops with Qt compression and payload checksum validation. Preserve source freshness and decoded-size checks, and bump the cache version so existing entries rebuild in the new format.

Remove unused texture lookup APIs and the Blender zlib include, consolidate library helper access, and alphabetize the project source and header lists without changing their membership.
2026-10-21 22:41:16 -07:00

47 lines
1.7 KiB
C++

#pragma once
#include "lc_assettypes.h"
// Creates and reuses textures, tracks their references, and prepares image data.
// The asset loader handles scheduling, OpenGL uploads, and retries.
class lcTextureManager
{
public:
lcTextureManager() = default;
~lcTextureManager();
lcTextureManager(const lcTextureManager&) = delete;
lcTextureManager(lcTextureManager&&) = delete;
lcTextureManager& operator=(const lcTextureManager&) = delete;
lcTextureManager& operator=(lcTextureManager&&) = delete;
// Deletes all managed textures, regardless of reference count.
// Stop workers and release mesh references before calling.
void Clear();
// Returns an existing texture for this source or creates one.
// Call on the UI thread and release the returned reference when done.
// Returns nullptr for an invalid name or missing source.
lcTexture* AcquireTexture(const char* Name, const lcFileSource& Source, const QString& ProjectPath);
// Keeps a texture alive for another owner.
void AddTextureReference(lcTexture* Texture);
// Releases an owner's reference. Unloads unused textures and
// deletes temporary textures when their last reference is released.
void ReleaseTexture(lcTexture* Texture);
// Decodes and prepares image pixels for a later OpenGL upload.
// Preserves the file position. Workers must use separate file instances.
// Returns a DecodeFailed error if loading or preparation fails.
lcTextureBuildResult BuildTextureData(lcFile& File);
private:
// Reads an image from the current file position without advancing it.
// Supports memory and disk files; returns DecodeFailed on failure.
lcTextureBuildResult DecodeTextureData(lcFile& File);
QMutex mMutex;
std::vector<lcTexture*> mTextures;
};