forked from jaildesigner-jailgames/jaildoctors_dilemma
55 lines
1.9 KiB
C++
55 lines
1.9 KiB
C++
#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];
|
|
}
|
|
}
|