X-Git-Url: http://nitlanguage.org diff --git a/lib/mnit_android/android_assets.nit b/lib/mnit_android/android_assets.nit index 8f61c90..d1ee104 100644 --- a/lib/mnit_android/android_assets.nit +++ b/lib/mnit_android/android_assets.nit @@ -86,7 +86,7 @@ redef class App var a = load_asset_from_apk(path) if a != null then if path.file_extension == "png" then - var png = new Opengles1Image.from_android_asset(a) + var png = new Opengles1Image.from_android_asset(a) a.close return png else if path.file_extension == "txt" then @@ -118,7 +118,7 @@ end redef class Opengles1Image # Read a png from a zipped stream - new from_android_asset(asset: AndroidAsset) is extern `{ + new from_android_asset(asset: AndroidAsset) import Int.next_pow `{ struct mnit_opengles_Texture *recv = NULL; png_structp png_ptr = NULL; @@ -133,13 +133,16 @@ redef class Opengles1Image unsigned char *pixels = NULL; unsigned int i; + png_uint_32 width_pow2, height_pow2; + unsigned int row_bytes_pow2; + unsigned char sig[8]; int sig_read = AAsset_read(asset, sig, 8); if (png_sig_cmp(sig, 0, sig_read)) { LOGW("invalide png signature"); return NULL; } - + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (png_ptr == NULL) { LOGW("png_create_read_struct failed"); @@ -176,11 +179,16 @@ redef class Opengles1Image png_read_update_info(png_ptr, info_ptr); } - LOGW("w: %i, h: %i", width, height); + width_pow2 = Int_next_pow(width, 2); + height_pow2 = Int_next_pow(height, 2); + + LOGW("Loading image of w: %i, h: %i, w2: %d, h2: %d", + width, height, width_pow2, height_pow2); row_bytes = png_get_rowbytes(png_ptr, info_ptr); - pixels = malloc(row_bytes * height); - row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height); + row_bytes_pow2 = row_bytes * width_pow2 / width; + pixels = malloc(row_bytes_pow2 * height_pow2); + row_pointers = (png_bytep*)malloc(sizeof(png_bytep) * height_pow2); for (i=0; i