package org.skia.arcore; import android.app.Activity; import android.content.Context; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.opengl.GLUtils; import android.util.Log; import java.io.IOException; /** * JNI interface to native layer. */ public class JniInterface { static { System.loadLibrary("hello_ar_native"); } private static final String TAG = "JniInterface"; static AssetManager assetManager; public static native long createNativeApplication(AssetManager assetManager); public static native void destroyNativeApplication(long nativeApplication); public static native void onPause(long nativeApplication); public static native void onResume(long nativeApplication, Context context, Activity activity); /** * Allocate OpenGL resources for rendering. */ public static native void onGlSurfaceCreated(long nativeApplication); /** * Called on the OpenGL thread before onGlSurfaceDrawFrame when the view port width, height, or * display rotation may have changed. */ public static native void onDisplayGeometryChanged( long nativeApplication, int displayRotation, int width, int height); public static native void onObjectRotationChanged(long nativeApplication, int rotation); public static native void onAction(long nativeApplication, float value); /** * Main render loop, called on the OpenGL thread. */ public static native void onGlSurfaceDrawFrame(long nativeApplication); /** * OnTouch event, called on the OpenGL thread. */ public static native void onTouchTranslate(long nativeApplication, float x, float y); public static native boolean onTouchedFirst(long nativeApplication, float x, float y, int drawMode); public static native void onTouchedFinal(long nativeApplication, int type); /** * Get plane count in current session. Used to disable the "searching for surfaces" snackbar. */ public static native boolean hasDetectedPlanes(long nativeApplication); public static Bitmap loadImage(String imageName) { try { return BitmapFactory.decodeStream(assetManager.open(imageName)); } catch (IOException e) { Log.e(TAG, "Cannot open image " + imageName); return null; } } public static void loadTexture(int target, Bitmap bitmap) { GLUtils.texImage2D(target, 0, bitmap, 0); } }