3#include "pixelbullet/graphics/material_types.h"
4#include "pixelbullet/serialization/node.h"
11inline Node& operator<<(
Node& node,
const MaterialAlphaMode& value)
13 node << std::string(ToString(value));
17inline const Node& operator>>(
const Node& node, MaterialAlphaMode& value)
19 std::string serialized;
21 if (serialized ==
"Mask")
23 value = MaterialAlphaMode::Mask;
25 else if (serialized ==
"Blend")
27 value = MaterialAlphaMode::Blend;
31 value = MaterialAlphaMode::Opaque;
36inline Node& operator<<(
Node& node,
const MaterialTextureWrapMode& value)
38 node << std::string(ToString(value));
42inline const Node& operator>>(
const Node& node, MaterialTextureWrapMode& value)
44 std::string serialized;
46 if (serialized ==
"ClampToEdge")
48 value = MaterialTextureWrapMode::ClampToEdge;
50 else if (serialized ==
"MirroredRepeat")
52 value = MaterialTextureWrapMode::MirroredRepeat;
56 value = MaterialTextureWrapMode::Repeat;
61inline Node& operator<<(
Node& node,
const MaterialTextureMagFilter& value)
63 node << std::string(ToString(value));
67inline const Node& operator>>(
const Node& node, MaterialTextureMagFilter& value)
69 std::string serialized;
71 value = serialized ==
"Nearest" ? MaterialTextureMagFilter::Nearest : MaterialTextureMagFilter::Linear;
75inline Node& operator<<(
Node& node,
const MaterialTextureMinFilter& value)
77 node << std::string(ToString(value));
81inline Node& operator<<(
Node& node,
const MaterialTextureUvSet& value)
83 node << std::string(ToString(value));
87inline const Node& operator>>(
const Node& node, MaterialTextureMinFilter& value)
89 std::string serialized;
91 if (serialized ==
"Linear")
93 value = MaterialTextureMinFilter::Linear;
95 else if (serialized ==
"Nearest")
97 value = MaterialTextureMinFilter::Nearest;
99 else if (serialized ==
"NearestMipmapNearest")
101 value = MaterialTextureMinFilter::NearestMipmapNearest;
103 else if (serialized ==
"LinearMipmapNearest")
105 value = MaterialTextureMinFilter::LinearMipmapNearest;
107 else if (serialized ==
"NearestMipmapLinear")
109 value = MaterialTextureMinFilter::NearestMipmapLinear;
113 value = MaterialTextureMinFilter::LinearMipmapLinear;
118inline const Node& operator>>(
const Node& node, MaterialTextureUvSet& value)
120 std::string serialized;
122 value = serialized ==
"Uv1" ? MaterialTextureUvSet::Uv1 : MaterialTextureUvSet::Uv0;
126inline Node& operator<<(
Node& node,
const MaterialShadingModel& value)
128 node << std::string(ToString(value));
132inline const Node& operator>>(
const Node& node, MaterialShadingModel& value)
134 std::string serialized;
136 value = serialized ==
"Unlit" ? MaterialShadingModel::Unlit : MaterialShadingModel::Lit;
142 node[
"wrapU"] << sampler.wrap_u;
143 node[
"wrapV"] << sampler.wrap_v;
144 node[
"magFilter"] << sampler.mag_filter;
145 node[
"minFilter"] << sampler.min_filter;
151 if (node.has_property(
"wrapU"))
153 node[
"wrapU"] >> sampler.wrap_u;
155 if (node.has_property(
"wrapV"))
157 node[
"wrapV"] >> sampler.wrap_v;
159 if (node.has_property(
"magFilter"))
161 node[
"magFilter"] >> sampler.mag_filter;
163 if (node.has_property(
"minFilter"))
165 node[
"minFilter"] >> sampler.min_filter;
173 offset_node.set_type(NodeType::Array);
174 auto& offset_properties = offset_node.properties();
175 offset_properties.clear();
176 for (
int index = 0; index < 2; ++index)
179 component_node << transform.offset[index];
180 offset_properties.emplace_back(
"", std::move(component_node));
182 node[
"offset"] = std::move(offset_node);
185 scale_node.set_type(NodeType::Array);
186 auto& scale_properties = scale_node.properties();
187 scale_properties.clear();
188 for (
int index = 0; index < 2; ++index)
191 component_node << transform.scale[index];
192 scale_properties.emplace_back(
"", std::move(component_node));
194 node[
"scale"] = std::move(scale_node);
195 node[
"rotationDegrees"] << transform.rotation_degrees;
201 if (node.has_property(
"offset"))
203 const Node& offset_node = node[
"offset"];
204 ASSERT(offset_node.type() == NodeType::Array,
"material texture transform offset must be an array");
205 const auto& offset_properties = offset_node.properties();
206 ASSERT(offset_properties.size() >= 2,
"material texture transform offset requires two components");
207 for (
int index = 0; index < 2; ++index)
209 offset_properties[index].second >> transform.offset[index];
213 if (node.has_property(
"scale"))
215 const Node& scale_node = node[
"scale"];
216 ASSERT(scale_node.type() == NodeType::Array,
"material texture transform scale must be an array");
217 const auto& scale_properties = scale_node.properties();
218 ASSERT(scale_properties.size() >= 2,
"material texture transform scale requires two components");
219 for (
int index = 0; index < 2; ++index)
221 scale_properties[index].second >> transform.scale[index];
225 if (node.has_property(
"rotationDegrees"))
227 node[
"rotationDegrees"] >> transform.rotation_degrees;
#define ASSERT(condition,...)
Asserts that a condition is true.
Definition assert.h:142
Represents a hierarchical node capable of storing various data types and supporting YAML serializatio...
Definition node.h:49
Definition material_types.h:136
Definition material_types.h:146