| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CC_OUTPUT_COLOR_LUT_CACHE_H_ |
| #define CC_OUTPUT_COLOR_LUT_CACHE_H_ |
| |
| #include <map> |
| |
| #include "base/containers/mru_cache.h" |
| #include "base/macros.h" |
| #include "ui/gfx/color_space.h" |
| |
| namespace gpu { |
| namespace gles2 { |
| class GLES2Interface; |
| } |
| } |
| |
| class ColorLUTCache { |
| public: |
| explicit ColorLUTCache(gpu::gles2::GLES2Interface* gl); |
| ~ColorLUTCache(); |
| |
| unsigned int GetLUT(const gfx::ColorSpace& from, |
| const gfx::ColorSpace& to, |
| int lut_samples); |
| |
| // End of frame, assume all LUTs handed out are no longer used. |
| void Swap(); |
| |
| private: |
| unsigned int MakeLUT(const gfx::ColorSpace& from, |
| gfx::ColorSpace to, |
| int lut_samples); |
| |
| typedef std::pair<gfx::ColorSpace, std::pair<gfx::ColorSpace, size_t>> |
| CacheKey; |
| |
| struct CacheVal { |
| CacheVal(unsigned int texture, uint32_t last_used_frame) |
| : texture(texture), last_used_frame(last_used_frame) {} |
| unsigned int texture; |
| uint32_t last_used_frame; |
| }; |
| |
| base::MRUCache<CacheKey, CacheVal> lut_cache_; |
| uint32_t current_frame_; |
| gpu::gles2::GLES2Interface* gl_; |
| DISALLOW_COPY_AND_ASSIGN(ColorLUTCache); |
| }; |
| |
| #endif // CC_OUTPUT_COLOR_LUT_CACHE_H_ |