mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 05:40:01 -06:00
VideoCommon: add function to serialize ShaderAsset to json
This commit is contained in:
@ -6,6 +6,7 @@
|
||||
#include <algorithm>
|
||||
#include <utility>
|
||||
|
||||
#include "Common/JsonUtil.h"
|
||||
#include "Common/Logging/Log.h"
|
||||
#include "Common/StringUtil.h"
|
||||
#include "Common/VariantUtil.h"
|
||||
@ -291,6 +292,80 @@ bool PixelShaderData::FromJson(const VideoCommon::CustomAssetLibrary::AssetID& a
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void PixelShaderData::ToJson(picojson::object& obj, const PixelShaderData& data)
|
||||
{
|
||||
picojson::array json_properties;
|
||||
for (const auto& [name, property] : data.m_properties)
|
||||
{
|
||||
picojson::object json_property;
|
||||
json_property["code_name"] = picojson::value{name};
|
||||
json_property["description"] = picojson::value{property.m_description};
|
||||
|
||||
std::visit(
|
||||
overloaded{[&](const ShaderProperty::Sampler2D& default_value) {
|
||||
json_property["type"] = picojson::value{"sampler2d"};
|
||||
json_property["default"] = picojson::value{default_value.value};
|
||||
},
|
||||
[&](const ShaderProperty::Sampler2DArray& default_value) {
|
||||
json_property["type"] = picojson::value{"sampler2darray"};
|
||||
json_property["default"] = picojson::value{default_value.value};
|
||||
},
|
||||
[&](const ShaderProperty::SamplerCube& default_value) {
|
||||
json_property["type"] = picojson::value{"samplercube"};
|
||||
json_property["default"] = picojson::value{default_value.value};
|
||||
},
|
||||
[&](s32 default_value) {
|
||||
json_property["type"] = picojson::value{"int"};
|
||||
json_property["default"] = picojson::value{static_cast<double>(default_value)};
|
||||
},
|
||||
[&](const std::array<s32, 2>& default_value) {
|
||||
json_property["type"] = picojson::value{"int2"};
|
||||
json_property["default"] = picojson::value{ToJsonArray(default_value)};
|
||||
},
|
||||
[&](const std::array<s32, 3>& default_value) {
|
||||
json_property["type"] = picojson::value{"int3"};
|
||||
json_property["default"] = picojson::value{ToJsonArray(default_value)};
|
||||
},
|
||||
[&](const std::array<s32, 4>& default_value) {
|
||||
json_property["type"] = picojson::value{"int4"};
|
||||
json_property["default"] = picojson::value{ToJsonArray(default_value)};
|
||||
},
|
||||
[&](float default_value) {
|
||||
json_property["type"] = picojson::value{"float"};
|
||||
json_property["default"] = picojson::value{static_cast<double>(default_value)};
|
||||
},
|
||||
[&](const std::array<float, 2>& default_value) {
|
||||
json_property["type"] = picojson::value{"float2"};
|
||||
json_property["default"] = picojson::value{ToJsonArray(default_value)};
|
||||
},
|
||||
[&](const std::array<float, 3>& default_value) {
|
||||
json_property["type"] = picojson::value{"float3"};
|
||||
json_property["default"] = picojson::value{ToJsonArray(default_value)};
|
||||
},
|
||||
[&](const std::array<float, 4>& default_value) {
|
||||
json_property["type"] = picojson::value{"float4"};
|
||||
json_property["default"] = picojson::value{ToJsonArray(default_value)};
|
||||
},
|
||||
[&](const ShaderProperty::RGB& default_value) {
|
||||
json_property["type"] = picojson::value{"rgb"};
|
||||
json_property["default"] = picojson::value{ToJsonArray(default_value.value)};
|
||||
},
|
||||
[&](const ShaderProperty::RGBA& default_value) {
|
||||
json_property["type"] = picojson::value{"rgba"};
|
||||
json_property["default"] = picojson::value{ToJsonArray(default_value.value)};
|
||||
},
|
||||
[&](bool default_value) {
|
||||
json_property["type"] = picojson::value{"bool"};
|
||||
json_property["default"] = picojson::value{default_value};
|
||||
}},
|
||||
property.m_default);
|
||||
|
||||
json_properties.push_back(picojson::value{json_property});
|
||||
}
|
||||
obj["properties"] = picojson::value{json_properties};
|
||||
}
|
||||
|
||||
CustomAssetLibrary::LoadInfo PixelShaderAsset::LoadImpl(const CustomAssetLibrary::AssetID& asset_id)
|
||||
{
|
||||
auto potential_data = std::make_shared<PixelShaderData>();
|
||||
|
Reference in New Issue
Block a user