3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/client/model/models/AsyncCachedTextureLoader.h"
7#include "mc/client/renderer/ImageBufferResourceManager.h"
8#include "mc/client/renderer/ImageCacheMode.h"
9#include "mc/client/renderer/TextureLoadMode.h"
10#include "mc/deps/core/resource/ResourceLocation.h"
11#include "mc/deps/core/threading/Async.h"
12#include "mc/deps/core/threading/CountTracker.h"
13#include "mc/deps/core/threading/SharedAsync.h"
14#include "mc/deps/core/utility/EnableNonOwnerReferences.h"
15#include "mc/deps/core/utility/NonOwnerPointer.h"
16#include "mc/deps/core_graphics/ImageBuffer.h"
17#include "mc/deps/core_graphics/TextureSetLayerType.h"
18#include "mc/deps/minecraft_renderer/renderer/TextureGroupBase.h"
19#include "mc/resources/ResourceLoadType.h"
20#include "mc/util/texture_set_helpers/TextureSetDefinitionLoader.h"
39class TextureGroup :
public ::Bedrock::EnableNonOwnerReferences,
public ::mce::TextureGroupBase {
42 using LoadResult = ::Bedrock::Threading::Async<void>;
44 using TextureMap = ::std::map<::ResourceLocation, ::BedrockTexture>;
46 using TextureLoadKey = ::std::pair<::ResourceLocation, ::TextureLoadMode>;
51 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::IAdvancedGraphicsOptions>> mAdvancedGraphicsOptions;
52 ::ll::TypedStorage<8, 352, ::AsyncCachedTextureLoader> mAsyncTextureLoader;
53 ::ll::TypedStorage<8, 16, ::std::map<::ResourceLocation, ::BedrockTexture>> mLoadedTextures;
54 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::ResourceLoadManager>> mResourceLoadManager;
55 ::ll::TypedStorage<8, 8, ::mce::TextureResourceService&> mResourceService;
56 ::ll::TypedStorage<8, 48, ::cg::ImageBuffer const> mMissingTexture;
57 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::mce::ImageResourceLoader>> mImageResourceLoader;
58 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::TextureSetHelpers::TextureSetDefinitionLoader::ResourceHelper>>
59 mTextureSetResourceHelper;
60 ::ll::TypedStorage<8, 16, ::std::map<::ResourceLocation, ::std::optional<uint>>> mTouchedTextures;
61 ::ll::TypedStorage<8, 16, ::ImageBufferResourceManager> mImageBufferCache;
62 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::mce::LRUCache>> mLRUCache;
66 ::std::map<::std::pair<::ResourceLocation, ::TextureLoadMode>, ::Bedrock::Threading::SharedAsync<void>>>
68 ::ll::TypedStorage<8, 16, ::Bedrock::Threading::Async<void>> mQueueLoadResultCoroutine;
69 ::ll::TypedStorage<8, 16, ::Bedrock::Threading::CountTracker> mPendingLoadTaskCounter;
70 ::ll::TypedStorage<8, 8, ::std::atomic<uint64>> mOutstandingTaskMemory;
71 ::ll::TypedStorage<8, 8, ::std::atomic<uint64>> mOutstandingTaskCount;
76 TextureGroup& operator=(TextureGroup
const&);
77 TextureGroup(TextureGroup
const&);
83 virtual ~TextureGroup() ;
85 virtual ::mce::TexturePtr getTexture(
86 ::ResourceLocation
const& resourceLocation,
87 bool const forceReload,
88 ::std::optional<uint> optLoadOrder,
89 ::cg::TextureSetLayerType
const textureType
97 ::Bedrock::NotNullNonOwnerPtr<::IAdvancedGraphicsOptions> advancedGraphicsOptions,
98 ::Bedrock::NotNullNonOwnerPtr<::ResourceLoadManager> resourceLoadManager,
99 ::mce::TextureResourceService& textureResourceService
103 ::Bedrock::NotNullNonOwnerPtr<::IAdvancedGraphicsOptions> advancedGraphicsOptions,
104 ::Bedrock::NotNullNonOwnerPtr<::ResourceLoadManager> resourceLoadManager,
105 ::mce::TextureResourceService& textureResourceService,
106 ::std::shared_ptr<::mce::ImageResourceLoader> imageResourceLoader
109 MCAPI
void _loadTextureAsyncUrgentlyIfTouched(
110 ::std::pair<::ResourceLocation, ::TextureLoadMode>
const& textureLoadKey,
111 ::std::optional<::ResourceLoadType>
const optionalLoadType
114 MCAPI
void _loadTexturesAsync(
115 ::gsl::span<::ResourceLocationPair>
const locationPairs,
116 ::std::optional<::ResourceLoadType>
const resourceLoadType
119 MCAPI
void addEmptyTexture(::ResourceLocation
const& resourceLocation,
int width,
int height);
121 MCAPI
void enableLRUCache(uint64 cacheSize);
123 MCAPI uint64 estimateMemoryUsage()
const;
125 MCAPI ::cg::ImageBuffer* getCachedImageOrLoadAsync(::ResourceLocation
const& imageToLoad);
127 MCAPI ::cg::ImageBuffer* getCachedImageOrLoadSync(::ResourceLocation
const& resourceLocation,
bool forceReload);
129 MCAPI ::cg::ImageBuffer*
130 insertImageIntoCache(::ResourceLocation
const& resourceLocation, ::cg::ImageBuffer&& imageBuffer);
133 ::ResourceLocation
const& resourceLocation,
135 ::cg::TextureSetLayerType textureType
138 MCAPI ::nonstd::expected<void, ::std::error_condition>
139 loadImageSyncAndInsertIntoCache(::ResourceLocation
const& resourceLocation,
bool splitAsArray);
141 MCAPI ::Bedrock::Threading::Async<void> loadTextureAsync(
142 ::ResourceLocation
const& resourceLocation,
143 ::TextureLoadMode textureLoadMode,
144 ::std::optional<::ResourceLoadType> resourceLoadType,
145 ::std::optional<uint> optLoadOrder
149 loadTexturesAsync(::gsl::span<::ResourceLocation> locations, ::std::optional<::ResourceLoadType> resourceLoadType);
151 MCAPI
void reloadAllTextures();
153 MCAPI
void reloadImages(
154 ::gsl::span<::ResourceLocationPair> imagesToLoadAsync,
155 ::gsl::span<::ResourceLocation> imagesToImmediatelyLoad,
156 ::std::vector<::ResourceLocation> texturesToKeep,
161 setTextureMetadata(::ResourceLocation
const& resourceLocation, ::mce::TextureDescription
const& textureDescription);
163 MCAPI
void setTextureMetadata(
164 ::ResourceLocation
const& resourceLocation,
165 ::gsl::not_null<::std::shared_ptr<::cg::TextureSetDefinition>> textureSetDefinition
168 MCAPI
bool shouldLoadPBRResources()
const;
170 MCAPI
void unloadAllTextures();
172 MCAPI
bool unloadTexture(::ResourceLocation
const& resourceLocation,
bool assertOnFailure);
174 MCAPI
bool updateTextureInPlace(::ResourceLocation
const& resourceLocation, ::cg::ImageBuffer imageBuffer);
176 MCAPI ::BedrockTexture& uploadTexture(::ResourceLocation
const& resourceLocation, ::cg::ImageBuffer imageBuffer);
178 MCAPI ::BedrockTexture& uploadTexture(
179 ::ResourceLocation
const& resourceLocation,
180 ::gsl::not_null<::std::shared_ptr<::cg::TextureSetDefinition>> textureSetDefinition
183 MCAPI ::BedrockTexture& uploadTexture(
184 ::ResourceLocation
const& resourceLocation,
185 ::mce::TextureContainer&& textureContainer,
186 ::std::string_view optionalIdentifier
194 ::Bedrock::NotNullNonOwnerPtr<::IAdvancedGraphicsOptions> advancedGraphicsOptions,
195 ::Bedrock::NotNullNonOwnerPtr<::ResourceLoadManager> resourceLoadManager,
196 ::mce::TextureResourceService& textureResourceService
200 ::Bedrock::NotNullNonOwnerPtr<::IAdvancedGraphicsOptions> advancedGraphicsOptions,
201 ::Bedrock::NotNullNonOwnerPtr<::ResourceLoadManager> resourceLoadManager,
202 ::mce::TextureResourceService& textureResourceService,
203 ::std::shared_ptr<::mce::ImageResourceLoader> imageResourceLoader
216 MCAPI ::mce::TexturePtr $getTexture(
217 ::ResourceLocation
const& resourceLocation,
218 bool const forceReload,
219 ::std::optional<uint> optLoadOrder,
220 ::cg::TextureSetLayerType
const textureType
Definition BedrockTexture.h:5
Definition IAdvancedGraphicsOptions.h:10
Definition ResourceLoadManager.h:18
Definition ResourceLocationPair.h:9
Definition TextureSetDefinition.h:19
Definition ImageResourceLoader.h:19
Definition TextureContainer.h:7
Definition TextureGroup.h:7
Definition TexturePtr.h:7
Definition TextureDescription.h:7
Definition TextureResourceService.h:7