Switch to WebGL2, add missing file packager patch

master
paradust7 2022-04-24 09:49:41 +00:00
parent 94e47b8b28
commit c967aba3a1
6 changed files with 52 additions and 3 deletions

View File

@ -14,8 +14,7 @@ Pre-requisites
--------------
The Emscripten SDK (emsdk) must be installed, activated, and in the PATH.
It is assumed to be installed in $HOME/emsdk (edit `common.sh` to change this).
Apply the patch `emcc.patch` to the emsdk directory. This is needed for configure to work with pthreads.
The emsdk directory must be patched by running `./apply_patches.sh` exactly once.
Building
---------

9
apply_patches.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash -eu
source common.sh
cd "$EMSDK_ROOT"
patch -p1 < "$BASE_DIR/emsdk_emcc.patch"
patch -p1 < "$BASE_DIR/emsdk_file_packager.patch"
patch -p1 < "$BASE_DIR/emsdk_fix_webgl.patch"

View File

@ -14,7 +14,7 @@ pushd minetest
export EMSDK_EXTRA="-sUSE_SDL=2"
export CFLAGS="$CFLAGS $EMSDK_EXTRA"
export CXXFLAGS="$CXXFLAGS $EMSDK_EXTRA"
export LDFLAGS="$LDFLAGS $EMSDK_EXTRA -sPTHREAD_POOL_SIZE=20 -s EXPORTED_RUNTIME_METHODS=ccall,cwrap -s INITIAL_MEMORY=2013265920"
export LDFLAGS="$LDFLAGS $EMSDK_EXTRA -sPTHREAD_POOL_SIZE=20 -s EXPORTED_RUNTIME_METHODS=ccall,cwrap -s INITIAL_MEMORY=2013265920 -sMIN_WEBGL_VERSION=2 -sUSE_WEBGL2"
export LDFLAGS="$LDFLAGS -L$INSTALL_DIR/lib -lssl -lcrypto -lemsocket -lwebsocket.js"
# Used by CMakeFiles.txt in the webport

16
emsdk_file_packager.patch Normal file
View File

@ -0,0 +1,16 @@
--- emsdk1/upstream/emscripten/tools/file_packager.py 2022-03-24 19:45:39.000000000 +0000
+++ emsdk2/upstream/emscripten/tools/file_packager.py 2022-03-22 10:13:11.332849695 +0000
@@ -686,8 +686,12 @@
use_data = '''// Reuse the bytearray from the XHR as the source for file reads.
DataRequest.prototype.byteArray = byteArray;
var files = metadata['files'];
+ function make_callback(i) {
+ var req = DataRequest.prototype.requests[files[i].filename];
+ return () => {req.onload()};
+ }
for (var i = 0; i < files.length; ++i) {
- DataRequest.prototype.requests[files[i].filename].onload();
+ setTimeout(make_callback(i));
}'''
use_data += (" Module['removeRunDependency']('datafile_%s');\n"
% js_manipulation.escape_for_js_string(data_target))

25
emsdk_fix_webgl.patch Normal file
View File

@ -0,0 +1,25 @@
diff -urN emsdk/upstream/emscripten/src/library_webgl.js emsdk-fixed/upstream/emscripten/src/library_webgl.js
--- emsdk/upstream/emscripten/src/library_webgl.js 2022-03-24 19:45:37.000000000 +0000
+++ emsdk-fixed/upstream/emscripten/src/library_webgl.js 2022-04-24 08:18:17.235609809 +0000
@@ -1782,7 +1782,9 @@
#if MAX_WEBGL_VERSION >= 2
if ({{{ isCurrentContextWebGL2() }}}) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
if (data) {
- GLctx.bufferData(target, HEAPU8, usage, data, size);
+ if (size > 0) {
+ GLctx.bufferData(target, HEAPU8, usage, data, size);
+ }
} else {
GLctx.bufferData(target, size, usage);
}
@@ -1800,7 +1802,9 @@
glBufferSubData: function(target, offset, size, data) {
#if MAX_WEBGL_VERSION >= 2
if ({{{ isCurrentContextWebGL2() }}}) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
- GLctx.bufferSubData(target, offset, HEAPU8, data, size);
+ if (size > 0) {
+ GLctx.bufferSubData(target, offset, HEAPU8, data, size);
+ }
return;
}
#endif