summaryrefslogtreecommitdiffstats
path: root/make/config/jogl/gl-impl-CustomCCode-gles3.c
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2013-07-15 13:39:22 +0200
committerSven Gothel <[email protected]>2013-07-15 13:39:22 +0200
commit3a0d7703da32e9a5ddf08a334f18588a78038d88 (patch)
tree48c8d89fa29e4425bcb25056d9396e9ea4db44d1 /make/config/jogl/gl-impl-CustomCCode-gles3.c
parent2b6f60f67e470da2217dfc8ea9ddd566357715d4 (diff)
Add Support for GL 4.3 (Bug 716) and ES 3.0 (Bug 717)
ES3 / GL4.3: - Update all EGL, GLX, WGL and GL (desktop and mobile) khronos headers to latest version. - GL3/gl3* -> GL/glcorearb* - Explicitly preserve ES2_compatibility and ES3_compatibility in header, most extension grouping was removed in new headers. - Always load all GLHeader to ensure proper extension association across all profiles. - Unified method signatures - Added GL_EXT_map_buffer_range to core - Using common 'glMapBufferImpl(..)' for all glMapBuffer(..) and glMapBufferRange(..) impl. - Init necessary fields of GL instances via 'finalizeInit()' called by reflection, if exist. This allows removing initialization checks, i.e. for all buffer validations. - BuildStaticGLInfo: Can handle new GL header structure, i.e. one CPP extenstion block incl. define + funcs. - GLJavaMethodBindingEmitter: Simply print the - No GL duplication due to new intermediate interfaces, see below - OO lineare inheritance (Added GL2ES3, GL3ES3 and GL4ES3 intemediates): GLBase - GL - GL2ES2 - GLES2 GLBase - GL - GL2ES2 - GL2GL3 - [ GL2, GL3 ] GLBase - GL - GL2ES2 - GL2ES3 - GL3ES3 - [ GL3 ] GLBase - GL - GL2ES2 - GL2ES3 - GL3ES3 - GL4ES3 - [ GLES3, GL4, .. ] - Expose 'usable' intermediate interfaces GL3ES3 and GL4ES3 in GLBase/GLProfile/GLContext via is*() and get*(). - GLContext*: - isGL3core() is true if [ GL4, GL3, GLES3 ] (added GLES3) - Added ctxProfile argument to allow handling ES versions: - getMaxMajor(..), getMaxMinor(..), isValidGLVersion(..) and decrementGLVersion(..) - mapGLVersions(..) prepared for ES ARB/KHR validation - EGLContext checks ES3 (via old ctx's GL_VERSION) - ExtensionAvailabilityCache adds GL_ES_Version_X_Y for ES. - Prelim tests w/ Mesa 9.1.3 GL Version 3.0 (ES profile, ES2 compat, ES3 compat, FBO, hardware) - OpenGL ES 3.0 Mesa 9.1.3 [GL 3.0.0, vendor 9.1.3 (Mesa 9.1.3)] - TODO: - Use KHR_create_context in EGLContext.createContextARBImpl(..) - More tests (Mobile, ..) +++ Misc: - GLContext*: - Complete glAllocateMemoryNV w/ glFreeMemoryNV.
Diffstat (limited to 'make/config/jogl/gl-impl-CustomCCode-gles3.c')
-rw-r--r--make/config/jogl/gl-impl-CustomCCode-gles3.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/make/config/jogl/gl-impl-CustomCCode-gles3.c b/make/config/jogl/gl-impl-CustomCCode-gles3.c
new file mode 100644
index 000000000..2f3329bfa
--- /dev/null
+++ b/make/config/jogl/gl-impl-CustomCCode-gles3.c
@@ -0,0 +1,41 @@
+typedef GLvoid* (GL_APIENTRY* PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
+/* Java->C glue code:
+ * Java package: jogamp.opengl.es3.GLES3Impl
+ * Java method: long dispatch_glMapBuffer(int target, int access)
+ * C function: void * glMapBuffer(GLenum target, GLenum access);
+ */
+JNIEXPORT jlong JNICALL
+Java_jogamp_opengl_es3_GLES3Impl_dispatch_1glMapBuffer(JNIEnv *env, jobject _unused, jint target, jint access, jlong glProcAddress) {
+ PFNGLMAPBUFFERPROC ptr_glMapBuffer;
+ void * _res;
+ ptr_glMapBuffer = (PFNGLMAPBUFFERPROC) (intptr_t) glProcAddress;
+ assert(ptr_glMapBuffer != NULL);
+ _res = (* ptr_glMapBuffer) ((GLenum) target, (GLenum) access);
+ return (jlong) (intptr_t) _res;
+}
+
+/* Java->C glue code:
+ * Java package: jogamp.opengl.es3.GLES3Impl
+ * Java method: java.nio.ByteBuffer dispatch_glMapBufferRange(int target, long offset, long length, int access)
+ * C function: void * glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+ */
+JNIEXPORT jlong JNICALL
+Java_jogamp_opengl_es3_GLES3Impl_dispatch_1glMapBufferRange(JNIEnv *env, jobject _unused, jint target, jlong offset, jlong length, jint access, jlong procAddress) {
+ typedef void * (GL_APIENTRY*_local_PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+ _local_PFNGLMAPBUFFERRANGEPROC ptr_glMapBufferRange;
+ void * _res;
+ ptr_glMapBufferRange = (_local_PFNGLMAPBUFFERRANGEPROC) (intptr_t) procAddress;
+ assert(ptr_glMapBufferRange != NULL);
+ _res = (* ptr_glMapBufferRange) ((GLenum) target, (GLintptr) offset, (GLsizeiptr) length, (GLbitfield) access);
+ return (jlong) (intptr_t) _res;
+}
+
+/* Java->C glue code:
+ * Java package: jogamp.opengl.es3.GLES3Impl
+ * Java method: ByteBuffer newDirectByteBuffer(long addr, long capacity);
+ * C function: jobject newDirectByteBuffer(jlong addr, jlong capacity);
+ */
+JNIEXPORT jobject JNICALL
+Java_jogamp_opengl_es3_GLES3Impl_newDirectByteBuffer(JNIEnv *env, jobject _unused, jlong addr, jlong capacity) {
+ return (*env)->NewDirectByteBuffer(env, (void*) (intptr_t) addr, capacity);
+}