Path: blob/master/RSDKv5/RSDK/Graphics/Palette.hpp
1175 views
#ifndef PALETTE_H1#define PALETTE_H23namespace RSDK4{56#define PALETTE_BANK_COUNT (0x8)7#define PALETTE_BANK_SIZE (0x100)89union Color {10uint8 bytes[4];11uint32 color;12};1314extern uint16 rgb32To16_R[0x100];15extern uint16 rgb32To16_G[0x100];16extern uint16 rgb32To16_B[0x100];1718extern uint16 globalPalette[PALETTE_BANK_COUNT][PALETTE_BANK_SIZE];19extern uint16 activeGlobalRows[PALETTE_BANK_COUNT];20extern uint16 activeStageRows[PALETTE_BANK_COUNT];21extern uint16 stagePalette[PALETTE_BANK_COUNT][PALETTE_BANK_SIZE];2223extern uint16 fullPalette[PALETTE_BANK_COUNT][PALETTE_BANK_SIZE];2425extern uint8 gfxLineBuffer[SCREEN_YSIZE]; // Pointers to active palette2627extern int32 maskColor;2829#if RETRO_REV0230extern uint16 *tintLookupTable;31#else32extern uint16 tintLookupTable[0x10000];33#endif3435#define RGB888_TO_RGB565(r, g, b) ((b) >> 3) | (((g) >> 2) << 5) | (((r) >> 3) << 11)3637#define PACK_RGB888(r, g, b) RGB888_TO_RGB565(r, g, b)3839#if RETRO_REV0240void LoadPalette(uint8 bankID, const char *filePath, uint16 disabledRows);41#endif4243inline void SetActivePalette(uint8 newActiveBank, int32 startLine, int32 endLine)44{45if (newActiveBank < PALETTE_BANK_COUNT)46for (int32 l = startLine; l < endLine && l < SCREEN_YSIZE; l++) gfxLineBuffer[l] = newActiveBank;47}4849inline uint32 GetPaletteEntry(uint8 bankID, uint8 index)50{51// 0xF800 = 1111 1000 0000 0000 = R52// 0x7E0 = 0000 0111 1110 0000 = G53// 0x1F = 0000 0000 0001 1111 = B54uint16 clr = fullPalette[bankID & 7][index];5556int32 R = (clr & 0xF800) << 8;57int32 G = (clr & 0x7E0) << 5;58int32 B = (clr & 0x1F) << 3;59return R | G | B;60}6162inline void SetPaletteEntry(uint8 bankID, uint8 index, uint32 color)63{64fullPalette[bankID][index] = rgb32To16_B[(color >> 0) & 0xFF] | rgb32To16_G[(color >> 8) & 0xFF] | rgb32To16_R[(color >> 16) & 0xFF];65}6667inline void SetPaletteMask(uint32 color)68{69maskColor = rgb32To16_B[(color >> 0) & 0xFF] | rgb32To16_G[(color >> 8) & 0xFF] | rgb32To16_R[(color >> 16) & 0xFF];70}7172#if RETRO_REV0273inline void SetTintLookupTable(uint16 *lookupTable) { tintLookupTable = lookupTable; }7475#if RETRO_USE_MOD_LOADER && RETRO_MOD_LOADER_VER >= 276inline uint16 *GetTintLookupTable() { return tintLookupTable; }77#endif7879#else80inline uint16 *GetTintLookupTable() { return tintLookupTable; }81#endif8283inline void CopyPalette(uint8 sourceBank, uint8 srcBankStart, uint8 destinationBank, uint8 destBankStart, uint8 count)84{85if (sourceBank < PALETTE_BANK_COUNT && destinationBank < PALETTE_BANK_COUNT) {86for (int32 i = 0; i < count; ++i) {87fullPalette[destinationBank][destBankStart + i] = fullPalette[sourceBank][srcBankStart + i];88}89}90}9192inline void RotatePalette(uint8 bankID, uint8 startIndex, uint8 endIndex, bool32 right)93{94if (right) {95uint16 startClr = fullPalette[bankID][endIndex];96for (int32 i = endIndex; i > startIndex; --i) fullPalette[bankID][i] = fullPalette[bankID][i - 1];97fullPalette[bankID][startIndex] = startClr;98}99else {100uint16 startClr = fullPalette[bankID][startIndex];101for (int32 i = startIndex; i < endIndex; ++i) fullPalette[bankID][i] = fullPalette[bankID][i + 1];102fullPalette[bankID][endIndex] = startClr;103}104}105106#if RETRO_REV02107void BlendColors(uint8 destBankID, uint32 *srcColorsA, uint32 *srcColorsB, int32 blendAmount, int32 startIndex, int32 count);108#endif109void SetPaletteFade(uint8 destBankID, uint8 srcBankA, uint8 srcBankB, int16 blendAmount, int32 startIndex, int32 endIndex);110111#if RETRO_REV0U112#include "Legacy/PaletteLegacy.hpp"113#endif114115} // namespace RSDK116117#endif118119120