diff options
Diffstat (limited to 'make')
-rw-r--r-- | make/build.xml | 5 | ||||
-rw-r--r-- | make/gl-common.cfg | 7 | ||||
-rw-r--r-- | make/gl-impl-CustomCCode.c | 15 | ||||
-rw-r--r-- | make/gl-impl-CustomJavaCode.java | 16 | ||||
-rw-r--r-- | make/gl-impl-macosx.cfg | 3 | ||||
-rw-r--r-- | make/gl-impl-win32.cfg | 3 | ||||
-rw-r--r-- | make/gl-impl-x11.cfg | 3 |
7 files changed, 48 insertions, 4 deletions
diff --git a/make/build.xml b/make/build.xml index 7875f57cc..e3ce6476f 100644 --- a/make/build.xml +++ b/make/build.xml @@ -159,6 +159,8 @@ <include name="${stub.includes.dir}/win32/**" /> <include name="${stub.includes.dir}/x11/**" /> <include name="*.cfg" /> + <include name="*.java" /> + <include name="*.c" /> <exclude name="cg-common.cfg" /> </fileset> <dirset id="stub.includes.cg.fileset.all" dir="."> @@ -475,6 +477,9 @@ (the uptodate task doesn't allow arbitrary source and target filesets but should) --> <dependset> <srcfileset refid="stub.includes.dependencies.fileset" /> + <srcfileset dir="."> + <include name="${classes}/net/java/games/gluegen/**/*.class" /> + </srcfileset> <targetfileset dir="."> <include name="${src.generated.java}/**/*.java" /> <include name="${src.generated.c}/**/*.c" /> diff --git a/make/gl-common.cfg b/make/gl-common.cfg index 32664d7a0..9f2acf1c2 100644 --- a/make/gl-common.cfg +++ b/make/gl-common.cfg @@ -49,10 +49,9 @@ Ignore glGetVertexAttribPointervARB Ignore glGetVertexAttribPointervNV Ignore glTracePointerRangeMESA -# FIXME: Temporarily ignore glMapBufferARB as it returns a void* that -# we don't know the size of, and it's so new that there's no -# documentation on its semantics -Ignore glMapBufferARB +# Manually implement glMapBufferARB as the size of the returned buffer +# can only be computed by calling another routine +ManuallyImplement glMapBufferARB # Ignore GL functions that have void** parameters; we cannot yet deal with them Ignore glMultiDrawElements diff --git a/make/gl-impl-CustomCCode.c b/make/gl-impl-CustomCCode.c new file mode 100644 index 000000000..1616353d9 --- /dev/null +++ b/make/gl-impl-CustomCCode.c @@ -0,0 +1,15 @@ +/* Java->C glue code: + * Java package: net.java.games.jogl.impl.windows.WindowsGLImpl + * Java method: java.nio.ByteBuffer dispatch_glMapBufferARB(int target, int access) + * C function: LPVOID glMapBufferARB(GLenum target, GLenum access); + */ +JNIEXPORT jobject JNICALL +Java_net_java_games_jogl_impl_windows_WindowsGLImpl_dispatch_1glMapBufferARB(JNIEnv *env, jobject _unused, jint target, jint access, jint size, jlong glProcAddress) { + PFNGLMAPBUFFERARBPROC ptr_glMapBufferARB; + LPVOID _res; + ptr_glMapBufferARB = (PFNGLMAPBUFFERARBPROC) (intptr_t) glProcAddress; + assert(ptr_glMapBufferARB != NULL); + _res = (* ptr_glMapBufferARB) ((GLenum) target, (GLenum) access); + if (_res == NULL) return NULL; + return (*env)->NewDirectByteBuffer(env, _res, size); +} diff --git a/make/gl-impl-CustomJavaCode.java b/make/gl-impl-CustomJavaCode.java new file mode 100644 index 000000000..31bb91bc1 --- /dev/null +++ b/make/gl-impl-CustomJavaCode.java @@ -0,0 +1,16 @@ +/** Entry point to C language function: <br> <code> LPVOID glMapBufferARB(GLenum target, GLenum access); </code> */ +public java.nio.ByteBuffer glMapBufferARB(int target, int access) { + final long __addr_ = context.getGLProcAddressTable()._addressof_glMapBufferARB; + if (__addr_ == 0) { + throw new GLException("Method \"glMapBufferARB\" not available"); + } + int[] sz = new int[1]; + glGetBufferParameterivARB(target, GL_BUFFER_SIZE_ARB, sz); + ByteBuffer _res; + _res = dispatch_glMapBufferARB(target, access, sz[0], __addr_); + if (_res == null) return null; + return _res.order(ByteOrder.nativeOrder()); +} + +/** Encapsulates function pointer for OpenGL function <br>: <code> LPVOID glMapBufferARB(GLenum target, GLenum access); </code> */ +native private java.nio.ByteBuffer dispatch_glMapBufferARB(int target, int access, int size, long glProcAddress); diff --git a/make/gl-impl-macosx.cfg b/make/gl-impl-macosx.cfg index 5aa8ea786..c5a0ade2f 100644 --- a/make/gl-impl-macosx.cfg +++ b/make/gl-impl-macosx.cfg @@ -68,3 +68,6 @@ CustomJavaCode MacOSXGLImpl { CustomJavaCode MacOSXGLImpl // FIXME CustomJavaCode MacOSXGLImpl throw new GLException("Not yet implemented"); CustomJavaCode MacOSXGLImpl } + +IncludeAs CustomJavaCode MacOSXGLImpl gl-impl-CustomJavaCode.java +IncludeAs CustomCCode gl-impl-CustomCCode.c diff --git a/make/gl-impl-win32.cfg b/make/gl-impl-win32.cfg index 4891bd490..18c213769 100644 --- a/make/gl-impl-win32.cfg +++ b/make/gl-impl-win32.cfg @@ -57,3 +57,6 @@ CustomJavaCode WindowsGLImpl */ CustomJavaCode WindowsGLImpl public java.nio.ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3) { CustomJavaCode WindowsGLImpl return wglAllocateMemoryNV(arg0, arg1, arg2, arg3); CustomJavaCode WindowsGLImpl } + +IncludeAs CustomJavaCode WindowsGLImpl gl-impl-CustomJavaCode.java +IncludeAs CustomCCode gl-impl-CustomCCode.c diff --git a/make/gl-impl-x11.cfg b/make/gl-impl-x11.cfg index e94923c64..0ef534df1 100644 --- a/make/gl-impl-x11.cfg +++ b/make/gl-impl-x11.cfg @@ -55,3 +55,6 @@ CustomJavaCode X11GLImpl */ CustomJavaCode X11GLImpl public java.nio.ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3) { CustomJavaCode X11GLImpl return glXAllocateMemoryNV(arg0, arg1, arg2, arg3); CustomJavaCode X11GLImpl } + +IncludeAs CustomJavaCode X11GLImpl gl-impl-CustomJavaCode.java +IncludeAs CustomCCode gl-impl-CustomCCode.c |