Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

libretro branch added #340

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 29 additions & 6 deletions src/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@

#define USE_CUBEMAP_MIPS






#ifdef __UWP__
#define _OS_UWP 1
#define _GAPI_D3D11 1
Expand All @@ -24,7 +29,16 @@
#undef OS_PTHREAD_MT
#elif WIN32
#define _OS_WIN 1
#define _GAPI_GL 1

#ifdef __LIBRETRO__
#define _GAPI_GL 1
#ifdef __LIBRETRO_GLES__
#define _GAPI_GLES 1
#endif
#else
#define _GAPI_GL 1
#endif
//#define _GAPI_GL 1
//#define _GAPI_D3D9 1
//#define _GAPI_D3D11 1
//#define _GAPI_VULKAN 1
Expand All @@ -43,7 +57,6 @@
#define _OS_ANDROID 1
#define _GAPI_GL 1
#define _GAPI_GLES 1
//#define _GAPI_VULKAN

#define VR_SUPPORT
#elif __SDL2__
Expand Down Expand Up @@ -86,6 +99,7 @@
#elif __linux__
#define _OS_LINUX 1
#define _GAPI_GL 1
#define _GAPI_GLES 1 //sunxu??
#elif __APPLE__
#define _GAPI_GL 1
#include "TargetConditionals.h"
Expand Down Expand Up @@ -714,7 +728,9 @@ namespace Core {

void stop() {
if (fpsTime < Core::getTime()) {
#ifndef __LIBRETRO__
LOG("FPS: %d DIP: %d TRI: %d RT: %d\n", fps, dips, tris, rt);
#endif
#ifdef PROFILE
LOG("frame time: %d mcs\n", tFrame / 1000);
LOG("sound: mix %d rev %d ren %d/%d ogg %d\n", Sound::stats.mixer, Sound::stats.reverb, Sound::stats.render[0], Sound::stats.render[1], Sound::stats.ogg);
Expand All @@ -735,6 +751,8 @@ namespace Core {
#include "gapi/sw.h"
#elif _GAPI_GL
#include "gapi/gl.h"
#elif _GAPI_GLES
#include "gapi/gl.h"
#elif _GAPI_D3D8
#include "gapi/d3d8.h"
#elif _GAPI_D3D9
Expand Down Expand Up @@ -894,10 +912,10 @@ namespace Core {
// init settings
settings.version = SETTINGS_VERSION;

settings.detail.setFilter (Core::Settings::HIGH);
settings.detail.setLighting (Core::Settings::HIGH);
settings.detail.setShadows (Core::Settings::HIGH);
settings.detail.setWater (Core::Settings::HIGH);
settings.detail.setFilter (Core::Settings::MEDIUM);
settings.detail.setLighting (Core::Settings::MEDIUM);
settings.detail.setShadows (Core::Settings::MEDIUM);
settings.detail.setWater (Core::Settings::MEDIUM);
settings.detail.simple = false;
settings.detail.vsync = true;
settings.detail.stereo = Settings::STEREO_OFF;
Expand Down Expand Up @@ -961,6 +979,11 @@ namespace Core {
settings.controls[0].keys[ cAction ].key = ikS;
#endif

#ifdef __LIBRETRO__
settings.controls[0].keys[ cInventory ].key = ikTab;
settings.controls[0].keys[ cStart ].key = ikEnter;
settings.detail.vsync = false;
#endif
// use D key for jump in browsers
#ifdef _OS_WEB
settings.controls[0].keys[ cJump ].key = ikD;
Expand Down
41 changes: 30 additions & 11 deletions src/game.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,14 +227,17 @@ namespace Game {
if (!level || TR::isTitleLevel(level->level.id) || TR::isCutsceneLevel(level->level.id)) {
return;
}
printf("quickSave level->level.id :%d \n", level->level.id);
level->saveGame(level->level.id, true, false);
}

void quickLoad(bool forced = false) {
if (!level) return;

int slot = getSaveSlot(level->level.id, true);


printf("quickLoad slot :%d \n", slot);

if (slot == -1) {
slot = getSaveSlot(level->level.id, false);
}
Expand All @@ -261,8 +264,11 @@ namespace Game {

PROFILE_MARKER("UPDATE");


#ifndef __LIBRETRO__
if (!Core::update())
return false;
#endif

float delta = Core::deltaTime;

Expand All @@ -289,16 +295,29 @@ namespace Game {
}
#endif

if (Input::down[ik5] && !inventory->isActive()) {
if (level->players[0]->canSaveGame())
quickSave();
Input::down[ik5] = false;
}

if (Input::down[ik9] && !inventory->isActive()) {
quickLoad();
Input::down[ik9] = false;
}
if (Input::down[ik5])
{
printf("get ik5 input \n");
if( !inventory->isActive()) {
printf("inventory->isActive() \n");
if (level->players[0]->canSaveGame())
{
printf("quickSave \n");
quickSave();
}
Input::down[ik5] = false;
}
}

if (Input::down[ik9])
{
printf("get ik9 input \n");
if(!inventory->isActive()) {
printf("quickSave \n");
quickLoad();
}
Input::down[ik9] = false;
}

if (!level->level.isCutsceneLevel())
delta = min(0.2f, delta);
Expand Down
2 changes: 1 addition & 1 deletion src/gameflow.h
Original file line number Diff line number Diff line change
Expand Up @@ -1421,7 +1421,7 @@ namespace TR {
CHECK_FILE("data/TITLE.PCX"); // PC
CHECK_FILE("pix/title.pcx"); // PC
CHECK_FILE("PIXUS/TITLEUS.RAW"); // PSX US
CHECK_FILE("PIXJAP/TITLEJAP.RAW"); // PSX US
//CHECK_FILE("PIXJAP/TITLEJAP.RAW"); // PSX US
return "level/2/TITLEUS.PNG"; // WEB
case LVL_TR2_ASSAULT :
case LVL_TR2_HOUSE :
Expand Down
12 changes: 12 additions & 0 deletions src/inventory.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,12 @@ static const OptionItem optDetail[] = {
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_SIMPLE_ITEMS, SETTINGS( detail.simple ), STR_OFF, 0, 1 ),
#ifdef INV_QUALITY
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_RESOLUTION, SETTINGS( detail.scale ), STR_SCALE_100, 0, 3 ),

#if !defined(__LIBRETRO__)
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_VSYNC, SETTINGS( detail.vsync ), STR_OFF, 0, 1 ),
#endif

#endif
#ifdef INV_STEREO
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_STEREO, SETTINGS( detail.stereo ), STR_NO_STEREO, 0,
#if defined(_OS_WIN) || defined(_OS_ANDROID)
Expand Down Expand Up @@ -209,8 +213,12 @@ static const OptionItem optControls[] = {
#ifdef INV_GAMEPAD_ONLY
OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY , SETTINGS( ctrlIndex ), STR_OPT_CONTROLS_KEYBOARD, 0, 0xFF ),
#else
#ifndef __LIBRETRO__
OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY , SETTINGS( ctrlIndex ), STR_OPT_CONTROLS_KEYBOARD, 0, 1 ),
#endif
#endif

#ifndef __LIBRETRO__
OptionItem( OptionItem::TYPE_KEY, STR_CTRL_FIRST + cUp , SETTINGS( controls[0].keys[ cUp ] ), STR_KEY_FIRST ),
OptionItem( OptionItem::TYPE_KEY, STR_CTRL_FIRST + cDown , SETTINGS( controls[0].keys[ cDown ] ), STR_KEY_FIRST ),
OptionItem( OptionItem::TYPE_KEY, STR_CTRL_FIRST + cRight , SETTINGS( controls[0].keys[ cRight ] ), STR_KEY_FIRST ),
Expand All @@ -227,6 +235,8 @@ static const OptionItem optControls[] = {
OptionItem( OptionItem::TYPE_KEY, STR_CTRL_FIRST + cRoll , SETTINGS( controls[0].keys[ cRoll ] ), STR_KEY_FIRST ),
OptionItem( OptionItem::TYPE_KEY, STR_CTRL_FIRST + cInventory , SETTINGS( controls[0].keys[ cInventory ] ), STR_KEY_FIRST ),
OptionItem( OptionItem::TYPE_KEY, STR_CTRL_FIRST + cStart , SETTINGS( controls[0].keys[ cStart ] ), STR_KEY_FIRST ),
#endif

};

static OptionItem optControlsPlayer[COUNT(optControls)];
Expand Down Expand Up @@ -2092,6 +2102,7 @@ struct Inventory {
}

// inventory controls help
#ifndef __LIBRETRO__
if (page == targetPage && Input::touchTimerVis <= 0.0f) {
float dx = 32.0f;
char buf[64];
Expand All @@ -2110,6 +2121,7 @@ struct Inventory {
UI::textOut(vec2(eye, 480 - 64), buf, UI::aRight, UI::width - dx);
}
}
#endif

if (index == targetIndex && page == targetPage) {
renderItemText(items[getGlobalIndex(page, index)]);
Expand Down
4 changes: 2 additions & 2 deletions src/level.h
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ struct Level : IGame {
}

slot.size = int32(ptr - slot.data);

printf("createSaveSlot size is %d \n", slot.size);
return slot;
}

Expand Down Expand Up @@ -285,7 +285,7 @@ struct Level : IGame {
UI::showHint(STR_HINT_SAVING_ERROR, 3.0f);
}
}

virtual void saveGame(TR::LevelID id, bool checkpoint, bool updateStats) {
ASSERT(saveResult != SAVE_RESULT_WAIT);

Expand Down
97 changes: 97 additions & 0 deletions src/platform/libretro/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
platform = unix
GLES := 1
# system platform
system_platform = unix

TARGET_NAME = openlara

CORE_DIR := .

TARGET := $(TARGET_NAME)_libretro.so
fpic := -fPIC
SHARED := -shared -Wl,--version-script=link.T -Wl,--no-undefined

GL_LIB := -lGLESv2
GLES := 1
GLES31 :=1
LIBS += -lpthread

CXXFLAGS += -I.
CFLAGS += -I.
CXXFLAGS += -I..
CFLAGS += -I..


CXXFLAGS += -DARM
CFLAGS += -DARM

CXXFLAGS += -I/opt/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/include
CFLAGS += -I/opt/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu/include
LIBS += --sysroot=/opt/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/aarch64-none-linux-gnu

CC = /opt/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
CXX = /opt/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++

ifeq ($(DEBUG), 1)
CXXFLAGS += -O0 -g
CFLAGS += -O0 -g
else
CXXFLAGS += -Ofast -mcpu=cortex-a35 -ffast-math -Wall -fomit-frame-pointer
CFLAGS += -Ofast -mcpu=cortex-a35 -ffast-math -Wall -fomit-frame-pointer
endif


CFLAGS += -std=c99

include Makefile.common

OBJECTS := $(SOURCES_C:.c=.o) $(SOURCES_CXX:.cpp=.o)
CXXFLAGS += $(fpic)
CFLAGS += -Wall -pedantic $(fpic)

CXXFLAGS += -std=c++11
CFLAGS += $(INCFLAGS) $(FLAGS)
CXXFLAGS += $(INCFLAGS) $(FLAGS)

ifeq ($(GLES), 1)
CXXFLAGS += -DHAVE_OPENGLES -DHAVE_OPENGLES2
CFLAGS += -DHAVE_OPENGLES -DHAVE_OPENGLES2
CXXFLAGS += -D__LIBRETRO_GLES__
CFLAGS += -D__LIBRETRO_GLES__
ifeq ($(GLES31), 1)
CXXFLAGS += -DHAVE_OPENGLES3 -DHAVE_OPENGLES_3_1
CFLAGS += -DHAVE_OPENGLES3 -DHAVE_OPENGLES_3_1
else ifeq ($(GLES3), 1)
CXXFLAGS += -DHAVE_OPENGLES3
CFLAGS += -DHAVE_OPENGLES3
endif
LIBS += -lGLESv2 # Still link against GLESv2 when using GLES3 API, at least on desktop Linux.
# LIBS += -lEGL
else
LIBS += $(GL_LIB)
endif

ifeq ($(CORE), 1)
CXXFLAGS += -DCORE
CFLAGS += -DCORE
endif

CXXFLAGS += -D__LIBRETRO__
CFLAGS += -D__LIBRETRO__

all: $(TARGET)

$(TARGET): $(OBJECTS)
$(CXX) $(LDFLAGS) $(fpic) $(SHARED) $(INCLUDES) -o $@ $(OBJECTS) $(LIBS) -lm $(EXTRA_GL_LIBS)

%.o: %.cpp
$(CXX) $(CXXFLAGS) $(fpic) -c -o $@ $<

%.o: %.c
$(CC) $(CFLAGS) $(fpic) -c -o $@ $<

clean:
rm -f $(OBJECTS) $(TARGET)

.PHONY: clean

29 changes: 29 additions & 0 deletions src/platform/libretro/Makefile.common
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
LIBRETRO_COMM_DIR := $(CORE_DIR)/libretro-common

INCFLAGS := -I$(CORE_DIR) \
-I$(CORE_DIR)/../.. \
-I$(LIBRETRO_COMM_DIR)/include \
-I$(LIBRETRO_COMM_DIR)/glsym


LIBS_DIR := $(CORE_DIR)/../../libs
SOURCES_C := $(LIBRETRO_COMM_DIR)/glsym/rglgen.c \
$(LIBS_DIR)/stb_vorbis/stb_vorbis.c \
$(LIBS_DIR)/tinf/tinflate.c \
$(LIBRETRO_COMM_DIR)/compat/compat_strl.c \
$(LIBRETRO_COMM_DIR)/compat/compat_strcasestr.c \
$(LIBRETRO_COMM_DIR)/file/file_path.c \
$(LIBRETRO_COMM_DIR)/encodings/encoding_utf.c

ifeq ($(GLES), 1)
ifeq ($(GLES3), 1)
SOURCES_C += $(LIBRETRO_COMM_DIR)/glsym/glsym_es3.c
else
SOURCES_C += $(LIBRETRO_COMM_DIR)/glsym/glsym_es2.c
endif
else
SOURCES_C += $(LIBRETRO_COMM_DIR)/glsym/glsym_gl.c
endif

SOURCES_CXX := $(CORE_DIR)/main.cpp \
$(LIBS_DIR)/minimp3/minimp3.cpp
22 changes: 22 additions & 0 deletions src/platform/libretro/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# libretro_test_gl_shaders
This sample demonstrates a libretro core using programmable pipeline OpenGL (GL 2.0 and later / OpenGL ES 2.0). It works on both desktop (OpenGL 2.0 and later) and mobile (OpenGL ES 2.0 and later)

## Requirements
On the desktop - A graphics card driver supporting OpenGL 2.0 and/or higher.

On mobile - A graphics card driver supporting OpenGLES 2.0 and/or higher.

## Programming language
C

## Building
To compile, you will need a C compiler and assorted toolchain installed.

make

This targets [libretro](http://libretro.com) GL interface, so you need a libretro frontend supporting this interface, such as [RetroArch](https://github.com/libretro/RetroArch), installed.

## Running
After building, this command should run the program:

retroarch -L testgl_libretro.so
Loading