Use file mapping
This commit is contained in:
parent
80df1ee771
commit
fd6375e17d
8 changed files with 58 additions and 32 deletions
|
@ -263,7 +263,7 @@ struct ALStreamOpenHandler : FileSystem::OpenHandler
|
|||
void ALStream::openSource(const std::string &filename)
|
||||
{
|
||||
#ifdef __EMSCRIPTEN__
|
||||
load_file_async(filename.c_str());
|
||||
load_file_async_js(filename.c_str());
|
||||
#endif
|
||||
|
||||
ALStreamOpenHandler handler(srcOps, looped);
|
||||
|
|
|
@ -248,7 +248,6 @@ struct BitmapOpenHandler : FileSystem::OpenHandler
|
|||
bool tryRead(SDL_RWops &ops, const char *ext, const char * fullPath)
|
||||
{
|
||||
#ifdef __EMSCRIPTEN__
|
||||
load_file_async_js(fullPath);
|
||||
surf = IMG_Load(fullPath);
|
||||
#else
|
||||
surf = IMG_LoadTyped_RW(&ops, 1, ext);
|
||||
|
@ -259,6 +258,10 @@ struct BitmapOpenHandler : FileSystem::OpenHandler
|
|||
|
||||
Bitmap::Bitmap(const char *filename)
|
||||
{
|
||||
#ifdef __EMSCRIPTEN__
|
||||
load_file_async_js(filename);
|
||||
#endif
|
||||
|
||||
BitmapOpenHandler handler;
|
||||
shState->fileSystem().openRead(handler, filename);
|
||||
SDL_Surface *imgSurf = handler.surf;
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
#include "emscripten.hpp"
|
||||
#include "filesystem.h"
|
||||
#include "sharedstate.h"
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
|
||||
|
@ -18,15 +16,22 @@ EM_JS(void, load_file_async_js, (const char* fullPathC), {
|
|||
// Show spinner
|
||||
if (window.setBusy) window.setBusy();
|
||||
|
||||
// Get full destination
|
||||
const file = "game/" + fullPath;
|
||||
// Get mapping key
|
||||
const mappingKey = fullPath.toLowerCase().replace(new RegExp("\\\\.[^/.]+$"), "");
|
||||
const mappingValue = mapping[mappingKey];
|
||||
|
||||
// Get path and filename
|
||||
const path = "/" + file.substring(0, file.lastIndexOf("/"));
|
||||
const filename = file.substring(file.lastIndexOf("/") + 1);
|
||||
// Check if this is a folder
|
||||
if (!mappingValue || mappingValue.endsWith("h=")) {
|
||||
console.error("Skipping loading", fullPath, mappingValue);
|
||||
return wakeUp();
|
||||
}
|
||||
|
||||
// Get target URL
|
||||
const iurl = "gameasync/" + fullPath;
|
||||
const iurl = "gameasync/" + mappingValue;
|
||||
|
||||
// Get path and filename
|
||||
const path = "/game/" + mappingValue.substring(0, mappingValue.lastIndexOf("/"));
|
||||
const filename = mappingValue.substring(mappingValue.lastIndexOf("/") + 1).split("?")[0];
|
||||
|
||||
// Delete original file if existent
|
||||
try {
|
||||
|
@ -43,23 +48,6 @@ EM_JS(void, load_file_async_js, (const char* fullPathC), {
|
|||
});
|
||||
});
|
||||
|
||||
struct LoadOpenHandler : FileSystem::OpenHandler
|
||||
{
|
||||
LoadOpenHandler()
|
||||
{}
|
||||
|
||||
bool tryRead(SDL_RWops &ops, const char *ext, const char *fullPath)
|
||||
{
|
||||
load_file_async_js(fullPath);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
void load_file_async(const char * filename) {
|
||||
LoadOpenHandler handler;
|
||||
shState->fileSystem().openRead(handler, filename);
|
||||
}
|
||||
|
||||
EM_JS(void, save_file_async_js, (const char* fullPathC), {
|
||||
if (window.saveFile) window.saveFile(UTF8ToString(fullPathC));
|
||||
});
|
||||
|
|
|
@ -7,8 +7,6 @@
|
|||
extern "C" {
|
||||
void load_file_async_js(const char* fullPathC);
|
||||
|
||||
void load_file_async(const char* filename);
|
||||
|
||||
void save_file_async_js(const char* fullPathC);
|
||||
}
|
||||
|
||||
|
|
|
@ -250,7 +250,7 @@ SoundBuffer *SoundEmitter::allocateBuffer(const std::string &filename)
|
|||
{
|
||||
/* Buffer not in cache, needs to be loaded */
|
||||
#ifdef __EMSCRIPTEN__
|
||||
load_file_async(filename.c_str());
|
||||
load_file_async_js(filename.c_str());
|
||||
#endif
|
||||
|
||||
SoundOpenHandler handler;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue