From 440999d7789b54066380b3f13f1845d74a839a6e Mon Sep 17 00:00:00 2001 From: iwubcode Date: Fri, 22 Aug 2025 19:09:39 -0500 Subject: VideoCommon: update material asset to support render state properties, support multi-pass, and textures are now split out (as well as supporting a way to calculate sampler origin) --- .../VideoCommon/Assets/TextureSamplerValue.cpp | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Source/Core/VideoCommon/Assets/TextureSamplerValue.cpp (limited to 'Source/Core/VideoCommon/Assets/TextureSamplerValue.cpp') diff --git a/Source/Core/VideoCommon/Assets/TextureSamplerValue.cpp b/Source/Core/VideoCommon/Assets/TextureSamplerValue.cpp new file mode 100644 index 0000000000..19fd4181a3 --- /dev/null +++ b/Source/Core/VideoCommon/Assets/TextureSamplerValue.cpp @@ -0,0 +1,60 @@ +// Copyright 2024 Dolphin Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "VideoCommon/Assets/TextureSamplerValue.h" + +#include + +#include "Common/JsonUtil.h" +#include "Common/StringUtil.h" + +namespace VideoCommon +{ +namespace +{ +std::optional +ReadSamplerOriginFromJSON(const picojson::object& json) +{ + auto sampler_origin = ReadStringFromJson(json, "sampler_origin").value_or(""); + Common::ToLower(&sampler_origin); + + if (sampler_origin == "asset") + { + return TextureSamplerValue::SamplerOrigin::Asset; + } + else if (sampler_origin == "texture_hash") + { + return TextureSamplerValue::SamplerOrigin::TextureHash; + } + + return std::nullopt; +} +} // namespace +std::string TextureSamplerValue::ToString(SamplerOrigin sampler_origin) +{ + if (sampler_origin == SamplerOrigin::Asset) + return "asset"; + + return "texture_hash"; +} + +bool TextureSamplerValue::FromJson(const picojson::object& json, TextureSamplerValue* data) +{ + data->asset = ReadStringFromJson(json, "asset").value_or(""); + data->texture_hash = ReadStringFromJson(json, "texture_hash").value_or(""); + data->sampler_origin = + ReadSamplerOriginFromJSON(json).value_or(TextureSamplerValue::SamplerOrigin::Asset); + + return true; +} + +void TextureSamplerValue::ToJson(picojson::object* obj, const TextureSamplerValue& data) +{ + if (!obj) [[unlikely]] + return; + + obj->emplace("asset", data.asset); + obj->emplace("texture_hash", data.texture_hash); + obj->emplace("sampler_origin", ToString(data.sampler_origin)); +} +} // namespace VideoCommon -- cgit v1.2.3