X-Git-Url: http://nitlanguage.org diff --git a/lib/mnit_android/android_assets.nit b/lib/mnit_android/android_assets.nit index 27911f3..8f61c90 100644 --- a/lib/mnit_android/android_assets.nit +++ b/lib/mnit_android/android_assets.nit @@ -21,7 +21,7 @@ # * The Android ndk # * zlib (which is included in the Android ndk) # * libpng which must be provided by the Nit compilation framework -module android_assets +module android_assets is ldflags "-lz" import mnit import android_app @@ -32,8 +32,6 @@ in "C header" `{ `} in "C" `{ - extern struct android_app *mnit_java_app; - void mnit_android_png_read_data(png_structp png_ptr, png_bytep data, png_size_t length) { @@ -52,9 +50,9 @@ in "C" `{ } `} -extern AndroidAsset in "C" `{struct AAsset*`} +extern class AndroidAsset in "C" `{struct AAsset*`} - fun read(count: Int): nullable String is extern import String as nullable, NativeString.to_s `{ + fun read(count: Int): nullable String is extern import String.as nullable, NativeString.to_s `{ char *buffer = malloc(sizeof(char) * (count+1)); int read = AAsset_read(recv, buffer, count); if (read != count) @@ -103,8 +101,9 @@ redef class App return null end - protected fun load_asset_from_apk(path: String): nullable AndroidAsset is extern import String.to_cstring, AndroidAsset as nullable `{ - struct AAsset* a = AAssetManager_open(mnit_java_app->activity->assetManager, String_to_cstring(path), AASSET_MODE_BUFFER); + protected fun load_asset_from_apk(path: String): nullable AndroidAsset is extern import String.to_cstring, AndroidAsset.as nullable, native_app_glue `{ + struct android_app *native_app_glue = App_native_app_glue(recv); + struct AAsset* a = AAssetManager_open(native_app_glue->activity->assetManager, String_to_cstring(path), AASSET_MODE_BUFFER); if (a == NULL) { LOGW("nit d g a"); @@ -130,8 +129,8 @@ redef class Opengles1Image int has_alpha; unsigned int row_bytes; - png_bytepp row_pointers; - unsigned char *pixels; + png_bytepp row_pointers = NULL; + unsigned char *pixels = NULL; unsigned int i; unsigned char sig[8]; @@ -167,23 +166,24 @@ redef class Opengles1Image png_get_IHDR( png_ptr, info_ptr, &width, &height, &depth, &color_type, NULL, NULL, NULL); - if (color_type == PNG_COLOR_TYPE_RGBA) - has_alpha = 1; - else if (color_type == PNG_COLOR_TYPE_RGB) - has_alpha = 0; - else { - LOGW("unknown color_type"); - goto close_png_ptr; + has_alpha = color_type & PNG_COLOR_MASK_ALPHA; + + // If we get gray and alpha only, standardize the format of the pixels. + // GA is not supported by OpenGL ES 1. + if (!(color_type & PNG_COLOR_MASK_COLOR)) { + png_set_gray_to_rgb(png_ptr); + png_set_palette_to_rgb(png_ptr); + png_read_update_info(png_ptr, info_ptr); } LOGW("w: %i, h: %i", width, height); row_bytes = png_get_rowbytes(png_ptr, info_ptr); pixels = malloc(row_bytes * height); - row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height); + row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height); - for (i=0; i