mirror of
https://github.com/NeoFlock/neonucleus.git
synced 2025-09-24 09:03:32 +02:00
color mapping changes
This commit is contained in:
parent
e9e02a2473
commit
6a90d6306d
@ -360,6 +360,27 @@ void nn_getStd4BitPalette(int color[16]) {
|
|||||||
color[15] = nni_mcBlack; // black
|
color[15] = nni_mcBlack; // black
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nn_getLegacy4BitPalette(int color[16]) {
|
||||||
|
// taken from https://github.com/MightyPirates/OpenComputers/blob/master-MC1.12/src/main/scala/li/cil/oc/util/PackedColor.scala
|
||||||
|
|
||||||
|
color[0] = 0xFFFFFF;
|
||||||
|
color[1] = 0xFFCC33;
|
||||||
|
color[2] = 0xCC66CC;
|
||||||
|
color[3] = 0x6699FF;
|
||||||
|
color[4] = 0xFFFF33;
|
||||||
|
color[5] = 0x33CC33;
|
||||||
|
color[6] = 0xFF6699;
|
||||||
|
color[7] = 0x333333;
|
||||||
|
color[8] = 0xCCCCCC;
|
||||||
|
color[9] = 0x336699;
|
||||||
|
color[10] = 0x9933CC;
|
||||||
|
color[11] = 0x333399;
|
||||||
|
color[12] = 0x663300;
|
||||||
|
color[13] = 0x336600;
|
||||||
|
color[14] = 0xFF3333;
|
||||||
|
color[15] = 0x000000;
|
||||||
|
}
|
||||||
|
|
||||||
void nn_getStd8BitPalette(int color[256]) {
|
void nn_getStd8BitPalette(int color[256]) {
|
||||||
// source: https://ocdoc.cil.li/component:gpu
|
// source: https://ocdoc.cil.li/component:gpu
|
||||||
int reds[6] = {0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF};
|
int reds[6] = {0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF};
|
||||||
@ -399,17 +420,28 @@ static nn_bool_t nni_4bit_did = false;
|
|||||||
static int nni_8bit_colors[256];
|
static int nni_8bit_colors[256];
|
||||||
static nn_bool_t nni_8bit_did = false;
|
static nn_bool_t nni_8bit_did = false;
|
||||||
|
|
||||||
int nn_mapDepth(int color, int depth) {
|
static int nni_4bitl_colors[16];
|
||||||
|
static nn_bool_t nni_4bitl_did = false;
|
||||||
|
|
||||||
|
int nn_mapDepth(int color, int depth, nn_bool_t legacy) {
|
||||||
if(depth == 1) {
|
if(depth == 1) {
|
||||||
if(color == 0) return nni_mcBlack;
|
if(color == 0) return nni_mcBlack;
|
||||||
return nni_mcWhite;
|
return nni_mcWhite;
|
||||||
}
|
}
|
||||||
if(depth == 4) {
|
if(depth == 4) {
|
||||||
if(!nni_4bit_did) {
|
if(legacy) {
|
||||||
nni_4bit_did = true;
|
if(!nni_4bitl_did) {
|
||||||
nn_getStd4BitPalette(nni_4bit_colors);
|
nni_4bitl_did = true;
|
||||||
}
|
nn_getLegacy4BitPalette(nni_4bitl_colors);
|
||||||
return nn_mapColor(color, nni_4bit_colors, 16);
|
}
|
||||||
|
return nn_mapColor(color, nni_4bitl_colors, 16);
|
||||||
|
} else {
|
||||||
|
if(!nni_4bit_did) {
|
||||||
|
nni_4bit_did = true;
|
||||||
|
nn_getStd4BitPalette(nni_4bit_colors);
|
||||||
|
}
|
||||||
|
return nn_mapColor(color, nni_4bit_colors, 16);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(depth == 8) {
|
if(depth == 8) {
|
||||||
if(!nni_8bit_did) {
|
if(!nni_8bit_did) {
|
||||||
|
@ -557,8 +557,11 @@ typedef struct ne_premappedPixel {
|
|||||||
int mappedFgRes;
|
int mappedFgRes;
|
||||||
int mappedBgFor;
|
int mappedBgFor;
|
||||||
int mappedBgRes;
|
int mappedBgRes;
|
||||||
|
nn_bool_t legacyColors;
|
||||||
} ne_premappedPixel;
|
} ne_premappedPixel;
|
||||||
|
|
||||||
|
bool ne_legacyColors = false;
|
||||||
|
|
||||||
ne_premappedPixel ne_getPremap(ne_premappedPixel *pixels, nn_screen *screen, int x, int y) {
|
ne_premappedPixel ne_getPremap(ne_premappedPixel *pixels, nn_screen *screen, int x, int y) {
|
||||||
int maxW, maxH;
|
int maxW, maxH;
|
||||||
nn_maxResolution(screen, &maxW, &maxH);
|
nn_maxResolution(screen, &maxW, &maxH);
|
||||||
@ -571,6 +574,11 @@ ne_premappedPixel ne_getPremap(ne_premappedPixel *pixels, nn_screen *screen, int
|
|||||||
int fg = pixel.fg;
|
int fg = pixel.fg;
|
||||||
int bg = pixel.bg;
|
int bg = pixel.bg;
|
||||||
|
|
||||||
|
if(premapped.legacyColors != ne_legacyColors) {
|
||||||
|
premapped.legacyColors = ne_legacyColors;
|
||||||
|
premapped.mappedDepth = -1;
|
||||||
|
}
|
||||||
|
|
||||||
if(premapped.mappedDepth != depth) {
|
if(premapped.mappedDepth != depth) {
|
||||||
premapped.mappedDepth = depth;
|
premapped.mappedDepth = depth;
|
||||||
premapped.mappedFgFor = -1;
|
premapped.mappedFgFor = -1;
|
||||||
@ -578,14 +586,15 @@ ne_premappedPixel ne_getPremap(ne_premappedPixel *pixels, nn_screen *screen, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool miss = false;
|
bool miss = false;
|
||||||
|
|
||||||
if(premapped.mappedFgFor != fg) {
|
if(premapped.mappedFgFor != fg) {
|
||||||
premapped.mappedFgFor = fg;
|
premapped.mappedFgFor = fg;
|
||||||
premapped.mappedFgRes = nn_mapDepth(fg, depth);
|
premapped.mappedFgRes = nn_mapDepth(fg, depth, ne_legacyColors);
|
||||||
miss = true;
|
miss = true;
|
||||||
}
|
}
|
||||||
if(premapped.mappedBgFor != bg) {
|
if(premapped.mappedBgFor != bg) {
|
||||||
premapped.mappedBgFor = bg;
|
premapped.mappedBgFor = bg;
|
||||||
premapped.mappedBgRes = nn_mapDepth(bg, depth);
|
premapped.mappedBgRes = nn_mapDepth(bg, depth, ne_legacyColors);
|
||||||
miss = true;
|
miss = true;
|
||||||
}
|
}
|
||||||
premapped.codepoint = pixel.codepoint;
|
premapped.codepoint = pixel.codepoint;
|
||||||
@ -914,6 +923,19 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render:
|
render:
|
||||||
|
if(IsKeyPressed(KEY_F1)) {
|
||||||
|
nn_setDepth(s, 1);
|
||||||
|
}
|
||||||
|
if(IsKeyPressed(KEY_F2)) {
|
||||||
|
nn_setDepth(s, 4);
|
||||||
|
}
|
||||||
|
if(IsKeyPressed(KEY_F3)) {
|
||||||
|
nn_setDepth(s, 8);
|
||||||
|
}
|
||||||
|
if(IsKeyPressed(KEY_F4)) {
|
||||||
|
ne_legacyColors = !ne_legacyColors;
|
||||||
|
}
|
||||||
|
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
|
|
||||||
ClearBackground(BLACK);
|
ClearBackground(BLACK);
|
||||||
|
@ -894,10 +894,14 @@ const char *nn_depthName(int depth);
|
|||||||
double nn_colorDistance(int colorA, int colorB);
|
double nn_colorDistance(int colorA, int colorB);
|
||||||
int nn_mapColor(int color, int *palette, int paletteSize);
|
int nn_mapColor(int color, int *palette, int paletteSize);
|
||||||
|
|
||||||
int nn_mapDepth(int color, int depth);
|
int nn_mapDepth(int color, int depth, nn_bool_t legacy);
|
||||||
void nn_getStd4BitPalette(int color[16]);
|
void nn_getStd4BitPalette(int color[16]);
|
||||||
void nn_getStd8BitPalette(int color[256]);
|
void nn_getStd8BitPalette(int color[256]);
|
||||||
|
|
||||||
|
// Std4bit uses actual MC dye colors, except for white and black
|
||||||
|
// Legacy uses OC's versions that were brightened
|
||||||
|
void nn_getLegacy4BitPalette(int color[16]);
|
||||||
|
|
||||||
void nn_setPixel(nn_screen *screen, int x, int y, nn_scrchr_t pixel);
|
void nn_setPixel(nn_screen *screen, int x, int y, nn_scrchr_t pixel);
|
||||||
nn_scrchr_t nn_getPixel(nn_screen *screen, int x, int y);
|
nn_scrchr_t nn_getPixel(nn_screen *screen, int x, int y);
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ double nn_colorDistance(int colorA, int colorB) {
|
|||||||
delta.g = a.g - b.g;
|
delta.g = a.g - b.g;
|
||||||
delta.b = a.b - b.b;
|
delta.b = a.b - b.b;
|
||||||
|
|
||||||
return delta.r*delta.r + delta.g*delta.g + delta.b*delta.b;
|
return 0.2126 * delta.r*delta.r + 0.7152 * delta.g*delta.g + 0.0722 * delta.b*delta.b;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nn_mapColor(int color, int *palette, int paletteSize) {
|
int nn_mapColor(int color, int *palette, int paletteSize) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user