- Creada la paleta de sistema

This commit is contained in:
2022-12-02 12:29:37 +01:00
parent 29a2ebf221
commit a96ce4afc9
2 changed files with 68 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
#include "systempalette.h"
namespace SystemPalette
{
uint32_t entries[256]; // Las 256 entradas de la paleta
uint8_t numEntries; // El número de entradas existente actualmente
// Vacía la paleta
void Clear()
{
// Fijamos el color transparente en 0 y el blanco en 1
entries[0] = 0x00000000; // Transparente
entries[1] = 0xffffffff; // Blanco
numEntries = 2;
// Ya que 'getRGBA' no comprueba que el índice solicitado sea menor que
// 'numentries', rellenamos con 'negro' todas las entradas no usadas.
for (int i = 2; i < 256; ++i ) entries[i] = 0x000000ff;
}
// Obtenemos el índice de la paleta para el color especificado. Si no existe se crea.
uint8_t getEntry(const uint32_t color)
{
// ATENCIÓN!!! Si intentamos introducir más de 256 colores empezará a
// sobreescribir los primeros colores. Al menos no corromperá la
// memoria. Pensar la mejor forma de controlar esto.
// Recorremos la paleta...
for (int i = 0; i < numEntries; ++i)
{
// Si encontramos el color, devolvemos su índice y salimos
if (entries[i] == color) return i;
}
// Si no se ha encontrado, lo ponemos al final
entries[numEntries] = color;
// Y devolvemos su índice
return numEntries++;
}
// Dado un índice, devolvemos su color
uint32_t getRGBA(const uint8_t entry)
{
// ATENCIÓN!!! No compruebo que el parámetro 'entry' sea menor que el
// miembro 'numEntries', por lo que se puede acceder a colores no
// definidos (por ejemplo tener 4 colores y acceder al color 8). La
// razón es que necesito que esta función sea lo más rápida posible.
// En cualquier caso, nunca se va a salir de la memoria ni nada raro.
return entries[entry];
}
}