From 05eef46e33f41f5c234ffb1563fd8f641208fe85 Mon Sep 17 00:00:00 2001
From: Sven Gothel
* - Visible content - * - Stuttering, non-fluent and slow animation + * - Fluent animation **/ @SuppressWarnings("serial") @@ -50,10 +52,11 @@ public class Bug735Inv2AppletAWT extends Applet implements Runnable { static public int TOOLKIT = NEWT; static public boolean IGNORE_AWT_REPAINT = false; static public boolean USE_ECT = false; - static public int SWAP_INTERVAL = 0; + static public int SWAP_INTERVAL = 1; ////////////////////////////////////////////////////////////////////////////// + static boolean waitForKey = false; static private Frame frame; static private Bug735Inv2AppletAWT applet; private GLCanvas awtCanvas; @@ -203,6 +206,22 @@ public class Bug735Inv2AppletAWT extends Applet implements Runnable { } static public void main(String[] args) { + for(int i=0; i
true
,
+ * since we might load a desktop GL library and allow symbol access to subsequent libs.
+ * + * This respects old DRI requirements: + *
+ * http://dri.sourceforge.net/doc/DRIuserguide.html + *+ * + */ + public boolean shallLinkGlobal() { return true; } + + /** + * Default value:
false
.
+ */
@Override
public boolean shallLookupGlobal() { return false; }
diff --git a/src/jogl/classes/jogamp/opengl/egl/DesktopES2DynamicLibraryBundleInfo.java b/src/jogl/classes/jogamp/opengl/egl/DesktopES2DynamicLibraryBundleInfo.java
index cddd142e9..771d16d46 100644
--- a/src/jogl/classes/jogamp/opengl/egl/DesktopES2DynamicLibraryBundleInfo.java
+++ b/src/jogl/classes/jogamp/opengl/egl/DesktopES2DynamicLibraryBundleInfo.java
@@ -47,16 +47,6 @@ public class DesktopES2DynamicLibraryBundleInfo extends GLDynamicLibraryBundleIn
super();
}
- /**
- * Might be a desktop GL library, and might need to allow symbol access to subsequent libs.
- *
- * This respects old DRI requirements:- * http://dri.sourceforge.net/doc/DRIuserguide.html - *- */ - public boolean shallLinkGlobal() { return true; } - public final List
- * http://dri.sourceforge.net/doc/DRIuserguide.html - *+ * Returns
true
on Android
,
+ * and false
otherwise.
*/
- @Override
- public boolean shallLinkGlobal() { return true; }
-
@Override
public boolean shallLookupGlobal() {
- if ( AndroidVersion.isAvailable ) {
+ if ( Platform.OSType.ANDROID == Platform.OS_TYPE ) {
// Android requires global symbol lookup
return true;
}
diff --git a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDynamicLibraryBundleInfo.java b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDynamicLibraryBundleInfo.java
index 108c157a8..6083f209c 100644
--- a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDynamicLibraryBundleInfo.java
+++ b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDynamicLibraryBundleInfo.java
@@ -60,15 +60,6 @@ public class X11GLXDynamicLibraryBundleInfo extends DesktopGLDynamicLibraryBundl
return libsList;
}
- /**
- * This respects old DRI requirements:- * http://dri.sourceforge.net/doc/DRIuserguide.html - *- */ - @Override - public boolean shallLinkGlobal() { return true; } - @Override public final List
Common interface containing the subset of all profiles, GL3bc, GL3, GL2, GLES1 and GLES2.
-ClassJavadoc GL * This interface reflects common data types, texture and framebuffer functionality.
Common interface containing the subset of all profiles, GL3bc, GL3, GL2, GLES1 and GLES2.
+ClassJavadoc GL * This interface reflects common data types, texture and framebuffer functionality.
-ClassJavadoc GL2ES1 * Interface containing the common subset of GL2 and GLES1.
-ClassJavadoc GL2ES1 * This interface reflects only the fixed functionality of OpenGL
-ClassJavadoc GL2ES1 *
+ClassJavadoc GL2ES1 * Interface containing the common subset of GL2 and GLES1.
+ClassJavadoc GL2ES1 * This interface reflects only the fixed functionality of OpenGL
+ClassJavadoc GL2ES1 *
-ClassJavadoc GL2ES2 * Interface containing the common subset of GL3, GL2 and GLES2.
-ClassJavadoc GL2ES2 * This interface reflects only the programmable shader functionality of desktop and embedded OpenGL
-ClassJavadoc GL2ES2 *
+ClassJavadoc GL2ES2 * Interface containing the common subset of GL3, GL2 and GLES2.
+ClassJavadoc GL2ES2 * This interface reflects only the programmable shader functionality of desktop and embedded OpenGL
+ClassJavadoc GL2ES2 * This interface is almost GLES2 complete.
+ClassJavadoc GL2ES2 *
+ClassJavadoc GL2ES3 * Interface containing the common subset of core GL2 and GLES3 (OpenGL ES 3.0).
+ClassJavadoc GL2ES3 * This interface reflects only the programmable shader functionality of desktop and embedded OpenGL
+ClassJavadoc GL2ES3 * This interface is not GLES3 complete and merely exist to avoid duplicated definitions.
+ClassJavadoc GL2ES3 *
+ClassJavadoc GL3ES3 * Interface containing the common subset of core GL3 (OpenGL 3.1+) and GLES3 (OpenGL ES 3.0).
+ClassJavadoc GL3ES3 * This interface reflects only the programmable shader functionality of desktop and embedded OpenGL
+ClassJavadoc GL3ES3 * This interface is almost GLES3 complete, but lacks the GL_ARB_ES3_compatibility
extension.
+ClassJavadoc GL3ES3 *
+ClassJavadoc GL4ES3 * Interface containing the common subset of core GL4 (OpenGL 4.0+) and GLES3 (OpenGL ES 3.0).
+ClassJavadoc GL4ES3 * This interface reflects only the programmable shader functionality of desktop and embedded OpenGL
+ClassJavadoc GL4ES3 * This interface is GLES3 complete.
+ClassJavadoc GL4ES3 *
-ClassJavadoc GL2GL3 * Interface containing the common subset of core GL3 (OpenGL 3.1+) and GL2 (OpenGL 3.0),
-ClassJavadoc GL2GL3 * also known as the OpenGL 3.0 forward compatible, non deprecated subset.
-ClassJavadoc GL2GL3 * This interface reflects only the programmable shader functionality of desktop OpenGL
-ClassJavadoc GL2GL3 *
+ClassJavadoc GL2GL3 * Interface containing the common subset of core GL3 (OpenGL 3.1) and GL2 (OpenGL 3.0),
+ClassJavadoc GL2GL3 * also known as the OpenGL 3.0 forward compatible, non deprecated subset.
+ClassJavadoc GL2GL3 * This interface reflects only the programmable shader functionality of desktop OpenGL
+ClassJavadoc GL2GL3 *
+ClassJavadoc GL2 *
ClassJavadoc GL2 * This interface contains all core desktop OpenGL methods through
ClassJavadoc GL2 * version 3.0, inclusive, as well as most of it's extensions defined at the
ClassJavadoc GL2 * time of this specification. Early OpenGL extensions whose functionality
ClassJavadoc GL2 * was incorporated into core OpenGL by version 3.0, inclusive, are specifically
-ClassJavadoc GL2 * excluded.
+ClassJavadoc GL2 * excluded.
ClassJavadoc GL2 * Note: OpenGL 3.0 is the last subsumed version in the specification.
ClassJavadoc GL2 * You need to use a {@link GL3} or {@link GL3bc} OpenGL 3.1+ context to benefit
ClassJavadoc GL2 * from new functionality and versions.
-ClassJavadoc GL2 *
-ClassJavadoc GL3bc * This interface contains the OpenGL 3.x compatibility profile, ie includes all methods
-ClassJavadoc GL3bc * as defined in {@link GL2} and {@link GL3}.
-ClassJavadoc GL3bc *
-ClassJavadoc GL3 * This interface contains all core, forward compatible, OpenGL methods starting from 3.1,
-ClassJavadoc GL3 * inclusive, as well as most of it's extensions defined at the time of this specification.
+ClassJavadoc GL3 *
+ClassJavadoc GL3 * This interface contains the core, forward compatible, OpenGL methods of GL 3.x, with x >=1,
+ClassJavadoc GL3 * as well as most of it's extensions defined at the time of this specification.
ClassJavadoc GL3 * Note: OpenGL 3.0 forward compatible, non deprecated functionality is included in the
-ClassJavadoc GL3 * 3.1 specification, hence the {@link GL2GL3} implemented interface.
-ClassJavadoc GL3 * Note: OpenGL 3.1 forward compatible no more includes fixed point functionality.
-ClassJavadoc GL3 *
+ClassJavadoc GL3bc * This interface containing all core and compatibility OpenGL methods of GL 3.x, with x >= 1,
+ClassJavadoc GL3bc * as well as most of it's extensions defined at the time of this specification.
+ClassJavadoc GL3bc *
+ClassJavadoc GL4 * This interface containing all core OpenGL methods of GL 4.x, with x >= 0,
+ClassJavadoc GL4 * as well as most of it's extensions defined at the time of this specification.
+ClassJavadoc GL4 *
+ClassJavadoc GL4bc * This interface containing all core and compatibility OpenGL methods of GL 4.x, with x >= 0,
+ClassJavadoc GL4bc * as well as most of it's extensions defined at the time of this specification.
+ClassJavadoc GL4bc *
+ClassJavadoc GLES1 *
ClassJavadoc GLES1 * This interface contains all core embedded OpenGL methods of ES 1.x, with x >= 0, -ClassJavadoc GLES1 * inclusive, as well as most of it's extensions defined at the -ClassJavadoc GLES1 * time of this specification. -ClassJavadoc GLES1 *
+ClassJavadoc GLES1 * as well as most of it's extensions defined at the time of this specification. +ClassJavadoc GLES1 * ClassJavadoc GLES1 */ ClassJavadoc GLES2 /** -ClassJavadoc GLES2 *+ClassJavadoc GLES2 *
ClassJavadoc GLES2 * This interface contains all core embedded OpenGL methods of ES 2.x, with x >= 0, -ClassJavadoc GLES2 * inclusive, as well as most of it's extensions defined at the -ClassJavadoc GLES2 * time of this specification. -ClassJavadoc GLES2 *
+ClassJavadoc GLES2 * inclusive, as well as most of it's extensions defined at the time of this specification. +ClassJavadoc GLES2 * ClassJavadoc GLES2 */ +ClassJavadoc GLES3 /** +ClassJavadoc GLES3 *+ClassJavadoc GLES3 * This interface contains all core embedded OpenGL methods of ES 3.x, with x >= 0, +ClassJavadoc GLES3 * inclusive, as well as most of it's extensions defined at the time of this specification. +ClassJavadoc GLES3 *
+ClassJavadoc GLES3 */ + # Javadoc for the EGL class ClassJavadoc EGL /** ClassJavadoc EGL * Provides access to the embedded-specific OpenGL vendor extensions. @@ -805,11 +878,3 @@ ClassJavadoc XVisualInfo * extensions. No other access is provided to these dat ClassJavadoc XVisualInfo * this wrapper is not useful to end users, though it is used in the implementation. ClassJavadoc XVisualInfo */ -# Custom code for querying extensions and exposing -# wglAllocateMemoryNV/glXAllocateMemoryNV -CustomJavaCode GL2GL3 /** -CustomJavaCode GL2GL3 * Provides platform-independent access to thewglAllocateMemoryNV
/
-CustomJavaCode GL2GL3 * glXAllocateMemoryNV
extension.
-CustomJavaCode GL2GL3 */
-CustomJavaCode GL2GL3 public java.nio.ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3);
-
diff --git a/make/config/jogl/gl-desktop.cfg b/make/config/jogl/gl-desktop.cfg
index a91f5ac5b..244271468 100644
--- a/make/config/jogl/gl-desktop.cfg
+++ b/make/config/jogl/gl-desktop.cfg
@@ -1,11 +1,6 @@
# This .cfg file provides common options used by the desktop OpenGL
# implementation on all platforms.
-# Inform the glue code generator of the association between #defines
-# and functions and the extensions in which they are defined
-GLHeader GL/gl.h
-GLHeader GL/glext.h
-
#Include gl-desktop-tracker.cfg
diff --git a/make/config/jogl/gl-es1.cfg b/make/config/jogl/gl-es1.cfg
index 2a7b64dd3..b73b1a731 100644
--- a/make/config/jogl/gl-es1.cfg
+++ b/make/config/jogl/gl-es1.cfg
@@ -30,13 +30,6 @@ EmitProcAddressTable true
ProcAddressTableClassName GLES1ProcAddressTable
GetProcAddressTableExpr ((GLES1ProcAddressTable)_context.getGLProcAddressTable())
-# Inform the glue code generator of the association between #defines
-# and functions and the extensions in which they are defined
-GLHeader GLES/gl.h
-GLHeader GLES/glext.h
-GLHeader GL/gl.h
-GLHeader GL/glext.h
-
# Force all of the methods to be emitted using dynamic linking so we
# don't need to link against any emulation library on the desktop or
# depend on the presence of an import library for a particular device
@@ -49,11 +42,6 @@ LocalProcAddressCallingConvention __ALL__ GL_APIENTRY
# Pick up on-line OpenGL javadoc thanks to user cylab on javagaming.org forums
TagNativeBinding true
-# Ignore certain extensions that will be picked up by the dynamic
-# lookup mechanism anyway if they are present
-IgnoreExtension GL_OES_fixed_point
-IgnoreExtension GL_OES_single_precision
-
# Add PixelStorei StateTracker
#
# Add input validation to glPixelStorei, just to be sure.
diff --git a/make/config/jogl/gl-es2.cfg b/make/config/jogl/gl-es2.cfg
deleted file mode 100644
index 8b6152bd0..000000000
--- a/make/config/jogl/gl-es2.cfg
+++ /dev/null
@@ -1,90 +0,0 @@
-# This .cfg file is used to generate the GL interface and implementing class.
-JavaOutputDir gensrc/classes
-NativeOutputDir gensrc/native/jogl/es2
-
-ExtendedInterfaceSymbolsIgnore ../build-temp/gensrc/classes/javax/media/opengl/GL.java
-ExtendedInterfaceSymbolsIgnore ../build-temp/gensrc/classes/javax/media/opengl/GL2ES2.java
-ExtendedInterfaceSymbolsIgnore ../src/jogl/classes/javax/media/opengl/GLBase.java
-
-Package javax.media.opengl
-Style InterfaceAndImpl
-JavaClass GLES2
-#Extends GLES2 GLBase
-#Extends GLES2 GL
-Extends GLES2 GL2ES2
-ImplPackage jogamp.opengl.es2
-ImplJavaClass GLES2Impl
-Implements GLES2Impl GLBase
-Implements GLES2Impl GL
-Implements GLES2Impl GL2ES2
-HierarchicalNativeOutput false
-Include gl-common.cfg
-Include gl-common-extensions.cfg
-Include gl2_es2-common.cfg
-
-RenameExtensionIntoCore GL_OES_texture_3D
-RenameExtensionIntoCore GL_OES_get_program_binary
-
-EmitProcAddressTable true
-ProcAddressTableClassName GLES2ProcAddressTable
-GetProcAddressTableExpr ((GLES2ProcAddressTable)_context.getGLProcAddressTable())
-
-# Inform the glue code generator of the association between #defines
-# and functions and the extensions in which they are defined
-GLHeader GLES2/gl2.h
-GLHeader GLES2/gl2ext.h
-GLHeader GL/gl.h
-GLHeader GL/glext.h
-
-# Force all of the methods to be emitted using dynamic linking so we
-# don't need to link against any emulation library on the desktop or
-# depend on the presence of an import library for a particular device
-ForceProcAddressGen __ALL__
-
-# Also force the calling conventions of the locally generated function
-# pointer typedefs for these routines to GL_APIENTRY
-LocalProcAddressCallingConvention __ALL__ GL_APIENTRY
-
-# Pick up on-line OpenGL javadoc thanks to user cylab on javagaming.org forums
-TagNativeBinding true
-
-# Add PixelStorei StateTracker
-#
-# Add input validation to glPixelStorei, just to be sure.
-CustomJavaCode GLES2Impl private static final int params_offset = 0; // just a helper for JavaPrologue ..
-
-JavaPrologue glPixelStorei if (pname != GL_PACK_ALIGNMENT && pname != GL_UNPACK_ALIGNMENT) {
-JavaPrologue glPixelStorei throw new GLException("Unsupported pixel store parameter name 0x" + Integer.toHexString(pname));
-JavaPrologue glPixelStorei }
-JavaPrologue glPixelStorei glStateTracker.setInt(pname, param);
-
-JavaPrologue glGetIntegerv if ( glStateTracker.getInt(pname, params, params_offset) ) { return; }
-
-IncludeAs CustomJavaCode GLES2 gl-if-CustomJavaCode-gles2.java
-
-CustomCCode #include GL_ARB_uniform_buffer_object
*/
+public static final int GL_INVALID_INDEX = 0xFFFFFFFF ;
+
+/** Part of GL_ARB_sync
*/
+public static final long GL_TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFFL ;
+
+/** Part of GL_ARB_shader_image_load_store
*/
+public static final int GL_ALL_BARRIER_BITS = 0xFFFFFFFF ;
+
+public boolean glIsPBOPackEnabled();
+
+public boolean glIsPBOUnpackEnabled();
+
diff --git a/make/config/jogl/gl-if-CustomJavaCode-gl.java b/make/config/jogl/gl-if-CustomJavaCode-gl.java
index 9ea4f98b4..f9f33eec9 100644
--- a/make/config/jogl/gl-if-CustomJavaCode-gl.java
+++ b/make/config/jogl/gl-if-CustomJavaCode-gl.java
@@ -57,3 +57,11 @@
earmarked for ES 3.0 (hence kept in GL while fixing Bug 590) */
public static final int GL_HALF_FLOAT = 0x140B;
+ /** Part of GL_VERSION_1_4
, GL_ES_VERSION_2_0
, GL_OES_required_internalformat
. */
+ public static final int GL_DEPTH_COMPONENT16 = 0x81A5;
+ /** Part of GL_VERSION_1_0
, GL_OES_element_index_uint
, GL_ES_VERSION_2_0
*/
+ public static final int GL_UNSIGNED_INT = 0x1405;
+ /** Part of GL_VERSION_1_0
, GL_ES_VERSION_2_0
*/
+ public static final int GL_UNSIGNED_SHORT = 0x1403;
+
+
diff --git a/make/config/jogl/gl-if-CustomJavaCode-gl2_es2.java b/make/config/jogl/gl-if-CustomJavaCode-gl2_es2.java
index 4522d34c8..5ad235de5 100644
--- a/make/config/jogl/gl-if-CustomJavaCode-gl2_es2.java
+++ b/make/config/jogl/gl-if-CustomJavaCode-gl2_es2.java
@@ -39,10 +39,21 @@
* void {@native glDepthRange}(GLclampd zNear, GLclampd zFar);
if no native implementation is available. */
public void glDepthRangef(float zNear, float zFar);
+ public void glDepthRange(double zNear, double zFar);
+
/** Entry point to C language function:
* void {@native glClearDepthf}(GLclampf depth);
* GL_ES_VERSION_2_0
and GL_ARB_ES2_compatibility
.
* void {@native glClearDepth}(GLclampd depth);
if no native implementation is available. */
public void glClearDepthf(float depth);
+ public void glClearDepth( double depth );
+
+ public void glVertexAttribPointer(GLArrayData array);
+
+ public void glUniform(GLUniformData data);
+
+ /** Part of GL_VERSION_1_0
, GL_ES_VERSION_2_0
, GL_ANGLE_depth_texture
*/
+ public static final int GL_DEPTH_COMPONENT = 0x1902;
+
/** End: GL_ARB_ES2_compatibility functions, which are part of ES2 core as well */
diff --git a/make/config/jogl/gl-if-CustomJavaCode-gl2_gl3.java b/make/config/jogl/gl-if-CustomJavaCode-gl2_gl3.java
deleted file mode 100644
index 97fd6c4a6..000000000
--- a/make/config/jogl/gl-if-CustomJavaCode-gl2_gl3.java
+++ /dev/null
@@ -1,10 +0,0 @@
-
-/** Part of GL_ARB_uniform_buffer_object
*/
-public static final int GL_INVALID_INDEX = 0xFFFFFFFF ;
-
-/** Part of GL_ARB_sync
*/
-public static final long GL_TIMEOUT_IGNORED = 0xFFFFFFFFFFFFFFFFL ;
-
-/** Part of GL_ARB_shader_image_load_store
*/
-public static final int GL_ALL_BARRIER_BITS = 0xFFFFFFFF ;
-
diff --git a/make/config/jogl/gl-if-CustomJavaCode-gl_compat.java b/make/config/jogl/gl-if-CustomJavaCode-gl_compat.java
new file mode 100644
index 000000000..22ae54cbe
--- /dev/null
+++ b/make/config/jogl/gl-if-CustomJavaCode-gl_compat.java
@@ -0,0 +1,20 @@
+
+/**
+ * Part of GL_NV_vertex_array_range
.
+ *
+ * Provides platform-independent access to the wglAllocateMemoryNV
/
+ * glXAllocateMemoryNV
.
+ *
GL_NV_vertex_array_range
.
+ *
+ * Provides platform-independent access to the wglFreeMemoryNV
/
+ * glXFreeMemoryNV
.
+ *
void * {@native glMapBuffer}(GLenum target, GLenum access);
GL_VERSION_1_5
; GL_OES_mapbuffer
*/
+ private final java.nio.ByteBuffer glMapBufferImpl(int target, boolean useRange, long offset, long length, int access, long glProcAddress) {
+ if (glProcAddress == 0) {
+ throw new GLException("Method \""+(useRange?"glMapBufferRange":"glMapBuffer")+"\" not available");
+ }
+ final long sz = bufferSizeTracker.getBufferSize(bufferStateTracker, target, this);
+ if (0 == sz) {
+ return null;
+ }
+ if( !useRange ) {
+ length = sz;
+ offset = 0;
+ } else {
+ if( length + offset > sz ) {
+ throw new GLException("Out of range: offset "+offset+" + length "+length+" > size "+sz);
+ }
+ if( 0 > length || 0 > offset ) {
+ throw new GLException("Invalid values: offset "+offset+", length "+length);
+ }
+ if( 0 == length ) {
+ return null;
+ }
+ }
+ final long addr = useRange ? dispatch_glMapBufferRange(target, offset, length, access, glProcAddress) :
+ dispatch_glMapBuffer(target, access, glProcAddress);
+ if (0 == addr) {
+ return null;
+ }
+ ByteBuffer buffer;
+ MemoryObject memObj0 = new MemoryObject(addr, length); // object and key
+ MemoryObject memObj1 = MemoryObject.getOrAddSafe(arbMemCache, memObj0);
+ if(memObj0 == memObj1) {
+ // just added ..
+ if(null != memObj0.getBuffer()) {
+ throw new InternalError();
+ }
+ buffer = newDirectByteBuffer(addr, length);
+ Buffers.nativeOrder(buffer);
+ memObj0.setBuffer(buffer);
+ } else {
+ // already mapped
+ buffer = memObj1.getBuffer();
+ if(null == buffer) {
+ throw new InternalError();
+ }
+ }
+ buffer.position(0);
+ return buffer;
+ }
+ private native long dispatch_glMapBuffer(int target, int access, long glProcAddress);
+ private native long dispatch_glMapBufferRange(int target, long offset, long length, int access, long procAddress);
+
+
+ /** Entry point to C language function: GLvoid * {@native glMapNamedBufferEXT}(GLuint buffer, GLenum access);
GL_EXT_direct_state_access
*/
+ private final java.nio.ByteBuffer glMapNamedBufferImpl(int bufferName, int access, long glProcAddress) {
+ if (glProcAddress == 0) {
+ throw new GLException("Method \"glMapNamedBufferEXT\" not available");
+ }
+ final long sz = bufferSizeTracker.getDirectStateBufferSize(bufferName, this);
+ if (0 == sz) {
+ return null;
+ }
+ final long addr = dispatch_glMapNamedBufferEXT(bufferName, access, glProcAddress);
+ if (0 == addr) {
+ return null;
+ }
+ ByteBuffer buffer;
+ MemoryObject memObj0 = new MemoryObject(addr, sz); // object and key
+ MemoryObject memObj1 = MemoryObject.getOrAddSafe(arbMemCache, memObj0);
+ if(memObj0 == memObj1) {
+ // just added ..
+ if(null != memObj0.getBuffer()) {
+ throw new InternalError();
+ }
+ buffer = newDirectByteBuffer(addr, sz);
+ Buffers.nativeOrder(buffer);
+ memObj0.setBuffer(buffer);
+ } else {
+ // already mapped
+ buffer = memObj1.getBuffer();
+ if(null == buffer) {
+ throw new InternalError();
+ }
+ }
+ buffer.position(0);
+ return buffer;
+ }
+ private native long dispatch_glMapNamedBufferEXT(int buffer, int access, long procAddress);
+
+ private native ByteBuffer newDirectByteBuffer(long addr, long capacity);
diff --git a/make/config/jogl/gl-impl-CustomJavaCode-desktop.java b/make/config/jogl/gl-impl-CustomJavaCode-desktop.java
deleted file mode 100644
index 6a74b80a6..000000000
--- a/make/config/jogl/gl-impl-CustomJavaCode-desktop.java
+++ /dev/null
@@ -1,148 +0,0 @@
- private int[] imageSizeTemp = new int[1];
-
- private final int imageSizeInBytes(int format, int type, int width, int height, int depth, boolean pack) {
- return GLBuffers.sizeof(this, imageSizeTemp, format, type, width, height, depth, pack) ;
- }
-
- @Override
- public final boolean isGL4bc() {
- return _context.isGL4bc();
- }
-
- @Override
- public final boolean isGL4() {
- return _context.isGL4();
- }
-
- @Override
- public final boolean isGL3bc() {
- return _context.isGL3bc();
- }
-
- @Override
- public final boolean isGL3() {
- return _context.isGL3();
- }
-
- @Override
- public final boolean isGL2() {
- return _context.isGL2();
- }
-
- @Override
- public final boolean isGL2ES1() {
- return _context.isGL2ES1();
- }
-
- @Override
- public final boolean isGL2ES2() {
- return _context.isGL2ES2();
- }
-
- @Override
- public final boolean isGLES2Compatible() {
- return _context.isGLES2Compatible();
- }
-
- public final boolean isGL2GL3() {
- return _context.isGL2GL3();
- }
-
- @Override
- public final boolean hasGLSL() {
- return _context.hasGLSL();
- }
-
- @Override
- public final GL4bc getGL4bc() throws GLException {
- if(!isGL4bc()) {
- throw new GLException("Not a GL4bc implementation");
- }
- return this;
- }
-
- @Override
- public final GL4 getGL4() throws GLException {
- if(!isGL4()) {
- throw new GLException("Not a GL4 implementation");
- }
- return this;
- }
-
- @Override
- public final GL3bc getGL3bc() throws GLException {
- if(!isGL3bc()) {
- throw new GLException("Not a GL3bc implementation");
- }
- return this;
- }
-
- @Override
- public final GL3 getGL3() throws GLException {
- if(!isGL3()) {
- throw new GLException("Not a GL3 implementation");
- }
- return this;
- }
-
- @Override
- public final GL2 getGL2() throws GLException {
- if(!isGL2()) {
- throw new GLException("Not a GL2 implementation");
- }
- return this;
- }
-
- @Override
- public final GL2ES1 getGL2ES1() throws GLException {
- if(!isGL2ES1()) {
- throw new GLException("Not a GL2ES1 implementation");
- }
- return this;
- }
-
- @Override
- public final GL2ES2 getGL2ES2() throws GLException {
- if(!isGL2ES2()) {
- throw new GLException("Not a GL2ES2 implementation");
- }
- return this;
- }
-
- @Override
- public final GL2GL3 getGL2GL3() throws GLException {
- if(!isGL2GL3()) {
- throw new GLException("Not a GL2GL3 implementation");
- }
- return this;
- }
-
- @Override
- public final boolean isGLES1() {
- return false;
- }
-
- @Override
- public final boolean isGLES2() {
- return false;
- }
-
- @Override
- public final boolean isGLES() {
- return false;
- }
-
- @Override
- public final GLES1 getGLES1() throws GLException {
- throw new GLException("Not a GLES1 implementation");
- }
-
- @Override
- public final GLES2 getGLES2() throws GLException {
- throw new GLException("Not a GLES2 implementation");
- }
-
- @Override
- public final boolean isNPOTTextureAvailable() {
- return _context.isNPOTTextureAvailable();
- }
diff --git a/make/config/jogl/gl-impl-CustomJavaCode-gl4bc.java b/make/config/jogl/gl-impl-CustomJavaCode-gl4bc.java
index fbe7484c4..cacea322a 100644
--- a/make/config/jogl/gl-impl-CustomJavaCode-gl4bc.java
+++ b/make/config/jogl/gl-impl-CustomJavaCode-gl4bc.java
@@ -29,12 +29,223 @@ public GL4bcImpl(GLProfile glp, GLContextImpl context) {
this.glProfile = glp;
}
-/**
- * Provides platform-independent access to the wglAllocateMemoryNV /
- * glXAllocateMemoryNV extension.
- */
-public final java.nio.ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3) {
- return _context.glAllocateMemoryNV(arg0, arg1, arg2, arg3);
+public final void finalizeInit() {
+ if(null != _context) {
+ haveARBPixelBufferObject = isExtensionAvailable("GL_ARB_pixel_buffer_object");
+ haveEXTPixelBufferObject = isExtensionAvailable("GL_EXT_pixel_buffer_object");
+ haveGL15 = isExtensionAvailable("GL_VERSION_1_5");
+ haveGL21 = isExtensionAvailable("GL_VERSION_2_1");
+ haveARBVertexBufferObject = isExtensionAvailable("GL_ARB_vertex_buffer_object");
+ haveARBVertexArrayObject = _context.getGLVersionNumber().compareTo(GLContext.Version300) >= 0 ||
+ isExtensionAvailable("GL_ARB_vertex_array_object");
+ } else {
+ haveARBPixelBufferObject = false;
+ haveEXTPixelBufferObject = false;
+ haveGL15 = false;
+ haveGL21 = false;
+ haveARBVertexBufferObject = false;
+ haveARBVertexArrayObject = false;
+ }
+}
+
+private int[] imageSizeTemp = new int[1];
+
+private final int imageSizeInBytes(int format, int type, int width, int height, int depth, boolean pack) {
+ return GLBuffers.sizeof(this, imageSizeTemp, format, type, width, height, depth, pack) ;
+}
+
+@Override
+public final boolean isGL4bc() {
+ return _context.isGL4bc();
+}
+
+@Override
+public final boolean isGL4() {
+ return _context.isGL4();
+}
+
+@Override
+public final boolean isGL3bc() {
+ return _context.isGL3bc();
+}
+
+@Override
+public final boolean isGL3() {
+ return _context.isGL3();
+}
+
+@Override
+public final boolean isGL2() {
+ return _context.isGL2();
+}
+
+@Override
+public final boolean isGL2ES1() {
+ return _context.isGL2ES1();
+}
+
+@Override
+public final boolean isGL2ES2() {
+ return _context.isGL2ES2();
+}
+
+@Override
+public final boolean isGL3ES3() {
+ return _context.isGL3ES3();
+}
+
+@Override
+public final boolean isGL4ES3() {
+ return _context.isGL4ES3();
+}
+
+@Override
+public final boolean isGLES2Compatible() {
+ return _context.isGLES2Compatible();
+}
+
+@Override
+public final boolean isGLES3Compatible() {
+ return _context.isGLES3Compatible();
+}
+
+@Override
+public final boolean isGL2GL3() {
+ return _context.isGL2GL3();
+}
+
+@Override
+public final boolean hasGLSL() {
+ return _context.hasGLSL();
+}
+
+@Override
+public final GL4bc getGL4bc() throws GLException {
+ if(!isGL4bc()) {
+ throw new GLException("Not a GL4bc implementation");
+ }
+ return this;
+}
+
+@Override
+public final GL4 getGL4() throws GLException {
+ if(!isGL4()) {
+ throw new GLException("Not a GL4 implementation");
+ }
+ return this;
+}
+
+@Override
+public final GL3bc getGL3bc() throws GLException {
+ if(!isGL3bc()) {
+ throw new GLException("Not a GL3bc implementation");
+ }
+ return this;
+}
+
+@Override
+public final GL3 getGL3() throws GLException {
+ if(!isGL3()) {
+ throw new GLException("Not a GL3 implementation");
+ }
+ return this;
+}
+
+@Override
+public final GL2 getGL2() throws GLException {
+ if(!isGL2()) {
+ throw new GLException("Not a GL2 implementation");
+ }
+ return this;
+}
+
+@Override
+public final GL2ES1 getGL2ES1() throws GLException {
+ if(!isGL2ES1()) {
+ throw new GLException("Not a GL2ES1 implementation");
+ }
+ return this;
+}
+
+@Override
+public final GL2ES2 getGL2ES2() throws GLException {
+ if(!isGL2ES2()) {
+ throw new GLException("Not a GL2ES2 implementation");
+ }
+ return this;
+}
+
+@Override
+public final GL3ES3 getGL3ES3() throws GLException {
+ if(!isGL3ES3()) {
+ throw new GLException("Not a GL3ES3 implementation");
+ }
+ return this;
+}
+
+@Override
+public final GL4ES3 getGL4ES3() throws GLException {
+ if(!isGL4ES3()) {
+ throw new GLException("Not a GL4ES3 implementation");
+ }
+ return this;
+}
+
+@Override
+public final GL2GL3 getGL2GL3() throws GLException {
+ if(!isGL2GL3()) {
+ throw new GLException("Not a GL2GL3 implementation");
+ }
+ return this;
+}
+
+@Override
+public final boolean isGLES1() {
+ return false;
+}
+
+@Override
+public final boolean isGLES2() {
+ return false;
+}
+
+@Override
+public final boolean isGLES3() {
+ return false;
+}
+
+@Override
+public final boolean isGLES() {
+ return false;
+}
+
+@Override
+public final GLES1 getGLES1() throws GLException {
+ throw new GLException("Not a GLES1 implementation");
+}
+
+@Override
+public final GLES2 getGLES2() throws GLException {
+ throw new GLException("Not a GLES2 implementation");
+}
+
+@Override
+public final GLES3 getGLES3() throws GLException {
+ throw new GLException("Not a GLES3 implementation");
+}
+
+@Override
+public final boolean isNPOTTextureAvailable() {
+ return _context.isNPOTTextureAvailable();
+}
+@Override
+public final java.nio.ByteBuffer glAllocateMemoryNV(int size, float readFrequency, float writeFrequency, float priority) {
+ return _context.glAllocateMemoryNV(size, readFrequency, writeFrequency, priority);
+}
+
+@Override
+public final void glFreeMemoryNV(java.nio.ByteBuffer pointer) {
+ _context.glFreeMemoryNV(pointer);
}
//
@@ -45,7 +256,6 @@ private final GLBufferSizeTracker bufferSizeTracker;
private final GLBufferStateTracker bufferStateTracker;
private final GLStateTracker glStateTracker;
-private boolean bufferObjectExtensionsInitialized = false;
private boolean haveARBPixelBufferObject;
private boolean haveEXTPixelBufferObject;
private boolean haveGL15;
@@ -53,20 +263,6 @@ private boolean haveGL21;
private boolean haveARBVertexBufferObject;
private boolean haveARBVertexArrayObject;
-private final void initBufferObjectExtensionChecks() {
- if ( bufferObjectExtensionsInitialized ) {
- return;
- }
- bufferObjectExtensionsInitialized = true;
- haveARBPixelBufferObject = isExtensionAvailable("GL_ARB_pixel_buffer_object");
- haveEXTPixelBufferObject = isExtensionAvailable("GL_EXT_pixel_buffer_object");
- haveGL15 = isExtensionAvailable("GL_VERSION_1_5");
- haveGL21 = isExtensionAvailable("GL_VERSION_2_1");
- haveARBVertexBufferObject = isExtensionAvailable("GL_ARB_vertex_buffer_object");
- haveARBVertexArrayObject = _context.getGLVersionNumber().compareTo(GLContext.Version300) >= 0 ||
- isExtensionAvailable("GL_ARB_vertex_array_object");
-}
-
private final boolean checkBufferObject(boolean extensionAvail,
boolean allowVAO,
boolean enabled,
@@ -111,7 +307,6 @@ private final boolean checkBufferObject(boolean extensionAvail,
}
private final boolean checkArrayVBODisabled(boolean throwException) {
- initBufferObjectExtensionChecks();
return checkBufferObject(haveGL15 || haveARBVertexBufferObject,
haveARBVertexArrayObject, // allowVAO
false, // enable
@@ -120,7 +315,6 @@ private final boolean checkArrayVBODisabled(boolean throwException) {
}
private final boolean checkArrayVBOEnabled(boolean throwException) {
- initBufferObjectExtensionChecks();
return checkBufferObject(haveGL15 || haveARBVertexBufferObject,
haveARBVertexArrayObject, // allowVAO
true, // enable
@@ -129,7 +323,6 @@ private final boolean checkArrayVBOEnabled(boolean throwException) {
}
private final boolean checkElementVBODisabled(boolean throwException) {
- initBufferObjectExtensionChecks();
return checkBufferObject(haveGL15 || haveARBVertexBufferObject,
haveARBVertexArrayObject, // allowVAO
false, // enable
@@ -138,7 +331,6 @@ private final boolean checkElementVBODisabled(boolean throwException) {
}
private final boolean checkElementVBOEnabled(boolean throwException) {
- initBufferObjectExtensionChecks();
return checkBufferObject(haveGL15 || haveARBVertexBufferObject,
haveARBVertexArrayObject, // allowVAO
true, // enable
@@ -147,7 +339,6 @@ private final boolean checkElementVBOEnabled(boolean throwException) {
}
private final boolean checkUnpackPBODisabled(boolean throwException) {
- initBufferObjectExtensionChecks();
return checkBufferObject(haveGL21 || haveARBPixelBufferObject || haveEXTPixelBufferObject,
false, // allowVAO
false, // enable
@@ -156,7 +347,6 @@ private final boolean checkUnpackPBODisabled(boolean throwException) {
}
private final boolean checkUnpackPBOEnabled(boolean throwException) {
- initBufferObjectExtensionChecks();
return checkBufferObject(haveGL21 || haveARBPixelBufferObject || haveEXTPixelBufferObject,
false, // allowVAO
true, // enable
@@ -165,7 +355,6 @@ private final boolean checkUnpackPBOEnabled(boolean throwException) {
}
private final boolean checkPackPBODisabled(boolean throwException) {
- initBufferObjectExtensionChecks();
return checkBufferObject(haveGL21 || haveARBPixelBufferObject || haveEXTPixelBufferObject,
false, // allowVAO
false, // enable
@@ -174,7 +363,6 @@ private final boolean checkPackPBODisabled(boolean throwException) {
}
private final boolean checkPackPBOEnabled(boolean throwException) {
- initBufferObjectExtensionChecks();
return checkBufferObject(haveGL21 || haveARBPixelBufferObject || haveEXTPixelBufferObject,
false, // allowVAO
true, // enable
@@ -192,87 +380,21 @@ public final boolean glIsPBOUnpackEnabled() {
return checkUnpackPBOEnabled(false);
}
-private final HashMap LPVOID glMapBuffer(GLenum target, GLenum access);
*/
+/** Entry point to C language function: void * {@native glMapBuffer}(GLenum target, GLenum access);
GL_VERSION_1_5
; GL_OES_mapbuffer
*/
public final java.nio.ByteBuffer glMapBuffer(int target, int access) {
- final long __addr_ = ((GL4bcProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapBuffer;
- if (__addr_ == 0) {
- throw new GLException("Method \"glMapBuffer\" not available");
- }
- final long sz = bufferSizeTracker.getBufferSize(bufferStateTracker, target, this);
- if (0 == sz) {
- return null;
- }
- final long addr = dispatch_glMapBuffer(target, access, __addr_);
- if (0 == addr) {
- return null;
- }
- ByteBuffer buffer;
- MemoryObject memObj0 = new MemoryObject(addr, sz); // object and key
- MemoryObject memObj1 = MemoryObject.getOrAddSafe(arbMemCache, memObj0);
- if(memObj0 == memObj1) {
- // just added ..
- if(null != memObj0.getBuffer()) {
- throw new InternalError();
- }
- buffer = newDirectByteBuffer(addr, sz);
- Buffers.nativeOrder(buffer);
- memObj0.setBuffer(buffer);
- } else {
- // already mapped
- buffer = memObj1.getBuffer();
- if(null == buffer) {
- throw new InternalError();
- }
- }
- buffer.position(0);
- return buffer;
+ return glMapBufferImpl(target, false, 0, 0, access, ((GL4bcProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapBuffer);
}
-/** Encapsulates function pointer for OpenGL function LPVOID glMapBuffer(GLenum target, GLenum access);
*/
-native private long dispatch_glMapBuffer(int target, int access, long glProcAddress);
+/** Entry point to C language function: void * {@native glMapBufferRange}(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
GL_ES_VERSION_3_0
, GL_VERSION_3_0
; GL_EXT_map_buffer_range
*/
+public final ByteBuffer glMapBufferRange(int target, long offset, long length, int access) {
+ return glMapBufferImpl(target, true, offset, length, access, ((GL4bcProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapBufferRange);
+}
/** Entry point to C language function: GLvoid * {@native glMapNamedBufferEXT}(GLuint buffer, GLenum access);
GL_EXT_direct_state_access
*/
public final java.nio.ByteBuffer glMapNamedBufferEXT(int bufferName, int access) {
- final long __addr_ = ((GL4bcProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapNamedBufferEXT;
- if (__addr_ == 0) {
- throw new GLException("Method \"glMapNamedBufferEXT\" not available");
- }
- final long sz = bufferSizeTracker.getDirectStateBufferSize(bufferName, this);
- if (0 == sz) {
- return null;
- }
- final long addr = dispatch_glMapNamedBufferEXT(bufferName, access, __addr_);
- if (0 == addr) {
- return null;
- }
- ByteBuffer buffer;
- MemoryObject memObj0 = new MemoryObject(addr, sz); // object and key
- MemoryObject memObj1 = MemoryObject.getOrAddSafe(arbMemCache, memObj0);
- if(memObj0 == memObj1) {
- // just added ..
- if(null != memObj0.getBuffer()) {
- throw new InternalError();
- }
- buffer = newDirectByteBuffer(addr, sz);
- Buffers.nativeOrder(buffer);
- memObj0.setBuffer(buffer);
- } else {
- // already mapped
- buffer = memObj1.getBuffer();
- if(null == buffer) {
- throw new InternalError();
- }
- }
- buffer.position(0);
- return buffer;
+ return glMapNamedBufferImpl(bufferName, access, ((GL4bcProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapNamedBufferEXT);
}
-private native long dispatch_glMapNamedBufferEXT(int buffer, int access, long procAddress);
-
-native private ByteBuffer newDirectByteBuffer(long addr, long capacity);
-
@Override
public final void glVertexPointer(GLArrayData array) {
if(array.getComponentCount()==0) return;
diff --git a/make/config/jogl/gl-impl-CustomJavaCode-gles1.java b/make/config/jogl/gl-impl-CustomJavaCode-gles1.java
index 70425689a..2fa83dca6 100644
--- a/make/config/jogl/gl-impl-CustomJavaCode-gles1.java
+++ b/make/config/jogl/gl-impl-CustomJavaCode-gles1.java
@@ -47,6 +47,11 @@ public final boolean isGLES2() {
return false;
}
+@Override
+public final boolean isGLES3() {
+ return false;
+}
+
@Override
public final boolean isGLES() {
return true;
@@ -62,11 +67,26 @@ public final boolean isGL2ES2() {
return false;
}
+@Override
+public final boolean isGL3ES3() {
+ return false;
+}
+
+@Override
+public final boolean isGL4ES3() {
+ return false;
+}
+
@Override
public final boolean isGLES2Compatible() {
return false;
}
+@Override
+public final boolean isGLES3Compatible() {
+ return false;
+}
+
@Override
public final boolean isGL2GL3() {
return false;
@@ -117,6 +137,11 @@ public final GLES2 getGLES2() throws GLException {
throw new GLException("Not a GLES2 implementation");
}
+@Override
+public final GLES3 getGLES3() throws GLException {
+ throw new GLException("Not a GLES3 implementation");
+}
+
@Override
public final GL2ES1 getGL2ES1() throws GLException {
return this;
@@ -127,6 +152,16 @@ public final GL2ES2 getGL2ES2() throws GLException {
throw new GLException("Not a GL2ES2 implementation");
}
+@Override
+public final GL3ES3 getGL3ES3() throws GLException {
+ throw new GLException("Not a GL3ES3 implementation");
+}
+
+@Override
+public final GL4ES3 getGL4ES3() throws GLException {
+ throw new GLException("Not a GL4ES3 implementation");
+}
+
@Override
public final GL2GL3 getGL2GL3() throws GLException {
throw new GLException("Not a GL2GL3 implementation");
@@ -206,48 +241,15 @@ private final boolean checkPackPBOEnabled(boolean throwException) {
return false;
}
-private final HashMap LPVOID glMapBuffer(GLenum target, GLenum access);
*/
+/** Entry point to C language function: void * {@native glMapBuffer}(GLenum target, GLenum access);
GL_VERSION_1_5
; GL_OES_mapbuffer
*/
public final java.nio.ByteBuffer glMapBuffer(int target, int access) {
- final long __addr_ = ((GLES1ProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapBuffer;
- if (__addr_ == 0) {
- throw new GLException("Method \"glMapBuffer\" not available");
- }
- final long sz = bufferSizeTracker.getBufferSize(bufferStateTracker, target, this);
- if (0 == sz) {
- return null;
- }
- final long addr = dispatch_glMapBuffer(target, access, __addr_);
- if (0 == addr) {
- return null;
- }
- ByteBuffer buffer;
- MemoryObject memObj0 = new MemoryObject(addr, sz); // object and key
- MemoryObject memObj1 = MemoryObject.getOrAddSafe(arbMemCache, memObj0);
- if(memObj0 == memObj1) {
- // just added ..
- if(null != memObj0.getBuffer()) {
- throw new InternalError();
- }
- buffer = newDirectByteBuffer(addr, sz);
- Buffers.nativeOrder(buffer);
- memObj0.setBuffer(buffer);
- } else {
- // already mapped
- buffer = memObj1.getBuffer();
- if(null == buffer) {
- throw new InternalError();
- }
- }
- buffer.position(0);
- return buffer;
+ return glMapBufferImpl(target, false, 0, 0, access, ((GLES1ProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapBuffer);
}
-/** Encapsulates function pointer for OpenGL function LPVOID glMapBuffer(GLenum target, GLenum access);
*/
-native private long dispatch_glMapBuffer(int target, int access, long glProcAddress);
-
-native private ByteBuffer newDirectByteBuffer(long addr, long capacity);
+/** Entry point to C language function: void * {@native glMapBufferRange}(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
GL_ES_VERSION_3_0
, GL_VERSION_3_0
; GL_EXT_map_buffer_range
*/
+public final ByteBuffer glMapBufferRange(int target, long offset, long length, int access) {
+ return glMapBufferImpl(target, true, offset, length, access, ((GLES1ProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapBufferRange);
+}
@Override
public final void glVertexPointer(GLArrayData array) {
diff --git a/make/config/jogl/gl-impl-CustomJavaCode-gles2.java b/make/config/jogl/gl-impl-CustomJavaCode-gles2.java
deleted file mode 100644
index 37f3f33aa..000000000
--- a/make/config/jogl/gl-impl-CustomJavaCode-gles2.java
+++ /dev/null
@@ -1,262 +0,0 @@
-
-public GLES2Impl(GLProfile glp, GLContextImpl context) {
- this._context = context;
- if(null != context) {
- this.bufferSizeTracker = context.getBufferSizeTracker();
- this.bufferStateTracker = context.getBufferStateTracker();
- this.glStateTracker = context.getGLStateTracker();
- } else {
- this.bufferSizeTracker = null;
- this.bufferStateTracker = null;
- this.glStateTracker = null;
- }
- this.glProfile = glp;
-}
-
-@Override
-public final boolean isGL4bc() {
- return false;
-}
-
-@Override
-public final boolean isGL4() {
- return false;
-}
-
-@Override
-public final boolean isGL3bc() {
- return false;
-}
-
-@Override
-public final boolean isGL3() {
- return false;
-}
-
-public final boolean isGL2() {
- return false;
-}
-
-@Override
-public final boolean isGLES1() {
- return false;
-}
-
-@Override
-public final boolean isGLES2() {
- return true;
-}
-
-@Override
-public final boolean isGLES() {
- return true;
-}
-
-@Override
-public final boolean isGL2ES1() {
- return false;
-}
-
-@Override
-public final boolean isGL2ES2() {
- return true;
-}
-
-@Override
-public final boolean isGLES2Compatible() {
- return true;
-}
-
-@Override
-public final boolean isGL2GL3() {
- return false;
-}
-
-@Override
-public final boolean hasGLSL() {
- return true;
-}
-
-@Override
-public boolean isNPOTTextureAvailable() {
- return true;
-}
-
-@Override
-public final GL4bc getGL4bc() throws GLException {
- throw new GLException("Not a GL4bc implementation");
-}
-
-@Override
-public final GL4 getGL4() throws GLException {
- throw new GLException("Not a GL4 implementation");
-}
-
-@Override
-public final GL3bc getGL3bc() throws GLException {
- throw new GLException("Not a GL3bc implementation");
-}
-
-@Override
-public final GL3 getGL3() throws GLException {
- throw new GLException("Not a GL3 implementation");
-}
-
-@Override
-public final GL2 getGL2() throws GLException {
- throw new GLException("Not a GL2 implementation");
-}
-
-@Override
-public final GLES1 getGLES1() throws GLException {
- throw new GLException("Not a GLES1 implementation");
-}
-
-@Override
-public final GLES2 getGLES2() throws GLException {
- return this;
-}
-
-@Override
-public final GL2ES1 getGL2ES1() throws GLException {
- throw new GLException("Not a GL2ES1 implementation");
-}
-
-@Override
-public final GL2ES2 getGL2ES2() throws GLException {
- return this;
-}
-
-@Override
-public final GL2GL3 getGL2GL3() throws GLException {
- throw new GLException("Not a GL2GL3 implementation");
-}
-
-//
-// Helpers for ensuring the correct amount of texture data
-//
-
-private final GLBufferSizeTracker bufferSizeTracker;
-private final GLBufferStateTracker bufferStateTracker;
-private final GLStateTracker glStateTracker;
-
-private final boolean checkBufferObject(boolean enabled,
- int state,
- String kind, boolean throwException) {
- final int buffer = bufferStateTracker.getBoundBufferObject(state, this);
- if (enabled) {
- if (0 == buffer) {
- if(throwException) {
- throw new GLException(kind + " must be enabled to call this method");
- }
- return false;
- }
- } else {
- if (0 != buffer) {
- if(throwException) {
- throw new GLException(kind + " must be disabled to call this method");
- }
- return false;
- }
- }
- return true;
-}
-
-private final boolean checkArrayVBODisabled(boolean throwException) {
- return checkBufferObject(false, // enabled
- GL.GL_ARRAY_BUFFER,
- "array vertex_buffer_object", throwException);
-}
-
-private final boolean checkArrayVBOEnabled(boolean throwException) {
- return checkBufferObject(true, // enabled
- GL.GL_ARRAY_BUFFER,
- "array vertex_buffer_object", throwException);
-}
-
-private final boolean checkElementVBODisabled(boolean throwException) {
- return checkBufferObject(false, // enabled
- GL.GL_ELEMENT_ARRAY_BUFFER,
- "element vertex_buffer_object", throwException);
-}
-
-private final boolean checkElementVBOEnabled(boolean throwException) {
- return checkBufferObject(true, // enabled
- GL.GL_ELEMENT_ARRAY_BUFFER,
- "element vertex_buffer_object", throwException);
-}
-
-private final boolean checkUnpackPBODisabled(boolean throwException) {
- // PBO n/a for ES 1.1 or ES 2.0
- return true;
-}
-
-private final boolean checkUnpackPBOEnabled(boolean throwException) {
- // PBO n/a for ES 1.1 or ES 2.0
- return false;
-}
-
-private final boolean checkPackPBODisabled(boolean throwException) {
- // PBO n/a for ES 1.1 or ES 2.0
- return true;
-}
-
-private final boolean checkPackPBOEnabled(boolean throwException) {
- // PBO n/a for ES 1.1 or ES 2.0
- return false;
-}
-
-private final HashMap LPVOID glMapBuffer(GLenum target, GLenum access);
*/
-@Override
-public final java.nio.ByteBuffer glMapBuffer(int target, int access) {
- final long __addr_ = ((GLES2ProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapBuffer;
- if (__addr_ == 0) {
- throw new GLException("Method \"glMapBuffer\" not available");
- }
- final long sz = bufferSizeTracker.getBufferSize(bufferStateTracker, target, this);
- if (0 == sz) {
- return null;
- }
- final long addr = dispatch_glMapBuffer(target, access, __addr_);
- if (0 == addr) {
- return null;
- }
- ByteBuffer buffer;
- MemoryObject memObj0 = new MemoryObject(addr, sz); // object and key
- MemoryObject memObj1 = MemoryObject.getOrAddSafe(arbMemCache, memObj0);
- if(memObj0 == memObj1) {
- // just added ..
- if(null != memObj0.getBuffer()) {
- throw new InternalError();
- }
- buffer = newDirectByteBuffer(addr, sz);
- Buffers.nativeOrder(buffer);
- memObj0.setBuffer(buffer);
- } else {
- // already mapped
- buffer = memObj1.getBuffer();
- if(null == buffer) {
- throw new InternalError();
- }
- }
- buffer.position(0);
- return buffer;
-}
-
-/** Encapsulates function pointer for OpenGL function LPVOID glMapBuffer(GLenum target, GLenum access);
*/
-native private long dispatch_glMapBuffer(int target, int access, long glProcAddress);
-
-native private ByteBuffer newDirectByteBuffer(long addr, long capacity);
-
-@Override
-public final void glClearDepth(double depth) {
- glClearDepthf((float)depth);
-}
-
-@Override
-public final void glDepthRange(double zNear, double zFar) {
- glDepthRangef((float)zNear, (float)zFar);
-}
-
diff --git a/make/config/jogl/gl-impl-CustomJavaCode-gles3.java b/make/config/jogl/gl-impl-CustomJavaCode-gles3.java
new file mode 100644
index 000000000..e0b0c6a09
--- /dev/null
+++ b/make/config/jogl/gl-impl-CustomJavaCode-gles3.java
@@ -0,0 +1,320 @@
+
+public GLES3Impl(GLProfile glp, GLContextImpl context) {
+ this._context = context;
+ if(null != context) {
+ this.bufferSizeTracker = context.getBufferSizeTracker();
+ this.bufferStateTracker = context.getBufferStateTracker();
+ this.glStateTracker = context.getGLStateTracker();
+ } else {
+ this.bufferSizeTracker = null;
+ this.bufferStateTracker = null;
+ this.glStateTracker = null;
+ }
+ this.glProfile = glp;
+ this._isES3 = glp.getImplName() == GLProfile.GLES3;
+}
+
+@Override
+public final boolean isGL4bc() {
+ return false;
+}
+
+@Override
+public final boolean isGL4() {
+ return false;
+}
+
+@Override
+public final boolean isGL3bc() {
+ return false;
+}
+
+@Override
+public final boolean isGL3() {
+ return false;
+}
+
+public final boolean isGL2() {
+ return false;
+}
+
+@Override
+public final boolean isGLES1() {
+ return false;
+}
+
+@Override
+public final boolean isGLES2() {
+ return true;
+}
+
+@Override
+public final boolean isGLES3() {
+ return _isES3;
+}
+
+@Override
+public final boolean isGLES() {
+ return true;
+}
+
+@Override
+public final boolean isGL2ES1() {
+ return false;
+}
+
+@Override
+public final boolean isGL2ES2() {
+ return true;
+}
+
+@Override
+public final boolean isGL3ES3() {
+ return _isES3;
+}
+
+@Override
+public final boolean isGL4ES3() {
+ return _isES3;
+}
+
+@Override
+public final boolean isGLES2Compatible() {
+ return true;
+}
+
+@Override
+public final boolean isGLES3Compatible() {
+ return _isES3;
+}
+
+
+@Override
+public final boolean isGL2GL3() {
+ return false;
+}
+
+@Override
+public final boolean hasGLSL() {
+ return true;
+}
+
+@Override
+public boolean isNPOTTextureAvailable() {
+ return true;
+}
+
+@Override
+public final GL4bc getGL4bc() throws GLException {
+ throw new GLException("Not a GL4bc implementation");
+}
+
+@Override
+public final GL4 getGL4() throws GLException {
+ throw new GLException("Not a GL4 implementation");
+}
+
+@Override
+public final GL3bc getGL3bc() throws GLException {
+ throw new GLException("Not a GL3bc implementation");
+}
+
+@Override
+public final GL3 getGL3() throws GLException {
+ throw new GLException("Not a GL3 implementation");
+}
+
+@Override
+public final GL2 getGL2() throws GLException {
+ throw new GLException("Not a GL2 implementation");
+}
+
+@Override
+public final GLES1 getGLES1() throws GLException {
+ throw new GLException("Not a GLES1 implementation");
+}
+
+@Override
+public final GLES2 getGLES2() throws GLException {
+ return this;
+}
+
+@Override
+public final GLES3 getGLES3() throws GLException {
+ return this;
+}
+
+@Override
+public final GL2ES1 getGL2ES1() throws GLException {
+ throw new GLException("Not a GL2ES1 implementation");
+}
+
+@Override
+public final GL2ES2 getGL2ES2() throws GLException {
+ return this;
+}
+
+@Override
+public final GL3ES3 getGL3ES3() throws GLException {
+ if(!_isES3) {
+ throw new GLException("Not a GL3ES3 implementation");
+ }
+ return this;
+}
+
+@Override
+public final GL4ES3 getGL4ES3() throws GLException {
+ if(!_isES3) {
+ throw new GLException("Not a GL4ES3 implementation");
+ }
+ return this;
+}
+
+@Override
+public final GL2GL3 getGL2GL3() throws GLException {
+ throw new GLException("Not a GL2GL3 implementation");
+}
+
+//
+// Helpers for ensuring the correct amount of texture data
+//
+
+private final boolean _isES3;
+private final GLBufferSizeTracker bufferSizeTracker;
+private final GLBufferStateTracker bufferStateTracker;
+private final GLStateTracker glStateTracker;
+
+private final boolean checkBufferObject(boolean extensionAvail,
+ boolean allowVAO,
+ boolean enabled,
+ int state,
+ String kind, boolean throwException) {
+ if ( !extensionAvail ) {
+ if ( !enabled ) {
+ return true;
+ }
+ if(throwException) {
+ throw new GLException("Required extensions not available to call this function");
+ }
+ return false;
+ }
+ int buffer = bufferStateTracker.getBoundBufferObject(state, this);
+ if ( enabled ) {
+ if ( 0 != buffer ) {
+ return true;
+ }
+ if ( allowVAO ) {
+ buffer = bufferStateTracker.getBoundBufferObject(GLES3.GL_VERTEX_ARRAY_BINDING, this);
+ if( 0 != buffer && !_context.isDefaultVAO(buffer) ) {
+ return true;
+ }
+ }
+ if ( throwException ) {
+ throw new GLException(kind + " must be enabled to call this method");
+ }
+ return false;
+ } else {
+ if ( 0 == buffer ) {
+ return true;
+ }
+ if ( throwException ) {
+ throw new GLException(kind + " must be disabled to call this method");
+ }
+ return false;
+ }
+}
+
+private final boolean checkArrayVBODisabled(boolean throwException) {
+ return checkBufferObject(true,
+ _isES3, // allowVAO
+ false, // enable
+ GL.GL_ARRAY_BUFFER,
+ "array vertex_buffer_object", throwException);
+}
+
+private final boolean checkArrayVBOEnabled(boolean throwException) {
+ return checkBufferObject(true,
+ _isES3, // allowVAO
+ true, // enable
+ GL.GL_ARRAY_BUFFER,
+ "array vertex_buffer_object", throwException);
+}
+
+private final boolean checkElementVBODisabled(boolean throwException) {
+ return checkBufferObject(true,
+ _isES3, // allowVAO
+ false, // enable
+ GL.GL_ELEMENT_ARRAY_BUFFER,
+ "element vertex_buffer_object", throwException);
+}
+
+private final boolean checkElementVBOEnabled(boolean throwException) {
+ return checkBufferObject(true,
+ _isES3, // allowVAO
+ true, // enable
+ GL.GL_ELEMENT_ARRAY_BUFFER,
+ "element vertex_buffer_object", throwException);
+}
+
+private final boolean checkUnpackPBODisabled(boolean throwException) {
+ return checkBufferObject(_isES3,
+ false, // allowVAO
+ false, // enable
+ GL2.GL_PIXEL_UNPACK_BUFFER,
+ "unpack pixel_buffer_object", throwException);
+}
+
+private final boolean checkUnpackPBOEnabled(boolean throwException) {
+ return checkBufferObject(_isES3,
+ false, // allowVAO
+ true, // enable
+ GL2.GL_PIXEL_UNPACK_BUFFER,
+ "unpack pixel_buffer_object", throwException);
+}
+
+private final boolean checkPackPBODisabled(boolean throwException) {
+ return checkBufferObject(_isES3,
+ false, // allowVAO
+ false, // enable
+ GL2.GL_PIXEL_PACK_BUFFER,
+ "pack pixel_buffer_object", throwException);
+}
+
+private final boolean checkPackPBOEnabled(boolean throwException) {
+ return checkBufferObject(_isES3,
+ false, // allowVAO
+ true, // enable
+ GL2.GL_PIXEL_PACK_BUFFER,
+ "pack pixel_buffer_object", throwException);
+}
+
+@Override
+public final boolean glIsPBOPackEnabled() {
+ return checkPackPBOEnabled(false);
+}
+
+@Override
+public final boolean glIsPBOUnpackEnabled() {
+ return checkUnpackPBOEnabled(false);
+}
+
+/** Entry point to C language function: void * {@native glMapBuffer}(GLenum target, GLenum access);
GL_VERSION_1_5
; GL_OES_mapbuffer
*/
+public final java.nio.ByteBuffer glMapBuffer(int target, int access) {
+ return glMapBufferImpl(target, false, 0, 0, access, ((GLES3ProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapBuffer);
+}
+
+/** Entry point to C language function: void * {@native glMapBufferRange}(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
GL_ES_VERSION_3_0
, GL_VERSION_3_0
; GL_EXT_map_buffer_range
*/
+public final ByteBuffer glMapBufferRange(int target, long offset, long length, int access) {
+ return glMapBufferImpl(target, true, offset, length, access, ((GLES3ProcAddressTable)_context.getGLProcAddressTable())._addressof_glMapBufferRange);
+}
+
+@Override
+public final void glClearDepth(double depth) {
+ glClearDepthf((float)depth);
+}
+
+@Override
+public final void glDepthRange(double zNear, double zFar) {
+ glDepthRangef((float)zNear, (float)zFar);
+}
+
diff --git a/make/config/jogl/gl2_es2-CustomJavaCode.cfg b/make/config/jogl/gl2_es2-CustomJavaCode.cfg
new file mode 100644
index 000000000..b769f3b29
--- /dev/null
+++ b/make/config/jogl/gl2_es2-CustomJavaCode.cfg
@@ -0,0 +1,13 @@
+
+JavaPrologue glReleaseShaderCompiler if ( !_context.isGLES2Compatible() ) {
+JavaPrologue glReleaseShaderCompiler return;
+JavaPrologue glReleaseShaderCompiler }
+
+JavaPrologue glShaderBinary if ( !_context.isGLES2Compatible() ) {
+JavaPrologue glShaderBinary throw new GLException("Method \"glShaderBinary\" not available");
+JavaPrologue glShaderBinary }
+
+JavaPrologue glGetShaderPrecisionFormat if ( !_context.isGLES2Compatible() ) {
+JavaPrologue glGetShaderPrecisionFormat throw new GLException("Method \"glGetShaderPrecisionFormat\" not available");
+JavaPrologue glGetShaderPrecisionFormat }
+
diff --git a/make/config/jogl/gl2_es2-common.cfg b/make/config/jogl/gl2_es2-common.cfg
index b769f3b29..2ad7fd3fd 100644
--- a/make/config/jogl/gl2_es2-common.cfg
+++ b/make/config/jogl/gl2_es2-common.cfg
@@ -1,13 +1,11 @@
-JavaPrologue glReleaseShaderCompiler if ( !_context.isGLES2Compatible() ) {
-JavaPrologue glReleaseShaderCompiler return;
-JavaPrologue glReleaseShaderCompiler }
+RenameExtensionIntoCore GL_KHR_debug
+RenameExtensionIntoCore GL_OES_texture_3D
+RenameExtensionIntoCore GL_OES_get_program_binary
+RenameExtensionIntoCore GL_OES_required_internalformat
+RenameExtensionIntoCore GL_EXT_unpack_subimage
-JavaPrologue glShaderBinary if ( !_context.isGLES2Compatible() ) {
-JavaPrologue glShaderBinary throw new GLException("Method \"glShaderBinary\" not available");
-JavaPrologue glShaderBinary }
+ForceExtension GL_EXT_occlusion_query_boolean
-JavaPrologue glGetShaderPrecisionFormat if ( !_context.isGLES2Compatible() ) {
-JavaPrologue glGetShaderPrecisionFormat throw new GLException("Method \"glGetShaderPrecisionFormat\" not available");
-JavaPrologue glGetShaderPrecisionFormat }
+ForceExtension GL_ARB_ES2_compatibility
diff --git a/make/config/jogl/gl2_es3-common.cfg b/make/config/jogl/gl2_es3-common.cfg
new file mode 100644
index 000000000..b5326b159
--- /dev/null
+++ b/make/config/jogl/gl2_es3-common.cfg
@@ -0,0 +1,9 @@
+
+RenameExtensionIntoCore GL_KHR_debug
+RenameExtensionIntoCore GL_OES_texture_3D
+IgnoreExtension GL_OES_get_program_binary
+RenameExtensionIntoCore GL_OES_required_internalformat
+RenameExtensionIntoCore GL_EXT_unpack_subimage
+
+ForceExtension GL_EXT_occlusion_query_boolean
+
diff --git a/make/config/jogl/gl3-common.cfg b/make/config/jogl/gl3-common.cfg
new file mode 100644
index 000000000..e11c50aa3
--- /dev/null
+++ b/make/config/jogl/gl3-common.cfg
@@ -0,0 +1,9 @@
+
+ForceExtension GL_ARB_debug_output
+RenameExtensionIntoCore GL_KHR_debug
+
+RenameExtensionIntoCore GL_OES_texture_3D
+IgnoreExtension GL_OES_get_program_binary
+RenameExtensionIntoCore GL_OES_required_internalformat
+RenameExtensionIntoCore GL_EXT_unpack_subimage
+
diff --git a/make/config/jogl/gl3-desktop.cfg b/make/config/jogl/gl3-desktop.cfg
index 96e59aa05..4a2c53371 100644
--- a/make/config/jogl/gl3-desktop.cfg
+++ b/make/config/jogl/gl3-desktop.cfg
@@ -1,11 +1,6 @@
# This .cfg file provides common options used by the desktop OpenGL
# implementation on all platforms.
-# Inform the glue code generator of the association between #defines
-# and functions and the extensions in which they are defined
-GLHeader GL3/gl3.h
-GLHeader GL3/gl3ext.h
-
#Include gl-desktop-tracker.cfg
#
diff --git a/make/config/jogl/gl3-headers.cfg b/make/config/jogl/gl3-headers.cfg
index 8b35a07b4..7ab5099c9 100644
--- a/make/config/jogl/gl3-headers.cfg
+++ b/make/config/jogl/gl3-headers.cfg
@@ -1,7 +1,6 @@
CustomCCode #include ");
+ writer.print(funcSym.getType().toString(symbolRenamed, tagNativeBinding));
+ writer.print("
");
+
newComment.append("+ * Remark: ES3 compatible desktop profiles are not included. + * To query whether core ES3 functionality is provided, use {@link #isGLES3Compatible()}. + *
+ * @see #isGLES3Compatible() + */ + public boolean isGLES3(); + /** * Indicates whether this GL object conforms to one of the OpenGL ES profiles, * see {@link #isGLES1()} and {@link #isGLES2()}. @@ -146,6 +156,21 @@ public interface GLBase { */ public boolean isGL2ES2(); + /** + * Indicates whether this GL object conforms to a GL3ES3 compatible profile. + */ + public boolean isGL3ES3(); + + /** + * Indicates whether this GL object conforms to a GL4ES3 compatible profile. + */ + public boolean isGL4ES3(); + + /** + * Indicates whether this GL object conforms to a GL2GL3 compatible profile. + */ + public boolean isGL2GL3(); + /** * Indicates whether this GL object is compatible with the core OpenGL ES2 functionality. * @return true if this context is an ES2 context or implements @@ -154,9 +179,11 @@ public interface GLBase { public boolean isGLES2Compatible(); /** - * Indicates whether this GL object conforms to a GL2GL3 compatible profile. + * Indicates whether this GL object is compatible with the core OpenGL ES3 functionality. + * @return true if this context is an ES3 context or implements + * the extensionGL_ARB_ES3_compatibility
, otherwise false
*/
- public boolean isGL2GL3();
+ public boolean isGLES3Compatible();
/** Indicates whether this GL object supports GLSL. */
public boolean hasGLSL();
@@ -209,6 +236,12 @@ public interface GLBase {
*/
public GLES2 getGLES2() throws GLException;
+ /**
+ * Casts this object to the GLES3 interface.
+ * @throws GLException if this GLObject is not a GLES3 implementation
+ */
+ public GLES3 getGLES3() throws GLException;
+
/**
* Casts this object to the GL2ES1 interface.
* @throws GLException if this GLObject is not a GL2ES1 implementation
@@ -221,6 +254,18 @@ public interface GLBase {
*/
public GL2ES2 getGL2ES2() throws GLException;
+ /**
+ * Casts this object to the GL3ES3 interface.
+ * @throws GLException if this GLObject is not a GL3ES3 implementation
+ */
+ public GL3ES3 getGL3ES3() throws GLException;
+
+ /**
+ * Casts this object to the GL4ES3 interface.
+ * @throws GLException if this GLObject is not a GL3ES3 implementation
+ */
+ public GL4ES3 getGL4ES3() throws GLException;
+
/**
* Casts this object to the GL2GL3 interface.
* @throws GLException if this GLObject is not a GL2GL3 implementation
diff --git a/src/jogl/classes/javax/media/opengl/GLContext.java b/src/jogl/classes/javax/media/opengl/GLContext.java
index daede5ac0..b27db18af 100644
--- a/src/jogl/classes/javax/media/opengl/GLContext.java
+++ b/src/jogl/classes/javax/media/opengl/GLContext.java
@@ -142,6 +142,13 @@ public abstract class GLContext {
protected static final VersionNumber Version800 = new VersionNumber(8, 0, 0);
+ //
+ // Cached keys, bits [0..15]
+ //
+
+ /** Cached bit mask covering bits [0..15], i.e. {@value}. */
+ protected static final int CTX_IMPL_CACHE_MASK = 0x0000FFFF;
+
/** ARB_create_context
related: created via ARB_create_context. Cache key value. See {@link #getAvailableContextProperties(AbstractGraphicsDevice, GLProfile)}. */
protected static final int CTX_IS_ARB_CREATED = 1 << 0;
/** ARB_create_context
related: desktop compatibility profile. Cache key value. See {@link #isGLCompatibilityProfile()}, {@link #getAvailableContextProperties(AbstractGraphicsDevice, GLProfile)}. */
@@ -154,20 +161,36 @@ public abstract class GLContext {
protected static final int CTX_OPTION_FORWARD = 1 << 4;
/** ARB_create_context
related: flag debug. Cache key value. See {@link #setContextCreationFlags(int)}, {@link GLAutoDrawable#setContextCreationFlags(int)}, {@link #getAvailableContextProperties(AbstractGraphicsDevice, GLProfile)}. */
public static final int CTX_OPTION_DEBUG = 1 << 5;
+ /** Context uses software rasterizer, otherwise hardware rasterizer. Cache key value. See {@link #isHardwareRasterizer()}, {@link #getAvailableContextProperties(AbstractGraphicsDevice, GLProfile)}. */
+ protected static final int CTX_IMPL_ACCEL_SOFT = 1 << 6;
+ //
+ // Non cached keys, bits [16..31]
+ //
+
/** GL_ARB_ES2_compatibility
implementation related: Context is compatible w/ ES2. Not a cache key. See {@link #isGLES2Compatible()}, {@link #getAvailableContextProperties(AbstractGraphicsDevice, GLProfile)}. */
- protected static final int CTX_IMPL_ES2_COMPAT = 1 << 8;
+ protected static final int CTX_IMPL_ES2_COMPAT = 1 << 16;
- /** Context supports basic FBO, details see {@link #hasBasicFBOSupport()}.
+ /** GL_ARB_ES3_compatibility
implementation related: Context is compatible w/ ES3. Not a cache key. See {@link #isGLES3Compatible()}, {@link #getAvailableContextProperties(AbstractGraphicsDevice, GLProfile)}. */
+ protected static final int CTX_IMPL_ES3_COMPAT = 1 << 17;
+
+ /**
+ * Context supports basic FBO, details see {@link #hasBasicFBOSupport()}.
* Not a cache key.
* @see #hasBasicFBOSupport()
* @see #getAvailableContextProperties(AbstractGraphicsDevice, GLProfile)
*/
- protected static final int CTX_IMPL_FBO = 1 << 9;
-
- /** Context uses software rasterizer, otherwise hardware rasterizer. Cache key value. See {@link #isHardwareRasterizer()}, {@link #getAvailableContextProperties(AbstractGraphicsDevice, GLProfile)}. */
- protected static final int CTX_IMPL_ACCEL_SOFT = 1 << 15;
+ protected static final int CTX_IMPL_FBO = 1 << 18;
+ /**
+ * Context supports OES_single_precision
, fp32, fixed function point (FFP) compatibility entry points,
+ * see {@link #hasFP32CompatAPI()}.
+ * Not a cache key.
+ * @see #hasFP32CompatAPI()
+ * @see #getAvailableContextProperties(AbstractGraphicsDevice, GLProfile)
+ */
+ protected static final int CTX_IMPL_FP32_COMPAT_API = 1 << 19;
+
private static final ThreadLocalGL_ARB_ES2_compatibility
, otherwise false
+ * the extension GL_ARB_ES3_compatibility
or GL_ARB_ES2_compatibility
, otherwise false
*/
public final boolean isGLES2Compatible() {
- return 0 != ( ctxOptions & CTX_IMPL_ES2_COMPAT ) ;
+ return 0 != ( ctxOptions & ( CTX_IMPL_ES3_COMPAT | CTX_IMPL_ES2_COMPAT ) ) ;
+ }
+
+ /**
+ * @return true if this context is an ES3 context or implements
+ * the extension GL_ARB_ES3_compatibility
, otherwise false
+ */
+ public final boolean isGLES3Compatible() {
+ return 0 != ( ctxOptions & CTX_IMPL_ES3_COMPAT ) ;
}
/**
@@ -819,6 +850,15 @@ public abstract class GLContext {
return 0 != ( ctxOptions & CTX_IMPL_FBO ) ;
}
+ /**
+ * Returns true
if OES_single_precision
, fp32, fixed function point (FFP) compatibility entry points available,
+ * otherwise false
.
+ * @see #CTX_IMPL_FP32_COMPAT_API
+ */
+ public final boolean hasFP32CompatAPI() {
+ return 0 != ( ctxOptions & CTX_IMPL_FP32_COMPAT_API ) ;
+ }
+
/**
* Returns true
if full FBO support is available, otherwise false
.
* @@ -895,28 +935,30 @@ public abstract class GLContext { /** @see GLProfile#isGL3bc() */ public final boolean isGL3bc() { - return ctxVersion.compareTo(Version310) >= 0 - && 0 != (ctxOptions & CTX_IS_ARB_CREATED) - && 0 != (ctxOptions & CTX_PROFILE_COMPAT); + return 0 != (ctxOptions & CTX_IS_ARB_CREATED) && + 0 != (ctxOptions & CTX_PROFILE_COMPAT) && + ctxVersion.compareTo(Version310) >= 0 ; } /** @see GLProfile#isGL3() */ public final boolean isGL3() { - return ctxVersion.compareTo(Version310) >= 0 - && 0 != (ctxOptions & CTX_IS_ARB_CREATED) - && 0 != (ctxOptions & (CTX_PROFILE_COMPAT|CTX_PROFILE_CORE)); + return 0 != (ctxOptions & CTX_IS_ARB_CREATED) && + 0 != (ctxOptions & (CTX_PROFILE_COMPAT|CTX_PROFILE_CORE)) && + ctxVersion.compareTo(Version310) >= 0 ; } - /** Indicates whether this profile is capable of GL3 (core only). GL3 starts w/ OpenGL 3.1
Includes [ GL4, GL3 ].
*/ + /** Indicates whether this profile is capable of GL3 (core only). GL3 starts w/ OpenGL 3.1Includes [ GL4, GL3, GLES3 ].
*/ public final boolean isGL3core() { - return ctxVersion.compareTo(Version310) >= 0 - && 0 != (ctxOptions & CTX_IS_ARB_CREATED) - && 0 != (ctxOptions & CTX_PROFILE_CORE); + return ( 0 != ( ctxOptions & CTX_PROFILE_ES ) && ctxVersion.getMajor() >= 3 ) || + ( 0 != ( ctxOptions & CTX_IS_ARB_CREATED ) && + 0 != ( ctxOptions & CTX_PROFILE_CORE ) && + ctxVersion.compareTo(Version310) >= 0 + ) ; } /** @see GLProfile#isGL2() */ public final boolean isGL2() { - return ctxVersion.getMajor()>=1 && 0!=(ctxOptions & CTX_PROFILE_COMPAT); + return 0 != ( ctxOptions & CTX_PROFILE_COMPAT ) && ctxVersion.getMajor()>=1 ; } /** @see GLProfile#isGL2GL3() */ @@ -926,12 +968,17 @@ public abstract class GLContext { /** @see GLProfile#isGLES1() */ public final boolean isGLES1() { - return ctxVersion.getMajor() == 1 && 0 != ( ctxOptions & CTX_PROFILE_ES ) ; + return 0 != ( ctxOptions & CTX_PROFILE_ES ) && ctxVersion.getMajor() == 1 ; } /** @see GLProfile#isGLES2() */ public final boolean isGLES2() { - return ctxVersion.getMajor() == 2 && 0 != ( ctxOptions & CTX_PROFILE_ES ) ; + return 0 != ( ctxOptions & CTX_PROFILE_ES ) && ctxVersion.getMajor() >= 2 ; + } + + /** @see GLProfile#isGLES3() */ + public final boolean isGLES3() { + return 0 != ( ctxOptions & CTX_PROFILE_ES ) && ctxVersion.getMajor() >= 3 ; } /** @see GLProfile#isGLES() */ @@ -941,12 +988,22 @@ public abstract class GLContext { /** @see GLProfile#isGL2ES1() */ public final boolean isGL2ES1() { - return isGL2() || isGLES1() ; + return isGLES1() || isGL2(); } /** @see GLProfile#isGL2ES2() */ public final boolean isGL2ES2() { - return isGL2GL3() || isGLES2() ; + return isGLES2() || isGL2GL3(); + } + + /** @see GLProfile#isGL3ES3() */ + public final boolean isGL3ES3() { + return isGL4ES3() || isGL3(); + } + + /** @see GLProfile#isGL4ES3() */ + public final boolean isGL4ES3() { + return isGL4() || isGLES3() ; } /** @@ -1157,45 +1214,73 @@ public abstract class GLContext { /* 1.*/ { 0, 1, 2, 3, 4, 5 }, /* 2.*/ { 0, 1 }, /* 3.*/ { 0, 1, 2, 3 }, - /* 4.*/ { 0, 1, 2 } }; // FIXME add 4.3 ! + /* 4.*/ { 0, 1, 2, 3 } }; - private static final int GL_VERSIONS_VALID[][] = { + public static final int ES_VERSIONS[][] = { /* 0.*/ { -1 }, - /* 1.*/ { 0, 1, 2, 3, 4, 5 }, - /* 2.*/ { 0, 1 }, - /* 3.*/ { 0, 1, 2, 3 }, - /* 4.*/ { 0, 1, 2, 3, 4 } }; // 4.4 coming up soon ? + /* 1.*/ { 0, 1 }, + /* 2.*/ { 0 }, + /* 3.*/ { 0 } }; - public static final int getMaxMajor() { - return GL_VERSIONS.length-1; + public static final int getMaxMajor(int ctxProfile) { + return ( 0 != ( CTX_PROFILE_ES & ctxProfile ) ) ? ES_VERSIONS.length-1 : GL_VERSIONS.length-1; } - public static final int getMaxMinor(int major) { - if(1>major || major>=GL_VERSIONS.length) return -1; - return GL_VERSIONS[major].length-1; + public static final int getMaxMinor(int ctxProfile, int major) { + if( 1>major ) { + return -1; + } + if( ( 0 != ( CTX_PROFILE_ES & ctxProfile ) ) ) { + if( major>=ES_VERSIONS.length ) return -1; + return ES_VERSIONS[major].length-1; + } else { + if( major>=GL_VERSIONS.length ) return -1; + return GL_VERSIONS[major].length-1; + } } - public static final boolean isValidGLVersion(int major, int minor) { - if(1>major || major>=GL_VERSIONS_VALID.length) return false; - if(0>minor || minor>=GL_VERSIONS_VALID[major].length) return false; + public static final boolean isValidGLVersion(int ctxProfile, int major, int minor) { + if( 1>major || 0>minor ) { + return false; + } + if( ( 0 != ( CTX_PROFILE_ES & ctxProfile ) ) ) { + if( major>=ES_VERSIONS.length) return false; + if( minor>=ES_VERSIONS[major].length) return false; + } else { + if( major>=GL_VERSIONS.length) return false; + if( minor>=GL_VERSIONS[major].length) return false; + } return true; } - public static final boolean decrementGLVersion(int major[], int minor[]) { + public static final boolean decrementGLVersion(int ctxProfile, int major[], int minor[]) { if(null==major || major.length<1 ||null==minor || minor.length<1) { throw new GLException("invalid array arguments"); } int m = major[0]; int n = minor[0]; - if(!isValidGLVersion(m, n)) return false; + if( !isValidGLVersion(ctxProfile, m, n) ) { + return false; + } // decrement .. n -= 1; if(n < 0) { - m -= 1; - n = GL_VERSIONS[m].length-1; + if( ( 0 != ( CTX_PROFILE_ES & ctxProfile ) ) ) { + if( m >= 3) { + m -= 1; + } else { + m = 0; // major decr [1,2] -> 0 + } + n = ES_VERSIONS[m].length-1; + } else { + m -= 1; + n = GL_VERSIONS[m].length-1; + } + } + if( !isValidGLVersion(ctxProfile, m, n) ) { + return false; } - if(!isValidGLVersion(m, n)) return false; major[0]=m; minor[0]=n; @@ -1299,9 +1384,9 @@ public abstract class GLContext { } } - protected static StringBuffer dumpAvailableGLVersions(StringBuffer sb) { + protected static StringBuilder dumpAvailableGLVersions(StringBuilder sb) { if(null == sb) { - sb = new StringBuffer(); + sb = new StringBuilder(); } synchronized(deviceVersionAvailable) { final SetThis includes the generic subset profiles GL2GL3, GL2ES2 and GL2ES1.
* *+ * GLProfile.get(device, GLProfile.GL4ES3).getImpl()); + *+ *
Selection favors hardware rasterizer.
+ * + * @throws GLException if no GL4ES3 compatible profile is available for the default device. + * @see #isGL4ES3() + * @see #get(AbstractGraphicsDevice, String) + * @see #getImpl() + */ + public static GLProfile getGL4ES3(AbstractGraphicsDevice device) + throws GLException + { + return get(device, GL4ES3).getImpl(); + } + + /** + * Calls {@link #getGL4ES3(AbstractGraphicsDevice)} using the default device. + *Selection favors hardware rasterizer.
+ * @see #getGL4ES3(AbstractGraphicsDevice) + */ + public static GLProfile getGL4ES3() + throws GLException + { + return get(defaultDevice, GL4ES3).getImpl(); + } + /** * Returns the GL2GL3 profile implementation, hence compatible w/ GL2GL3.Includes [ GLES2 ].
*/ + /** Indicates whether this profile is capable of GLES2.Includes [ GLES3, GLES2 ].
*/ public final boolean isGLES2() { - return GLES2 == profile; + return GLES3 == profile || GLES2 == profile; } - /** Indicates whether this profile is capable of GLES.Includes [ GLES1, GLES2 ].
*/ + /** Indicates whether this profile is capable of GLES3.Includes [ GLES3 ].
*/ + public final boolean isGLES3() { + return GLES3 == profile; + } + + /** Indicates whether this profile is capable of GLES.Includes [ GLES3, GLES1, GLES2 ].
*/ public final boolean isGLES() { - return GLES2 == profile || GLES1 == profile; + return GLES3 == profile || GLES2 == profile || GLES1 == profile; } /** Indicates whether this profile is capable of GL2ES1.Includes [ GL4bc, GL3bc, GL2, GLES1, GL2ES1 ].
*/ @@ -1050,17 +1122,27 @@ public class GLProfile { return GL2ES1 == profile || isGLES1() || isGL2(); } - /** Indicates whether this profile is capable os GL2GL3.Includes [ GL4bc, GL4, GL3bc, GL3, GL2, GL2GL3 ].
*/ + /** Indicates whether this profile is capable of GL2GL3.Includes [ GL4bc, GL4, GL3bc, GL3, GL2, GL2GL3 ].
*/ public final boolean isGL2GL3() { return GL2GL3 == profile || isGL3() || isGL2(); } - - /** Indicates whether this profile is capable os GL2ES2.Includes [ GL4bc, GL4, GL3bc, GL3, GL2, GL2GL3, GL2ES2, GLES2 ].
*/ + + /** Indicates whether this profile is capable of GL2ES2.Includes [ GL4bc, GL4, GL3bc, GL3, GLES3, GL2, GL2GL3, GL2ES2, GLES2 ].
*/ public final boolean isGL2ES2() { return GL2ES2 == profile || isGLES2() || isGL2GL3(); } - /** Indicates whether this profile supports GLSL, ie. {@link #isGL2ES2()}. */ + /** Indicates whether this profile is capable of GL3ES3.Includes [ GL4bc, GL4, GL3bc, GL3, GLES3 ].
*/ + public final boolean isGL3ES3() { + return isGL4ES3() || isGL3(); + } + + /** Indicates whether this profile is capable of GL4ES3.Includes [ GL4bc, GL4, GLES3 ].
*/ + public final boolean isGL4ES3() { + return GL4ES3 == profile || isGLES3() || isGL4(); + } + + /** Indicates whether this profile supports GLSL, i.e. {@link #isGL2ES2()}. */ public final boolean hasGLSL() { return isGL2ES2() ; } @@ -1072,7 +1154,12 @@ public class GLProfile { /** Indicates whether this profile uses the native OpenGL ES2 implementations. */ public final boolean usesNativeGLES2() { - return GLES2 == getImplName(); + return GLES3 == getImplName() || GLES2 == getImplName(); + } + + /** Indicates whether this profile uses the native OpenGL ES2 implementations. */ + public final boolean usesNativeGLES3() { + return GLES3 == getImplName(); } /** Indicates whether this profile uses either of the native OpenGL ES implementations. */ @@ -1117,8 +1204,8 @@ public class GLProfile { public boolean isValidArrayDataType(int index, int comps, int type, boolean isVertexAttribPointer, boolean throwException) { - String arrayName = getGLArrayName(index); - if(isGLES1()) { + final String arrayName = getGLArrayName(index); + if( isGLES1() ) { if(isVertexAttribPointer) { if(throwException) { throw new GLException("Illegal array type for "+arrayName+" on profile GLES1: VertexAttribPointer"); @@ -1201,7 +1288,7 @@ public class GLProfile { } break; } - } else if(isGLES2()) { + } else if( isGLES2() ) { // simply ignore !isVertexAttribPointer case, since it is simulated anyway .. switch(type) { case GL.GL_UNSIGNED_BYTE: @@ -1386,7 +1473,7 @@ public class GLProfile { private static /*final*/ boolean hasDesktopGLFactory; private static /*final*/ boolean hasGL234Impl; private static /*final*/ boolean hasEGLFactory; - private static /*final*/ boolean hasGLES2Impl; + private static /*final*/ boolean hasGLES3Impl; private static /*final*/ boolean hasGLES1Impl; private static /*final*/ GLDrawableFactoryImpl eglFactory = null; @@ -1419,7 +1506,7 @@ public class GLProfile { // depends on hasEGLFactory hasGLES1Impl = ReflectionUtil.isClassAvailable("jogamp.opengl.es1.GLES1Impl", classloader); - hasGLES2Impl = ReflectionUtil.isClassAvailable("jogamp.opengl.es2.GLES2Impl", classloader); + hasGLES3Impl = ReflectionUtil.isClassAvailable("jogamp.opengl.es3.GLES3Impl", classloader); // // Iteration of desktop GL availability detection @@ -1471,8 +1558,8 @@ public class GLProfile { eglFactory = (GLDrawableFactoryImpl) GLDrawableFactory.getFactoryImpl(GLES2); if(null != eglFactory) { hasEGLFactory = true; - // update hasGLES1Impl, hasGLES2Impl based on EGL - hasGLES2Impl = null!=eglFactory.getGLDynamicLookupHelper(2) && hasGLES2Impl; + // update hasGLES1Impl, hasGLES3Impl based on EGL + hasGLES3Impl = null!=eglFactory.getGLDynamicLookupHelper(2) && hasGLES3Impl; hasGLES1Impl = null!=eglFactory.getGLDynamicLookupHelper(1) && hasGLES1Impl; } } catch (LinkageError le) { @@ -1493,7 +1580,7 @@ public class GLProfile { final AbstractGraphicsDevice defaultEGLDevice; if(null == eglFactory) { - hasGLES2Impl = false; + hasGLES3Impl = false; hasGLES1Impl = false; defaultEGLDevice = null; if(DEBUG) { @@ -1532,7 +1619,7 @@ public class GLProfile { System.err.println("GLProfile.init hasGL234Impl "+hasGL234Impl); System.err.println("GLProfile.init hasEGLFactory "+hasEGLFactory); System.err.println("GLProfile.init hasGLES1Impl "+hasGLES1Impl); - System.err.println("GLProfile.init hasGLES2Impl "+hasGLES2Impl); + System.err.println("GLProfile.init hasGLES3Impl "+hasGLES3Impl); System.err.println("GLProfile.init defaultDevice "+defaultDevice); System.err.println("GLProfile.init defaultDevice Desktop "+defaultDesktopDevice); System.err.println("GLProfile.init defaultDevice EGL "+defaultEGLDevice); @@ -1609,8 +1696,8 @@ public class GLProfile { final boolean deviceIsEGLCompatible = hasEGLFactory && eglFactory.getIsDeviceCompatible(device); - // also test GLES1 and GLES2 on desktop, since we have implementations / emulations available. - if( deviceIsEGLCompatible && ( hasGLES2Impl || hasGLES1Impl ) ) { + // also test GLES1, GLES2 and GLES3 on desktop, since we have implementations / emulations available. + if( deviceIsEGLCompatible && ( hasGLES3Impl || hasGLES1Impl ) ) { // 1st pretend we have all EGL profiles .. computeProfileMap(device, false /* desktopCtxUndef*/, true /* esCtxUndef */); @@ -1629,7 +1716,7 @@ public class GLProfile { // but it seems even EGL.eglInitialize(eglDisplay, null, null) // fails in some scenarios (eg VirtualBox 4.1.6) w/ EGL error 0x3001 (EGL_NOT_INITIALIZED). hasEGLFactory = false; - hasGLES2Impl = false; + hasGLES3Impl = false; hasGLES1Impl = false; } if (DEBUG) { @@ -1647,7 +1734,7 @@ public class GLProfile { System.err.println("GLProfile: desktoplFactory "+desktopFactory); System.err.println("GLProfile: eglFactory "+eglFactory); System.err.println("GLProfile: hasGLES1Impl "+hasGLES1Impl); - System.err.println("GLProfile: hasGLES2Impl "+hasGLES2Impl); + System.err.println("GLProfile: hasGLES3Impl "+hasGLES3Impl); } } @@ -1725,18 +1812,18 @@ public class GLProfile { final boolean isHardwareRasterizer[] = new boolean[1]; GLProfile defaultGLProfileAny = null; GLProfile defaultGLProfileHW = null; - HashMap+ * Method calls 'void finalizeInit()' of instance 'gl' as retrieved by reflection, if exist. + *
+ */ + private void finalizeInit(GL gl) { + Method finalizeInit = null; + try { + finalizeInit = ReflectionUtil.getMethod(gl.getClass(), "finalizeInit", new Class>[]{ }); + } catch ( Throwable t ) { + if(DEBUG) { + System.err.println("Catched "+t.getClass().getName()+": "+t.getMessage()); + t.printStackTrace(); + } + } + if( null != finalizeInit ) { + ReflectionUtil.callMethod(gl, finalizeInit, new Object[]{ }); + } + } public final ProcAddressTable getGLProcAddressTable() { return glProcAddressTable; @@ -1097,8 +1125,24 @@ public abstract class GLContextImpl extends GLContext { * ie for GLXExt, EGLExt, .. */ public abstract ProcAddressTable getPlatformExtProcAddressTable(); + + /** + * Part ofGL_NV_vertex_array_range
.
+ *
+ * Provides platform-independent access to the wglAllocateMemoryNV
/
+ * glXAllocateMemoryNV
.
+ *
GL_NV_vertex_array_range
.
+ *
+ * Provides platform-independent access to the wglFreeMemoryNV
/
+ * glXFreeMemoryNV
.
+ *
+ * Covering ES3 and ES2. + *
+ */ public final class EGLES2DynamicLibraryBundleInfo extends EGLDynamicLibraryBundleInfo { protected EGLES2DynamicLibraryBundleInfo() { super(); @@ -40,18 +45,33 @@ public final class EGLES2DynamicLibraryBundleInfo extends EGLDynamicLibraryBundl { final ListGL_ARB_ES2_compatibility
, otherwise false
+ * the extension GL_ARB_ES2_compatibility
, otherwise false
+ * @see GLContext#isGLES2Compatible()
*/
public boolean isGLES2Compatible();
@@ -182,93 +197,117 @@ public interface GLBase {
* Indicates whether this GL object is compatible with the core OpenGL ES3 functionality.
* @return true if this context is an ES3 context or implements
* the extension GL_ARB_ES3_compatibility
, otherwise false
+ * @see GLContext#isGLES3Compatible()
*/
public boolean isGLES3Compatible();
- /** Indicates whether this GL object supports GLSL. */
+ /**
+ * Indicates whether this GL object supports GLSL.
+ * @see GLContext#hasGLSL()
+ */
public boolean hasGLSL();
+ /**
+ * Returns the downstream GL instance in case this is a wrapping pipeline, otherwise null
.
+ * + * See {@link #getRootGL()} for retrieving the implementing root instance. + *
+ * @throws GLException if the downstream instance is not null and not a GL implementation + * @see #getRootGL() + */ + public GL getDownstreamGL() throws GLException; + + /** + * Returns the implementing root instance, considering a wrapped pipelined hierarchy, see {@link #getDownstreamGL()}. + *+ * If this instance is not a wrapping pipeline, i.e. has no downstream instance, + * this instance is returned. + *
+ * @throws GLException if the root instance is not a GL implementation + */ + public GL getRootGL() throws GLException; + /** * Casts this object to the GL interface. - * @throws GLException if this GLObject is not a GL implementation + * @throws GLException if this object is not a GL implementation */ public GL getGL() throws GLException; /** * Casts this object to the GL4bc interface. - * @throws GLException if this GLObject is not a GL4bc implementation + * @throws GLException if this object is not a GL4bc implementation */ public GL4bc getGL4bc() throws GLException; /** * Casts this object to the GL4 interface. - * @throws GLException if this GLObject is not a GL4 implementation + * @throws GLException if this object is not a GL4 implementation */ public GL4 getGL4() throws GLException; /** * Casts this object to the GL3bc interface. - * @throws GLException if this GLObject is not a GL3bc implementation + * @throws GLException if this object is not a GL3bc implementation */ public GL3bc getGL3bc() throws GLException; /** * Casts this object to the GL3 interface. - * @throws GLException if this GLObject is not a GL3 implementation + * @throws GLException if this object is not a GL3 implementation */ public GL3 getGL3() throws GLException; /** * Casts this object to the GL2 interface. - * @throws GLException if this GLObject is not a GL2 implementation + * @throws GLException if this object is not a GL2 implementation */ public GL2 getGL2() throws GLException; /** * Casts this object to the GLES1 interface. - * @throws GLException if this GLObject is not a GLES1 implementation + * @throws GLException if this object is not a GLES1 implementation */ public GLES1 getGLES1() throws GLException; /** * Casts this object to the GLES2 interface. - * @throws GLException if this GLObject is not a GLES2 implementation + * @throws GLException if this object is not a GLES2 implementation */ public GLES2 getGLES2() throws GLException; /** * Casts this object to the GLES3 interface. - * @throws GLException if this GLObject is not a GLES3 implementation + * @throws GLException if this object is not a GLES3 implementation */ public GLES3 getGLES3() throws GLException; /** * Casts this object to the GL2ES1 interface. - * @throws GLException if this GLObject is not a GL2ES1 implementation + * @throws GLException if this object is not a GL2ES1 implementation */ public GL2ES1 getGL2ES1() throws GLException; /** * Casts this object to the GL2ES2 interface. - * @throws GLException if this GLObject is not a GL2ES2 implementation + * @throws GLException if this object is not a GL2ES2 implementation */ public GL2ES2 getGL2ES2() throws GLException; /** * Casts this object to the GL3ES3 interface. - * @throws GLException if this GLObject is not a GL3ES3 implementation + * @throws GLException if this object is not a GL3ES3 implementation */ public GL3ES3 getGL3ES3() throws GLException; /** * Casts this object to the GL4ES3 interface. - * @throws GLException if this GLObject is not a GL3ES3 implementation + * @throws GLException if this object is not a GL3ES3 implementation */ public GL4ES3 getGL4ES3() throws GLException; /** * Casts this object to the GL2GL3 interface. - * @throws GLException if this GLObject is not a GL2GL3 implementation + * @throws GLException if this object is not a GL2GL3 implementation */ public GL2GL3 getGL2GL3() throws GLException; diff --git a/src/jogl/classes/javax/media/opengl/GLContext.java b/src/jogl/classes/javax/media/opengl/GLContext.java index b27db18af..9d383c371 100644 --- a/src/jogl/classes/javax/media/opengl/GLContext.java +++ b/src/jogl/classes/javax/media/opengl/GLContext.java @@ -503,6 +503,17 @@ public abstract class GLContext { */ public abstract void destroy(); + /** + * Returns the implementing root GL instance of this GLContext's GL object, + * considering a wrapped pipelined hierarchy, see {@link GLBase#getDownstreamGL()}. + * @throws GLException if the root instance is not a GL implementation + * @see GLBase#getRootGL() + * @see GLBase#getDownstreamGL() + * @see #getGL() + * @see #setGL(GL) + */ + public abstract GL getRootGL(); + /** * Returns the GL pipeline object for this GLContext. * @@ -915,40 +926,83 @@ public abstract class GLContext { isExtensionAvailable(GLExtensions.IMG_texture_format_BGRA8888) ; } - /** @see GLProfile#isGL4bc() */ + /** + * Indicates whether this GLContext is capable of GL4bc.Includes [ GL4bc ].
+ * @see GLProfile#isGL4bc() + */ public final boolean isGL4bc() { return ctxVersion.getMajor() >= 4 && 0 != (ctxOptions & CTX_IS_ARB_CREATED) && 0 != (ctxOptions & CTX_PROFILE_COMPAT); } - /** @see GLProfile#isGL4() */ + /** + * Indicates whether this GLContext is capable of GL4.Includes [ GL4bc, GL4 ].
+ * @see GLProfile#isGL4() + */ public final boolean isGL4() { return ctxVersion.getMajor() >= 4 && 0 != (ctxOptions & CTX_IS_ARB_CREATED) && 0 != (ctxOptions & (CTX_PROFILE_COMPAT|CTX_PROFILE_CORE)); } - /** Indicates whether this profile is capable of GL4 (core only).Includes [ GL4 ].
*/ + /** + * Indicates whether this GLContext is capable of GL4 (core only).Includes [ GL4 ].
+ */ public final boolean isGL4core() { return ctxVersion.getMajor() >= 4 && 0 != (ctxOptions & CTX_IS_ARB_CREATED) && 0 != (ctxOptions & CTX_PROFILE_CORE); } - /** @see GLProfile#isGL3bc() */ + /** + * Indicates whether this GLContext is capable of GL3bc.Includes [ GL4bc, GL3bc ].
+ * @see GLProfile#isGL3bc() + */ public final boolean isGL3bc() { return 0 != (ctxOptions & CTX_IS_ARB_CREATED) && 0 != (ctxOptions & CTX_PROFILE_COMPAT) && ctxVersion.compareTo(Version310) >= 0 ; } - /** @see GLProfile#isGL3() */ + /** + * Indicates whether this GLContext is capable of GL3.Includes [ GL4bc, GL4, GL3bc, GL3 ].
+ * @see GLProfile#isGL3() + */ public final boolean isGL3() { return 0 != (ctxOptions & CTX_IS_ARB_CREATED) && 0 != (ctxOptions & (CTX_PROFILE_COMPAT|CTX_PROFILE_CORE)) && ctxVersion.compareTo(Version310) >= 0 ; } - /** Indicates whether this profile is capable of GL3 (core only). GL3 starts w/ OpenGL 3.1Includes [ GL4, GL3, GLES3 ].
*/ + /** + * Indicates whether this GLContext is capable of GL3 (core only). GL3 starts w/ OpenGL 3.1Includes [ GL4, GL3 ].
+ */ public final boolean isGL3core() { + return 0 != ( ctxOptions & CTX_IS_ARB_CREATED ) && + 0 != ( ctxOptions & CTX_PROFILE_CORE ) && + ctxVersion.compareTo(Version310) >= 0; + } + + /** + * Indicates whether this GLContext's native profile does not implement a default vertex array object (VAO), + * starting w/ OpenGL 3.1 core and GLES3. + *Includes [ GL4, GL3, GLES3 ].
+ *+ Due to GL 3.1 core spec: E.1. DEPRECATED AND REMOVED FEATURES (p 296), + GL 3.2 core spec: E.2. DEPRECATED AND REMOVED FEATURES (p 331) + there is no more default VAO buffer 0 bound, hence generating and binding one + to avoid INVALID_OPERATION at VertexAttribPointer. + More clear is GL 4.3 core spec: 10.4 (p 307). + *+ *
+ GLES3 is included, since upcoming ES releases > 3.0 may behave the same: + GL ES 3.0 spec F.1. Legacy Features (p 322). + *+ *
+ * If no default VAO is implemented in the native OpenGL profile, + * an own default VAO is being used, see {@link #getDefaultVAO()}. + *
+ * @see #getDefaultVAO() + */ + public final boolean hasNoDefaultVAO() { return ( 0 != ( ctxOptions & CTX_PROFILE_ES ) && ctxVersion.getMajor() >= 3 ) || ( 0 != ( ctxOptions & CTX_IS_ARB_CREATED ) && 0 != ( ctxOptions & CTX_PROFILE_CORE ) && @@ -956,52 +1010,87 @@ public abstract class GLContext { ) ; } - /** @see GLProfile#isGL2() */ + /** + * If this GLContext does not implement a default VAO, see {@link #hasNoDefaultVAO()}, + * an own default VAO will be created and bound at context creation. + *
+ * If this GLContext does implement a default VAO, i.e. {@link #hasNoDefaultVAO()}
+ * returns false
, this method returns 0
.
+ *
+ * Otherwise this method returns the VAO object name + * representing this GLContext's own default VAO. + *
+ * @see #hasNoDefaultVAO() + */ + public abstract int getDefaultVAO(); + + /** + * @see GLProfile#isGL2() + */ public final boolean isGL2() { return 0 != ( ctxOptions & CTX_PROFILE_COMPAT ) && ctxVersion.getMajor()>=1 ; } - /** @see GLProfile#isGL2GL3() */ + /** + * @see GLProfile#isGL2GL3() + */ public final boolean isGL2GL3() { return isGL2() || isGL3(); } - /** @see GLProfile#isGLES1() */ + /** + * @see GLProfile#isGLES1() + */ public final boolean isGLES1() { return 0 != ( ctxOptions & CTX_PROFILE_ES ) && ctxVersion.getMajor() == 1 ; } - /** @see GLProfile#isGLES2() */ + /** + * @see GLProfile#isGLES2() + */ public final boolean isGLES2() { return 0 != ( ctxOptions & CTX_PROFILE_ES ) && ctxVersion.getMajor() >= 2 ; } - /** @see GLProfile#isGLES3() */ + /** + * @see GLProfile#isGLES3() + */ public final boolean isGLES3() { return 0 != ( ctxOptions & CTX_PROFILE_ES ) && ctxVersion.getMajor() >= 3 ; } - /** @see GLProfile#isGLES() */ + /** + * @see GLProfile#isGLES() + */ public final boolean isGLES() { return 0 != ( CTX_PROFILE_ES & ctxOptions ) ; } - /** @see GLProfile#isGL2ES1() */ + /** + * @see GLProfile#isGL2ES1() + */ public final boolean isGL2ES1() { return isGLES1() || isGL2(); } - /** @see GLProfile#isGL2ES2() */ + /** + * @see GLProfile#isGL2ES2() + */ public final boolean isGL2ES2() { return isGLES2() || isGL2GL3(); } - /** @see GLProfile#isGL3ES3() */ + /** + * @see GLProfile#isGL3ES3() + */ public final boolean isGL3ES3() { return isGL4ES3() || isGL3(); } - /** @see GLProfile#isGL4ES3() */ + /** + * @see GLProfile#isGL4ES3() + */ public final boolean isGL4ES3() { return isGL4() || isGLES3() ; } diff --git a/src/jogl/classes/jogamp/opengl/GLContextImpl.java b/src/jogl/classes/jogamp/opengl/GLContextImpl.java index 18e136815..5da60597e 100644 --- a/src/jogl/classes/jogamp/opengl/GLContextImpl.java +++ b/src/jogl/classes/jogamp/opengl/GLContextImpl.java @@ -67,8 +67,8 @@ import javax.media.nativewindow.NativeSurface; import javax.media.nativewindow.NativeWindowFactory; import javax.media.opengl.GL; import javax.media.opengl.GL2ES2; -import javax.media.opengl.GL2ES3; import javax.media.opengl.GL2GL3; +import javax.media.opengl.GL3ES3; import javax.media.opengl.GLCapabilitiesImmutable; import javax.media.opengl.GLContext; import javax.media.opengl.GLDebugListener; @@ -262,6 +262,17 @@ public abstract class GLContextImpl extends GLContext { return (GLDrawableImpl) getGLDrawable(); } + @Override + public final GL getRootGL() { + GL _gl = gl; + GL _parent = _gl.getDownstreamGL(); + while ( null != _parent ) { + _gl = _parent; + _parent = _gl.getDownstreamGL(); + } + return _gl; + } + @Override public final GL getGL() { return gl; @@ -279,6 +290,11 @@ public abstract class GLContextImpl extends GLContext { return gl; } + @Override + public final int getDefaultVAO() { + return defaultVAO; + } + /** * Call this method to notify the OpenGL context * that the drawable has changed (size or position). @@ -399,7 +415,7 @@ public abstract class GLContextImpl extends GLContext { } if ( 0 != defaultVAO ) { final int[] tmp = new int[] { defaultVAO }; - final GL2ES3 gl3es3 = gl.getGL3ES3(); + final GL3ES3 gl3es3 = gl.getRootGL().getGL3ES3(); gl3es3.glBindVertexArray(0); gl3es3.glDeleteVertexArrays(1, tmp, 0); defaultVAO = 0; @@ -636,14 +652,9 @@ public abstract class GLContextImpl extends GLContext { final boolean created; try { created = createImpl(shareWith); // may throws exception if fails! - if( created && isGL3core() ) { - // Due to GL 3.1 core spec: E.1. DEPRECATED AND REMOVED FEATURES (p 296), - // GL 3.2 core spec: E.2. DEPRECATED AND REMOVED FEATURES (p 331) - // there is no more default VAO buffer 0 bound, hence generating and binding one - // to avoid INVALID_OPERATION at VertexAttribPointer. - // More clear is GL 4.3 core spec: 10.4 (p 307). + if( created && hasNoDefaultVAO() ) { final int[] tmp = new int[1]; - final GL2ES3 gl3es3 = gl.getGL3ES3(); + final GL3ES3 gl3es3 = gl.getRootGL().getGL3ES3(); gl3es3.glGenVertexArrays(1, tmp, 0); defaultVAO = tmp[0]; gl3es3.glBindVertexArray(defaultVAO); @@ -1955,10 +1966,6 @@ public abstract class GLContextImpl extends GLContext { return glStateTracker; } - public final boolean isDefaultVAO(int vao) { - return defaultVAO == vao; - } - //--------------------------------------------------------------------------- // Helpers for context optimization where the last context is left // current on the OpenGL worker thread -- cgit v1.2.3 From e92e561df9673ce77783d6fa3815a942a39a53c0 Mon Sep 17 00:00:00 2001 From: Sven GothelIncludes [ GL ≥ 4.3, GL ≥ 3.1 w/ GL_ARB_ES3_compatibility and GLES3 ]
* @see GLContext#isGL4ES3() */ public boolean isGL4ES3(); @@ -213,8 +214,13 @@ public interface GLBase { /** * Indicates whether this GL object is compatible with the core OpenGL ES3 functionality. - * @return true if this context is an ES3 context or implements - * the extensionGL_ARB_ES3_compatibility
, otherwise false
+ *
+ * Return true if the underlying context is an ES3 context or implements
+ * the extension GL_ARB_ES3_compatibility
, otherwise false.
+ *
+ * Includes [ GL ≥ 4.3, GL ≥ 3.1 w/ GL_ARB_ES3_compatibility and GLES3 ] + *
* @see GLContext#isGLES3Compatible() */ public boolean isGLES3Compatible(); @@ -319,7 +325,7 @@ public interface GLBase { /** * Casts this object to the GL4ES3 interface. - * @throws GLException if this object is not a GL3ES3 implementation + * @throws GLException if this object is not a GL4ES3 implementation */ public GL4ES3 getGL4ES3() throws GLException; diff --git a/src/jogl/classes/javax/media/opengl/GLContext.java b/src/jogl/classes/javax/media/opengl/GLContext.java index c3e82e6ee..0cf04d119 100644 --- a/src/jogl/classes/javax/media/opengl/GLContext.java +++ b/src/jogl/classes/javax/media/opengl/GLContext.java @@ -140,6 +140,9 @@ public abstract class GLContext { /** Version 3.2. As an OpenGL version, it qualifies for geometry shader */ public static final VersionNumber Version320 = new VersionNumber(3, 2, 0); + /** Version 4.3. As an OpenGL version, it qualifies forGL_ARB_ES3_compatibility
*/
+ public static final VersionNumber Version430 = new VersionNumber(4, 3, 0);
+
protected static final VersionNumber Version800 = new VersionNumber(8, 0, 0);
//
@@ -822,8 +825,11 @@ public abstract class GLContext {
}
/**
- * @return true if this context is an ES3 context or implements
- * the extension GL_ARB_ES3_compatibility
, otherwise false
+ * Return true if this context is an ES3 context or implements
+ * the extension GL_ARB_ES3_compatibility
, otherwise false.
+ * + * Includes [ GL ≥ 4.3, GL ≥ 3.1 w/ GL_ARB_ES3_compatibility and GLES3 ] + *
*/ public final boolean isGLES3Compatible() { return 0 != ( ctxOptions & CTX_IMPL_ES3_COMPAT ) ; @@ -1115,11 +1121,12 @@ public abstract class GLContext { } /** - * Indicates whether this profile is capable of GL4ES3.Includes [ GL4bc, GL4, GLES3 ].
- * @see GLProfile#isGL4ES3() + * Returns true if this profile is capable of GL4ES3, i.e. if {@link #isGLES3Compatible()} returns true. + *Includes [ GL ≥ 4.3, GL ≥ 3.1 w/ GL_ARB_ES3_compatibility and GLES3 ]
+ * @see GLProfile#isGL4ES3() */ public final boolean isGL4ES3() { - return isGL4() || isGLES3() ; + return isGLES3Compatible() ; } /** @@ -1598,9 +1605,9 @@ public abstract class GLContext { */ protected static final void getRequestMajorAndCompat(final GLProfile glp, int[/*2*/] reqMajorCTP) { final GLProfile glpImpl = glp.getImpl(); - if(glpImpl.isGL4()) { + if( glpImpl.isGL4() ) { reqMajorCTP[0]=4; - } else if (glpImpl.isGL3()) { + } else if ( glpImpl.isGL3() || glpImpl.isGLES3() ) { reqMajorCTP[0]=3; } else if (glpImpl.isGLES1()) { reqMajorCTP[0]=1; @@ -1729,6 +1736,30 @@ public abstract class GLContext { return isGLVersionAvailable(device, 3, GLContext.CTX_PROFILE_ES, isHardware); } + /** + * Returns true if a ES3 compatible profile is available, + * i.e. either a ≥ 4.3 context or a ≥ 3.1 context supportingGL_ARB_ES3_compatibility
,
+ * otherwise false.
+ * + * Includes [ GL4 > 4.3, GL3 > 3.1 w/ GL_ARB_ES3_compatibility and GLES3 ]. + *
+ */ + public static final boolean isGLES3CompatibleAvailable(AbstractGraphicsDevice device) { + int major[] = { 0 }; + int minor[] = { 0 }; + int ctp[] = { 0 }; + boolean ok; + + ok = GLContext.getAvailableGLVersion(device, 3, GLContext.CTX_PROFILE_CORE, major, minor, ctp); + if( !ok ) { + ok = GLContext.getAvailableGLVersion(device, 3, GLContext.CTX_PROFILE_COMPAT, major, minor, ctp); + } + if( !ok ) { + ok = GLContext.getAvailableGLVersion(device, 3, GLContext.CTX_PROFILE_ES, major, minor, ctp); + } + return 0 != ( ctp[0] & CTX_IMPL_ES3_COMPAT ); + } + public static boolean isGL4bcAvailable(AbstractGraphicsDevice device, boolean isHardware[]) { return isGLVersionAvailable(device, 4, CTX_PROFILE_COMPAT, isHardware); } diff --git a/src/jogl/classes/javax/media/opengl/GLProfile.java b/src/jogl/classes/javax/media/opengl/GLProfile.java index c2a24e975..51b822449 100644 --- a/src/jogl/classes/javax/media/opengl/GLProfile.java +++ b/src/jogl/classes/javax/media/opengl/GLProfile.java @@ -298,13 +298,6 @@ public class GLProfile { glAvailabilityToString(device, sb.append(" "), 4, GLContext.CTX_PROFILE_CORE); } - if(useIndent) { - doIndent(sb.append(Platform.getNewline()), indent, indentCount).append("GL4ES3").append(indent); - } else { - sb.append(", GL4ES3 "); - } - sb.append(isAvailableImpl(map, GL4ES3)); - if(useIndent) { doIndent(sb.append(Platform.getNewline()), indent, indentCount).append("GLES3").append(indent); } else { @@ -349,13 +342,6 @@ public class GLProfile { glAvailabilityToString(device, sb.append(" "), 2, GLContext.CTX_PROFILE_COMPAT); } - if(useIndent) { - doIndent(sb.append(Platform.getNewline()), indent, indentCount).append("GL2ES2").append(indent); - } else { - sb.append(", GL2ES2 "); - } - sb.append(isAvailableImpl(map, GL2ES2)); - if(useIndent) { doIndent(sb.append(Platform.getNewline()), indent, indentCount).append("GLES2").append(indent); } else { @@ -367,13 +353,6 @@ public class GLProfile { glAvailabilityToString(device, sb.append(" "), 2, GLContext.CTX_PROFILE_ES); } - if(useIndent) { - doIndent(sb.append(Platform.getNewline()), indent, indentCount).append("GL2ES1").append(indent); - } else { - sb.append(", GL2ES1 "); - } - sb.append(isAvailableImpl(map, GL2ES1)); - if(useIndent) { doIndent(sb.append(Platform.getNewline()), indent, indentCount).append("GLES1").append(indent); } else { @@ -385,6 +364,27 @@ public class GLProfile { glAvailabilityToString(device, sb.append(" "), 1, GLContext.CTX_PROFILE_ES); } + if(useIndent) { + doIndent(sb.append(Platform.getNewline()), indent, indentCount).append("GL4ES3").append(indent); + } else { + sb.append(", GL4ES3 "); + } + sb.append(isAvailableImpl(map, GL4ES3)); + + if(useIndent) { + doIndent(sb.append(Platform.getNewline()), indent, indentCount).append("GL2ES2").append(indent); + } else { + sb.append(", GL2ES2 "); + } + sb.append(isAvailableImpl(map, GL2ES2)); + + if(useIndent) { + doIndent(sb.append(Platform.getNewline()), indent, indentCount).append("GL2ES1").append(indent); + } else { + sb.append(", GL2ES1 "); + } + sb.append(isAvailableImpl(map, GL2ES1)); + if(useIndent) { indentCount--; doIndent(sb.append(Platform.getNewline()), indent, indentCount).append("Profiles"); @@ -1922,24 +1922,37 @@ public class GLProfile { return GLES2; } } else if (GL4ES3.equals(profile)) { - final boolean es3HardwareRasterizer[] = new boolean[1]; - final boolean gles3Available = hasGLES3Impl && ( esCtxUndef || GLContext.isGLES3Available(device, es3HardwareRasterizer) ); - final boolean gles3HWAvailable = gles3Available && es3HardwareRasterizer[0] ; - if(hasGL234Impl) { - if(GLContext.isGL4Available(device, isHardwareRasterizer)) { - if(!gles3HWAvailable || isHardwareRasterizer[0]) { - return GL4; + final boolean gles3CompatAvail = GLContext.isGLES3CompatibleAvailable(device); + if( desktopCtxUndef || esCtxUndef || gles3CompatAvail ) { + final boolean es3HardwareRasterizer[] = new boolean[1]; + final boolean gles3Available = hasGLES3Impl && ( esCtxUndef || GLContext.isGLES3Available(device, es3HardwareRasterizer) ); + final boolean gles3HWAvailable = gles3Available && es3HardwareRasterizer[0] ; + if(hasGL234Impl) { + if(GLContext.isGL4Available(device, isHardwareRasterizer)) { + if(!gles3HWAvailable || isHardwareRasterizer[0]) { + return GL4; + } } - } - if(GLContext.isGL4bcAvailable(device, isHardwareRasterizer)) { - if(!gles3HWAvailable || isHardwareRasterizer[0]) { - return GL4bc; + if( GLContext.isGL4bcAvailable(device, isHardwareRasterizer)) { + if(!gles3HWAvailable || isHardwareRasterizer[0]) { + return GL4bc; + } + } + if(GLContext.isGL3Available(device, isHardwareRasterizer)) { + if(!gles3HWAvailable || isHardwareRasterizer[0]) { + return GL3; + } + } + if( desktopCtxUndef || GLContext.isGL3bcAvailable(device, isHardwareRasterizer)) { + if(!gles3HWAvailable || isHardwareRasterizer[0]) { + return GL3bc; + } } } - } - if(gles3Available) { - isHardwareRasterizer[0] = es3HardwareRasterizer[0]; - return GLES3; + if(gles3Available) { + isHardwareRasterizer[0] = es3HardwareRasterizer[0]; + return GLES3; + } } } else if(GL2GL3.equals(profile)) { if(hasGL234Impl) { diff --git a/src/jogl/classes/jogamp/opengl/GLContextImpl.java b/src/jogl/classes/jogamp/opengl/GLContextImpl.java index 5da60597e..6f4f6f271 100644 --- a/src/jogl/classes/jogamp/opengl/GLContextImpl.java +++ b/src/jogl/classes/jogamp/opengl/GLContextImpl.java @@ -1536,7 +1536,10 @@ public abstract class GLContextImpl extends GLContext { ctxProfileBits |= CTX_IMPL_ES2_COMPAT; ctxProfileBits |= CTX_IMPL_FBO; } - } else if( isExtensionAvailable( GLExtensions.ARB_ES3_compatibility ) ) { + } else if( ( major > 4 || major == 4 && minor >= 3 ) || + ( ( major > 3 || major == 3 && minor >= 1 ) && isExtensionAvailable( GLExtensions.ARB_ES3_compatibility ) ) ) { + // See GLContext.isGLES3CompatibleAvailable(..)/isGLES3Compatible() + // Includes [ GL ≥ 4.3, GL ≥ 3.1 w/ GL_ARB_ES3_compatibility and GLES3 ] ctxProfileBits |= CTX_IMPL_ES3_COMPAT | CTX_IMPL_ES2_COMPAT ; ctxProfileBits |= CTX_IMPL_FBO; } else if( isExtensionAvailable( GLExtensions.ARB_ES2_compatibility ) ) { diff --git a/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java b/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java index 537b32355..e85d67dea 100644 --- a/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java +++ b/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java @@ -49,6 +49,8 @@ import javax.media.nativewindow.util.InsetsImmutable; import javax.media.nativewindow.util.Point; import javax.media.opengl.FPSCounter; import javax.media.opengl.GL; +import javax.media.opengl.GL3; +import javax.media.opengl.GL4ES3; import javax.media.opengl.GLAnimatorControl; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCapabilities; @@ -56,6 +58,8 @@ import javax.media.opengl.GLCapabilitiesImmutable; import javax.media.opengl.GLContext; import javax.media.opengl.GLDrawable; import javax.media.opengl.GLDrawableFactory; +import javax.media.opengl.GLES2; +import javax.media.opengl.GLES3; import javax.media.opengl.GLEventListener; import javax.media.opengl.GLException; import javax.media.opengl.GLProfile; @@ -830,23 +834,38 @@ public class GLWindow extends GLAutoDrawableBase implements GLAutoDrawable, Wind * A most simple JOGL AWT test entry */ public static void main(String args[]) { - boolean forceES2 = false; - boolean forceES3 = false; - boolean forceGL3 = false; - if( null != args ) { - for(int i=0; i* A Pbuffer drawable is created if both {@link GLCapabilitiesImmutable#isPBuffer() caps.isPBuffer()} - * and {@link #canCreateGLPbuffer(AbstractGraphicsDevice) canCreateGLPbuffer(device)} is true. + * and {@link #canCreateGLPbuffer(AbstractGraphicsDevice, GLProfile) canCreateGLPbuffer(device)} is true. *
** If not onscreen and neither FBO nor Pbuffer is available, @@ -454,7 +454,7 @@ public abstract class GLDrawableFactory { * @throws GLException if any window system-specific errors caused * the creation of the GLDrawable to fail. * - * @see #canCreateGLPbuffer(AbstractGraphicsDevice) + * @see #canCreateGLPbuffer(AbstractGraphicsDevice, GLProfile) * @see GLContext#isFBOAvailable(AbstractGraphicsDevice, GLProfile) * @see javax.media.opengl.GLCapabilities#isOnscreen() * @see javax.media.opengl.GLCapabilities#isFBO() @@ -482,7 +482,7 @@ public abstract class GLDrawableFactory { *
** A Pbuffer based auto drawable is created if both {@link GLCapabilitiesImmutable#isPBuffer() caps.isPBuffer()} - * and {@link #canCreateGLPbuffer(AbstractGraphicsDevice) canCreateGLPbuffer(device)} is true. + * and {@link #canCreateGLPbuffer(AbstractGraphicsDevice, GLProfile) canCreateGLPbuffer(device)} is true. *
** If neither FBO nor Pbuffer is available, @@ -520,7 +520,7 @@ public abstract class GLDrawableFactory { *
** A Pbuffer drawable is created if both {@link GLCapabilitiesImmutable#isPBuffer() caps.isPBuffer()} - * and {@link #canCreateGLPbuffer(AbstractGraphicsDevice) canCreateGLPbuffer(device)} is true. + * and {@link #canCreateGLPbuffer(AbstractGraphicsDevice, GLProfile) canCreateGLPbuffer(device)} is true. *
** If neither FBO nor Pbuffer is available, @@ -590,12 +590,16 @@ public abstract class GLDrawableFactory { public abstract boolean canCreateFBO(AbstractGraphicsDevice device, GLProfile glp); /** - * Returns true if it is possible to create a GLPbuffer. Some older - * graphics cards do not have this capability. + * Returns true if it is possible to create an pbuffer surface. + *
+ * Some older graphics cards do not have this capability, + * as well as some new GL implementation, i.e. OpenGL 3 core on OSX. + *
* * @param device which {@link javax.media.nativewindow.AbstractGraphicsDevice#getConnection() connection} denotes the shared the target device, may benull
for the platform's default device.
+ * @param glp {@link GLProfile} to check for FBO capabilities
*/
- public abstract boolean canCreateGLPbuffer(AbstractGraphicsDevice device);
+ public abstract boolean canCreateGLPbuffer(AbstractGraphicsDevice device, GLProfile glp);
/**
* Creates a GLPbuffer {@link GLAutoDrawable} with the given capabilites and dimensions.
diff --git a/src/jogl/classes/jogamp/opengl/GLContextImpl.java b/src/jogl/classes/jogamp/opengl/GLContextImpl.java
index 6f4f6f271..996a47590 100644
--- a/src/jogl/classes/jogamp/opengl/GLContextImpl.java
+++ b/src/jogl/classes/jogamp/opengl/GLContextImpl.java
@@ -1851,7 +1851,7 @@ public abstract class GLContextImpl extends GLContext {
}
@Override
- public boolean isExtensionAvailable(String glExtensionName) {
+ public final boolean isExtensionAvailable(String glExtensionName) {
if(null!=extensionAvailability) {
return extensionAvailability.isExtensionAvailable(mapToRealGLExtensionName(glExtensionName));
}
diff --git a/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java b/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java
index 4ac413545..41ea06deb 100644
--- a/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java
+++ b/src/jogl/classes/jogamp/opengl/GLDrawableFactoryImpl.java
@@ -247,7 +247,7 @@ public abstract class GLDrawableFactoryImpl extends GLDrawableFactory {
//
@Override
- public abstract boolean canCreateGLPbuffer(AbstractGraphicsDevice device);
+ public abstract boolean canCreateGLPbuffer(AbstractGraphicsDevice device, GLProfile glp);
@Override
public GLPbuffer createGLPbuffer(AbstractGraphicsDevice deviceReq,
@@ -263,7 +263,7 @@ public abstract class GLDrawableFactoryImpl extends GLDrawableFactory {
if(null == device) {
throw new GLException("No shared device for requested: "+deviceReq);
}
- if ( !canCreateGLPbuffer(device) ) {
+ if ( !canCreateGLPbuffer(device, capsRequested.getGLProfile()) ) {
throw new GLException("Pbuffer not available with device: "+device);
}
diff --git a/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java b/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java
index 48b509263..d54da4d28 100644
--- a/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java
+++ b/src/jogl/classes/jogamp/opengl/GLGraphicsConfigurationUtil.java
@@ -200,8 +200,9 @@ public class GLGraphicsConfigurationUtil {
if(null == device) {
device = factory.getDefaultDevice();
}
- final boolean fboAvailable = GLContext.isFBOAvailable(device, capsRequested.getGLProfile());
- final boolean pbufferAvailable = factory.canCreateGLPbuffer(device);
+ final GLProfile glp = capsRequested.getGLProfile();
+ final boolean fboAvailable = GLContext.isFBOAvailable(device, glp);
+ final boolean pbufferAvailable = factory.canCreateGLPbuffer(device, glp);
final GLRendererQuirks glrq = factory.getRendererQuirks(device);
final boolean bitmapAvailable;
diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java
index 465c8fa80..9c1cc7fc4 100644
--- a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java
@@ -703,7 +703,7 @@ public class EGLDrawableFactory extends GLDrawableFactoryImpl {
}
@Override
- public boolean canCreateGLPbuffer(AbstractGraphicsDevice device) {
+ public boolean canCreateGLPbuffer(AbstractGraphicsDevice device, GLProfile glp) {
// SharedResource sr = getOrCreateEGLSharedResource(device);
// return sr.hasES1PBuffer() || sr.hasES2PBuffer();
return true;
diff --git a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
index 9b163ae5b..6787ef500 100644
--- a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
+++ b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLContext.java
@@ -74,7 +74,6 @@ import com.jogamp.common.util.VersionNumber;
import com.jogamp.common.util.locks.RecursiveLock;
import com.jogamp.gluegen.runtime.ProcAddressTable;
import com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver;
-import com.jogamp.opengl.GLExtensions;
import com.jogamp.opengl.GLRendererQuirks;
import com.jogamp.opengl.util.PMVMatrix;
import com.jogamp.opengl.util.glsl.ShaderCode;
@@ -465,15 +464,6 @@ public class MacOSXCGLContext extends GLContextImpl
return new StringBuilder();
}
- @Override
- public boolean isExtensionAvailable(String glExtensionName) {
- if (glExtensionName.equals(GLExtensions.ARB_pbuffer) ||
- glExtensionName.equals(GLExtensions.ARB_pixel_format)) {
- return true;
- }
- return super.isExtensionAvailable(glExtensionName);
- }
-
// Support for "mode switching" as described in MacOSXCGLDrawable
public void setOpenGLMode(GLBackendType mode) {
if (mode == openGLMode) {
diff --git a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java
index c9402b33d..83d656475 100644
--- a/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/macosx/cgl/MacOSXCGLDrawableFactory.java
@@ -332,8 +332,13 @@ public class MacOSXCGLDrawableFactory extends GLDrawableFactoryImpl {
}
@Override
- public boolean canCreateGLPbuffer(AbstractGraphicsDevice device) {
- return true;
+ public boolean canCreateGLPbuffer(AbstractGraphicsDevice device, GLProfile glp) {
+ if( glp.isGL2() ) {
+ // OSX only supports pbuffer w/ compatible, non-core, context.
+ return true;
+ } else {
+ return false;
+ }
}
@Override
diff --git a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java
index 45edda516..338a351cb 100644
--- a/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/windows/wgl/WindowsWGLDrawableFactory.java
@@ -470,7 +470,7 @@ public class WindowsWGLDrawableFactory extends GLDrawableFactoryImpl {
}
@Override
- public final boolean canCreateGLPbuffer(AbstractGraphicsDevice device) {
+ public final boolean canCreateGLPbuffer(AbstractGraphicsDevice device, GLProfile glp) {
SharedResource sr = getOrCreateSharedResourceImpl( ( null != device ) ? device : defaultDevice );
if(null!=sr) {
return sr.hasARBPBuffer();
diff --git a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
index b3b02e23f..52069b88f 100644
--- a/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
+++ b/src/jogl/classes/jogamp/opengl/x11/glx/X11GLXDrawableFactory.java
@@ -490,7 +490,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl {
}
@Override
- public final boolean canCreateGLPbuffer(AbstractGraphicsDevice device) {
+ public final boolean canCreateGLPbuffer(AbstractGraphicsDevice device, GLProfile glp) {
if(null == device) {
SharedResourceRunner.Resource sr = sharedResourceRunner.getOrCreateShared(defaultDevice);
if(null!=sr) {
@@ -551,7 +551,7 @@ public class X11GLXDrawableFactory extends GLDrawableFactoryImpl {
@Override
public final boolean canCreateExternalGLDrawable(AbstractGraphicsDevice device) {
- return canCreateGLPbuffer(device);
+ return canCreateGLPbuffer(device, null /* GLProfile not used for query on X11 */);
}
@Override
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestAddRemove01GLCanvasSwingAWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestAddRemove01GLCanvasSwingAWT.java
index c2eebbfd8..d96a49bb8 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestAddRemove01GLCanvasSwingAWT.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestAddRemove01GLCanvasSwingAWT.java
@@ -63,20 +63,22 @@ public class TestAddRemove01GLCanvasSwingAWT extends UITestCase {
static boolean noOffscreenTest = false;
static boolean offscreenPBufferOnly = false;
static boolean offscreenFBOOnly = false;
- static GLProfile glp;
+ static GLProfile glpGL2, glpGL2ES2;
static int width, height;
static boolean waitForKey = false;
static boolean waitForKeyPost = false;
@BeforeClass
public static void initClass() {
+ width = 640;
+ height = 480;
if(GLProfile.isAvailable(GLProfile.GL2ES2)) {
- glp = GLProfile.get(GLProfile.GL2ES2);
- Assert.assertNotNull(glp);
- width = 640;
- height = 480;
- } else {
- setTestSupported(false);
+ glpGL2ES2 = GLProfile.get(GLProfile.GL2ES2);
+ Assert.assertNotNull(glpGL2ES2);
+ }
+ if(GLProfile.isAvailable(GLProfile.GL2)) {
+ glpGL2 = GLProfile.get(GLProfile.GL2);
+ Assert.assertNotNull(glpGL2);
}
}
@@ -198,7 +200,7 @@ public class TestAddRemove01GLCanvasSwingAWT extends UITestCase {
System.err.println("No onscreen test requested or platform doesn't support onscreen rendering.");
return;
}
- GLCapabilities caps = new GLCapabilities(glp);
+ GLCapabilities caps = new GLCapabilities(glpGL2ES2);
runTestGL(true, caps, addRemoveCount);
}
@@ -214,7 +216,7 @@ public class TestAddRemove01GLCanvasSwingAWT extends UITestCase {
System.err.println("Only PBuffer test is requested.");
return;
}
- GLCapabilities caps = new GLCapabilities(glp);
+ GLCapabilities caps = new GLCapabilities(glpGL2ES2);
if(offscreenPBufferOnly) {
caps.setPBuffer(true);
caps.setOnscreen(true); // simulate normal behavior ..
@@ -234,7 +236,7 @@ public class TestAddRemove01GLCanvasSwingAWT extends UITestCase {
System.err.println("Only FBO test is requested.");
return;
}
- GLCapabilities caps = new GLCapabilities(glp);
+ GLCapabilities caps = new GLCapabilities(glpGL2);
caps.setPBuffer(true);
caps.setOnscreen(true); // simulate normal behavior ..
runTestGL(false, caps, addRemoveCount);
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestBug461FBOSupersamplingSwingAWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestBug461FBOSupersamplingSwingAWT.java
index 22c1f62dd..56e308427 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestBug461FBOSupersamplingSwingAWT.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestBug461FBOSupersamplingSwingAWT.java
@@ -142,7 +142,7 @@ public class TestBug461FBOSupersamplingSwingAWT extends UITestCase implements GL
GLDrawableFactory fac = GLDrawableFactory.getFactory(glp);
Assert.assertNotNull(fac);
- Assert.assertTrue( fac.canCreateGLPbuffer(GLProfile.getDefaultDevice()) );
+ Assert.assertTrue( fac.canCreateGLPbuffer(GLProfile.getDefaultDevice(), glp) );
GLCapabilities glCap = new GLCapabilities(glp);
Assert.assertNotNull(glCap);
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestBug461PBufferSupersamplingSwingAWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestBug461PBufferSupersamplingSwingAWT.java
index 5b7052c37..bda1a29fd 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestBug461PBufferSupersamplingSwingAWT.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/awt/TestBug461PBufferSupersamplingSwingAWT.java
@@ -126,7 +126,7 @@ public class TestBug461PBufferSupersamplingSwingAWT extends UITestCase implement
GLDrawableFactory fac = GLDrawableFactory.getFactory(glp);
Assert.assertNotNull(fac);
- Assert.assertTrue( fac.canCreateGLPbuffer(GLProfile.getDefaultDevice()) );
+ Assert.assertTrue( fac.canCreateGLPbuffer(GLProfile.getDefaultDevice(), glp) );
GLCapabilities glCap = new GLCapabilities(glp);
Assert.assertNotNull(glCap);
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1NEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1NEWT.java
index 5bbd6737c..bc4ee5502 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1NEWT.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES1NEWT.java
@@ -72,54 +72,54 @@ public class TestMultisampleES1NEWT extends UITestCase {
@Test
public void testOnscreenMultiSampleAA0() throws InterruptedException {
- testMultiSampleAAImpl(true, 0);
+ testMultiSampleAAImpl(false, false, 0);
}
@Test
public void testOnscreenMultiSampleAA2() throws InterruptedException {
- testMultiSampleAAImpl(true, 2);
+ testMultiSampleAAImpl(false, false, 2);
}
@Test
public void testOnscreenMultiSampleAA4() throws InterruptedException {
- testMultiSampleAAImpl(true, 4);
+ testMultiSampleAAImpl(false, false, 4);
}
@Test
public void testOnscreenMultiSampleAA8() throws InterruptedException {
- testMultiSampleAAImpl(true, 8);
+ testMultiSampleAAImpl(false, false, 8);
}
@Test
- public void testOffscreenMultiSampleAA0() throws InterruptedException {
- testMultiSampleAAImpl(false, 0);
+ public void testOffscreenPBufferMultiSampleAA0() throws InterruptedException {
+ testMultiSampleAAImpl(false, true, 0);
}
@Test
- public void testOffscreenMultiSampleAA2() throws InterruptedException {
- testMultiSampleAAImpl(false, 2);
+ public void testOffsreenPBufferMultiSampleAA8() throws InterruptedException {
+ testMultiSampleAAImpl(false, true, 8);
}
@Test
- public void testOffscreenMultiSampleAA4() throws InterruptedException {
- testMultiSampleAAImpl(false, 4);
+ public void testOffscreenFBOMultiSampleAA0() throws InterruptedException {
+ testMultiSampleAAImpl(true, false, 0);
}
@Test
- public void testOffsreenMultiSampleAA8() throws InterruptedException {
- testMultiSampleAAImpl(false, 8);
+ public void testOffsreenFBOMultiSampleAA8() throws InterruptedException {
+ testMultiSampleAAImpl(true, false, 8);
}
- private void testMultiSampleAAImpl(boolean onscreen, int reqSamples) throws InterruptedException {
+ private void testMultiSampleAAImpl(boolean useFBO, boolean usePBuffer, int reqSamples) throws InterruptedException {
final GLReadBufferUtil screenshot = new GLReadBufferUtil(true, false);
GLProfile glp = GLProfile.getMaxFixedFunc(true);
GLCapabilities caps = new GLCapabilities(glp);
GLCapabilitiesChooser chooser = new MultisampleChooser01();
- if(!onscreen) {
- caps.setOnscreen(onscreen);
- caps.setPBuffer(true);
- }
+ caps.setAlphaBits(1);
+ caps.setFBO(useFBO);
+ caps.setPBuffer(usePBuffer);
+
if(reqSamples>0) {
caps.setSampleBuffers(true);
caps.setNumSamples(reqSamples);
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES2NEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES2NEWT.java
index c2e3215ae..f3d320dff 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES2NEWT.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/caps/TestMultisampleES2NEWT.java
@@ -100,10 +100,6 @@ public class TestMultisampleES2NEWT extends UITestCase {
}
private void testMultiSampleAAImpl(boolean useFBO, boolean usePBuffer, int reqSamples) throws InterruptedException {
- if(useFBO) {
- System.err.println("NEWT offscreen FBO Window n/a yet");
- return;
- }
final GLReadBufferUtil screenshot = new GLReadBufferUtil(true, false);
GLProfile glp = GLProfile.getGL2ES2();
GLCapabilities caps = new GLCapabilities(glp);
diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen01GLPBufferNEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen01GLPBufferNEWT.java
index 2ed471436..f1408d38f 100644
--- a/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen01GLPBufferNEWT.java
+++ b/src/test/com/jogamp/opengl/test/junit/jogl/offscreen/TestOffscreen01GLPBufferNEWT.java
@@ -56,7 +56,7 @@ public class TestOffscreen01GLPBufferNEWT extends UITestCase {
glpDefault = GLProfile.getDefault();
Assert.assertNotNull(glpDefault);
glDrawableFactory = GLDrawableFactory.getFactory(glpDefault);
- System.out.println("INFO: PBuffer supported: "+ glDrawableFactory.canCreateGLPbuffer(null));
+ System.out.println("INFO: PBuffer supported: "+ glDrawableFactory.canCreateGLPbuffer(null, glpDefault));
width = 640;
height = 480;
}
@@ -108,7 +108,7 @@ public class TestOffscreen01GLPBufferNEWT extends UITestCase {
@Test
public void test01aOffscreenWindowPBuffer() {
- if(!glDrawableFactory.canCreateGLPbuffer(null)) {
+ if(!glDrawableFactory.canCreateGLPbuffer(null, capsDefault.getGLProfile())) {
System.out.println("WARNING: PBuffer not supported on this platform - cannot test");
return;
}
@@ -118,7 +118,7 @@ public class TestOffscreen01GLPBufferNEWT extends UITestCase {
@Test
public void test01bOffscreenWindowPBufferStencil() {
- if(!glDrawableFactory.canCreateGLPbuffer(null)) {
+ if(!glDrawableFactory.canCreateGLPbuffer(null, capsDefault.getGLProfile())) {
System.out.println("WARNING: PBuffer not supported on this platform - cannot test");
return;
}
@@ -129,7 +129,7 @@ public class TestOffscreen01GLPBufferNEWT extends UITestCase {
@Test
public void test01cOffscreenWindowPBufferStencilAlpha() {
- if(!glDrawableFactory.canCreateGLPbuffer(null)) {
+ if(!glDrawableFactory.canCreateGLPbuffer(null, capsDefault.getGLProfile())) {
System.out.println("WARNING: PBuffer not supported on this platform - cannot test");
return;
}
@@ -141,7 +141,7 @@ public class TestOffscreen01GLPBufferNEWT extends UITestCase {
@Test
public void test01cOffscreenWindowPBuffer555() {
- if(!glDrawableFactory.canCreateGLPbuffer(null)) {
+ if(!glDrawableFactory.canCreateGLPbuffer(null, capsDefault.getGLProfile())) {
System.out.println("WARNING: PBuffer not supported on this platform - cannot test");
return;
}
@@ -154,7 +154,7 @@ public class TestOffscreen01GLPBufferNEWT extends UITestCase {
@Test
public void test02Offscreen3Windows1DisplayPBuffer() {
- if(!glDrawableFactory.canCreateGLPbuffer(null)) {
+ if(!glDrawableFactory.canCreateGLPbuffer(null, capsDefault.getGLProfile())) {
System.out.println("WARNING: PBuffer not supported on this platform - cannot test");
return;
}
@@ -207,7 +207,7 @@ public class TestOffscreen01GLPBufferNEWT extends UITestCase {
@Test
public void test03Offscreen3Windows3DisplaysPBuffer() {
- if(!glDrawableFactory.canCreateGLPbuffer(null)) {
+ if(!glDrawableFactory.canCreateGLPbuffer(null, capsDefault.getGLProfile())) {
System.out.println("WARNING: PBuffer not supported on this platform - cannot test");
return;
}
@@ -260,7 +260,7 @@ public class TestOffscreen01GLPBufferNEWT extends UITestCase {
@Test
public void test04OffscreenSnapshotWithDemoPBuffer() {
- if(!glDrawableFactory.canCreateGLPbuffer(null)) {
+ if(!glDrawableFactory.canCreateGLPbuffer(null, capsDefault.getGLProfile())) {
System.out.println("WARNING: PBuffer not supported on this platform - cannot test");
return;
}
--
cgit v1.2.3
From 74556de87d90539608cc69f072476e54b1a74f77 Mon Sep 17 00:00:00 2001
From: Sven Gothel true
(default), bootstrapping the available GL profiles
* will use the highest compatible GL context for each profile,
@@ -102,10 +106,6 @@ public abstract class GLContext {
protected static final boolean FORCE_NO_FBO_SUPPORT = Debug.isPropertyDefined("jogl.fbo.force.none", true);
protected static final boolean FORCE_MIN_FBO_SUPPORT = Debug.isPropertyDefined("jogl.fbo.force.min", true);
- public static final boolean DEBUG = Debug.debug("GLContext");
- public static final boolean TRACE_SWITCH = Debug.isPropertyDefined("jogl.debug.GLContext.TraceSwitch", true);
- public static final boolean DEBUG_TRACE_SWITCH = DEBUG || TRACE_SWITCH;
-
/** Reflects property jogl.debug.DebugGL. If true, the debug pipeline is enabled at context creation. */
public static final boolean DEBUG_GL = Debug.isPropertyDefined("jogl.debug.DebugGL", true);
/** Reflects property jogl.debug.TraceGL. If true, the trace pipeline is enabled at context creation. */
diff --git a/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java b/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java
index d3f20b2e5..2a23defbe 100644
--- a/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java
+++ b/src/jogl/classes/javax/media/opengl/awt/GLJPanel.java
@@ -138,9 +138,9 @@ import com.jogamp.opengl.util.awt.AWTGLPixelBuffer.SingleAWTGLPixelBufferProvide
@SuppressWarnings("serial")
public class GLJPanel extends JPanel implements AWTGLAutoDrawable, WindowClosingProtocol {
- private static final boolean DEBUG = Debug.debug("GLJPanel");
- private static final boolean DEBUG_VIEWPORT = Debug.isPropertyDefined("jogl.debug.GLJPanel.Viewport", true);
- private static final boolean USE_GLSL_TEXTURE_RASTERIZER = !Debug.isPropertyDefined("jogl.gljpanel.noglsl", true);
+ private static final boolean DEBUG;
+ private static final boolean DEBUG_VIEWPORT;
+ private static final boolean USE_GLSL_TEXTURE_RASTERIZER;
/** Indicates whether the Java 2D OpenGL pipeline is requested by user. */
private static final boolean java2dOGLEnabledByProp;
@@ -152,11 +152,17 @@ public class GLJPanel extends JPanel implements AWTGLAutoDrawable, WindowClosing
private static boolean java2DGLPipelineOK;
static {
+ Debug.initSingleton();
+ DEBUG = Debug.debug("GLJPanel");
+ DEBUG_VIEWPORT = Debug.isPropertyDefined("jogl.debug.GLJPanel.Viewport", true);
+ USE_GLSL_TEXTURE_RASTERIZER = !Debug.isPropertyDefined("jogl.gljpanel.noglsl", true);
+
boolean enabled = false;
final String sVal = System.getProperty("sun.java2d.opengl");
if( null != sVal ) {
enabled = Boolean.valueOf(sVal);
}
+ Debug.initSingleton();
java2dOGLEnabledByProp = enabled && !Debug.isPropertyDefined("jogl.gljpanel.noogl", true);
enabled = false;
diff --git a/src/jogl/classes/jogamp/opengl/Debug.java b/src/jogl/classes/jogamp/opengl/Debug.java
index f87f1bb3f..b88a09b71 100644
--- a/src/jogl/classes/jogamp/opengl/Debug.java
+++ b/src/jogl/classes/jogamp/opengl/Debug.java
@@ -68,16 +68,19 @@ public class Debug extends PropertyAccess {
System.err.println("JOGL implementation vendor " + p.getImplementationVendor());
}
}
+
+ /** Ensures static init block has been issues, i.e. if calling through to {@link PropertyAccess#isPropertyDefined(String, boolean)}. */
+ public static final void initSingleton() {}
- public static boolean verbose() {
+ public static final boolean verbose() {
return verbose;
}
- public static boolean debugAll() {
+ public static final boolean debugAll() {
return debugAll;
}
- public static boolean debug(String subcomponent) {
+ public static final boolean debug(String subcomponent) {
return debugAll() || isPropertyDefined("jogl.debug." + subcomponent, true);
}
}
diff --git a/src/jogl/classes/jogamp/opengl/GLBufferSizeTracker.java b/src/jogl/classes/jogamp/opengl/GLBufferSizeTracker.java
index 78ab7cc93..17646cc7b 100644
--- a/src/jogl/classes/jogamp/opengl/GLBufferSizeTracker.java
+++ b/src/jogl/classes/jogamp/opengl/GLBufferSizeTracker.java
@@ -87,6 +87,13 @@ import com.jogamp.common.util.IntLongHashMap;
*/
public class GLBufferSizeTracker {
+ protected static final boolean DEBUG;
+
+ static {
+ Debug.initSingleton();
+ DEBUG = Debug.isPropertyDefined("jogl.debug.GLBufferSizeTracker", true);
+ }
+
// Map from buffer names to sizes.
// Note: should probably have some way of shrinking this map, but
// can't just make it a WeakHashMap because nobody holds on to the
@@ -95,8 +102,7 @@ public class GLBufferSizeTracker {
// pattern of buffer objects indicates that the fact that this map
// never shrinks is probably not that bad.
private IntLongHashMap bufferSizeMap;
- protected static final boolean DEBUG = Debug.isPropertyDefined("jogl.debug.GLBufferSizeTracker", true);
-
+
public GLBufferSizeTracker() {
bufferSizeMap = new IntLongHashMap();
bufferSizeMap.setKeyNotFoundValue(0xFFFFFFFFFFFFFFFFL);
diff --git a/src/jogl/classes/jogamp/opengl/GLBufferStateTracker.java b/src/jogl/classes/jogamp/opengl/GLBufferStateTracker.java
index 7f5316fbd..890c82c90 100644
--- a/src/jogl/classes/jogamp/opengl/GLBufferStateTracker.java
+++ b/src/jogl/classes/jogamp/opengl/GLBufferStateTracker.java
@@ -76,7 +76,13 @@ import com.jogamp.common.util.IntIntHashMap;
*/
public class GLBufferStateTracker {
- protected static final boolean DEBUG = Debug.isPropertyDefined("jogl.debug.GLBufferStateTracker", true);
+ protected static final boolean DEBUG;
+
+ static {
+ Debug.initSingleton();
+ DEBUG = Debug.isPropertyDefined("jogl.debug.GLBufferStateTracker", true);
+ }
+
// Maps binding targets to buffer objects. A null value indicates
// that the binding is unknown. A zero value indicates that it is
// known that no buffer is bound to the target, according to the
diff --git a/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java b/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java
index 8be910c1a..5418fbaf3 100644
--- a/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java
+++ b/src/jogl/classes/jogamp/opengl/GLDrawableHelper.java
@@ -62,8 +62,13 @@ import javax.media.opengl.GLRunnable;
methods to be able to share it between GLAutoDrawable implementations like GLAutoDrawableBase, GLCanvas and GLJPanel. */
public class GLDrawableHelper {
/** true if property jogl.debug.GLDrawable.PerfStats
is defined. */
- private static final boolean PERF_STATS = Debug.isPropertyDefined("jogl.debug.GLDrawable.PerfStats", true);
+ private static final boolean PERF_STATS;
+ static {
+ Debug.initSingleton();
+ PERF_STATS = Debug.isPropertyDefined("jogl.debug.GLDrawable.PerfStats", true);
+ }
+
protected static final boolean DEBUG = GLDrawableImpl.DEBUG;
private final Object listenersLock = new Object();
private final ArrayList
@@ -92,7 +94,6 @@ public class X11Util implements ToolkitProperties {
*/
public static final boolean ATI_HAS_MULTITHREADING_BUG = !Debug.isPropertyDefined("nativewindow.debug.X11Util.ATI_HAS_NO_MULTITHREADING_BUG", true);
- public static final boolean DEBUG = Debug.debug("X11Util");
public static final boolean XSYNC_ENABLED = Debug.isPropertyDefined("nativewindow.debug.X11Util.XSync", true);
public static final boolean XERROR_STACKDUMP = DEBUG || Debug.isPropertyDefined("nativewindow.debug.X11Util.XErrorStackDump", true);
private static final boolean TRACE_DISPLAY_LIFECYCLE = Debug.isPropertyDefined("nativewindow.debug.X11Util.TraceDisplayLifecycle", true);
diff --git a/src/newt/classes/jogamp/newt/Debug.java b/src/newt/classes/jogamp/newt/Debug.java
index 676d9b758..4b0a98216 100644
--- a/src/newt/classes/jogamp/newt/Debug.java
+++ b/src/newt/classes/jogamp/newt/Debug.java
@@ -69,15 +69,18 @@ public class Debug extends PropertyAccess {
}
}
- public static boolean verbose() {
+ /** Ensures static init block has been issues, i.e. if calling through to {@link PropertyAccess#isPropertyDefined(String, boolean)}. */
+ public static final void initSingleton() {}
+
+ public static final boolean verbose() {
return verbose;
}
- public static boolean debugAll() {
+ public static final boolean debugAll() {
return debugAll;
}
- public static boolean debug(String subcomponent) {
+ public static final boolean debug(String subcomponent) {
return debugAll() || isPropertyDefined("newt.debug." + subcomponent, true);
}
}
diff --git a/src/newt/classes/jogamp/newt/ScreenImpl.java b/src/newt/classes/jogamp/newt/ScreenImpl.java
index fe9e91b57..5ffa2ebbf 100644
--- a/src/newt/classes/jogamp/newt/ScreenImpl.java
+++ b/src/newt/classes/jogamp/newt/ScreenImpl.java
@@ -55,7 +55,12 @@ import com.jogamp.newt.event.MonitorModeListener;
import com.jogamp.newt.util.MonitorModeUtil;
public abstract class ScreenImpl extends Screen implements MonitorModeListener {
- protected static final boolean DEBUG_TEST_SCREENMODE_DISABLED = Debug.isPropertyDefined("newt.test.Screen.disableScreenMode", true);
+ protected static final boolean DEBUG_TEST_SCREENMODE_DISABLED;
+
+ static {
+ Debug.initSingleton();
+ DEBUG_TEST_SCREENMODE_DISABLED = Debug.isPropertyDefined("newt.test.Screen.disableScreenMode", true);
+ }
public static final int default_sm_bpp = 32;
public static final int default_sm_widthmm = 519;
diff --git a/src/newt/classes/jogamp/newt/WindowImpl.java b/src/newt/classes/jogamp/newt/WindowImpl.java
index 2c3c903f1..caa461e41 100644
--- a/src/newt/classes/jogamp/newt/WindowImpl.java
+++ b/src/newt/classes/jogamp/newt/WindowImpl.java
@@ -81,14 +81,17 @@ import jogamp.nativewindow.SurfaceUpdatedHelper;
public abstract class WindowImpl implements Window, NEWTEventConsumer
{
- public static final boolean DEBUG_TEST_REPARENT_INCOMPATIBLE = Debug.isPropertyDefined("newt.test.Window.reparent.incompatible", true);
-
- protected static final ArrayList