summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Assets/TextureSamplerValue.cpp
blob: 19fd4181a3f66f50593f07ec456a0656b6690fe4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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