mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-16 11:06:49 +01:00
0e45984fa0
The internal function SDL_EGL_LoadLibrary() did not delete and remove a mostly uninitialized data structure if loading the library first failed. A later try to use EGL then skipped initialization and assumed it was previously successful because the data structure now already existed. This led to at least one crash in the internal function SDL_EGL_ChooseConfig() because a NULL pointer was dereferenced to make a call to eglBindAPI().
104 lines
4.2 KiB
Markdown
104 lines
4.2 KiB
Markdown
Native Client
|
|
================================================================================
|
|
|
|
Requirements:
|
|
|
|
* Native Client SDK (https://developer.chrome.com/native-client),
|
|
(tested with Pepper version 33 or higher).
|
|
|
|
The SDL backend for Chrome's Native Client has been tested only with the PNaCl
|
|
toolchain, which generates binaries designed to run on ARM and x86_32/64
|
|
platforms. This does not mean it won't work with the other toolchains!
|
|
|
|
================================================================================
|
|
Building SDL for NaCl
|
|
================================================================================
|
|
|
|
Set up the right environment variables (see naclbuild.sh), then configure SDL with:
|
|
|
|
configure --host=pnacl --prefix some/install/destination
|
|
|
|
Then "make".
|
|
|
|
As an example of how to create a deployable app a Makefile project is provided
|
|
in test/nacl/Makefile, which includes some monkey patching of the common.mk file
|
|
provided by NaCl, without which linking properly to SDL won't work (the search
|
|
path can't be modified externally, so the linker won't find SDL's binaries unless
|
|
you dump them into the SDK path, which is inconvenient).
|
|
Also provided in test/nacl is the required support file, such as index.html,
|
|
manifest.json, etc.
|
|
SDL apps for NaCl run on a worker thread using the ppapi_simple infrastructure.
|
|
This allows for blocking calls on all the relevant systems (OpenGL ES, filesystem),
|
|
hiding the asynchronous nature of the browser behind the scenes...which is not the
|
|
same as making it disappear!
|
|
|
|
|
|
================================================================================
|
|
Running tests
|
|
================================================================================
|
|
|
|
Due to the nature of NaCl programs, building and running SDL tests is not as
|
|
straightforward as one would hope. The script naclbuild.sh in build-scripts
|
|
automates the process and should serve as a guide for users of SDL trying to build
|
|
their own applications.
|
|
|
|
Basic usage:
|
|
|
|
./naclbuild.sh path/to/pepper/toolchain (i.e. ~/naclsdk/pepper_35)
|
|
|
|
This will build testgles2.c by default.
|
|
|
|
If you want to build a different test, for example testrendercopyex.c:
|
|
|
|
SOURCES=~/sdl/SDL/test/testrendercopyex.c ./naclbuild.sh ~/naclsdk/pepper_35
|
|
|
|
Once the build finishes, you have to serve the contents with a web server (the
|
|
script will give you instructions on how to do that with Python).
|
|
|
|
================================================================================
|
|
RWops and nacl_io
|
|
================================================================================
|
|
|
|
SDL_RWops work transparently with nacl_io. Two functions control the mount points:
|
|
|
|
int mount(const char* source, const char* target,
|
|
const char* filesystemtype,
|
|
unsigned long mountflags, const void *data);
|
|
int umount(const char *target);
|
|
|
|
For convenience, SDL will by default mount an httpfs tree at / before calling
|
|
the app's main function. Such setting can be overridden by calling:
|
|
|
|
umount("/");
|
|
|
|
And then mounting a different filesystem at /
|
|
|
|
It's important to consider that the asynchronous nature of file operations on a
|
|
browser is hidden from the application, effectively providing the developer with
|
|
a set of blocking file operations just like you get in a regular desktop
|
|
environment, which eases the job of porting to Native Client, but also introduces
|
|
a set of challenges of its own, in particular when big file sizes and slow
|
|
connections are involved.
|
|
|
|
For more information on how nacl_io and mount points work, see:
|
|
|
|
https://developer.chrome.com/native-client/devguide/coding/nacl_io
|
|
https://src.chromium.org/chrome/trunk/src/native_client_sdk/src/libraries/nacl_io/nacl_io.h
|
|
|
|
To be able to save into the directory "/save/" (like backup of game) :
|
|
|
|
mount("", "/save", "html5fs", 0, "type=PERSISTENT");
|
|
|
|
And add to manifest.json :
|
|
|
|
"permissions": [
|
|
"unlimitedStorage"
|
|
]
|
|
|
|
================================================================================
|
|
TODO - Known Issues
|
|
================================================================================
|
|
* Testing of all systems with a real application (something other than SDL's tests)
|
|
* Key events don't seem to work properly
|
|
|