blob: b298b6b64a4175762707bd63c2752a97f824e4e9 [file] [log] [blame]
// 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 gfx {
class ColorTransform;
}
namespace gpu {
namespace gles2 {
class GLES2Interface;
}
}
class ColorLUTCache {
public:
explicit ColorLUTCache(gpu::gles2::GLES2Interface* gl,
bool texture_half_float_linear);
~ColorLUTCache();
struct LUT {
unsigned int texture;
int size;
};
LUT GetLUT(const gfx::ColorTransform* transform);
// End of frame, assume all LUTs handed out are no longer used.
void Swap();
private:
template <typename T>
unsigned int MakeLUT(const gfx::ColorTransform* transform, int lut_samples);
typedef const gfx::ColorTransform* CacheKey;
struct CacheVal {
CacheVal(LUT lut, uint32_t last_used_frame)
: lut(lut), last_used_frame(last_used_frame) {}
LUT lut;
uint32_t last_used_frame;
};
base::MRUCache<CacheKey, CacheVal> lut_cache_;
uint32_t current_frame_;
gpu::gles2::GLES2Interface* gl_;
bool texture_half_float_linear_;
DISALLOW_COPY_AND_ASSIGN(ColorLUTCache);
};
#endif // CC_OUTPUT_COLOR_LUT_CACHE_H_