Files
Aerofoil/PortabilityLayer/QDStandardPalette.h

58 lines
1.3 KiB
C++

#pragma once
#include "AntiAliasTable.h"
#include "RGBAColor.h"
namespace PortabilityLayer
{
struct AntiAliasTable;
class StandardPalette
{
public:
static const unsigned int kSize = 256;
StandardPalette();
const RGBAColor *GetColors() const;
static uint8_t MapColorAnalyticTruncated(unsigned int r, unsigned int g, unsigned int b);
static uint8_t MapColorAnalytic(uint8_t r, uint8_t g, uint8_t b);
static uint8_t MapColorAnalytic(const RGBAColor &color);
uint8_t MapColorLUT(uint8_t r, uint8_t g, uint8_t b) const;
uint8_t MapColorLUT(const RGBAColor &color) const;
const AntiAliasTable &GetCachedPaletteAATable(const RGBAColor &color);
const AntiAliasTable &GetCachedToneAATable(uint8_t tone);
static StandardPalette *GetInstance();
private:
static StandardPalette ms_instance;
struct CachedPaletteTableEntry
{
uint8_t m_rgb[3];
AntiAliasTable m_aaTable;
};
struct CachedToneTableEntry
{
uint8_t m_tone;
AntiAliasTable m_aaTable;
};
static const size_t kMaxCachedPaletteTables = 16;
static const size_t kMaxCachedToneTables = 16;
CachedPaletteTableEntry m_cachedPaletteTables[kMaxCachedPaletteTables];
size_t m_numCachedPaletteTables;
CachedToneTableEntry m_cachedToneTables[kMaxCachedToneTables];
size_t m_numCachedToneTables;
RGBAColor m_colors[kSize];
uint8_t m_lut[16 * 16 * 16];
};
}