aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/sun/gluegen/JavaConfiguration.java
Commit message (Collapse)AuthorAgeFilesLines
* Recently code (UnifiedName, GLUnifiedName) was added to GlueGen toKenneth Russel2009-05-201-24/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | automatically detect duplicate constant and function definitions between vendor and ARB extensions and the OpenGL core, and to remove the suffixes of ARB extensions. This code has helped automate the process of discovering extensions that were promoted into the OpenGL core. While this code has saved some manual effort, it has also caused several problems: 1. It causes obsolete ARB extensions to be incorrectly moved into the core OpenGL namespace. GL_ARB_texture_rectangle, GL_ARB_vertex_blend, and GL_ARB_matrix_palette are examples of extensions that should not have their ARB suffixes removed because they are dead-end extensions. Definitions which are explicitly specified that they will change, such as those in the EGL_KHR_sync extension, were also incorrectly moved into the core namespace. 2. It has caused certain OpenGL ES-specific definitions to accidentally be promoted into the core OpenGL namespace: for example, the constants associated with the GL_OES_point_size_array extension, which were incorrectly placed into the GL2ES1 interface. 3. It causes namespace collisions between certain ARB extensions that are only accessible via their ARB entry points and core OpenGL routines: specifically GL_ARB_vertex_program and GL_ARB_fragment program. Based on tests on NVIDIA's drivers, when a developer wants to use the earlier ARB_vertex_program and ARB_fragment_program semantics rather than GLSL, it is mandatory to use the ARB entry points rather than the core OpenGL entry points. 4. It is not easy to configure the behavior of this automatic merging, nor easy to see how it would be extended to be configurable. 5. It does not address the problem of detecting which extensions are common between desktop OpenGL and OpenGL ES. A different algorithm would be needed to solve that problem. 6. It has a high degree of functional overlap to the IgnoreExtension directive which has previously been used to ignore ARB extensions that were promoted into the OpenGL core. There were already IgnoreExtension directives in place for all of the OpenGL extensions subsumed in OpenGL 1.1 through 1.3. 7. It has been the cause of several bugs and unexpected interactions with the Ignore and ForceProcAddressGen directives. After careful consideration, it appears that the problems with this code outweigh the benefits and it has been removed. The run-time code which attempts to find extension variants of core entry points has been retained, however. To reduce the amount of subsequent manual work, the following additions have been made: 1. A generic SymbolFilter mechanism has been added to GlueGen, which can be used to pre-process the entire set of constant and function definitions at any time during glue code generation (although it is recommended to do so at the beginning of processing, i.e., in GlueEmitter.beginEmission()). 2. The RenameJavaMethod directive has been generalized to RenameJavaSymbol, and can now work on constant definitions. 3. A ConstantDefinition class has been added. 4. A RenameExtensionIntoCore directive has been added to the GLEmitter which will rename all constant definitions and entry points associated with a particular OpenGL extension into the core namespace, i.e., stripping off any ARB or similar suffixes. 5. An AutoUnifyExtensions directive has been added which is disabled by default but which will automatically ignore any OpenGL extension which has been completely subsumed into the OpenGL core and, if not, print out the first declaration in that extension which caused it to fail to be ignored. The extensions common between OpenGL ES and desktop OpenGL have now largely been moved into the core namespace using the RenameExtensionIntoCore directive. A couple of these extensions had slight differences between desktop OpenGL and OpenGL ES; the common declarations were renamed manually. IgnoreExtension directives have been added for those ARB extensions promoted into the OpenGL core up to OpenGL 2.1. A few extensions which were either silently promoted into the core specification (GL_EXT_paletted_texture) or are obsolete (GL_EXT_multisample, GL_EXT_point_parameters) were also ignored. The GlueGen runtime code which looks up extension versions of core APIs via GLExtensionNames makes this possible without breaking compatibility on older machines that do not support OpenGL 2.1 directly. With these changes, the same effect as the automatic extension unification mechanism has been achieved, with much more explainable and controllable results. Before-and-after versions of all of the public interfaces (GL, GL2ES1, GL2ES2, GLES1, GLES2, and GL2) have been compared by hand to ensure that the results are as expected and desired. Bugs in BuildStaticGLInfo were fixed which were preventing the extension associations in the OpenGL ES headers from being discovered. getExtensions() was added to be able to enumerate the discovered extensions. Most .cfg files were changed to parse both the desktop OpenGL and the OpenGL ES headers using the GLHeaders directive so that the extension associations are known for both sets of APIs. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@134 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Minor changes to debugging outputKenneth Russel2009-03-191-14/+14
| | | | git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@129 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Removed reflective queries from GLProfile and their use inKenneth Russel2009-03-191-2/+2
| | | | | | | | BuildComposablePipeline's generated code. Stopped squelching exceptions in GlueGen. Fixed error in glxext.cfg. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@128 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* - Fixed rootrel.build usage, this works properly through gluegen, jogl-demos ↵Sven Gothel2009-03-051-2/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | and this build. You can say -Drootrel.build=build-x86_64 for example. - Fixed jogl-demos in regard to this changeset - Gluegen - Fixed gluegen BuildComposablePipeline's 'getGL*' methods. Now they return 'this', otherwise the pipeline would be broken/removed. - Add BuildComposablePipeline CustomPipeline, which allows customized class composition with an interface (to be wrapped), prolog class and the downstream class. - Add GlueGen (incl. ant task) 'outputRootDir' to be able to set a top output root dir via ant / commandline. - GL fixed function - Package 'javax.media.opengl.sub.fixed.*' defines some fixed function interfaces. This allows partitioning of custom implementation. - Using gluegen's new CustomPipeline to compose a GLFixedFuncIf implementation, using a GL downstream and a GLFixedFuncHookIf prolog. The latter implements the fixed functionality. Example is the GLFixedFuncImpl. gl.getContext().setGL( new GLFixedFuncImpl(gl, new FixedFuncHook(gl.getGL2ES2())) ) ; or gl.getContext().setGL( new GLFixedFuncImpl(gl, gl.getGL2ES1()) ) ; - The example GLFixedFuncHookIf impl FixedFuncPipeline/ can be instantiated with custom shader code. - ES2 and all other interfaces only contain the original functionality, besides minor convenient data access methods. - Fix: GL2ES2 createCompileShader() and createLoadShader() is moved to ShaderCode util class. - Updated PMVMatrix - Add: GLAutoDrawable.setContext() .. and all it's implementations Necessary to set a new GLContext. - Add: GLContext getAttachedObject(int) and putAttachedObject(int, Object), to allow the user to attach application specific and TLS sensitive objects to the GLContext. - git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@122 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Fixed bug in handling of ignores of ARB extensions caused by Kenneth Russel2008-08-081-2/+2
| | | | | | | | | canonicalization of names, which was exposed by trying to ignore WGL_OML_sync_control. Made static uniqNameMap from JavaConfiguration an instance variable and propagated this throughout the code. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@107 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* - Renamed config: IgnoreExtendedInterfaceSymbols -> ExtendedInterfaceSymbols,Sven Gothel2008-07-211-26/+68
| | | | | | | | | | | | | | | | | | | | so it makes sense with 'ExtendedInterfaceSymbolsOnly' - New config: ExtendedInterfaceSymbolsOnly All symbols not in those Java base classes/interfaces are ignored! - Rewrote/cleanup of the unified names, etc. - Common UnifiedName logic, with specialisation GLUnifiedName - UnifiedName behaves as a Set - UnifiedName function mapping present at all times, and the FunctionSymbol names are mapped to one entity. - DropUniqExtensionNames is now considered within the general shouldIgnore* - GLExtensionNames added: 3DFX git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@104 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Added Config: 'NioDirectOnly [__ALL__|<FuncName>]'Sven Gothel2008-07-181-2/+5
| | | | git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@103 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Adden Config: 'NioOnly [__ALL__|<FuncName>]', fixed other __ALL__ logicSven Gothel2008-07-181-1/+27
| | | | git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@102 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* - New config feature: 'IgnoreExtendedInterfaceSymbols <java class source file>'Sven Gothel2008-07-181-4/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | All enums and functions within the specified interface (or abstract class), will not be emitted in the resulting interface. This simplifies the GL profile config's a lot, as well reducing the footprint. - Adding JavaParser 'com.sun.gluegen.jgram.JavaParser', which collects enums and functions. - New config feature 'UnsupportedExceptionType <exception name>', which complements the 'RuntimeExceptionType <exception name>' feature. UnsupportedExceptionType's are thrown in case a function is not available. - Fix: BuildComposablePipeline - Method names are now unique by: - name, return type, modifiers and arguments - Cleanup: - mv: com.sun.gluegen.runtime.opengl.GLUnifiedName -> com.sun.gluegen.opengl.GLUnifiedName - contains only the compile time portion of the former - add: com.sun.gluegen.opengl.runtime.GLExtensionNames - contains the extension name handling - bulletproof GL function and GL enum recognition. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@101 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Fixed Windows-specific problem with locally generated function pointer Kenneth Russel2008-07-061-4/+7
| | | | | | | | | | | | | | typedefs where the calling convention was not specified. Provided new LocalProcAddressCallingConvention directive to allow developer to specify the calling convention on a per-function basis; used this in gl-es1.cfg and gl-es2.cfg. Changed GLEmitter to force the calling convention of the locally typedefed function pointers for OpenGL function name unification to GL_APIENTRY, compatible with OpenGL ES 1 and OpenGL ES 2. Changed generated native glue code to #define GL_APIENTRY appropriately on the desktop. Refactored custom C code. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@96 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* GL Unification 2nd round.Sven Gothel2008-07-041-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Terminology: ARB Extensions: "GL2", "ARB", "OES", "OML" Vendor Extensions: "EXT", "NV", "ATI", "SGI", "SGIS", "SGIX", "HP", "IBM", "WIN" Pass-1 Unify ARB extensions with the same value Pass-2 Unify vendor extensions, if exist as an ARB extension with the same value. Pass-3 Emit Done: - Unification of GL enumerates - Unification of GL functions - dynamic extension lookup - .. TODO: - Break down GL.java: GL + GL2ES1ES2 (for future GL3, etc) - Add a GL2 small implementation, to only support the GL2ES2 subset, 'GL2SubES2' .. +++ - Fixed X11 build breakage of 'jawt' linkage. - Fixed NEWT native code mouse- and keyevent id's, missed sync while moving them from the bitfield notation. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@93 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* OpenGL Composable Pipeline:Sven Gothel2008-06-211-0/+22
| | | | | | | | | | | | | | | | | | | | | | - Using GL.getContext() interface directly - Adding javax.media.opengl.* to imports ProcAddressEmitter, ProcAddressTable - Generated class implements gluegen runtime's ProcAddressTable, to allow generic access to 'getAddressFor(String functionName)' JavaConfiguration, JavaEmitter - NEW: ParentClass <ThisClass> <ParentClass>, to allow the implementing classes to extend a user spec one - NEW: AccessControl type 'PUBLIC_ABSTRACT", to allow a generated impl. class to be abstract. JavaType.getDescriptor() - Throw a meaningfull exception in case of an unknown type, ie a used type/struct, which could not be generated. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/branches/JOGL_2_SANDBOX@84 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Changed implementation of ArgumentIsString to work with wide-character Kenneth Russel2008-05-271-6/+5
| | | | | | | | | | | | | | null-terminated strings on Windows. Changed Windows dynamic linker to use LoadLibraryW which is the only variant available on Windows CE. Changed GetProcAddress to explicitly named GetProcAddressA; this is implicitly the only variant available on Windows XP. Tested by compiling gluegen-rt.dll for both Windows XP and Windows CE. Also brought dynlink-unix-CustomJavaCode.java in line with modifications that were apparently hand made to the UnixDynamicLinkerImpl and MacOSXDynamicLinkerImpl classes. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/trunk@79 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Added GlueGenRuntimePackage to allow people to rename and incorporate Kenneth Russel2007-06-041-0/+13
| | | | | | | those helper classes into their apps git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/trunk@62 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Fixed and improved handling of Opaque directives for multiple pointer Kenneth Russel2006-05-281-16/+95
| | | | | | | | depths in particular to fix AGLPbuffer case supplied by Justin Couch. Tested with builds on Windows, Linux and Mac OS X and AGL test case. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/trunk@33 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Fixed Issue 212: Incorporate patch to add URL links to GL javadoc Kenneth Russel2006-04-171-0/+10
| | | | | | | | | | | | | Incorporated patch from user cylab on javagaming.org forums to generate @native tags in GL javadoc which are postprocessed using a taglet: http://www.javagaming.org/forums/index.php?topic=12629.0 Modified supplied patch to restrict the @native designation to only the function name, and to understand OpenGL data type-related suffixes (i.e., glVertex -> glVertex3f). git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/trunk@29 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Applied Unignore / IgnoreNot patch from Justin CouchKenneth Russel2006-03-251-1/+25
| | | | git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/trunk@23 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Intermediate checkin for FBO support in Java2D/JOGL bridge. Needed to Kenneth Russel2006-02-051-40/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | keep track of server-side OpenGL objects, like textures and display lists, created by the end user to preserve the illusion of independent contexts even though they will all share textures and display lists with the Java2D OpenGL context in order to access its FBO. Added GLObjectTracker class to track creation and destruction of these objects and to support cleanup when the last referring context has been destroyed. Modified GLContextShareSet to create and install GLObjectTrackers when necessary and GLContext to ref and unref tracker appropriately. Changed GlueGen's JavaPrologue and JavaEpilogue directives (and their documentation) to perform argument name substitution. Wrote documentation section on argument name substitution and specified behavior for primitive arrays (converts to string "array_name, array_name_offset" in substitution). Rephrased GlueGen's RangeCheck directives in terms of JavaPrologue directives and deleted old specialized code. Fixed bug in handling of VBO support in GLConfiguration when JavaPrologue was present for affected functions. Added JavaPrologue and JavaEpilogue directives to all existing OpenGL routines creating server-side objects (though it's possible some were missed) to call GLObjectTracker when necessary. Added RangeCheck directives for these routines as well. Worked around bug in JOGL demos where shutdownDemo() was being called more than once. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/trunk@13 a78bb65f-1512-4460-ba86-f6dc96a7bf27
* Moved GlueGen out of the JOGL workspace and into its own project. Kenneth Russel2006-01-151-0/+1285
Restructured JOGL and JOAL build processes to separately invoke GlueGen's main build.xml before using it to generate their code. Refactored OS/CPU detection code into gluegen-cpptasks.xml build file in GlueGen workspace, which is now imported by both the JOGL and JOAL build processes. Unfortunately it seems to be somewhat difficult to completely factor out the C compiler configuration into the GlueGen workspace so this has been left for a later date. Added missed ALProcAddressLookup file to JOAL workspace. Updated JOGL and JOAL build documentation. More documentation for the GlueGen workspace is forthcoming. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/trunk@3 a78bb65f-1512-4460-ba86-f6dc96a7bf27