diff --git a/src/libretro/Makefile.common b/src/libretro/Makefile.common index b4d61e10..c249559c 100644 --- a/src/libretro/Makefile.common +++ b/src/libretro/Makefile.common @@ -59,3 +59,7 @@ SOURCES_CXX += \ $(CORE_DIR)/gb/gbMemory.cpp \ $(CORE_DIR)/gb/gbSGB.cpp \ $(CORE_DIR)/gb/gbSound.cpp + +# Filters +SOURCES_CXX += \ + $(CORE_DIR)/gba/gbafilter.cpp diff --git a/src/libretro/UtilRetro.cpp b/src/libretro/UtilRetro.cpp index 1776ec1b..17a729a4 100644 --- a/src/libretro/UtilRetro.cpp +++ b/src/libretro/UtilRetro.cpp @@ -232,18 +232,26 @@ void utilUpdateSystemColorMaps(bool lcd) { int i = 0; - (void)lcd; - switch (systemColorDepth) { - case 16: - for (i = 0; i < 0x10000; i++) - systemColorMap16[i] = ((i & 0x1f) << systemRedShift) | (((i & 0x3e0) >> 5) << systemGreenShift) | (((i & 0x7c00) >> 10) << systemBlueShift); - break; - case 24: - case 32: - for (i = 0; i < 0x10000; i++) - systemColorMap32[i] = ((i & 0x1f) << systemRedShift) | (((i & 0x3e0) >> 5) << systemGreenShift) | (((i & 0x7c00) >> 10) << systemBlueShift); - break; + case 16: + for (i = 0; i < 0x10000; i++) { + systemColorMap16[i] = ((i & 0x1f) << systemRedShift) | + (((i & 0x3e0) >> 5) << systemGreenShift) | + (((i & 0x7c00) >> 10) << systemBlueShift); + } + if (lcd) + gbafilter_pal(systemColorMap16, 0x10000); + break; + case 24: + case 32: + for (i = 0; i < 0x10000; i++) { + systemColorMap32[i] = ((i & 0x1f) << systemRedShift) | + (((i & 0x3e0) >> 5) << systemGreenShift) | + (((i & 0x7c00) >> 10) << systemBlueShift); + } + if (lcd) + gbafilter_pal32(systemColorMap32, 0x10000); + break; } } diff --git a/src/libretro/libretro.cpp b/src/libretro/libretro.cpp index b2a8d71b..f1804d51 100644 --- a/src/libretro/libretro.cpp +++ b/src/libretro/libretro.cpp @@ -56,6 +56,7 @@ static bool option_forceRTCenable = false; static bool option_showAdvancedOptions = false; static double option_sndFiltering = 0.5; static unsigned option_gbPalette = 0; +static bool option_lcdfilter = false; static unsigned retropad_device[4] = {0}; static unsigned systemWidth = gbaWidth; @@ -1211,6 +1212,16 @@ static void update_variables(bool startup) gbColorOption = (!strcmp(var.value, "enabled")) ? 1 : 0; } + var.key = "vbam_lcdfilter"; + var.value = NULL; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + bool prev_lcdfilter = option_lcdfilter; + option_lcdfilter = (!strcmp(var.value, "enabled")) ? true : false; + if (prev_lcdfilter != option_lcdfilter) + utilUpdateSystemColorMaps(option_lcdfilter); + } + var.key = "vbam_show_advanced_options"; var.value = NULL; @@ -1539,8 +1550,8 @@ bool retro_load_game(const struct retro_game_info *game) return false; } + utilUpdateSystemColorMaps(option_lcdfilter); update_variables(true); - utilUpdateSystemColorMaps(false); soundInit(); if (type == IMAGE_GBA) { diff --git a/src/libretro/libretro_core_options.h b/src/libretro/libretro_core_options.h index 3c13fed6..354ade8d 100644 --- a/src/libretro/libretro_core_options.h +++ b/src/libretro/libretro_core_options.h @@ -189,6 +189,17 @@ struct retro_core_option_definition option_defs_us[] = { }, "disabled" }, + { + "vbam_lcdfilter", + "LCD Color Filter", + "TODO:", + { + { "disabled", NULL }, + { "enabled", NULL }, + { NULL, NULL }, + }, + "disabled" + }, { "vbam_turboenable", "Enable Turbo Buttons",