diff options
author | Sven Gothel <[email protected]> | 2014-06-19 23:21:19 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2014-06-19 23:21:19 +0200 |
commit | 40d7d0d18ed11b8dbb0f16137f82eef828b822a4 (patch) | |
tree | 954cb10ac50d0eea506c4b4b9dc5b5bac39d99e0 /make/config/oculusvr | |
parent | 20bf51f2ccbecf1ab21ef3dbd2ff06e04ebd40cc (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.cfg | 34 | ||||
-rw-r--r-- | make/config/oculusvr/oculusvr-ovr-CustomJavaCode.java | 22 | ||||
-rw-r--r-- | make/config/oculusvr/oculusvr.c | 1 | ||||
-rw-r--r-- | make/config/oculusvr/oculusvr.cfg | 16 |
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> + |