mirror of
				https://github.com/thunderbrewhq/thunderbrew
				synced 2025-10-30 15:56:04 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			4.3 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
 | |
| 
 | 
