summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Assets/TextureSamplerValue.cpp
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2025-08-23 23:49:22 -0400
committerGitHub <noreply@github.com>2025-08-23 23:49:22 -0400
commit2b7faeb920da31edb11f01c9a0473f86e4023100 (patch)
tree2339cda0e8a6ab0bc474cb5afb5cdf6d2fb2c8ce /Source/Core/VideoCommon/Assets/TextureSamplerValue.cpp
parent7782e32d9e78f08496496e95ab431b25a1b47551 (diff)
parent440999d7789b54066380b3f13f1845d74a839a6e (diff)
Merge pull request #13894 from iwubcode/material_asset_update
VideoCommon: update material asset to support additional features in custom pipelines
Diffstat (limited to 'Source/Core/VideoCommon/Assets/TextureSamplerValue.cpp')
-rw-r--r--Source/Core/VideoCommon/Assets/TextureSamplerValue.cpp60
1 files changed, 60 insertions, 0 deletions
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 <optional>
+
+#include "Common/JsonUtil.h"
+#include "Common/StringUtil.h"
+
+namespace VideoCommon
+{
+namespace
+{
+std::optional<TextureSamplerValue::SamplerOrigin>
+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