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/format.h" 27 28 namespace amber { 29 30 enum class FilterType : int8_t { kUnknown = -1, kNearest = 0, kLinear = 1 }; 31 32 enum class AddressMode : int8_t { 33 kUnknown = -1, 34 kRepeat = 0, 35 kMirroredRepeat = 1, 36 kClampToEdge = 2, 37 kClampToBorder = 3, 38 kMirrorClampToEdge = 4 39 }; 40 41 enum class BorderColor : int8_t { 42 kUnknown = -1, 43 kFloatTransparentBlack = 0, 44 kIntTransparentBlack = 1, 45 kFloatOpaqueBlack = 2, 46 kIntOpaqueBlack = 3, 47 kFloatOpaqueWhite = 4, 48 kIntOpaqueWhite = 5 49 }; 50 51 class Sampler { 52 public: 53 Sampler(); 54 ~Sampler(); 55 SetName(const std::string & name)56 void SetName(const std::string& name) { name_ = name; } GetName()57 std::string GetName() const { return name_; } 58 SetMagFilter(FilterType filter)59 void SetMagFilter(FilterType filter) { mag_filter_ = filter; } GetMagFilter()60 FilterType GetMagFilter() const { return mag_filter_; } 61 SetMinFilter(FilterType filter)62 void SetMinFilter(FilterType filter) { min_filter_ = filter; } GetMinFilter()63 FilterType GetMinFilter() const { return min_filter_; } 64 SetMipmapMode(FilterType filter)65 void SetMipmapMode(FilterType filter) { mipmap_mode_ = filter; } GetMipmapMode()66 FilterType GetMipmapMode() const { return mipmap_mode_; } 67 SetAddressModeU(AddressMode mode)68 void SetAddressModeU(AddressMode mode) { address_mode_u_ = mode; } GetAddressModeU()69 AddressMode GetAddressModeU() const { return address_mode_u_; } 70 SetAddressModeV(AddressMode mode)71 void SetAddressModeV(AddressMode mode) { address_mode_v_ = mode; } GetAddressModeV()72 AddressMode GetAddressModeV() const { return address_mode_v_; } 73 SetAddressModeW(AddressMode mode)74 void SetAddressModeW(AddressMode mode) { address_mode_w_ = mode; } GetAddressModeW()75 AddressMode GetAddressModeW() const { return address_mode_w_; } 76 SetBorderColor(BorderColor color)77 void SetBorderColor(BorderColor color) { border_color_ = color; } GetBorderColor()78 BorderColor GetBorderColor() const { return border_color_; } 79 SetMinLOD(float min_lod)80 void SetMinLOD(float min_lod) { min_lod_ = min_lod; } GetMinLOD()81 float GetMinLOD() const { return min_lod_; } 82 SetMaxLOD(float max_lod)83 void SetMaxLOD(float max_lod) { max_lod_ = max_lod; } GetMaxLOD()84 float GetMaxLOD() const { return max_lod_; } 85 SetNormalizedCoords(bool norm)86 void SetNormalizedCoords(bool norm) { normalized_coords_ = norm; } GetNormalizedCoords()87 bool GetNormalizedCoords() const { return normalized_coords_; } 88 89 private: 90 std::string name_; 91 FilterType min_filter_ = FilterType::kNearest; 92 FilterType mag_filter_ = FilterType::kNearest; 93 FilterType mipmap_mode_ = FilterType::kNearest; 94 AddressMode address_mode_u_ = AddressMode::kRepeat; 95 AddressMode address_mode_v_ = AddressMode::kRepeat; 96 AddressMode address_mode_w_ = AddressMode::kRepeat; 97 BorderColor border_color_ = BorderColor::kFloatTransparentBlack; 98 float min_lod_ = 0.0f; 99 float max_lod_ = 1.0f; 100 bool normalized_coords_ = true; 101 }; 102 103 } // namespace amber 104 105 #endif // SRC_SAMPLER_H_ 106