Skip to content

Commit ec1dd51

Browse files
committed
load assets.zip only once
- fixed some logging issue when loading assets.zip
1 parent ab5d5da commit ec1dd51

4 files changed

Lines changed: 50 additions & 43 deletions

File tree

glue/include/dengine/dengine.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ typedef struct
7171
int enable_logthread;
7272

7373
int android_handlebackbutton;
74+
Stream assets_zip_stream;
75+
ZipRead assets_zip;
7476
}DengineInitOpts;
7577

7678

glue/src/dengine.c

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -292,11 +292,47 @@ int dengine_init()
292292
if(DENGINE_INIT_OPTS.enable_logthread)
293293
dengineutils_logging_init();
294294

295+
296+
297+
/* load assets.zip */
298+
/*TODO: could we load assets.zip from apk assets? */
299+
#ifndef DENGINE_ANDROID
300+
char buf[2048];
301+
/* hit or miss, i guess they never miss huh :( */
302+
static const char* possible_assetszip_paths[] =
303+
{
304+
"../../../share/dengine-%s/assets.zip",
305+
"../../share/dengine-%s/assets.zip",
306+
"../share/dengine-%s/assets.zip",
307+
"share/dengine-%s/assets.zip",
308+
"assets.zip"
309+
};
310+
for(int i = 0; i < DENGINE_ARY_SZ(possible_assetszip_paths); i++)
311+
{
312+
snprintf(buf, sizeof(buf), possible_assetszip_paths[i], DENGINE_VERSION);
313+
FILE* ok = fopen(buf, "rb");
314+
if(ok != NULL)
315+
{
316+
fclose(ok);
317+
if(dengineutils_stream_new(buf, DENGINEUTILS_STREAM_TYPE_FILE, DENGINEUTILS_STREAM_MODE_READ, &DENGINE_INIT_OPTS.assets_zip_stream) && dengineutils_zipread_load(&DENGINE_INIT_OPTS.assets_zip_stream, &DENGINE_INIT_OPTS.assets_zip))
318+
{
319+
dengineutils_logging_log("TODO::load assets.zip from %s. cd_records: %u, ",
320+
buf, DENGINE_INIT_OPTS.assets_zip.eocdr.cd_records);
321+
;
322+
323+
}
324+
break;
325+
}
326+
}
327+
#endif
328+
295329
return 1;
296330
}
297331

298332
void dengine_terminate()
299333
{
334+
335+
dengineutils_zipread_free(&DENGINE_INIT_OPTS.assets_zip);
300336
denginegui_terminate();
301337
dengineutils_filesys_terminate();
302338

@@ -348,46 +384,18 @@ int dengine_load_asset(const char* path, void** mem, size_t* length)
348384
{
349385
File2Mem f2m;
350386
memset(&f2m, 0, sizeof(f2m));
387+
CDFHR* cdfhr;
388+
char buf[2048];
389+
351390
#ifdef DENGINE_ANDROID
352391
f2m.file = path;
353392
dengineutils_android_asset2file2mem(&f2m);
354-
#else
355-
char buf[2048];
393+
#endif
356394

357-
Stream assets_zip_stream;
358-
ZipRead assets_zip;
359-
CDFHR* cdfhr;
360-
uint32_t cdfhr_sz;
361-
/* hit or miss, i guess they never miss huh :( */
362-
static const char* possiblepaths[] =
363-
{
364-
"../../../share/dengine-%s/assets.zip",
365-
"../../share/dengine-%s/assets.zip",
366-
"../share/dengine-%s/assets.zip",
367-
"share/dengine-%s/assets.zip",
368-
"assets.zip"
369-
};
370-
for(int i = 0; i < DENGINE_ARY_SZ(possiblepaths); i++)
395+
if(f2m.mem == NULL && DENGINE_INIT_OPTS.assets_zip.eocdr.cd_records > 0 && dengineutils_zipread_find_cdfhr(path, &cdfhr, &DENGINE_INIT_OPTS.assets_zip))
371396
{
372-
snprintf(buf, sizeof(buf), possiblepaths[i], DENGINE_VERSION);
373-
FILE* ok = fopen(buf, "rb");
374-
if(ok != NULL)
375-
{
376-
fclose(ok);
377-
if(dengineutils_stream_new(buf, DENGINEUTILS_STREAM_TYPE_FILE, DENGINEUTILS_STREAM_MODE_READ, &assets_zip_stream))
378-
{
379-
dengineutils_zipread_load(&assets_zip_stream, &assets_zip);
380-
if(dengineutils_zipread_find_cdfhr(path, &cdfhr, &assets_zip))
381-
{
382-
dengineutils_zipread_decompress_cdfhr_mem(&assets_zip_stream, cdfhr, &f2m.mem, &cdfhr_sz);
383-
dengineutils_logging_log("TODO::load %s from assets.zip", path);
384-
f2m.size = cdfhr_sz;
385-
}
386-
}
387-
388-
dengineutils_zipread_free(&assets_zip);
389-
break;
390-
}
397+
dengineutils_zipread_decompress_cdfhr_mem(&DENGINE_INIT_OPTS.assets_zip_stream, cdfhr, &f2m.mem, (uint32_t*)&f2m.size);
398+
dengineutils_logging_log("TODO::load %s from assets.zip", path);
391399
}
392400

393401
if(f2m.mem == NULL)
@@ -399,7 +407,6 @@ int dengine_load_asset(const char* path, void** mem, size_t* length)
399407
dengineutils_filesys_file2mem_load(&f2m);
400408

401409
}
402-
#endif
403410
*mem = f2m.mem;
404411
if(length)
405412
*length = f2m.size;

lib/dengine-utils/src/filesys.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,17 +181,14 @@ const char* dengineutils_filesys_get_assetsdir()
181181
/*}*/
182182

183183

184-
char zipped_assets_dir[256];
185-
//../../share/dengine-0.8.1/assets.zip
186-
snprintf(zipped_assets_dir, sizeof(zipped_assets_dir), "../../share/dengine-%s/assets.zip", DENGINE_VERSION);
187184
dengineutils_logging_log("WARNING::Could not find assets directory.\n"
188185
"Try:\n\t"
189-
"-dengine v0.8.1 and later support zipped assets if assets.zip is copied to %s\n\t",
190186
"-moving it next to the executable\n\t"
191187
"-moving it to %s\n\t"
192188
"-setting envvar DENGINEASSETS\n\t"
193-
"-recompiling sources on this machine\n\t",
194-
zipped_assets_dir,
189+
"-recompiling sources on this machine\n\t"
190+
"\n"
191+
"*dengine v0.8.1 and later supports zipped assets if assets.zip is copied to current working directory*\n\t",
195192
dengineutils_filesys_get_filesdir_dengine()
196193
);
197194

lib/dengine-utils/src/zipread.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ int dengineutils_zipread_load(Stream* stream, ZipRead* zipread)
7878

7979
if(!find_eocdr)
8080
{
81-
dengineutils_logging_log("ERROR::EOCDR not found. This is probably not a zip file");
81+
const char* path = stream->path ? stream->path : "This";
82+
dengineutils_logging_log("ERROR::EOCDR not found. %s is probably not a zip file", path);
8283
return 0;
8384
}
8485

0 commit comments

Comments
 (0)