1 // Copyright 2019 The Amber Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #ifndef SRC_SAMPLER_H_ 16 #define SRC_SAMPLER_H_ 17 18 #include <cstdint> 19 #include <memory> 20 #include <string> 21 #include <utility> 22 #include <vector> 23 24 #include "amber/result.h" 25 #include "amber/value.h" 26 #include "src/command_data.h" 27 #include "src/format.h" 28 29 namespace amber { 30 31 enum class FilterType : int8_t { kUnknown = -1, kNearest = 0, kLinear = 1 }; 32 33 enum class AddressMode : int8_t { 34 kUnknown = -1, 35 kRepeat = 0, 36 kMirroredRepeat = 1, 37 kClampToEdge = 2, 38 kClampToBorder = 3, 39 kMirrorClampToEdge = 4 40 }; 41 42 enum class BorderColor : int8_t { 43 kUnknown = -1, 44 kFloatTransparentBlack = 0, 45 kIntTransparentBlack = 1, 46 kFloatOpaqueBlack = 2, 47 kIntOpaqueBlack = 3, 48 kFloatOpaqueWhite = 4, 49 kIntOpaqueWhite = 5 50 }; 51 52 class Sampler { 53 public: 54 Sampler(); 55 ~Sampler(); 56 SetName(const std::string & name)57 void SetName(const std::string& name) { name_ = name; } GetName()58 std::string GetName() const { return name_; } 59 SetMagFilter(FilterType filter)60 void SetMagFilter(FilterType filter) { mag_filter_ = filter; } GetMagFilter()61 FilterType GetMagFilter() const { return mag_filter_; } 62 SetMinFilter(FilterType filter)63 void SetMinFilter(FilterType filter) { min_filter_ = filter; } GetMinFilter()64 FilterType GetMinFilter() const { return min_filter_; } 65 SetMipmapMode(FilterType filter)66 void SetMipmapMode(FilterType filter) { mipmap_mode_ = filter; } GetMipmapMode()67 FilterType GetMipmapMode() const { return mipmap_mode_; } 68 SetAddressModeU(AddressMode mode)69 void SetAddressModeU(AddressMode mode) { address_mode_u_ = mode; } GetAddressModeU()70 AddressMode GetAddressModeU() const { return address_mode_u_; } 71 SetAddressModeV(AddressMode mode)72 void SetAddressModeV(AddressMode mode) { address_mode_v_ = mode; } GetAddressModeV()73 AddressMode GetAddressModeV() const { return address_mode_v_; } 74 SetAddressModeW(AddressMode mode)75 void SetAddressModeW(AddressMode mode) { address_mode_w_ = mode; } GetAddressModeW()76 AddressMode GetAddressModeW() const { return address_mode_w_; } 77 SetBorderColor(BorderColor color)78 void SetBorderColor(BorderColor color) { border_color_ = color; } GetBorderColor()79 BorderColor GetBorderColor() const { return border_color_; } 80 SetMinLOD(float min_lod)81 void SetMinLOD(float min_lod) { min_lod_ = min_lod; } GetMinLOD()82 float GetMinLOD() const { return min_lod_; } 83 SetMaxLOD(float max_lod)84 void SetMaxLOD(float max_lod) { max_lod_ = max_lod; } GetMaxLOD()85 float GetMaxLOD() const { return max_lod_; } 86 SetNormalizedCoords(bool norm)87 void SetNormalizedCoords(bool norm) { normalized_coords_ = norm; } GetNormalizedCoords()88 bool GetNormalizedCoords() const { return normalized_coords_; } 89 SetCompareEnable(bool compare_enable)90 void SetCompareEnable(bool compare_enable) { 91 compare_enable_ = compare_enable; 92 } GetCompareEnable()93 bool GetCompareEnable() const { return compare_enable_; } 94 SetCompareOp(CompareOp compare_op)95 void SetCompareOp(CompareOp compare_op) { compare_op_ = compare_op; } GetCompareOp()96 CompareOp GetCompareOp() const { return compare_op_; } 97 98 private: 99 std::string name_; 100 FilterType min_filter_ = FilterType::kNearest; 101 FilterType mag_filter_ = FilterType::kNearest; 102 FilterType mipmap_mode_ = FilterType::kNearest; 103 AddressMode address_mode_u_ = AddressMode::kRepeat; 104 AddressMode address_mode_v_ = AddressMode::kRepeat; 105 AddressMode address_mode_w_ = AddressMode::kRepeat; 106 BorderColor border_color_ = BorderColor::kFloatTransparentBlack; 107 float min_lod_ = 0.0f; 108 float max_lod_ = 1.0f; 109 bool normalized_coords_ = true; 110 bool compare_enable_ = false; 111 CompareOp compare_op_ = CompareOp::kNever; 112 }; 113 114 } // namespace amber 115 116 #endif // SRC_SAMPLER_H_ 117