| /* | |
| * Copyright 2015 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef GrSamplerState_DEFINED | |
| #define GrSamplerState_DEFINED | |
| #include "include/gpu/GrTypes.h" | |
| /** | |
| * Represents the filtering and tile modes used to access a texture. | |
| */ | |
| class GrSamplerState { | |
| public: | |
| enum class Filter : uint8_t { kNearest, kBilerp, kMipMap }; | |
| enum class WrapMode : uint8_t { kClamp, kRepeat, kMirrorRepeat, kClampToBorder }; | |
| static constexpr GrSamplerState ClampNearest() { return GrSamplerState(); } | |
| static constexpr GrSamplerState ClampBilerp() { | |
| return GrSamplerState(WrapMode::kClamp, Filter::kBilerp); | |
| } | |
| constexpr GrSamplerState() : GrSamplerState(WrapMode::kClamp, Filter::kNearest) {} | |
| constexpr GrSamplerState(WrapMode wrapXAndY, Filter filter) | |
| : fWrapModes{wrapXAndY, wrapXAndY}, fFilter(filter) {} | |
| constexpr GrSamplerState(const WrapMode wrapModes[2], Filter filter) | |
| : fWrapModes{wrapModes[0], wrapModes[1]}, fFilter(filter) {} | |
| constexpr GrSamplerState(const GrSamplerState&) = default; | |
| GrSamplerState& operator=(const GrSamplerState& that) { | |
| fWrapModes[0] = that.fWrapModes[0]; | |
| fWrapModes[1] = that.fWrapModes[1]; | |
| fFilter = that.fFilter; | |
| return *this; | |
| } | |
| Filter filter() const { return fFilter; } | |
| void setFilterMode(Filter filterMode) { fFilter = filterMode; } | |
| void setWrapModeX(const WrapMode wrap) { fWrapModes[0] = wrap; } | |
| void setWrapModeY(const WrapMode wrap) { fWrapModes[1] = wrap; } | |
| WrapMode wrapModeX() const { return fWrapModes[0]; } | |
| WrapMode wrapModeY() const { return fWrapModes[1]; } | |
| bool isRepeated() const { | |
| return (WrapMode::kClamp != fWrapModes[0] && WrapMode::kClampToBorder != fWrapModes[0]) || | |
| (WrapMode::kClamp != fWrapModes[1] && WrapMode::kClampToBorder != fWrapModes[1]); | |
| } | |
| bool operator==(const GrSamplerState& that) const { | |
| return fWrapModes[0] == that.fWrapModes[0] && fWrapModes[1] == that.fWrapModes[1] && | |
| fFilter == that.fFilter; | |
| } | |
| bool operator!=(const GrSamplerState& that) const { return !(*this == that); } | |
| private: | |
| WrapMode fWrapModes[2]; | |
| Filter fFilter; | |
| }; | |
| #endif |