From 10e186780c2f343c840dd7d97a22cd13be982bf3 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Fri, 16 May 2014 17:45:40 +0200 Subject: [PATCH] jni stuff --- build.gradle | 5 ++++ gradle.properties | 2 +- jni/.cproject | 38 ++++++++++++++++++------ jni/.project | 33 --------------------- jni/BUILD_JNI.txt | 12 ++------ jni/build.gradle | 14 +++++++++ jni/build.xml | 39 ++++++++++++++++++------- jni/gl/utils.c | 43 ++++++++++++++++++++++++++-- jni/{builder => src}/JniBuilder.java | 0 9 files changed, 121 insertions(+), 65 deletions(-) delete mode 100644 jni/.project create mode 100644 jni/build.gradle rename jni/{builder => src}/JniBuilder.java (100%) diff --git a/build.gradle b/build.gradle index 2c535f4f..6a768618 100644 --- a/build.gradle +++ b/build.gradle @@ -38,6 +38,11 @@ subprojects { include '**/*' } + tasks.withType(JavaCompile) { + sourceCompatibility = "1.7" + targetCompatibility = "1.7" + } + eclipseProject.dependsOn copySettings // create emacs JDEE project settings diff --git a/gradle.properties b/gradle.properties index 449ef9ba..77c2f3eb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,4 +18,4 @@ org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=512m # options to speed up compilation once everything else is working: org.gradle.parallel=false -org.gradle.configureondemand=false +org.gradle.configureondemand=true diff --git a/jni/.cproject b/jni/.cproject index 240904ed..7d6e691b 100644 --- a/jni/.cproject +++ b/jni/.cproject @@ -5,26 +5,42 @@ - + - + - + - - + + + + + + + - - + + + + + + + + @@ -35,8 +51,14 @@ + + + + + + + - diff --git a/jni/.project b/jni/.project deleted file mode 100644 index 591bc7f4..00000000 --- a/jni/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - vtm-jni - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/jni/BUILD_JNI.txt b/jni/BUILD_JNI.txt index 84e3fc63..5ae68d68 100644 --- a/jni/BUILD_JNI.txt +++ b/jni/BUILD_JNI.txt @@ -1,18 +1,10 @@ -#!/bin/bash - # Build native libraries: -# - modify jni/builder/JniBuilder.java for your platform. -# - get gdx-jnigen, then run: - -javac -cp ../vtm-ext-libs/gdx/gdx-jnigen.jar jni/builder/JniBuilder.java -java -cp ../vtm-ext-libs/gdx/gdx-jnigen.jar:../vtm-ext-libs/gdx/gdx-jnigen-sources.jar:jni/builder JniBuilder +- modify src/JniBuilder.java for your platform. ## to build android: -export ANDROID_HOME=/home/jeff/android-sdk -export NDK_HOME=/home/jeff/android-ndk-r8d +export NDK_HOME=/path_to_android_sdk ## compile -cd jni ant -v ## copy vtm/libs/armeabi* to vtm-android/libs diff --git a/jni/build.gradle b/jni/build.gradle new file mode 100644 index 00000000..ff131d77 --- /dev/null +++ b/jni/build.gradle @@ -0,0 +1,14 @@ +repositories { + maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } +} + +apply plugin: 'java' + +sourceSets { + main.java.srcDirs = ['src'] + main.resources.srcDirs = ['src'] +} + +dependencies { + compile "com.badlogicgames.gdx:gdx-jnigen:$gdxVersion" +} diff --git a/jni/build.xml b/jni/build.xml index 81c329b9..0869582c 100644 --- a/jni/build.xml +++ b/jni/build.xml @@ -1,17 +1,34 @@ - + - - - + - - - - + - - + - + + + + + + + + + + + + + + + + + + diff --git a/jni/gl/utils.c b/jni/gl/utils.c index ce0bcaf1..ff533779 100644 --- a/jni/gl/utils.c +++ b/jni/gl/utils.c @@ -97,6 +97,9 @@ transposeM(float* mTrans, int mTransOffset, float* m, int mOffset); static inline void matrix4_proj(float* mat, float* vec); +static inline void +matrix4_proj2D(float* mat, float* vec); + jlong JNI(alloc)(JNIEnv *env, jclass* clazz) { return (long) calloc(16, sizeof(float)); @@ -244,12 +247,36 @@ void JNI(strans)(JNIEnv* env, jclass* clazz, jlong ptr_r, jlong ptr_a) transposeM(matr, 0, mata, 0); } -void JNI(prj)(JNIEnv* env, jclass* clazz, jlong ptr, jfloatArray obj_vec) +void JNI(prj)(JNIEnv* env, jclass* clazz, jlong ptr, jfloatArray obj_vec){ + float* m = CAST(ptr); + float* vec = (float*) (*env)->GetPrimitiveArrayCritical(env, obj_vec, 0); + + matrix4_proj(m, vec); + + (*env)->ReleasePrimitiveArrayCritical(env, obj_vec, vec, 0); +} + +void JNI(prj3D)(JNIEnv* env, jclass* clazz, jlong ptr, jfloatArray obj_vec, int offset, int cnt) { float* m = CAST(ptr); float* vec = (float*) (*env)->GetPrimitiveArrayCritical(env, obj_vec, 0); - matrix4_proj(m, vec); + int length = cnt * 3; + for (int i = offset * 3; i < length; i += 3) + matrix4_proj(m, (vec + i)); + + (*env)->ReleasePrimitiveArrayCritical(env, obj_vec, vec, 0); +} + +void JNI(prj2D)(JNIEnv* env, jclass* clazz, jlong ptr, jfloatArray obj_vec, int offset, int cnt) +{ + float* m = CAST(ptr); + float* vec = (float*) (*env)->GetPrimitiveArrayCritical(env, obj_vec, 0); + + int length = cnt * 2; + + for (int i = offset * 2; i < length; i += 2) + matrix4_proj2D(m, (vec + i)); (*env)->ReleasePrimitiveArrayCritical(env, obj_vec, vec, 0); } @@ -490,3 +517,15 @@ matrix4_proj(float* mat, float* vec) vec[1] = y; vec[2] = z; } + +static inline void +matrix4_proj2D(float* mat, float* vec) +{ + + float inv_w = 1.0f / (vec[0] * mat[M30] + vec[1] * mat[M31] + mat[M33]); + float x = (vec[0] * mat[M00] + vec[1] * mat[M01] + mat[M03]) * inv_w; + float y = (vec[0] * mat[M10] + vec[1] * mat[M11] + mat[M13]) * inv_w; + + vec[0] = x; + vec[1] = y; +} diff --git a/jni/builder/JniBuilder.java b/jni/src/JniBuilder.java similarity index 100% rename from jni/builder/JniBuilder.java rename to jni/src/JniBuilder.java