[Build] Move non-core common code to `components/`
* Create multiple components library. These depend on the core code and are used by multiple frontends. * Clean up the filters declaration by moving them to a common header in `components/filters/filters.h`. * Clean up the include guards and include orders. * Fix the modified paths in `src/debian/copyright` to match their new location.
This commit is contained in:
parent
047bd935ea
commit
000c7f854c
154
CMakeLists.txt
154
CMakeLists.txt
|
@ -238,19 +238,14 @@ if(CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg")
|
|||
endif()
|
||||
endif()
|
||||
|
||||
set(SDL2_TARGETS SDL2::SDL2 ${SDL2_LIBRARY_TEMP})
|
||||
set(VBAM_SDL2_LIBS SDL2::SDL2 ${SDL2_LIBRARY_TEMP})
|
||||
|
||||
# set the standard libraries all ports use
|
||||
set(
|
||||
VBAMCORE_LIBS
|
||||
vbamcore
|
||||
vbam-core-apu
|
||||
vbam-core-base
|
||||
vbam-core-emulator
|
||||
vbam-fex
|
||||
${SDL2_TARGETS}
|
||||
vbam-core
|
||||
${VBAM_SDL2_LIBS}
|
||||
${OPENGL_LIBRARIES}
|
||||
${ZLIB_LIBRARY}
|
||||
)
|
||||
|
||||
set(VBAM_GENERATED_DIR ${CMAKE_BINARY_DIR}/generated)
|
||||
|
@ -261,7 +256,6 @@ include_directories(
|
|||
${VBAM_GENERATED_DIR}
|
||||
)
|
||||
|
||||
|
||||
if(ENABLE_FFMPEG)
|
||||
if(NOT FFMPEG_LIBRARIES)
|
||||
message(FATAL_ERROR "ENABLE_FFMPEG was specified, but required versions of ffmpeg libraries cannot be found!")
|
||||
|
@ -304,16 +298,6 @@ add_compile_definitions(HAVE_NETINET_IN_H HAVE_ARPA_INET_H HAVE_ZLIB_H FINAL_VER
|
|||
add_compile_definitions(PKGDATADIR="${CMAKE_INSTALL_FULL_DATADIR}/vbam")
|
||||
add_compile_definitions(__STDC_FORMAT_MACROS)
|
||||
|
||||
# For C++, default to nonstd::optional and nonstd::variant for now due to mac
|
||||
# build issues.
|
||||
if(APPLE)
|
||||
add_compile_definitions(optional_CONFIG_SELECT_OPTIONAL=optional_OPTIONAL_NONSTD)
|
||||
add_compile_definitions(variant_CONFIG_SELECT_VARIANT=variant_VARIANT_NONSTD)
|
||||
else()
|
||||
add_compile_definitions(optional_CONFIG_SELECT_OPTIONAL=optional_OPTIONAL_STD)
|
||||
add_compile_definitions(variant_CONFIG_SELECT_VARIANT=variant_VARIANT_STD)
|
||||
endif()
|
||||
|
||||
if(ENABLE_LINK)
|
||||
# IPC linking code needs sem_timedwait which can be either in librt or pthreads
|
||||
if(NOT WIN32)
|
||||
|
@ -364,54 +348,29 @@ if(ENABLE_NLS)
|
|||
find_library(LIBCHARSET_LIB NAMES libcharset charset)
|
||||
if(LIBINTL_LIB)
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBINTL_LIB})
|
||||
list(APPEND VBAMCORE_LIBS ${LIBINTL_LIB})
|
||||
list(APPEND NLS_LIBS ${LIBINTL_LIB})
|
||||
endif()
|
||||
if(LIBICONV_LIB)
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBICONV_LIB})
|
||||
list(APPEND VBAMCORE_LIBS ${LIBICONV_LIB})
|
||||
list(APPEND NLS_LIBS ${LIBICONV_LIB})
|
||||
endif()
|
||||
if(LIBCHARSET_LIB)
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBCHARSET_LIB})
|
||||
list(APPEND VBAMCORE_LIBS ${LIBCHARSET_LIB})
|
||||
list(APPEND NLS_LIBS ${LIBCHARSET_LIB})
|
||||
endif()
|
||||
include(CheckFunctionExists)
|
||||
check_function_exists(gettext GETTEXT_FN)
|
||||
if(NOT (LIBINTL_INC OR GETTEXT_FN))
|
||||
message(FATAL_ERROR "NLS requires libintl/gettext")
|
||||
endif()
|
||||
include_directories(${LIBINTL_INC})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT TRANSLATIONS_ONLY)
|
||||
add_subdirectory(third_party/include/nonstd)
|
||||
add_subdirectory(third_party/include/stb)
|
||||
add_subdirectory(src/core)
|
||||
endif()
|
||||
|
||||
set(
|
||||
SRC_MAIN
|
||||
src/Util_common.cpp
|
||||
src/Util_desktop.cpp
|
||||
src/common/SoundSDL.cpp
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
set(SRC_MAIN ${SRC_MAIN} "dependencies/msvc/getopt.c")
|
||||
endif()
|
||||
|
||||
set(
|
||||
HDR_MAIN
|
||||
src/Util.h
|
||||
src/common/SoundSDL.h
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
set(HDR_MAIN ${HDR_MAIN} "dependencies/msvc/getopt.h")
|
||||
endif()
|
||||
|
||||
if(ENABLE_FFMPEG)
|
||||
set(SRC_MAIN ${SRC_MAIN} src/common/ffmpeg.cpp)
|
||||
set(HDR_MAIN ${HDR_MAIN} src/common/ffmpeg.h)
|
||||
add_subdirectory(src/components)
|
||||
endif()
|
||||
|
||||
set(
|
||||
|
@ -425,8 +384,10 @@ set(
|
|||
src/sdl/iniparser.c
|
||||
src/sdl/inputSDL.cpp
|
||||
src/sdl/SDL.cpp
|
||||
src/sdl/text.cpp
|
||||
)
|
||||
if(MSVC)
|
||||
list(APPEND SRC_SDL "dependencies/msvc/getopt.c")
|
||||
endif()
|
||||
|
||||
set(
|
||||
HDR_SDL
|
||||
|
@ -437,89 +398,9 @@ set(
|
|||
src/sdl/filters.h
|
||||
src/sdl/iniparser.h
|
||||
src/sdl/inputSDL.h
|
||||
src/sdl/text.h
|
||||
)
|
||||
|
||||
set(
|
||||
SRC_FILTERS
|
||||
src/filters/2xSaI.cpp
|
||||
src/filters/admame.cpp
|
||||
src/filters/bilinear.cpp
|
||||
src/filters/hq2x.cpp
|
||||
src/filters/interframe.cpp
|
||||
src/filters/pixel.cpp
|
||||
src/filters/scanline.cpp
|
||||
src/filters/simpleFilter.cpp
|
||||
src/filters/xbrzfilter.cpp
|
||||
src/filters/xBRZ/xbrz.cpp
|
||||
)
|
||||
|
||||
set(
|
||||
HDR_FILTERS
|
||||
src/filters/hq2x.h
|
||||
src/filters/interp.h
|
||||
src/filters/lq2x.h
|
||||
src/filters/xBRZ/xbrz_config.h
|
||||
src/filters/xBRZ/xbrz.h
|
||||
src/filters/xBRZ/xbrz_tools.h
|
||||
)
|
||||
|
||||
set(
|
||||
SRC_HQ_C
|
||||
src/filters/hq/c/hq_implementation.cpp
|
||||
)
|
||||
|
||||
set(
|
||||
HDR_HQ_C
|
||||
src/filters/hq/c/hq3x_pattern.h
|
||||
src/filters/hq/c/hq4x_pattern.h
|
||||
src/filters/hq/c/hq_base.h
|
||||
src/filters/hq/c/hq_shared.h
|
||||
)
|
||||
|
||||
set(
|
||||
SRC_HQ_ASM
|
||||
src/filters/hq/asm/hq3x_16.asm
|
||||
src/filters/hq/asm/hq3x_32.asm
|
||||
src/filters/hq/asm/hq4x_16.asm
|
||||
src/filters/hq/asm/hq4x_32.asm
|
||||
src/filters/hq/asm/hq3x32.cpp
|
||||
)
|
||||
|
||||
if(ENABLE_ASM_SCALERS)
|
||||
set(SRC_FILTERS ${SRC_FILTERS} ${SRC_HQ_ASM})
|
||||
if(ENABLE_MMX)
|
||||
set(SRC_FILTERS ${SRC_FILTERS} src/filters/2xSaImmx.asm)
|
||||
endif()
|
||||
else()
|
||||
set(SRC_FILTERS ${SRC_FILTERS} ${SRC_HQ_C})
|
||||
set(HDR_FILTERS ${HDR_FILTERS} ${HDR_HQ_C})
|
||||
add_compile_definitions(NO_ASM)
|
||||
endif()
|
||||
|
||||
|
||||
include_directories(
|
||||
${ZLIB_INCLUDE_DIR}
|
||||
third_party/include
|
||||
)
|
||||
|
||||
if(ENABLE_FFMPEG)
|
||||
include_directories(
|
||||
${FFMPEG_INCLUDE_DIRS}
|
||||
)
|
||||
endif()
|
||||
|
||||
if(NOT TRANSLATIONS_ONLY)
|
||||
add_library(
|
||||
vbamcore
|
||||
STATIC
|
||||
${PROJECT_SRCS}
|
||||
${SRC_MAIN}
|
||||
${HDR_MAIN}
|
||||
${SRC_FILTERS}
|
||||
${HDR_FILTERS}
|
||||
)
|
||||
target_include_directories(vbamcore PUBLIC ${SDL2_INCLUDE_DIRS})
|
||||
if(MSVC)
|
||||
list(APPEND HDR_SDL "dependencies/msvc/getopt.h")
|
||||
endif()
|
||||
|
||||
if((NOT TRANSLATIONS_ONLY) AND ENABLE_SDL)
|
||||
|
@ -543,8 +424,13 @@ if((NOT TRANSLATIONS_ONLY) AND ENABLE_SDL)
|
|||
set(LIRC_CLIENT_LIBRARY lirc_client)
|
||||
endif()
|
||||
|
||||
target_link_libraries(
|
||||
vbam
|
||||
target_link_libraries(vbam
|
||||
vbam-components-audio-sdl
|
||||
vbam-components-draw-text
|
||||
vbam-components-filters
|
||||
vbam-components-filters-agb
|
||||
vbam-components-filters-interframe
|
||||
vbam-components-user-config
|
||||
${VBAMCORE_LIBS}
|
||||
${WIN32_LIBRARIES}
|
||||
${LIRC_CLIENT_LIBRARY}
|
||||
|
|
|
@ -10,7 +10,6 @@ Known preprocessor switches:
|
|||
- FINAL_VERSION: Defined for release versions, disables additional GBA logging and completely disables GB logging. Increases the amount of CPU cycles being emulated in one go.
|
||||
- VBAM_ENABLE_DEBUGGER: Enable remote debugging support
|
||||
- MMX: Enable MMX instruction set
|
||||
- NO_ASM: Use C++ version of hq3x/4x filters
|
||||
- RGB555: Use 16bit colors with 5bit green instead of 6bit green in hq3x/4x filters (C++ version)
|
||||
- NO_OGL: Exclude OpenGL code
|
||||
- NO_D3D: Exclude Direct3D code
|
||||
|
|
18
src/Util.h
18
src/Util.h
|
@ -1,18 +0,0 @@
|
|||
#ifndef UTIL_H
|
||||
#define UTIL_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#ifdef _WIN32
|
||||
#define FILE_SEP '\\'
|
||||
#else // MacOS, Unix
|
||||
#define FILE_SEP '/'
|
||||
#endif
|
||||
|
||||
std::string get_xdg_user_config_home();
|
||||
std::string get_xdg_user_data_home();
|
||||
|
||||
void utilGBAFindSave(const int);
|
||||
void utilUpdateSystemColorMaps(bool lcd = false);
|
||||
|
||||
#endif // UTIL_H
|
|
@ -1,94 +0,0 @@
|
|||
#include "Util.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
#include "core/base/port.h"
|
||||
#include "core/base/system.h"
|
||||
#include "core/gba/gbaFilter.h"
|
||||
#include "core/gba/gbaFlash.h"
|
||||
#include "core/gba/gbaGlobals.h"
|
||||
#include "core/gba/gbaRtc.h"
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#define strcasecmp _stricmp
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
void utilUpdateSystemColorMaps(bool lcd) {
|
||||
switch (systemColorDepth) {
|
||||
case 16: {
|
||||
for (int 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 (int 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;
|
||||
}
|
||||
}
|
||||
|
||||
void utilGBAFindSave(const int size) {
|
||||
uint32_t* p = (uint32_t*)&g_rom[0];
|
||||
uint32_t* end = (uint32_t*)(&g_rom[0] + size);
|
||||
int detectedSaveType = 0;
|
||||
int flashSize = 0x10000;
|
||||
bool rtcFound = false;
|
||||
|
||||
while (p < end) {
|
||||
uint32_t d = READ32LE(p);
|
||||
|
||||
if (d == 0x52504545) {
|
||||
if (memcmp(p, "EEPROM_", 7) == 0) {
|
||||
if (detectedSaveType == 0 || detectedSaveType == 4)
|
||||
detectedSaveType = 1;
|
||||
}
|
||||
} else if (d == 0x4D415253) {
|
||||
if (memcmp(p, "SRAM_", 5) == 0) {
|
||||
if (detectedSaveType == 0 || detectedSaveType == 1 || detectedSaveType == 4)
|
||||
detectedSaveType = 2;
|
||||
}
|
||||
} else if (d == 0x53414C46) {
|
||||
if (memcmp(p, "FLASH1M_", 8) == 0) {
|
||||
if (detectedSaveType == 0) {
|
||||
detectedSaveType = 3;
|
||||
flashSize = 0x20000;
|
||||
}
|
||||
} else if (memcmp(p, "FLASH512_", 9) == 0) {
|
||||
if (detectedSaveType == 0) {
|
||||
detectedSaveType = 3;
|
||||
flashSize = 0x10000;
|
||||
}
|
||||
} else if (memcmp(p, "FLASH", 5) == 0) {
|
||||
if (detectedSaveType == 0) {
|
||||
detectedSaveType = 4;
|
||||
flashSize = 0x10000;
|
||||
}
|
||||
}
|
||||
} else if (d == 0x52494953) {
|
||||
if (memcmp(p, "SIIRTC_V", 8) == 0)
|
||||
rtcFound = true;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
// if no matches found, then set it to NONE
|
||||
if (detectedSaveType == 0) {
|
||||
detectedSaveType = 5;
|
||||
}
|
||||
if (detectedSaveType == 4) {
|
||||
detectedSaveType = 3;
|
||||
}
|
||||
rtcEnable(rtcFound);
|
||||
rtcEnableRumble(!rtcFound);
|
||||
coreOptions.saveType = detectedSaveType;
|
||||
flashSetSize(flashSize);
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
add_subdirectory(audio_sdl)
|
||||
add_subdirectory(av_recording)
|
||||
add_subdirectory(draw_text)
|
||||
add_subdirectory(filters)
|
||||
add_subdirectory(filters_agb)
|
||||
add_subdirectory(filters_interframe)
|
||||
add_subdirectory(user_config)
|
|
@ -0,0 +1,14 @@
|
|||
add_library(vbam-components-audio-sdl OBJECT)
|
||||
|
||||
target_sources(vbam-components-audio-sdl
|
||||
PRIVATE audio_sdl.cpp
|
||||
PUBLIC audio_sdl.h
|
||||
)
|
||||
|
||||
target_include_directories(vbam-components-audio-sdl
|
||||
PUBLIC ${SDL2_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_link_libraries(vbam-components-audio-sdl
|
||||
PUBLIC vbam-core-base ${VBAM_SDL2_LIBS}
|
||||
)
|
|
@ -15,10 +15,13 @@
|
|||
// along with this program; if not, write to the Free Software Foundation,
|
||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
#include "components/audio_sdl/audio_sdl.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
|
||||
#include <SDL_events.h>
|
||||
#include "SoundSDL.h"
|
||||
|
||||
#include "core/gba/gbaGlobals.h"
|
||||
#include "core/gba/gbaSound.h"
|
||||
|
|
@ -15,8 +15,8 @@
|
|||
// along with this program; if not, write to the Free Software Foundation,
|
||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
#ifndef __VBA_SOUND_SDL_H__
|
||||
#define __VBA_SOUND_SDL_H__
|
||||
#ifndef VBAM_COMPONENTS_AUDIO_SDL_AUDIO_SDL_H_
|
||||
#define VBAM_COMPONENTS_AUDIO_SDL_AUDIO_SDL_H_
|
||||
|
||||
#include <SDL.h>
|
||||
|
||||
|
@ -60,4 +60,4 @@ private:
|
|||
static const double buftime;
|
||||
};
|
||||
|
||||
#endif // __VBA_SOUND_SDL_H__
|
||||
#endif // VBAM_COMPONENTS_AUDIO_SDL_AUDIO_SDL_H_
|
|
@ -0,0 +1,18 @@
|
|||
if(NOT ENABLE_FFMPEG)
|
||||
return()
|
||||
endif()
|
||||
|
||||
add_library(vbam-components-av-recording OBJECT)
|
||||
|
||||
target_sources(vbam-components-av-recording
|
||||
PRIVATE av_recording.cpp
|
||||
PUBLIC av_recording.h
|
||||
)
|
||||
|
||||
target_include_directories(vbam-components-av-recording
|
||||
PUBLIC ${FFMPEG_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
target_link_libraries(vbam-components-av-recording
|
||||
PUBLIC ${FFMPEG_LIBRARIES}
|
||||
)
|
|
@ -1,4 +1,4 @@
|
|||
#include "ffmpeg.h"
|
||||
#include "components/av_recording/av_recording.h"
|
||||
|
||||
#define STREAM_FRAME_RATE 60
|
||||
#define STREAM_PIXEL_FORMAT AV_PIX_FMT_YUV420P
|
|
@ -1,12 +1,12 @@
|
|||
#ifndef WX_FFMPEG_H
|
||||
#define WX_FFMPEG_H
|
||||
#ifndef VBAM_COMPONENTS_AV_RECORDING_AV_RECORDING_H_
|
||||
#define VBAM_COMPONENTS_AV_RECORDING_AV_RECORDING_H_
|
||||
|
||||
// simplified interface for recording audio and/or video from emulator
|
||||
|
||||
extern "C" {
|
||||
/* From: http://redino.net/blog/2013/12/uint64_c-defined-including-libavformatavformat-h-vs-2008/ */
|
||||
|
||||
#include <stdint.h>
|
||||
#include <cstdint>
|
||||
|
||||
#ifndef INT64_C
|
||||
#define INT64_C(c) (c ## LL)
|
||||
|
@ -29,7 +29,6 @@ extern "C" {
|
|||
}
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace recording {
|
||||
|
||||
|
@ -127,4 +126,4 @@ class MediaRecorder
|
|||
|
||||
}
|
||||
|
||||
#endif /* WX_FFMPEG_H */
|
||||
#endif // VBAM_COMPONENTS_AV_RECORDING_AV_RECORDING_H_
|
|
@ -0,0 +1,10 @@
|
|||
add_library(vbam-components-draw-text OBJECT)
|
||||
|
||||
target_sources(vbam-components-draw-text
|
||||
PRIVATE draw_text.cpp
|
||||
PUBLIC draw_text.h
|
||||
)
|
||||
|
||||
target_link_libraries(vbam-components-draw-text
|
||||
PRIVATE vbam-core-base
|
||||
)
|
|
@ -20,6 +20,8 @@
|
|||
|
||||
/* Code originally from fceu/drawing.h file, adapted by Forgotten
|
||||
*/
|
||||
#include "components/draw_text/draw_text.h"
|
||||
|
||||
#include "core/base/system.h"
|
||||
|
||||
extern int RGB_LOW_BITS_MASK;
|
|
@ -17,4 +17,11 @@
|
|||
// along with this program; if not, write to the Free Software Foundation,
|
||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
#ifndef VBAM_COMPONENTS_DRAW_TEXT_DRAW_TEXT_H_
|
||||
#define VBAM_COMPONENTS_DRAW_TEXT_DRAW_TEXT_H_
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
extern void drawText(uint8_t*, int, int, int, const char*, bool);
|
||||
|
||||
#endif // VBAM_COMPONENTS_DRAW_TEXT_DRAW_TEXT_H_
|
|
@ -0,0 +1,47 @@
|
|||
add_library(vbam-components-filters OBJECT)
|
||||
|
||||
target_sources(vbam-components-filters
|
||||
PRIVATE
|
||||
internal/2xSaI.cpp
|
||||
internal/admame.cpp
|
||||
internal/bilinear.cpp
|
||||
internal/hq2x.cpp
|
||||
internal/hq2x.h
|
||||
internal/interp.h
|
||||
internal/lq2x.h
|
||||
internal/pixel.cpp
|
||||
internal/scanline.cpp
|
||||
internal/simpleFilter.cpp
|
||||
internal/xBRZ/xbrz.cpp
|
||||
internal/xBRZ/xbrz.h
|
||||
internal/xBRZ/xbrz_config.h
|
||||
internal/xBRZ/xbrz_tools.h
|
||||
internal/xbrzfilter.cpp
|
||||
|
||||
PUBLIC
|
||||
filters.h
|
||||
)
|
||||
|
||||
if(ENABLE_ASM_SCALERS)
|
||||
target_sources(vbam-components-filters
|
||||
PRIVATE
|
||||
internal/hq/asm/hq3x_16.asm
|
||||
internal/hq/asm/hq3x_32.asm
|
||||
internal/hq/asm/hq4x_16.asm
|
||||
internal/hq/asm/hq4x_32.asm
|
||||
internal/hq/asm/hq3x32.cpp
|
||||
internal/hq/asm/macros.mac
|
||||
)
|
||||
if(ENABLE_MMX)
|
||||
set(SRC_FILTERS ${SRC_FILTERS} internal/2xSaImmx.asm)
|
||||
endif()
|
||||
else()
|
||||
target_sources(vbam-components-filters
|
||||
PRIVATE
|
||||
internal/hq/c/hq3x_pattern.h
|
||||
internal/hq/c/hq4x_pattern.h
|
||||
internal/hq/c/hq_base.h
|
||||
internal/hq/c/hq_implementation.cpp
|
||||
internal/hq/c/hq_shared.h
|
||||
)
|
||||
endif()
|
|
@ -1,14 +1,12 @@
|
|||
#ifndef FILTERS_H
|
||||
#define FILTERS_H
|
||||
#ifndef VBAM_COMPONENTS_FILTERS_FILTERS_H_
|
||||
#define VBAM_COMPONENTS_FILTERS_FILTERS_H_
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
// FIXME: these should be in a system header included by all users and all
|
||||
// files which define these functions
|
||||
// most 16-bit filters require space in src rounded up to uint32_t
|
||||
// those that take delta take 1 src line of pixels, rounded up to uint32_t size
|
||||
// initial value appears to be all-0xff
|
||||
|
||||
#include "../filters/interframe.hpp"
|
||||
|
||||
void Pixelate32(uint8_t* src, uint32_t spitch, uint8_t*, uint8_t* dst, uint32_t dstp, int w, int h);
|
||||
void Pixelate(uint8_t* src, uint32_t spitch, uint8_t* delta, uint8_t* dst, uint32_t dstp, int w, int h);
|
||||
// next 3*2 use Init_2xSaI(555|565) and do not take into account
|
||||
|
@ -71,4 +69,4 @@ void xbrz4x32(uint8_t* src, uint32_t spitch, uint8_t*, uint8_t* dst, uint32_t ds
|
|||
void xbrz5x32(uint8_t* src, uint32_t spitch, uint8_t*, uint8_t* dst, uint32_t dstp, int w, int h);
|
||||
void xbrz6x32(uint8_t* src, uint32_t spitch, uint8_t*, uint8_t* dst, uint32_t dstp, int w, int h);
|
||||
|
||||
#endif /* FILTERS_H */
|
||||
#endif // VBAM_COMPONENTS_FILTERS_FILTERS_H_
|
|
@ -28,12 +28,10 @@
|
|||
* do so, delete this exception statement from your version.
|
||||
*/
|
||||
|
||||
#ifndef __INTERP_H
|
||||
#define __INTERP_H
|
||||
#ifndef VBAM_COMPONENTS_FILTERS_INTERNAL_INTERP_H
|
||||
#define VBAM_COMPONENTS_FILTERS_INTERNAL_INTERP_H
|
||||
|
||||
#define __STDC_CONSTANT_MACROS
|
||||
|
||||
#include <stdint.h>
|
||||
#include <cstdint>
|
||||
|
||||
typedef uint16_t interp_uint16;
|
||||
typedef uint32_t interp_uint32;
|
||||
|
@ -342,4 +340,4 @@ static void interp_set(unsigned bits_per_pixel)
|
|||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif // VBAM_COMPONENTS_FILTERS_INTERNAL_INTERP_H
|
|
@ -0,0 +1,6 @@
|
|||
add_library(vbam-components-filters-agb OBJECT)
|
||||
|
||||
target_sources(vbam-components-filters-agb
|
||||
PRIVATE filters_agb.cpp
|
||||
PUBLIC filters_agb.h
|
||||
)
|
|
@ -1,4 +1,4 @@
|
|||
#include "core/gba/gbaFilter.h"
|
||||
#include "components/filters_agb/filters_agb.h"
|
||||
|
||||
extern int systemColorDepth;
|
||||
extern int systemRedShift;
|
||||
|
@ -25,6 +25,30 @@ inline void swap(short& a, short& b)
|
|||
b = temp;
|
||||
}
|
||||
|
||||
void gbafilter_update_colors(bool lcd) {
|
||||
switch (systemColorDepth) {
|
||||
case 16: {
|
||||
for (int 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 (int 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;
|
||||
}
|
||||
}
|
||||
|
||||
void gbafilter_pal(uint16_t* buf, int count)
|
||||
{
|
||||
short temp[3 * 3], s;
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef VBAM_COMPONENTS_FILTERS_AGB_FILTERS_AGB_H_
|
||||
#define VBAM_COMPONENTS_FILTERS_AGB_FILTERS_AGB_H_
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
void gbafilter_update_colors(bool lcd = false);
|
||||
void gbafilter_pal(uint16_t* buf, int count);
|
||||
void gbafilter_pal32(uint32_t* buf, int count);
|
||||
void gbafilter_pad(uint8_t* buf, int count);
|
||||
|
||||
#endif // VBAM_COMPONENTS_FILTERS_AGB_FILTERS_AGB_H_
|
|
@ -0,0 +1,6 @@
|
|||
add_library(vbam-components-filters-interframe OBJECT)
|
||||
|
||||
target_sources(vbam-components-filters-interframe
|
||||
PRIVATE interframe.cpp
|
||||
PUBLIC interframe.h
|
||||
)
|
|
@ -1,4 +1,4 @@
|
|||
#include "interframe.hpp"
|
||||
#include "components/filters_interframe/interframe.h"
|
||||
|
||||
#include <cstdlib>
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
/// Interframe blending filters
|
||||
|
||||
#ifndef INTERFRAME_HPP
|
||||
#define INTERFRAME_HPP
|
||||
#ifndef VBAM_COMPONENTS_FILTERS_INTERFRAME_INTERFRAME_H_
|
||||
#define VBAM_COMPONENTS_FILTERS_INTERFRAME_INTERFRAME_H_
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
|
@ -30,4 +30,5 @@ void SmartIB(uint8_t *srcPtr, uint32_t srcPitch, int width, int height);
|
|||
void SmartIB32(uint8_t *srcPtr, uint32_t srcPitch, int width, int height);
|
||||
void MotionBlurIB(uint8_t *srcPtr, uint32_t srcPitch, int width, int height);
|
||||
void MotionBlurIB32(uint8_t *srcPtr, uint32_t srcPitch, int width, int height);
|
||||
#endif //INTERFRAME_HPP
|
||||
|
||||
#endif //VBAM_COMPONENTS_FILTERS_INTERFRAME_INTERFRAME_H_
|
|
@ -0,0 +1,6 @@
|
|||
add_library(vbam-components-user-config OBJECT)
|
||||
|
||||
target_sources(vbam-components-user-config
|
||||
PRIVATE user_config.cpp
|
||||
PUBLIC user_config.h
|
||||
)
|
|
@ -1,4 +1,4 @@
|
|||
#include "Util.h"
|
||||
#include "components/user_config/user_config.h"
|
||||
|
||||
#include <cstdlib>
|
||||
|
||||
|
@ -26,7 +26,7 @@ std::string get_xdg_user_config_home()
|
|||
path = xdg_var;
|
||||
}
|
||||
#endif
|
||||
return path + FILE_SEP;
|
||||
return path + kFileSep;
|
||||
}
|
||||
|
||||
// Get user-specific data dir manually.
|
||||
|
@ -53,6 +53,6 @@ std::string get_xdg_user_data_home()
|
|||
path = xdg_var;
|
||||
}
|
||||
#endif
|
||||
return path + FILE_SEP;
|
||||
return path + kFileSep;
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
#ifndef VBAM_COMPONENTS_USER_CONFIG_USER_CONFIG_H_
|
||||
#define VBAM_COMPONENTS_USER_CONFIG_USER_CONFIG_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
#if defined(_WIN32)
|
||||
static constexpr char kFileSep = '\\';
|
||||
#else // !defined(_WIN32)
|
||||
static constexpr char kFileSep = '/';
|
||||
#endif // defined(_WIN32)
|
||||
|
||||
std::string get_xdg_user_config_home();
|
||||
std::string get_xdg_user_data_home();
|
||||
|
||||
#endif // VBAM_COMPONENTS_USER_CONFIG_USER_CONFIG_H_
|
|
@ -2,13 +2,13 @@ add_subdirectory(apu)
|
|||
add_subdirectory(base)
|
||||
add_subdirectory(fex)
|
||||
|
||||
# The vbam-core-emulator target contains both the Game Boy and Game Boy Advance
|
||||
# The vbam-core target contains both the Game Boy and Game Boy Advance
|
||||
# emulators. These should be broken down into 2 separate targets. The issue lies
|
||||
# with the Link and Sound emulation, which are tangled together between the two
|
||||
# systems.
|
||||
add_library(vbam-core-emulator OBJECT)
|
||||
add_library(vbam-core STATIC)
|
||||
|
||||
target_sources(vbam-core-emulator
|
||||
target_sources(vbam-core
|
||||
PRIVATE
|
||||
# Game Boy
|
||||
gb/internal/gbCodes.h
|
||||
|
@ -39,7 +39,6 @@ target_sources(vbam-core-emulator
|
|||
gba/gbaCheatSearch.cpp
|
||||
gba/gbaEeprom.cpp
|
||||
gba/gbaElf.cpp
|
||||
gba/gbaFilter.cpp
|
||||
gba/gbaFlash.cpp
|
||||
gba/gbaGfx.cpp
|
||||
gba/gbaGlobals.cpp
|
||||
|
@ -80,7 +79,6 @@ target_sources(vbam-core-emulator
|
|||
gba/gbaCpuArmDis.h
|
||||
gba/gbaEeprom.h
|
||||
gba/gbaElf.h
|
||||
gba/gbaFilter.h
|
||||
gba/gbaFlash.h
|
||||
gba/gbaGfx.h
|
||||
gba/gbaGlobals.h
|
||||
|
@ -90,17 +88,17 @@ target_sources(vbam-core-emulator
|
|||
gba/gbaSound.h
|
||||
)
|
||||
|
||||
target_include_directories(vbam-core-base
|
||||
target_include_directories(vbam-core
|
||||
PUBLIC ${ZLIB_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(vbam-core-emulator
|
||||
PRIVATE vbam-core-apu
|
||||
target_link_libraries(vbam-core
|
||||
PRIVATE vbam-core-apu vbam-fex
|
||||
PUBLIC vbam-core-base ${ZLIB_LIBRARY}
|
||||
)
|
||||
|
||||
if(ENABLE_DEBUGGER)
|
||||
target_sources(vbam-core-emulator
|
||||
target_sources(vbam-core
|
||||
PRIVATE
|
||||
gba/gbaRemote.cpp
|
||||
gba/internal/gbaBreakpoint.cpp
|
||||
|
@ -112,7 +110,7 @@ if(ENABLE_DEBUGGER)
|
|||
endif()
|
||||
|
||||
if(ENABLE_LINK)
|
||||
target_sources(vbam-core-emulator
|
||||
target_sources(vbam-core
|
||||
PRIVATE
|
||||
gba/gbaLink.cpp
|
||||
gba/internal/gbaSockClient.cpp
|
||||
|
@ -122,10 +120,18 @@ if(ENABLE_LINK)
|
|||
gba/gbaLink.h
|
||||
)
|
||||
|
||||
target_include_directories(vbam-core-emulator
|
||||
target_include_directories(vbam-core
|
||||
PRIVATE ${SFML_INCLUDE_DIR})
|
||||
|
||||
target_link_libraries(vbam-core-emulator
|
||||
target_link_libraries(vbam-core
|
||||
PRIVATE ${SFML_LIBRARIES})
|
||||
endif()
|
||||
|
||||
if(ENABLE_NLS)
|
||||
# Add libintl.h
|
||||
target_include_directories(vbam-core
|
||||
PRIVATE ${LIBINTL_INC})
|
||||
target_link_libraries(vbam-core
|
||||
PRIVATE ${NLS_LIBS})
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
|
|
@ -56,6 +56,6 @@ target_include_directories(vbam-core-base
|
|||
)
|
||||
|
||||
target_link_libraries(vbam-core-base
|
||||
INTERFACE vbam-fex stb-image
|
||||
PRIVATE vbam-fex stb-image
|
||||
PUBLIC ${ZLIB_LIBRARY}
|
||||
)
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
#ifndef VBAM_CORE_GBA_GBAFILTER_H_
|
||||
#define VBAM_CORE_GBA_GBAFILTER_H_
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
void gbafilter_pal(uint16_t* buf, int count);
|
||||
void gbafilter_pal32(uint32_t* buf, int count);
|
||||
void gbafilter_pad(uint8_t* buf, int count);
|
||||
|
||||
#endif // VBAM_CORE_GBA_GBAFILTER_H_
|
|
@ -4,7 +4,10 @@
|
|||
#include <cstring>
|
||||
|
||||
#include "core/base/file_util.h"
|
||||
#include "core/base/port.h"
|
||||
#include "core/gba/gba.h"
|
||||
#include "core/gba/gbaGlobals.h"
|
||||
#include "core/gba/gbaRtc.h"
|
||||
#include "core/gba/internal/gbaSram.h"
|
||||
|
||||
#define FLASH_READ_ARRAY 0
|
||||
|
@ -27,6 +30,62 @@ int flashDeviceID = 0x1b;
|
|||
int flashManufacturerID = 0x32;
|
||||
int flashBank = 0;
|
||||
|
||||
void flashDetectSaveType(const int size) {
|
||||
uint32_t* p = (uint32_t*)&g_rom[0];
|
||||
uint32_t* end = (uint32_t*)(&g_rom[0] + size);
|
||||
int detectedSaveType = 0;
|
||||
int flashSize = 0x10000;
|
||||
bool rtcFound = false;
|
||||
|
||||
while (p < end) {
|
||||
uint32_t d = READ32LE(p);
|
||||
|
||||
if (d == 0x52504545) {
|
||||
if (memcmp(p, "EEPROM_", 7) == 0) {
|
||||
if (detectedSaveType == 0 || detectedSaveType == 4)
|
||||
detectedSaveType = 1;
|
||||
}
|
||||
} else if (d == 0x4D415253) {
|
||||
if (memcmp(p, "SRAM_", 5) == 0) {
|
||||
if (detectedSaveType == 0 || detectedSaveType == 1 || detectedSaveType == 4)
|
||||
detectedSaveType = 2;
|
||||
}
|
||||
} else if (d == 0x53414C46) {
|
||||
if (memcmp(p, "FLASH1M_", 8) == 0) {
|
||||
if (detectedSaveType == 0) {
|
||||
detectedSaveType = 3;
|
||||
flashSize = 0x20000;
|
||||
}
|
||||
} else if (memcmp(p, "FLASH512_", 9) == 0) {
|
||||
if (detectedSaveType == 0) {
|
||||
detectedSaveType = 3;
|
||||
flashSize = 0x10000;
|
||||
}
|
||||
} else if (memcmp(p, "FLASH", 5) == 0) {
|
||||
if (detectedSaveType == 0) {
|
||||
detectedSaveType = 4;
|
||||
flashSize = 0x10000;
|
||||
}
|
||||
}
|
||||
} else if (d == 0x52494953) {
|
||||
if (memcmp(p, "SIIRTC_V", 8) == 0)
|
||||
rtcFound = true;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
// if no matches found, then set it to NONE
|
||||
if (detectedSaveType == 0) {
|
||||
detectedSaveType = 5;
|
||||
}
|
||||
if (detectedSaveType == 4) {
|
||||
detectedSaveType = 3;
|
||||
}
|
||||
rtcEnable(rtcFound);
|
||||
rtcEnableRumble(!rtcFound);
|
||||
coreOptions.saveType = detectedSaveType;
|
||||
flashSetSize(flashSize);
|
||||
}
|
||||
|
||||
void flashInit()
|
||||
{
|
||||
memset(flashSaveMemory, 0xff, sizeof(flashSaveMemory));
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
|
||||
#define FLASH_128K_SZ 0x20000
|
||||
|
||||
void flashDetectSaveType(const int size);
|
||||
|
||||
#if defined(__LIBRETRO__)
|
||||
extern void flashSaveGame(uint8_t*& data);
|
||||
extern void flashReadGame(const uint8_t*& data);
|
||||
|
|
|
@ -25,22 +25,22 @@ Copyright: 2011-2017 VBA-M development team
|
|||
2011 Thomas J. Moore (aka tjm, aka darktjm) <darktjm@gmail.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: fex/*
|
||||
Files: src/core/fex/*
|
||||
Copyright: 2005-2009 Shay Green <gblargg@gmail.com>
|
||||
License: LGPL-2.1+
|
||||
|
||||
Files: fex/7z_C/*
|
||||
Files: src/core/fex/7z_C/*
|
||||
Copyright: 2008-2010 Igor Pavlov
|
||||
License: public-domain
|
||||
|
||||
Files: fex/7z_C/Ppmd.h
|
||||
fex/7z_C/Ppmd7.*
|
||||
fex/7z_C/Ppmd7Dec.c
|
||||
Files: src/core/fex/7z_C/Ppmd.h
|
||||
src/core/fex/7z_C/Ppmd7.*
|
||||
src/core/fex/7z_C/Ppmd7Dec.c
|
||||
Copyright: 2010 Igor Pavlov
|
||||
2001 Dmitry Shkarin
|
||||
License: public-domain
|
||||
|
||||
Files: src/apu/*
|
||||
Files: src/core/apu/*
|
||||
Copyright: 2003-2007 Shay Green <gblargg@gmail.com>
|
||||
License: LGPL-2.1+
|
||||
|
||||
|
@ -51,30 +51,30 @@ Copyright: 2014, 2015 Sergio Benjamim (sergio-br2)
|
|||
2006 Matteo Drera
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/common/iniparser.*
|
||||
src/common/dictionary.*
|
||||
Files: src/sdl/iniparser.*
|
||||
src/sdl/dictionary.*
|
||||
Copyright: 2010-2014 Nicolas Devillard <ndevilla@free.fr>
|
||||
License: Expat
|
||||
|
||||
Files: src/common/memgzio.*
|
||||
Files: src/core/base/internal/memgzio.*
|
||||
Copyright: 2007, 2009, 2011, 2012, 2013, 2015 VBA-M development team
|
||||
????-2006 Forgotten
|
||||
1995-2002 Jean-loup Gailly
|
||||
License: Zlib
|
||||
|
||||
Files: src/filters/hq/asm/hq3x_16.asm
|
||||
src/filters/hq/asm/hq3x_32.asm
|
||||
src/filters/hq/asm/hq4x_16.asm
|
||||
src/filters/hq/asm/hq4x_32.asm
|
||||
Files: src/components/filters/hq/asm/hq3x_16.asm
|
||||
src/components/filters/internal/hq/asm/hq3x_32.asm
|
||||
src/components/filters/internal/hq/asm/hq4x_16.asm
|
||||
src/components/filters/internal/hq/asm/hq4x_32.asm
|
||||
Copyright: 2007, 2008 VBA-M development team
|
||||
2003 Maxim Stepin (MaxSt) <maxst@hiend3d.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/filters/hq/asm/macros.mac
|
||||
Files: src/components/filters/internal/hq/asm/macros.mac
|
||||
Copyright: 1997-2007 ZSNES Team (zsKnight, _Demo_, pagefault, Nach)
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/filters/xBRZ/*
|
||||
Files: src/components/filters/internal/xBRZ/*
|
||||
Copyright: 2012-2015 Zenju (zenju AT gmx DOT de)
|
||||
License: GPL-3
|
||||
Additionally and as a special exception, the author gives permission
|
||||
|
@ -86,12 +86,12 @@ License: GPL-3
|
|||
of the file, but you are not obligated to do so. If you do not wish to
|
||||
do so, delete this exception statement from your version.
|
||||
|
||||
Files: src/filters/2xSaI.cpp
|
||||
src/filters/2xSaImmx.asm
|
||||
Files: src/components/filters/internal/2xSaI.cpp
|
||||
src/components/filters/internal/2xSaImmx.asm
|
||||
Copyright: 1999-2001 Derek Liauw Kie Fa (aka Kreed) <DerekL666@yahoo.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/filters/admame.cpp
|
||||
Files: src/components/filters/internal/admame.cpp
|
||||
Copyright: 1999-2002 Andrea Mazzoleni
|
||||
License: GPL-2+
|
||||
In addition, as a special exception, Andrea Mazzoleni
|
||||
|
@ -109,15 +109,15 @@ License: GPL-2+
|
|||
- the program is not used in commercial activities.
|
||||
- the whole source code of the program is released with the binary.
|
||||
|
||||
Files: src/filters/bilinear.cpp
|
||||
Files: src/components/filters/internal/bilinear.cpp
|
||||
Copyright: 2008, 2009 VBA-M development team
|
||||
2004 Forgotten and the VBA development team
|
||||
2003 Forgotten
|
||||
2000 Jeffrey S. Freedman (JSF)
|
||||
License: GPL-2+
|
||||
|
||||
Files: src/filters/hq2x.*
|
||||
src/filters/interp.h
|
||||
Files: src/components/filters/internal/hq2x.*
|
||||
src/components/filters/internal/interp.h
|
||||
Copyright: 2003 Andrea Mazzoleni
|
||||
License: GPL-2+
|
||||
In addition, as a special exception, Andrea Mazzoleni
|
||||
|
@ -130,7 +130,7 @@ License: GPL-2+
|
|||
file, but you are not obligated to do so. If you do not wish to
|
||||
do so, delete this exception statement from your version.
|
||||
|
||||
Files: src/gba/debugger-expr-yacc.*
|
||||
Files: src/core/gba/debugger-expr-yacc.*
|
||||
Copyright: 2015 VBA-M development team
|
||||
1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
License: GPL-2+
|
||||
|
@ -147,7 +147,7 @@ License: GPL-2+
|
|||
This special exception was added by the Free Software Foundation in
|
||||
version 2.2 of Bison.
|
||||
|
||||
Files: src/gba/GBALink.*
|
||||
Files: src/core/gba/GBALink.*
|
||||
Copyright: 2008, 2009, 2010, 2011, 2012, 2015 VBA-M development team
|
||||
???? Thomas J. Moore (aka tjm, aka darktjm) <darktjm@gmail.com>
|
||||
2004-2006 denopqrihg <denopqrihg@users.sourceforge.net> <denopqrihg@centrum.cz>
|
||||
|
|
|
@ -17,9 +17,6 @@ endif
|
|||
|
||||
SOURCES_CXX :=
|
||||
|
||||
SOURCES_CXX += \
|
||||
$(CORE_DIR)/Util_common.cpp \
|
||||
|
||||
SOURCES_CXX += \
|
||||
$(CORE_DIR)/libretro/libretro.cpp \
|
||||
$(CORE_DIR)/libretro/SoundRetro.cpp
|
||||
|
@ -72,5 +69,5 @@ SOURCES_CXX += \
|
|||
|
||||
# Filters
|
||||
SOURCES_CXX += \
|
||||
$(CORE_DIR)/filters/interframe.cpp \
|
||||
$(CORE_DIR)/core/gba/gbaFilter.cpp
|
||||
$(CORE_DIR)/components/filters_agb/filters_agb.cpp \
|
||||
$(CORE_DIR)/components/filters_interframe/interframe.cpp
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
#include "libretro_core_options.h"
|
||||
#include "scrc32.h"
|
||||
|
||||
#include "../Util.h"
|
||||
#include "components/filters_agb/filters_agb.h"
|
||||
#include "components/filters_interframe/interframe.h"
|
||||
#include "core/base/system.h"
|
||||
#include "core/base/file_util.h"
|
||||
#include "core/base/sizes.h"
|
||||
|
@ -26,8 +27,6 @@
|
|||
#include "core/gba/gbaRtc.h"
|
||||
#include "core/gba/gbaSound.h"
|
||||
|
||||
#include "../filters/interframe.hpp"
|
||||
|
||||
#define FRAMERATE (16777216.0 / 280896.0) // 59.73
|
||||
#define SAMPLERATE 32768.0
|
||||
|
||||
|
@ -855,7 +854,7 @@ static void load_image_preferences(void)
|
|||
coreOptions.mirroringEnable = (buffer[0] == 'F') ? true : false;
|
||||
|
||||
if (!coreOptions.cpuSaveType)
|
||||
utilGBAFindSave(romSize);
|
||||
flashDetectSaveType(romSize);
|
||||
|
||||
coreOptions.saveType = coreOptions.cpuSaveType;
|
||||
|
||||
|
@ -1220,7 +1219,7 @@ static void update_variables(bool startup)
|
|||
bool prev_lcdfilter = option_lcdfilter;
|
||||
option_lcdfilter = (!strcmp(var.value, "enabled")) ? true : false;
|
||||
if (prev_lcdfilter != option_lcdfilter)
|
||||
utilUpdateSystemColorMaps(option_lcdfilter);
|
||||
gbafilter_update_colors(option_lcdfilter);
|
||||
}
|
||||
|
||||
var.key = "vbam_interframeblending";
|
||||
|
@ -1610,7 +1609,7 @@ bool retro_load_game(const struct retro_game_info *game)
|
|||
return false;
|
||||
}
|
||||
|
||||
utilUpdateSystemColorMaps(option_lcdfilter);
|
||||
gbafilter_update_colors(option_lcdfilter);
|
||||
update_variables(true);
|
||||
soundInit();
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "ConfigManager.h"
|
||||
#include "components/user_config/user_config.h"
|
||||
|
||||
// necessary to get portable strerror_r
|
||||
#undef _GNU_SOURCE
|
||||
|
@ -14,7 +15,6 @@
|
|||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "../Util.h"
|
||||
#include "core/base/file_util.h"
|
||||
#include "core/gb/gbGlobals.h"
|
||||
#include "core/gb/gbSound.h"
|
||||
|
@ -452,7 +452,7 @@ const char* FindConfigFile(const char *name)
|
|||
mkdir(fullDir, 0755);
|
||||
|
||||
if (fullDir) {
|
||||
sprintf(path, "%s%c%s", fullDir, FILE_SEP, name);
|
||||
sprintf(path, "%s%c%s", fullDir, kFileSep, name);
|
||||
if (FileExists(path))
|
||||
{
|
||||
return path;
|
||||
|
@ -462,7 +462,7 @@ const char* FindConfigFile(const char *name)
|
|||
#ifdef _WIN32
|
||||
char *home = getenv("USERPROFILE");
|
||||
if (home != NULL) {
|
||||
sprintf(path, "%s%c%s", home, FILE_SEP, name);
|
||||
sprintf(path, "%s%c%s", home, kFileSep, name);
|
||||
if (FileExists(path))
|
||||
{
|
||||
return path;
|
||||
|
@ -479,10 +479,10 @@ const char* FindConfigFile(const char *name)
|
|||
char *tok = strtok(buffer, PATH_SEP);
|
||||
|
||||
while (tok) {
|
||||
sprintf(env_path, "%s%c%s", tok, FILE_SEP, EXE_NAME);
|
||||
sprintf(env_path, "%s%c%s", tok, kFileSep, EXE_NAME);
|
||||
if (FileExists(env_path)) {
|
||||
static char path2[2048];
|
||||
sprintf(path2, "%s%c%s", tok, FILE_SEP, name);
|
||||
sprintf(path2, "%s%c%s", tok, kFileSep, name);
|
||||
if (FileExists(path2)) {
|
||||
return path2;
|
||||
}
|
||||
|
@ -494,10 +494,10 @@ const char* FindConfigFile(const char *name)
|
|||
else {
|
||||
// executable is relative to some directory
|
||||
strcpy(buffer, arg0);
|
||||
char *p = strrchr(buffer, FILE_SEP);
|
||||
char *p = strrchr(buffer, kFileSep);
|
||||
if (p) {
|
||||
*p = 0;
|
||||
sprintf(path, "%s%c%s", buffer, FILE_SEP, name);
|
||||
sprintf(path, "%s%c%s", buffer, kFileSep, name);
|
||||
if (FileExists(path))
|
||||
{
|
||||
return path;
|
||||
|
@ -505,13 +505,13 @@ const char* FindConfigFile(const char *name)
|
|||
}
|
||||
}
|
||||
#else // ! _WIN32
|
||||
sprintf(path, "%s%c%s", PKGDATADIR, FILE_SEP, name);
|
||||
sprintf(path, "%s%c%s", PKGDATADIR, kFileSep, name);
|
||||
if (FileExists(path))
|
||||
{
|
||||
return path;
|
||||
}
|
||||
|
||||
sprintf(path, "%s%c%s", SYSCONF_INSTALL_DIR, FILE_SEP, name);
|
||||
sprintf(path, "%s%c%s", SYSCONF_INSTALL_DIR, kFileSep, name);
|
||||
if (FileExists(path))
|
||||
{
|
||||
return path;
|
||||
|
|
|
@ -43,7 +43,10 @@
|
|||
|
||||
#include <SDL.h>
|
||||
|
||||
#include "../Util.h"
|
||||
#include "components/audio_sdl/audio_sdl.h"
|
||||
#include "components/draw_text/draw_text.h"
|
||||
#include "components/filters_agb/filters_agb.h"
|
||||
#include "components/user_config/user_config.h"
|
||||
#include "core/base/file_util.h"
|
||||
#include "core/base/message.h"
|
||||
#include "core/base/patch.h"
|
||||
|
@ -59,12 +62,10 @@
|
|||
#include "core/gba/gbaRtc.h"
|
||||
#include "core/gba/gbaSound.h"
|
||||
|
||||
#include "../common/SoundSDL.h"
|
||||
|
||||
#include "ConfigManager.h"
|
||||
#include "filters.h"
|
||||
#include "inputSDL.h"
|
||||
#include "text.h"
|
||||
|
||||
// from: https://stackoverflow.com/questions/7608714/why-is-my-pointer-not-null-after-free
|
||||
#define freeSafe(ptr) free(ptr); ptr = NULL;
|
||||
|
@ -287,7 +288,7 @@ void StartLirc(void)
|
|||
fprintf(stdout, "Success\n");
|
||||
//read the config file
|
||||
char LIRCConfigLoc[2048];
|
||||
sprintf(LIRCConfigLoc, "%s%c%s", homeConfigDir, FILE_SEP, "lircrc");
|
||||
sprintf(LIRCConfigLoc, "%s%c%s", homeConfigDir, kFileSep, "lircrc");
|
||||
fprintf(stdout, "LIRC Config file:");
|
||||
if (lirc_readconfig(LIRCConfigLoc, &LIRCConfigInfo, NULL) == 0) {
|
||||
//check vbam dir for lircrc
|
||||
|
@ -349,7 +350,7 @@ bool sdlCheckDirectory(const char* dir)
|
|||
char* sdlGetFilename(const char* name)
|
||||
{
|
||||
char path[1024];
|
||||
const char *filename = strrchr(name, FILE_SEP);
|
||||
const char *filename = strrchr(name, kFileSep);
|
||||
if (filename)
|
||||
strcpy(path, filename + 1);
|
||||
else
|
||||
|
@ -360,7 +361,7 @@ char* sdlGetFilename(const char* name)
|
|||
char* sdlGetFilePath(const char* name)
|
||||
{
|
||||
char path[1024];
|
||||
const char *filename = strrchr(name, FILE_SEP);
|
||||
const char *filename = strrchr(name, kFileSep);
|
||||
if (filename) {
|
||||
size_t length = strlen(name) - strlen(filename);
|
||||
memcpy(path, name, length);
|
||||
|
@ -368,7 +369,7 @@ char* sdlGetFilePath(const char* name)
|
|||
}
|
||||
else {
|
||||
path[0] = '.';
|
||||
path[1] = FILE_SEP;
|
||||
path[1] = kFileSep;
|
||||
path[2] = '\0';
|
||||
}
|
||||
return strdup(path);
|
||||
|
@ -381,11 +382,11 @@ FILE* sdlFindFile(const char* name)
|
|||
|
||||
#ifdef _WIN32
|
||||
#define PATH_SEP ";"
|
||||
#define FILE_SEP '\\'
|
||||
#define kFileSep '\\'
|
||||
#define EXE_NAME "vbam.exe"
|
||||
#else // ! _WIN32
|
||||
#define PATH_SEP ":"
|
||||
#define FILE_SEP '/'
|
||||
#define kFileSep '/'
|
||||
#define EXE_NAME "vbam"
|
||||
#endif // ! _WIN32
|
||||
|
||||
|
@ -402,7 +403,7 @@ FILE* sdlFindFile(const char* name)
|
|||
|
||||
if (strlen(homeDataDir)) {
|
||||
fprintf(stdout, "Searching home directory: %s\n", homeDataDir);
|
||||
sprintf(path, "%s%c%s", homeDataDir, FILE_SEP, name);
|
||||
sprintf(path, "%s%c%s", homeDataDir, kFileSep, name);
|
||||
f = fopen(path, "r");
|
||||
if (f != NULL)
|
||||
return f;
|
||||
|
@ -412,7 +413,7 @@ FILE* sdlFindFile(const char* name)
|
|||
char* profileDir = getenv("USERPROFILE");
|
||||
if (profileDir != NULL) {
|
||||
fprintf(stdout, "Searching user profile directory: %s\n", profileDir);
|
||||
sprintf(path, "%s%c%s", profileDir, FILE_SEP, name);
|
||||
sprintf(path, "%s%c%s", profileDir, kFileSep, name);
|
||||
f = fopen(path, "r");
|
||||
if (f != NULL)
|
||||
return f;
|
||||
|
@ -428,12 +429,12 @@ FILE* sdlFindFile(const char* name)
|
|||
char* tok = strtok(buffer, PATH_SEP);
|
||||
|
||||
while (tok) {
|
||||
sprintf(path, "%s%c%s", tok, FILE_SEP, EXE_NAME);
|
||||
sprintf(path, "%s%c%s", tok, kFileSep, EXE_NAME);
|
||||
f = fopen(path, "r");
|
||||
if (f != NULL) {
|
||||
char path2[2048];
|
||||
fclose(f);
|
||||
sprintf(path2, "%s%c%s", tok, FILE_SEP, name);
|
||||
sprintf(path2, "%s%c%s", tok, kFileSep, name);
|
||||
f = fopen(path2, "r");
|
||||
if (f != NULL) {
|
||||
fprintf(stdout, "Found at %s\n", path2);
|
||||
|
@ -447,10 +448,10 @@ FILE* sdlFindFile(const char* name)
|
|||
// executable is relative to some directory
|
||||
fprintf(stdout, "Searching executable directory\n");
|
||||
strcpy(buffer, home);
|
||||
char* p = strrchr(buffer, FILE_SEP);
|
||||
char* p = strrchr(buffer, kFileSep);
|
||||
if (p) {
|
||||
*p = 0;
|
||||
sprintf(path, "%s%c%s", buffer, FILE_SEP, name);
|
||||
sprintf(path, "%s%c%s", buffer, kFileSep, name);
|
||||
f = fopen(path, "r");
|
||||
if (f != NULL)
|
||||
return f;
|
||||
|
@ -458,13 +459,13 @@ FILE* sdlFindFile(const char* name)
|
|||
}
|
||||
#else // ! _WIN32
|
||||
fprintf(stdout, "Searching data directory: %s\n", PKGDATADIR);
|
||||
sprintf(path, "%s%c%s", PKGDATADIR, FILE_SEP, name);
|
||||
sprintf(path, "%s%c%s", PKGDATADIR, kFileSep, name);
|
||||
f = fopen(path, "r");
|
||||
if (f != NULL)
|
||||
return f;
|
||||
|
||||
fprintf(stdout, "Searching system config directory: %s\n", SYSCONF_INSTALL_DIR);
|
||||
sprintf(path, "%s%c%s", SYSCONF_INSTALL_DIR, FILE_SEP, name);
|
||||
sprintf(path, "%s%c%s", SYSCONF_INSTALL_DIR, kFileSep, name);
|
||||
f = fopen(path, "r");
|
||||
if (f != NULL)
|
||||
return f;
|
||||
|
@ -652,11 +653,11 @@ static char* sdlStateName(int num)
|
|||
char *gameFile = sdlGetFilename(filename);
|
||||
|
||||
if (saveDir)
|
||||
sprintf(stateName, "%s%c%s%d.sgm", saveDir, FILE_SEP, gameFile, num + 1);
|
||||
sprintf(stateName, "%s%c%s%d.sgm", saveDir, kFileSep, gameFile, num + 1);
|
||||
else if (access(gameDir, W_OK) == 0)
|
||||
sprintf(stateName, "%s%c%s%d.sgm", gameDir, FILE_SEP, gameFile, num + 1);
|
||||
sprintf(stateName, "%s%c%s%d.sgm", gameDir, kFileSep, gameFile, num + 1);
|
||||
else
|
||||
sprintf(stateName, "%s%c%s%d.sgm", homeDataDir, FILE_SEP, gameFile, num + 1);
|
||||
sprintf(stateName, "%s%c%s%d.sgm", homeDataDir, kFileSep, gameFile, num + 1);
|
||||
|
||||
freeSafe(gameDir);
|
||||
freeSafe(gameFile);
|
||||
|
@ -755,11 +756,11 @@ void sdlWriteBattery()
|
|||
char *gameFile = sdlGetFilename(filename);
|
||||
|
||||
if (batteryDir)
|
||||
sprintf(buffer, "%s%c%s.sav", batteryDir, FILE_SEP, gameFile);
|
||||
sprintf(buffer, "%s%c%s.sav", batteryDir, kFileSep, gameFile);
|
||||
else if (access(gameDir, W_OK) == 0)
|
||||
sprintf(buffer, "%s%c%s.sav", gameDir, FILE_SEP, gameFile);
|
||||
sprintf(buffer, "%s%c%s.sav", gameDir, kFileSep, gameFile);
|
||||
else
|
||||
sprintf(buffer, "%s%c%s.sav", homeDataDir, FILE_SEP, gameFile);
|
||||
sprintf(buffer, "%s%c%s.sav", homeDataDir, kFileSep, gameFile);
|
||||
|
||||
bool result = emulator.emuWriteBattery(buffer);
|
||||
|
||||
|
@ -777,11 +778,11 @@ void sdlReadBattery()
|
|||
char *gameFile = sdlGetFilename(filename);
|
||||
|
||||
if (batteryDir)
|
||||
sprintf(buffer, "%s%c%s.sav", batteryDir, FILE_SEP, gameFile);
|
||||
sprintf(buffer, "%s%c%s.sav", batteryDir, kFileSep, gameFile);
|
||||
else if (access(gameDir, W_OK) == 0)
|
||||
sprintf(buffer, "%s%c%s.sav", gameDir, FILE_SEP, gameFile);
|
||||
sprintf(buffer, "%s%c%s.sav", gameDir, kFileSep, gameFile);
|
||||
else
|
||||
sprintf(buffer, "%s%c%s.sav", homeDataDir, FILE_SEP, gameFile);
|
||||
sprintf(buffer, "%s%c%s.sav", homeDataDir, kFileSep, gameFile);
|
||||
|
||||
bool result = emulator.emuReadBattery(buffer);
|
||||
|
||||
|
@ -1737,7 +1738,7 @@ int main(int argc, char** argv)
|
|||
failed = (size == 0);
|
||||
if (!failed) {
|
||||
if (coreOptions.cpuSaveType == 0)
|
||||
utilGBAFindSave(size);
|
||||
flashDetectSaveType(size);
|
||||
else
|
||||
coreOptions.saveType = coreOptions.cpuSaveType;
|
||||
|
||||
|
@ -1847,7 +1848,7 @@ int main(int argc, char** argv)
|
|||
|
||||
fprintf(stdout, "Color depth: %d\n", systemColorDepth);
|
||||
|
||||
utilUpdateSystemColorMaps();
|
||||
gbafilter_update_colors();
|
||||
|
||||
if (delta == NULL) {
|
||||
delta = (uint8_t*)malloc(delta_size);
|
||||
|
@ -2145,20 +2146,20 @@ void systemScreenCapture(int a)
|
|||
|
||||
if (captureFormat) {
|
||||
if (screenShotDir)
|
||||
sprintf(buffer, "%s%c%s%02d.bmp", screenShotDir, FILE_SEP, gameFile, a);
|
||||
sprintf(buffer, "%s%c%s%02d.bmp", screenShotDir, kFileSep, gameFile, a);
|
||||
else if (access(gameDir, W_OK) == 0)
|
||||
sprintf(buffer, "%s%c%s%02d.bmp", gameDir, FILE_SEP, gameFile, a);
|
||||
sprintf(buffer, "%s%c%s%02d.bmp", gameDir, kFileSep, gameFile, a);
|
||||
else
|
||||
sprintf(buffer, "%s%c%s%02d.bmp", homeDataDir, FILE_SEP, gameFile, a);
|
||||
sprintf(buffer, "%s%c%s%02d.bmp", homeDataDir, kFileSep, gameFile, a);
|
||||
|
||||
result = emulator.emuWriteBMP(buffer);
|
||||
} else {
|
||||
if (screenShotDir)
|
||||
sprintf(buffer, "%s%c%s%02d.png", screenShotDir, FILE_SEP, gameFile, a);
|
||||
sprintf(buffer, "%s%c%s%02d.png", screenShotDir, kFileSep, gameFile, a);
|
||||
else if (access(gameDir, W_OK) == 0)
|
||||
sprintf(buffer, "%s%c%s%02d.png", gameDir, FILE_SEP, gameFile, a);
|
||||
sprintf(buffer, "%s%c%s%02d.png", gameDir, kFileSep, gameFile, a);
|
||||
else
|
||||
sprintf(buffer, "%s%c%s%02d.png", homeDataDir, FILE_SEP, gameFile, a);
|
||||
sprintf(buffer, "%s%c%s%02d.png", homeDataDir, kFileSep, gameFile, a);
|
||||
|
||||
result = emulator.emuWritePNG(buffer);
|
||||
}
|
||||
|
|
|
@ -18,206 +18,25 @@
|
|||
|
||||
#include "filters.h"
|
||||
|
||||
#include "../filters/interframe.hpp"
|
||||
#include "components/filters/filters.h"
|
||||
#include "components/filters_interframe/interframe.h"
|
||||
|
||||
//
|
||||
// Screen filters
|
||||
//
|
||||
|
||||
extern int Init_2xSaI(uint32_t);
|
||||
extern void hq2x_init(unsigned);
|
||||
extern bool sdlStretchInit(int colorDepth, int sizeMultiplier, int srcWidth);
|
||||
|
||||
extern void sdlStretch1x(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void sdlStretch2x(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void sdlStretch3x(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void sdlStretch4x(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void _2xSaI(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void _2xSaI32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void Super2xSaI(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void Super2xSaI32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void SuperEagle(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void SuperEagle32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void Pixelate(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void Pixelate32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void AdMame2x(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void AdMame2x32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void Bilinear(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void Bilinear32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void BilinearPlus(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void BilinearPlus32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void Scanlines(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void Scanlines32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void ScanlinesTV(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void ScanlinesTV32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void hq2x(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void hq2x32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void lq2x(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void lq2x32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void hq3x16(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void hq4x16(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void hq3x32_32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void hq4x32_32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void xbrz2x32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void xbrz3x32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void xbrz4x32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void xbrz5x32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
extern void xbrz6x32(uint8_t*, uint32_t, uint8_t*, uint8_t*, uint32_t, int, int);
|
||||
|
||||
struct FilterDesc {
|
||||
char name[30];
|
||||
int enlargeFactor;
|
||||
FilterFunc func16;
|
||||
FilterFunc func24;
|
||||
FilterFunc func32;
|
||||
};
|
||||
|
||||
const FilterDesc Filters[] = {
|
||||
{ "Stretch 1x", 1, sdlStretch1x, sdlStretch1x, sdlStretch1x },
|
||||
{ "Stretch 2x", 2, sdlStretch2x, sdlStretch2x, sdlStretch2x },
|
||||
{ "2xSaI", 2, _2xSaI, 0, _2xSaI32 },
|
||||
{ "Super 2xSaI", 2, Super2xSaI, 0, Super2xSaI32 },
|
||||
{ "Super Eagle", 2, SuperEagle, 0, SuperEagle32 },
|
||||
{ "Pixelate", 2, Pixelate, 0, Pixelate32 },
|
||||
{ "AdvanceMAME Scale2x", 2, AdMame2x, 0, AdMame2x32 },
|
||||
{ "Bilinear", 2, Bilinear, 0, Bilinear32 },
|
||||
{ "Bilinear Plus", 2, BilinearPlus, 0, BilinearPlus32 },
|
||||
{ "Scanlines", 2, Scanlines, 0, Scanlines32 },
|
||||
{ "TV Mode", 2, ScanlinesTV, 0, ScanlinesTV32 },
|
||||
{ "lq2x", 2, lq2x, 0, lq2x32 },
|
||||
{ "hq2x", 2, hq2x, 0, hq2x32 },
|
||||
{ "xbrz2x", 2, 0, 0, xbrz2x32 },
|
||||
{ "Stretch 3x", 3, sdlStretch3x, sdlStretch3x, sdlStretch3x },
|
||||
{ "hq3x", 3, hq3x16, 0, hq3x32_32 },
|
||||
{ "xbrz3x", 3, 0, 0, xbrz3x32 },
|
||||
{ "Stretch 4x", 4, sdlStretch4x, sdlStretch4x, sdlStretch4x },
|
||||
{ "hq4x", 4, hq4x16, 0, hq4x32_32 },
|
||||
{ "xbrz4x", 4, 0, 0, xbrz4x32 },
|
||||
{ "xbrz5x", 5, 0, 0, xbrz5x32 },
|
||||
{ "xbrz6x", 6, 0, 0, xbrz6x32 }
|
||||
};
|
||||
|
||||
int getFilterEnlargeFactor(const int f)
|
||||
{
|
||||
return Filters[f].enlargeFactor;
|
||||
}
|
||||
|
||||
char* getFilterName(const int f)
|
||||
{
|
||||
return (char*)Filters[f].name;
|
||||
}
|
||||
|
||||
FilterFunc initFilter(const int f, const int colorDepth, const int srcWidth)
|
||||
{
|
||||
FilterFunc func;
|
||||
|
||||
switch (colorDepth) {
|
||||
case 15:
|
||||
case 16:
|
||||
func = Filters[f].func16;
|
||||
break;
|
||||
case 24:
|
||||
func = Filters[f].func24;
|
||||
break;
|
||||
case 32:
|
||||
func = Filters[f].func32;
|
||||
break;
|
||||
default:
|
||||
func = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (func)
|
||||
switch (f) {
|
||||
case kStretch1x:
|
||||
sdlStretchInit(colorDepth, 0, srcWidth);
|
||||
break;
|
||||
case kStretch2x:
|
||||
sdlStretchInit(colorDepth, 1, srcWidth);
|
||||
break;
|
||||
case kStretch3x:
|
||||
sdlStretchInit(colorDepth, 2, srcWidth);
|
||||
break;
|
||||
case kStretch4x:
|
||||
sdlStretchInit(colorDepth, 3, srcWidth);
|
||||
break;
|
||||
case k2xSaI:
|
||||
case kSuper2xSaI:
|
||||
case kSuperEagle:
|
||||
if (colorDepth == 15)
|
||||
Init_2xSaI(555);
|
||||
else if (colorDepth == 16)
|
||||
Init_2xSaI(565);
|
||||
else
|
||||
Init_2xSaI(colorDepth);
|
||||
break;
|
||||
case khq2x:
|
||||
case klq2x:
|
||||
hq2x_init(colorDepth);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return func;
|
||||
}
|
||||
|
||||
struct IFBFilterDesc {
|
||||
char name[30];
|
||||
IFBFilterFunc func16;
|
||||
IFBFilterFunc func32;
|
||||
};
|
||||
|
||||
const IFBFilterDesc IFBFilters[] = {
|
||||
{ "No interframe blending", 0, 0 },
|
||||
{ "Interframe motion blur", MotionBlurIB, MotionBlurIB32 },
|
||||
{ "Smart interframe blending", SmartIB, SmartIB32 }
|
||||
};
|
||||
|
||||
IFBFilterFunc initIFBFilter(const int f, const int colorDepth)
|
||||
{
|
||||
IFBFilterFunc func;
|
||||
|
||||
switch (colorDepth) {
|
||||
case 15:
|
||||
case 16:
|
||||
func = IFBFilters[f].func16;
|
||||
break;
|
||||
case 32:
|
||||
func = IFBFilters[f].func32;
|
||||
break;
|
||||
case 24:
|
||||
default:
|
||||
func = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return func;
|
||||
}
|
||||
|
||||
char* getIFBFilterName(const IFBFilter f)
|
||||
{
|
||||
return (char*)IFBFilters[f].name;
|
||||
}
|
||||
namespace {
|
||||
|
||||
//
|
||||
// Optimized stretchers implementation
|
||||
//
|
||||
|
||||
#ifndef C_CORE
|
||||
uint8_t sdlStretcher[16384];
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define SDL_CALL_STRETCHER \
|
||||
{ \
|
||||
__asm mov eax, stretcher __asm mov edi, destPtr __asm mov esi, srcPtr __asm call eax \
|
||||
}
|
||||
#else
|
||||
#define SDL_CALL_STRETCHER \
|
||||
asm volatile("call *%%eax" ::"a"(stretcher), "S"(srcPtr), "D"(dstPtr))
|
||||
{ __asm mov eax, stretcher __asm mov edi, destPtr __asm mov esi, srcPtr __asm call eax }
|
||||
#else
|
||||
#define SDL_CALL_STRETCHER asm volatile("call *%%eax" ::"a"(stretcher), "S"(srcPtr), "D"(dstPtr))
|
||||
#endif
|
||||
|
||||
#define SDL_LONG(val) \
|
||||
#define SDL_LONG(val) \
|
||||
*((uint32_t*)&sdlStretcher[sdlStretcherPos]) = val; \
|
||||
sdlStretcherPos += 4;
|
||||
|
||||
|
@ -282,38 +101,27 @@ uint8_t sdlStretcher[16384];
|
|||
sdlStretcher[sdlStretcherPos++] = 0xc7; \
|
||||
sdlStretcher[sdlStretcherPos++] = 0x03;
|
||||
|
||||
#define SDL_RET \
|
||||
sdlStretcher[sdlStretcherPos++] = 0xc3;
|
||||
#define SDL_RET sdlStretcher[sdlStretcherPos++] = 0xc3;
|
||||
|
||||
#define SDL_PUSH_EAX \
|
||||
sdlStretcher[sdlStretcherPos++] = 0x50;
|
||||
#define SDL_PUSH_EAX sdlStretcher[sdlStretcherPos++] = 0x50;
|
||||
|
||||
#define SDL_PUSH_ECX \
|
||||
sdlStretcher[sdlStretcherPos++] = 0x51;
|
||||
#define SDL_PUSH_ECX sdlStretcher[sdlStretcherPos++] = 0x51;
|
||||
|
||||
#define SDL_PUSH_EBX \
|
||||
sdlStretcher[sdlStretcherPos++] = 0x53;
|
||||
#define SDL_PUSH_EBX sdlStretcher[sdlStretcherPos++] = 0x53;
|
||||
|
||||
#define SDL_PUSH_ESI \
|
||||
sdlStretcher[sdlStretcherPos++] = 0x56;
|
||||
#define SDL_PUSH_ESI sdlStretcher[sdlStretcherPos++] = 0x56;
|
||||
|
||||
#define SDL_PUSH_EDI \
|
||||
sdlStretcher[sdlStretcherPos++] = 0x57;
|
||||
#define SDL_PUSH_EDI sdlStretcher[sdlStretcherPos++] = 0x57;
|
||||
|
||||
#define SDL_POP_EAX \
|
||||
sdlStretcher[sdlStretcherPos++] = 0x58;
|
||||
#define SDL_POP_EAX sdlStretcher[sdlStretcherPos++] = 0x58;
|
||||
|
||||
#define SDL_POP_ECX \
|
||||
sdlStretcher[sdlStretcherPos++] = 0x59;
|
||||
#define SDL_POP_ECX sdlStretcher[sdlStretcherPos++] = 0x59;
|
||||
|
||||
#define SDL_POP_EBX \
|
||||
sdlStretcher[sdlStretcherPos++] = 0x5b;
|
||||
#define SDL_POP_EBX sdlStretcher[sdlStretcherPos++] = 0x5b;
|
||||
|
||||
#define SDL_POP_ESI \
|
||||
sdlStretcher[sdlStretcherPos++] = 0x5e;
|
||||
#define SDL_POP_ESI sdlStretcher[sdlStretcherPos++] = 0x5e;
|
||||
|
||||
#define SDL_POP_EDI \
|
||||
sdlStretcher[sdlStretcherPos++] = 0x5f;
|
||||
#define SDL_POP_EDI sdlStretcher[sdlStretcherPos++] = 0x5f;
|
||||
|
||||
#define SDL_MOV_ECX(val) \
|
||||
sdlStretcher[sdlStretcherPos++] = 0xb9; \
|
||||
|
@ -332,137 +140,134 @@ uint8_t sdlStretcher[16384];
|
|||
sdlStretcher[sdlStretcherPos++] = 0xf3; \
|
||||
sdlStretcher[sdlStretcherPos++] = 0xa5;
|
||||
|
||||
void sdlMakeStretcher(int width, int sizeOption)
|
||||
{
|
||||
void sdlMakeStretcher(int width, int sizeOption) {
|
||||
int sdlStretcherPos;
|
||||
sdlStretcherPos = 0;
|
||||
switch (systemColorDepth) {
|
||||
case 16:
|
||||
if (sizeOption) {
|
||||
SDL_PUSH_EAX;
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
for (int i = 0; i < width; i++) {
|
||||
SDL_LOADW;
|
||||
SDL_STOREW;
|
||||
SDL_STOREW;
|
||||
if (sizeOption > 1) {
|
||||
case 16:
|
||||
if (sizeOption) {
|
||||
SDL_PUSH_EAX;
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
for (int i = 0; i < width; i++) {
|
||||
SDL_LOADW;
|
||||
SDL_STOREW;
|
||||
}
|
||||
if (sizeOption > 2) {
|
||||
SDL_STOREW;
|
||||
if (sizeOption > 1) {
|
||||
SDL_STOREW;
|
||||
}
|
||||
if (sizeOption > 2) {
|
||||
SDL_STOREW;
|
||||
}
|
||||
}
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_POP_EAX;
|
||||
SDL_RET;
|
||||
} else {
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
SDL_PUSH_ECX;
|
||||
SDL_MOV_ECX(width);
|
||||
SDL_REP_MOVSW;
|
||||
SDL_POP_ECX;
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_RET;
|
||||
}
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_POP_EAX;
|
||||
SDL_RET;
|
||||
} else {
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
SDL_PUSH_ECX;
|
||||
SDL_MOV_ECX(width);
|
||||
SDL_REP_MOVSW;
|
||||
SDL_POP_ECX;
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_RET;
|
||||
}
|
||||
break;
|
||||
case 24:
|
||||
if (sizeOption) {
|
||||
SDL_PUSH_EAX;
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
int w = width - 1;
|
||||
for (int i = 0; i < w; i++) {
|
||||
break;
|
||||
case 24:
|
||||
if (sizeOption) {
|
||||
SDL_PUSH_EAX;
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
int w = width - 1;
|
||||
for (int i = 0; i < w; i++) {
|
||||
SDL_LOADL2;
|
||||
SDL_STOREL2;
|
||||
SDL_STOREL2;
|
||||
if (sizeOption > 1) {
|
||||
SDL_STOREL2;
|
||||
}
|
||||
if (sizeOption > 2) {
|
||||
SDL_STOREL2;
|
||||
}
|
||||
}
|
||||
// need to write the last one
|
||||
SDL_LOADL2;
|
||||
SDL_STOREL2;
|
||||
SDL_STOREL2;
|
||||
if (sizeOption > 1) {
|
||||
SDL_STOREL2;
|
||||
}
|
||||
if (sizeOption > 2) {
|
||||
SDL_STOREL2;
|
||||
}
|
||||
}
|
||||
// need to write the last one
|
||||
SDL_LOADL2;
|
||||
SDL_STOREL2;
|
||||
if (sizeOption > 1) {
|
||||
SDL_AND_EAX(0x00ffffff);
|
||||
SDL_PUSH_EBX;
|
||||
SDL_LOADL_EBX;
|
||||
SDL_AND_EBX(0xff000000);
|
||||
SDL_OR_EAX_EBX;
|
||||
SDL_POP_EBX;
|
||||
SDL_STOREL2;
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_POP_EAX;
|
||||
SDL_RET;
|
||||
} else {
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
SDL_PUSH_ECX;
|
||||
SDL_MOV_ECX(3 * width);
|
||||
SDL_REP_MOVSB;
|
||||
SDL_POP_ECX;
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_RET;
|
||||
}
|
||||
if (sizeOption > 2) {
|
||||
SDL_STOREL2;
|
||||
}
|
||||
SDL_AND_EAX(0x00ffffff);
|
||||
SDL_PUSH_EBX;
|
||||
SDL_LOADL_EBX;
|
||||
SDL_AND_EBX(0xff000000);
|
||||
SDL_OR_EAX_EBX;
|
||||
SDL_POP_EBX;
|
||||
SDL_STOREL2;
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_POP_EAX;
|
||||
SDL_RET;
|
||||
} else {
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
SDL_PUSH_ECX;
|
||||
SDL_MOV_ECX(3 * width);
|
||||
SDL_REP_MOVSB;
|
||||
SDL_POP_ECX;
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_RET;
|
||||
}
|
||||
break;
|
||||
case 32:
|
||||
if (sizeOption) {
|
||||
SDL_PUSH_EAX;
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
for (int i = 0; i < width; i++) {
|
||||
SDL_LOADL;
|
||||
SDL_STOREL;
|
||||
SDL_STOREL;
|
||||
if (sizeOption > 1) {
|
||||
break;
|
||||
case 32:
|
||||
if (sizeOption) {
|
||||
SDL_PUSH_EAX;
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
for (int i = 0; i < width; i++) {
|
||||
SDL_LOADL;
|
||||
SDL_STOREL;
|
||||
}
|
||||
if (sizeOption > 2) {
|
||||
SDL_STOREL;
|
||||
if (sizeOption > 1) {
|
||||
SDL_STOREL;
|
||||
}
|
||||
if (sizeOption > 2) {
|
||||
SDL_STOREL;
|
||||
}
|
||||
}
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_POP_EAX;
|
||||
SDL_RET;
|
||||
} else {
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
SDL_PUSH_ECX;
|
||||
SDL_MOV_ECX(width);
|
||||
SDL_REP_MOVSL;
|
||||
SDL_POP_ECX;
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_RET;
|
||||
}
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_POP_EAX;
|
||||
SDL_RET;
|
||||
} else {
|
||||
SDL_PUSH_ESI;
|
||||
SDL_PUSH_EDI;
|
||||
SDL_PUSH_ECX;
|
||||
SDL_MOV_ECX(width);
|
||||
SDL_REP_MOVSL;
|
||||
SDL_POP_ECX;
|
||||
SDL_POP_EDI;
|
||||
SDL_POP_ESI;
|
||||
SDL_RET;
|
||||
}
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#else // C_CORE
|
||||
#else // C_CORE
|
||||
|
||||
void (*sdlStretcher)(uint8_t*, uint8_t*, int) = 0;
|
||||
|
||||
#define SDL_CALL_STRETCHER \
|
||||
sdlStretcher(srcPtr, dstPtr, width)
|
||||
#define SDL_CALL_STRETCHER sdlStretcher(srcPtr, dstPtr, width)
|
||||
|
||||
template <typename T>
|
||||
void sdlStretchx1(uint8_t* src, uint8_t* dest, int width)
|
||||
{
|
||||
void sdlStretchx1(uint8_t* src, uint8_t* dest, int width) {
|
||||
T* s = (T*)src;
|
||||
T* d = (T*)dest;
|
||||
for (int i = 0; i < width; i++)
|
||||
|
@ -470,8 +275,7 @@ void sdlStretchx1(uint8_t* src, uint8_t* dest, int width)
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
void sdlStretchx2(uint8_t* src, uint8_t* dest, int width)
|
||||
{
|
||||
void sdlStretchx2(uint8_t* src, uint8_t* dest, int width) {
|
||||
T* s = (T*)src;
|
||||
T* d = (T*)dest;
|
||||
for (int i = 0; i < width; i++) {
|
||||
|
@ -481,8 +285,7 @@ void sdlStretchx2(uint8_t* src, uint8_t* dest, int width)
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
void sdlStretchx3(uint8_t* src, uint8_t* dest, int width)
|
||||
{
|
||||
void sdlStretchx3(uint8_t* src, uint8_t* dest, int width) {
|
||||
T* s = (T*)src;
|
||||
T* d = (T*)dest;
|
||||
for (int i = 0; i < width; i++) {
|
||||
|
@ -493,8 +296,7 @@ void sdlStretchx3(uint8_t* src, uint8_t* dest, int width)
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
void sdlStretchx4(uint8_t* src, uint8_t* dest, int width)
|
||||
{
|
||||
void sdlStretchx4(uint8_t* src, uint8_t* dest, int width) {
|
||||
T* s = (T*)src;
|
||||
T* d = (T*)dest;
|
||||
for (int i = 0; i < width; i++) {
|
||||
|
@ -506,21 +308,12 @@ void sdlStretchx4(uint8_t* src, uint8_t* dest, int width)
|
|||
}
|
||||
|
||||
void (*sdlStretcher16[4])(uint8_t*, uint8_t*, int) = {
|
||||
sdlStretchx1<uint16_t>,
|
||||
sdlStretchx2<uint16_t>,
|
||||
sdlStretchx3<uint16_t>,
|
||||
sdlStretchx4<uint16_t>
|
||||
};
|
||||
sdlStretchx1<uint16_t>, sdlStretchx2<uint16_t>, sdlStretchx3<uint16_t>, sdlStretchx4<uint16_t>};
|
||||
|
||||
void (*sdlStretcher32[4])(uint8_t*, uint8_t*, int) = {
|
||||
sdlStretchx1<uint32_t>,
|
||||
sdlStretchx2<uint32_t>,
|
||||
sdlStretchx3<uint32_t>,
|
||||
sdlStretchx4<uint32_t>
|
||||
};
|
||||
sdlStretchx1<uint32_t>, sdlStretchx2<uint32_t>, sdlStretchx3<uint32_t>, sdlStretchx4<uint32_t>};
|
||||
|
||||
void sdlStretch24x1(uint8_t* src, uint8_t* dest, int width)
|
||||
{
|
||||
void sdlStretch24x1(uint8_t* src, uint8_t* dest, int width) {
|
||||
uint8_t* s = src;
|
||||
uint8_t* d = dest;
|
||||
for (int i = 0; i < width; i++) {
|
||||
|
@ -530,8 +323,7 @@ void sdlStretch24x1(uint8_t* src, uint8_t* dest, int width)
|
|||
}
|
||||
}
|
||||
|
||||
void sdlStretch24x2(uint8_t* src, uint8_t* dest, int width)
|
||||
{
|
||||
void sdlStretch24x2(uint8_t* src, uint8_t* dest, int width) {
|
||||
uint8_t* s = (uint8_t*)src;
|
||||
uint8_t* d = (uint8_t*)dest;
|
||||
for (int i = 0; i < width; i++) {
|
||||
|
@ -546,8 +338,7 @@ void sdlStretch24x2(uint8_t* src, uint8_t* dest, int width)
|
|||
}
|
||||
}
|
||||
|
||||
void sdlStretch24x3(uint8_t* src, uint8_t* dest, int width)
|
||||
{
|
||||
void sdlStretch24x3(uint8_t* src, uint8_t* dest, int width) {
|
||||
uint8_t* s = (uint8_t*)src;
|
||||
uint8_t* d = (uint8_t*)dest;
|
||||
for (int i = 0; i < width; i++) {
|
||||
|
@ -566,8 +357,7 @@ void sdlStretch24x3(uint8_t* src, uint8_t* dest, int width)
|
|||
}
|
||||
}
|
||||
|
||||
void sdlStretch24x4(uint8_t* src, uint8_t* dest, int width)
|
||||
{
|
||||
void sdlStretch24x4(uint8_t* src, uint8_t* dest, int width) {
|
||||
uint8_t* s = (uint8_t*)src;
|
||||
uint8_t* d = (uint8_t*)dest;
|
||||
for (int i = 0; i < width; i++) {
|
||||
|
@ -590,40 +380,40 @@ void sdlStretch24x4(uint8_t* src, uint8_t* dest, int width)
|
|||
}
|
||||
}
|
||||
|
||||
void (*sdlStretcher24[4])(uint8_t*, uint8_t*, int) = {
|
||||
sdlStretch24x1,
|
||||
sdlStretch24x2,
|
||||
sdlStretch24x3,
|
||||
sdlStretch24x4
|
||||
};
|
||||
void (*sdlStretcher24[4])(uint8_t*, uint8_t*, int) = {sdlStretch24x1, sdlStretch24x2,
|
||||
sdlStretch24x3, sdlStretch24x4};
|
||||
|
||||
#endif // C_CORE
|
||||
#endif // C_CORE
|
||||
|
||||
bool sdlStretchInit(int colorDepth, int sizeMultiplier, int srcWidth)
|
||||
{
|
||||
(void)srcWidth; // unused params
|
||||
bool sdlStretchInit(int colorDepth, int sizeMultiplier, int srcWidth) {
|
||||
(void)srcWidth; // unused params
|
||||
#ifndef C_CORE
|
||||
sdlMakeStretcher(srcWidth, sizeMultiplier);
|
||||
#else
|
||||
switch (colorDepth) {
|
||||
case 16:
|
||||
sdlStretcher = sdlStretcher16[sizeMultiplier];
|
||||
break;
|
||||
case 24:
|
||||
sdlStretcher = sdlStretcher24[sizeMultiplier];
|
||||
break;
|
||||
case 32:
|
||||
sdlStretcher = sdlStretcher32[sizeMultiplier];
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
case 16:
|
||||
sdlStretcher = sdlStretcher16[sizeMultiplier];
|
||||
break;
|
||||
case 24:
|
||||
sdlStretcher = sdlStretcher24[sizeMultiplier];
|
||||
break;
|
||||
case 32:
|
||||
sdlStretcher = sdlStretcher32[sizeMultiplier];
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
void sdlStretch1x(uint8_t* srcPtr, uint32_t srcPitch, uint8_t* /* deltaPtr */, uint8_t* dstPtr, uint32_t dstPitch, int width, int height)
|
||||
{
|
||||
void sdlStretch1x(uint8_t* srcPtr,
|
||||
uint32_t srcPitch,
|
||||
uint8_t* /* deltaPtr */,
|
||||
uint8_t* dstPtr,
|
||||
uint32_t dstPitch,
|
||||
int width,
|
||||
int height) {
|
||||
int i;
|
||||
#ifndef C_CORE
|
||||
uint32_t* stretcher = (uint32_t*)sdlStretcher;
|
||||
|
@ -634,8 +424,13 @@ void sdlStretch1x(uint8_t* srcPtr, uint32_t srcPitch, uint8_t* /* deltaPtr */, u
|
|||
dstPtr += dstPitch;
|
||||
}
|
||||
}
|
||||
void sdlStretch2x(uint8_t* srcPtr, uint32_t srcPitch, uint8_t* /* deltaPtr */, uint8_t* dstPtr, uint32_t dstPitch, int width, int height)
|
||||
{
|
||||
void sdlStretch2x(uint8_t* srcPtr,
|
||||
uint32_t srcPitch,
|
||||
uint8_t* /* deltaPtr */,
|
||||
uint8_t* dstPtr,
|
||||
uint32_t dstPitch,
|
||||
int width,
|
||||
int height) {
|
||||
int i;
|
||||
#ifndef C_CORE
|
||||
uint32_t* stretcher = (uint32_t*)sdlStretcher;
|
||||
|
@ -648,8 +443,13 @@ void sdlStretch2x(uint8_t* srcPtr, uint32_t srcPitch, uint8_t* /* deltaPtr */, u
|
|||
dstPtr += dstPitch;
|
||||
}
|
||||
}
|
||||
void sdlStretch3x(uint8_t* srcPtr, uint32_t srcPitch, uint8_t* /* deltaPtr */, uint8_t* dstPtr, uint32_t dstPitch, int width, int height)
|
||||
{
|
||||
void sdlStretch3x(uint8_t* srcPtr,
|
||||
uint32_t srcPitch,
|
||||
uint8_t* /* deltaPtr */,
|
||||
uint8_t* dstPtr,
|
||||
uint32_t dstPitch,
|
||||
int width,
|
||||
int height) {
|
||||
int i;
|
||||
#ifndef C_CORE
|
||||
uint32_t* stretcher = (uint32_t*)sdlStretcher;
|
||||
|
@ -664,8 +464,13 @@ void sdlStretch3x(uint8_t* srcPtr, uint32_t srcPitch, uint8_t* /* deltaPtr */, u
|
|||
dstPtr += dstPitch;
|
||||
}
|
||||
}
|
||||
void sdlStretch4x(uint8_t* srcPtr, uint32_t srcPitch, uint8_t* /* deltaPtr */, uint8_t* dstPtr, uint32_t dstPitch, int width, int height)
|
||||
{
|
||||
void sdlStretch4x(uint8_t* srcPtr,
|
||||
uint32_t srcPitch,
|
||||
uint8_t* /* deltaPtr */,
|
||||
uint8_t* dstPtr,
|
||||
uint32_t dstPitch,
|
||||
int width,
|
||||
int height) {
|
||||
int i;
|
||||
#ifndef C_CORE
|
||||
uint32_t* stretcher = (uint32_t*)sdlStretcher;
|
||||
|
@ -682,3 +487,132 @@ void sdlStretch4x(uint8_t* srcPtr, uint32_t srcPitch, uint8_t* /* deltaPtr */, u
|
|||
dstPtr += dstPitch;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
struct FilterDesc {
|
||||
char name[30];
|
||||
int enlargeFactor;
|
||||
FilterFunc func16;
|
||||
FilterFunc func24;
|
||||
FilterFunc func32;
|
||||
};
|
||||
|
||||
const FilterDesc Filters[] = {{"Stretch 1x", 1, sdlStretch1x, sdlStretch1x, sdlStretch1x},
|
||||
{"Stretch 2x", 2, sdlStretch2x, sdlStretch2x, sdlStretch2x},
|
||||
{"2xSaI", 2, _2xSaI, 0, _2xSaI32},
|
||||
{"Super 2xSaI", 2, Super2xSaI, 0, Super2xSaI32},
|
||||
{"Super Eagle", 2, SuperEagle, 0, SuperEagle32},
|
||||
{"Pixelate", 2, Pixelate, 0, Pixelate32},
|
||||
{"AdvanceMAME Scale2x", 2, AdMame2x, 0, AdMame2x32},
|
||||
{"Bilinear", 2, Bilinear, 0, Bilinear32},
|
||||
{"Bilinear Plus", 2, BilinearPlus, 0, BilinearPlus32},
|
||||
{"Scanlines", 2, Scanlines, 0, Scanlines32},
|
||||
{"TV Mode", 2, ScanlinesTV, 0, ScanlinesTV32},
|
||||
{"lq2x", 2, lq2x, 0, lq2x32},
|
||||
{"hq2x", 2, hq2x, 0, hq2x32},
|
||||
{"xbrz2x", 2, 0, 0, xbrz2x32},
|
||||
{"Stretch 3x", 3, sdlStretch3x, sdlStretch3x, sdlStretch3x},
|
||||
{"hq3x", 3, hq3x16, 0, hq3x32_32},
|
||||
{"xbrz3x", 3, 0, 0, xbrz3x32},
|
||||
{"Stretch 4x", 4, sdlStretch4x, sdlStretch4x, sdlStretch4x},
|
||||
{"hq4x", 4, hq4x16, 0, hq4x32_32},
|
||||
{"xbrz4x", 4, 0, 0, xbrz4x32},
|
||||
{"xbrz5x", 5, 0, 0, xbrz5x32},
|
||||
{"xbrz6x", 6, 0, 0, xbrz6x32}};
|
||||
|
||||
int getFilterEnlargeFactor(const int f) {
|
||||
return Filters[f].enlargeFactor;
|
||||
}
|
||||
|
||||
char* getFilterName(const int f) {
|
||||
return (char*)Filters[f].name;
|
||||
}
|
||||
|
||||
FilterFunc initFilter(const int f, const int colorDepth, const int srcWidth) {
|
||||
FilterFunc func;
|
||||
|
||||
switch (colorDepth) {
|
||||
case 15:
|
||||
case 16:
|
||||
func = Filters[f].func16;
|
||||
break;
|
||||
case 24:
|
||||
func = Filters[f].func24;
|
||||
break;
|
||||
case 32:
|
||||
func = Filters[f].func32;
|
||||
break;
|
||||
default:
|
||||
func = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (func)
|
||||
switch (f) {
|
||||
case kStretch1x:
|
||||
sdlStretchInit(colorDepth, 0, srcWidth);
|
||||
break;
|
||||
case kStretch2x:
|
||||
sdlStretchInit(colorDepth, 1, srcWidth);
|
||||
break;
|
||||
case kStretch3x:
|
||||
sdlStretchInit(colorDepth, 2, srcWidth);
|
||||
break;
|
||||
case kStretch4x:
|
||||
sdlStretchInit(colorDepth, 3, srcWidth);
|
||||
break;
|
||||
case k2xSaI:
|
||||
case kSuper2xSaI:
|
||||
case kSuperEagle:
|
||||
if (colorDepth == 15)
|
||||
Init_2xSaI(555);
|
||||
else if (colorDepth == 16)
|
||||
Init_2xSaI(565);
|
||||
else
|
||||
Init_2xSaI(colorDepth);
|
||||
break;
|
||||
case khq2x:
|
||||
case klq2x:
|
||||
hq2x_init(colorDepth);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return func;
|
||||
}
|
||||
|
||||
struct IFBFilterDesc {
|
||||
char name[30];
|
||||
IFBFilterFunc func16;
|
||||
IFBFilterFunc func32;
|
||||
};
|
||||
|
||||
const IFBFilterDesc IFBFilters[] = {{"No interframe blending", 0, 0},
|
||||
{"Interframe motion blur", MotionBlurIB, MotionBlurIB32},
|
||||
{"Smart interframe blending", SmartIB, SmartIB32}};
|
||||
|
||||
IFBFilterFunc initIFBFilter(const int f, const int colorDepth) {
|
||||
IFBFilterFunc func;
|
||||
|
||||
switch (colorDepth) {
|
||||
case 15:
|
||||
case 16:
|
||||
func = IFBFilters[f].func16;
|
||||
break;
|
||||
case 32:
|
||||
func = IFBFilters[f].func32;
|
||||
break;
|
||||
case 24:
|
||||
default:
|
||||
func = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return func;
|
||||
}
|
||||
|
||||
char* getIFBFilterName(const IFBFilter f) {
|
||||
return (char*)IFBFilters[f].name;
|
||||
}
|
||||
|
|
|
@ -763,8 +763,6 @@ set(
|
|||
widgets/sdljoy.cpp
|
||||
widgets/user-input-ctrl.cpp
|
||||
widgets/wxmisc.cpp
|
||||
# probably ought to be in common
|
||||
../sdl/text.cpp
|
||||
# from external source with minor modifications
|
||||
widgets/checkedlistctrl.cpp
|
||||
)
|
||||
|
@ -786,7 +784,6 @@ set(
|
|||
background-input.h
|
||||
wxlogdebug.h
|
||||
drawing.h
|
||||
filters.h
|
||||
ioregs.h
|
||||
opts.h
|
||||
viewsupt.h
|
||||
|
@ -819,8 +816,6 @@ set(
|
|||
widgets/wx/sdljoy.h
|
||||
widgets/wx/webupdatedef.h
|
||||
widgets/wx/wxmisc.h
|
||||
# probably ought to be in common
|
||||
../sdl/text.h
|
||||
# from external source with minor modifications
|
||||
widgets/wx/checkedlistctrl.h
|
||||
)
|
||||
|
@ -924,6 +919,8 @@ if(NOT TRANSLATIONS_ONLY)
|
|||
${CM_STUFF}
|
||||
)
|
||||
|
||||
target_include_directories(visualboyadvance-m PRIVATE ${NONSTD_INCLUDE_DIR})
|
||||
|
||||
if(WIN32 AND (X86_64 OR X86_32) AND ENABLE_ONLINEUPDATES)
|
||||
if(NOT DEFINED WINSPARKLE_BIN_RELEASE_DIR)
|
||||
set(WINSPARKLE_BIN_RELEASE_DIR ${CMAKE_SOURCE_DIR}/dependencies/WinSparkle-0.6.0)
|
||||
|
@ -987,11 +984,19 @@ if(NOT TRANSLATIONS_ONLY)
|
|||
visualboyadvance-m
|
||||
${wxWidgets_LIBRARIES}
|
||||
${VBAM_LIBS}
|
||||
nonstd-lib
|
||||
vbam-components-audio-sdl
|
||||
vbam-components-draw-text
|
||||
vbam-components-filters
|
||||
vbam-components-filters-agb
|
||||
vbam-components-filters-interframe
|
||||
vbam-components-user-config
|
||||
)
|
||||
|
||||
if(ENABLE_FFMPEG)
|
||||
target_link_libraries(
|
||||
visualboyadvance-m
|
||||
vbam-components-av-recording
|
||||
${FFMPEG_LIBRARIES}
|
||||
)
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include <wx/wfstream.h>
|
||||
#include <wx/msgdlg.h>
|
||||
|
||||
#include "components/filters_interframe/interframe.h"
|
||||
#include "config/option-proxy.h"
|
||||
#include "config/option.h"
|
||||
#include "core/base/version.h"
|
||||
|
|
|
@ -3,8 +3,10 @@
|
|||
|
||||
#include <array>
|
||||
#include <map>
|
||||
#include "nonstd/optional.hpp"
|
||||
#include <set>
|
||||
|
||||
#include <optional.hpp>
|
||||
|
||||
#include <wx/string.h>
|
||||
|
||||
#include "config/user-input.h"
|
||||
|
|
|
@ -2,12 +2,13 @@
|
|||
#error "Do not include "config/internal/option-internal.h" outside of the implementation."
|
||||
#endif
|
||||
|
||||
#include <wx/string.h>
|
||||
#include <array>
|
||||
#include <string>
|
||||
|
||||
#include <optional.hpp>
|
||||
|
||||
#include <wx/string.h>
|
||||
|
||||
#include "config/option.h"
|
||||
#include "nonstd/optional.hpp"
|
||||
|
||||
namespace config {
|
||||
namespace internal {
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#include "config/option.h"
|
||||
|
||||
#include <cstring>
|
||||
#include "nonstd/variant.hpp"
|
||||
|
||||
#include <variant.hpp>
|
||||
|
||||
#include <wx/log.h>
|
||||
#include <wx/translation.h>
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
#ifndef VBAM_WX_CONFIG_OPTIONS_H_
|
||||
#define VBAM_WX_CONFIG_OPTIONS_H_
|
||||
|
||||
#include "nonstd/variant.hpp"
|
||||
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <functional>
|
||||
#include <unordered_set>
|
||||
|
||||
#include <variant.hpp>
|
||||
|
||||
#include <wx/string.h>
|
||||
|
||||
#include "config/option-id.h"
|
||||
|
|
|
@ -32,7 +32,6 @@
|
|||
#include <wx/valtext.h>
|
||||
#include <wx/wfstream.h>
|
||||
|
||||
#include "../Util.h"
|
||||
#include "config/option-proxy.h"
|
||||
#include "core/gb/gb.h"
|
||||
#include "core/gb/gbCheats.h"
|
||||
|
@ -1458,7 +1457,7 @@ public:
|
|||
{
|
||||
(void)ev; // unused params
|
||||
uint32_t sz = wxGetApp().frame->GetPanel()->game_size();
|
||||
utilGBAFindSave(sz);
|
||||
flashDetectSaveType(sz);
|
||||
type->SetSelection(coreOptions.saveType);
|
||||
|
||||
if (coreOptions.saveType == GBA_SAVE_FLASH) {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#include <cmath>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include "components/filters_agb/filters_agb.h"
|
||||
#include "components/filters_interframe/interframe.h"
|
||||
|
||||
#ifdef __WXGTK__
|
||||
#include <X11/Xlib.h>
|
||||
|
@ -20,9 +22,9 @@
|
|||
#include <wx/menu.h>
|
||||
#include <SDL_joystick.h>
|
||||
|
||||
#include "../Util.h"
|
||||
#include "../sdl/text.h"
|
||||
#include "background-input.h"
|
||||
#include "components/draw_text/draw_text.h"
|
||||
#include "components/filters/filters.h"
|
||||
#include "config/game-control.h"
|
||||
#include "config/option-proxy.h"
|
||||
#include "config/option.h"
|
||||
|
@ -33,16 +35,15 @@
|
|||
#include "core/gb/gb.h"
|
||||
#include "core/gb/gbCheats.h"
|
||||
#include "core/gb/gbGlobals.h"
|
||||
#include "core/gb/gbSound.h"
|
||||
#include "core/gb/gbPrinter.h"
|
||||
#include "core/gb/gbSound.h"
|
||||
#include "core/gba/gbaCheats.h"
|
||||
#include "core/gba/gbaGlobals.h"
|
||||
#include "core/gba/gbaFlash.h"
|
||||
#include "core/gba/gbaGlobals.h"
|
||||
#include "core/gba/gbaPrint.h"
|
||||
#include "core/gba/gbaRtc.h"
|
||||
#include "core/gba/gbaSound.h"
|
||||
#include "drawing.h"
|
||||
#include "filters.h"
|
||||
#include "wayland.h"
|
||||
#include "widgets/render-plugin.h"
|
||||
#include "wxutil.h"
|
||||
|
@ -354,7 +355,7 @@ void GameArea::LoadGame(const wxString& name)
|
|||
ovSaveType = 0;
|
||||
|
||||
if (ovSaveType == 0)
|
||||
utilGBAFindSave(rom_size);
|
||||
flashDetectSaveType(rom_size);
|
||||
else
|
||||
coreOptions.saveType = ovSaveType;
|
||||
|
||||
|
@ -368,7 +369,7 @@ void GameArea::LoadGame(const wxString& name)
|
|||
coreOptions.cpuSaveType = 0;
|
||||
|
||||
if (coreOptions.cpuSaveType == 0)
|
||||
utilGBAFindSave(rom_size);
|
||||
flashDetectSaveType(rom_size);
|
||||
else
|
||||
coreOptions.saveType = coreOptions.cpuSaveType;
|
||||
|
||||
|
@ -2680,11 +2681,11 @@ void GameArea::OnGBBorderChanged(config::Option* option) {
|
|||
|
||||
void GameArea::UpdateLcdFilter() {
|
||||
if (loaded == IMAGE_GBA)
|
||||
utilUpdateSystemColorMaps(OPTION(kGBALCDFilter));
|
||||
gbafilter_update_colors(OPTION(kGBALCDFilter));
|
||||
else if (loaded == IMAGE_GB)
|
||||
utilUpdateSystemColorMaps(OPTION(kGBLCDFilter));
|
||||
gbafilter_update_colors(OPTION(kGBLCDFilter));
|
||||
else
|
||||
utilUpdateSystemColorMaps(false);
|
||||
gbafilter_update_colors(false);
|
||||
}
|
||||
|
||||
void GameArea::SuspendScreenSaver() {
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include <wx/printdlg.h>
|
||||
#include <SDL.h>
|
||||
|
||||
#include "../common/SoundSDL.h"
|
||||
#include "components/audio_sdl/audio_sdl.h"
|
||||
#include "config/game-control.h"
|
||||
#include "config/option-proxy.h"
|
||||
#include "core/base/image_util.h"
|
||||
|
|
|
@ -12,7 +12,8 @@ function(add_doctest_test test_src)
|
|||
|
||||
target_link_libraries("${test_name}" ${wxWidgets_LIBRARIES})
|
||||
|
||||
target_include_directories("${test_name}" PRIVATE ${wxWidgets_INCLUDE_DIRS})
|
||||
target_include_directories("${test_name}"
|
||||
PRIVATE ${wxWidgets_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/third_party/include)
|
||||
|
||||
set_target_properties("${test_name}"
|
||||
PROPERTIES
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <wx/wxcrtvararg.h>
|
||||
#include <wx/zipstrm.h>
|
||||
|
||||
#include "components/user_config/user_config.h"
|
||||
#include "core/gb/gbGlobals.h"
|
||||
#include "core/gba/gbaSound.h"
|
||||
|
||||
|
@ -42,7 +43,6 @@
|
|||
|
||||
// The built-in vba-over.ini
|
||||
#include "builtin-over.h"
|
||||
#include "../Util.h"
|
||||
#include "config/game-control.h"
|
||||
#include "config/option-proxy.h"
|
||||
#include "config/option.h"
|
||||
|
@ -223,7 +223,7 @@ static void get_config_path(wxPathList& path, bool exists = true)
|
|||
#if defined(__WXGTK__)
|
||||
// XDG spec manual support
|
||||
// ${XDG_CONFIG_HOME:-$HOME/.config}/`appname`
|
||||
wxString old_config = wxString(getenv("HOME"), wxConvLibc) + wxT(FILE_SEP) + wxT(".vbam");
|
||||
wxString old_config = wxString(getenv("HOME"), wxConvLibc) + kFileSep + ".vbam";
|
||||
wxString new_config(get_xdg_user_config_home().c_str(), wxConvLibc);
|
||||
if (!wxDirExists(old_config) && wxIsWritable(new_config))
|
||||
{
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#endif
|
||||
|
||||
#ifndef NO_FFMPEG
|
||||
#include "../common/ffmpeg.h"
|
||||
#include "components/av_recording/av_recording.h"
|
||||
#endif
|
||||
|
||||
#include "wxlogdebug.h"
|
||||
|
@ -797,6 +797,4 @@ extern int autofire, autohold;
|
|||
#define KEYM_MOTION_IN (1 << 19)
|
||||
#define KEYM_MOTION_OUT (1 << 20)
|
||||
|
||||
#include "filters.h"
|
||||
|
||||
#endif /* WX_WXVBAM_H */
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
# Defines the `NONSTD_INCLUDE_DIR` variable and `nonstd-lib` target.
|
||||
|
||||
# nonstd library dependency (header-only).
|
||||
set(NONSTD_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR} PARENT_SCOPE)
|
||||
add_library(nonstd-lib INTERFACE)
|
||||
target_sources(nonstd-lib
|
||||
INTERFACE
|
||||
optional.hpp
|
||||
variant.hpp
|
||||
)
|
||||
# For C++, default to nonstd::optional and nonstd::variant for now due to mac
|
||||
# build issues.
|
||||
if(APPLE)
|
||||
target_compile_definitions(nonstd-lib
|
||||
INTERFACE
|
||||
optional_CONFIG_SELECT_OPTIONAL=optional_OPTIONAL_NONSTD
|
||||
variant_CONFIG_SELECT_VARIANT=variant_VARIANT_NONSTD
|
||||
)
|
||||
else()
|
||||
target_compile_definitions(nonstd-lib
|
||||
INTERFACE
|
||||
optional_CONFIG_SELECT_OPTIONAL=optional_OPTIONAL_STD
|
||||
variant_CONFIG_SELECT_VARIANT=variant_VARIANT_STD
|
||||
)
|
||||
endif()
|
Loading…
Reference in New Issue