| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #pragma once | |
| #include <unordered_map> | |
| #include "flutter/fml/macros.h" | |
| #include "impeller/base/comparable.h" | |
| #include "impeller/renderer/formats.h" | |
| namespace impeller { | |
| class Sampler; | |
| class Context; | |
| struct SamplerDescriptor final : public Comparable<SamplerDescriptor> { | |
| MinMagFilter min_filter = MinMagFilter::kNearest; | |
| MinMagFilter mag_filter = MinMagFilter::kNearest; | |
| MipFilter mip_filter = MipFilter::kNone; | |
| SamplerAddressMode width_address_mode = SamplerAddressMode::kClampToEdge; | |
| SamplerAddressMode height_address_mode = SamplerAddressMode::kClampToEdge; | |
| SamplerAddressMode depth_address_mode = SamplerAddressMode::kClampToEdge; | |
| std::string label = "NN Clamp Sampler"; | |
| // Comparable<SamplerDescriptor> | |
| std::size_t GetHash() const override { | |
| return fml::HashCombine(min_filter, mag_filter, mip_filter, | |
| width_address_mode, height_address_mode, | |
| depth_address_mode); | |
| } | |
| // Comparable<SamplerDescriptor> | |
| bool IsEqual(const SamplerDescriptor& o) const override { | |
| return min_filter == o.min_filter && mag_filter == o.mag_filter && | |
| mip_filter == o.mip_filter && | |
| width_address_mode == o.width_address_mode && | |
| height_address_mode == o.height_address_mode && | |
| depth_address_mode == o.depth_address_mode; | |
| } | |
| }; | |
| using SamplerMap = std::unordered_map<SamplerDescriptor, | |
| std::shared_ptr<const Sampler>, | |
| ComparableHash<SamplerDescriptor>, | |
| ComparableEqual<SamplerDescriptor>>; | |
| } // namespace impeller |