| // Copyright 2018 The Amber Authors. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #include "src/command_data.h" |
| |
| namespace amber { |
| |
| Topology NameToTopology(const std::string& name) { |
| static const struct { |
| const char* name; |
| Topology val; |
| } topologies[] = { |
| {"PATCH_LIST", Topology::kPatchList}, |
| {"POINT_LIST", Topology::kPointList}, |
| {"GL_LINE_STRIP_ADJACENCY", Topology::kLineStripWithAdjacency}, |
| {"GL_LINE_STRIP", Topology::kLineStrip}, |
| {"GL_LINES", Topology::kLineList}, |
| {"GL_LINES_ADJACENCY", Topology::kLineListWithAdjacency}, |
| {"GL_PATCHES", Topology::kPatchList}, |
| {"GL_POINTS", Topology::kPointList}, |
| {"GL_TRIANGLE_STRIP", Topology::kTriangleStrip}, |
| {"GL_TRIANGLE_FAN", Topology::kTriangleFan}, |
| {"GL_TRIANGLES", Topology::kTriangleList}, |
| {"GL_TRIANGLES_ADJACENCY", Topology::kTriangleListWithAdjacency}, |
| {"GL_TRIANGLE_STRIP_ADJACENCY", Topology::kTriangleStripWithAdjacency}, |
| {"LINE_LIST", Topology::kLineList}, |
| {"LINE_LIST_WITH_ADJACENCY", Topology::kLineListWithAdjacency}, |
| {"LINE_STRIP", Topology::kLineStrip}, |
| {"LINE_STRIP_WITH_ADJACENCY", Topology::kLineStripWithAdjacency}, |
| {"TRIANGLE_FAN", Topology::kTriangleFan}, |
| {"TRIANGLE_LIST", Topology::kTriangleList}, |
| {"TRIANGLE_LIST_WITH_ADJACENCY", Topology::kTriangleListWithAdjacency}, |
| {"TRIANGLE_STRIP", Topology::kTriangleStrip}, |
| {"TRIANGLE_STRIP_WITH_ADJACENCY", Topology::kTriangleStripWithAdjacency}, |
| }; |
| |
| // TODO(dsinclair): Make smarter if needed |
| for (auto& topo : topologies) { |
| if (topo.name == name) |
| return topo.val; |
| } |
| |
| return Topology::kUnknown; |
| } |
| |
| BlendFactor NameToBlendFactor(const std::string& name) { |
| if (name == "zero") |
| return BlendFactor::kZero; |
| else if (name == "one") |
| return BlendFactor::kOne; |
| else if (name == "src_color") |
| return BlendFactor::kSrcColor; |
| else if (name == "one_minus_src_color") |
| return BlendFactor::kOneMinusSrcColor; |
| else if (name == "dst_color") |
| return BlendFactor::kDstColor; |
| else if (name == "one_minus_dst_color") |
| return BlendFactor::kOneMinusDstColor; |
| else if (name == "src_alpha") |
| return BlendFactor::kSrcAlpha; |
| else if (name == "one_minus_src_alpha") |
| return BlendFactor::kOneMinusSrcAlpha; |
| else if (name == "dst_alpha") |
| return BlendFactor::kDstAlpha; |
| else if (name == "one_minus_dst_alpha") |
| return BlendFactor::kOneMinusDstAlpha; |
| else if (name == "constant_color") |
| return BlendFactor::kConstantColor; |
| else if (name == "one_minus_constant_color") |
| return BlendFactor::kOneMinusConstantColor; |
| else if (name == "costant_alpha") |
| return BlendFactor::kConstantAlpha; |
| else if (name == "one_minus_constant_alpha") |
| return BlendFactor::kOneMinusConstantAlpha; |
| else if (name == "src_alpha_saturate") |
| return BlendFactor::kSrcAlphaSaturate; |
| else if (name == "src1_color") |
| return BlendFactor::kSrc1Color; |
| else if (name == "one_minus_src1_color") |
| return BlendFactor::kOneMinusSrc1Color; |
| else if (name == "src1_alpha") |
| return BlendFactor::kSrc1Alpha; |
| else if (name == "one_minus_src1_alpha") |
| return BlendFactor::kOneMinusSrc1Alpha; |
| else |
| return BlendFactor::kUnknown; |
| } |
| |
| BlendOp NameToBlendOp(const std::string& name) { |
| if (name == "add") |
| return BlendOp::kAdd; |
| else if (name == "substract") |
| return BlendOp::kSubtract; |
| else if (name == "reverse_substract") |
| return BlendOp::kReverseSubtract; |
| else if (name == "min") |
| return BlendOp::kMin; |
| else if (name == "max") |
| return BlendOp::kMax; |
| else if (name == "zero") |
| return BlendOp::kZero; |
| else if (name == "src") |
| return BlendOp::kSrc; |
| else if (name == "dst") |
| return BlendOp::kDst; |
| else if (name == "src_over") |
| return BlendOp::kSrcOver; |
| else if (name == "dst_over") |
| return BlendOp::kDstOver; |
| else if (name == "src_in") |
| return BlendOp::kSrcIn; |
| else if (name == "dst_in") |
| return BlendOp::kDstIn; |
| else if (name == "src_out") |
| return BlendOp::kSrcOut; |
| else if (name == "dst_out") |
| return BlendOp::kDstOut; |
| else if (name == "src_atop") |
| return BlendOp::kSrcAtop; |
| else if (name == "dst_atop") |
| return BlendOp::kDstAtop; |
| else if (name == "xor") |
| return BlendOp::kXor; |
| else if (name == "multiply") |
| return BlendOp::kMultiply; |
| else if (name == "screen") |
| return BlendOp::kScreen; |
| else if (name == "overlay") |
| return BlendOp::kOverlay; |
| else if (name == "darken") |
| return BlendOp::kDarken; |
| else if (name == "lighten") |
| return BlendOp::kLighten; |
| else if (name == "color_dodge") |
| return BlendOp::kColorDodge; |
| else if (name == "color_burn") |
| return BlendOp::kColorBurn; |
| else if (name == "hard_light") |
| return BlendOp::kHardLight; |
| else if (name == "soft_light") |
| return BlendOp::kSoftLight; |
| else if (name == "difference") |
| return BlendOp::kDifference; |
| else if (name == "exclusion") |
| return BlendOp::kExclusion; |
| else if (name == "invert") |
| return BlendOp::kInvert; |
| else if (name == "invert_rgb") |
| return BlendOp::kInvertRGB; |
| else if (name == "linear_dodge") |
| return BlendOp::kLinearDodge; |
| else if (name == "linear_burn") |
| return BlendOp::kLinearBurn; |
| else if (name == "vivid_light") |
| return BlendOp::kVividLight; |
| else if (name == "linear_light") |
| return BlendOp::kLinearLight; |
| else if (name == "pin_light") |
| return BlendOp::kPinLight; |
| else if (name == "hard_mix") |
| return BlendOp::kHardMix; |
| else if (name == "hsl_hue") |
| return BlendOp::kHslHue; |
| else if (name == "hsl_saturation") |
| return BlendOp::kHslSaturation; |
| else if (name == "hsl_color") |
| return BlendOp::kHslColor; |
| else if (name == "hsl_luminosity") |
| return BlendOp::kHslLuminosity; |
| else if (name == "plus") |
| return BlendOp::kPlus; |
| else if (name == "plus_clamped") |
| return BlendOp::kPlusClamped; |
| else if (name == "plus_clamped_alpha") |
| return BlendOp::kPlusClampedAlpha; |
| else if (name == "plus_darker") |
| return BlendOp::kPlusDarker; |
| else if (name == "minus") |
| return BlendOp::kMinus; |
| else if (name == "minus_clamped") |
| return BlendOp::kMinusClamped; |
| else if (name == "contrast") |
| return BlendOp::kContrast; |
| else if (name == "invert_ovg") |
| return BlendOp::kInvertOvg; |
| else if (name == "red") |
| return BlendOp::kRed; |
| else if (name == "green") |
| return BlendOp::kGreen; |
| else if (name == "blue") |
| return BlendOp::kBlue; |
| else |
| return BlendOp::kUnknown; |
| } |
| |
| } // namespace amber |