mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-09-06 01:26:05 +00:00
texture asset
This commit is contained in:
parent
e87d189d78
commit
ce1426d3a1
2 changed files with 44 additions and 28 deletions
|
@ -176,16 +176,20 @@ bool TextureAndSamplerData::FromJson(const CustomAssetLibrary::AssetID& asset_id
|
||||||
|
|
||||||
if (type == "texture2d")
|
if (type == "texture2d")
|
||||||
{
|
{
|
||||||
data->m_type = TextureAndSamplerData::Type::Type_Texture2D;
|
data->type = AbstractTextureType::Texture_2D;
|
||||||
|
|
||||||
if (!ParseSampler(asset_id, json, &data->m_sampler))
|
if (!ParseSampler(asset_id, json, &data->sampler))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (type == "texturecube")
|
else if (type == "texturecube")
|
||||||
{
|
{
|
||||||
data->m_type = TextureAndSamplerData::Type::Type_TextureCube;
|
data->type = AbstractTextureType::Texture_CubeMap;
|
||||||
|
}
|
||||||
|
else if (type == "texture2darray")
|
||||||
|
{
|
||||||
|
data->type = AbstractTextureType::Texture_2DArray;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -205,15 +209,16 @@ void TextureAndSamplerData::ToJson(picojson::object* obj, const TextureAndSample
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto& json_obj = *obj;
|
auto& json_obj = *obj;
|
||||||
switch (data.m_type)
|
switch (data.type)
|
||||||
{
|
{
|
||||||
case TextureAndSamplerData::Type::Type_Texture2D:
|
case AbstractTextureType::Texture_2D:
|
||||||
json_obj.emplace("type", "texture2d");
|
json_obj.emplace("type", "texture2d");
|
||||||
break;
|
break;
|
||||||
case TextureAndSamplerData::Type::Type_TextureCube:
|
case AbstractTextureType::Texture_CubeMap:
|
||||||
json_obj.emplace("type", "texturecube");
|
json_obj.emplace("type", "texturecube");
|
||||||
break;
|
break;
|
||||||
case TextureAndSamplerData::Type::Type_Undefined:
|
case AbstractTextureType::Texture_2DArray:
|
||||||
|
json_obj.emplace("type", "texture2darray");
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -243,14 +248,14 @@ void TextureAndSamplerData::ToJson(picojson::object* obj, const TextureAndSample
|
||||||
};
|
};
|
||||||
|
|
||||||
picojson::object wrap_mode;
|
picojson::object wrap_mode;
|
||||||
wrap_mode.emplace("u", wrap_mode_to_string(data.m_sampler.tm0.wrap_u));
|
wrap_mode.emplace("u", wrap_mode_to_string(data.sampler.tm0.wrap_u));
|
||||||
wrap_mode.emplace("v", wrap_mode_to_string(data.m_sampler.tm0.wrap_v));
|
wrap_mode.emplace("v", wrap_mode_to_string(data.sampler.tm0.wrap_v));
|
||||||
json_obj.emplace("wrap_mode", wrap_mode);
|
json_obj.emplace("wrap_mode", wrap_mode);
|
||||||
|
|
||||||
picojson::object filter_mode;
|
picojson::object filter_mode;
|
||||||
filter_mode.emplace("min", filter_mode_to_string(data.m_sampler.tm0.min_filter));
|
filter_mode.emplace("min", filter_mode_to_string(data.sampler.tm0.min_filter));
|
||||||
filter_mode.emplace("mag", filter_mode_to_string(data.m_sampler.tm0.mag_filter));
|
filter_mode.emplace("mag", filter_mode_to_string(data.sampler.tm0.mag_filter));
|
||||||
filter_mode.emplace("mipmap", filter_mode_to_string(data.m_sampler.tm0.mipmap_filter));
|
filter_mode.emplace("mipmap", filter_mode_to_string(data.sampler.tm0.mipmap_filter));
|
||||||
json_obj.emplace("filter_mode", filter_mode);
|
json_obj.emplace("filter_mode", filter_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,4 +272,19 @@ CustomAssetLibrary::LoadInfo TextureAsset::LoadImpl(const CustomAssetLibrary::As
|
||||||
}
|
}
|
||||||
return loaded_info;
|
return loaded_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CustomAssetLibrary::LoadInfo
|
||||||
|
TextureAndSamplerAsset::LoadImpl(const CustomAssetLibrary::AssetID& asset_id)
|
||||||
|
{
|
||||||
|
auto potential_data = std::make_shared<TextureAndSamplerData>();
|
||||||
|
const auto loaded_info = m_owning_library->LoadTexture(asset_id, potential_data.get());
|
||||||
|
if (loaded_info.bytes_loaded == 0)
|
||||||
|
return {};
|
||||||
|
{
|
||||||
|
std::lock_guard lk(m_data_lock);
|
||||||
|
m_loaded = true;
|
||||||
|
m_data = std::move(potential_data);
|
||||||
|
}
|
||||||
|
return loaded_info;
|
||||||
|
}
|
||||||
} // namespace VideoCommon
|
} // namespace VideoCommon
|
||||||
|
|
|
@ -18,16 +18,9 @@ struct TextureAndSamplerData
|
||||||
static bool FromJson(const CustomAssetLibrary::AssetID& asset_id, const picojson::object& json,
|
static bool FromJson(const CustomAssetLibrary::AssetID& asset_id, const picojson::object& json,
|
||||||
TextureAndSamplerData* data);
|
TextureAndSamplerData* data);
|
||||||
static void ToJson(picojson::object* obj, const TextureAndSamplerData& data);
|
static void ToJson(picojson::object* obj, const TextureAndSamplerData& data);
|
||||||
enum class Type
|
AbstractTextureType type;
|
||||||
{
|
CustomTextureData texture_data;
|
||||||
Type_Undefined,
|
SamplerState sampler;
|
||||||
Type_Texture2D,
|
|
||||||
Type_TextureCube,
|
|
||||||
Type_Max = Type_TextureCube
|
|
||||||
};
|
|
||||||
Type m_type;
|
|
||||||
CustomTextureData m_texture;
|
|
||||||
SamplerState m_sampler;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class TextureAsset final : public CustomLoadableAsset<CustomTextureData>
|
class TextureAsset final : public CustomLoadableAsset<CustomTextureData>
|
||||||
|
@ -35,14 +28,17 @@ class TextureAsset final : public CustomLoadableAsset<CustomTextureData>
|
||||||
public:
|
public:
|
||||||
using CustomLoadableAsset::CustomLoadableAsset;
|
using CustomLoadableAsset::CustomLoadableAsset;
|
||||||
|
|
||||||
|
private:
|
||||||
|
CustomAssetLibrary::LoadInfo LoadImpl(const CustomAssetLibrary::AssetID& asset_id) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class TextureAndSamplerAsset final : public CustomLoadableAsset<TextureAndSamplerData>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using CustomLoadableAsset::CustomLoadableAsset;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CustomAssetLibrary::LoadInfo LoadImpl(const CustomAssetLibrary::AssetID& asset_id) override;
|
CustomAssetLibrary::LoadInfo LoadImpl(const CustomAssetLibrary::AssetID& asset_id) override;
|
||||||
};
|
};
|
||||||
} // namespace VideoCommon
|
} // namespace VideoCommon
|
||||||
|
|
||||||
template <>
|
|
||||||
struct fmt::formatter<VideoCommon::TextureAndSamplerData::Type>
|
|
||||||
: EnumFormatter<VideoCommon::TextureAndSamplerData::Type::Type_Max>
|
|
||||||
{
|
|
||||||
constexpr formatter() : EnumFormatter({"Undefined", "Texture2D", "TextureCube"}) {}
|
|
||||||
};
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue