@@ -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
298332void 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 ;
0 commit comments