aboutsummaryrefslogtreecommitdiffstats
path: root/make/config/oculusvr
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2014-06-19 23:21:19 +0200
committerSven Gothel <[email protected]>2014-06-19 23:21:19 +0200
commit40d7d0d18ed11b8dbb0f16137f82eef828b822a4 (patch)
tree954cb10ac50d0eea506c4b4b9dc5b5bac39d99e0 /make/config/oculusvr
parent20bf51f2ccbecf1ab21ef3dbd2ff06e04ebd40cc (diff)
Bug 1021: Add OculusSDK binding / Basic OVR support
Bring-up test only initializes the ovrHmdHandle data structure by OVR native code. See com.jogamp.oculusvr.OVRVersion Current evaluation build compiles all OVR-SDK source files itself w/o using provided libovr.a. We also skip the GL dependent renderer of the SDK, i.e. we prefer to utilize our JOGL 'barrel distortion' renderer. This eases the 'chicken-egg' problem of OVR SDK dependencies, i.e. libGL, libGLESv2 .. etc Since the OVR source code is C++, we may still have to figure out how to / and whether we shall link libstdc++ statically to remove platform dependencies. Right now we link libstdc++ statically if using GCC, see make/build-oculusvr.xml (hackish .. TODO: better way to include all symbols). Same consideration applies to GNU/Linux and libudev.so dependency, since there are: - libudev.so.0 and (Older distri's) - libudev.so.1 (Debian8, ..) ... Produced JAR artifacts are - jar/atomic/oculusvr.jar - jar/atomic/oculusvr-natives-<os.and.arch>.jar i.e. only in 'atomic' variants to not bloat the default 'all' JAR files. .... make/build-oculusvr.xml Notes: - Currently native build only enabled on GNU/Linux (isLinux) - Force disable native build via property 'c.build.oculusvr.skip'
Diffstat (limited to 'make/config/oculusvr')
-rw-r--r--make/config/oculusvr/oculusvr-common.cfg34
-rw-r--r--make/config/oculusvr/oculusvr-ovr-CustomJavaCode.java22
-rw-r--r--make/config/oculusvr/oculusvr.c1
-rw-r--r--make/config/oculusvr/oculusvr.cfg16
4 files changed, 73 insertions, 0 deletions
diff --git a/make/config/oculusvr/oculusvr-common.cfg b/make/config/oculusvr/oculusvr-common.cfg
new file mode 100644
index 000000000..4baa35f0b
--- /dev/null
+++ b/make/config/oculusvr/oculusvr-common.cfg
@@ -0,0 +1,34 @@
+Package com.jogamp.oculusvr
+
+# Specify output directories
+HierarchicalNativeOutput false
+JavaOutputDir gensrc/classes
+NativeOutputDir gensrc/native/oculusvr
+
+# Raise OVRException instead of RuntimeException in glue code
+RuntimeExceptionType OVRException
+
+# We also have to hack its return type for now because we can't make
+# just that void* opaque
+Opaque long ovrHmd
+
+#ReturnValueCapacity alcOpenDevice 0
+
+# Mappings for data types
+Opaque boolean ovrBool
+
+# Not implemented in SDK !?
+Ignore ovrHmd_ProcessLatencyTest
+
+# These routines use or return strings
+ReturnsString ovrHmd_GetLastError
+ReturnsString ovrHmd_GetLatencyTestResult
+ReturnsString ovrHmd_GetString
+
+ArgumentIsString ovrHmd_GetFloat 1
+ArgumentIsString ovrHmd_SetFloat 1
+ArgumentIsString ovrHmd_GetFloatArray 1
+ArgumentIsString ovrHmd_SetFloatArray 1
+ArgumentIsString ovrHmd_GetArraySize 1
+
+
diff --git a/make/config/oculusvr/oculusvr-ovr-CustomJavaCode.java b/make/config/oculusvr/oculusvr-ovr-CustomJavaCode.java
new file mode 100644
index 000000000..06f7b3234
--- /dev/null
+++ b/make/config/oculusvr/oculusvr-ovr-CustomJavaCode.java
@@ -0,0 +1,22 @@
+
+static {
+ AccessController.doPrivileged(new PrivilegedAction<DynamicLibraryBundle>() {
+ public DynamicLibraryBundle run() {
+ final DynamicLibraryBundle bundle = new DynamicLibraryBundle(new OVRDynamicLibraryBundleInfo());
+ if(null==bundle) {
+ throw new RuntimeException("Null DynamicLibraryBundle");
+ }
+ /** No native tool library to load
+ if(!bundle.isToolLibLoaded()) {
+ throw new RuntimeException("Couln't load native OVR library");
+ } */
+ if(!bundle.isLibComplete()) {
+ throw new RuntimeException("Couln't load native OVR/JNI glue library");
+ }
+ if( !initializeImpl() ) {
+ throw new RuntimeException("Initialization failure");
+ }
+ return bundle;
+ } } );
+}
+
diff --git a/make/config/oculusvr/oculusvr.c b/make/config/oculusvr/oculusvr.c
new file mode 100644
index 000000000..6d850a380
--- /dev/null
+++ b/make/config/oculusvr/oculusvr.c
@@ -0,0 +1 @@
+#include "OVR_CAPI.h"
diff --git a/make/config/oculusvr/oculusvr.cfg b/make/config/oculusvr/oculusvr.cfg
new file mode 100644
index 000000000..aa439772b
--- /dev/null
+++ b/make/config/oculusvr/oculusvr.cfg
@@ -0,0 +1,16 @@
+# This .cfg file is used to generate the JOAL interface.
+Include oculusvr-common.cfg
+
+Style AllStatic
+JavaClass OVR
+
+Import com.jogamp.oculusvr.*
+Import java.security.AccessController
+Import java.security.PrivilegedAction
+
+IncludeAs CustomJavaCode OVR oculusvr-ovr-CustomJavaCode.java
+ManualStaticInitCall OVR
+
+# Provide #includes to native code
+CustomCCode #include <OVR_CAPI.h>
+