VideoCommon: call into graphics mods create texture callback, providing additional asset dependencies that trigger the texture to be reloaded
This commit is contained in:
parent
6d7bf60071
commit
0539bb4a3e
|
@ -4,9 +4,11 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
#include "Common/Matrix.h"
|
#include "Common/Matrix.h"
|
||||||
|
#include "VideoCommon/Assets/TextureAsset.h"
|
||||||
|
|
||||||
namespace GraphicsModActionData
|
namespace GraphicsModActionData
|
||||||
{
|
{
|
||||||
|
@ -34,5 +36,12 @@ struct TextureLoad
|
||||||
};
|
};
|
||||||
struct TextureCreate
|
struct TextureCreate
|
||||||
{
|
{
|
||||||
|
std::string_view texture_name;
|
||||||
|
u32 texture_width;
|
||||||
|
u32 texture_height;
|
||||||
|
std::vector<VideoCommon::CachedAsset<VideoCommon::GameTextureAsset>>* custom_textures;
|
||||||
|
|
||||||
|
// Dependencies needed to reload the texture and trigger this create again
|
||||||
|
std::vector<VideoCommon::CachedAsset<VideoCommon::CustomAsset>>* additional_dependencies;
|
||||||
};
|
};
|
||||||
} // namespace GraphicsModActionData
|
} // namespace GraphicsModActionData
|
||||||
|
|
|
@ -272,6 +272,15 @@ bool TextureCacheBase::DidLinkedAssetsChange(const TCacheEntry& entry)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const auto& cached_asset : entry.linked_asset_dependencies)
|
||||||
|
{
|
||||||
|
if (cached_asset.m_asset)
|
||||||
|
{
|
||||||
|
if (cached_asset.m_asset->GetLastLoadedTime() > cached_asset.m_cached_write_time)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1612,6 +1621,39 @@ RcTcacheEntry TextureCacheBase::GetTexture(const int textureCacheSafetyColorSamp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<VideoCommon::CachedAsset<VideoCommon::CustomAsset>> additional_dependencies;
|
||||||
|
|
||||||
|
std::string texture_name = "";
|
||||||
|
|
||||||
|
if (g_ActiveConfig.bGraphicMods)
|
||||||
|
{
|
||||||
|
u32 height = texture_info.GetRawHeight();
|
||||||
|
u32 width = texture_info.GetRawWidth();
|
||||||
|
if (hires_texture)
|
||||||
|
{
|
||||||
|
auto asset = hires_texture->GetAsset();
|
||||||
|
if (asset)
|
||||||
|
{
|
||||||
|
auto data = asset->GetData();
|
||||||
|
if (data)
|
||||||
|
{
|
||||||
|
if (!data->m_levels.empty())
|
||||||
|
{
|
||||||
|
height = data->m_levels[0].height;
|
||||||
|
width = data->m_levels[0].width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
texture_name = texture_info.CalculateTextureName().GetFullName();
|
||||||
|
GraphicsModActionData::TextureCreate texture_create{
|
||||||
|
texture_name, width, height, &cached_game_assets, &additional_dependencies};
|
||||||
|
for (const auto& action : g_graphics_mod_manager->GetTextureCreateActions(texture_name))
|
||||||
|
{
|
||||||
|
action->OnTextureCreate(&texture_create);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (auto& cached_asset : cached_game_assets)
|
for (auto& cached_asset : cached_game_assets)
|
||||||
{
|
{
|
||||||
auto data = cached_asset.m_asset->GetData();
|
auto data = cached_asset.m_asset->GetData();
|
||||||
|
@ -1628,6 +1670,8 @@ RcTcacheEntry TextureCacheBase::GetTexture(const int textureCacheSafetyColorSamp
|
||||||
TextureCreationInfo{base_hash, full_hash, bytes_per_block, palette_size}, texture_info,
|
TextureCreationInfo{base_hash, full_hash, bytes_per_block, palette_size}, texture_info,
|
||||||
textureCacheSafetyColorSampleSize, std::move(data_for_assets), has_arbitrary_mipmaps);
|
textureCacheSafetyColorSampleSize, std::move(data_for_assets), has_arbitrary_mipmaps);
|
||||||
entry->linked_game_texture_assets = std::move(cached_game_assets);
|
entry->linked_game_texture_assets = std::move(cached_game_assets);
|
||||||
|
entry->linked_asset_dependencies = std::move(additional_dependencies);
|
||||||
|
entry->texture_info_name = std::move(texture_name);
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -168,6 +168,7 @@ struct TCacheEntry
|
||||||
std::string texture_info_name = "";
|
std::string texture_info_name = "";
|
||||||
|
|
||||||
std::vector<VideoCommon::CachedAsset<VideoCommon::GameTextureAsset>> linked_game_texture_assets;
|
std::vector<VideoCommon::CachedAsset<VideoCommon::GameTextureAsset>> linked_game_texture_assets;
|
||||||
|
std::vector<VideoCommon::CachedAsset<VideoCommon::CustomAsset>> linked_asset_dependencies;
|
||||||
|
|
||||||
explicit TCacheEntry(std::unique_ptr<AbstractTexture> tex,
|
explicit TCacheEntry(std::unique_ptr<AbstractTexture> tex,
|
||||||
std::unique_ptr<AbstractFramebuffer> fb);
|
std::unique_ptr<AbstractFramebuffer> fb);
|
||||||
|
|
Loading…
Reference in New Issue