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 @@ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.1587393048" moduleId="org.eclipse.cdt.core.settings" name="Default"> <externalSettings/> <extensions> - <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/> <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> + <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> </extensions> </storageModule> <storageModule moduleId="cdtBuildSystem" version="4.0.0"> - <configuration buildProperties="" id="cdt.managedbuild.toolchain.gnu.base.1587393048" name="Default" parent="org.eclipse.cdt.build.core.emptycfg"> + <configuration buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.1587393048" name="Default" parent="org.eclipse.cdt.build.core.emptycfg"> <folderInfo id="cdt.managedbuild.toolchain.gnu.base.1587393048.116574534" name="/" resourcePath=""> <toolChain id="cdt.managedbuild.toolchain.gnu.base.223412825" name="cdt.managedbuild.toolchain.gnu.base" superClass="cdt.managedbuild.toolchain.gnu.base"> <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.385578518" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/> - <builder id="cdt.managedbuild.target.gnu.builder.base.156937647" managedBuildOn="false" name="Gnu Make Builder.Default" superClass="cdt.managedbuild.target.gnu.builder.base"/> + <builder id="cdt.managedbuild.target.gnu.builder.base.156937647" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.base"/> <tool id="cdt.managedbuild.tool.gnu.archiver.base.1823835369" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/> - <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.360207042" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base"/> - <tool id="cdt.managedbuild.tool.gnu.c.compiler.base.1095290162" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base"/> + <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.360207042" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base"> + <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.111801070" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> + </tool> + <tool id="cdt.managedbuild.tool.gnu.c.compiler.base.1095290162" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base"> + <option id="gnu.c.compiler.option.include.paths.542022155" superClass="gnu.c.compiler.option.include.paths" valueType="includePath"> + <listOptionValue builtIn="false" value="/usr/lib/jvm/java-7-openjdk-amd64/include"/> + <listOptionValue builtIn="false" value="/usr/lib/jvm/java-7-openjdk-amd64/include/linux"/> + </option> + <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.506992692" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> + </tool> <tool id="cdt.managedbuild.tool.gnu.c.linker.base.335083411" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/> - <tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1727739418" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/> - <tool id="cdt.managedbuild.tool.gnu.assembler.base.2019534622" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base"/> + <tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1727739418" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"> + <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1457207088" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> + <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> + <additionalInput kind="additionalinput" paths="$(LIBS)"/> + </inputType> + </tool> + <tool id="cdt.managedbuild.tool.gnu.assembler.base.2019534622" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base"> + <option id="gnu.both.asm.option.include.paths.66240236" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath"/> + <inputType id="cdt.managedbuild.tool.gnu.assembler.input.622641223" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> + </tool> </toolChain> </folderInfo> </configuration> @@ -35,8 +51,14 @@ <storageModule moduleId="cdtBuildSystem" version="4.0.0"> <project id="vtm-jni.null.1777174385" name="vtm-jni"/> </storageModule> + <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/> <storageModule moduleId="scannerConfiguration"> <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> + <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.base.1587393048;cdt.managedbuild.toolchain.gnu.base.1587393048.116574534;cdt.managedbuild.tool.gnu.c.compiler.base.1095290162;cdt.managedbuild.tool.gnu.c.compiler.input.506992692"> + <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> + </scannerConfigBuildInfo> + <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.base.1587393048;cdt.managedbuild.toolchain.gnu.base.1587393048.116574534;cdt.managedbuild.tool.gnu.cpp.compiler.base.360207042;cdt.managedbuild.tool.gnu.cpp.compiler.input.111801070"> + <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> + </scannerConfigBuildInfo> </storageModule> - <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/> </cproject> diff --git a/jni/.project b/jni/.project deleted file mode 100644 index 591bc7f4..00000000 --- a/jni/.project +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>vtm-jni</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name> - <triggers>clean,full,incremental,</triggers> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name> - <triggers>full,incremental,</triggers> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.eclipse.cdt.core.cnature</nature> - <nature>org.eclipse.cdt.core.ccnature</nature> - <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature> - <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature> - </natures> -</projectDescription> 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 @@ <project name="vtm-jni-natives" basedir="." default="all"> - <target name="clean"> + <target name="clean"> - </target> - - <target name="compile-natives"> + </target> - </target> - - <target name="pack-natives"> - <jar destfile="../libs/vtm-jni-natives.jar"> + <target name="compile-natives"> - </jar> - </target> + </target> - <target name="all" depends="compile-natives,pack-natives"/> + <target name="pack-natives"> + <jar destfile="../libs/vtm-jni-natives.jar"> + <manifest> + <!-- Who is building this jar? --> + <attribute name="Built-By" value="${user.name}" /> + <!-- Information about the program itself --> + <attribute name="Implementation-Vendor" value="VTM" /> + <attribute name="Implementation-Title" value="VTM" /> + <attribute name="Implementation-Version" value="0.5.9" /> + </manifest> + + <fileset dir="../libs/linux64" includes="libvtm-jni64.so" /> + <!-- + <fileset dir="../libs/macosx32" includes="libvtm-jni.dylib"/> + <fileset dir="../libs/macosx64" includes="libvtm-jni64.dylib"/> + <fileset dir="../libs/windows32" includes="gdx.dll"/> + <fileset dir="../libs/windows64" includes="gdx64.dll"/> + <fileset dir="../libs/linux32" includes="libvtm-jni.so"/> + --> + + </jar> + </target> + + <target name="all" depends="compile-natives,pack-natives" /> </project> 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