diff --git a/Source/Engine/Graphics/Textures/GPUTexture.cpp b/Source/Engine/Graphics/Textures/GPUTexture.cpp index e8c6ddbe1..4656081d8 100644 --- a/Source/Engine/Graphics/Textures/GPUTexture.cpp +++ b/Source/Engine/Graphics/Textures/GPUTexture.cpp @@ -792,9 +792,9 @@ Task* GPUTexture::DownloadDataAsync(TextureData& result) void GPUTexture::SetResidentMipLevels(int32 count) { - ASSERT(IsRegularTexture() && IsAllocated()); - ASSERT(Math::IsInRange(count, 0, MipLevels())); - + count = Math::Clamp(count, 0, MipLevels()); + if (_residentMipLevels == count || !IsRegularTexture()) + return; _residentMipLevels = count; onResidentMipsChanged(); } diff --git a/Source/Engine/Graphics/Textures/GPUTexture.h b/Source/Engine/Graphics/Textures/GPUTexture.h index 82171182b..71f31f390 100644 --- a/Source/Engine/Graphics/Textures/GPUTexture.h +++ b/Source/Engine/Graphics/Textures/GPUTexture.h @@ -153,7 +153,7 @@ public: } /// - /// Gets the number of resident mipmap levels in the texture. (already uploaded to the GPU). + /// Gets the number of resident mipmap levels in the texture (already uploaded to the GPU). /// API_PROPERTY() FORCE_INLINE int32 ResidentMipLevels() const { @@ -283,27 +283,24 @@ public: } /// - /// Checks if texture contains sRGB colors data + /// Checks if texture contains sRGB colors data. /// - /// True if texture contains sRGB colors data, otherwise false FORCE_INLINE bool IsSRGB() const { return _sRGB; } /// - /// Checks if texture is normal texture asset (not render target or unordered access or depth buffer or sth else) + /// Checks if texture is normal texture asset (not render target or unordered access or depth buffer or sth else). /// - /// True if it is a regular texture, otherwise false FORCE_INLINE bool IsRegularTexture() const { return _desc.Flags == GPUTextureFlags::ShaderResource; } /// - /// Checks if texture is a staging buffer (supports direct CPU access) + /// Checks if texture is a staging buffer (supports direct CPU access). /// - /// True if texture is a staging buffer (supports direct CPU access), otherwise false FORCE_INLINE bool IsStaging() const { return _desc.Usage == GPUResourceUsage::StagingUpload || _desc.Usage == GPUResourceUsage::StagingReadback; @@ -554,9 +551,10 @@ public: /// True if failed, otherwise false. virtual bool GetData(int32 arrayOrDepthSliceIndex, int32 mipMapIndex, TextureMipData& data, uint32 mipRowPitch = 0) = 0; -public: - - void SetResidentMipLevels(int32 count); + /// + /// Sets the number of resident mipmap levels in the texture (already uploaded to the GPU). + /// + API_PROPERTY() void SetResidentMipLevels(int32 count); protected: