|
OpenTTD Source
14.0-beta3
|
#include "stdafx.h"#include "blitter/base.hpp"#include "blitter/factory.hpp"#include "fileio_func.h"#include "gfx_type.h"#include "landscape_type.h"#include "palette_func.h"#include "settings_type.h"#include "thread.h"#include "table/palettes.h"#include "safeguards.h"Go to the source code of this file.
Macros | |
| #define | EXTR(p, q) (((uint16_t)(palette_animation_counter * (p)) * (q)) >> 16) |
| #define | EXTR2(p, q) (((uint16_t)(~palette_animation_counter * (p)) * (q)) >> 16) |
Typedefs | |
| using | PaletteLookup = std::array< uint8_t, 1U<<(PALETTE_BITS *3)> |
Functions | |
| uint | CrunchColour (uint c) |
| Reduce bits per channel to PALETTE_BITS, and place value in the middle of the reduced range. More... | |
| static uint | CalculateColourDistance (const Colour &col1, int r2, int g2, int b2) |
| Calculate distance between two colours. More... | |
| static uint8_t | FindNearestColourIndex (uint8_t r, uint8_t g, uint8_t b) |
| Find nearest colour palette index for a 32bpp pixel. More... | |
| uint8_t | GetNearestColourIndex (uint8_t r, uint8_t g, uint8_t b) |
| Get nearest colour palette index from an RGB colour. More... | |
| void | DoPaletteAnimations () |
| void | GfxInitPalettes () |
| bool | CopyPalette (Palette &local_palette, bool force_copy) |
| Copy the current palette if the palette was updated. More... | |
| TextColour | GetContrastColour (uint8_t background, uint8_t threshold) |
| Determine a contrasty text colour for a coloured background. More... | |
Variables | |
| Palette | _cur_palette |
| Current palette. | |
| byte | _colour_gradient [COLOUR_END][8] |
| All 16 colour gradients 8 colours per gradient from darkest (0) to lightest (7) | |
| static std::recursive_mutex | _palette_mutex |
| To coordinate access to _cur_palette. | |
| const uint | PALETTE_BITS = 6 |
| PALETTE_BITS reduces the bits-per-channel of 32bpp graphics data to allow faster palette lookups from a smaller lookup table. More... | |
| const uint | PALETTE_SHIFT = 8 - PALETTE_BITS |
| const uint | PALETTE_BITS_MASK = ((1U << PALETTE_BITS) - 1) << PALETTE_SHIFT |
| const uint | PALETTE_BITS_OR = (1U << (PALETTE_SHIFT - 1)) |
| static PaletteLookup | _palette_lookup {} |
| const uint8_t | PALETTE_INDEX_CC_START = 198 |
| Palette index of start of company colour remap area. | |
| const uint8_t | PALETTE_INDEX_CC_END = PALETTE_INDEX_CC_START + 8 |
| Palette index of end of company colour remap area. | |
| const uint8_t | PALETTE_INDEX_START = 1 |
| Palette index of start of defined palette. | |
| const uint8_t | PALETTE_INDEX_END = 215 |
| Palette index of end of defined palette. | |
Handling of palettes.
Definition in file palette.cpp.
|
static |
Calculate distance between two colours.
| col1 | First colour. |
| r2 | Red component of second colour. |
| g2 | Green component of second colour. |
| b2 | Blue component of second colour. |
Definition at line 72 of file palette.cpp.
Referenced by FindNearestColourIndex().
| bool CopyPalette | ( | Palette & | local_palette, |
| bool | force_copy | ||
| ) |
Copy the current palette if the palette was updated.
Used by video-driver to get a current up-to-date version of the palette, to avoid two threads accessing the same piece of memory (with a good chance one is already updating the palette while the other is drawing based on it).
| local_palette | The location to copy the palette to. |
| force_copy | Whether to ignore if there is an update for the palette. |
Definition at line 154 of file palette.cpp.
References _cur_palette, _palette_mutex, Palette::count_dirty, Palette::first_dirty, and lock.
Referenced by VideoDriver_SDL::CheckPaletteAnim(), VideoDriver_Win32Base::CheckPaletteAnim(), VideoDriver_SDL_Base::CheckPaletteAnim(), and VideoDriver_SDL_Base::ClientSizeChanged().
|
inline |
Reduce bits per channel to PALETTE_BITS, and place value in the middle of the reduced range.
This is to counteract the information lost between bright and dark pixels, e.g if PALETTE_BITS was 2: 0 - 63 -> 32 64 - 127 -> 96 128 - 191 -> 160 192 - 255 -> 224
| c | 8 bit colour component. |
Definition at line 59 of file palette.cpp.
Referenced by FindNearestColourIndex().
|
static |
Find nearest colour palette index for a 32bpp pixel.
| r | Red component. |
| g | Green component. |
| b | Blue component. |
Definition at line 96 of file palette.cpp.
References _palette, CalculateColourDistance(), CrunchColour(), Palette::palette, PALETTE_INDEX_CC_END, PALETTE_INDEX_CC_START, PALETTE_INDEX_END, and PALETTE_INDEX_START.
| TextColour GetContrastColour | ( | uint8_t | background, |
| uint8_t | threshold | ||
| ) |
Determine a contrasty text colour for a coloured background.
| background | Background colour. |
| threshold | Background colour brightness threshold below which the background is considered dark and TC_WHITE is returned, range: 0 - 255, default 128. |
Definition at line 289 of file palette.cpp.
References _cur_palette, and Palette::palette.
| uint8_t GetNearestColourIndex | ( | uint8_t | r, |
| uint8_t | g, | ||
| uint8_t | b | ||
| ) |
Get nearest colour palette index from an RGB colour.
A search is performed if this colour is not already in the lookup table.
| r | Red component. |
| g | Green component. |
| b | Blue component. |
Definition at line 129 of file palette.cpp.
| const uint PALETTE_BITS = 6 |
PALETTE_BITS reduces the bits-per-channel of 32bpp graphics data to allow faster palette lookups from a smaller lookup table.
6 bpc is chosen as this results in a palette lookup table of 256KiB with adequate fidelty. In constract, a 5 bpc lookup table would be 32KiB, and 7 bpc would be 2MiB.
Values in the table are filled as they are first encountered – larger lookup table means more colour distance calculations, and is therefore slower.
Definition at line 40 of file palette.cpp.