I have been trying to get World of Goo running, partly as a learning experience. I have the Linux 1.4.1 x86/x64 version (kudos to 2D Boy that the download link from my purchase 16 years ago stilll works!). It seems similar to the version the port expects, but not the same. I hacked the port about a bit (changing paths etc) and it runs fine in box64 on aarch64 linux on my Mac (except for some mouse weirdness, which I haven't tried to solve). On my Anbernic RG35XX/knulli device, it runs fine if I disable OpenGL (DISABLE_GL4ES=true ./World\ of\ Goo.sh) , but the logs show OpenGL shutting down after launch. If I enable OpenGL (./World\ of\ Goo.sh) then OpenGL appears to stay running, but the game crashes on the first call to SDL_CreateWindow.
#World of Goo
43 messages ยท Page 1 of 1 (latest)
The attached uses the versions of SDL compat from the pingu port, libGLU from the abuse port and gl4es from Stardew Valley. I've used various other versions of the libs from ubuntu aarch64, either from .debs or built myself, with similar results.
The crash happens when SDL compat calls VideoWindow20 = SDL20_CreateWindow(WindowTitle, x, y, scaled_width, scaled_height, flags20); (in SDL12_compat.c). It's the same if I call VideoWindow20 = SDL20_CreateWindow("test", 0,0,640,480,0) instead. In both cases, there's no crash if I disable gl4es.
With BOX86_DEBUG=2 the crash looks like this ```6583|0x526478: Calling SDL_SetVideoMode(0x280, 0x1E0, 0x0, ...) =>6583|SIGSEGV @0x7f86b21c04 (???(/usr/lib/libSDL2-2.0.so.0+0xdac04)) (x64pc=0x50273/???:"???", rsp=0x1007ff438, stack=0x100000000:0x100800000 own=(nil) fp=0xa0000002), for accessing 0xa8 (code=1/prot=0), db=(nil)((nil):(nil)/(nil):(nil)/???:clean, hash:0/0) handler=(nil)
RSP-0x20:0x000000000000000b RSP-0x18:0x00000001007ff648 RSP-0x10:0x000000004bb12c40 RSP-0x08:0x000000000000008c
RSP+0x00:0x0000000000526478 RSP+0x08:0x000000004bc59f70 RSP+0x10:0x0000000000769bd0 RSP+0x18:0x00000280007ff648
RAX:0x0000000020000002 RCX:0x00000000a0000002 RDX:0x0000000000000000 RBX:0x000000004bc5a000
RSP:0x00000001007ff438 RBP:0x00000000a0000002 RSI:0x00000000000001e0 RDI:0x0000000000000280
R8:0x0000000000000000 R9:0x000000000000000b R10:0x000000000000000b R11:0x000000004bc5a2a8
R12:0x0000007f86bc0008 R13:0x0000000000000000 R14:0x0000000000000000 R15:0x00000000000001e0
ES:0x002b CS:0x0033 SS:0x002b DS:0x002b FS:0x0043 GS:0x0053
./World of Goo.sh: line 111: 6583 Segmentation fault $GAMEDIR/box64/box64 ./WorldOfGoo.bin
So yeah you can't simply take gl4es from other ports since some have specifics hacks in them
especially stardew valley
take the one from world of go
Before adding any library at all
always try to start wihout them to see what box complains about
Also a thing that is the reason why we only have a handful of games is that some gameswant to open a x-server
only rocknix and (not sure maybe knulli) has
So everyone other cfw will complain about not being able to open a window
So what is different from your version vs the one in my world of goo port?
You're also really a rather old .sh, look at Guacamelee as I said
If I run your port with my gamedata, there is a fixable path issue (config file is in a different place), then it complains about missing libSDL_mixer (fixed by adding the relevant dir within gamedata to LD_LIBRARY_PATH to point it to the x86_64 libs), and then it is missing libGLU
feel free to post the full log
(190k lines grepped out that look like 11061|0x7532fd: Calling wctob(0x0, 0x1, 0xA5F740, ...) => return 0x0
It now works, some of the time. If I use a modified version of Guacamelee.sh and run it a few times in a row, usually I'll get the LIBGL: Shutting down message, but sometimes I don't. In both cases, the game runs, but I can't tell if gl4es is actually being used or not
don't use all the exports from guacamelee these were specially for guac
ike the libgl shrink
almost all desktop games use opengl
๐
yeah, i'm not using this
So maybe the "LIBGL shutting down" message is incorrect? The game seems to run at the same speed regardless of whether I get that message, so maybe opengl is working
yeah depends in what context ^^
Running in UINPUT output mode.
LIBGL: Initialising gl4es
LIBGL: v1.1.5 built on Nov 12 2023 20:33:38
LIBGL: using framebuffer + fbo
LIBGL: Using GLES 2.0 backend
LIBGL: loaded: libGLESv2.so
LIBGL: loaded: libEGL.so
LIBGL: Using GLES 2.0 backend
LIBGL: Hardware Full NPOT detected and used
LIBGL: Extension GL_EXT_blend_minmax detected and used
LIBGL: FBO are in core, and so used
LIBGL: PointSprite are in core, and so used
LIBGL: CubeMap are in core, and so used
LIBGL: BlendColor is in core, and so used
LIBGL: Blend Subtract is in core, and so used
LIBGL: Blend Function and Equation Separation is in core, and so used
LIBGL: Texture Mirrored Repeat is in core, and so used
LIBGL: Extension GL_OES_mapbuffer detected
LIBGL: Extension GL_OES_element_index_uint detected and used
LIBGL: Extension GL_OES_packed_depth_stencil detected and used
LIBGL: Extension GL_OES_depth24 detected and used
LIBGL: Extension GL_OES_rgb8_rgba8 detected and used
LIBGL: Extension GL_EXT_texture_format_BGRA8888 detected and used
LIBGL: Extension GL_OES_depth_texture detected and used
LIBGL: Extension GL_OES_texture_stencil8 detected and used
LIBGL: Extension GL_EXT_texture_rg detected and used
LIBGL: Extension GL_EXT_color_buffer_float detected and used
LIBGL: Extension GL_EXT_color_buffer_half_float detected and used
LIBGL: high precision float in fragment shader available and used
LIBGL: Max vertex attrib: 16
LIBGL: Extension GL_OES_standard_derivatives detected and used
LIBGL: Extension GL_ARM_shader_framebuffer_fetch detected and used
LIBGL: Extension GL_OES_get_program_binary detected and used
LIBGL: Number of supported Program Binary Format: 1
LIBGL: Max texture size: 8192
LIBGL: Max Varying Vector: 15
LIBGL: Texture Units: 16/16 (hardware: 16), Max lights: 8, Max planes: 6
LIBGL: Max Color Attachments: 1 / Draw buffers: 1
LIBGL: Hardware vendor is ARM
LIBGL: sRGB surface supported
LIBGL: EGLImage to Texture2D supported
LIBGL: EGLImage to RenderBuffer supported
LIBGL: Targeting OpenGL 2.1
LIBGL: Not trying to batch small subsequent glDrawXXXX
LIBGL: try to use VBO
LIBGL: glXMakeCurrent FBO workaround enabled
LIBGL: FBO workaround for using binded texture enabled
LIBGL: Force texture for Attachment color0 on FBO
LIBGL: Hack to trigger a SwapBuffers when a Full Framebuffer Blit on default FBO is done
LIBGL: Current folder is:/userdata/roms/ports/worldofgoo/gamedata
LIBGL: Loaded a PSA with 10 Precompiled Programs```
this tells you its using it
see the detected and used messages
else it would have no log for all that
but the "shutdown" comes afterwards
i might have to come to terms with the idea that i am trying to fix a problem that doesn't exist ๐
a LOT of red herings ๐
errors that are no errors and warning that indicate problems you didn't see at all
ok, so now i'm going to tidy it up. in general, if they work, i should prefer the native arm64 libraries over the x86 ones, right?
i imagine they are faster
yes always native if possible
ok, thanks for your help!!
now good luck finding a game that also works ๐
I try like 10 games and 1 works
๐
FWIW I also played around with the more recent version from the 2D Boy website. Your port works fine for that version with the following modifications:
- Add a clean libEGL.so.1 to gl4es.aarch64/