OpenBOR finally working fine on RETROPIE with ES
-
As i promised.... here you are what i done, sorry i have not too much time to write all in a clear way but i'm sure that you will understand reading... if in doubt just ask!
GL4ES, just try my fork:
https://github.com/zanac/gl4esIn CMakeLists.txt added:
set(NOX11 ON)
set(NOEGL ON)
add_definitions(-marm -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard -ffast-math -fomit-frame-pointer)the NOX11 and NOEGL should be tested, i added these lines last weekend and have just seen that in allwinner board work better ('cause with these i removed some dependencies if you use GL with framebuffer)
In src/gl/init.c
I changed defualt to ES 2.0:
#define DEFAULT_ES 2After this you should run cmake and compile:
cmake . -DBCMHOST=1
make GLFor use the lib i suggest this minimum environment variable:
export LIBGL_FB=2
export LIBGL_FBOMAKECURRENT=1OPENBOR, i don't make a fork, but it's rather easy to patch the build_pandora, if you have time just create a new build_rasbperry with these tricks!!!
ifdef BUILD_PANDORA
TARGET = $(VERSION_NAME).elf
TARGET_FINAL = $(VERSION_NAME)
TARGET_PLATFORM = PANDORA
BUILD_OPENGL = 1
BUILD_WEBM = 1
BUILD_LINUX = 1
BUILD_SDL = 1
BUILD_GFX = 1
BUILD_PTHREAD = 1
BUILD_SDL_IO = 1
BUILD_TREMOR = 1
BUILDING = 1
CC = gcc
INCLUDES = $(PNDDEV)/include
$(PNDDEV)/include/SDL
OBJTYPE = elf
LIBRARIES = $(PNDDEV)/lib
ifeq ($(BUILD_PANDORA), 0)
BUILD_DEBUG = 1
endif
endifI also patched CFLAGS for arm optimization:
CFLAGS += $(addprefix -I", $(addsuffix ", $(INCS))) $(ARCHFLAGS) -D$(TARGET_PLATFORM)
CFLAGS += -g -Wall -Werror -fsigned-char -std=gnu99
CFLAGS += -marm -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard -fomit-frame-pointer -ffast-math -O3The lib should link GL:
LIBS += -Wl,-rpath,$(LIBRARIES) -lSDL2 -lSDL2_gfx -lGL
The only source that i bad patched now is opengl.c:
in sdl/opengl.c
I made these changes:
// create an OpenGL compatibility context, not a core or ES context
#ifndef WIN // except on Windows, where some Nvidia drivers really don't like us doing this
//zanac, these attributes don't work well in allwinner (rasbperry too?)
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY);
#endif//zanac, it seems that you should always create a new context without delete the old one, this happen in allwinner (rasbperry too?) //if((context = SDL_GL_GetCurrentContext())) // SDL_GL_DeleteContext(context);
-
@zanac Thank you for sticking around and seeing this through. It shows you take pride in your work.
-
@zanac Can you please post in a better format? I wasn't able to compile and catched one error...
Please use three backticks
```
in beginning and ending of codeblocks to get proper format ;)OKAY GOT IT
Please remove LIBS provided from @zanac first build from lib directory....
Use the install instructions done here -
hi all just reading through this openbor section. im trying to get it working on pi3. ive got all my paks is there a tutorial on how to install it onto my pi thanks
-
@moonston333 Please use install instructions done here
Please remove the binaries provided in the google download if you want to compile on your own.... you will catch errors.We are still work in progress.
-
@cyperghost I will present Василий Patch next days for OpenBOR
Борис is here
Makefile ifdef BUILD_PANDORA TARGET = $(VERSION_NAME).elf TARGET_FINAL = $(VERSION_NAME) TARGET_PLATFORM = PANDORA BUILD_LINUX = 1 BUILD_SDL = 1 BUILD_GLES = 1 BUILD_OPENGL = 1 BUILD_LOADGL = 1 BUILD_WEBM = 1 BUILD_GFX = 1 BUILD_PTHREAD = 1 BUILD_SDL_IO = 1 BUILD_TREMOR = 1 BUILDING = 1 CC = gcc INCLUDES = $(PNDDEV)/include \ $(PNDDEV)/include/SDL OBJTYPE = elf LIBRARIES = $(PNDDEV)/lib ifeq ($(BUILD_PANDORA), 0) BUILD_DEBUG = 1 endif endif ... ... ifdef BUILD_PANDORA STRIP = strip $(TARGET) -o $(TARGET_FINAL) endif ... ... CFLAGS += $(addprefix -I", $(addsuffix ", $(INCS))) $(ARCHFLAGS) -D$(TARGET_PLATFORM) CFLAGS += -g -Wall -Werror -fsigned-char -std=gnu99 CFLAGS += -marm -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard -fomit-frame-pointer -ffast-math -O3 ... ... ifdef BUILD_SDL ifeq ($(findstring DGE, $(SDKPATH)), DGE) LIBS += -lSDL -lSDL_gfx -lts else LIBS += -Wl,-rpath,$(LIBRARIES) -lSDL2 -lSDL2_gfx -lGL endif endif
sdl/opencl.c // create an OpenGL compatibility context, not a core or ES context #ifndef WIN // except on Windows, where some Nvidia drivers really don't like us doing this //zanac, these attributes don't work well in allwinner (rasbperry too?) //SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY); #endif //zanac, it seems that you should always create a new context without delete the old one, this happen in allwinner (rasbperry too?) //if((context = SDL_GL_GetCurrentContext())) // SDL_GL_DeleteContext(context);
-
@darknior Maybe opengl4es will be able to benefit Residualvm as well
Salvador Liébana was one of the devs who got Diable & others running on Pi -
@bizzar721 WOAW it's possible to play this game on PI ??????
We can also maybe play to "Return to the future" ???
Incredible, maybe it can help yes, if you have some informations, create an other discussion please and give the link here, i'm very interested, i'm a BIG fan of ScummVM too :p
Thanks -
@darknior said in OpenBOR finally working fine on RETROPIE with ES:
@bizzar721 WOAW it's possible to play this game on PI ??????
We can also maybe play to "Return to the future" ???
Incredible, maybe it can help yes, if you have some informations, create an other discussion please and give the link here, i'm very interested, i'm a BIG fan of ScummVM too :p
Thanksgl4es is just a wrapper that translate some "open gl" function to "open gl es 2", if you want to play 3d games you need that software use "open gl es 2" (gles2 for friends) natively!
About scummvm.... as i said it is possible to run it under libretro core, so it use gles2 natively using retroarch!!!
Just download: https://github.com/libretro/scummvmAfter this just go to the folder "backends/platform/libretro/build" and type "make -j 4" :) It will compile (in about 7-8 hours!!!) a working core for allwinner/rasbperry!!!
For improve scummvm speed i suggest to hack the makefile and use neon+arm+cortex optimization... i use these:
TOOLSET = arm-linux-gnueabihf-
TARGET := $(TARGET_NAME)libretro.so
SHARED := -shared -Wl,--no-undefined
DEFINES += -fPIC -Wno-multichar -D_ARM_ASSEM
LDFLAGS += -shared -Wl,--version-script=../link.T -fPIC
CC = gcc
USE_VORBIS = 0
USE_THEORADEC = 0
USE_TREMOR = 1
HAVE_MT32EMU = 0
DEFINES += -marm -mcpu=cortex-a9 -marm -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard -ffast-math -fomit-frame-pointer -O3
DEFINES += -mfloat-abi=hard
DEFINES += -DARM
HAVE_NEON = 1
DEFINES += -DSIZEOF_SIZE_T=4If you want i can share the libretro_scummv.so core compiled in this way, it work very well i use it and is very great!!!
-
new hint.... it seems that is better use -O2 for compile openbor!!!
just replace in makefile patch that i mae O3 with O2 : ) -
@zanac I would suggest to use sperate libGL for each game.
add Makefile
LIBRARIES = ./lib
and create directory
lib
in OpenBOR dir and place libGL here -
@cyperghost This is Василий Patch
Changelog:
added lib next to binary
added cflags, change from O3 to O2Makefile
Makefile ifdef BUILD_PANDORA TARGET = $(VERSION_NAME).elf TARGET_FINAL = $(VERSION_NAME) TARGET_PLATFORM = PANDORA BUILD_LINUX = 1 BUILD_SDL = 1 BUILD_GLES = 1 BUILD_OPENGL = 1 BUILD_LOADGL = 1 BUILD_WEBM = 1 BUILD_GFX = 1 BUILD_PTHREAD = 1 BUILD_SDL_IO = 1 BUILD_TREMOR = 1 BUILDING = 1 CC = gcc INCLUDES = $(PNDDEV)/include \ $(PNDDEV)/include/SDL OBJTYPE = elf LIBRARIES = ./lib ifeq ($(BUILD_PANDORA), 0) BUILD_DEBUG = 1 endif endif ... ... ifdef BUILD_PANDORA STRIP = strip $(TARGET) -o $(TARGET_FINAL) endif ... ... CFLAGS += $(addprefix -I", $(addsuffix ", $(INCS))) $(ARCHFLAGS) -D$(TARGET_PLATFORM) CFLAGS += -g -Wall -Werror -fsigned-char -std=gnu99 CFLAGS += -marm -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard -fomit-frame-pointer -ffast-math -O2 ... ... ifdef BUILD_SDL ifeq ($(findstring DGE, $(SDKPATH)), DGE) LIBS += -lSDL -lSDL_gfx -lts else LIBS += -Wl,-rpath,$(LIBRARIES) -lSDL2 -lSDL2_gfx -lGL endif endif
sdl/opengl.c
// create an OpenGL compatibility context, not a core or ES context #ifndef WIN // except on Windows, where some Nvidia drivers really don't like us doing this //zanac, these attributes don't work well in allwinner (rasbperry too?) //SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY); #endif //zanac, it seems that you should always create a new context without delete the old one, this happen in allwinner (rasbperry too?) //if((context = SDL_GL_GetCurrentContext())) // SDL_GL_DeleteContext(context);
-
@zanac said in OpenBOR finally working fine on RETROPIE with ES:
If you want i can share the libretro_scummv.so core compiled in this way, it work very well i use it and is very great!!!
I would love for you to share the libretro_scummv.so core. Although eventually, learning how to compile is something I want to learn how to do. Thanks
@darknior
Using residualVM from the experimental section I am able to play- Escape from Monkey Island
- Grim Fandango
- Myst 3
The pi takes a big hit running them, but they are playable
ResidualVM itself still has bugs -
@bizzar721 Compiling we do here is provided by scripts. Makefile or CMakeList for example. These scripts tell the compiler the order of source files and on which mashine they build. So it's not really difficult to do... Sometimes programmes give hints which compiler flag do this and that.... also not difficult to implent (a bit more know how needed)
The stuff @zanac and @darknior have done is really advanced. You must understand how the code works and analyse options. For example @darknior patch makes use of function
fileExists
. You may think it's an ususal C-command, no... it's a functions that is nested into/source/utils.c
. (A very common way to do check file availability... but other languages provide a command for this) -
@zanac said in OpenBOR finally working fine on RETROPIE with ES:
If you want i can share the libretro_scummv.so core compiled in this way, it work very well i use it and is very great!!!
Yes thanks a lot, if you can share it, i will try it :)
-
@darknior said in OpenBOR finally working fine on RETROPIE with ES:
@zanac said in OpenBOR finally working fine on RETROPIE with ES:
If you want i can share the libretro_scummv.so core compiled in this way, it work very well i use it and is very great!!!
Yes thanks a lot, if you can share it, i will try it :)
here you are:
https://drive.google.com/open?id=1iuV9BUN4g8-aaf9DAPrmxG0s3dn0RDoRFor use in a game... i try to make an example. For example i have "Full Throttle" adventure, inside the game folder i place a "Full Throttle.scummvm" file, inside it you must just insert the "logical scummvm name", that is in this example "ft"
Here you can find a sort of "database" of scummvm files:
https://github.com/zanac/OpenPB4/blob/master/retroarch/cores/scummvm_libretro/scummvm-games.7zp.s. excuse me for the OT, this is not openbor stuff i know!
-
@zanac Thank you for sharing.
-
@darknior said in OpenBOR finally working fine on RETROPIE with ES:
I must use 3400 for
Asterix & Obelix
Can't confirm it's working fine with latest releases.
md5: 41a9bdf651676f77c50307cf955ae2ad Asterix And Caesars Challenge.pak -
@zanac Thanks a lot, really :D
I think it can be a really good idea to share your work on an other thread to make every one using ScummVM on LR.
It is really excellent !!!Same i wish it will be same in a few time with Daphne for LR too :)
-
Sorry i have not time to follow a thread... anyway it's rather easy, i only tweak Makefile to add cortex/neon optimization on rasbperry, the source code of scummvm libretro work very weel on rpi/allwinner boards! :)
@darknior said in OpenBOR finally working fine on RETROPIE with ES:
@zanac Thanks a lot, really :D
I think it can be a really good idea to share your work on an other thread to make every one using ScummVM on LR.
It is really excellent !!!Same i wish it will be same in a few time with Daphne for LR too :)
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.