diff options
| author | JMC47 <JMC4789@gmail.com> | 2025-08-23 23:49:22 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-23 23:49:22 -0400 |
| commit | 2b7faeb920da31edb11f01c9a0473f86e4023100 (patch) | |
| tree | 2339cda0e8a6ab0bc474cb5afb5cdf6d2fb2c8ce /Source/Core/VideoCommon/Assets/TextureSamplerValue.cpp | |
| parent | 7782e32d9e78f08496496e95ab431b25a1b47551 (diff) | |
| parent | 440999d7789b54066380b3f13f1845d74a839a6e (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.cpp | 60 |
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 |
