<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://jogamp.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gbarbieri</id>
	<title>JogampWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://jogamp.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gbarbieri"/>
	<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Special:Contributions/Gbarbieri"/>
	<updated>2026-04-21T13:12:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1974</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1974"/>
		<updated>2017-03-13T12:53:01Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
* [https://gist.github.com/xranby/ccbcfcaef341f5bd1ba8 Rudimentary standalone example using the fixed pipeline with OpenGL ES 1 by Xerxes Rånby]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle and Texture =&lt;br /&gt;
[https://github.com/elect86/helloTriangle Simple sample] that features GL4, pure newt, glWindow options, animator, indexed drawing, dinamic attribute and frag data binding, interleaved data, vao, vbo (with normalization on one attribute), ibo (with shorts), uniform, glsl program (with specific suffix) and matrix jogl util, gl error check, key listener and right way to dispose. &lt;br /&gt;
&lt;br /&gt;
There is also a gl3 version and a Texture sample.&lt;br /&gt;
&lt;br /&gt;
All the samples are written in Java and [https://en.wikipedia.org/wiki/Kotlin_(programming_language) Kotlin].&lt;br /&gt;
&lt;br /&gt;
= Common Mistakes =&lt;br /&gt;
I suggest you to take a read to these two pages for a quick overview over the most common problems, it is a very useful reading, legacy sections are carefully signaled.&lt;br /&gt;
&lt;br /&gt;
[https://www.opengl.org/wiki/Common_Mistakes OpenGL]&lt;br /&gt;
[https://www.opengl.org/wiki/GLSL_:_common_mistakes GLSL]&lt;br /&gt;
&lt;br /&gt;
Another common mistake that may happen if you port code from C/C++ to Java is this one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Caused by: com.jogamp.opengl.GLException: unpack pixel_buffer_object must be bound to call this method&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkBufferObject(GL4bcImpl.java:40621)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkUnpackPBOBound(GL4bcImpl.java:40707)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.glTexImage2D(GL4bcImpl.java:5535)&lt;br /&gt;
	at tests.gl320.Gl_320_fbo_blit.initTexture(Gl_320_fbo_blit.java:199)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This happens because in C/C++, when you just want to allocate the space for a texture using, for example, &#039;&#039;glTexImage2D&#039;&#039;, you should not pass 0 as the last argument, but &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N.B: The use of color picking is &#039;&#039;&#039;NOT&#039;&#039;&#039; recommended on any hardware whose palette is partially emulated.&lt;br /&gt;
&lt;br /&gt;
= Java OpenGL Samples Pack =&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/elect86/jogl-samples Java OpenGL Samples Pack] (called unsurprisingly jogl-samples) is a port of the [http://www.g-truc.net/project-0026.html OpenGL Samples Pack], a collection of OpenGL samples based on the OpenGL &amp;quot;core profile&amp;quot; specifications.&lt;br /&gt;
&lt;br /&gt;
The project aims to promote the new OpenGL features making easier version transitions for OpenGL programmers with a complementary documentation for the OpenGL specification. Despite the fact that the OpenGL Samples Pack provides as simple (and dumb) as possible samples, it&#039;s not a tutorial for beginner but a project for programmers already familiar with OpenGL. The OpenGL Samples Pack is also a good OpenGL drivers feature test.&lt;br /&gt;
&lt;br /&gt;
These samples illustrate mostly of the OpenGL features from ES 2.0 up to the last GL extenstions, same of them usually also called AZDO (Almost Zero Driver Overhead).&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Building_JOGL_in_Eclipse&amp;diff=1972</id>
		<title>Building JOGL in Eclipse</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Building_JOGL_in_Eclipse&amp;diff=1972"/>
		<updated>2017-02-05T22:42:02Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Why build in Eclipse? =&lt;br /&gt;
&lt;br /&gt;
Building JOGL inside Eclipse lets you use the Eclipse debugger, profiler, and unit test framework. It also gives you useful editing features like auto-complete and red underlines for syntax errors.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
Before you can build JOGL in Eclipse, make sure you can [[Building JOGL on the command line|build it from the command line]]. Then double-check these things:&lt;br /&gt;
&lt;br /&gt;
* to have at least Eclipse Neon 2, that comes with Ant 1.9.6 (jogl requires 1.8+)&lt;br /&gt;
* to have a JDK installed and set up properly.&lt;br /&gt;
** &amp;lt;tt&amp;gt;JAVA_HOME&amp;lt;/tt&amp;gt; is set to your JDK directory. You must use a JDK, not a JRE, because Ant needs &amp;lt;tt&amp;gt;$JAVA_HOME/lib/tools.jar&amp;lt;/tt&amp;gt; (on Windows and Linux).&lt;br /&gt;
** &amp;lt;tt&amp;gt;$JAVA_HOME/bin&amp;lt;/tt&amp;gt; directory is on your PATH. You must use a JDK bin directory, not a JRE bin directory, because Ant needs &amp;lt;tt&amp;gt;$JAVA_HOME/bin/javac&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* to delete the CLASSPATH variable from your system environment variables, &amp;lt;tt&amp;gt;.cshrc&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;.bash_profile&amp;lt;/tt&amp;gt; or other location.&lt;br /&gt;
** having this set with random old JARs on it is one of the leading causes of build problems.&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
To build JOGL in Eclipse, we&#039;ll set up Eclipse&#039;s JRE and Ant version, create Eclipse projects for the gluegen and jogl projects, then add Ant builders to those projects to invoke the JOGL command-line Ant build.&lt;br /&gt;
&lt;br /&gt;
= Set up Eclipse&#039;s workbench VM =&lt;br /&gt;
&lt;br /&gt;
The workbench VM is the version of Java that Eclipse uses to launch itself. Eclipse can find a Java VM on its own by looking in your system&#039;s default locations, but we don&#039;t want that, because it might pick a JRE instead of a JDK, which won&#039;t work with the JOGL Ant build.&lt;br /&gt;
&lt;br /&gt;
* Go to your Eclipse installation directory, and edit the &amp;lt;tt&amp;gt;eclipse.ini&amp;lt;/tt&amp;gt; file (on Mac OS X, it&#039;s at &amp;lt;tt&amp;gt;&amp;amp;lt;eclipse installation directory&amp;amp;gt;/Eclipse.app/Contents/MacOS/eclipse.ini&amp;lt;/tt&amp;gt;).&lt;br /&gt;
* If they don&#039;t exist already, add these lines before the &amp;lt;tt&amp;gt;-vmargs&amp;lt;/tt&amp;gt; line.&lt;br /&gt;
Windows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-vm&lt;br /&gt;
&amp;lt;your JAVA_HOME directory&amp;gt;\jre\bin\javaw.exe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Linux and Mac OS X:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-vm&lt;br /&gt;
&amp;lt;your JAVA_HOME directory&amp;gt;/jre/bin/java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Save and close the file.&lt;br /&gt;
* If Eclipse is running, you must restart it for the setting to take effect.&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done this step, the &amp;lt;tt&amp;gt;javah&amp;lt;/tt&amp;gt; task may fail in the Ant build.&lt;br /&gt;
&lt;br /&gt;
= Switch workspace to the parent of gluegen and jogl =&lt;br /&gt;
&lt;br /&gt;
If you have already the usual configuration:&lt;br /&gt;
&lt;br /&gt;
   /eclipse/workpace/&lt;br /&gt;
                     gluegen/&lt;br /&gt;
                     jogl/&lt;br /&gt;
&lt;br /&gt;
Then you are fine. If not, you need to set your Eclipse workspace to the parent directory of the gluegen and jogl projects. This tells Eclipse where to create its &amp;lt;tt&amp;gt;.metadata&amp;lt;/tt&amp;gt; directory, where it will store your settings for this group of projects.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Switch Workspace&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Other...&#039;&#039;&#039; and then &#039;&#039;&#039;Browse...&#039;&#039;&#039;&lt;br /&gt;
* Navigate to the parent directory of the gluegen and jogl projects, select it, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Workspace Launcher dialog&lt;br /&gt;
&lt;br /&gt;
= Set up Eclipse&#039;s project JRE =&lt;br /&gt;
&lt;br /&gt;
This is the version of Java that Eclipse runs and debugs your projects with. Eclipse will already have some project JRE installed, but we need to make sure that it&#039;s set up properly.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X), then &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Installed JREs&#039;&#039;&#039; on the left&lt;br /&gt;
* Select the checked JRE on the right, then click &#039;&#039;&#039;Edit...&#039;&#039;&#039;&lt;br /&gt;
* Make sure the JRE home is set to the same directory that you&#039;ve got &amp;lt;tt&amp;gt;JAVA_HOME&amp;lt;/tt&amp;gt; set to in your environment. If it&#039;s not, click &#039;&#039;&#039;Directory...&#039;&#039;&#039; to change it&lt;br /&gt;
** This should be a JDK directory&lt;br /&gt;
** The list of JRE system libraries should show a list of &amp;lt;tt&amp;gt;$JAVA_HOME/jre/lib/*.jar&amp;lt;/tt&amp;gt; entries (on Windows and Linux) or a list of &amp;lt;tt&amp;gt;$JAVA_HOME/../Contents/Classes/*.jar&amp;lt;/tt&amp;gt; entries (on Mac OS X)&lt;br /&gt;
* Click &#039;&#039;&#039;Finish&#039;&#039;&#039; to close the Edit JRE dialog, and &#039;&#039;&#039;OK&#039;&#039;&#039; to close the Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Create an Ant user library =&lt;br /&gt;
&lt;br /&gt;
JOGL contains code that uses classes in the Ant JARs. So we need a way to tell our projects where those JARs are. &lt;br /&gt;
&lt;br /&gt;
* we need to know where the Ant bundled with Eclipse is, click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X) &amp;gt; &#039;&#039;&#039;Ant&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;runtime&#039;&#039;&#039;. In &#039;&#039;&#039;Classpath&#039;&#039;&#039; tab, expand &#039;&#039;&#039;Ant Home Entries&#039;&#039;&#039; and annotate down its path, this is your &#039;&#039;antHome&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Build Path&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;User Libraries&#039;&#039;&#039; on the left&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, type &#039;&#039;Ant&#039;&#039; for the library name, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add JARs...&#039;&#039;&#039;, navigate to your &amp;lt;tt&amp;gt;&#039;&#039;antHome&#039;&#039;/lib&amp;lt;/tt&amp;gt; directory, select all the JARs inside, and click &#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to exit Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Create an SWT user library =&lt;br /&gt;
&lt;br /&gt;
To build the SWT tests in JOGL, Eclipse needs to know where the SWT JAR files are.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X), then &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Build Path&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;User Libraries&#039;&#039;&#039; on the left&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, type &#039;&#039;SWT&#039;&#039; for the library name, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add External JARs...&#039;&#039;&#039; button, navigate to your &amp;lt;tt&amp;gt;jogl\make\lib\swt\your-platform&amp;lt;/tt&amp;gt; directory, select &amp;lt;tt&amp;gt;swt-debug.jar&amp;lt;/tt&amp;gt;, and click &#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to exit Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Import the gluegen and jogl projects =&lt;br /&gt;
&lt;br /&gt;
The Eclipse project files for gluegen and jogl should have been checked out along with the source code, so you should be able to import the two projects.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Import...&#039;&#039;&#039;, then select &#039;&#039;&#039;General&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Existing Projects into Workspace&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Next&#039;&#039;&#039; and &#039;&#039;&#039;Browse&#039;&#039;&#039;, then select your workspace directory and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Uncheck any projects in the list except gluegen and jogl and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Create the gluegen project (optional) =&lt;br /&gt;
&lt;br /&gt;
Since the gluegen project files are checked out along with the code, you shouldn&#039;t have to create them yourself. But just for reference, if you did have to create them for some reason, here&#039;s how to do it.&lt;br /&gt;
&lt;br /&gt;
First we create the new gluegen project with default settings.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;New&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Java Project...&#039;&#039;&#039;&lt;br /&gt;
* Set &#039;&#039;gluegen&#039;&#039; as the project name and click the &#039;&#039;&#039;Next&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Finish&#039;&#039;&#039;. This creates the &amp;lt;tt&amp;gt;.project&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;.classpath&amp;lt;/tt&amp;gt; files in the &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; directory&lt;br /&gt;
&lt;br /&gt;
Next we set up the source paths for the project so Eclipse knows which Java files to build. When we created the project, Eclipse automatically found these, but it doesn&#039;t have all the properties set like we want them.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;gluegen&#039;&#039; project and select &#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java Build Path&#039;&#039;&#039;, then click the &#039;&#039;&#039;Source&#039;&#039;&#039; tab and remove any entry you find&lt;br /&gt;
* At the bottom, click &#039;&#039;&#039;Allow output folders for source folders&#039;&#039;&#039;. This allows the Java files in each source folder to be compiled to a different output folder, which we need to match the Ant build&lt;br /&gt;
* Set the &#039;&#039;&#039;Default output folder&#039;&#039;&#039; to &amp;lt;tt&amp;gt;gluegen/build/classes&amp;lt;/tt&amp;gt;&lt;br /&gt;
* For each entry in this table, click &#039;&#039;&#039;Link Source&#039;&#039;&#039;, browser to the right location as the &#039;&#039;Source folder location&#039;&#039; field in the table below, choose a proper name (you may want to substitute &amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;) then &#039;&#039;&#039;Finish&#039;&#039;&#039;. Set also &#039;&#039;Output folder&#039;&#039;, &#039;&#039;Excluded&#039;&#039; and &#039;&#039;Native library location&#039;&#039; accordingly&lt;br /&gt;
&lt;br /&gt;
Pay attention of empty spaces if you copy/paste from the table!&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Source folder location&lt;br /&gt;
! Native library location&lt;br /&gt;
! Output folder&lt;br /&gt;
! Excluded&lt;br /&gt;
|-&lt;br /&gt;
| build/gensrc/java&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| build/test/build/gensrc/classes&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/java&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
| com/jogamp/gluegen/runtime/BufferFactoryInternal.java&lt;br /&gt;
|-&lt;br /&gt;
| src/junit&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| test/junit&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
| com/jogamp/gluegen/StructValidator.java&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we set up the libraries that are needed to build the project.&lt;br /&gt;
&lt;br /&gt;
* Click the &#039;&#039;&#039;Libraries&#039;&#039;&#039; tab and remove all the JARs except &amp;lt;tt&amp;gt;&amp;quot;JRE System Library&amp;quot;&amp;lt;/tt&amp;gt; from the list.&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit 4&#039;&#039;&#039; and then click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Finally we can set up the Ant builder. This lets Eclipse invoke our command-line Ant build.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;gluegen&#039;&#039; project, select &#039;&#039;&#039;Properties&#039;&#039;&#039; and click the &#039;&#039;&#039;Builders&#039;&#039;&#039; tab on the left&lt;br /&gt;
* Uncheck the &#039;&#039;&#039;Java Builder&#039;&#039;&#039;. Click &#039;&#039;&#039;OK&#039;&#039;&#039; when it asks you to confirm. This is needed to prevent Eclipse from rebuilding class files that the Ant builder is responsible for&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, select &#039;&#039;&#039;Ant Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Type &#039;&#039;gluegen builder&#039;&#039; as the name, then set the &#039;&#039;Buildfile&#039;&#039; to &amp;lt;tt&amp;gt;/gluegen/make/build.xml&amp;lt;/tt&amp;gt; and the &#039;&#039;Base Directory&#039;&#039; to &amp;lt;tt&amp;gt;/gluegen/make&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Refresh&#039;&#039;&#039; tab, check &#039;&#039;&#039;Refresh resources upon completion&#039;&#039;&#039;, click &#039;&#039;&#039;The project containing the selected resource&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Targets&#039;&#039;&#039; tab&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;Auto Build&#039;&#039; and control &#039;&#039;&#039;all&#039;&#039;&#039; is checked&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;During a &amp;quot;Clean&amp;quot;&#039;&#039;. Then uncheck &#039;&#039;&#039;all&#039;&#039;&#039;, check &#039;&#039;&#039;clean&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Edit Configuration dialog&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to save and dismiss the Properties dialog. This creates the &amp;lt;tt&amp;gt;.externalToolBuilders&amp;lt;/tt&amp;gt; directory in the glugen project&lt;br /&gt;
&lt;br /&gt;
= Create the jogl project (optional) =&lt;br /&gt;
&lt;br /&gt;
Since the jogl project files are checked out along with the code, you shouldn&#039;t have to create them yourself. But just for reference, if you did have to create them for some reason, here&#039;s how to do it.&lt;br /&gt;
&lt;br /&gt;
To create the jogl project, we do exactly what we did to create the gluegen project, but with different names and paths substituted. First we create the new jogl project with default settings.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;New&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Java Project...&#039;&#039;&#039;&lt;br /&gt;
* Set &#039;&#039;jogl&#039;&#039; as the project name, click &#039;&#039;&#039;Next&#039;&#039;&#039; and then &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Next we set up the source directories for the project.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;jogl&#039;&#039; project and select &#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java Build Path&#039;&#039;&#039;, then click &#039;&#039;&#039;Source&#039;&#039;&#039; tab and remove any entry you find&lt;br /&gt;
* At the bottom, click &#039;&#039;&#039;Allow output folders for source folders&#039;&#039;&#039; and set &#039;&#039;&#039;Default output folder&#039;&#039;&#039; to &amp;lt;tt&amp;gt;jogl/build/jogl/classes&amp;lt;/tt&amp;gt;&lt;br /&gt;
* For each entry in this table, click &#039;&#039;&#039;Link Source&#039;&#039;&#039;, browser to the right location as the &#039;&#039;Source folder location&#039;&#039; field in the table below, choose a proper name (you may want to substitute &amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;) then &#039;&#039;&#039;Finish&#039;&#039;&#039;. Set also &#039;&#039;Output folder&#039;&#039;, &#039;&#039;Excluded&#039;&#039; and &#039;&#039;Native library location&#039;&#039; accordingly&lt;br /&gt;
&lt;br /&gt;
Pay attention of empty spaces if you copy/paste from the table!&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Source folder location&lt;br /&gt;
! Native library location&lt;br /&gt;
! Output folder&lt;br /&gt;
! Excluded&lt;br /&gt;
|-&lt;br /&gt;
| build/jogl/gensrc/classes&lt;br /&gt;
| jogl/build/jogl/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| build/nativewindow/gensrc/classes&lt;br /&gt;
| jogl/build/nativewindow/obj&lt;br /&gt;
| build/nativewindow/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/jogl/classes&lt;br /&gt;
| jogl/build/jogl/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
| com/jogamp/audio/windows/waveout/TestSpatialization.java, jogamp/opengl/gl2/fixme/&lt;br /&gt;
|-&lt;br /&gt;
| src/nativewindow/classes&lt;br /&gt;
| jogl/build/nativewindow/obj&lt;br /&gt;
| build/nativewindow/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/newt/classes&lt;br /&gt;
| jogl/build/newt/obj&lt;br /&gt;
| build/newt/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/test&lt;br /&gt;
|&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The jogl project depends on the gluegen project being built first, so we need to set the dependency between them.&lt;br /&gt;
* Click the &#039;&#039;&#039;Projects&#039;&#039;&#039; tab, &#039;&#039;&#039;Add...&#039;&#039;&#039;, check &#039;&#039;gluegen&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Now we set up the libraries that are needed to build the project:&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Libraries&#039;&#039;&#039; tab and remove all the JARs from the list except &amp;lt;tt&amp;gt;&amp;quot;JRE System Library&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit 4&#039;&#039;&#039; and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;User Library&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, check &#039;&#039;&#039;Ant&#039;&#039;&#039; and &#039;&#039;&#039;SWT&#039;&#039;&#039; and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Finally we can set up the Ant builder.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;jogl&#039;&#039; project, select &#039;&#039;&#039;Properties&#039;&#039;&#039; and click the &#039;&#039;&#039;Builders&#039;&#039;&#039; tab on the left&lt;br /&gt;
* Uncheck the &#039;&#039;&#039;Java Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039; when it asks you to confirm. This is needed to prevent Eclipse from rebuilding class files that the Ant builder is responsible for&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039; button, select &#039;&#039;&#039;Ant Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Type &#039;&#039;jogl builder&#039;&#039; as the name and set &#039;&#039;Buildfile&#039;&#039; to &amp;lt;tt&amp;gt;jogl/make/build.xml&amp;lt;/tt&amp;gt; and &#039;&#039;Base Directory&#039;&#039; to &amp;lt;tt&amp;gt;jogl/make&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Refresh&#039;&#039;&#039; tab, check &#039;&#039;&#039;Refresh resources upon completion&#039;&#039;&#039;, click &#039;&#039;&#039;The project containing the selected resource&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Targets&#039;&#039;&#039; tab&lt;br /&gt;
* For the first three elements (&#039;&#039;After a &amp;quot;Clean&amp;quot;&#039;&#039;, &#039;&#039;Manual Build&#039;&#039; and &#039;&#039;Auto Build&#039;&#039;) now uncheck everything and check &#039;&#039;&#039;all.ide&#039;&#039;&#039; as target&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;During a &amp;quot;Clean&amp;quot;&#039;&#039;, uncheck &#039;&#039;&#039;all&#039;&#039;&#039;, check &#039;&#039;&#039;clean&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Edit Configuration dialog and again &#039;&#039;&#039;OK&#039;&#039;&#039; to save and dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Now we can clean and build both projects in Eclipse.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;Project&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Clean&#039;&#039;&#039;, click &#039;&#039;&#039;Clean all projects&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Install EGit in Eclipse (Eclipse 3.6 and earlier) =&lt;br /&gt;
&lt;br /&gt;
After the build works we can install EGit in Eclipse. This lets you perform Git source control operations from inside Eclipse, though it doesn&#039;t yet support every feature of the command line version. EGit is pre-installed in Eclipse 3.7 and later, so check your Eclipse version before doing this.&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Help &amp;gt; Install New Software...&amp;quot;.&lt;br /&gt;
* Type &amp;lt;tt&amp;gt;http://download.eclipse.org/egit/updates&amp;lt;/tt&amp;gt; in the &amp;quot;Work with&amp;quot; box and press enter.&lt;br /&gt;
* Check &amp;quot;Eclipse Git Team Provider&amp;quot; and &amp;quot;Eclipse JGit&amp;quot; and install them.&lt;br /&gt;
&lt;br /&gt;
= Associate Eclipse projects with Git =&lt;br /&gt;
&lt;br /&gt;
After we install EGit, we have to tell Eclipse that gluegen and jogl are Git projects.&lt;br /&gt;
&lt;br /&gt;
* Right-click &amp;quot;gluegen&amp;quot;, select &amp;quot;Team &amp;gt; Share Project...&amp;quot;, select &amp;quot;Git&amp;quot;, click &amp;quot;Next&amp;quot;, select the .git repository, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
* Do the same thing for the &amp;quot;jogl&amp;quot; project.&lt;br /&gt;
&lt;br /&gt;
Now when you right-click projects or files in the Package Explorer, you can see the Git operations in the &amp;quot;Team&amp;quot; menu.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Building_JOGL_in_Eclipse&amp;diff=1971</id>
		<title>Building JOGL in Eclipse</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Building_JOGL_in_Eclipse&amp;diff=1971"/>
		<updated>2017-02-05T22:40:49Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Why build in Eclipse? =&lt;br /&gt;
&lt;br /&gt;
Building JOGL inside Eclipse lets you use the Eclipse debugger, profiler, and unit test framework. It also gives you useful editing features like auto-complete and red underlines for syntax errors.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
Before you can build JOGL in Eclipse, make sure you can [[Building JOGL on the command line|build it from the command line]]. Then double-check these things:&lt;br /&gt;
&lt;br /&gt;
* to have at least Eclipse Neon 2, that comes with Ant 1.9.6 (jogl requires 1.8+)&lt;br /&gt;
* to have a JDK installed and set up properly.&lt;br /&gt;
** &amp;lt;tt&amp;gt;JAVA_HOME&amp;lt;/tt&amp;gt; is set to your JDK directory. You must use a JDK, not a JRE, because Ant needs &amp;lt;tt&amp;gt;$JAVA_HOME/lib/tools.jar&amp;lt;/tt&amp;gt; (on Windows and Linux).&lt;br /&gt;
** &amp;lt;tt&amp;gt;$JAVA_HOME/bin&amp;lt;/tt&amp;gt; directory is on your PATH. You must use a JDK bin directory, not a JRE bin directory, because Ant needs &amp;lt;tt&amp;gt;$JAVA_HOME/bin/javac&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* to delete the CLASSPATH variable from your system environment variables, &amp;lt;tt&amp;gt;.cshrc&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;.bash_profile&amp;lt;/tt&amp;gt; or other location.&lt;br /&gt;
** having this set with random old JARs on it is one of the leading causes of build problems.&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
To build JOGL in Eclipse, we&#039;ll set up Eclipse&#039;s JRE and Ant version, create Eclipse projects for the gluegen and jogl projects, then add Ant builders to those projects to invoke the JOGL command-line Ant build.&lt;br /&gt;
&lt;br /&gt;
= Set up Eclipse&#039;s workbench VM =&lt;br /&gt;
&lt;br /&gt;
The workbench VM is the version of Java that Eclipse uses to launch itself. Eclipse can find a Java VM on its own by looking in your system&#039;s default locations, but we don&#039;t want that, because it might pick a JRE instead of a JDK, which won&#039;t work with the JOGL Ant build.&lt;br /&gt;
&lt;br /&gt;
* Go to your Eclipse installation directory, and edit the &amp;lt;tt&amp;gt;eclipse.ini&amp;lt;/tt&amp;gt; file (on Mac OS X, it&#039;s at &amp;lt;tt&amp;gt;&amp;amp;lt;eclipse installation directory&amp;amp;gt;/Eclipse.app/Contents/MacOS/eclipse.ini&amp;lt;/tt&amp;gt;).&lt;br /&gt;
* If they don&#039;t exist already, add these lines before the &amp;lt;tt&amp;gt;-vmargs&amp;lt;/tt&amp;gt; line.&lt;br /&gt;
Windows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-vm&lt;br /&gt;
&amp;lt;your JAVA_HOME directory&amp;gt;\jre\bin\javaw.exe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Linux and Mac OS X:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-vm&lt;br /&gt;
&amp;lt;your JAVA_HOME directory&amp;gt;/jre/bin/java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Save and close the file.&lt;br /&gt;
* If Eclipse is running, you must restart it for the setting to take effect.&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done this step, the &amp;lt;tt&amp;gt;javah&amp;lt;/tt&amp;gt; task may fail in the Ant build.&lt;br /&gt;
&lt;br /&gt;
= Switch workspace to the parent of gluegen and jogl =&lt;br /&gt;
&lt;br /&gt;
If you have already the usual configuration:&lt;br /&gt;
&lt;br /&gt;
   /eclipse/workpace/&lt;br /&gt;
                     gluegen/&lt;br /&gt;
                     jogl/&lt;br /&gt;
&lt;br /&gt;
Then you are fine. If not, you need to set your Eclipse workspace to the parent directory of the gluegen and jogl projects. This tells Eclipse where to create its &amp;lt;tt&amp;gt;.metadata&amp;lt;/tt&amp;gt; directory, where it will store your settings for this group of projects.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Switch Workspace&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Other...&#039;&#039;&#039; and then &#039;&#039;&#039;Browse...&#039;&#039;&#039;&lt;br /&gt;
* Navigate to the parent directory of the gluegen and jogl projects, select it, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Workspace Launcher dialog&lt;br /&gt;
&lt;br /&gt;
= Set up Eclipse&#039;s project JRE =&lt;br /&gt;
&lt;br /&gt;
This is the version of Java that Eclipse runs and debugs your projects with. Eclipse will already have some project JRE installed, but we need to make sure that it&#039;s set up properly.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X), then &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Installed JREs&#039;&#039;&#039; on the left&lt;br /&gt;
* Select the checked JRE on the right, then click &#039;&#039;&#039;Edit...&#039;&#039;&#039;&lt;br /&gt;
* Make sure the JRE home is set to the same directory that you&#039;ve got &amp;lt;tt&amp;gt;JAVA_HOME&amp;lt;/tt&amp;gt; set to in your environment. If it&#039;s not, click &#039;&#039;&#039;Directory...&#039;&#039;&#039; to change it&lt;br /&gt;
** This should be a JDK directory&lt;br /&gt;
** The list of JRE system libraries should show a list of &amp;lt;tt&amp;gt;$JAVA_HOME/jre/lib/*.jar&amp;lt;/tt&amp;gt; entries (on Windows and Linux) or a list of &amp;lt;tt&amp;gt;$JAVA_HOME/../Contents/Classes/*.jar&amp;lt;/tt&amp;gt; entries (on Mac OS X)&lt;br /&gt;
* Click &#039;&#039;&#039;Finish&#039;&#039;&#039; to close the Edit JRE dialog, and &#039;&#039;&#039;OK&#039;&#039;&#039; to close the Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Create an Ant user library =&lt;br /&gt;
&lt;br /&gt;
JOGL contains code that uses classes in the Ant JARs. So we need a way to tell our projects where those JARs are. &lt;br /&gt;
&lt;br /&gt;
* we need to know where the Ant bundled with Eclipse is, click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X) &amp;gt; &#039;&#039;&#039;Ant&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;runtime&#039;&#039;&#039;. In &#039;&#039;&#039;Classpath&#039;&#039;&#039; tab, expand &#039;&#039;&#039;Ant Home Entries&#039;&#039;&#039; and annotate down its path, this is your &#039;&#039;antHome&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Build Path&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;User Libraries&#039;&#039;&#039; on the left&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, type &#039;&#039;Ant&#039;&#039; for the library name, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add JARs...&#039;&#039;&#039;, navigate to your &amp;lt;tt&amp;gt;&#039;&#039;antHome&#039;&#039;/lib&amp;lt;/tt&amp;gt; directory, select all the JARs inside, and click &#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to exit Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Create an SWT user library =&lt;br /&gt;
&lt;br /&gt;
To build the SWT tests in JOGL, Eclipse needs to know where the SWT JAR files are.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X), then &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Build Path&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;User Libraries&#039;&#039;&#039; on the left&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, type &#039;&#039;SWT&#039;&#039; for the library name, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add External JARs...&#039;&#039;&#039; button, navigate to your &amp;lt;tt&amp;gt;jogl\make\lib\swt\your-platform&amp;lt;/tt&amp;gt; directory, select &amp;lt;tt&amp;gt;swt-debug.jar&amp;lt;/tt&amp;gt;, and click &#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to exit Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Import the gluegen and jogl projects =&lt;br /&gt;
&lt;br /&gt;
The Eclipse project files for gluegen and jogl should have been checked out along with the source code, so you should be able to import the two projects.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Import...&#039;&#039;&#039;, then select &#039;&#039;&#039;General&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Existing Projects into Workspace&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Next&#039;&#039;&#039; and &#039;&#039;&#039;Browse&#039;&#039;&#039;, then select your workspace directory and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Uncheck any projects in the list except gluegen and jogl and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Create the gluegen project (optional) =&lt;br /&gt;
&lt;br /&gt;
Since the gluegen project files are checked out along with the code, you shouldn&#039;t have to create them yourself. But just for reference, if you did have to create them for some reason, here&#039;s how to do it.&lt;br /&gt;
&lt;br /&gt;
First we create the new gluegen project with default settings.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;New&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Java Project...&#039;&#039;&#039;&lt;br /&gt;
* Set &#039;&#039;gluegen&#039;&#039; as the project name and click the &#039;&#039;&#039;Next&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Finish&#039;&#039;&#039;. This creates the &amp;lt;tt&amp;gt;.project&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;.classpath&amp;lt;/tt&amp;gt; files in the &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; directory&lt;br /&gt;
&lt;br /&gt;
Next we set up the source paths for the project so Eclipse knows which Java files to build. When we created the project, Eclipse automatically found these, but it doesn&#039;t have all the properties set like we want them.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;gluegen&#039;&#039; project and select &#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java Build Path&#039;&#039;&#039;, then click the &#039;&#039;&#039;Source&#039;&#039;&#039; tab and remove any entry you find&lt;br /&gt;
* At the bottom, click &#039;&#039;&#039;Allow output folders for source folders&#039;&#039;&#039;. This allows the Java files in each source folder to be compiled to a different output folder, which we need to match the Ant build&lt;br /&gt;
* Set the &#039;&#039;&#039;Default output folder&#039;&#039;&#039; to &amp;lt;tt&amp;gt;gluegen/build/classes&amp;lt;/tt&amp;gt;&lt;br /&gt;
* For each entry in this table, click &#039;&#039;&#039;Link Source&#039;&#039;&#039;, browser to the right location as the &#039;&#039;Source folder location&#039;&#039; field in the table below, choose a proper name (you may want to substitute &amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;) then &#039;&#039;&#039;Finish&#039;&#039;&#039;. Set also &#039;&#039;Output folder&#039;&#039;, &#039;&#039;Excluded&#039;&#039; and &#039;&#039;Native library location&#039;&#039; accordingly&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Source folder location&lt;br /&gt;
! Native library location&lt;br /&gt;
! Output folder&lt;br /&gt;
! Excluded&lt;br /&gt;
|-&lt;br /&gt;
| build/gensrc/java&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| build/test/build/gensrc/classes&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/java&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
| com/jogamp/gluegen/runtime/BufferFactoryInternal.java&lt;br /&gt;
|-&lt;br /&gt;
| src/junit&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| test/junit&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
| com/jogamp/gluegen/StructValidator.java&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we set up the libraries that are needed to build the project.&lt;br /&gt;
&lt;br /&gt;
* Click the &#039;&#039;&#039;Libraries&#039;&#039;&#039; tab and remove all the JARs except &amp;lt;tt&amp;gt;&amp;quot;JRE System Library&amp;quot;&amp;lt;/tt&amp;gt; from the list.&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit 4&#039;&#039;&#039; and then click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Finally we can set up the Ant builder. This lets Eclipse invoke our command-line Ant build.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;gluegen&#039;&#039; project, select &#039;&#039;&#039;Properties&#039;&#039;&#039; and click the &#039;&#039;&#039;Builders&#039;&#039;&#039; tab on the left&lt;br /&gt;
* Uncheck the &#039;&#039;&#039;Java Builder&#039;&#039;&#039;. Click &#039;&#039;&#039;OK&#039;&#039;&#039; when it asks you to confirm. This is needed to prevent Eclipse from rebuilding class files that the Ant builder is responsible for&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, select &#039;&#039;&#039;Ant Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Type &#039;&#039;gluegen builder&#039;&#039; as the name, then set the &#039;&#039;Buildfile&#039;&#039; to &amp;lt;tt&amp;gt;/gluegen/make/build.xml&amp;lt;/tt&amp;gt; and the &#039;&#039;Base Directory&#039;&#039; to &amp;lt;tt&amp;gt;/gluegen/make&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Refresh&#039;&#039;&#039; tab, check &#039;&#039;&#039;Refresh resources upon completion&#039;&#039;&#039;, click &#039;&#039;&#039;The project containing the selected resource&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Targets&#039;&#039;&#039; tab&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;Auto Build&#039;&#039; and control &#039;&#039;&#039;all&#039;&#039;&#039; is checked&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;During a &amp;quot;Clean&amp;quot;&#039;&#039;. Then uncheck &#039;&#039;&#039;all&#039;&#039;&#039;, check &#039;&#039;&#039;clean&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Edit Configuration dialog&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to save and dismiss the Properties dialog. This creates the &amp;lt;tt&amp;gt;.externalToolBuilders&amp;lt;/tt&amp;gt; directory in the glugen project&lt;br /&gt;
&lt;br /&gt;
= Create the jogl project (optional) =&lt;br /&gt;
&lt;br /&gt;
Since the jogl project files are checked out along with the code, you shouldn&#039;t have to create them yourself. But just for reference, if you did have to create them for some reason, here&#039;s how to do it.&lt;br /&gt;
&lt;br /&gt;
To create the jogl project, we do exactly what we did to create the gluegen project, but with different names and paths substituted. First we create the new jogl project with default settings.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;New&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Java Project...&#039;&#039;&#039;&lt;br /&gt;
* Set &#039;&#039;jogl&#039;&#039; as the project name, click &#039;&#039;&#039;Next&#039;&#039;&#039; and then &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Next we set up the source directories for the project.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;jogl&#039;&#039; project and select &#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java Build Path&#039;&#039;&#039;, then click &#039;&#039;&#039;Source&#039;&#039;&#039; tab and remove any entry you find&lt;br /&gt;
* At the bottom, click &#039;&#039;&#039;Allow output folders for source folders&#039;&#039;&#039; and set &#039;&#039;&#039;Default output folder&#039;&#039;&#039; to &amp;lt;tt&amp;gt;jogl/build/jogl/classes&amp;lt;/tt&amp;gt;&lt;br /&gt;
* For each entry in this table, click &#039;&#039;&#039;Link Source&#039;&#039;&#039;, browser to the right location as the &#039;&#039;Source folder location&#039;&#039; field in the table below, choose a proper name (you may want to substitute &amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt;) then &#039;&#039;&#039;Finish&#039;&#039;&#039;. Set also &#039;&#039;Output folder&#039;&#039;, &#039;&#039;Excluded&#039;&#039; and &#039;&#039;Native library location&#039;&#039; accordingly&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Source folder location&lt;br /&gt;
! Native library location&lt;br /&gt;
! Output folder&lt;br /&gt;
! Excluded&lt;br /&gt;
|-&lt;br /&gt;
| build/jogl/gensrc/classes&lt;br /&gt;
| jogl/build/jogl/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| build/nativewindow/gensrc/classes&lt;br /&gt;
| jogl/build/nativewindow/obj&lt;br /&gt;
| build/nativewindow/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/jogl/classes&lt;br /&gt;
| jogl/build/jogl/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
| com/jogamp/audio/windows/waveout/TestSpatialization.java, jogamp/opengl/gl2/fixme/&lt;br /&gt;
|-&lt;br /&gt;
| src/nativewindow/classes&lt;br /&gt;
| jogl/build/nativewindow/obj&lt;br /&gt;
| build/nativewindow/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/newt/classes&lt;br /&gt;
| jogl/build/newt/obj&lt;br /&gt;
| build/newt/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/test&lt;br /&gt;
|&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The jogl project depends on the gluegen project being built first, so we need to set the dependency between them.&lt;br /&gt;
* Click the &#039;&#039;&#039;Projects&#039;&#039;&#039; tab, &#039;&#039;&#039;Add...&#039;&#039;&#039;, check &#039;&#039;gluegen&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Now we set up the libraries that are needed to build the project:&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Libraries&#039;&#039;&#039; tab and remove all the JARs from the list except &amp;lt;tt&amp;gt;&amp;quot;JRE System Library&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit 4&#039;&#039;&#039; and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;User Library&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, check &#039;&#039;&#039;Ant&#039;&#039;&#039; and &#039;&#039;&#039;SWT&#039;&#039;&#039; and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Finally we can set up the Ant builder.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;jogl&#039;&#039; project, select &#039;&#039;&#039;Properties&#039;&#039;&#039; and click the &#039;&#039;&#039;Builders&#039;&#039;&#039; tab on the left&lt;br /&gt;
* Uncheck the &#039;&#039;&#039;Java Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039; when it asks you to confirm. This is needed to prevent Eclipse from rebuilding class files that the Ant builder is responsible for&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039; button, select &#039;&#039;&#039;Ant Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Type &#039;&#039;jogl builder&#039;&#039; as the name and set &#039;&#039;Buildfile&#039;&#039; to &amp;lt;tt&amp;gt;jogl/make/build.xml&amp;lt;/tt&amp;gt; and &#039;&#039;Base Directory&#039;&#039; to &amp;lt;tt&amp;gt;jogl/make&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Refresh&#039;&#039;&#039; tab, check &#039;&#039;&#039;Refresh resources upon completion&#039;&#039;&#039;, click &#039;&#039;&#039;The project containing the selected resource&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Targets&#039;&#039;&#039; tab&lt;br /&gt;
* For the first three elements (&#039;&#039;After a &amp;quot;Clean&amp;quot;&#039;&#039;, &#039;&#039;Manual Build&#039;&#039; and &#039;&#039;Auto Build&#039;&#039;) now uncheck everything and check &#039;&#039;&#039;all.ide&#039;&#039;&#039; as target&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;During a &amp;quot;Clean&amp;quot;&#039;&#039;, uncheck &#039;&#039;&#039;all&#039;&#039;&#039;, check &#039;&#039;&#039;clean&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Edit Configuration dialog and again &#039;&#039;&#039;OK&#039;&#039;&#039; to save and dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Now we can clean and build both projects in Eclipse.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;Project&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Clean&#039;&#039;&#039;, click &#039;&#039;&#039;Clean all projects&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Install EGit in Eclipse (Eclipse 3.6 and earlier) =&lt;br /&gt;
&lt;br /&gt;
After the build works we can install EGit in Eclipse. This lets you perform Git source control operations from inside Eclipse, though it doesn&#039;t yet support every feature of the command line version. EGit is pre-installed in Eclipse 3.7 and later, so check your Eclipse version before doing this.&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Help &amp;gt; Install New Software...&amp;quot;.&lt;br /&gt;
* Type &amp;lt;tt&amp;gt;http://download.eclipse.org/egit/updates&amp;lt;/tt&amp;gt; in the &amp;quot;Work with&amp;quot; box and press enter.&lt;br /&gt;
* Check &amp;quot;Eclipse Git Team Provider&amp;quot; and &amp;quot;Eclipse JGit&amp;quot; and install them.&lt;br /&gt;
&lt;br /&gt;
= Associate Eclipse projects with Git =&lt;br /&gt;
&lt;br /&gt;
After we install EGit, we have to tell Eclipse that gluegen and jogl are Git projects.&lt;br /&gt;
&lt;br /&gt;
* Right-click &amp;quot;gluegen&amp;quot;, select &amp;quot;Team &amp;gt; Share Project...&amp;quot;, select &amp;quot;Git&amp;quot;, click &amp;quot;Next&amp;quot;, select the .git repository, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
* Do the same thing for the &amp;quot;jogl&amp;quot; project.&lt;br /&gt;
&lt;br /&gt;
Now when you right-click projects or files in the Package Explorer, you can see the Git operations in the &amp;quot;Team&amp;quot; menu.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Building_JOGL_in_Eclipse&amp;diff=1970</id>
		<title>Building JOGL in Eclipse</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Building_JOGL_in_Eclipse&amp;diff=1970"/>
		<updated>2017-02-05T22:39:56Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Why build in Eclipse? =&lt;br /&gt;
&lt;br /&gt;
Building JOGL inside Eclipse lets you use the Eclipse debugger, profiler, and unit test framework. It also gives you useful editing features like auto-complete and red underlines for syntax errors.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
Before you can build JOGL in Eclipse, make sure you can [[Building JOGL on the command line|build it from the command line]]. Then double-check these things:&lt;br /&gt;
&lt;br /&gt;
* to have at least Eclipse Neon 2, that comes with Ant 1.9.6 (jogl requires 1.8+)&lt;br /&gt;
* to have a JDK installed and set up properly.&lt;br /&gt;
** &amp;lt;tt&amp;gt;JAVA_HOME&amp;lt;/tt&amp;gt; is set to your JDK directory. You must use a JDK, not a JRE, because Ant needs &amp;lt;tt&amp;gt;$JAVA_HOME/lib/tools.jar&amp;lt;/tt&amp;gt; (on Windows and Linux).&lt;br /&gt;
** &amp;lt;tt&amp;gt;$JAVA_HOME/bin&amp;lt;/tt&amp;gt; directory is on your PATH. You must use a JDK bin directory, not a JRE bin directory, because Ant needs &amp;lt;tt&amp;gt;$JAVA_HOME/bin/javac&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* to delete the CLASSPATH variable from your system environment variables, &amp;lt;tt&amp;gt;.cshrc&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;.bash_profile&amp;lt;/tt&amp;gt; or other location.&lt;br /&gt;
** having this set with random old JARs on it is one of the leading causes of build problems.&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
To build JOGL in Eclipse, we&#039;ll set up Eclipse&#039;s JRE and Ant version, create Eclipse projects for the gluegen and jogl projects, then add Ant builders to those projects to invoke the JOGL command-line Ant build.&lt;br /&gt;
&lt;br /&gt;
= Set up Eclipse&#039;s workbench VM =&lt;br /&gt;
&lt;br /&gt;
The workbench VM is the version of Java that Eclipse uses to launch itself. Eclipse can find a Java VM on its own by looking in your system&#039;s default locations, but we don&#039;t want that, because it might pick a JRE instead of a JDK, which won&#039;t work with the JOGL Ant build.&lt;br /&gt;
&lt;br /&gt;
* Go to your Eclipse installation directory, and edit the &amp;lt;tt&amp;gt;eclipse.ini&amp;lt;/tt&amp;gt; file (on Mac OS X, it&#039;s at &amp;lt;tt&amp;gt;&amp;amp;lt;eclipse installation directory&amp;amp;gt;/Eclipse.app/Contents/MacOS/eclipse.ini&amp;lt;/tt&amp;gt;).&lt;br /&gt;
* If they don&#039;t exist already, add these lines before the &amp;lt;tt&amp;gt;-vmargs&amp;lt;/tt&amp;gt; line.&lt;br /&gt;
Windows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-vm&lt;br /&gt;
&amp;lt;your JAVA_HOME directory&amp;gt;\jre\bin\javaw.exe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Linux and Mac OS X:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-vm&lt;br /&gt;
&amp;lt;your JAVA_HOME directory&amp;gt;/jre/bin/java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Save and close the file.&lt;br /&gt;
* If Eclipse is running, you must restart it for the setting to take effect.&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done this step, the &amp;lt;tt&amp;gt;javah&amp;lt;/tt&amp;gt; task may fail in the Ant build.&lt;br /&gt;
&lt;br /&gt;
= Switch workspace to the parent of gluegen and jogl =&lt;br /&gt;
&lt;br /&gt;
If you have already the usual configuration:&lt;br /&gt;
&lt;br /&gt;
   /eclipse/workpace/&lt;br /&gt;
                     gluegen/&lt;br /&gt;
                     jogl/&lt;br /&gt;
&lt;br /&gt;
Then you are fine. If not, you need to set your Eclipse workspace to the parent directory of the gluegen and jogl projects. This tells Eclipse where to create its &amp;lt;tt&amp;gt;.metadata&amp;lt;/tt&amp;gt; directory, where it will store your settings for this group of projects.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Switch Workspace&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Other...&#039;&#039;&#039; and then &#039;&#039;&#039;Browse...&#039;&#039;&#039;&lt;br /&gt;
* Navigate to the parent directory of the gluegen and jogl projects, select it, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Workspace Launcher dialog&lt;br /&gt;
&lt;br /&gt;
= Set up Eclipse&#039;s project JRE =&lt;br /&gt;
&lt;br /&gt;
This is the version of Java that Eclipse runs and debugs your projects with. Eclipse will already have some project JRE installed, but we need to make sure that it&#039;s set up properly.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X), then &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Installed JREs&#039;&#039;&#039; on the left&lt;br /&gt;
* Select the checked JRE on the right, then click &#039;&#039;&#039;Edit...&#039;&#039;&#039;&lt;br /&gt;
* Make sure the JRE home is set to the same directory that you&#039;ve got &amp;lt;tt&amp;gt;JAVA_HOME&amp;lt;/tt&amp;gt; set to in your environment. If it&#039;s not, click &#039;&#039;&#039;Directory...&#039;&#039;&#039; to change it&lt;br /&gt;
** This should be a JDK directory&lt;br /&gt;
** The list of JRE system libraries should show a list of &amp;lt;tt&amp;gt;$JAVA_HOME/jre/lib/*.jar&amp;lt;/tt&amp;gt; entries (on Windows and Linux) or a list of &amp;lt;tt&amp;gt;$JAVA_HOME/../Contents/Classes/*.jar&amp;lt;/tt&amp;gt; entries (on Mac OS X)&lt;br /&gt;
* Click &#039;&#039;&#039;Finish&#039;&#039;&#039; to close the Edit JRE dialog, and &#039;&#039;&#039;OK&#039;&#039;&#039; to close the Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Create an Ant user library =&lt;br /&gt;
&lt;br /&gt;
JOGL contains code that uses classes in the Ant JARs. So we need a way to tell our projects where those JARs are. &lt;br /&gt;
&lt;br /&gt;
* we need to know where the Ant bundled with Eclipse is, click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X) &amp;gt; &#039;&#039;&#039;Ant&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;runtime&#039;&#039;&#039;. In &#039;&#039;&#039;Classpath&#039;&#039;&#039; tab, expand &#039;&#039;&#039;Ant Home Entries&#039;&#039;&#039; and annotate down its path, this is your &#039;&#039;antHome&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Build Path&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;User Libraries&#039;&#039;&#039; on the left&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, type &#039;&#039;Ant&#039;&#039; for the library name, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add JARs...&#039;&#039;&#039;, navigate to your &amp;lt;tt&amp;gt;&#039;&#039;antHome&#039;&#039;/lib&amp;lt;/tt&amp;gt; directory, select all the JARs inside, and click &#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to exit Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Create an SWT user library =&lt;br /&gt;
&lt;br /&gt;
To build the SWT tests in JOGL, Eclipse needs to know where the SWT JAR files are.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X), then &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Build Path&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;User Libraries&#039;&#039;&#039; on the left&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, type &#039;&#039;SWT&#039;&#039; for the library name, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add External JARs...&#039;&#039;&#039; button, navigate to your &amp;lt;tt&amp;gt;jogl\make\lib\swt\your-platform&amp;lt;/tt&amp;gt; directory, select &amp;lt;tt&amp;gt;swt-debug.jar&amp;lt;/tt&amp;gt;, and click &#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to exit Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Import the gluegen and jogl projects =&lt;br /&gt;
&lt;br /&gt;
The Eclipse project files for gluegen and jogl should have been checked out along with the source code, so you should be able to import the two projects.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Import...&#039;&#039;&#039;, then select &#039;&#039;&#039;General&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Existing Projects into Workspace&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Next&#039;&#039;&#039; and &#039;&#039;&#039;Browse&#039;&#039;&#039;, then select your workspace directory and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Uncheck any projects in the list except gluegen and jogl and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Create the gluegen project (optional) =&lt;br /&gt;
&lt;br /&gt;
Since the gluegen project files are checked out along with the code, you shouldn&#039;t have to create them yourself. But just for reference, if you did have to create them for some reason, here&#039;s how to do it.&lt;br /&gt;
&lt;br /&gt;
First we create the new gluegen project with default settings.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;New&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Java Project...&#039;&#039;&#039;&lt;br /&gt;
* Set &#039;&#039;gluegen&#039;&#039; as the project name and click the &#039;&#039;&#039;Next&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Finish&#039;&#039;&#039;. This creates the &amp;lt;tt&amp;gt;.project&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;.classpath&amp;lt;/tt&amp;gt; files in the &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; directory&lt;br /&gt;
&lt;br /&gt;
Next we set up the source paths for the project so Eclipse knows which Java files to build. When we created the project, Eclipse automatically found these, but it doesn&#039;t have all the properties set like we want them.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;gluegen&#039;&#039; project and select &#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java Build Path&#039;&#039;&#039;, then click the &#039;&#039;&#039;Source&#039;&#039;&#039; tab and remove any entry you find&lt;br /&gt;
* At the bottom, click &#039;&#039;&#039;Allow output folders for source folders&#039;&#039;&#039;. This allows the Java files in each source folder to be compiled to a different output folder, which we need to match the Ant build&lt;br /&gt;
* Set the &#039;&#039;&#039;Default output folder&#039;&#039;&#039; to &amp;lt;tt&amp;gt;gluegen/build/classes&amp;lt;/tt&amp;gt;&lt;br /&gt;
* For each entry in this table, click &#039;&#039;&#039;Link Source&#039;&#039;&#039;, browser to the right location as the &#039;&#039;Source folder location&#039;&#039; field in the table below, choose a proper name (you may want to substitute &amp;lt;tt&amp;gt;/&amp;lt;tt&amp;gt; with &amp;lt;tt&amp;gt;_&amp;lt;tt&amp;gt;) then &#039;&#039;&#039;Finish&#039;&#039;&#039;. Set also &#039;&#039;Output folder&#039;&#039;, &#039;&#039;Excluded&#039;&#039; and &#039;&#039;Native library location&#039;&#039; accordingly&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Source folder location&lt;br /&gt;
! Native library location&lt;br /&gt;
! Output folder&lt;br /&gt;
! Excluded&lt;br /&gt;
|-&lt;br /&gt;
| build/gensrc/java&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| build/test/build/gensrc/classes&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/java&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
| com/jogamp/gluegen/runtime/BufferFactoryInternal.java&lt;br /&gt;
|-&lt;br /&gt;
| src/junit&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| test/junit&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
| com/jogamp/gluegen/StructValidator.java&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we set up the libraries that are needed to build the project.&lt;br /&gt;
&lt;br /&gt;
* Click the &#039;&#039;&#039;Libraries&#039;&#039;&#039; tab and remove all the JARs except &amp;lt;tt&amp;gt;&amp;quot;JRE System Library&amp;quot;&amp;lt;/tt&amp;gt; from the list.&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit 4&#039;&#039;&#039; and then click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Finally we can set up the Ant builder. This lets Eclipse invoke our command-line Ant build.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;gluegen&#039;&#039; project, select &#039;&#039;&#039;Properties&#039;&#039;&#039; and click the &#039;&#039;&#039;Builders&#039;&#039;&#039; tab on the left&lt;br /&gt;
* Uncheck the &#039;&#039;&#039;Java Builder&#039;&#039;&#039;. Click &#039;&#039;&#039;OK&#039;&#039;&#039; when it asks you to confirm. This is needed to prevent Eclipse from rebuilding class files that the Ant builder is responsible for&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, select &#039;&#039;&#039;Ant Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Type &#039;&#039;gluegen builder&#039;&#039; as the name, then set the &#039;&#039;Buildfile&#039;&#039; to &amp;lt;tt&amp;gt;/gluegen/make/build.xml&amp;lt;/tt&amp;gt; and the &#039;&#039;Base Directory&#039;&#039; to &amp;lt;tt&amp;gt;/gluegen/make&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Refresh&#039;&#039;&#039; tab, check &#039;&#039;&#039;Refresh resources upon completion&#039;&#039;&#039;, click &#039;&#039;&#039;The project containing the selected resource&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Targets&#039;&#039;&#039; tab&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;Auto Build&#039;&#039; and control &#039;&#039;&#039;all&#039;&#039;&#039; is checked&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;During a &amp;quot;Clean&amp;quot;&#039;&#039;. Then uncheck &#039;&#039;&#039;all&#039;&#039;&#039;, check &#039;&#039;&#039;clean&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Edit Configuration dialog&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to save and dismiss the Properties dialog. This creates the &amp;lt;tt&amp;gt;.externalToolBuilders&amp;lt;/tt&amp;gt; directory in the glugen project&lt;br /&gt;
&lt;br /&gt;
= Create the jogl project (optional) =&lt;br /&gt;
&lt;br /&gt;
Since the jogl project files are checked out along with the code, you shouldn&#039;t have to create them yourself. But just for reference, if you did have to create them for some reason, here&#039;s how to do it.&lt;br /&gt;
&lt;br /&gt;
To create the jogl project, we do exactly what we did to create the gluegen project, but with different names and paths substituted. First we create the new jogl project with default settings.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;New&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Java Project...&#039;&#039;&#039;&lt;br /&gt;
* Set &#039;&#039;jogl&#039;&#039; as the project name, click &#039;&#039;&#039;Next&#039;&#039;&#039; and then &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Next we set up the source directories for the project.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;jogl&#039;&#039; project and select &#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java Build Path&#039;&#039;&#039;, then click &#039;&#039;&#039;Source&#039;&#039;&#039; tab and remove any entry you find&lt;br /&gt;
* At the bottom, click &#039;&#039;&#039;Allow output folders for source folders&#039;&#039;&#039; and set &#039;&#039;&#039;Default output folder&#039;&#039;&#039; to &amp;lt;tt&amp;gt;jogl/build/jogl/classes&amp;lt;/tt&amp;gt;&lt;br /&gt;
* For each entry in this table, click &#039;&#039;&#039;Link Source&#039;&#039;&#039;, browser to the right location as the &#039;&#039;Source folder location&#039;&#039; field in the table below, choose a proper name (you may want to substitute &amp;lt;tt&amp;gt;/&amp;lt;tt&amp;gt; with &amp;lt;tt&amp;gt;_&amp;lt;tt&amp;gt;) then &#039;&#039;&#039;Finish&#039;&#039;&#039;. Set also &#039;&#039;Output folder&#039;&#039;, &#039;&#039;Excluded&#039;&#039; and &#039;&#039;Native library location&#039;&#039; accordingly&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Source folder location&lt;br /&gt;
! Native library location&lt;br /&gt;
! Output folder&lt;br /&gt;
! Excluded&lt;br /&gt;
|-&lt;br /&gt;
| build/jogl/gensrc/classes&lt;br /&gt;
| jogl/build/jogl/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| build/nativewindow/gensrc/classes&lt;br /&gt;
| jogl/build/nativewindow/obj&lt;br /&gt;
| build/nativewindow/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/jogl/classes&lt;br /&gt;
| jogl/build/jogl/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
| com/jogamp/audio/windows/waveout/TestSpatialization.java, jogamp/opengl/gl2/fixme/&lt;br /&gt;
|-&lt;br /&gt;
| src/nativewindow/classes&lt;br /&gt;
| jogl/build/nativewindow/obj&lt;br /&gt;
| build/nativewindow/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/newt/classes&lt;br /&gt;
| jogl/build/newt/obj&lt;br /&gt;
| build/newt/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/test&lt;br /&gt;
|&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The jogl project depends on the gluegen project being built first, so we need to set the dependency between them.&lt;br /&gt;
* Click the &#039;&#039;&#039;Projects&#039;&#039;&#039; tab, &#039;&#039;&#039;Add...&#039;&#039;&#039;, check &#039;&#039;gluegen&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Now we set up the libraries that are needed to build the project:&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Libraries&#039;&#039;&#039; tab and remove all the JARs from the list except &amp;lt;tt&amp;gt;&amp;quot;JRE System Library&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit 4&#039;&#039;&#039; and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;User Library&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, check &#039;&#039;&#039;Ant&#039;&#039;&#039; and &#039;&#039;&#039;SWT&#039;&#039;&#039; and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Finally we can set up the Ant builder.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;jogl&#039;&#039; project, select &#039;&#039;&#039;Properties&#039;&#039;&#039; and click the &#039;&#039;&#039;Builders&#039;&#039;&#039; tab on the left&lt;br /&gt;
* Uncheck the &#039;&#039;&#039;Java Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039; when it asks you to confirm. This is needed to prevent Eclipse from rebuilding class files that the Ant builder is responsible for&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039; button, select &#039;&#039;&#039;Ant Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Type &#039;&#039;jogl builder&#039;&#039; as the name and set &#039;&#039;Buildfile&#039;&#039; to &amp;lt;tt&amp;gt;jogl/make/build.xml&amp;lt;/tt&amp;gt; and &#039;&#039;Base Directory&#039;&#039; to &amp;lt;tt&amp;gt;jogl/make&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Refresh&#039;&#039;&#039; tab, check &#039;&#039;&#039;Refresh resources upon completion&#039;&#039;&#039;, click &#039;&#039;&#039;The project containing the selected resource&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Targets&#039;&#039;&#039; tab&lt;br /&gt;
* For the first three elements (&#039;&#039;After a &amp;quot;Clean&amp;quot;&#039;&#039;, &#039;&#039;Manual Build&#039;&#039; and &#039;&#039;Auto Build&#039;&#039;) now uncheck everything and check &#039;&#039;&#039;all.ide&#039;&#039;&#039; as target&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;During a &amp;quot;Clean&amp;quot;&#039;&#039;, uncheck &#039;&#039;&#039;all&#039;&#039;&#039;, check &#039;&#039;&#039;clean&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Edit Configuration dialog and again &#039;&#039;&#039;OK&#039;&#039;&#039; to save and dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Now we can clean and build both projects in Eclipse.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;Project&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Clean&#039;&#039;&#039;, click &#039;&#039;&#039;Clean all projects&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Install EGit in Eclipse (Eclipse 3.6 and earlier) =&lt;br /&gt;
&lt;br /&gt;
After the build works we can install EGit in Eclipse. This lets you perform Git source control operations from inside Eclipse, though it doesn&#039;t yet support every feature of the command line version. EGit is pre-installed in Eclipse 3.7 and later, so check your Eclipse version before doing this.&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Help &amp;gt; Install New Software...&amp;quot;.&lt;br /&gt;
* Type &amp;lt;tt&amp;gt;http://download.eclipse.org/egit/updates&amp;lt;/tt&amp;gt; in the &amp;quot;Work with&amp;quot; box and press enter.&lt;br /&gt;
* Check &amp;quot;Eclipse Git Team Provider&amp;quot; and &amp;quot;Eclipse JGit&amp;quot; and install them.&lt;br /&gt;
&lt;br /&gt;
= Associate Eclipse projects with Git =&lt;br /&gt;
&lt;br /&gt;
After we install EGit, we have to tell Eclipse that gluegen and jogl are Git projects.&lt;br /&gt;
&lt;br /&gt;
* Right-click &amp;quot;gluegen&amp;quot;, select &amp;quot;Team &amp;gt; Share Project...&amp;quot;, select &amp;quot;Git&amp;quot;, click &amp;quot;Next&amp;quot;, select the .git repository, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
* Do the same thing for the &amp;quot;jogl&amp;quot; project.&lt;br /&gt;
&lt;br /&gt;
Now when you right-click projects or files in the Package Explorer, you can see the Git operations in the &amp;quot;Team&amp;quot; menu.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Building_JOGL_in_Eclipse&amp;diff=1969</id>
		<title>Building JOGL in Eclipse</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Building_JOGL_in_Eclipse&amp;diff=1969"/>
		<updated>2017-02-05T14:13:04Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Why build in Eclipse? =&lt;br /&gt;
&lt;br /&gt;
Building JOGL inside Eclipse lets you use the Eclipse debugger, profiler, and unit test framework. It also gives you useful editing features like auto-complete and red underlines for syntax errors.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
Before you can build JOGL in Eclipse, make sure you can [[Building JOGL on the command line|build it from the command line]]. Then double-check these things:&lt;br /&gt;
&lt;br /&gt;
* to have at least Eclipse Neon 2, that comes with Ant 1.9.6 (jogl requires 1.8+)&lt;br /&gt;
* to have a JDK installed and set up properly.&lt;br /&gt;
** &amp;lt;tt&amp;gt;JAVA_HOME&amp;lt;/tt&amp;gt; is set to your JDK directory. You must use a JDK, not a JRE, because Ant needs &amp;lt;tt&amp;gt;$JAVA_HOME/lib/tools.jar&amp;lt;/tt&amp;gt; (on Windows and Linux).&lt;br /&gt;
** &amp;lt;tt&amp;gt;$JAVA_HOME/bin&amp;lt;/tt&amp;gt; directory is on your PATH. You must use a JDK bin directory, not a JRE bin directory, because Ant needs &amp;lt;tt&amp;gt;$JAVA_HOME/bin/javac&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* to delete the CLASSPATH variable from your system environment variables, &amp;lt;tt&amp;gt;.cshrc&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;.bash_profile&amp;lt;/tt&amp;gt; or other location.&lt;br /&gt;
** having this set with random old JARs on it is one of the leading causes of build problems.&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
To build JOGL in Eclipse, we&#039;ll set up Eclipse&#039;s JRE and Ant version, create Eclipse projects for the gluegen and jogl projects, then add Ant builders to those projects to invoke the JOGL command-line Ant build.&lt;br /&gt;
&lt;br /&gt;
= Set up Eclipse&#039;s workbench VM =&lt;br /&gt;
&lt;br /&gt;
The workbench VM is the version of Java that Eclipse uses to launch itself. Eclipse can find a Java VM on its own by looking in your system&#039;s default locations, but we don&#039;t want that, because it might pick a JRE instead of a JDK, which won&#039;t work with the JOGL Ant build.&lt;br /&gt;
&lt;br /&gt;
* Go to your Eclipse installation directory, and edit the &amp;lt;tt&amp;gt;eclipse.ini&amp;lt;/tt&amp;gt; file (on Mac OS X, it&#039;s at &amp;lt;tt&amp;gt;&amp;amp;lt;eclipse installation directory&amp;amp;gt;/Eclipse.app/Contents/MacOS/eclipse.ini&amp;lt;/tt&amp;gt;).&lt;br /&gt;
* If they don&#039;t exist already, add these lines before the &amp;lt;tt&amp;gt;-vmargs&amp;lt;/tt&amp;gt; line.&lt;br /&gt;
Windows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-vm&lt;br /&gt;
&amp;lt;your JAVA_HOME directory&amp;gt;\jre\bin\javaw.exe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Linux and Mac OS X:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-vm&lt;br /&gt;
&amp;lt;your JAVA_HOME directory&amp;gt;/jre/bin/java&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Save and close the file.&lt;br /&gt;
* If Eclipse is running, you must restart it for the setting to take effect.&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t done this step, the &amp;lt;tt&amp;gt;javah&amp;lt;/tt&amp;gt; task may fail in the Ant build.&lt;br /&gt;
&lt;br /&gt;
= Switch workspace to the parent of gluegen and jogl =&lt;br /&gt;
&lt;br /&gt;
If you have already the usual configuration:&lt;br /&gt;
&lt;br /&gt;
   /eclipse/workpace/&lt;br /&gt;
                     gluegen/&lt;br /&gt;
                     jogl/&lt;br /&gt;
&lt;br /&gt;
Then you are fine. If not, you need to set your Eclipse workspace to the parent directory of the gluegen and jogl projects. This tells Eclipse where to create its &amp;lt;tt&amp;gt;.metadata&amp;lt;/tt&amp;gt; directory, where it will store your settings for this group of projects.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Switch Workspace&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Other...&#039;&#039;&#039; and then &#039;&#039;&#039;Browse...&#039;&#039;&#039;&lt;br /&gt;
* Navigate to the parent directory of the gluegen and jogl projects, select it, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Workspace Launcher dialog&lt;br /&gt;
&lt;br /&gt;
= Set up Eclipse&#039;s project JRE =&lt;br /&gt;
&lt;br /&gt;
This is the version of Java that Eclipse runs and debugs your projects with. Eclipse will already have some project JRE installed, but we need to make sure that it&#039;s set up properly.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X), then &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Installed JREs&#039;&#039;&#039; on the left&lt;br /&gt;
* Select the checked JRE on the right, then click &#039;&#039;&#039;Edit...&#039;&#039;&#039;&lt;br /&gt;
* Make sure the JRE home is set to the same directory that you&#039;ve got &amp;lt;tt&amp;gt;JAVA_HOME&amp;lt;/tt&amp;gt; set to in your environment. If it&#039;s not, click &#039;&#039;&#039;Directory...&#039;&#039;&#039; to change it&lt;br /&gt;
** This should be a JDK directory&lt;br /&gt;
** The list of JRE system libraries should show a list of &amp;lt;tt&amp;gt;$JAVA_HOME/jre/lib/*.jar&amp;lt;/tt&amp;gt; entries (on Windows and Linux) or a list of &amp;lt;tt&amp;gt;$JAVA_HOME/../Contents/Classes/*.jar&amp;lt;/tt&amp;gt; entries (on Mac OS X)&lt;br /&gt;
* Click &#039;&#039;&#039;Finish&#039;&#039;&#039; to close the Edit JRE dialog, and &#039;&#039;&#039;OK&#039;&#039;&#039; to close the Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Create an Ant user library =&lt;br /&gt;
&lt;br /&gt;
JOGL contains code that uses classes in the Ant JARs. So we need a way to tell our projects where those JARs are. &lt;br /&gt;
&lt;br /&gt;
* we need to know where the Ant bundled with Eclipse is, click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X) &amp;gt; &#039;&#039;&#039;Ant&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;runtime&#039;&#039;&#039;. In &#039;&#039;&#039;Classpath&#039;&#039;&#039; tab, expand &#039;&#039;&#039;Ant Home Entries&#039;&#039;&#039; and annotate down its path, this is your &#039;&#039;antHome&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Build Path&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;User Libraries&#039;&#039;&#039; on the left&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, type &#039;&#039;Ant&#039;&#039; for the library name, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add JARs...&#039;&#039;&#039;, navigate to your &amp;lt;tt&amp;gt;&#039;&#039;antHome&#039;&#039;/lib&amp;lt;/tt&amp;gt; directory, select all the JARs inside, and click &#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to exit Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Create an SWT user library =&lt;br /&gt;
&lt;br /&gt;
To build the SWT tests in JOGL, Eclipse needs to know where the SWT JAR files are.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Window&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences&#039;&#039;&#039; (it&#039;s &#039;&#039;&#039;Eclipse&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Preferences...&#039;&#039;&#039; on Mac OS X), then &#039;&#039;&#039;Java&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Build Path&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;User Libraries&#039;&#039;&#039; on the left&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, type &#039;&#039;SWT&#039;&#039; for the library name, and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add External JARs...&#039;&#039;&#039; button, navigate to your &amp;lt;tt&amp;gt;jogl\make\lib\swt\your-platform&amp;lt;/tt&amp;gt; directory, select &amp;lt;tt&amp;gt;swt-debug.jar&amp;lt;/tt&amp;gt;, and click &#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to exit Preferences dialog&lt;br /&gt;
&lt;br /&gt;
= Import the gluegen and jogl projects =&lt;br /&gt;
&lt;br /&gt;
The Eclipse project files for gluegen and jogl should have been checked out along with the source code, so you should be able to import the two projects.&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Import...&#039;&#039;&#039;, then select &#039;&#039;&#039;General&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Existing Projects into Workspace&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Next&#039;&#039;&#039; and &#039;&#039;&#039;Browse&#039;&#039;&#039;, then select your workspace directory and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Uncheck any projects in the list except gluegen and jogl and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Create the gluegen project (optional) =&lt;br /&gt;
&lt;br /&gt;
Since the gluegen project files are checked out along with the code, you shouldn&#039;t have to create them yourself. But just for reference, if you did have to create them for some reason, here&#039;s how to do it.&lt;br /&gt;
&lt;br /&gt;
First we create the new gluegen project with default settings.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;New&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Java Project...&#039;&#039;&#039;&lt;br /&gt;
* Set &#039;&#039;gluegen&#039;&#039; as the project name and click the &#039;&#039;&#039;Next&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Finish&#039;&#039;&#039;. This creates the &amp;lt;tt&amp;gt;.project&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;.classpath&amp;lt;/tt&amp;gt; files in the &amp;lt;tt&amp;gt;gluegen&amp;lt;/tt&amp;gt; directory&lt;br /&gt;
&lt;br /&gt;
Next we set up the source paths for the project so Eclipse knows which Java files to build. When we created the project, Eclipse automatically found these, but it doesn&#039;t have all the properties set like we want them.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;gluegen&#039;&#039; project and select &#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java Build Path&#039;&#039;&#039;, then click the &#039;&#039;&#039;Source&#039;&#039;&#039; tab and remove any entry you find&lt;br /&gt;
* At the bottom, click &#039;&#039;&#039;Allow output folders for source folders&#039;&#039;&#039;. This allows the Java files in each source folder to be compiled to a different output folder, which we need to match the Ant build&lt;br /&gt;
* Set the &#039;&#039;&#039;Default output folder&#039;&#039;&#039; to &amp;lt;tt&amp;gt;gluegen/build/classes&amp;lt;/tt&amp;gt;&lt;br /&gt;
* For each entry in this table, click &#039;&#039;&#039;Add Folder&#039;&#039;&#039; and then &#039;&#039;&#039;Create New Folder&#039;&#039;&#039;. Set &#039;&#039;Folder Name&#039;&#039; to the &#039;&#039;Source folder&#039;&#039; and then accordingly &#039;&#039;Output folder&#039;&#039;, &#039;&#039;Excluded&#039;&#039; and &#039;&#039;Native library location&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Source folder&lt;br /&gt;
! Native library location&lt;br /&gt;
! Output folder&lt;br /&gt;
! Excluded&lt;br /&gt;
|-&lt;br /&gt;
| build/gensrc/java&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| build/test/build/gensrc/classes&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/java&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
| com/jogamp/gluegen/runtime/BufferFactoryInternal.java&lt;br /&gt;
|-&lt;br /&gt;
| src/junit&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| test/junit&lt;br /&gt;
| gluegen/build/obj&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
| com/jogamp/gluegen/StructValidator.java&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Now we set up the libraries that are needed to build the project.&lt;br /&gt;
&lt;br /&gt;
* Click the &#039;&#039;&#039;Libraries&#039;&#039;&#039; tab and remove all the JARs except &amp;lt;tt&amp;gt;&amp;quot;JRE System Library&amp;quot;&amp;lt;/tt&amp;gt; from the list.&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit 4&#039;&#039;&#039; and then click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Finally we can set up the Ant builder. This lets Eclipse invoke our command-line Ant build.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;gluegen&#039;&#039; project, select &#039;&#039;&#039;Properties&#039;&#039;&#039; and click the &#039;&#039;&#039;Builders&#039;&#039;&#039; tab on the left&lt;br /&gt;
* Uncheck the &#039;&#039;&#039;Java Builder&#039;&#039;&#039;. Click &#039;&#039;&#039;OK&#039;&#039;&#039; when it asks you to confirm. This is needed to prevent Eclipse from rebuilding class files that the Ant builder is responsible for&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039;, select &#039;&#039;&#039;Ant Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Type &#039;&#039;gluegen builder&#039;&#039; as the name, then set the &#039;&#039;Buildfile&#039;&#039; to &amp;lt;tt&amp;gt;/gluegen/make/build.xml&amp;lt;/tt&amp;gt; and the &#039;&#039;Base Directory&#039;&#039; to &amp;lt;tt&amp;gt;/gluegen/make&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Refresh&#039;&#039;&#039; tab, check &#039;&#039;&#039;Refresh resources upon completion&#039;&#039;&#039;, click &#039;&#039;&#039;The project containing the selected resource&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Targets&#039;&#039;&#039; tab&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;Auto Build&#039;&#039; and control &#039;&#039;&#039;all&#039;&#039;&#039; is checked&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;During a &amp;quot;Clean&amp;quot;&#039;&#039;. Then uncheck &#039;&#039;&#039;all&#039;&#039;&#039;, check &#039;&#039;&#039;clean&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Edit Configuration dialog&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to save and dismiss the Properties dialog. This creates the &amp;lt;tt&amp;gt;.externalToolBuilders&amp;lt;/tt&amp;gt; directory in the glugen project&lt;br /&gt;
&lt;br /&gt;
= Create the jogl project (optional) =&lt;br /&gt;
&lt;br /&gt;
Since the jogl project files are checked out along with the code, you shouldn&#039;t have to create them yourself. But just for reference, if you did have to create them for some reason, here&#039;s how to do it.&lt;br /&gt;
&lt;br /&gt;
To create the jogl project, we do exactly what we did to create the gluegen project, but with different names and paths substituted. First we create the new jogl project with default settings.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;File&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;New&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Java Project...&#039;&#039;&#039;&lt;br /&gt;
* Set &#039;&#039;jogl&#039;&#039; as the project name, click &#039;&#039;&#039;Next&#039;&#039;&#039; and then &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Next we set up the source directories for the project.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;jogl&#039;&#039; project and select &#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Java Build Path&#039;&#039;&#039;, then click &#039;&#039;&#039;Source&#039;&#039;&#039; tab and remove any entry you find&lt;br /&gt;
* At the bottom, click &#039;&#039;&#039;Allow output folders for source folders&#039;&#039;&#039; and set &#039;&#039;&#039;Default output folder&#039;&#039;&#039; to &amp;lt;tt&amp;gt;jogl/build/jogl/classes&amp;lt;/tt&amp;gt;&lt;br /&gt;
* For each entry in this table, click &#039;&#039;&#039;Add Folder&#039;&#039;&#039; and then &#039;&#039;&#039;Create New Folder&#039;&#039;&#039;. Set &#039;&#039;Folder Name&#039;&#039; to the &#039;&#039;Source folder&#039;&#039; and then accordingly &#039;&#039;Output folder&#039;&#039;, &#039;&#039;Excluded&#039;&#039; and &#039;&#039;Native library location&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Source folder&lt;br /&gt;
! Native library location&lt;br /&gt;
! Output folder&lt;br /&gt;
! Excluded&lt;br /&gt;
|-&lt;br /&gt;
| build/jogl/gensrc/classes&lt;br /&gt;
| jogl/build/jogl/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| build/nativewindow/gensrc/classes&lt;br /&gt;
| jogl/build/nativewindow/obj&lt;br /&gt;
| build/nativewindow/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/jogl/classes&lt;br /&gt;
| jogl/build/jogl/obj&lt;br /&gt;
| (Default output folder)&lt;br /&gt;
| com/jogamp/audio/windows/waveout/TestSpatialization.java, jogamp/opengl/gl2/fixme/&lt;br /&gt;
|-&lt;br /&gt;
| src/nativewindow/classes&lt;br /&gt;
| jogl/build/nativewindow/obj&lt;br /&gt;
| build/nativewindow/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/newt/classes&lt;br /&gt;
| jogl/build/newt/obj&lt;br /&gt;
| build/newt/classes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| src/test&lt;br /&gt;
|&lt;br /&gt;
| build/test/build/classes&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The jogl project depends on the gluegen project being built first, so we need to set the dependency between them.&lt;br /&gt;
* Click the &#039;&#039;&#039;Projects&#039;&#039;&#039; tab, &#039;&#039;&#039;Add...&#039;&#039;&#039;, check &#039;&#039;gluegen&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Now we set up the libraries that are needed to build the project:&lt;br /&gt;
&lt;br /&gt;
* Click &#039;&#039;&#039;Libraries&#039;&#039;&#039; tab and remove all the JARs from the list except &amp;lt;tt&amp;gt;&amp;quot;JRE System Library&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, select &#039;&#039;&#039;JUnit 4&#039;&#039;&#039; and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Add Library...&#039;&#039;&#039;, select &#039;&#039;&#039;User Library&#039;&#039;&#039;, click &#039;&#039;&#039;Next&#039;&#039;&#039;, check &#039;&#039;&#039;Ant&#039;&#039;&#039; and &#039;&#039;&#039;SWT&#039;&#039;&#039; and click &#039;&#039;&#039;Finish&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Finally we can set up the Ant builder.&lt;br /&gt;
&lt;br /&gt;
* Right-click the &#039;&#039;jogl&#039;&#039; project, select &#039;&#039;&#039;Properties&#039;&#039;&#039; and click the &#039;&#039;&#039;Builders&#039;&#039;&#039; tab on the left&lt;br /&gt;
* Uncheck the &#039;&#039;&#039;Java Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039; when it asks you to confirm. This is needed to prevent Eclipse from rebuilding class files that the Ant builder is responsible for&lt;br /&gt;
* Click &#039;&#039;&#039;New...&#039;&#039;&#039; button, select &#039;&#039;&#039;Ant Builder&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Type &#039;&#039;jogl builder&#039;&#039; as the name and set &#039;&#039;Buildfile&#039;&#039; to &amp;lt;tt&amp;gt;jogl/make/build.xml&amp;lt;/tt&amp;gt; and &#039;&#039;Base Directory&#039;&#039; to &amp;lt;tt&amp;gt;jogl/make&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Click &#039;&#039;&#039;Refresh&#039;&#039;&#039; tab, check &#039;&#039;&#039;Refresh resources upon completion&#039;&#039;&#039;, click &#039;&#039;&#039;The project containing the selected resource&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;Targets&#039;&#039;&#039; tab&lt;br /&gt;
* For the first three elements (&#039;&#039;After a &amp;quot;Clean&amp;quot;&#039;&#039;, &#039;&#039;Manual Build&#039;&#039; and &#039;&#039;Auto Build&#039;&#039;) now uncheck everything and check &#039;&#039;&#039;all.ide&#039;&#039;&#039; as target&lt;br /&gt;
* Click &#039;&#039;&#039;Set Targets...&#039;&#039;&#039; to the right of &#039;&#039;During a &amp;quot;Clean&amp;quot;&#039;&#039;, uncheck &#039;&#039;&#039;all&#039;&#039;&#039;, check &#039;&#039;&#039;clean&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Click &#039;&#039;&#039;OK&#039;&#039;&#039; to dismiss the Edit Configuration dialog and again &#039;&#039;&#039;OK&#039;&#039;&#039; to save and dismiss the Properties dialog&lt;br /&gt;
&lt;br /&gt;
Now we can clean and build both projects in Eclipse.&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;Project&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Clean&#039;&#039;&#039;, click &#039;&#039;&#039;Clean all projects&#039;&#039;&#039; and click &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Install EGit in Eclipse (Eclipse 3.6 and earlier) =&lt;br /&gt;
&lt;br /&gt;
After the build works we can install EGit in Eclipse. This lets you perform Git source control operations from inside Eclipse, though it doesn&#039;t yet support every feature of the command line version. EGit is pre-installed in Eclipse 3.7 and later, so check your Eclipse version before doing this.&lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Help &amp;gt; Install New Software...&amp;quot;.&lt;br /&gt;
* Type &amp;lt;tt&amp;gt;http://download.eclipse.org/egit/updates&amp;lt;/tt&amp;gt; in the &amp;quot;Work with&amp;quot; box and press enter.&lt;br /&gt;
* Check &amp;quot;Eclipse Git Team Provider&amp;quot; and &amp;quot;Eclipse JGit&amp;quot; and install them.&lt;br /&gt;
&lt;br /&gt;
= Associate Eclipse projects with Git =&lt;br /&gt;
&lt;br /&gt;
After we install EGit, we have to tell Eclipse that gluegen and jogl are Git projects.&lt;br /&gt;
&lt;br /&gt;
* Right-click &amp;quot;gluegen&amp;quot;, select &amp;quot;Team &amp;gt; Share Project...&amp;quot;, select &amp;quot;Git&amp;quot;, click &amp;quot;Next&amp;quot;, select the .git repository, and click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
* Do the same thing for the &amp;quot;jogl&amp;quot; project.&lt;br /&gt;
&lt;br /&gt;
Now when you right-click projects or files in the Package Explorer, you can see the Git operations in the &amp;quot;Team&amp;quot; menu.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1949</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1949"/>
		<updated>2016-02-01T14:21:27Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
* [https://gist.github.com/xranby/ccbcfcaef341f5bd1ba8 Rudimentary standalone example using the fixed pipeline with OpenGL ES 1 by Xerxes Rånby]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/helloTriangle Simple sample] that features GL4, pure newt, glWindow options, animator, indexed drawing, dinamic attribute and frag data binding, interleaved data, vao, vbo (with normalization on one attribute), ibo (with shorts), uniform, glsl program (with specific suffix) and matrix jogl util, gl error check, key listener and right way to dispose.&lt;br /&gt;
&lt;br /&gt;
= Common Mistakes =&lt;br /&gt;
I suggest you to take a read to these two pages for a quick overview over the most common problems, it is a very useful reading, legacy sections are carefully signaled.&lt;br /&gt;
&lt;br /&gt;
[https://www.opengl.org/wiki/Common_Mistakes OpenGL]&lt;br /&gt;
[https://www.opengl.org/wiki/GLSL_:_common_mistakes GLSL]&lt;br /&gt;
&lt;br /&gt;
Another common mistake that may happen if you port code from C/C++ to Java is this one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Caused by: com.jogamp.opengl.GLException: unpack pixel_buffer_object must be bound to call this method&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkBufferObject(GL4bcImpl.java:40621)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkUnpackPBOBound(GL4bcImpl.java:40707)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.glTexImage2D(GL4bcImpl.java:5535)&lt;br /&gt;
	at tests.gl320.Gl_320_fbo_blit.initTexture(Gl_320_fbo_blit.java:199)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This happens because in C/C++, when you just want to allocate the space for a texture using, for example, &#039;&#039;glTexImage2D&#039;&#039;, you should not pass 0 as the last argument, but &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N.B: The use of color picking is &#039;&#039;&#039;NOT&#039;&#039;&#039; recommended on any hardware whose palette is partially emulated.&lt;br /&gt;
&lt;br /&gt;
= Java OpenGL Samples Pack =&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/elect86/jogl-samples Java OpenGL Samples Pack] (called unsurprisingly jogl-samples) is a port of the [http://www.g-truc.net/project-0026.html OpenGL Samples Pack], a collection of OpenGL samples based on the OpenGL &amp;quot;core profile&amp;quot; specifications.&lt;br /&gt;
&lt;br /&gt;
The project aims to promote the new OpenGL features making easier version transitions for OpenGL programmers with a complementary documentation for the OpenGL specification. Despite the fact that the OpenGL Samples Pack provides as simple (and dumb) as possible samples, it&#039;s not a tutorial for beginner but a project for programmers already familiar with OpenGL. The OpenGL Samples Pack is also a good OpenGL drivers feature test.&lt;br /&gt;
&lt;br /&gt;
These samples illustrate mostly of the OpenGL features from ES 2.0 up to the last GL extenstions, same of them usually also called AZDO (Almost Zero Driver Overhead).&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1948</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1948"/>
		<updated>2016-02-01T14:20:27Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
* [https://gist.github.com/xranby/ccbcfcaef341f5bd1ba8 Rudimentary standalone example using the fixed pipeline with OpenGL ES 1 by Xerxes Rånby]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/helloTriangle Simple sample] that features GL4, pure newt, glWindow options, animator, indexed drawing, dinamic attribute and frag data binding, interleaved data, vao, vbo (with normalization on one attribute), ibo (with shorts), uniform, glsl program (with specific suffix) and matrix jogl util, gl error check, key listener and right way to dispose.&lt;br /&gt;
&lt;br /&gt;
= Common Mistakes =&lt;br /&gt;
I suggest you to take a read to these two pages for a quick overview over the most common problems, it is a very useful reading, legacy sections are carefully signaled.&lt;br /&gt;
&lt;br /&gt;
[https://www.opengl.org/wiki/Common_Mistakes OpenGL]&lt;br /&gt;
[https://www.opengl.org/wiki/GLSL_:_common_mistakes GLSL]&lt;br /&gt;
&lt;br /&gt;
Another common mistake that may happen if you port code from C/C++ to Java is this one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Caused by: com.jogamp.opengl.GLException: unpack pixel_buffer_object must be bound to call this method&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkBufferObject(GL4bcImpl.java:40621)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkUnpackPBOBound(GL4bcImpl.java:40707)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.glTexImage2D(GL4bcImpl.java:5535)&lt;br /&gt;
	at tests.gl320.Gl_320_fbo_blit.initTexture(Gl_320_fbo_blit.java:199)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This happens because in C/C++, when you just want to allocate the space for a texture using, for example, &#039;&#039;glTexImage2D&#039;&#039;, you should not pass 0 as the last argument, but &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N.B: The use of color picking is &#039;&#039;&#039;NOT&#039;&#039;&#039; recommended on any hardware whose palette is partially emulated.&lt;br /&gt;
&lt;br /&gt;
= Java OpenGL Samples Pack =&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/elect86/jogl-samples Java OpenGL Samples Pack] (called unsurprisingly jogl-samples) is a port of the [http://www.g-truc.net/project-0026.html OpenGL Samples Pack], a collection of OpenGL samples based on the OpenGL &amp;quot;core profile&amp;quot; specifications.&lt;br /&gt;
&lt;br /&gt;
The project aims to promote the new OpenGL features making easier version transitions for OpenGL programmers with a complementary documentation for the OpenGL specification. Despite the fact that the OpenGL Samples Pack provides as simple (and dumb) as possible samples, it&#039;s not a tutorial for beginner but a project for programmers already familiar with OpenGL. The OpenGL Samples Pack is also a good OpenGL drivers feature test.&lt;br /&gt;
&lt;br /&gt;
These samples illustrate mostly of the OpenGL features from ES 2.0 up to the last GL extenstions, same of them famouse to be called also AZDO (Almost Zero Driver Overhead).&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1947</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1947"/>
		<updated>2016-02-01T14:19:03Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
* [https://gist.github.com/xranby/ccbcfcaef341f5bd1ba8 Rudimentary standalone example using the fixed pipeline with OpenGL ES 1 by Xerxes Rånby]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/helloTriangle Simple sample] that features GL4, pure newt, glWindow options, animator, indexed drawing, dinamic attribute and frag data binding, interleaved data, vao, vbo (with normalization on one attribute), ibo (with shorts), uniform, glsl program (with specific suffix) and matrix jogl util, gl error check, key listener and right way to dispose.&lt;br /&gt;
&lt;br /&gt;
= Common Mistakes =&lt;br /&gt;
I suggest you to take a read to these two pages for a quick overview over the most common problems, it is a very useful reading, legacy sections are carefully signaled.&lt;br /&gt;
&lt;br /&gt;
[https://www.opengl.org/wiki/Common_Mistakes OpenGL]&lt;br /&gt;
[https://www.opengl.org/wiki/GLSL_:_common_mistakes GLSL]&lt;br /&gt;
&lt;br /&gt;
Another common mistake that may happen if you port code from C/C++ to Java is this one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Caused by: com.jogamp.opengl.GLException: unpack pixel_buffer_object must be bound to call this method&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkBufferObject(GL4bcImpl.java:40621)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkUnpackPBOBound(GL4bcImpl.java:40707)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.glTexImage2D(GL4bcImpl.java:5535)&lt;br /&gt;
	at tests.gl320.Gl_320_fbo_blit.initTexture(Gl_320_fbo_blit.java:199)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This happens because in C/C++, when you just want to allocate the space for a texture using, for example, &#039;&#039;glTexImage2D&#039;&#039;, you should not pass 0 as the last argument, but &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N.B: The use of color picking is &#039;&#039;&#039;NOT&#039;&#039;&#039; recommended on any hardware whose palette is partially emulated.&lt;br /&gt;
&lt;br /&gt;
= Java OpenGL Samples Pack =&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/elect86/jogl-samples Java OpenGL Samples Pack] (called unsurprisingly jogl-samples) is a port of the [http://www.g-truc.net/project-0026.html OpenGL Samples Pack], a collection of OpenGL samples based on the OpenGL &amp;quot;core profile&amp;quot; specifications.&lt;br /&gt;
&lt;br /&gt;
The project aims to promote the new OpenGL features making easier version transitions for OpenGL programmers with a complementary documentation for the OpenGL specification. Despite the fact that the OpenGL Samples Pack provides as simple (and dumb) as possible samples, it&#039;s not a tutorial for beginner but a project for programmers already familiar with OpenGL. The OpenGL Samples Pack is also a good OpenGL drivers feature test.&lt;br /&gt;
&lt;br /&gt;
These samples illustrate mostly of the OpenGL features from ES 2.0 up to the last GL extenstions, called also AZDO (Almost Zero Driver Overhead).&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1946</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1946"/>
		<updated>2016-01-31T20:30:46Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
* [https://gist.github.com/xranby/ccbcfcaef341f5bd1ba8 Rudimentary standalone example using the fixed pipeline with OpenGL ES 1 by Xerxes Rånby]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/helloTriangle Simple sample] that features GL4, pure newt, glWindow options, animator, indexed drawing, dinamic attribute and frag data binding, interleaved data, vao, vbo (with normalization on one attribute), ibo (with shorts), uniform, glsl program (with specific suffix) and matrix jogl util, gl error check, key listener and right way to dispose.&lt;br /&gt;
&lt;br /&gt;
= Common Mistakes =&lt;br /&gt;
I suggest you to take a read to these two pages for a quick overview over the most common problems, it is a very useful reading, legacy sections are carefully signaled.&lt;br /&gt;
&lt;br /&gt;
[https://www.opengl.org/wiki/Common_Mistakes OpenGL]&lt;br /&gt;
[https://www.opengl.org/wiki/GLSL_:_common_mistakes GLSL]&lt;br /&gt;
&lt;br /&gt;
Another common mistake that may happen if you port code from C/C++ to Java is this one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Caused by: com.jogamp.opengl.GLException: unpack pixel_buffer_object must be bound to call this method&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkBufferObject(GL4bcImpl.java:40621)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkUnpackPBOBound(GL4bcImpl.java:40707)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.glTexImage2D(GL4bcImpl.java:5535)&lt;br /&gt;
	at tests.gl320.Gl_320_fbo_blit.initTexture(Gl_320_fbo_blit.java:199)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This happens because in C/C++, when you just want to allocate the space for a texture using, for example, &#039;&#039;glTexImage2D&#039;&#039;, you should not pass 0 as the last argument, but &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N.B: The use of color picking is &#039;&#039;&#039;NOT&#039;&#039;&#039; recommended on any hardware whose palette is partially emulated.&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1945</id>
		<title>Why Instance Design</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1945"/>
		<updated>2016-01-28T15:09:51Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The scope of this wiki page is essentially to explain why JOGL uses a instance-design instead of a static one, used by other libraries (such as Lwjgl).&lt;br /&gt;
&lt;br /&gt;
The content has been taken from [http://forum.jogamp.org/Why-does-JOGL-use-Instances-of-GLContext-GL-instead-of-exposing-a-Static-API-td4034144.html this thread] where Sven decided to elaborate and list the reasons behind that since many people wonder and ask why.&lt;br /&gt;
&lt;br /&gt;
== Then why does JOGL use Instances of GLContext / GL* instead of exposing a Static API? ==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Essentially because this is how it &#039;&#039;&#039;should&#039;&#039;&#039; be planned, doing differently is a &#039;&#039;&#039;wrong&#039;&#039;&#039; design. We are all about exposing a correct API, reflecting the real implementation model / design.&amp;lt;br /&amp;gt;&lt;br /&gt;
   Hint: OpenGL&#039;s implementation is not static!&lt;br /&gt;
About having a static implementation, read the bottom remark!&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Isn&#039;t static invocation faster?&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
OpenGL is a state machine. It associates locks and memory references and those OpenGL rendering states. In JOGL, we do track certain states, required for a functional binding.&lt;br /&gt;
&lt;br /&gt;
- [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLBufferStorage.html GLBufferStorage] and its private tracker is used to manage memory mapped and use-create storage.&lt;br /&gt;
&lt;br /&gt;
- Seamless FBO handling requires us to track currently used [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLBase.html#getDefaultDrawFramebuffer() FBO buffer]. This allows us to pipe even onscreen rendering using FBO as required for certain machines (OSX/CALayer with AWT). However, this can be utilized by user applications, since tracking of the FBO is for free.&lt;br /&gt;
&lt;br /&gt;
- [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLSharedContextSetter.html Sharing GLContext], to allow seamless and stable context sharing, we are required to track its actual state to know when we are able to create the shared &#039;slave&#039; context.&lt;br /&gt;
&lt;br /&gt;
- Last but not least, GLContext performs proper locking. User can query states and try locking, as well as associate data to TLS.&lt;br /&gt;
&lt;br /&gt;
Tracking these states allows us not to query the native OpenGL context via glGet*. The latter most certainly cause a pipeline flush/sync and slow down rendering, see [{{SERVER}}/bugzilla/show_bug.cgi?id=1066 Bug 1066].&lt;br /&gt;
&lt;br /&gt;
Tracking itself is cheap, occurring on the Java side simply setting a variable&lt;br /&gt;
or using O(1) maps for more advanced stuff (memory objects). &lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Isn&#039;t it more like OpenGL to have it static?&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
OpenGL has many variations, read: Profiles. You can have different OpenGL context, e.g. GL 3.3, GL 4.5, ES 3.1 .. and so on.&lt;br /&gt;
See [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL-Evolution-And-JOGL].&amp;lt;br /&amp;gt;&lt;br /&gt;
In JOGL you can actually use desktop GL [1.x - 4.5] besides GL-ES [1.0 - 3.1] in the same application!&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;It&#039;s quite a burden to pass the GL object, isn&#039;t it?&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
OpenGL may expose different function tables. OpenGL may even expose different function pointer, using different function tables depending on the OpenGL profile and what-not.&lt;br /&gt;
OpenGL may be implemented by different native libraries (libGL, libGLES, ..).&lt;br /&gt;
&lt;br /&gt;
Here it is required to bind the exposed OpenGL functions _dynamically_ to their respective function table used in JOGL.&lt;br /&gt;
JOGL caches there function tables using certain compatibility criterias, e.g.&lt;br /&gt;
* Display connection (X11 networking)!&lt;br /&gt;
* OpenGL profile&lt;br /&gt;
&lt;br /&gt;
See the previous answer as well.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== Bottom Remark ====&lt;br /&gt;
&lt;br /&gt;
A static API can accommodate the above by using thread-local-storage (TLS).&lt;br /&gt;
&lt;br /&gt;
However, this would require to map all the static API entries to proper state-full objects.&lt;br /&gt;
&lt;br /&gt;
* OpenGL actually maps static -&amp;gt; TLS objects&lt;br /&gt;
&lt;br /&gt;
* JOGL however, exposes the plain state-full [{{SERVER}}/jogl/doc/uml/html/ API]&lt;br /&gt;
   &lt;br /&gt;
* Know that TLS access is not as fast as passing an object! (Even though TLS is not slow at all)   &lt;br /&gt;
&lt;br /&gt;
To conclude, using Thread-Local-Storage to simulate Object-Oriented structure in an Object-Oriented language goes against logic.&lt;br /&gt;
&lt;br /&gt;
Since we like to expose and map reality, the JOGL API is as is!&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1944</id>
		<title>Why Instance Design</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1944"/>
		<updated>2016-01-28T15:09:08Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The scope of this wiki page is essentially to explain why JOGL uses a instance-design instead of a static one, used by other libraries (such as Lwjgl).&lt;br /&gt;
&lt;br /&gt;
The content has been taken from [http://forum.jogamp.org/Why-does-JOGL-use-Instances-of-GLContext-GL-instead-of-exposing-a-Static-API-td4034144.html this thread] where Sven decided to elaborate and list the reasons behind that since many people wonder and ask why.&lt;br /&gt;
&lt;br /&gt;
== Then why does JOGL use Instances of GLContext / GL* instead of exposing a Static API? ==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Essentially because this is how it &#039;&#039;&#039;should&#039;&#039;&#039; be planned, doing differently is a &#039;&#039;&#039;wrong&#039;&#039;&#039; design. We are all about exposing a correct API, reflecting the real implementation model / design.&amp;lt;br /&amp;gt;&lt;br /&gt;
   Hint: OpenGL&#039;s implementation is not static!&lt;br /&gt;
About having a static implementation, read the bottom remark!&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Isn&#039;t static invocation faster?&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
OpenGL is a state machine. It associates locks and memory references and those OpenGL rendering states. In JOGL, we do track certain states, required for a functional binding.&lt;br /&gt;
&lt;br /&gt;
- [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLBufferStorage.html GLBufferStorage] and its private tracker is used to manage memory mapped and use-create storage.&lt;br /&gt;
&lt;br /&gt;
- Seamless FBO handling requires us to track currently used [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLBase.html#getDefaultDrawFramebuffer() FBO buffer]. This allows us to pipe even onscreen rendering using FBO as required for certain machines (OSX/CALayer with AWT). However, this can be utilized by user applications, since tracking of the FBO is for free.&lt;br /&gt;
&lt;br /&gt;
- [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLSharedContextSetter.html Sharing GLContext], to allow seamless and stable context sharing, we are required to track its actual state to know when we are able to create the shared &#039;slave&#039; context.&lt;br /&gt;
&lt;br /&gt;
- Last but not least, GLContext performs proper locking. User can query states and try locking, as well as associate data to TLS.&lt;br /&gt;
&lt;br /&gt;
Tracking these states allows us not to query the native OpenGL context via glGet*. The latter most certainly cause a pipeline flush/sync and slow down rendering, see [{{SERVER}}/bugzilla/show_bug.cgi?id=1066 Bug 1066].&lt;br /&gt;
&lt;br /&gt;
Tracking itself is cheap, occurring on the Java side simply setting a variable&lt;br /&gt;
or using O(1) maps for more advanced stuff (memory objects). &lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Isn&#039;t it more like OpenGL to have it static?&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
OpenGL has many variations, read: Profiles. You can have different OpenGL context, e.g. GL 3.3, GL 4.5, ES 3.1 .. and so on.&lt;br /&gt;
See [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL-Evolution-And-JOGL].&amp;lt;br /&amp;gt;&lt;br /&gt;
In JOGL you can actually use desktop GL [1.x - 4.5] besides GL-ES [1.0 - 3.1] in the same application!&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;It&#039;s quite a burden to pass the GL object, isn&#039;t it?&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
OpenGL may expose different function tables. OpenGL may even expose different function pointer, using different function tables depending on the OpenGL profile and what-not.&lt;br /&gt;
OpenGL may be implemented by different native libraries (libGL, libGLES, ..).&lt;br /&gt;
&lt;br /&gt;
Here it is required to bind the exposed OpenGL functions _dynamically_ to their respective function table used in JOGL.&lt;br /&gt;
JOGL caches there function tables using certain compatibility criterias, e.g.&lt;br /&gt;
* Display connection (X11 networking)!&lt;br /&gt;
* OpenGL profile&lt;br /&gt;
&lt;br /&gt;
See the previous answer as well.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== Bottom Remark ====&lt;br /&gt;
&lt;br /&gt;
A static API can accommodate the above by using thread-local-storage (TLS).&lt;br /&gt;
&lt;br /&gt;
However, this would require to map all the static API entries to proper state-full objects.&lt;br /&gt;
&lt;br /&gt;
* OpenGL actually maps static -&amp;gt; TLS objects&lt;br /&gt;
&lt;br /&gt;
* JOGL however, exposes the plain state-full [{{SERVER}}/jogl/doc/uml/html/ API]&lt;br /&gt;
   &lt;br /&gt;
* Know that TLS access is not as fast as passing an object! (Even though TLS is not slow at all)   &lt;br /&gt;
&lt;br /&gt;
To conclude, using Thread-Local-Storage to simulate Object-Oriented structure in an Object-Oriented language is just silly.&lt;br /&gt;
&lt;br /&gt;
Since we like to expose and map reality, the JOGL API is as is!&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=GL_Debug_Output&amp;diff=1943</id>
		<title>GL Debug Output</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=GL_Debug_Output&amp;diff=1943"/>
		<updated>2016-01-28T12:55:55Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Debug Output&#039;&#039;&#039; is an OpenGL feature that makes [https://www.opengl.org/wiki/Error_Checking Error Checking] from functions easier.&lt;br /&gt;
&lt;br /&gt;
In order to get more information about Debug Output, you can read the main opengl [https://www.opengl.org/wiki/Debug_Output wiki page]. You should read that first before continuing.&lt;br /&gt;
&lt;br /&gt;
The difference with plain OpenGL is that in Jogl, if you want to enable Debug Output, you have to do it at the begin, before the context gets created.&lt;br /&gt;
&lt;br /&gt;
There are two tests in jogl-demos, that show how you can achieve this:&lt;br /&gt;
* [https://github.com/sgothel/jogl/blob/b3ecc88efca2a2f969e1e5a375086148821ee3c5/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLDebug00NEWT.java#L103 TestGLDebug00NEWT]&lt;br /&gt;
* [https://github.com/sgothel/jogl/blob/b3ecc88efca2a2f969e1e5a375086148821ee3c5/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLDebug01NEWT.java#L71 TestGLDebug01NEWT]&lt;br /&gt;
&lt;br /&gt;
There is also a sample, [https://github.com/elect86/jogl-samples/blob/master/jogl-samples/src/tests/gl_420/Gl_420_debug_output.java gl-420-debug-output] from the jogl-samples that it is interesting to take a look at. Indeed, once enabled from the startup, there are different way you can turn it on/off. &lt;br /&gt;
First of all, you should be aware that there are now two ways of affecting the debut, one is acting directly on jogl, the other is setting directly OpenGL through opengl calls.&lt;br /&gt;
You can now enable/disable Debug Output using either:&lt;br /&gt;
  glWindow.getContext().enableGLDebugMessage(true/false);&lt;br /&gt;
&lt;br /&gt;
  gl4.glEnable/Disable(GL_DEBUG_OUTPUT);&lt;br /&gt;
Same for setting the synchronous option:&lt;br /&gt;
 glWindow.getContext().setGLDebugSynchronous(true/false);&lt;br /&gt;
&lt;br /&gt;
 gl4.glEnable/Disable(GL_DEBUG_OUTPUT_SYNCHRONOUS);&lt;br /&gt;
Control the messages:&lt;br /&gt;
 glWindow.getContext().glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, null, 0, true);&lt;br /&gt;
&lt;br /&gt;
 gl4.glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, null, 0, true);&lt;br /&gt;
Or insert them:&lt;br /&gt;
  glWindow.getContext().glDebugMessageInsert(&lt;br /&gt;
                    GL_DEBUG_SOURCE_APPLICATION,&lt;br /&gt;
                    GL_DEBUG_TYPE_OTHER, 1,&lt;br /&gt;
                    GL_DEBUG_SEVERITY_MEDIUM,&lt;br /&gt;
                    &amp;quot;Message&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  gl4.glDebugMessageInsert(&lt;br /&gt;
                    GL_DEBUG_SOURCE_APPLICATION,&lt;br /&gt;
                    GL_DEBUG_TYPE_OTHER, 1,&lt;br /&gt;
                    GL_DEBUG_SEVERITY_MEDIUM,&lt;br /&gt;
                    message1.length(), message1);&lt;br /&gt;
&lt;br /&gt;
Anyway it is also important to mention that, of course, OpenGL settings have the priority over the Jogl&#039;s one. You should always be coherent with the way you took.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=GL_Debug_Output&amp;diff=1942</id>
		<title>GL Debug Output</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=GL_Debug_Output&amp;diff=1942"/>
		<updated>2016-01-28T12:37:52Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Debug Output&#039;&#039;&#039; is an OpenGL feature that makes [https://www.opengl.org/wiki/Error_Checking Error Checking] from functions easier.&lt;br /&gt;
&lt;br /&gt;
In order to get more information about Debug Output, you can read the main opengl [https://www.opengl.org/wiki/Debug_Output wiki page]&lt;br /&gt;
&lt;br /&gt;
The difference with plain OpenGL is that in Jogl, if you want to enable Debug Output, you have to do it at the begin, before the context gets created.&lt;br /&gt;
&lt;br /&gt;
There are two tests in jogl-demos, that show how you can achieve this:&lt;br /&gt;
* [https://github.com/sgothel/jogl/blob/b3ecc88efca2a2f969e1e5a375086148821ee3c5/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLDebug00NEWT.java#L103 TestGLDebug00NEWT]&lt;br /&gt;
* [https://github.com/sgothel/jogl/blob/b3ecc88efca2a2f969e1e5a375086148821ee3c5/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestGLDebug01NEWT.java#L71 TestGLDebug01NEWT]&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Main_Page&amp;diff=1941</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Main_Page&amp;diff=1941"/>
		<updated>2016-01-28T12:04:37Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Welcome to the [{{SERVER}}/ JogAmp] wiki. It documents JOGL, JOCL and JOAL, the cross-platform bindings to the OpenGL, OpenCL, and OpenAL APIs.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Getting Started&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Downloading and installing JOGL|Downloading and installing]]&lt;br /&gt;
**[[Jogamp Versioning and Releases|Versioning and Releases]]&lt;br /&gt;
*[[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
*[[Jogamp SCM Repositories|Source Code Repositories]]&lt;br /&gt;
*[[SW Tracking|Tracking Reports]]&lt;br /&gt;
*[{{SERVER}}/chuck/ Build and Test Server]&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Community&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[How to Contribute|Contribute to JogAmp]]&lt;br /&gt;
*[[How to Build|Build JogAmp]]&lt;br /&gt;
*[[Maintainer and Contacts]]&lt;br /&gt;
*[[Jogl FAQ#Bugreports &amp;amp; Testing|Report a bug]]&lt;br /&gt;
**[{{SERVER}}/bugzilla/ Bugzilla]&lt;br /&gt;
*[http://forum.jogamp.org/ Ask a question in the forum]&lt;br /&gt;
*[[chatroom|JogAmp IRC]]&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot; width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;lt;h1&amp;gt;JogAmp Modules&amp;lt;/h1&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Roadmaps&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.4.0|2.4.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.3.2|2.3.2]], [[SW Tracking Report Objectives for the release 2.3.1|2.3.1]], [[SW Tracking Report Objectives for the release 2.3.0|2.3.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.2.4|2.2.4]], [[SW Tracking Report Objectives for the release 2.2.3|2.2.3]], [[SW Tracking Report Objectives for the release 2.2.2|2.2.2]], [[SW Tracking Report Objectives for the release 2.2.1|2.2.1]], [[SW Tracking Report Objectives for the release 2.2.0|2.2.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.1.5|2.1.5]], [[SW Tracking Report Objectives for the release 2.1.4|2.1.4]], [[SW Tracking Report Objectives for the release 2.1.3|2.1.3]], [[SW Tracking Report Objectives for the release 2.1.2|2.1.2]], [[SW Tracking Report Objectives for the release 2.1.1|2.1.1]], [[SW Tracking Report Objectives for the release 2.1.0|2.1.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.0.2 of JOGL|2.0.2]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOGL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Jogl Overview|Overview]] [ [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL] ]&lt;br /&gt;
*[[Why Instance Design|Why Instance Design]]&lt;br /&gt;
*[[Jogl Tutorial|Tutorial]]&lt;br /&gt;
*[[Jogl FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=jogl.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
*[[Jogl API Overview|API Overview]]&lt;br /&gt;
**[[GL Debug Output|GL Debug Output]]&lt;br /&gt;
*[{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOCL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[JOCL Overview|Overview]]&lt;br /&gt;
*[[JOCL Tutorial|Tutorial]]&lt;br /&gt;
*[[JOCL FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=jocl.git;a=blob;f=LICENSE License]&lt;br /&gt;
*[{{SERVER}}/deployment/jogamp-next/javadoc/jocl/javadoc/ API Doc]&lt;br /&gt;
*[{{SERVER}}/jocl/doc/HowToBuild.html How to Build JOCL]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOAL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Joal Overview|Overview]]&lt;br /&gt;
*[[Joal Tutorial|Tutorial]]&lt;br /&gt;
*[[Joal FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=joal.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/joal/javadoc/ Public], [{{SERVER}}/deployment/jogamp-next/javadoc/joal/javadoc_dev/ Internal] ]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;GlueGen&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[GlueGen_Wiki|Overview]]&lt;br /&gt;
* [{{SERVER}}/git/?p=gluegen.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-next/javadoc/gluegen/javadoc/ API Doc]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot; width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;lt;h1&amp;gt;Related Projects&amp;lt;/h1&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Java3D&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Java3D Overview|Overview]]&lt;br /&gt;
*[[Downloading and installing Java3D|Downloading and installing]]&lt;br /&gt;
*[[Java3D Tutorial|Tutorial]]&lt;br /&gt;
*[[Java3D FAQ|FAQ]]&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Ji Gong&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Ji Gong Overview|Overview]]&lt;br /&gt;
*[[Ji Gong Motivation|Motivation]]&lt;br /&gt;
*[[Ji Gong FAQ|FAQ]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Source Certification Contract (SCC)&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[SCC Overview|Overview]]&lt;br /&gt;
*[[SCC FAQ|FAQ]]&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Ardor3D&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Ardor3D Overview|Overview]]&lt;br /&gt;
*[[Ardor3D Tutorial|Tutorial]]&lt;br /&gt;
*[http://jogamp.org/deployment/ardor3d/javadoc/ API Documentation]&lt;br /&gt;
*[[Ardor3D FAQ|FAQ]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1940</id>
		<title>Why Instance Design</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1940"/>
		<updated>2016-01-28T12:02:17Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The scope of this wiki page is essentially to explain why JOGL uses a instance-design instead of a static one, used by other libraries (such as Lwjgl).&lt;br /&gt;
&lt;br /&gt;
The content has been taken from [http://forum.jogamp.org/Why-does-JOGL-use-Instances-of-GLContext-GL-instead-of-exposing-a-Static-API-td4034144.html this thread] where Sven decided to elaborate and list the reasons behind that since many people wonder and ask why.&lt;br /&gt;
&lt;br /&gt;
== Then why does JOGL use Instances of GLContext / GL* instead of exposing a Static API? ==&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Essentially because this is how it &#039;&#039;&#039;should&#039;&#039;&#039; be planned, doing differently is a &#039;&#039;&#039;wrong&#039;&#039;&#039; design. We are all about exposing a correct API, reflecting the real implementation model / design.&amp;lt;br /&amp;gt;&lt;br /&gt;
   Hint: OpenGL&#039;s implementation is not static!&lt;br /&gt;
About having a static implementation, read the bottom remark!&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Isn&#039;t static invocation faster?&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
OpenGL is a state machine. It associates locks and memory references and those OpenGL rendering states. In JOGL, we do track certain states, required for a functional binding.&lt;br /&gt;
&lt;br /&gt;
- [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLBufferStorage.html GLBufferStorage] and its private tracker is used to manage memory mapped and use-create storage.&lt;br /&gt;
&lt;br /&gt;
- Seamless FBO handling requires us to track currently used [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLBase.html#getDefaultDrawFramebuffer() FBO buffer]. This allows us to pipe even onscreen rendering using FBO as required for certain machines (OSX/CALayer with AWT). However, this can be utilized by user applications, since tracking of the FBO is for free.&lt;br /&gt;
&lt;br /&gt;
- [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLSharedContextSetter.html Sharing GLContext], to allow seamless and stable context sharing, we are required to track its actual state to know when we are able to create the shared &#039;slave&#039; context.&lt;br /&gt;
&lt;br /&gt;
- Last but not least, GLContext performs proper locking. User can query states and try locking, as well as associate data to TLS.&lt;br /&gt;
&lt;br /&gt;
Tracking these states allows us not to query the native OpenGL context via glGet*. The latter most certainly cause a pipeline flush/sync and slow down rendering, see [{{SERVER}}/bugzilla/show_bug.cgi?id=1066 Bug 1066].&lt;br /&gt;
&lt;br /&gt;
Tracking itself is cheap, occurring on the Java side simply setting a variable&lt;br /&gt;
or using O(1) maps for more advanced stuff (memory objects). &lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;Isn&#039;t it more like OpenGL to have it static?&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
OpenGL has many variations, read: Profiles. You can have different OpenGL context, e.g. GL 3.3, GL 4.5, ES 3.1 .. and so on.&lt;br /&gt;
See [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL-Evolution-And-JOGL].&amp;lt;br /&amp;gt;&lt;br /&gt;
In JOGL you can actually use desktop GL [1.x - 4.5] besides GL-ES [1.0 - 3.1] in the same application!&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;It&#039;s quite a burden to pass the GL object, isn&#039;t it?&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
OpenGL may expose different function tables. OpenGL may even expose different function pointer, using different function tables depending on the OpenGL profile and what-not.&lt;br /&gt;
OpenGL may be implemented by different native libraries (libGL, libGLES, ..).&lt;br /&gt;
&lt;br /&gt;
Here it is required to bind the exposed OpenGL functions _dynamically_ to their respective function table used in JOGL.&lt;br /&gt;
JOGL caches there function tables using certain compatibility criterias, e.g.&lt;br /&gt;
* Display connection (X11 networking)!&lt;br /&gt;
* OpenGL profile&lt;br /&gt;
&lt;br /&gt;
See the previous answer as well.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== Bottom Remark ====&lt;br /&gt;
&lt;br /&gt;
A static API can accommodate the above by using thread-local-storage (TLS).&lt;br /&gt;
&lt;br /&gt;
However, this would require to map all the static API entries to proper state-full objects.&lt;br /&gt;
&lt;br /&gt;
* OpenGL actually maps static -&amp;gt; TLS objects&lt;br /&gt;
&lt;br /&gt;
* JOGL however, exposes the plain state-full [{{SERVER}}/jogl/doc/uml/html/ API]&lt;br /&gt;
   &lt;br /&gt;
* Know that TLS access is not as fast as passing an object! (Even though TLS is not slow at all)   &lt;br /&gt;
&lt;br /&gt;
To conclude, using TLS to simulate OO in an OO-language is just wrong.&lt;br /&gt;
&lt;br /&gt;
Since we like to expose and map reality, the JOGL API is as is!&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1939</id>
		<title>Why Instance Design</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1939"/>
		<updated>2016-01-28T11:40:07Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The scope of this wiki page is essentially to explain why JOGL uses a instance-design instead of a static one, used by other libraries (such as Lwjgl).&lt;br /&gt;
&lt;br /&gt;
The content has been taken from [http://forum.jogamp.org/Why-does-JOGL-use-Instances-of-GLContext-GL-instead-of-exposing-a-Static-API-td4034144.html this thread] where Sven decided to elaborate and list the reasons behind that since many people wonder and ask why.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Then why does JOGL use Instances of GLContext / GL* instead of exposing a Static API?&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially because this is how it &#039;&#039;&#039;should&#039;&#039;&#039; be planned, doing differently is a &#039;&#039;&#039;wrong&#039;&#039;&#039; design. We are all about exposing a correct API, reflecting the real implementation model / design. &lt;br /&gt;
&lt;br /&gt;
Answer: &amp;quot;Isn&#039;t static invocation faster?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Question:&lt;br /&gt;
&lt;br /&gt;
- OpenGL is a state machine. It associates locks and memory references and those OpenGL rendering states.&lt;br /&gt;
&lt;br /&gt;
In JOGL, we do track certain states, required for a functional binding.&lt;br /&gt;
&lt;br /&gt;
- [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLBufferStorage.html GLBufferStorage] and its private tracker is used to manage memory mapped and use-create storage.&lt;br /&gt;
&lt;br /&gt;
- Seamless FBO handling requires us to track currently used [[{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLBase.html#getDefaultDrawFramebuffer() FBO buffer]&lt;br /&gt;
&lt;br /&gt;
 This allows us to pipe even onscreen rendering using FBO as required for certain machines (OSX/CALayer w/ AWT). However, this can be utilized by user applications, since tracking of the FBO is for free.&lt;br /&gt;
&lt;br /&gt;
- [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLSharedContextSetter.html Sharing GLContext, to allow seamless and stable context sharing, we are required to track its actual state to know when we are able to create the shared &#039;slave&#039; context.&lt;br /&gt;
&lt;br /&gt;
- Last but not least, GLContext performs proper locking. User can query states and try locking, as well as associate data to TLS.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1938</id>
		<title>Why Instance Design</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1938"/>
		<updated>2016-01-28T11:03:49Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The scope of this wiki page is essentially to explain why JOGL uses a instance-design instead of a static one, used by other libraries (such as Lwjgl).&lt;br /&gt;
&lt;br /&gt;
The content has been taken from [http://forum.jogamp.org/Why-does-JOGL-use-Instances-of-GLContext-GL-instead-of-exposing-a-Static-API-td4034144.html this thread] where Sven decided to elaborate and list the reasons behind that since many people wonder and ask why.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Then why does JOGL use Instances of GLContext / GL* instead of exposing a Static API?&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially because this is how it &#039;&#039;&#039;should&#039;&#039;&#039; be planned, doing differently is a &#039;&#039;&#039;wrong&#039;&#039;&#039; design. We are all about exposing a correct API, reflecting the real implementation model / design. &lt;br /&gt;
&lt;br /&gt;
Answer: &amp;quot;Isn&#039;t static invocation faster?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Question:&lt;br /&gt;
&lt;br /&gt;
- OpenGL is a state machine. It associates locks and memory references and those OpenGL rendering states.&lt;br /&gt;
&lt;br /&gt;
In JOGL, we do track certain states, required for a functional binding.&lt;br /&gt;
&lt;br /&gt;
- [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLBufferStorage.html GLBufferStorage] and its private tracker is used to manage memory mapped and use-create storage.&lt;br /&gt;
&lt;br /&gt;
- Seamless FBO handling requires us to track currently used [[{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLBase.html#getDefaultDrawFramebuffer() FBO buffer]&lt;br /&gt;
&lt;br /&gt;
  This allows us to pipe even onscreen rendering&lt;br /&gt;
  using FBO as required for certain machines (OSX/CALayer w/ AWT).&lt;br /&gt;
  However, this can be utilized by user applications,&lt;br /&gt;
  since tracking of the FBO is for free.&lt;br /&gt;
&lt;br /&gt;
- Sharing GLContext&lt;br /&gt;
  &amp;lt;http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/GLSharedContextSetter.html&amp;gt;&lt;br /&gt;
  To allow seamless and stable context sharing,&lt;br /&gt;
  we are required to track its actual state&lt;br /&gt;
  to know when we are able to create the shared &#039;slave&#039; context.&lt;br /&gt;
&lt;br /&gt;
- Last but not least, GLContext performs proper locking.&lt;br /&gt;
  User can query states and try locking,&lt;br /&gt;
  as well as associate data to TLS.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1937</id>
		<title>Why Instance Design</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1937"/>
		<updated>2016-01-28T10:52:09Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The scope of this wiki page is essentially to explain why JOGL uses a instance-design instead of a static one, used by other libraries (such as Lwjgl).&lt;br /&gt;
&lt;br /&gt;
The content has been taken from [http://forum.jogamp.org/Why-does-JOGL-use-Instances-of-GLContext-GL-instead-of-exposing-a-Static-API-td4034144.html this thread].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Then why does JOGL use Instances of GLContext / GL* instead of exposing a Static API?&amp;lt;/h2&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1936</id>
		<title>Why Instance Design</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1936"/>
		<updated>2016-01-28T10:51:58Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The scope of this wiki page is essentially to explain why JOGL uses a instance-design instead of a static one, used by other libraries (such as Lwjgl).&lt;br /&gt;
&lt;br /&gt;
The content has been taken from [http://forum.jogamp.org/Why-does-JOGL-use-Instances-of-GLContext-GL-instead-of-exposing-a-Static-API-td4034144.html this thread].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Then why does JOGL use Instances of GLContext / GL* instead of exposing a Static API?&amp;lt;/h1&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1935</id>
		<title>Why Instance Design</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1935"/>
		<updated>2016-01-28T10:51:29Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The scope of this wiki page is essentially to explain why JOGL uses a instance-design instead of a static one, used by other libraries (such as Lwjgl).&lt;br /&gt;
&lt;br /&gt;
The content has been taken from [http://forum.jogamp.org/Why-does-JOGL-use-Instances-of-GLContext-GL-instead-of-exposing-a-Static-API-td4034144.html this thread].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Why does JOGL use Instances of GLContext / GL* instead of exposing a Static API?&amp;lt;/h1&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1934</id>
		<title>Why Instance Design</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Why_Instance_Design&amp;diff=1934"/>
		<updated>2016-01-28T10:50:57Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: Created page with &amp;quot;&amp;lt;h1&amp;gt;Why does JOGL use Instances of GLContext / GL* instead of exposing a Static API?&amp;lt;/h1&amp;gt;  The scope of this wiki page is essentially to explain why JOGL uses a instance-desig...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Why does JOGL use Instances of GLContext / GL* instead of exposing a Static API?&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The scope of this wiki page is essentially to explain why JOGL uses a instance-design instead of a static one, used by other libraries (such as Lwjgl).&lt;br /&gt;
&lt;br /&gt;
The content has been taken from [http://forum.jogamp.org/Why-does-JOGL-use-Instances-of-GLContext-GL-instead-of-exposing-a-Static-API-td4034144.html this thread].&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Main_Page&amp;diff=1933</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Main_Page&amp;diff=1933"/>
		<updated>2016-01-27T14:48:18Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Welcome to the [{{SERVER}}/ JogAmp] wiki. It documents JOGL, JOCL and JOAL, the cross-platform bindings to the OpenGL, OpenCL, and OpenAL APIs.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Getting Started&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Downloading and installing JOGL|Downloading and installing]]&lt;br /&gt;
**[[Jogamp Versioning and Releases|Versioning and Releases]]&lt;br /&gt;
*[[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
*[[Jogamp SCM Repositories|Source Code Repositories]]&lt;br /&gt;
*[[SW Tracking|Tracking Reports]]&lt;br /&gt;
*[{{SERVER}}/chuck/ Build and Test Server]&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Community&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[How to Contribute|Contribute to JogAmp]]&lt;br /&gt;
*[[How to Build|Build JogAmp]]&lt;br /&gt;
*[[Maintainer and Contacts]]&lt;br /&gt;
*[[Jogl FAQ#Bugreports &amp;amp; Testing|Report a bug]]&lt;br /&gt;
**[{{SERVER}}/bugzilla/ Bugzilla]&lt;br /&gt;
*[http://forum.jogamp.org/ Ask a question in the forum]&lt;br /&gt;
*[[chatroom|JogAmp IRC]]&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot; width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;lt;h1&amp;gt;JogAmp Modules&amp;lt;/h1&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Roadmaps&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.4.0|2.4.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.3.2|2.3.2]], [[SW Tracking Report Objectives for the release 2.3.1|2.3.1]], [[SW Tracking Report Objectives for the release 2.3.0|2.3.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.2.4|2.2.4]], [[SW Tracking Report Objectives for the release 2.2.3|2.2.3]], [[SW Tracking Report Objectives for the release 2.2.2|2.2.2]], [[SW Tracking Report Objectives for the release 2.2.1|2.2.1]], [[SW Tracking Report Objectives for the release 2.2.0|2.2.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.1.5|2.1.5]], [[SW Tracking Report Objectives for the release 2.1.4|2.1.4]], [[SW Tracking Report Objectives for the release 2.1.3|2.1.3]], [[SW Tracking Report Objectives for the release 2.1.2|2.1.2]], [[SW Tracking Report Objectives for the release 2.1.1|2.1.1]], [[SW Tracking Report Objectives for the release 2.1.0|2.1.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.0.2 of JOGL|2.0.2]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOGL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Jogl Overview|Overview]] [ [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL] ]&lt;br /&gt;
*[[Jogl Tutorial|Tutorial]]&lt;br /&gt;
*[[Jogl FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=jogl.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
*[[Jogl API Overview|API Overview]]&lt;br /&gt;
**[[GL Debug Output|GL Debug Output]]&lt;br /&gt;
*[{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOCL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[JOCL Overview|Overview]]&lt;br /&gt;
*[[JOCL Tutorial|Tutorial]]&lt;br /&gt;
*[[JOCL FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=jocl.git;a=blob;f=LICENSE License]&lt;br /&gt;
*[{{SERVER}}/deployment/jogamp-next/javadoc/jocl/javadoc/ API Doc]&lt;br /&gt;
*[{{SERVER}}/jocl/doc/HowToBuild.html How to Build JOCL]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOAL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Joal Overview|Overview]]&lt;br /&gt;
*[[Joal Tutorial|Tutorial]]&lt;br /&gt;
*[[Joal FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=joal.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/joal/javadoc/ Public], [{{SERVER}}/deployment/jogamp-next/javadoc/joal/javadoc_dev/ Internal] ]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;GlueGen&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[GlueGen_Wiki|Overview]]&lt;br /&gt;
* [{{SERVER}}/git/?p=gluegen.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-next/javadoc/gluegen/javadoc/ API Doc]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot; width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;lt;h1&amp;gt;Related Projects&amp;lt;/h1&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Java3D&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Java3D Overview|Overview]]&lt;br /&gt;
*[[Downloading and installing Java3D|Downloading and installing]]&lt;br /&gt;
*[[Java3D Tutorial|Tutorial]]&lt;br /&gt;
*[[Java3D FAQ|FAQ]]&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Ji Gong&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Ji Gong Overview|Overview]]&lt;br /&gt;
*[[Ji Gong Motivation|Motivation]]&lt;br /&gt;
*[[Ji Gong FAQ|FAQ]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Source Certification Contract (SCC)&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[SCC Overview|Overview]]&lt;br /&gt;
*[[SCC FAQ|FAQ]]&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Ardor3D&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Ardor3D Overview|Overview]]&lt;br /&gt;
*[[Ardor3D Tutorial|Tutorial]]&lt;br /&gt;
*[http://jogamp.org/deployment/ardor3d/javadoc/ API Documentation]&lt;br /&gt;
*[[Ardor3D FAQ|FAQ]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=GL_Debug_Output&amp;diff=1932</id>
		<title>GL Debug Output</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=GL_Debug_Output&amp;diff=1932"/>
		<updated>2016-01-27T14:46:32Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: Created page with &amp;quot;Test&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Main_Page&amp;diff=1931</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Main_Page&amp;diff=1931"/>
		<updated>2016-01-25T09:49:26Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Welcome to the [{{SERVER}}/ JogAmp] wiki. It documents JOGL, JOCL and JOAL, the cross-platform bindings to the OpenGL, OpenCL, and OpenAL APIs.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{| style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Getting Started&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Downloading and installing JOGL|Downloading and installing]]&lt;br /&gt;
**[[Jogamp Versioning and Releases|Versioning and Releases]]&lt;br /&gt;
*[[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
*[[Jogamp SCM Repositories|Source Code Repositories]]&lt;br /&gt;
*[[SW Tracking|Tracking Reports]]&lt;br /&gt;
*[{{SERVER}}/chuck/ Build and Test Server]&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Community&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[How to Contribute|Contribute to JogAmp]]&lt;br /&gt;
*[[How to Build|Build JogAmp]]&lt;br /&gt;
*[[Maintainer and Contacts]]&lt;br /&gt;
*[[Jogl FAQ#Bugreports &amp;amp; Testing|Report a bug]]&lt;br /&gt;
**[{{SERVER}}/bugzilla/ Bugzilla]&lt;br /&gt;
*[http://forum.jogamp.org/ Ask a question in the forum]&lt;br /&gt;
*[[chatroom|JogAmp IRC]]&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot; width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;lt;h1&amp;gt;JogAmp Modules&amp;lt;/h1&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Roadmaps&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.4.0|2.4.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.3.2|2.3.2]], [[SW Tracking Report Objectives for the release 2.3.1|2.3.1]], [[SW Tracking Report Objectives for the release 2.3.0|2.3.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.2.4|2.2.4]], [[SW Tracking Report Objectives for the release 2.2.3|2.2.3]], [[SW Tracking Report Objectives for the release 2.2.2|2.2.2]], [[SW Tracking Report Objectives for the release 2.2.1|2.2.1]], [[SW Tracking Report Objectives for the release 2.2.0|2.2.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.1.5|2.1.5]], [[SW Tracking Report Objectives for the release 2.1.4|2.1.4]], [[SW Tracking Report Objectives for the release 2.1.3|2.1.3]], [[SW Tracking Report Objectives for the release 2.1.2|2.1.2]], [[SW Tracking Report Objectives for the release 2.1.1|2.1.1]], [[SW Tracking Report Objectives for the release 2.1.0|2.1.0]]&lt;br /&gt;
* [[SW Tracking Report Objectives for the release 2.0.2 of JOGL|2.0.2]]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOGL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Jogl Overview|Overview]] [ [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL] ]&lt;br /&gt;
*[[Jogl Tutorial|Tutorial]]&lt;br /&gt;
*[[Jogl FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=jogl.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
*[[Jogl API Overview|API Overview]]&lt;br /&gt;
**[[Jogl API Overview glDebugOutput|Gl Debug Output]]&lt;br /&gt;
*[{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOCL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[JOCL Overview|Overview]]&lt;br /&gt;
*[[JOCL Tutorial|Tutorial]]&lt;br /&gt;
*[[JOCL FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=jocl.git;a=blob;f=LICENSE License]&lt;br /&gt;
*[{{SERVER}}/deployment/jogamp-next/javadoc/jocl/javadoc/ API Doc]&lt;br /&gt;
*[{{SERVER}}/jocl/doc/HowToBuild.html How to Build JOCL]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;JOAL&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Joal Overview|Overview]]&lt;br /&gt;
*[[Joal Tutorial|Tutorial]]&lt;br /&gt;
*[[Joal FAQ|FAQ]]&lt;br /&gt;
*[{{SERVER}}/git/?p=joal.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/joal/javadoc/ Public], [{{SERVER}}/deployment/jogamp-next/javadoc/joal/javadoc_dev/ Internal] ]&lt;br /&gt;
&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;GlueGen&amp;lt;/h3&amp;gt;&lt;br /&gt;
* [[GlueGen_Wiki|Overview]]&lt;br /&gt;
* [{{SERVER}}/git/?p=gluegen.git;a=blob;f=LICENSE.txt License]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-next/javadoc/gluegen/javadoc/ API Doc]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot; width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;lt;h1&amp;gt;Related Projects&amp;lt;/h1&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Java3D&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Java3D Overview|Overview]]&lt;br /&gt;
*[[Downloading and installing Java3D|Downloading and installing]]&lt;br /&gt;
*[[Java3D Tutorial|Tutorial]]&lt;br /&gt;
*[[Java3D FAQ|FAQ]]&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Ji Gong&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Ji Gong Overview|Overview]]&lt;br /&gt;
*[[Ji Gong Motivation|Motivation]]&lt;br /&gt;
*[[Ji Gong FAQ|FAQ]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Source Certification Contract (SCC)&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[SCC Overview|Overview]]&lt;br /&gt;
*[[SCC FAQ|FAQ]]&lt;br /&gt;
|style=&amp;quot;vertical-align: top; padding: 5px; width: 50%&amp;quot;|&amp;lt;h3&amp;gt;Ardor3D&amp;lt;/h3&amp;gt;&lt;br /&gt;
*[[Ardor3D Overview|Overview]]&lt;br /&gt;
*[[Ardor3D Tutorial|Tutorial]]&lt;br /&gt;
*[http://jogamp.org/deployment/ardor3d/javadoc/ API Documentation]&lt;br /&gt;
*[[Ardor3D FAQ|FAQ]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1924</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1924"/>
		<updated>2015-10-26T09:24:46Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
* [https://gist.github.com/xranby/ccbcfcaef341f5bd1ba8 Rudimentary standalone example using the fixed pipeline with OpenGL ES 1 by Xerxes Rånby]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/jogl-samples/blob/master/jogl-samples/src/helloTriangle/HelloTriangle.java Simple sample] that features GL4, pure newt, glWindow options, animator, indexed drawing, dinamic attribute and frag data binding, interleaved data, vao, vbo (with normalization on one attribute), ibo (with shorts), uniform, glsl program (with specific suffix) and matrix jogl util, gl error check, key listener and right way to dispose.&lt;br /&gt;
&lt;br /&gt;
= Common Mistakes =&lt;br /&gt;
I suggest you to take a read to these two pages for a quick overview over the most common problems, it is a very useful reading, legacy sections are carefully signaled.&lt;br /&gt;
&lt;br /&gt;
[https://www.opengl.org/wiki/Common_Mistakes OpenGL]&lt;br /&gt;
[https://www.opengl.org/wiki/GLSL_:_common_mistakes GLSL]&lt;br /&gt;
&lt;br /&gt;
Another common mistake that may happen if you port code from C/C++ to Java is this one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Caused by: com.jogamp.opengl.GLException: unpack pixel_buffer_object must be bound to call this method&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkBufferObject(GL4bcImpl.java:40621)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.checkUnpackPBOBound(GL4bcImpl.java:40707)&lt;br /&gt;
	at jogamp.opengl.gl4.GL4bcImpl.glTexImage2D(GL4bcImpl.java:5535)&lt;br /&gt;
	at tests.gl320.Gl_320_fbo_blit.initTexture(Gl_320_fbo_blit.java:199)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This happens because in C/C++, when you just want to allocate the space for a texture using, for example, &#039;&#039;glTexImage2D&#039;&#039;, you should not pass 0 as the last argument, but &#039;&#039;null&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N.B: The use of color picking is &#039;&#039;&#039;NOT&#039;&#039;&#039; recommended on any hardware whose palette is partially emulated.&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1838</id>
		<title>Jogl FAQ</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1838"/>
		<updated>2015-08-26T12:08:37Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: /* Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;JOGL FAQ&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Jogamp Versioning and Releases|Versioning and Releases]] ==&lt;br /&gt;
&lt;br /&gt;
== What are the Runtime OpenGL Version Requirements ? ==&lt;br /&gt;
The current JOGL2 spec is in WIP state, but mostly finished.&lt;br /&gt;
We do not require any extra features of GL versions &amp;gt; 1.1,&lt;br /&gt;
hence it shall just work.&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to&lt;br /&gt;
* support OpenGL platforms not supporting a version &amp;amp;gt; 1.2&lt;br /&gt;
* use GL &amp;amp;ge; 1.3 features optionally&lt;br /&gt;
Just query their availability e.g.:&lt;br /&gt;
 gl.isExtensionAvailable(&amp;quot;GL_VERSION_1_3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you call a &amp;amp;gt; 1.2 GL function where it is not available,&lt;br /&gt;
a GLException is thrown.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;JOGL requires at least an OpenGL version 1.1&#039;&#039;&#039;,&lt;br /&gt;
due to its dynamical function binding starting with OpenGL 1.2.&lt;br /&gt;
&lt;br /&gt;
== Use and test Autobuilds ==&lt;br /&gt;
&lt;br /&gt;
I like to summarize how to manually test the JOGL autobuilds, starting with 2010-11-10.&lt;br /&gt;
&lt;br /&gt;
You can fetch autobuilds from one the [[Jogamp Versioning and Releases#Autobuilds|autobuild folder]].&lt;br /&gt;
&lt;br /&gt;
=== Runtime Version Check ===&lt;br /&gt;
&lt;br /&gt;
The simplest verification of a JOGL build is to use the &lt;br /&gt;
[[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]]&lt;br /&gt;
and the [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
See [[#Bugreports &amp;amp; Testing]].&lt;br /&gt;
&lt;br /&gt;
=== JOGL Demos ===&lt;br /&gt;
&lt;br /&gt;
Let’s assume we are in the test directory ‘test’, from which we operate from this point.&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogl-demos.7z jogl-demos.7z]. Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogl-demos.7z&amp;lt;/pre&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z jogamp-all-platforms.7z].  Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogamp-all-platforms.7z&amp;lt;/pre&amp;gt;] Create a symbolic link or rename the archive directory from &#039;&#039;jogamp-all-platforms&#039;&#039; to &#039;&#039;jogl&#039;&#039;, ie &amp;lt;pre&amp;gt;ln -s jogamp-all-platforms jogl&amp;lt;/pre&amp;gt;.&lt;br /&gt;
* If you like to test the binding to NV’s Cg, [http://developer.nvidia.com/object/cg_download.html download and install]&lt;br /&gt;
&lt;br /&gt;
We assume java is in your binary search path.&lt;br /&gt;
&lt;br /&gt;
On X11/Unix and MaxOSX you can test the build as follows:&lt;br /&gt;
&lt;br /&gt;
 sh java-run-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-run.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 sh java-dbg-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-dbg.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
On Windows you shall be able to run:&lt;br /&gt;
&lt;br /&gt;
 java-win32.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 java-win32-dbg.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32-dbg.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
The windows scripts are pretty simple and flat.&lt;br /&gt;
&lt;br /&gt;
The magic unix scripts offer more features and can be used either in the autobuild environment or in your development one.&lt;br /&gt;
* &amp;lt;pre&amp;gt;setenv-jogl.sh &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looks up and invokes profile.jogl, finds gluegen, sets the environment variables (CLASSPATH, LD_LIBRARY_PATH &amp;amp; PATH).&lt;br /&gt;
* &amp;lt;pre&amp;gt;jogl/etc/profile.jogl &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
JOGL profiles are one of JOGL_ALL, JOGL_ES1_MIN, JOGL_ES1_MAX, JOGL_ES2_MIN, JOGL_ES2_MAX,&lt;br /&gt;
JOGL_GL2ES12_MIN, JOGL_GL2ES12_MAX, JOGL_GL2_MIN, JOGL_GL2_MAX.&lt;br /&gt;
Looks up the set of JAR files necessary to satisfy the chosen JOGL-PROFILE.&lt;br /&gt;
&lt;br /&gt;
This allows you to test a specific environment, ie ES2 without GL2 and AWT, using JOGL_ES2_MIN.&lt;br /&gt;
For this case I would recommend the native ES2 implementation from imageon SDK_OGLES2_LINUX_PCEMULATION_2.02.22.0756.&lt;br /&gt;
&lt;br /&gt;
== Bugreports &amp;amp; Testing ==&lt;br /&gt;
For all bug reports, please add the following information to&lt;br /&gt;
your bug report:&lt;br /&gt;
* [[#JOGL, Platform and OpenGL Version]]&lt;br /&gt;
* [[#Detailed Debug Log]]&lt;br /&gt;
* your email&lt;br /&gt;
&lt;br /&gt;
Please use one of the [{{SERVER}}/deployment/archive/master/?C=M;O=D latest aggregated archives],&lt;br /&gt;
as described in [[Downloading and installing JOGL#Downloading the latest aggregated autobuild|this section]].&lt;br /&gt;
&lt;br /&gt;
Using our [{{SERVER}}/bugzilla/ bug tracking system] is strongly recommended.&amp;lt;br&amp;gt;&lt;br /&gt;
We also have a [[SW Tracking|bug overview page]] available via this wiki.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please add all subsequent information as stated below to your bugreport&#039;&#039;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
otherwise we are not capable to hunt it down for you and us.&lt;br /&gt;
&lt;br /&gt;
=== JOGL, Platform and OpenGL Version ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]],&lt;br /&gt;
which provides the following information:&lt;br /&gt;
&lt;br /&gt;
* Platform&lt;br /&gt;
** OS &amp;amp; version&lt;br /&gt;
** Architecture&lt;br /&gt;
** OpenGL Version&lt;br /&gt;
** Java version (java -version)&lt;br /&gt;
* JOGL version&lt;br /&gt;
** GIT revision&lt;br /&gt;
** Autobuild version&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Debug Log ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test_dbg.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Bug Information ===&lt;br /&gt;
&lt;br /&gt;
* Your Test case&lt;br /&gt;
** Source code, [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;a junit test&amp;lt;/b&amp;gt;] would be best.&lt;br /&gt;
** Invocation command-line&lt;br /&gt;
** Exceptions, stdout/stderr log file&lt;br /&gt;
&lt;br /&gt;
==== Applications ====&lt;br /&gt;
&lt;br /&gt;
Adding a comprehensive [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;junit test&amp;lt;/b&amp;gt;] &lt;br /&gt;
would help us the most to reproduce the bug, to discuss it with you and to achieve a good response time.&amp;lt;br&amp;gt;&lt;br /&gt;
You may add it to your [{{SERVER}}/bugzilla/ bug report] directly or better, give us your [[How to Contribute|git repository pull request]].&lt;br /&gt;
&lt;br /&gt;
If possible, please add the following system properties to enable DEBUG logging:&lt;br /&gt;
&#039;&#039;-Dnewt.debug=all -Dnativewindow.debug=all -Djogl.debug=all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 java -Djava.awt.headless=true -Dnewt.debug=all -Dnativewindow.debug=all \&lt;br /&gt;
 -Djogl.debug=all demos.es2.RedSquare 2&amp;gt;&amp;amp;1 | tee RedSquare.report.log&lt;br /&gt;
&lt;br /&gt;
Attach the log file to your bug report ..&lt;br /&gt;
&lt;br /&gt;
==== Applets and Java Webstart ====&lt;br /&gt;
&lt;br /&gt;
To test &#039;&#039;applets&#039;&#039; and &#039;&#039;javaws&#039;&#039; use &lt;br /&gt;
* the jcontrol panel &lt;br /&gt;
* or edit the &#039;&#039;java properties file&#039;&#039;:&lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment.properties&#039;&#039;&lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\deployment.properties&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where you add the following JRE Arguments. The &#039;&#039;jnlp&#039;&#039; prefix supports the &#039;&#039;javaws&#039;&#039; launch method.&lt;br /&gt;
* jcontrol panel: &amp;lt;pre&amp;gt;-Djnlp.newt.debug=all -Djnlp.nativewindow.debug=all -Djnlp.jogl.debug=all&amp;lt;/pre&amp;gt; &lt;br /&gt;
* properties file: &amp;lt;pre&amp;gt;deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&amp;lt;/pre&amp;gt; Of course you have to add these arguments to all of your JRE lines, ie &#039;&#039;0&#039;&#039; and &#039;&#039;1&#039;&#039;, etc, if they exist.&lt;br /&gt;
&lt;br /&gt;
You also want to &lt;br /&gt;
* Enable logging/trace&lt;br /&gt;
* Show the console window, or just use the latest log files in &lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment/log/&#039;&#039;, or &lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\log\&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hence the &#039;&#039;java properties file&#039;&#039; (see location above) shall contain the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
deployment.log=true&lt;br /&gt;
deployment.trace=true&lt;br /&gt;
deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
deployment.javaws.jre.1.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Best practice:&lt;br /&gt;
* Close your browser and ensure no JVM is running anymore&lt;br /&gt;
* Delete all old log files in above log file folder&lt;br /&gt;
* Start browser and the test applet&lt;br /&gt;
* Close browser after test .. maybe after a while if you see nothing&lt;br /&gt;
* Attach all new generated *.trace files to your bug report ..&lt;br /&gt;
&lt;br /&gt;
== Get the Source Code ==&lt;br /&gt;
&lt;br /&gt;
Create a local copy/branch of a [[Jogamp SCM Repositories|git repository]]&lt;br /&gt;
either anonymous:&lt;br /&gt;
&lt;br /&gt;
* git clone git://github.com/sgothel/gluegen.git gluegen&lt;br /&gt;
* git clone git://github.com/sgothel/jogl.git jogl&lt;br /&gt;
* git clone git://github.com/sgothel/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
or via SSH and your user credential, so you can easily push back your&lt;br /&gt;
changes to the github server:&lt;br /&gt;
&lt;br /&gt;
* git clone git@github.com:username/gluegen.git gluegen&lt;br /&gt;
* git clone git@github.com:username/jogl.git jogl&lt;br /&gt;
* git clone git@github.com:username/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
== [http://jogamp.org/jogl/doc/HowToBuild.html How to build] ==&lt;br /&gt;
&lt;br /&gt;
== [[How to Contribute]] ==&lt;br /&gt;
&lt;br /&gt;
== Common Runtime Problems ==&lt;br /&gt;
&lt;br /&gt;
=== X11: OpenGL library is not picked up correctly,  no OpenGL available ===&lt;br /&gt;
&lt;br /&gt;
In case you are running a DRI machine, eg ATI&#039;s proprietary driver or &lt;br /&gt;
an open source one, you may need to ensure that the environment variable &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039;&lt;br /&gt;
is set properly.&lt;br /&gt;
&lt;br /&gt;
I ran into this while testing the 32bit builds on a 64bit machine&lt;br /&gt;
as a different user. Since &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039; is only setup for the desktop user&lt;br /&gt;
on Ubuntu, some &#039;&#039;/etc/X11/Xsession.d/&#039;&#039; script, I couldn&#039;t get a GL context to work.&lt;br /&gt;
&lt;br /&gt;
So I had to set mine to the value:&lt;br /&gt;
 export LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
[https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/250944 Ubuntu fglrx bug entry]&lt;br /&gt;
&lt;br /&gt;
== How to develop Cross-Device Applications ==&lt;br /&gt;
First you have to pick your lowest common denominator of an OpenGL profile, ie OpenGL ES1 or ES2.&lt;br /&gt;
For either we offer an intersecting desktop GL profile, GL2ES1 or GL2ES2.&lt;br /&gt;
Use the latter while creating your GLCapabilities.&lt;br /&gt;
Build and run your application with the minimum GL profile JARS, e.g. on the desktop use:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; . ./setenv-jogl.sh JOGL_GL2ES12_MIN ../jogl/build&lt;br /&gt;
&lt;br /&gt;
Here you are on a Unix platform (not Window) and your common build subdirectory is &#039;build&#039;.&lt;br /&gt;
&#039;&#039;jogl-demos/setenv-jogl.sh&#039;&#039; is provided within &#039;&#039;jogl-demos&#039;&#039;, which itself utilizes &#039;&#039;jogl/etc/profile.jogl&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL JARS:&lt;br /&gt;
* gluegen-rt.jar&lt;br /&gt;
* jogl-all.jar&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL atomic JARS for minimal deployment:&lt;br /&gt;
* gluegen-gl.jar&lt;br /&gt;
* nativewindow-core.jar&lt;br /&gt;
* jogl-core.jar&lt;br /&gt;
* jogl-util.jar&lt;br /&gt;
* jogl-util-fixedfuncemu.jar&lt;br /&gt;
* newt-core.jar&lt;br /&gt;
* newt-awt.jar&lt;br /&gt;
&lt;br /&gt;
Please check [http://jogamp.org/jogl/doc/deployment/JOGL-DEPLOYMENT.html JOGL Deployment] also.&lt;br /&gt;
&lt;br /&gt;
Now, the same Java application shall run on all devices, desktop and mobile.&lt;br /&gt;
See &#039;&#039;demos.es1.RedSquare&#039;&#039; of the &#039;&#039;jogl-demos&#039;&#039; repository.&lt;br /&gt;
&lt;br /&gt;
On the desktop you may run the ES1 demo:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; sh java-run-newt.sh demos.es1.RedSquare -GL2ES1&lt;br /&gt;
&lt;br /&gt;
and the output is:&lt;br /&gt;
 null RedSquare.run() 0&lt;br /&gt;
 User screen size 0x0&lt;br /&gt;
 Detected screen size 1920x1200&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] Entering initialization&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL Profile: GLProfile[GL2ES1/GL2ES12]&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL:com.sun.opengl.impl.gl2es12.GL2ES12Impl@b815859&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_VERSION=3.0.0 NVIDIA 185.18.14&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_EXTENSIONS: ..&lt;br /&gt;
&lt;br /&gt;
== Is my phone, embedded device or OpenGL ES driver supported by JogAmp? ==&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL ES Driver compatibility matrix]]&lt;br /&gt;
&lt;br /&gt;
== How to use JOGL in Applets ==&lt;br /&gt;
&lt;br /&gt;
See:&lt;br /&gt;
* [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NApplets JOGL Deployment as an NApplet]&lt;br /&gt;
&lt;br /&gt;
== What is &#039;&#039;Newt&#039;s&#039;&#039; Threading Model for native window events ? ==&lt;br /&gt;
As of today, Newt&#039;s default threading model to handle native events&lt;br /&gt;
is the event dispatch thread (EDT) model.&lt;br /&gt;
&lt;br /&gt;
Newt&#039;s EDT impl. creates one EDT per NEWT Display,&lt;br /&gt;
as the Display is a unique abstraction of a graphics device connection&lt;br /&gt;
serving all of it&#039;s Screens and Windows.&lt;br /&gt;
&lt;br /&gt;
EDT is being used to&lt;br /&gt;
* dispatch native Screen and Window events&lt;br /&gt;
* lifecycle Screen and Window functionality &lt;br /&gt;
** create / destroy&lt;br /&gt;
** reparenting&lt;br /&gt;
** native &amp;lt;i&amp;gt;repaint&amp;lt;/i&amp;gt; calls (if no &amp;lt;i&amp;gt;AnimatorControl&amp;lt;/i&amp;gt; is attached and animating)&lt;br /&gt;
** ..&lt;br /&gt;
&lt;br /&gt;
EDT is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; &lt;br /&gt;
* blocking your rendering with event dispatching,&lt;br /&gt;
* needed for pipelining your rendering commands,&lt;br /&gt;
* hence not hindering your high performance rendering in it&#039;s own thread, eg an &amp;lt;i&amp;gt;Animator&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using EDT is not mandatory, and you can turn it off in the NewtFactory,&lt;br /&gt;
and deal with the event dispatch manually.&lt;br /&gt;
&lt;br /&gt;
It&#039;s introduction was necessary to allow a &amp;lt;i&amp;gt;peace of mind&amp;lt;/i&amp;gt;,&lt;br /&gt;
high performance and reactive solution of the dispatch event problem.&lt;br /&gt;
Some OS, especially MS-Windows, require one to create the native Window&lt;br /&gt;
and dispatch it&#039;s events from the same native thread.&lt;br /&gt;
As it was easy to handle these requirements from a simple test application,&lt;br /&gt;
as it is difficult to solve this from a framework operating with multiple temporary threads,&lt;br /&gt;
a web browser for example.&lt;br /&gt;
&lt;br /&gt;
== How to use &#039;&#039;Newt&#039;&#039; with multiple Windows &amp;amp; Threads ==&lt;br /&gt;
Newt is capable of handling multiple threads and windows.&lt;br /&gt;
&lt;br /&gt;
For best performance, you may create one thread per window, if possible.&lt;br /&gt;
&lt;br /&gt;
Below you see the invocation of the ES2 RedSquare jogl-demos utilizing multiple threads.&lt;br /&gt;
&lt;br /&gt;
* Single thread (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single thread (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true com.sun.javafx.newt.util.MainThread demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The serialization of the main Java class through &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039;&lt;br /&gt;
may be used for all platforms, since it only takes effect on &#039;&#039;MacOSX&#039;&#039;.&lt;br /&gt;
This allows you an almost platform independent invocation of your multithreaded Java applications.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;MacOSX&#039;&#039;, &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039; will occupy the main thread and&lt;br /&gt;
serializes all native window related tasks through it.&lt;br /&gt;
This mechanism is thread safe utilizes reentrant locking.&lt;br /&gt;
&lt;br /&gt;
== Why using AWT for high performance is not a good idea ? ==&lt;br /&gt;
&lt;br /&gt;
AWT (on many implementations) holds the lock to the underlying native resources,&lt;br /&gt;
e.g. X11 display, screen and window surface, hence we have to obey these&lt;br /&gt;
locks for any GL action bound to such.&lt;br /&gt;
&lt;br /&gt;
This is still pretty standard matter as long these locks only have to be applied to&lt;br /&gt;
the actual resource in use.&lt;br /&gt;
&lt;br /&gt;
On AWT, it turns out that we have to use the global JAWT toolkit lock&lt;br /&gt;
for any native operation, ie OpenGL.&lt;br /&gt;
This might not be a problem for a single threaded GL application,&lt;br /&gt;
but if you start a multithreaded beast, you will recognize that it will&lt;br /&gt;
stumble around.&lt;br /&gt;
&lt;br /&gt;
You can verify this behavior with the ES1 RedSquare demo:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  java demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
      5s: 3379f, 675 fps, 1 ms/f; total: 5s, 675 fps, 1 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Even here you may experience some stuttering ..&lt;br /&gt;
&lt;br /&gt;
If you force disabling the toolkit lock:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     java -Dnativewindow.nolocking=true demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The demo may freeze forever .. due to native locking.&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2&lt;br /&gt;
      5s: 5958f, 1191 fps, 0 ms/f; total: 5s, 1191 fps, 0 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Runs much smoother .. without the stuttering locking experience ..&lt;br /&gt;
&lt;br /&gt;
This becomes much clearer with more threads:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java demos.es1.RedSquare -awt -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 772f, 151 fps, 6 ms/f; total: 5s, 151 fps, 6 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 1669f, 333 fps, 2 ms/f; total: 5s, 333 fps, 2 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why using Swing for high performance is not a good idea ? ==&lt;br /&gt;
First, all this inherents all arguments from &#039;&#039;&#039;Why using AWT for high performance is not a good idea ?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Second, it involves compositioning using different methods,&lt;br /&gt;
some may not be available on some platforms.&lt;br /&gt;
&lt;br /&gt;
From fast to slow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 1.) External Java2D&#039;s GLContext and FBO object. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on some platforms: Linux/Windows Sun&#039;s Java2D impl.&lt;br /&gt;
* Setup with System property &#039;sun.java2d.opengl&#039; to &#039;true&#039;.&lt;br /&gt;
* Renders directly into Java2D&#039;s FBO object, if available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 2.) Own PBuffer GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D implementation.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 3.) Own Pixmap GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff unlikely hw accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D impl.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
As you see, no straight forward HW rendering is involved,&lt;br /&gt;
assuming that even the windowing manager is using offscreen&lt;br /&gt;
surfaces - you would have 2 compositions here already.&lt;br /&gt;
&lt;br /&gt;
At least (1) would be &#039;acceptable&#039; here, if available,&lt;br /&gt;
but if only (2) is available - the performance would&lt;br /&gt;
not match the state of the art!&lt;br /&gt;
&lt;br /&gt;
Sure, it might be enough for some UIs or static pictures .. or so,&lt;br /&gt;
otherwise, I would prefer the &#039;overlay&#039; method, ie using a&lt;br /&gt;
GLCanvas within a Swing component, while no menu is being shown.&lt;br /&gt;
&lt;br /&gt;
However you do it .. the generic AWT &#039;restrictions&#039; apply here&lt;br /&gt;
as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using OpenGL without a visible component ==&lt;br /&gt;
Sometimes you might want to do OpenGL work without a visible GLDrawable or before making your drawable visible.&lt;br /&gt;
* http://jogamp.762907.n3.nabble.com/Binding-textures-without-showing-the-GLCanvas-tp960145p960234.html&lt;br /&gt;
&lt;br /&gt;
== Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline ==&lt;br /&gt;
&lt;br /&gt;
I see everyday A LOT of beginers who start with the old deprecated OpenGL. This is wrong, this is so wrong. [https://github.com/elect86/ I, personally,] went through this and today I realize I did it wrong and I wished someone could have told me that at the time I start.&lt;br /&gt;
&lt;br /&gt;
In order to say you why you should start right away learning modern OpenGL, I will use the words of [http://web.archive.org/web/20140207031129/http://www.arcsynthesis.org/gltut/About%20this%20Book.html Jason L. McKesson]:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&lt;br /&gt;
Programmability. Virtually all of the aforementioned sources instruct beginners using something called “fixed functionality.” This represents configurations in older graphics processors that define how a particular rendering operation will proceed. It is generally considered easiest to teach neophyte graphics programmers using the fixed function pipeline.&lt;br /&gt;
&lt;br /&gt;
This is considered true because it is easy to get something to happen with fixed functionality. It&#039;s simpler to make pictures that look like something real. The fixed function pipeline is like training wheels for a bicycle.&lt;br /&gt;
&lt;br /&gt;
There are downsides to this approach. First, much of what is learned with this approach must be inevitably abandoned when the user encounters a graphics problem that must be solved with programmability. Programmability wipes out almost all of the fixed function pipeline, so the knowledge does not easily transfer.&lt;br /&gt;
&lt;br /&gt;
A more insidious problem is that the fixed function pipeline can give the &#039;&#039;illusion&#039;&#039; of knowledge. A user can think they understand what they are doing, but they&#039;re really just copy-and-pasting code around. Programming thus becomes akin to magical rituals: you put certain bits of code before other bits, and everything seems to work.&lt;br /&gt;
&lt;br /&gt;
This makes debugging nightmarish. Because the user never really understood what the code does, the user is unable to diagnose what a particular problem could possibly mean. And without that ability, debugging becomes a series of random guesses as to what the problem is.&lt;br /&gt;
&lt;br /&gt;
By contrast, you cannot use a programmable system successfully without first understanding it. Confronting programmable graphics hardware means confronting issues that fixed function materials often gloss over. This may mean a slower start overall, but when you finally get to the end, you truly &#039;&#039;know&#039;&#039; how everything works.&lt;br /&gt;
&lt;br /&gt;
Another problem is that, even if you truly understand the fixed function pipeline, it limits how you think about solving problems. Because of its inflexibility, it focuses your mind along certain problem solving possibilities and away from others. It encourages you to think of textures as pictures; vertex data as texture coordinates, colors, or positions; and the like. By its very nature, it limits creativity and problem solving.&lt;br /&gt;
&lt;br /&gt;
Lastly, even on mobile systems, fixed functionality is generally not available in the graphics hardware. Programmability is the order of the day for most graphics hardware, and this will only become more true in the future.&lt;br /&gt;
&amp;quot;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1837</id>
		<title>Jogl FAQ</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1837"/>
		<updated>2015-08-26T12:08:18Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: /* Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;JOGL FAQ&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Jogamp Versioning and Releases|Versioning and Releases]] ==&lt;br /&gt;
&lt;br /&gt;
== What are the Runtime OpenGL Version Requirements ? ==&lt;br /&gt;
The current JOGL2 spec is in WIP state, but mostly finished.&lt;br /&gt;
We do not require any extra features of GL versions &amp;gt; 1.1,&lt;br /&gt;
hence it shall just work.&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to&lt;br /&gt;
* support OpenGL platforms not supporting a version &amp;amp;gt; 1.2&lt;br /&gt;
* use GL &amp;amp;ge; 1.3 features optionally&lt;br /&gt;
Just query their availability e.g.:&lt;br /&gt;
 gl.isExtensionAvailable(&amp;quot;GL_VERSION_1_3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you call a &amp;amp;gt; 1.2 GL function where it is not available,&lt;br /&gt;
a GLException is thrown.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;JOGL requires at least an OpenGL version 1.1&#039;&#039;&#039;,&lt;br /&gt;
due to its dynamical function binding starting with OpenGL 1.2.&lt;br /&gt;
&lt;br /&gt;
== Use and test Autobuilds ==&lt;br /&gt;
&lt;br /&gt;
I like to summarize how to manually test the JOGL autobuilds, starting with 2010-11-10.&lt;br /&gt;
&lt;br /&gt;
You can fetch autobuilds from one the [[Jogamp Versioning and Releases#Autobuilds|autobuild folder]].&lt;br /&gt;
&lt;br /&gt;
=== Runtime Version Check ===&lt;br /&gt;
&lt;br /&gt;
The simplest verification of a JOGL build is to use the &lt;br /&gt;
[[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]]&lt;br /&gt;
and the [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
See [[#Bugreports &amp;amp; Testing]].&lt;br /&gt;
&lt;br /&gt;
=== JOGL Demos ===&lt;br /&gt;
&lt;br /&gt;
Let’s assume we are in the test directory ‘test’, from which we operate from this point.&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogl-demos.7z jogl-demos.7z]. Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogl-demos.7z&amp;lt;/pre&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z jogamp-all-platforms.7z].  Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogamp-all-platforms.7z&amp;lt;/pre&amp;gt;] Create a symbolic link or rename the archive directory from &#039;&#039;jogamp-all-platforms&#039;&#039; to &#039;&#039;jogl&#039;&#039;, ie &amp;lt;pre&amp;gt;ln -s jogamp-all-platforms jogl&amp;lt;/pre&amp;gt;.&lt;br /&gt;
* If you like to test the binding to NV’s Cg, [http://developer.nvidia.com/object/cg_download.html download and install]&lt;br /&gt;
&lt;br /&gt;
We assume java is in your binary search path.&lt;br /&gt;
&lt;br /&gt;
On X11/Unix and MaxOSX you can test the build as follows:&lt;br /&gt;
&lt;br /&gt;
 sh java-run-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-run.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 sh java-dbg-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-dbg.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
On Windows you shall be able to run:&lt;br /&gt;
&lt;br /&gt;
 java-win32.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 java-win32-dbg.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32-dbg.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
The windows scripts are pretty simple and flat.&lt;br /&gt;
&lt;br /&gt;
The magic unix scripts offer more features and can be used either in the autobuild environment or in your development one.&lt;br /&gt;
* &amp;lt;pre&amp;gt;setenv-jogl.sh &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looks up and invokes profile.jogl, finds gluegen, sets the environment variables (CLASSPATH, LD_LIBRARY_PATH &amp;amp; PATH).&lt;br /&gt;
* &amp;lt;pre&amp;gt;jogl/etc/profile.jogl &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
JOGL profiles are one of JOGL_ALL, JOGL_ES1_MIN, JOGL_ES1_MAX, JOGL_ES2_MIN, JOGL_ES2_MAX,&lt;br /&gt;
JOGL_GL2ES12_MIN, JOGL_GL2ES12_MAX, JOGL_GL2_MIN, JOGL_GL2_MAX.&lt;br /&gt;
Looks up the set of JAR files necessary to satisfy the chosen JOGL-PROFILE.&lt;br /&gt;
&lt;br /&gt;
This allows you to test a specific environment, ie ES2 without GL2 and AWT, using JOGL_ES2_MIN.&lt;br /&gt;
For this case I would recommend the native ES2 implementation from imageon SDK_OGLES2_LINUX_PCEMULATION_2.02.22.0756.&lt;br /&gt;
&lt;br /&gt;
== Bugreports &amp;amp; Testing ==&lt;br /&gt;
For all bug reports, please add the following information to&lt;br /&gt;
your bug report:&lt;br /&gt;
* [[#JOGL, Platform and OpenGL Version]]&lt;br /&gt;
* [[#Detailed Debug Log]]&lt;br /&gt;
* your email&lt;br /&gt;
&lt;br /&gt;
Please use one of the [{{SERVER}}/deployment/archive/master/?C=M;O=D latest aggregated archives],&lt;br /&gt;
as described in [[Downloading and installing JOGL#Downloading the latest aggregated autobuild|this section]].&lt;br /&gt;
&lt;br /&gt;
Using our [{{SERVER}}/bugzilla/ bug tracking system] is strongly recommended.&amp;lt;br&amp;gt;&lt;br /&gt;
We also have a [[SW Tracking|bug overview page]] available via this wiki.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please add all subsequent information as stated below to your bugreport&#039;&#039;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
otherwise we are not capable to hunt it down for you and us.&lt;br /&gt;
&lt;br /&gt;
=== JOGL, Platform and OpenGL Version ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]],&lt;br /&gt;
which provides the following information:&lt;br /&gt;
&lt;br /&gt;
* Platform&lt;br /&gt;
** OS &amp;amp; version&lt;br /&gt;
** Architecture&lt;br /&gt;
** OpenGL Version&lt;br /&gt;
** Java version (java -version)&lt;br /&gt;
* JOGL version&lt;br /&gt;
** GIT revision&lt;br /&gt;
** Autobuild version&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Debug Log ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test_dbg.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Bug Information ===&lt;br /&gt;
&lt;br /&gt;
* Your Test case&lt;br /&gt;
** Source code, [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;a junit test&amp;lt;/b&amp;gt;] would be best.&lt;br /&gt;
** Invocation command-line&lt;br /&gt;
** Exceptions, stdout/stderr log file&lt;br /&gt;
&lt;br /&gt;
==== Applications ====&lt;br /&gt;
&lt;br /&gt;
Adding a comprehensive [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;junit test&amp;lt;/b&amp;gt;] &lt;br /&gt;
would help us the most to reproduce the bug, to discuss it with you and to achieve a good response time.&amp;lt;br&amp;gt;&lt;br /&gt;
You may add it to your [{{SERVER}}/bugzilla/ bug report] directly or better, give us your [[How to Contribute|git repository pull request]].&lt;br /&gt;
&lt;br /&gt;
If possible, please add the following system properties to enable DEBUG logging:&lt;br /&gt;
&#039;&#039;-Dnewt.debug=all -Dnativewindow.debug=all -Djogl.debug=all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 java -Djava.awt.headless=true -Dnewt.debug=all -Dnativewindow.debug=all \&lt;br /&gt;
 -Djogl.debug=all demos.es2.RedSquare 2&amp;gt;&amp;amp;1 | tee RedSquare.report.log&lt;br /&gt;
&lt;br /&gt;
Attach the log file to your bug report ..&lt;br /&gt;
&lt;br /&gt;
==== Applets and Java Webstart ====&lt;br /&gt;
&lt;br /&gt;
To test &#039;&#039;applets&#039;&#039; and &#039;&#039;javaws&#039;&#039; use &lt;br /&gt;
* the jcontrol panel &lt;br /&gt;
* or edit the &#039;&#039;java properties file&#039;&#039;:&lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment.properties&#039;&#039;&lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\deployment.properties&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where you add the following JRE Arguments. The &#039;&#039;jnlp&#039;&#039; prefix supports the &#039;&#039;javaws&#039;&#039; launch method.&lt;br /&gt;
* jcontrol panel: &amp;lt;pre&amp;gt;-Djnlp.newt.debug=all -Djnlp.nativewindow.debug=all -Djnlp.jogl.debug=all&amp;lt;/pre&amp;gt; &lt;br /&gt;
* properties file: &amp;lt;pre&amp;gt;deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&amp;lt;/pre&amp;gt; Of course you have to add these arguments to all of your JRE lines, ie &#039;&#039;0&#039;&#039; and &#039;&#039;1&#039;&#039;, etc, if they exist.&lt;br /&gt;
&lt;br /&gt;
You also want to &lt;br /&gt;
* Enable logging/trace&lt;br /&gt;
* Show the console window, or just use the latest log files in &lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment/log/&#039;&#039;, or &lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\log\&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hence the &#039;&#039;java properties file&#039;&#039; (see location above) shall contain the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
deployment.log=true&lt;br /&gt;
deployment.trace=true&lt;br /&gt;
deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
deployment.javaws.jre.1.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Best practice:&lt;br /&gt;
* Close your browser and ensure no JVM is running anymore&lt;br /&gt;
* Delete all old log files in above log file folder&lt;br /&gt;
* Start browser and the test applet&lt;br /&gt;
* Close browser after test .. maybe after a while if you see nothing&lt;br /&gt;
* Attach all new generated *.trace files to your bug report ..&lt;br /&gt;
&lt;br /&gt;
== Get the Source Code ==&lt;br /&gt;
&lt;br /&gt;
Create a local copy/branch of a [[Jogamp SCM Repositories|git repository]]&lt;br /&gt;
either anonymous:&lt;br /&gt;
&lt;br /&gt;
* git clone git://github.com/sgothel/gluegen.git gluegen&lt;br /&gt;
* git clone git://github.com/sgothel/jogl.git jogl&lt;br /&gt;
* git clone git://github.com/sgothel/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
or via SSH and your user credential, so you can easily push back your&lt;br /&gt;
changes to the github server:&lt;br /&gt;
&lt;br /&gt;
* git clone git@github.com:username/gluegen.git gluegen&lt;br /&gt;
* git clone git@github.com:username/jogl.git jogl&lt;br /&gt;
* git clone git@github.com:username/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
== [http://jogamp.org/jogl/doc/HowToBuild.html How to build] ==&lt;br /&gt;
&lt;br /&gt;
== [[How to Contribute]] ==&lt;br /&gt;
&lt;br /&gt;
== Common Runtime Problems ==&lt;br /&gt;
&lt;br /&gt;
=== X11: OpenGL library is not picked up correctly,  no OpenGL available ===&lt;br /&gt;
&lt;br /&gt;
In case you are running a DRI machine, eg ATI&#039;s proprietary driver or &lt;br /&gt;
an open source one, you may need to ensure that the environment variable &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039;&lt;br /&gt;
is set properly.&lt;br /&gt;
&lt;br /&gt;
I ran into this while testing the 32bit builds on a 64bit machine&lt;br /&gt;
as a different user. Since &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039; is only setup for the desktop user&lt;br /&gt;
on Ubuntu, some &#039;&#039;/etc/X11/Xsession.d/&#039;&#039; script, I couldn&#039;t get a GL context to work.&lt;br /&gt;
&lt;br /&gt;
So I had to set mine to the value:&lt;br /&gt;
 export LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
[https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/250944 Ubuntu fglrx bug entry]&lt;br /&gt;
&lt;br /&gt;
== How to develop Cross-Device Applications ==&lt;br /&gt;
First you have to pick your lowest common denominator of an OpenGL profile, ie OpenGL ES1 or ES2.&lt;br /&gt;
For either we offer an intersecting desktop GL profile, GL2ES1 or GL2ES2.&lt;br /&gt;
Use the latter while creating your GLCapabilities.&lt;br /&gt;
Build and run your application with the minimum GL profile JARS, e.g. on the desktop use:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; . ./setenv-jogl.sh JOGL_GL2ES12_MIN ../jogl/build&lt;br /&gt;
&lt;br /&gt;
Here you are on a Unix platform (not Window) and your common build subdirectory is &#039;build&#039;.&lt;br /&gt;
&#039;&#039;jogl-demos/setenv-jogl.sh&#039;&#039; is provided within &#039;&#039;jogl-demos&#039;&#039;, which itself utilizes &#039;&#039;jogl/etc/profile.jogl&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL JARS:&lt;br /&gt;
* gluegen-rt.jar&lt;br /&gt;
* jogl-all.jar&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL atomic JARS for minimal deployment:&lt;br /&gt;
* gluegen-gl.jar&lt;br /&gt;
* nativewindow-core.jar&lt;br /&gt;
* jogl-core.jar&lt;br /&gt;
* jogl-util.jar&lt;br /&gt;
* jogl-util-fixedfuncemu.jar&lt;br /&gt;
* newt-core.jar&lt;br /&gt;
* newt-awt.jar&lt;br /&gt;
&lt;br /&gt;
Please check [http://jogamp.org/jogl/doc/deployment/JOGL-DEPLOYMENT.html JOGL Deployment] also.&lt;br /&gt;
&lt;br /&gt;
Now, the same Java application shall run on all devices, desktop and mobile.&lt;br /&gt;
See &#039;&#039;demos.es1.RedSquare&#039;&#039; of the &#039;&#039;jogl-demos&#039;&#039; repository.&lt;br /&gt;
&lt;br /&gt;
On the desktop you may run the ES1 demo:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; sh java-run-newt.sh demos.es1.RedSquare -GL2ES1&lt;br /&gt;
&lt;br /&gt;
and the output is:&lt;br /&gt;
 null RedSquare.run() 0&lt;br /&gt;
 User screen size 0x0&lt;br /&gt;
 Detected screen size 1920x1200&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] Entering initialization&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL Profile: GLProfile[GL2ES1/GL2ES12]&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL:com.sun.opengl.impl.gl2es12.GL2ES12Impl@b815859&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_VERSION=3.0.0 NVIDIA 185.18.14&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_EXTENSIONS: ..&lt;br /&gt;
&lt;br /&gt;
== Is my phone, embedded device or OpenGL ES driver supported by JogAmp? ==&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL ES Driver compatibility matrix]]&lt;br /&gt;
&lt;br /&gt;
== How to use JOGL in Applets ==&lt;br /&gt;
&lt;br /&gt;
See:&lt;br /&gt;
* [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NApplets JOGL Deployment as an NApplet]&lt;br /&gt;
&lt;br /&gt;
== What is &#039;&#039;Newt&#039;s&#039;&#039; Threading Model for native window events ? ==&lt;br /&gt;
As of today, Newt&#039;s default threading model to handle native events&lt;br /&gt;
is the event dispatch thread (EDT) model.&lt;br /&gt;
&lt;br /&gt;
Newt&#039;s EDT impl. creates one EDT per NEWT Display,&lt;br /&gt;
as the Display is a unique abstraction of a graphics device connection&lt;br /&gt;
serving all of it&#039;s Screens and Windows.&lt;br /&gt;
&lt;br /&gt;
EDT is being used to&lt;br /&gt;
* dispatch native Screen and Window events&lt;br /&gt;
* lifecycle Screen and Window functionality &lt;br /&gt;
** create / destroy&lt;br /&gt;
** reparenting&lt;br /&gt;
** native &amp;lt;i&amp;gt;repaint&amp;lt;/i&amp;gt; calls (if no &amp;lt;i&amp;gt;AnimatorControl&amp;lt;/i&amp;gt; is attached and animating)&lt;br /&gt;
** ..&lt;br /&gt;
&lt;br /&gt;
EDT is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; &lt;br /&gt;
* blocking your rendering with event dispatching,&lt;br /&gt;
* needed for pipelining your rendering commands,&lt;br /&gt;
* hence not hindering your high performance rendering in it&#039;s own thread, eg an &amp;lt;i&amp;gt;Animator&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using EDT is not mandatory, and you can turn it off in the NewtFactory,&lt;br /&gt;
and deal with the event dispatch manually.&lt;br /&gt;
&lt;br /&gt;
It&#039;s introduction was necessary to allow a &amp;lt;i&amp;gt;peace of mind&amp;lt;/i&amp;gt;,&lt;br /&gt;
high performance and reactive solution of the dispatch event problem.&lt;br /&gt;
Some OS, especially MS-Windows, require one to create the native Window&lt;br /&gt;
and dispatch it&#039;s events from the same native thread.&lt;br /&gt;
As it was easy to handle these requirements from a simple test application,&lt;br /&gt;
as it is difficult to solve this from a framework operating with multiple temporary threads,&lt;br /&gt;
a web browser for example.&lt;br /&gt;
&lt;br /&gt;
== How to use &#039;&#039;Newt&#039;&#039; with multiple Windows &amp;amp; Threads ==&lt;br /&gt;
Newt is capable of handling multiple threads and windows.&lt;br /&gt;
&lt;br /&gt;
For best performance, you may create one thread per window, if possible.&lt;br /&gt;
&lt;br /&gt;
Below you see the invocation of the ES2 RedSquare jogl-demos utilizing multiple threads.&lt;br /&gt;
&lt;br /&gt;
* Single thread (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single thread (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true com.sun.javafx.newt.util.MainThread demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The serialization of the main Java class through &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039;&lt;br /&gt;
may be used for all platforms, since it only takes effect on &#039;&#039;MacOSX&#039;&#039;.&lt;br /&gt;
This allows you an almost platform independent invocation of your multithreaded Java applications.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;MacOSX&#039;&#039;, &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039; will occupy the main thread and&lt;br /&gt;
serializes all native window related tasks through it.&lt;br /&gt;
This mechanism is thread safe utilizes reentrant locking.&lt;br /&gt;
&lt;br /&gt;
== Why using AWT for high performance is not a good idea ? ==&lt;br /&gt;
&lt;br /&gt;
AWT (on many implementations) holds the lock to the underlying native resources,&lt;br /&gt;
e.g. X11 display, screen and window surface, hence we have to obey these&lt;br /&gt;
locks for any GL action bound to such.&lt;br /&gt;
&lt;br /&gt;
This is still pretty standard matter as long these locks only have to be applied to&lt;br /&gt;
the actual resource in use.&lt;br /&gt;
&lt;br /&gt;
On AWT, it turns out that we have to use the global JAWT toolkit lock&lt;br /&gt;
for any native operation, ie OpenGL.&lt;br /&gt;
This might not be a problem for a single threaded GL application,&lt;br /&gt;
but if you start a multithreaded beast, you will recognize that it will&lt;br /&gt;
stumble around.&lt;br /&gt;
&lt;br /&gt;
You can verify this behavior with the ES1 RedSquare demo:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  java demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
      5s: 3379f, 675 fps, 1 ms/f; total: 5s, 675 fps, 1 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Even here you may experience some stuttering ..&lt;br /&gt;
&lt;br /&gt;
If you force disabling the toolkit lock:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     java -Dnativewindow.nolocking=true demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The demo may freeze forever .. due to native locking.&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2&lt;br /&gt;
      5s: 5958f, 1191 fps, 0 ms/f; total: 5s, 1191 fps, 0 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Runs much smoother .. without the stuttering locking experience ..&lt;br /&gt;
&lt;br /&gt;
This becomes much clearer with more threads:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java demos.es1.RedSquare -awt -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 772f, 151 fps, 6 ms/f; total: 5s, 151 fps, 6 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 1669f, 333 fps, 2 ms/f; total: 5s, 333 fps, 2 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why using Swing for high performance is not a good idea ? ==&lt;br /&gt;
First, all this inherents all arguments from &#039;&#039;&#039;Why using AWT for high performance is not a good idea ?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Second, it involves compositioning using different methods,&lt;br /&gt;
some may not be available on some platforms.&lt;br /&gt;
&lt;br /&gt;
From fast to slow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 1.) External Java2D&#039;s GLContext and FBO object. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on some platforms: Linux/Windows Sun&#039;s Java2D impl.&lt;br /&gt;
* Setup with System property &#039;sun.java2d.opengl&#039; to &#039;true&#039;.&lt;br /&gt;
* Renders directly into Java2D&#039;s FBO object, if available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 2.) Own PBuffer GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D implementation.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 3.) Own Pixmap GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff unlikely hw accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D impl.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
As you see, no straight forward HW rendering is involved,&lt;br /&gt;
assuming that even the windowing manager is using offscreen&lt;br /&gt;
surfaces - you would have 2 compositions here already.&lt;br /&gt;
&lt;br /&gt;
At least (1) would be &#039;acceptable&#039; here, if available,&lt;br /&gt;
but if only (2) is available - the performance would&lt;br /&gt;
not match the state of the art!&lt;br /&gt;
&lt;br /&gt;
Sure, it might be enough for some UIs or static pictures .. or so,&lt;br /&gt;
otherwise, I would prefer the &#039;overlay&#039; method, ie using a&lt;br /&gt;
GLCanvas within a Swing component, while no menu is being shown.&lt;br /&gt;
&lt;br /&gt;
However you do it .. the generic AWT &#039;restrictions&#039; apply here&lt;br /&gt;
as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using OpenGL without a visible component ==&lt;br /&gt;
Sometimes you might want to do OpenGL work without a visible GLDrawable or before making your drawable visible.&lt;br /&gt;
* http://jogamp.762907.n3.nabble.com/Binding-textures-without-showing-the-GLCanvas-tp960145p960234.html&lt;br /&gt;
&lt;br /&gt;
== Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline ==&lt;br /&gt;
&lt;br /&gt;
I see everyday A LOT of beginers who start with the old deprecated OpenGL. This is wrong, this is so wrong. [https://github.com/elect86/ I, personally,] went through this and today I realize I did it wrong and I wished someone could have told me that at the time I start.&lt;br /&gt;
&lt;br /&gt;
In order to say you why you should start right away learning modern OpenGL, I will use the words of [http://web.archive.org/web/20140207031129/http://www.arcsynthesis.org/gltut/About%20this%20Book.html Jason L. McKesson]:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Programmability. Virtually all of the aforementioned sources instruct beginners using something called “fixed functionality.” This represents configurations in older graphics processors that define how a particular rendering operation will proceed. It is generally considered easiest to teach neophyte graphics programmers using the fixed function pipeline.&lt;br /&gt;
&lt;br /&gt;
This is considered true because it is easy to get something to happen with fixed functionality. It&#039;s simpler to make pictures that look like something real. The fixed function pipeline is like training wheels for a bicycle.&lt;br /&gt;
&lt;br /&gt;
There are downsides to this approach. First, much of what is learned with this approach must be inevitably abandoned when the user encounters a graphics problem that must be solved with programmability. Programmability wipes out almost all of the fixed function pipeline, so the knowledge does not easily transfer.&lt;br /&gt;
&lt;br /&gt;
A more insidious problem is that the fixed function pipeline can give the &#039;&#039;illusion&#039;&#039; of knowledge. A user can think they understand what they are doing, but they&#039;re really just copy-and-pasting code around. Programming thus becomes akin to magical rituals: you put certain bits of code before other bits, and everything seems to work.&lt;br /&gt;
&lt;br /&gt;
This makes debugging nightmarish. Because the user never really understood what the code does, the user is unable to diagnose what a particular problem could possibly mean. And without that ability, debugging becomes a series of random guesses as to what the problem is.&lt;br /&gt;
&lt;br /&gt;
By contrast, you cannot use a programmable system successfully without first understanding it. Confronting programmable graphics hardware means confronting issues that fixed function materials often gloss over. This may mean a slower start overall, but when you finally get to the end, you truly &#039;&#039;know&#039;&#039; how everything works.&lt;br /&gt;
&lt;br /&gt;
Another problem is that, even if you truly understand the fixed function pipeline, it limits how you think about solving problems. Because of its inflexibility, it focuses your mind along certain problem solving possibilities and away from others. It encourages you to think of textures as pictures; vertex data as texture coordinates, colors, or positions; and the like. By its very nature, it limits creativity and problem solving.&lt;br /&gt;
&lt;br /&gt;
Lastly, even on mobile systems, fixed functionality is generally not available in the graphics hardware. Programmability is the order of the day for most graphics hardware, and this will only become more true in the future.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1836</id>
		<title>Jogl FAQ</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1836"/>
		<updated>2015-08-26T12:07:59Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: /* Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;JOGL FAQ&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Jogamp Versioning and Releases|Versioning and Releases]] ==&lt;br /&gt;
&lt;br /&gt;
== What are the Runtime OpenGL Version Requirements ? ==&lt;br /&gt;
The current JOGL2 spec is in WIP state, but mostly finished.&lt;br /&gt;
We do not require any extra features of GL versions &amp;gt; 1.1,&lt;br /&gt;
hence it shall just work.&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to&lt;br /&gt;
* support OpenGL platforms not supporting a version &amp;amp;gt; 1.2&lt;br /&gt;
* use GL &amp;amp;ge; 1.3 features optionally&lt;br /&gt;
Just query their availability e.g.:&lt;br /&gt;
 gl.isExtensionAvailable(&amp;quot;GL_VERSION_1_3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you call a &amp;amp;gt; 1.2 GL function where it is not available,&lt;br /&gt;
a GLException is thrown.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;JOGL requires at least an OpenGL version 1.1&#039;&#039;&#039;,&lt;br /&gt;
due to its dynamical function binding starting with OpenGL 1.2.&lt;br /&gt;
&lt;br /&gt;
== Use and test Autobuilds ==&lt;br /&gt;
&lt;br /&gt;
I like to summarize how to manually test the JOGL autobuilds, starting with 2010-11-10.&lt;br /&gt;
&lt;br /&gt;
You can fetch autobuilds from one the [[Jogamp Versioning and Releases#Autobuilds|autobuild folder]].&lt;br /&gt;
&lt;br /&gt;
=== Runtime Version Check ===&lt;br /&gt;
&lt;br /&gt;
The simplest verification of a JOGL build is to use the &lt;br /&gt;
[[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]]&lt;br /&gt;
and the [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
See [[#Bugreports &amp;amp; Testing]].&lt;br /&gt;
&lt;br /&gt;
=== JOGL Demos ===&lt;br /&gt;
&lt;br /&gt;
Let’s assume we are in the test directory ‘test’, from which we operate from this point.&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogl-demos.7z jogl-demos.7z]. Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogl-demos.7z&amp;lt;/pre&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z jogamp-all-platforms.7z].  Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogamp-all-platforms.7z&amp;lt;/pre&amp;gt;] Create a symbolic link or rename the archive directory from &#039;&#039;jogamp-all-platforms&#039;&#039; to &#039;&#039;jogl&#039;&#039;, ie &amp;lt;pre&amp;gt;ln -s jogamp-all-platforms jogl&amp;lt;/pre&amp;gt;.&lt;br /&gt;
* If you like to test the binding to NV’s Cg, [http://developer.nvidia.com/object/cg_download.html download and install]&lt;br /&gt;
&lt;br /&gt;
We assume java is in your binary search path.&lt;br /&gt;
&lt;br /&gt;
On X11/Unix and MaxOSX you can test the build as follows:&lt;br /&gt;
&lt;br /&gt;
 sh java-run-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-run.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 sh java-dbg-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-dbg.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
On Windows you shall be able to run:&lt;br /&gt;
&lt;br /&gt;
 java-win32.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 java-win32-dbg.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32-dbg.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
The windows scripts are pretty simple and flat.&lt;br /&gt;
&lt;br /&gt;
The magic unix scripts offer more features and can be used either in the autobuild environment or in your development one.&lt;br /&gt;
* &amp;lt;pre&amp;gt;setenv-jogl.sh &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looks up and invokes profile.jogl, finds gluegen, sets the environment variables (CLASSPATH, LD_LIBRARY_PATH &amp;amp; PATH).&lt;br /&gt;
* &amp;lt;pre&amp;gt;jogl/etc/profile.jogl &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
JOGL profiles are one of JOGL_ALL, JOGL_ES1_MIN, JOGL_ES1_MAX, JOGL_ES2_MIN, JOGL_ES2_MAX,&lt;br /&gt;
JOGL_GL2ES12_MIN, JOGL_GL2ES12_MAX, JOGL_GL2_MIN, JOGL_GL2_MAX.&lt;br /&gt;
Looks up the set of JAR files necessary to satisfy the chosen JOGL-PROFILE.&lt;br /&gt;
&lt;br /&gt;
This allows you to test a specific environment, ie ES2 without GL2 and AWT, using JOGL_ES2_MIN.&lt;br /&gt;
For this case I would recommend the native ES2 implementation from imageon SDK_OGLES2_LINUX_PCEMULATION_2.02.22.0756.&lt;br /&gt;
&lt;br /&gt;
== Bugreports &amp;amp; Testing ==&lt;br /&gt;
For all bug reports, please add the following information to&lt;br /&gt;
your bug report:&lt;br /&gt;
* [[#JOGL, Platform and OpenGL Version]]&lt;br /&gt;
* [[#Detailed Debug Log]]&lt;br /&gt;
* your email&lt;br /&gt;
&lt;br /&gt;
Please use one of the [{{SERVER}}/deployment/archive/master/?C=M;O=D latest aggregated archives],&lt;br /&gt;
as described in [[Downloading and installing JOGL#Downloading the latest aggregated autobuild|this section]].&lt;br /&gt;
&lt;br /&gt;
Using our [{{SERVER}}/bugzilla/ bug tracking system] is strongly recommended.&amp;lt;br&amp;gt;&lt;br /&gt;
We also have a [[SW Tracking|bug overview page]] available via this wiki.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please add all subsequent information as stated below to your bugreport&#039;&#039;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
otherwise we are not capable to hunt it down for you and us.&lt;br /&gt;
&lt;br /&gt;
=== JOGL, Platform and OpenGL Version ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]],&lt;br /&gt;
which provides the following information:&lt;br /&gt;
&lt;br /&gt;
* Platform&lt;br /&gt;
** OS &amp;amp; version&lt;br /&gt;
** Architecture&lt;br /&gt;
** OpenGL Version&lt;br /&gt;
** Java version (java -version)&lt;br /&gt;
* JOGL version&lt;br /&gt;
** GIT revision&lt;br /&gt;
** Autobuild version&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Debug Log ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test_dbg.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Bug Information ===&lt;br /&gt;
&lt;br /&gt;
* Your Test case&lt;br /&gt;
** Source code, [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;a junit test&amp;lt;/b&amp;gt;] would be best.&lt;br /&gt;
** Invocation command-line&lt;br /&gt;
** Exceptions, stdout/stderr log file&lt;br /&gt;
&lt;br /&gt;
==== Applications ====&lt;br /&gt;
&lt;br /&gt;
Adding a comprehensive [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;junit test&amp;lt;/b&amp;gt;] &lt;br /&gt;
would help us the most to reproduce the bug, to discuss it with you and to achieve a good response time.&amp;lt;br&amp;gt;&lt;br /&gt;
You may add it to your [{{SERVER}}/bugzilla/ bug report] directly or better, give us your [[How to Contribute|git repository pull request]].&lt;br /&gt;
&lt;br /&gt;
If possible, please add the following system properties to enable DEBUG logging:&lt;br /&gt;
&#039;&#039;-Dnewt.debug=all -Dnativewindow.debug=all -Djogl.debug=all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 java -Djava.awt.headless=true -Dnewt.debug=all -Dnativewindow.debug=all \&lt;br /&gt;
 -Djogl.debug=all demos.es2.RedSquare 2&amp;gt;&amp;amp;1 | tee RedSquare.report.log&lt;br /&gt;
&lt;br /&gt;
Attach the log file to your bug report ..&lt;br /&gt;
&lt;br /&gt;
==== Applets and Java Webstart ====&lt;br /&gt;
&lt;br /&gt;
To test &#039;&#039;applets&#039;&#039; and &#039;&#039;javaws&#039;&#039; use &lt;br /&gt;
* the jcontrol panel &lt;br /&gt;
* or edit the &#039;&#039;java properties file&#039;&#039;:&lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment.properties&#039;&#039;&lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\deployment.properties&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where you add the following JRE Arguments. The &#039;&#039;jnlp&#039;&#039; prefix supports the &#039;&#039;javaws&#039;&#039; launch method.&lt;br /&gt;
* jcontrol panel: &amp;lt;pre&amp;gt;-Djnlp.newt.debug=all -Djnlp.nativewindow.debug=all -Djnlp.jogl.debug=all&amp;lt;/pre&amp;gt; &lt;br /&gt;
* properties file: &amp;lt;pre&amp;gt;deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&amp;lt;/pre&amp;gt; Of course you have to add these arguments to all of your JRE lines, ie &#039;&#039;0&#039;&#039; and &#039;&#039;1&#039;&#039;, etc, if they exist.&lt;br /&gt;
&lt;br /&gt;
You also want to &lt;br /&gt;
* Enable logging/trace&lt;br /&gt;
* Show the console window, or just use the latest log files in &lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment/log/&#039;&#039;, or &lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\log\&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hence the &#039;&#039;java properties file&#039;&#039; (see location above) shall contain the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
deployment.log=true&lt;br /&gt;
deployment.trace=true&lt;br /&gt;
deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
deployment.javaws.jre.1.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Best practice:&lt;br /&gt;
* Close your browser and ensure no JVM is running anymore&lt;br /&gt;
* Delete all old log files in above log file folder&lt;br /&gt;
* Start browser and the test applet&lt;br /&gt;
* Close browser after test .. maybe after a while if you see nothing&lt;br /&gt;
* Attach all new generated *.trace files to your bug report ..&lt;br /&gt;
&lt;br /&gt;
== Get the Source Code ==&lt;br /&gt;
&lt;br /&gt;
Create a local copy/branch of a [[Jogamp SCM Repositories|git repository]]&lt;br /&gt;
either anonymous:&lt;br /&gt;
&lt;br /&gt;
* git clone git://github.com/sgothel/gluegen.git gluegen&lt;br /&gt;
* git clone git://github.com/sgothel/jogl.git jogl&lt;br /&gt;
* git clone git://github.com/sgothel/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
or via SSH and your user credential, so you can easily push back your&lt;br /&gt;
changes to the github server:&lt;br /&gt;
&lt;br /&gt;
* git clone git@github.com:username/gluegen.git gluegen&lt;br /&gt;
* git clone git@github.com:username/jogl.git jogl&lt;br /&gt;
* git clone git@github.com:username/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
== [http://jogamp.org/jogl/doc/HowToBuild.html How to build] ==&lt;br /&gt;
&lt;br /&gt;
== [[How to Contribute]] ==&lt;br /&gt;
&lt;br /&gt;
== Common Runtime Problems ==&lt;br /&gt;
&lt;br /&gt;
=== X11: OpenGL library is not picked up correctly,  no OpenGL available ===&lt;br /&gt;
&lt;br /&gt;
In case you are running a DRI machine, eg ATI&#039;s proprietary driver or &lt;br /&gt;
an open source one, you may need to ensure that the environment variable &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039;&lt;br /&gt;
is set properly.&lt;br /&gt;
&lt;br /&gt;
I ran into this while testing the 32bit builds on a 64bit machine&lt;br /&gt;
as a different user. Since &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039; is only setup for the desktop user&lt;br /&gt;
on Ubuntu, some &#039;&#039;/etc/X11/Xsession.d/&#039;&#039; script, I couldn&#039;t get a GL context to work.&lt;br /&gt;
&lt;br /&gt;
So I had to set mine to the value:&lt;br /&gt;
 export LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
[https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/250944 Ubuntu fglrx bug entry]&lt;br /&gt;
&lt;br /&gt;
== How to develop Cross-Device Applications ==&lt;br /&gt;
First you have to pick your lowest common denominator of an OpenGL profile, ie OpenGL ES1 or ES2.&lt;br /&gt;
For either we offer an intersecting desktop GL profile, GL2ES1 or GL2ES2.&lt;br /&gt;
Use the latter while creating your GLCapabilities.&lt;br /&gt;
Build and run your application with the minimum GL profile JARS, e.g. on the desktop use:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; . ./setenv-jogl.sh JOGL_GL2ES12_MIN ../jogl/build&lt;br /&gt;
&lt;br /&gt;
Here you are on a Unix platform (not Window) and your common build subdirectory is &#039;build&#039;.&lt;br /&gt;
&#039;&#039;jogl-demos/setenv-jogl.sh&#039;&#039; is provided within &#039;&#039;jogl-demos&#039;&#039;, which itself utilizes &#039;&#039;jogl/etc/profile.jogl&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL JARS:&lt;br /&gt;
* gluegen-rt.jar&lt;br /&gt;
* jogl-all.jar&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL atomic JARS for minimal deployment:&lt;br /&gt;
* gluegen-gl.jar&lt;br /&gt;
* nativewindow-core.jar&lt;br /&gt;
* jogl-core.jar&lt;br /&gt;
* jogl-util.jar&lt;br /&gt;
* jogl-util-fixedfuncemu.jar&lt;br /&gt;
* newt-core.jar&lt;br /&gt;
* newt-awt.jar&lt;br /&gt;
&lt;br /&gt;
Please check [http://jogamp.org/jogl/doc/deployment/JOGL-DEPLOYMENT.html JOGL Deployment] also.&lt;br /&gt;
&lt;br /&gt;
Now, the same Java application shall run on all devices, desktop and mobile.&lt;br /&gt;
See &#039;&#039;demos.es1.RedSquare&#039;&#039; of the &#039;&#039;jogl-demos&#039;&#039; repository.&lt;br /&gt;
&lt;br /&gt;
On the desktop you may run the ES1 demo:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; sh java-run-newt.sh demos.es1.RedSquare -GL2ES1&lt;br /&gt;
&lt;br /&gt;
and the output is:&lt;br /&gt;
 null RedSquare.run() 0&lt;br /&gt;
 User screen size 0x0&lt;br /&gt;
 Detected screen size 1920x1200&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] Entering initialization&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL Profile: GLProfile[GL2ES1/GL2ES12]&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL:com.sun.opengl.impl.gl2es12.GL2ES12Impl@b815859&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_VERSION=3.0.0 NVIDIA 185.18.14&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_EXTENSIONS: ..&lt;br /&gt;
&lt;br /&gt;
== Is my phone, embedded device or OpenGL ES driver supported by JogAmp? ==&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL ES Driver compatibility matrix]]&lt;br /&gt;
&lt;br /&gt;
== How to use JOGL in Applets ==&lt;br /&gt;
&lt;br /&gt;
See:&lt;br /&gt;
* [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NApplets JOGL Deployment as an NApplet]&lt;br /&gt;
&lt;br /&gt;
== What is &#039;&#039;Newt&#039;s&#039;&#039; Threading Model for native window events ? ==&lt;br /&gt;
As of today, Newt&#039;s default threading model to handle native events&lt;br /&gt;
is the event dispatch thread (EDT) model.&lt;br /&gt;
&lt;br /&gt;
Newt&#039;s EDT impl. creates one EDT per NEWT Display,&lt;br /&gt;
as the Display is a unique abstraction of a graphics device connection&lt;br /&gt;
serving all of it&#039;s Screens and Windows.&lt;br /&gt;
&lt;br /&gt;
EDT is being used to&lt;br /&gt;
* dispatch native Screen and Window events&lt;br /&gt;
* lifecycle Screen and Window functionality &lt;br /&gt;
** create / destroy&lt;br /&gt;
** reparenting&lt;br /&gt;
** native &amp;lt;i&amp;gt;repaint&amp;lt;/i&amp;gt; calls (if no &amp;lt;i&amp;gt;AnimatorControl&amp;lt;/i&amp;gt; is attached and animating)&lt;br /&gt;
** ..&lt;br /&gt;
&lt;br /&gt;
EDT is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; &lt;br /&gt;
* blocking your rendering with event dispatching,&lt;br /&gt;
* needed for pipelining your rendering commands,&lt;br /&gt;
* hence not hindering your high performance rendering in it&#039;s own thread, eg an &amp;lt;i&amp;gt;Animator&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using EDT is not mandatory, and you can turn it off in the NewtFactory,&lt;br /&gt;
and deal with the event dispatch manually.&lt;br /&gt;
&lt;br /&gt;
It&#039;s introduction was necessary to allow a &amp;lt;i&amp;gt;peace of mind&amp;lt;/i&amp;gt;,&lt;br /&gt;
high performance and reactive solution of the dispatch event problem.&lt;br /&gt;
Some OS, especially MS-Windows, require one to create the native Window&lt;br /&gt;
and dispatch it&#039;s events from the same native thread.&lt;br /&gt;
As it was easy to handle these requirements from a simple test application,&lt;br /&gt;
as it is difficult to solve this from a framework operating with multiple temporary threads,&lt;br /&gt;
a web browser for example.&lt;br /&gt;
&lt;br /&gt;
== How to use &#039;&#039;Newt&#039;&#039; with multiple Windows &amp;amp; Threads ==&lt;br /&gt;
Newt is capable of handling multiple threads and windows.&lt;br /&gt;
&lt;br /&gt;
For best performance, you may create one thread per window, if possible.&lt;br /&gt;
&lt;br /&gt;
Below you see the invocation of the ES2 RedSquare jogl-demos utilizing multiple threads.&lt;br /&gt;
&lt;br /&gt;
* Single thread (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single thread (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true com.sun.javafx.newt.util.MainThread demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The serialization of the main Java class through &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039;&lt;br /&gt;
may be used for all platforms, since it only takes effect on &#039;&#039;MacOSX&#039;&#039;.&lt;br /&gt;
This allows you an almost platform independent invocation of your multithreaded Java applications.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;MacOSX&#039;&#039;, &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039; will occupy the main thread and&lt;br /&gt;
serializes all native window related tasks through it.&lt;br /&gt;
This mechanism is thread safe utilizes reentrant locking.&lt;br /&gt;
&lt;br /&gt;
== Why using AWT for high performance is not a good idea ? ==&lt;br /&gt;
&lt;br /&gt;
AWT (on many implementations) holds the lock to the underlying native resources,&lt;br /&gt;
e.g. X11 display, screen and window surface, hence we have to obey these&lt;br /&gt;
locks for any GL action bound to such.&lt;br /&gt;
&lt;br /&gt;
This is still pretty standard matter as long these locks only have to be applied to&lt;br /&gt;
the actual resource in use.&lt;br /&gt;
&lt;br /&gt;
On AWT, it turns out that we have to use the global JAWT toolkit lock&lt;br /&gt;
for any native operation, ie OpenGL.&lt;br /&gt;
This might not be a problem for a single threaded GL application,&lt;br /&gt;
but if you start a multithreaded beast, you will recognize that it will&lt;br /&gt;
stumble around.&lt;br /&gt;
&lt;br /&gt;
You can verify this behavior with the ES1 RedSquare demo:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  java demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
      5s: 3379f, 675 fps, 1 ms/f; total: 5s, 675 fps, 1 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Even here you may experience some stuttering ..&lt;br /&gt;
&lt;br /&gt;
If you force disabling the toolkit lock:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     java -Dnativewindow.nolocking=true demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The demo may freeze forever .. due to native locking.&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2&lt;br /&gt;
      5s: 5958f, 1191 fps, 0 ms/f; total: 5s, 1191 fps, 0 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Runs much smoother .. without the stuttering locking experience ..&lt;br /&gt;
&lt;br /&gt;
This becomes much clearer with more threads:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java demos.es1.RedSquare -awt -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 772f, 151 fps, 6 ms/f; total: 5s, 151 fps, 6 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 1669f, 333 fps, 2 ms/f; total: 5s, 333 fps, 2 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why using Swing for high performance is not a good idea ? ==&lt;br /&gt;
First, all this inherents all arguments from &#039;&#039;&#039;Why using AWT for high performance is not a good idea ?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Second, it involves compositioning using different methods,&lt;br /&gt;
some may not be available on some platforms.&lt;br /&gt;
&lt;br /&gt;
From fast to slow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 1.) External Java2D&#039;s GLContext and FBO object. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on some platforms: Linux/Windows Sun&#039;s Java2D impl.&lt;br /&gt;
* Setup with System property &#039;sun.java2d.opengl&#039; to &#039;true&#039;.&lt;br /&gt;
* Renders directly into Java2D&#039;s FBO object, if available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 2.) Own PBuffer GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D implementation.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 3.) Own Pixmap GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff unlikely hw accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D impl.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
As you see, no straight forward HW rendering is involved,&lt;br /&gt;
assuming that even the windowing manager is using offscreen&lt;br /&gt;
surfaces - you would have 2 compositions here already.&lt;br /&gt;
&lt;br /&gt;
At least (1) would be &#039;acceptable&#039; here, if available,&lt;br /&gt;
but if only (2) is available - the performance would&lt;br /&gt;
not match the state of the art!&lt;br /&gt;
&lt;br /&gt;
Sure, it might be enough for some UIs or static pictures .. or so,&lt;br /&gt;
otherwise, I would prefer the &#039;overlay&#039; method, ie using a&lt;br /&gt;
GLCanvas within a Swing component, while no menu is being shown.&lt;br /&gt;
&lt;br /&gt;
However you do it .. the generic AWT &#039;restrictions&#039; apply here&lt;br /&gt;
as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using OpenGL without a visible component ==&lt;br /&gt;
Sometimes you might want to do OpenGL work without a visible GLDrawable or before making your drawable visible.&lt;br /&gt;
* http://jogamp.762907.n3.nabble.com/Binding-textures-without-showing-the-GLCanvas-tp960145p960234.html&lt;br /&gt;
&lt;br /&gt;
== Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline ==&lt;br /&gt;
&lt;br /&gt;
I see everyday A LOT of beginers who start with the old deprecated OpenGL. This is wrong, this is so wrong. [https://github.com/elect86/ I, personally,] went through this and today I realize I did it wrong and I wished someone could have told me that at the time I start.&lt;br /&gt;
&lt;br /&gt;
In order to say you why you should start right away learning modern OpenGL, I will use the words of [http://web.archive.org/web/20140207031129/http://www.arcsynthesis.org/gltut/About%20this%20Book.html Jason L. McKesson]:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&#039;&#039;&#039;Programmability. Virtually all of the aforementioned sources instruct beginners using something called “fixed functionality.” This represents configurations in older graphics processors that define how a particular rendering operation will proceed. It is generally considered easiest to teach neophyte graphics programmers using the fixed function pipeline.&lt;br /&gt;
&lt;br /&gt;
This is considered true because it is easy to get something to happen with fixed functionality. It&#039;s simpler to make pictures that look like something real. The fixed function pipeline is like training wheels for a bicycle.&lt;br /&gt;
&lt;br /&gt;
There are downsides to this approach. First, much of what is learned with this approach must be inevitably abandoned when the user encounters a graphics problem that must be solved with programmability. Programmability wipes out almost all of the fixed function pipeline, so the knowledge does not easily transfer.&lt;br /&gt;
&lt;br /&gt;
A more insidious problem is that the fixed function pipeline can give the &#039;&#039;illusion&#039;&#039; of knowledge. A user can think they understand what they are doing, but they&#039;re really just copy-and-pasting code around. Programming thus becomes akin to magical rituals: you put certain bits of code before other bits, and everything seems to work.&lt;br /&gt;
&lt;br /&gt;
This makes debugging nightmarish. Because the user never really understood what the code does, the user is unable to diagnose what a particular problem could possibly mean. And without that ability, debugging becomes a series of random guesses as to what the problem is.&lt;br /&gt;
&lt;br /&gt;
By contrast, you cannot use a programmable system successfully without first understanding it. Confronting programmable graphics hardware means confronting issues that fixed function materials often gloss over. This may mean a slower start overall, but when you finally get to the end, you truly &#039;&#039;know&#039;&#039; how everything works.&lt;br /&gt;
&lt;br /&gt;
Another problem is that, even if you truly understand the fixed function pipeline, it limits how you think about solving problems. Because of its inflexibility, it focuses your mind along certain problem solving possibilities and away from others. It encourages you to think of textures as pictures; vertex data as texture coordinates, colors, or positions; and the like. By its very nature, it limits creativity and problem solving.&lt;br /&gt;
&lt;br /&gt;
Lastly, even on mobile systems, fixed functionality is generally not available in the graphics hardware. Programmability is the order of the day for most graphics hardware, and this will only become more true in the future.&#039;&#039;&#039;&amp;quot;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1835</id>
		<title>Jogl FAQ</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1835"/>
		<updated>2015-08-26T12:06:09Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: /* Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;JOGL FAQ&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Jogamp Versioning and Releases|Versioning and Releases]] ==&lt;br /&gt;
&lt;br /&gt;
== What are the Runtime OpenGL Version Requirements ? ==&lt;br /&gt;
The current JOGL2 spec is in WIP state, but mostly finished.&lt;br /&gt;
We do not require any extra features of GL versions &amp;gt; 1.1,&lt;br /&gt;
hence it shall just work.&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to&lt;br /&gt;
* support OpenGL platforms not supporting a version &amp;amp;gt; 1.2&lt;br /&gt;
* use GL &amp;amp;ge; 1.3 features optionally&lt;br /&gt;
Just query their availability e.g.:&lt;br /&gt;
 gl.isExtensionAvailable(&amp;quot;GL_VERSION_1_3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you call a &amp;amp;gt; 1.2 GL function where it is not available,&lt;br /&gt;
a GLException is thrown.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;JOGL requires at least an OpenGL version 1.1&#039;&#039;&#039;,&lt;br /&gt;
due to its dynamical function binding starting with OpenGL 1.2.&lt;br /&gt;
&lt;br /&gt;
== Use and test Autobuilds ==&lt;br /&gt;
&lt;br /&gt;
I like to summarize how to manually test the JOGL autobuilds, starting with 2010-11-10.&lt;br /&gt;
&lt;br /&gt;
You can fetch autobuilds from one the [[Jogamp Versioning and Releases#Autobuilds|autobuild folder]].&lt;br /&gt;
&lt;br /&gt;
=== Runtime Version Check ===&lt;br /&gt;
&lt;br /&gt;
The simplest verification of a JOGL build is to use the &lt;br /&gt;
[[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]]&lt;br /&gt;
and the [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
See [[#Bugreports &amp;amp; Testing]].&lt;br /&gt;
&lt;br /&gt;
=== JOGL Demos ===&lt;br /&gt;
&lt;br /&gt;
Let’s assume we are in the test directory ‘test’, from which we operate from this point.&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogl-demos.7z jogl-demos.7z]. Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogl-demos.7z&amp;lt;/pre&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z jogamp-all-platforms.7z].  Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogamp-all-platforms.7z&amp;lt;/pre&amp;gt;] Create a symbolic link or rename the archive directory from &#039;&#039;jogamp-all-platforms&#039;&#039; to &#039;&#039;jogl&#039;&#039;, ie &amp;lt;pre&amp;gt;ln -s jogamp-all-platforms jogl&amp;lt;/pre&amp;gt;.&lt;br /&gt;
* If you like to test the binding to NV’s Cg, [http://developer.nvidia.com/object/cg_download.html download and install]&lt;br /&gt;
&lt;br /&gt;
We assume java is in your binary search path.&lt;br /&gt;
&lt;br /&gt;
On X11/Unix and MaxOSX you can test the build as follows:&lt;br /&gt;
&lt;br /&gt;
 sh java-run-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-run.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 sh java-dbg-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-dbg.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
On Windows you shall be able to run:&lt;br /&gt;
&lt;br /&gt;
 java-win32.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 java-win32-dbg.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32-dbg.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
The windows scripts are pretty simple and flat.&lt;br /&gt;
&lt;br /&gt;
The magic unix scripts offer more features and can be used either in the autobuild environment or in your development one.&lt;br /&gt;
* &amp;lt;pre&amp;gt;setenv-jogl.sh &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looks up and invokes profile.jogl, finds gluegen, sets the environment variables (CLASSPATH, LD_LIBRARY_PATH &amp;amp; PATH).&lt;br /&gt;
* &amp;lt;pre&amp;gt;jogl/etc/profile.jogl &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
JOGL profiles are one of JOGL_ALL, JOGL_ES1_MIN, JOGL_ES1_MAX, JOGL_ES2_MIN, JOGL_ES2_MAX,&lt;br /&gt;
JOGL_GL2ES12_MIN, JOGL_GL2ES12_MAX, JOGL_GL2_MIN, JOGL_GL2_MAX.&lt;br /&gt;
Looks up the set of JAR files necessary to satisfy the chosen JOGL-PROFILE.&lt;br /&gt;
&lt;br /&gt;
This allows you to test a specific environment, ie ES2 without GL2 and AWT, using JOGL_ES2_MIN.&lt;br /&gt;
For this case I would recommend the native ES2 implementation from imageon SDK_OGLES2_LINUX_PCEMULATION_2.02.22.0756.&lt;br /&gt;
&lt;br /&gt;
== Bugreports &amp;amp; Testing ==&lt;br /&gt;
For all bug reports, please add the following information to&lt;br /&gt;
your bug report:&lt;br /&gt;
* [[#JOGL, Platform and OpenGL Version]]&lt;br /&gt;
* [[#Detailed Debug Log]]&lt;br /&gt;
* your email&lt;br /&gt;
&lt;br /&gt;
Please use one of the [{{SERVER}}/deployment/archive/master/?C=M;O=D latest aggregated archives],&lt;br /&gt;
as described in [[Downloading and installing JOGL#Downloading the latest aggregated autobuild|this section]].&lt;br /&gt;
&lt;br /&gt;
Using our [{{SERVER}}/bugzilla/ bug tracking system] is strongly recommended.&amp;lt;br&amp;gt;&lt;br /&gt;
We also have a [[SW Tracking|bug overview page]] available via this wiki.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please add all subsequent information as stated below to your bugreport&#039;&#039;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
otherwise we are not capable to hunt it down for you and us.&lt;br /&gt;
&lt;br /&gt;
=== JOGL, Platform and OpenGL Version ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]],&lt;br /&gt;
which provides the following information:&lt;br /&gt;
&lt;br /&gt;
* Platform&lt;br /&gt;
** OS &amp;amp; version&lt;br /&gt;
** Architecture&lt;br /&gt;
** OpenGL Version&lt;br /&gt;
** Java version (java -version)&lt;br /&gt;
* JOGL version&lt;br /&gt;
** GIT revision&lt;br /&gt;
** Autobuild version&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Debug Log ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test_dbg.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Bug Information ===&lt;br /&gt;
&lt;br /&gt;
* Your Test case&lt;br /&gt;
** Source code, [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;a junit test&amp;lt;/b&amp;gt;] would be best.&lt;br /&gt;
** Invocation command-line&lt;br /&gt;
** Exceptions, stdout/stderr log file&lt;br /&gt;
&lt;br /&gt;
==== Applications ====&lt;br /&gt;
&lt;br /&gt;
Adding a comprehensive [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;junit test&amp;lt;/b&amp;gt;] &lt;br /&gt;
would help us the most to reproduce the bug, to discuss it with you and to achieve a good response time.&amp;lt;br&amp;gt;&lt;br /&gt;
You may add it to your [{{SERVER}}/bugzilla/ bug report] directly or better, give us your [[How to Contribute|git repository pull request]].&lt;br /&gt;
&lt;br /&gt;
If possible, please add the following system properties to enable DEBUG logging:&lt;br /&gt;
&#039;&#039;-Dnewt.debug=all -Dnativewindow.debug=all -Djogl.debug=all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 java -Djava.awt.headless=true -Dnewt.debug=all -Dnativewindow.debug=all \&lt;br /&gt;
 -Djogl.debug=all demos.es2.RedSquare 2&amp;gt;&amp;amp;1 | tee RedSquare.report.log&lt;br /&gt;
&lt;br /&gt;
Attach the log file to your bug report ..&lt;br /&gt;
&lt;br /&gt;
==== Applets and Java Webstart ====&lt;br /&gt;
&lt;br /&gt;
To test &#039;&#039;applets&#039;&#039; and &#039;&#039;javaws&#039;&#039; use &lt;br /&gt;
* the jcontrol panel &lt;br /&gt;
* or edit the &#039;&#039;java properties file&#039;&#039;:&lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment.properties&#039;&#039;&lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\deployment.properties&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where you add the following JRE Arguments. The &#039;&#039;jnlp&#039;&#039; prefix supports the &#039;&#039;javaws&#039;&#039; launch method.&lt;br /&gt;
* jcontrol panel: &amp;lt;pre&amp;gt;-Djnlp.newt.debug=all -Djnlp.nativewindow.debug=all -Djnlp.jogl.debug=all&amp;lt;/pre&amp;gt; &lt;br /&gt;
* properties file: &amp;lt;pre&amp;gt;deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&amp;lt;/pre&amp;gt; Of course you have to add these arguments to all of your JRE lines, ie &#039;&#039;0&#039;&#039; and &#039;&#039;1&#039;&#039;, etc, if they exist.&lt;br /&gt;
&lt;br /&gt;
You also want to &lt;br /&gt;
* Enable logging/trace&lt;br /&gt;
* Show the console window, or just use the latest log files in &lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment/log/&#039;&#039;, or &lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\log\&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hence the &#039;&#039;java properties file&#039;&#039; (see location above) shall contain the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
deployment.log=true&lt;br /&gt;
deployment.trace=true&lt;br /&gt;
deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
deployment.javaws.jre.1.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Best practice:&lt;br /&gt;
* Close your browser and ensure no JVM is running anymore&lt;br /&gt;
* Delete all old log files in above log file folder&lt;br /&gt;
* Start browser and the test applet&lt;br /&gt;
* Close browser after test .. maybe after a while if you see nothing&lt;br /&gt;
* Attach all new generated *.trace files to your bug report ..&lt;br /&gt;
&lt;br /&gt;
== Get the Source Code ==&lt;br /&gt;
&lt;br /&gt;
Create a local copy/branch of a [[Jogamp SCM Repositories|git repository]]&lt;br /&gt;
either anonymous:&lt;br /&gt;
&lt;br /&gt;
* git clone git://github.com/sgothel/gluegen.git gluegen&lt;br /&gt;
* git clone git://github.com/sgothel/jogl.git jogl&lt;br /&gt;
* git clone git://github.com/sgothel/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
or via SSH and your user credential, so you can easily push back your&lt;br /&gt;
changes to the github server:&lt;br /&gt;
&lt;br /&gt;
* git clone git@github.com:username/gluegen.git gluegen&lt;br /&gt;
* git clone git@github.com:username/jogl.git jogl&lt;br /&gt;
* git clone git@github.com:username/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
== [http://jogamp.org/jogl/doc/HowToBuild.html How to build] ==&lt;br /&gt;
&lt;br /&gt;
== [[How to Contribute]] ==&lt;br /&gt;
&lt;br /&gt;
== Common Runtime Problems ==&lt;br /&gt;
&lt;br /&gt;
=== X11: OpenGL library is not picked up correctly,  no OpenGL available ===&lt;br /&gt;
&lt;br /&gt;
In case you are running a DRI machine, eg ATI&#039;s proprietary driver or &lt;br /&gt;
an open source one, you may need to ensure that the environment variable &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039;&lt;br /&gt;
is set properly.&lt;br /&gt;
&lt;br /&gt;
I ran into this while testing the 32bit builds on a 64bit machine&lt;br /&gt;
as a different user. Since &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039; is only setup for the desktop user&lt;br /&gt;
on Ubuntu, some &#039;&#039;/etc/X11/Xsession.d/&#039;&#039; script, I couldn&#039;t get a GL context to work.&lt;br /&gt;
&lt;br /&gt;
So I had to set mine to the value:&lt;br /&gt;
 export LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
[https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/250944 Ubuntu fglrx bug entry]&lt;br /&gt;
&lt;br /&gt;
== How to develop Cross-Device Applications ==&lt;br /&gt;
First you have to pick your lowest common denominator of an OpenGL profile, ie OpenGL ES1 or ES2.&lt;br /&gt;
For either we offer an intersecting desktop GL profile, GL2ES1 or GL2ES2.&lt;br /&gt;
Use the latter while creating your GLCapabilities.&lt;br /&gt;
Build and run your application with the minimum GL profile JARS, e.g. on the desktop use:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; . ./setenv-jogl.sh JOGL_GL2ES12_MIN ../jogl/build&lt;br /&gt;
&lt;br /&gt;
Here you are on a Unix platform (not Window) and your common build subdirectory is &#039;build&#039;.&lt;br /&gt;
&#039;&#039;jogl-demos/setenv-jogl.sh&#039;&#039; is provided within &#039;&#039;jogl-demos&#039;&#039;, which itself utilizes &#039;&#039;jogl/etc/profile.jogl&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL JARS:&lt;br /&gt;
* gluegen-rt.jar&lt;br /&gt;
* jogl-all.jar&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL atomic JARS for minimal deployment:&lt;br /&gt;
* gluegen-gl.jar&lt;br /&gt;
* nativewindow-core.jar&lt;br /&gt;
* jogl-core.jar&lt;br /&gt;
* jogl-util.jar&lt;br /&gt;
* jogl-util-fixedfuncemu.jar&lt;br /&gt;
* newt-core.jar&lt;br /&gt;
* newt-awt.jar&lt;br /&gt;
&lt;br /&gt;
Please check [http://jogamp.org/jogl/doc/deployment/JOGL-DEPLOYMENT.html JOGL Deployment] also.&lt;br /&gt;
&lt;br /&gt;
Now, the same Java application shall run on all devices, desktop and mobile.&lt;br /&gt;
See &#039;&#039;demos.es1.RedSquare&#039;&#039; of the &#039;&#039;jogl-demos&#039;&#039; repository.&lt;br /&gt;
&lt;br /&gt;
On the desktop you may run the ES1 demo:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; sh java-run-newt.sh demos.es1.RedSquare -GL2ES1&lt;br /&gt;
&lt;br /&gt;
and the output is:&lt;br /&gt;
 null RedSquare.run() 0&lt;br /&gt;
 User screen size 0x0&lt;br /&gt;
 Detected screen size 1920x1200&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] Entering initialization&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL Profile: GLProfile[GL2ES1/GL2ES12]&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL:com.sun.opengl.impl.gl2es12.GL2ES12Impl@b815859&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_VERSION=3.0.0 NVIDIA 185.18.14&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_EXTENSIONS: ..&lt;br /&gt;
&lt;br /&gt;
== Is my phone, embedded device or OpenGL ES driver supported by JogAmp? ==&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL ES Driver compatibility matrix]]&lt;br /&gt;
&lt;br /&gt;
== How to use JOGL in Applets ==&lt;br /&gt;
&lt;br /&gt;
See:&lt;br /&gt;
* [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NApplets JOGL Deployment as an NApplet]&lt;br /&gt;
&lt;br /&gt;
== What is &#039;&#039;Newt&#039;s&#039;&#039; Threading Model for native window events ? ==&lt;br /&gt;
As of today, Newt&#039;s default threading model to handle native events&lt;br /&gt;
is the event dispatch thread (EDT) model.&lt;br /&gt;
&lt;br /&gt;
Newt&#039;s EDT impl. creates one EDT per NEWT Display,&lt;br /&gt;
as the Display is a unique abstraction of a graphics device connection&lt;br /&gt;
serving all of it&#039;s Screens and Windows.&lt;br /&gt;
&lt;br /&gt;
EDT is being used to&lt;br /&gt;
* dispatch native Screen and Window events&lt;br /&gt;
* lifecycle Screen and Window functionality &lt;br /&gt;
** create / destroy&lt;br /&gt;
** reparenting&lt;br /&gt;
** native &amp;lt;i&amp;gt;repaint&amp;lt;/i&amp;gt; calls (if no &amp;lt;i&amp;gt;AnimatorControl&amp;lt;/i&amp;gt; is attached and animating)&lt;br /&gt;
** ..&lt;br /&gt;
&lt;br /&gt;
EDT is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; &lt;br /&gt;
* blocking your rendering with event dispatching,&lt;br /&gt;
* needed for pipelining your rendering commands,&lt;br /&gt;
* hence not hindering your high performance rendering in it&#039;s own thread, eg an &amp;lt;i&amp;gt;Animator&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using EDT is not mandatory, and you can turn it off in the NewtFactory,&lt;br /&gt;
and deal with the event dispatch manually.&lt;br /&gt;
&lt;br /&gt;
It&#039;s introduction was necessary to allow a &amp;lt;i&amp;gt;peace of mind&amp;lt;/i&amp;gt;,&lt;br /&gt;
high performance and reactive solution of the dispatch event problem.&lt;br /&gt;
Some OS, especially MS-Windows, require one to create the native Window&lt;br /&gt;
and dispatch it&#039;s events from the same native thread.&lt;br /&gt;
As it was easy to handle these requirements from a simple test application,&lt;br /&gt;
as it is difficult to solve this from a framework operating with multiple temporary threads,&lt;br /&gt;
a web browser for example.&lt;br /&gt;
&lt;br /&gt;
== How to use &#039;&#039;Newt&#039;&#039; with multiple Windows &amp;amp; Threads ==&lt;br /&gt;
Newt is capable of handling multiple threads and windows.&lt;br /&gt;
&lt;br /&gt;
For best performance, you may create one thread per window, if possible.&lt;br /&gt;
&lt;br /&gt;
Below you see the invocation of the ES2 RedSquare jogl-demos utilizing multiple threads.&lt;br /&gt;
&lt;br /&gt;
* Single thread (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single thread (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true com.sun.javafx.newt.util.MainThread demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The serialization of the main Java class through &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039;&lt;br /&gt;
may be used for all platforms, since it only takes effect on &#039;&#039;MacOSX&#039;&#039;.&lt;br /&gt;
This allows you an almost platform independent invocation of your multithreaded Java applications.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;MacOSX&#039;&#039;, &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039; will occupy the main thread and&lt;br /&gt;
serializes all native window related tasks through it.&lt;br /&gt;
This mechanism is thread safe utilizes reentrant locking.&lt;br /&gt;
&lt;br /&gt;
== Why using AWT for high performance is not a good idea ? ==&lt;br /&gt;
&lt;br /&gt;
AWT (on many implementations) holds the lock to the underlying native resources,&lt;br /&gt;
e.g. X11 display, screen and window surface, hence we have to obey these&lt;br /&gt;
locks for any GL action bound to such.&lt;br /&gt;
&lt;br /&gt;
This is still pretty standard matter as long these locks only have to be applied to&lt;br /&gt;
the actual resource in use.&lt;br /&gt;
&lt;br /&gt;
On AWT, it turns out that we have to use the global JAWT toolkit lock&lt;br /&gt;
for any native operation, ie OpenGL.&lt;br /&gt;
This might not be a problem for a single threaded GL application,&lt;br /&gt;
but if you start a multithreaded beast, you will recognize that it will&lt;br /&gt;
stumble around.&lt;br /&gt;
&lt;br /&gt;
You can verify this behavior with the ES1 RedSquare demo:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  java demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
      5s: 3379f, 675 fps, 1 ms/f; total: 5s, 675 fps, 1 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Even here you may experience some stuttering ..&lt;br /&gt;
&lt;br /&gt;
If you force disabling the toolkit lock:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     java -Dnativewindow.nolocking=true demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The demo may freeze forever .. due to native locking.&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2&lt;br /&gt;
      5s: 5958f, 1191 fps, 0 ms/f; total: 5s, 1191 fps, 0 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Runs much smoother .. without the stuttering locking experience ..&lt;br /&gt;
&lt;br /&gt;
This becomes much clearer with more threads:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java demos.es1.RedSquare -awt -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 772f, 151 fps, 6 ms/f; total: 5s, 151 fps, 6 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 1669f, 333 fps, 2 ms/f; total: 5s, 333 fps, 2 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why using Swing for high performance is not a good idea ? ==&lt;br /&gt;
First, all this inherents all arguments from &#039;&#039;&#039;Why using AWT for high performance is not a good idea ?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Second, it involves compositioning using different methods,&lt;br /&gt;
some may not be available on some platforms.&lt;br /&gt;
&lt;br /&gt;
From fast to slow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 1.) External Java2D&#039;s GLContext and FBO object. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on some platforms: Linux/Windows Sun&#039;s Java2D impl.&lt;br /&gt;
* Setup with System property &#039;sun.java2d.opengl&#039; to &#039;true&#039;.&lt;br /&gt;
* Renders directly into Java2D&#039;s FBO object, if available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 2.) Own PBuffer GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D implementation.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 3.) Own Pixmap GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff unlikely hw accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D impl.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
As you see, no straight forward HW rendering is involved,&lt;br /&gt;
assuming that even the windowing manager is using offscreen&lt;br /&gt;
surfaces - you would have 2 compositions here already.&lt;br /&gt;
&lt;br /&gt;
At least (1) would be &#039;acceptable&#039; here, if available,&lt;br /&gt;
but if only (2) is available - the performance would&lt;br /&gt;
not match the state of the art!&lt;br /&gt;
&lt;br /&gt;
Sure, it might be enough for some UIs or static pictures .. or so,&lt;br /&gt;
otherwise, I would prefer the &#039;overlay&#039; method, ie using a&lt;br /&gt;
GLCanvas within a Swing component, while no menu is being shown.&lt;br /&gt;
&lt;br /&gt;
However you do it .. the generic AWT &#039;restrictions&#039; apply here&lt;br /&gt;
as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using OpenGL without a visible component ==&lt;br /&gt;
Sometimes you might want to do OpenGL work without a visible GLDrawable or before making your drawable visible.&lt;br /&gt;
* http://jogamp.762907.n3.nabble.com/Binding-textures-without-showing-the-GLCanvas-tp960145p960234.html&lt;br /&gt;
&lt;br /&gt;
== Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline ==&lt;br /&gt;
&lt;br /&gt;
I see everyday A LOT of beginers who start with the old deprecated OpenGL. This is wrong, this is so wrong. [https://github.com/elect86/ I, personally,] went through this and today I realize I did it wrong and I wished someone could have told me that at the time I start.&lt;br /&gt;
&lt;br /&gt;
In order to say you why you should start right away learning modern OpenGL, I will use the words of [http://web.archive.org/web/20140207031129/http://www.arcsynthesis.org/gltut/About%20this%20Book.html Jason L. McKesson]:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Programmability. Virtually all of the aforementioned sources instruct beginners using something called “fixed functionality.” This represents configurations in older graphics processors that define how a particular rendering operation will proceed. It is generally considered easiest to teach neophyte graphics programmers using the fixed function pipeline.&lt;br /&gt;
&lt;br /&gt;
This is considered true because it is easy to get something to happen with fixed functionality. It&#039;s simpler to make pictures that look like something real. The fixed function pipeline is like training wheels for a bicycle.&lt;br /&gt;
&lt;br /&gt;
There are downsides to this approach. First, much of what is learned with this approach must be inevitably abandoned when the user encounters a graphics problem that must be solved with programmability. Programmability wipes out almost all of the fixed function pipeline, so the knowledge does not easily transfer.&lt;br /&gt;
&lt;br /&gt;
A more insidious problem is that the fixed function pipeline can give the &#039;&#039;illusion&#039;&#039; of knowledge. A user can think they understand what they are doing, but they&#039;re really just copy-and-pasting code around. Programming thus becomes akin to magical rituals: you put certain bits of code before other bits, and everything seems to work.&lt;br /&gt;
&lt;br /&gt;
This makes debugging nightmarish. Because the user never really understood what the code does, the user is unable to diagnose what a particular problem could possibly mean. And without that ability, debugging becomes a series of random guesses as to what the problem is.&lt;br /&gt;
&lt;br /&gt;
By contrast, you cannot use a programmable system successfully without first understanding it. Confronting programmable graphics hardware means confronting issues that fixed function materials often gloss over. This may mean a slower start overall, but when you finally get to the end, you truly &#039;&#039;know&#039;&#039; how everything works.&lt;br /&gt;
&lt;br /&gt;
Another problem is that, even if you truly understand the fixed function pipeline, it limits how you think about solving problems. Because of its inflexibility, it focuses your mind along certain problem solving possibilities and away from others. It encourages you to think of textures as pictures; vertex data as texture coordinates, colors, or positions; and the like. By its very nature, it limits creativity and problem solving.&lt;br /&gt;
&lt;br /&gt;
Lastly, even on mobile systems, fixed functionality is generally not available in the graphics hardware. Programmability is the order of the day for most graphics hardware, and this will only become more true in the future.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1834</id>
		<title>Jogl FAQ</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1834"/>
		<updated>2015-08-26T12:05:34Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: /* Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;JOGL FAQ&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Jogamp Versioning and Releases|Versioning and Releases]] ==&lt;br /&gt;
&lt;br /&gt;
== What are the Runtime OpenGL Version Requirements ? ==&lt;br /&gt;
The current JOGL2 spec is in WIP state, but mostly finished.&lt;br /&gt;
We do not require any extra features of GL versions &amp;gt; 1.1,&lt;br /&gt;
hence it shall just work.&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to&lt;br /&gt;
* support OpenGL platforms not supporting a version &amp;amp;gt; 1.2&lt;br /&gt;
* use GL &amp;amp;ge; 1.3 features optionally&lt;br /&gt;
Just query their availability e.g.:&lt;br /&gt;
 gl.isExtensionAvailable(&amp;quot;GL_VERSION_1_3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you call a &amp;amp;gt; 1.2 GL function where it is not available,&lt;br /&gt;
a GLException is thrown.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;JOGL requires at least an OpenGL version 1.1&#039;&#039;&#039;,&lt;br /&gt;
due to its dynamical function binding starting with OpenGL 1.2.&lt;br /&gt;
&lt;br /&gt;
== Use and test Autobuilds ==&lt;br /&gt;
&lt;br /&gt;
I like to summarize how to manually test the JOGL autobuilds, starting with 2010-11-10.&lt;br /&gt;
&lt;br /&gt;
You can fetch autobuilds from one the [[Jogamp Versioning and Releases#Autobuilds|autobuild folder]].&lt;br /&gt;
&lt;br /&gt;
=== Runtime Version Check ===&lt;br /&gt;
&lt;br /&gt;
The simplest verification of a JOGL build is to use the &lt;br /&gt;
[[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]]&lt;br /&gt;
and the [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
See [[#Bugreports &amp;amp; Testing]].&lt;br /&gt;
&lt;br /&gt;
=== JOGL Demos ===&lt;br /&gt;
&lt;br /&gt;
Let’s assume we are in the test directory ‘test’, from which we operate from this point.&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogl-demos.7z jogl-demos.7z]. Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogl-demos.7z&amp;lt;/pre&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z jogamp-all-platforms.7z].  Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogamp-all-platforms.7z&amp;lt;/pre&amp;gt;] Create a symbolic link or rename the archive directory from &#039;&#039;jogamp-all-platforms&#039;&#039; to &#039;&#039;jogl&#039;&#039;, ie &amp;lt;pre&amp;gt;ln -s jogamp-all-platforms jogl&amp;lt;/pre&amp;gt;.&lt;br /&gt;
* If you like to test the binding to NV’s Cg, [http://developer.nvidia.com/object/cg_download.html download and install]&lt;br /&gt;
&lt;br /&gt;
We assume java is in your binary search path.&lt;br /&gt;
&lt;br /&gt;
On X11/Unix and MaxOSX you can test the build as follows:&lt;br /&gt;
&lt;br /&gt;
 sh java-run-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-run.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 sh java-dbg-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-dbg.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
On Windows you shall be able to run:&lt;br /&gt;
&lt;br /&gt;
 java-win32.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 java-win32-dbg.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32-dbg.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
The windows scripts are pretty simple and flat.&lt;br /&gt;
&lt;br /&gt;
The magic unix scripts offer more features and can be used either in the autobuild environment or in your development one.&lt;br /&gt;
* &amp;lt;pre&amp;gt;setenv-jogl.sh &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looks up and invokes profile.jogl, finds gluegen, sets the environment variables (CLASSPATH, LD_LIBRARY_PATH &amp;amp; PATH).&lt;br /&gt;
* &amp;lt;pre&amp;gt;jogl/etc/profile.jogl &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
JOGL profiles are one of JOGL_ALL, JOGL_ES1_MIN, JOGL_ES1_MAX, JOGL_ES2_MIN, JOGL_ES2_MAX,&lt;br /&gt;
JOGL_GL2ES12_MIN, JOGL_GL2ES12_MAX, JOGL_GL2_MIN, JOGL_GL2_MAX.&lt;br /&gt;
Looks up the set of JAR files necessary to satisfy the chosen JOGL-PROFILE.&lt;br /&gt;
&lt;br /&gt;
This allows you to test a specific environment, ie ES2 without GL2 and AWT, using JOGL_ES2_MIN.&lt;br /&gt;
For this case I would recommend the native ES2 implementation from imageon SDK_OGLES2_LINUX_PCEMULATION_2.02.22.0756.&lt;br /&gt;
&lt;br /&gt;
== Bugreports &amp;amp; Testing ==&lt;br /&gt;
For all bug reports, please add the following information to&lt;br /&gt;
your bug report:&lt;br /&gt;
* [[#JOGL, Platform and OpenGL Version]]&lt;br /&gt;
* [[#Detailed Debug Log]]&lt;br /&gt;
* your email&lt;br /&gt;
&lt;br /&gt;
Please use one of the [{{SERVER}}/deployment/archive/master/?C=M;O=D latest aggregated archives],&lt;br /&gt;
as described in [[Downloading and installing JOGL#Downloading the latest aggregated autobuild|this section]].&lt;br /&gt;
&lt;br /&gt;
Using our [{{SERVER}}/bugzilla/ bug tracking system] is strongly recommended.&amp;lt;br&amp;gt;&lt;br /&gt;
We also have a [[SW Tracking|bug overview page]] available via this wiki.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please add all subsequent information as stated below to your bugreport&#039;&#039;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
otherwise we are not capable to hunt it down for you and us.&lt;br /&gt;
&lt;br /&gt;
=== JOGL, Platform and OpenGL Version ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]],&lt;br /&gt;
which provides the following information:&lt;br /&gt;
&lt;br /&gt;
* Platform&lt;br /&gt;
** OS &amp;amp; version&lt;br /&gt;
** Architecture&lt;br /&gt;
** OpenGL Version&lt;br /&gt;
** Java version (java -version)&lt;br /&gt;
* JOGL version&lt;br /&gt;
** GIT revision&lt;br /&gt;
** Autobuild version&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Debug Log ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test_dbg.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Bug Information ===&lt;br /&gt;
&lt;br /&gt;
* Your Test case&lt;br /&gt;
** Source code, [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;a junit test&amp;lt;/b&amp;gt;] would be best.&lt;br /&gt;
** Invocation command-line&lt;br /&gt;
** Exceptions, stdout/stderr log file&lt;br /&gt;
&lt;br /&gt;
==== Applications ====&lt;br /&gt;
&lt;br /&gt;
Adding a comprehensive [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;junit test&amp;lt;/b&amp;gt;] &lt;br /&gt;
would help us the most to reproduce the bug, to discuss it with you and to achieve a good response time.&amp;lt;br&amp;gt;&lt;br /&gt;
You may add it to your [{{SERVER}}/bugzilla/ bug report] directly or better, give us your [[How to Contribute|git repository pull request]].&lt;br /&gt;
&lt;br /&gt;
If possible, please add the following system properties to enable DEBUG logging:&lt;br /&gt;
&#039;&#039;-Dnewt.debug=all -Dnativewindow.debug=all -Djogl.debug=all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 java -Djava.awt.headless=true -Dnewt.debug=all -Dnativewindow.debug=all \&lt;br /&gt;
 -Djogl.debug=all demos.es2.RedSquare 2&amp;gt;&amp;amp;1 | tee RedSquare.report.log&lt;br /&gt;
&lt;br /&gt;
Attach the log file to your bug report ..&lt;br /&gt;
&lt;br /&gt;
==== Applets and Java Webstart ====&lt;br /&gt;
&lt;br /&gt;
To test &#039;&#039;applets&#039;&#039; and &#039;&#039;javaws&#039;&#039; use &lt;br /&gt;
* the jcontrol panel &lt;br /&gt;
* or edit the &#039;&#039;java properties file&#039;&#039;:&lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment.properties&#039;&#039;&lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\deployment.properties&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where you add the following JRE Arguments. The &#039;&#039;jnlp&#039;&#039; prefix supports the &#039;&#039;javaws&#039;&#039; launch method.&lt;br /&gt;
* jcontrol panel: &amp;lt;pre&amp;gt;-Djnlp.newt.debug=all -Djnlp.nativewindow.debug=all -Djnlp.jogl.debug=all&amp;lt;/pre&amp;gt; &lt;br /&gt;
* properties file: &amp;lt;pre&amp;gt;deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&amp;lt;/pre&amp;gt; Of course you have to add these arguments to all of your JRE lines, ie &#039;&#039;0&#039;&#039; and &#039;&#039;1&#039;&#039;, etc, if they exist.&lt;br /&gt;
&lt;br /&gt;
You also want to &lt;br /&gt;
* Enable logging/trace&lt;br /&gt;
* Show the console window, or just use the latest log files in &lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment/log/&#039;&#039;, or &lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\log\&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hence the &#039;&#039;java properties file&#039;&#039; (see location above) shall contain the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
deployment.log=true&lt;br /&gt;
deployment.trace=true&lt;br /&gt;
deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
deployment.javaws.jre.1.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Best practice:&lt;br /&gt;
* Close your browser and ensure no JVM is running anymore&lt;br /&gt;
* Delete all old log files in above log file folder&lt;br /&gt;
* Start browser and the test applet&lt;br /&gt;
* Close browser after test .. maybe after a while if you see nothing&lt;br /&gt;
* Attach all new generated *.trace files to your bug report ..&lt;br /&gt;
&lt;br /&gt;
== Get the Source Code ==&lt;br /&gt;
&lt;br /&gt;
Create a local copy/branch of a [[Jogamp SCM Repositories|git repository]]&lt;br /&gt;
either anonymous:&lt;br /&gt;
&lt;br /&gt;
* git clone git://github.com/sgothel/gluegen.git gluegen&lt;br /&gt;
* git clone git://github.com/sgothel/jogl.git jogl&lt;br /&gt;
* git clone git://github.com/sgothel/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
or via SSH and your user credential, so you can easily push back your&lt;br /&gt;
changes to the github server:&lt;br /&gt;
&lt;br /&gt;
* git clone git@github.com:username/gluegen.git gluegen&lt;br /&gt;
* git clone git@github.com:username/jogl.git jogl&lt;br /&gt;
* git clone git@github.com:username/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
== [http://jogamp.org/jogl/doc/HowToBuild.html How to build] ==&lt;br /&gt;
&lt;br /&gt;
== [[How to Contribute]] ==&lt;br /&gt;
&lt;br /&gt;
== Common Runtime Problems ==&lt;br /&gt;
&lt;br /&gt;
=== X11: OpenGL library is not picked up correctly,  no OpenGL available ===&lt;br /&gt;
&lt;br /&gt;
In case you are running a DRI machine, eg ATI&#039;s proprietary driver or &lt;br /&gt;
an open source one, you may need to ensure that the environment variable &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039;&lt;br /&gt;
is set properly.&lt;br /&gt;
&lt;br /&gt;
I ran into this while testing the 32bit builds on a 64bit machine&lt;br /&gt;
as a different user. Since &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039; is only setup for the desktop user&lt;br /&gt;
on Ubuntu, some &#039;&#039;/etc/X11/Xsession.d/&#039;&#039; script, I couldn&#039;t get a GL context to work.&lt;br /&gt;
&lt;br /&gt;
So I had to set mine to the value:&lt;br /&gt;
 export LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
[https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/250944 Ubuntu fglrx bug entry]&lt;br /&gt;
&lt;br /&gt;
== How to develop Cross-Device Applications ==&lt;br /&gt;
First you have to pick your lowest common denominator of an OpenGL profile, ie OpenGL ES1 or ES2.&lt;br /&gt;
For either we offer an intersecting desktop GL profile, GL2ES1 or GL2ES2.&lt;br /&gt;
Use the latter while creating your GLCapabilities.&lt;br /&gt;
Build and run your application with the minimum GL profile JARS, e.g. on the desktop use:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; . ./setenv-jogl.sh JOGL_GL2ES12_MIN ../jogl/build&lt;br /&gt;
&lt;br /&gt;
Here you are on a Unix platform (not Window) and your common build subdirectory is &#039;build&#039;.&lt;br /&gt;
&#039;&#039;jogl-demos/setenv-jogl.sh&#039;&#039; is provided within &#039;&#039;jogl-demos&#039;&#039;, which itself utilizes &#039;&#039;jogl/etc/profile.jogl&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL JARS:&lt;br /&gt;
* gluegen-rt.jar&lt;br /&gt;
* jogl-all.jar&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL atomic JARS for minimal deployment:&lt;br /&gt;
* gluegen-gl.jar&lt;br /&gt;
* nativewindow-core.jar&lt;br /&gt;
* jogl-core.jar&lt;br /&gt;
* jogl-util.jar&lt;br /&gt;
* jogl-util-fixedfuncemu.jar&lt;br /&gt;
* newt-core.jar&lt;br /&gt;
* newt-awt.jar&lt;br /&gt;
&lt;br /&gt;
Please check [http://jogamp.org/jogl/doc/deployment/JOGL-DEPLOYMENT.html JOGL Deployment] also.&lt;br /&gt;
&lt;br /&gt;
Now, the same Java application shall run on all devices, desktop and mobile.&lt;br /&gt;
See &#039;&#039;demos.es1.RedSquare&#039;&#039; of the &#039;&#039;jogl-demos&#039;&#039; repository.&lt;br /&gt;
&lt;br /&gt;
On the desktop you may run the ES1 demo:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; sh java-run-newt.sh demos.es1.RedSquare -GL2ES1&lt;br /&gt;
&lt;br /&gt;
and the output is:&lt;br /&gt;
 null RedSquare.run() 0&lt;br /&gt;
 User screen size 0x0&lt;br /&gt;
 Detected screen size 1920x1200&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] Entering initialization&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL Profile: GLProfile[GL2ES1/GL2ES12]&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL:com.sun.opengl.impl.gl2es12.GL2ES12Impl@b815859&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_VERSION=3.0.0 NVIDIA 185.18.14&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_EXTENSIONS: ..&lt;br /&gt;
&lt;br /&gt;
== Is my phone, embedded device or OpenGL ES driver supported by JogAmp? ==&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL ES Driver compatibility matrix]]&lt;br /&gt;
&lt;br /&gt;
== How to use JOGL in Applets ==&lt;br /&gt;
&lt;br /&gt;
See:&lt;br /&gt;
* [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NApplets JOGL Deployment as an NApplet]&lt;br /&gt;
&lt;br /&gt;
== What is &#039;&#039;Newt&#039;s&#039;&#039; Threading Model for native window events ? ==&lt;br /&gt;
As of today, Newt&#039;s default threading model to handle native events&lt;br /&gt;
is the event dispatch thread (EDT) model.&lt;br /&gt;
&lt;br /&gt;
Newt&#039;s EDT impl. creates one EDT per NEWT Display,&lt;br /&gt;
as the Display is a unique abstraction of a graphics device connection&lt;br /&gt;
serving all of it&#039;s Screens and Windows.&lt;br /&gt;
&lt;br /&gt;
EDT is being used to&lt;br /&gt;
* dispatch native Screen and Window events&lt;br /&gt;
* lifecycle Screen and Window functionality &lt;br /&gt;
** create / destroy&lt;br /&gt;
** reparenting&lt;br /&gt;
** native &amp;lt;i&amp;gt;repaint&amp;lt;/i&amp;gt; calls (if no &amp;lt;i&amp;gt;AnimatorControl&amp;lt;/i&amp;gt; is attached and animating)&lt;br /&gt;
** ..&lt;br /&gt;
&lt;br /&gt;
EDT is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; &lt;br /&gt;
* blocking your rendering with event dispatching,&lt;br /&gt;
* needed for pipelining your rendering commands,&lt;br /&gt;
* hence not hindering your high performance rendering in it&#039;s own thread, eg an &amp;lt;i&amp;gt;Animator&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using EDT is not mandatory, and you can turn it off in the NewtFactory,&lt;br /&gt;
and deal with the event dispatch manually.&lt;br /&gt;
&lt;br /&gt;
It&#039;s introduction was necessary to allow a &amp;lt;i&amp;gt;peace of mind&amp;lt;/i&amp;gt;,&lt;br /&gt;
high performance and reactive solution of the dispatch event problem.&lt;br /&gt;
Some OS, especially MS-Windows, require one to create the native Window&lt;br /&gt;
and dispatch it&#039;s events from the same native thread.&lt;br /&gt;
As it was easy to handle these requirements from a simple test application,&lt;br /&gt;
as it is difficult to solve this from a framework operating with multiple temporary threads,&lt;br /&gt;
a web browser for example.&lt;br /&gt;
&lt;br /&gt;
== How to use &#039;&#039;Newt&#039;&#039; with multiple Windows &amp;amp; Threads ==&lt;br /&gt;
Newt is capable of handling multiple threads and windows.&lt;br /&gt;
&lt;br /&gt;
For best performance, you may create one thread per window, if possible.&lt;br /&gt;
&lt;br /&gt;
Below you see the invocation of the ES2 RedSquare jogl-demos utilizing multiple threads.&lt;br /&gt;
&lt;br /&gt;
* Single thread (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single thread (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true com.sun.javafx.newt.util.MainThread demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The serialization of the main Java class through &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039;&lt;br /&gt;
may be used for all platforms, since it only takes effect on &#039;&#039;MacOSX&#039;&#039;.&lt;br /&gt;
This allows you an almost platform independent invocation of your multithreaded Java applications.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;MacOSX&#039;&#039;, &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039; will occupy the main thread and&lt;br /&gt;
serializes all native window related tasks through it.&lt;br /&gt;
This mechanism is thread safe utilizes reentrant locking.&lt;br /&gt;
&lt;br /&gt;
== Why using AWT for high performance is not a good idea ? ==&lt;br /&gt;
&lt;br /&gt;
AWT (on many implementations) holds the lock to the underlying native resources,&lt;br /&gt;
e.g. X11 display, screen and window surface, hence we have to obey these&lt;br /&gt;
locks for any GL action bound to such.&lt;br /&gt;
&lt;br /&gt;
This is still pretty standard matter as long these locks only have to be applied to&lt;br /&gt;
the actual resource in use.&lt;br /&gt;
&lt;br /&gt;
On AWT, it turns out that we have to use the global JAWT toolkit lock&lt;br /&gt;
for any native operation, ie OpenGL.&lt;br /&gt;
This might not be a problem for a single threaded GL application,&lt;br /&gt;
but if you start a multithreaded beast, you will recognize that it will&lt;br /&gt;
stumble around.&lt;br /&gt;
&lt;br /&gt;
You can verify this behavior with the ES1 RedSquare demo:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  java demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
      5s: 3379f, 675 fps, 1 ms/f; total: 5s, 675 fps, 1 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Even here you may experience some stuttering ..&lt;br /&gt;
&lt;br /&gt;
If you force disabling the toolkit lock:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     java -Dnativewindow.nolocking=true demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The demo may freeze forever .. due to native locking.&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2&lt;br /&gt;
      5s: 5958f, 1191 fps, 0 ms/f; total: 5s, 1191 fps, 0 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Runs much smoother .. without the stuttering locking experience ..&lt;br /&gt;
&lt;br /&gt;
This becomes much clearer with more threads:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java demos.es1.RedSquare -awt -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 772f, 151 fps, 6 ms/f; total: 5s, 151 fps, 6 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 1669f, 333 fps, 2 ms/f; total: 5s, 333 fps, 2 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why using Swing for high performance is not a good idea ? ==&lt;br /&gt;
First, all this inherents all arguments from &#039;&#039;&#039;Why using AWT for high performance is not a good idea ?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Second, it involves compositioning using different methods,&lt;br /&gt;
some may not be available on some platforms.&lt;br /&gt;
&lt;br /&gt;
From fast to slow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 1.) External Java2D&#039;s GLContext and FBO object. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on some platforms: Linux/Windows Sun&#039;s Java2D impl.&lt;br /&gt;
* Setup with System property &#039;sun.java2d.opengl&#039; to &#039;true&#039;.&lt;br /&gt;
* Renders directly into Java2D&#039;s FBO object, if available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 2.) Own PBuffer GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D implementation.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 3.) Own Pixmap GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff unlikely hw accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D impl.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
As you see, no straight forward HW rendering is involved,&lt;br /&gt;
assuming that even the windowing manager is using offscreen&lt;br /&gt;
surfaces - you would have 2 compositions here already.&lt;br /&gt;
&lt;br /&gt;
At least (1) would be &#039;acceptable&#039; here, if available,&lt;br /&gt;
but if only (2) is available - the performance would&lt;br /&gt;
not match the state of the art!&lt;br /&gt;
&lt;br /&gt;
Sure, it might be enough for some UIs or static pictures .. or so,&lt;br /&gt;
otherwise, I would prefer the &#039;overlay&#039; method, ie using a&lt;br /&gt;
GLCanvas within a Swing component, while no menu is being shown.&lt;br /&gt;
&lt;br /&gt;
However you do it .. the generic AWT &#039;restrictions&#039; apply here&lt;br /&gt;
as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using OpenGL without a visible component ==&lt;br /&gt;
Sometimes you might want to do OpenGL work without a visible GLDrawable or before making your drawable visible.&lt;br /&gt;
* http://jogamp.762907.n3.nabble.com/Binding-textures-without-showing-the-GLCanvas-tp960145p960234.html&lt;br /&gt;
&lt;br /&gt;
== Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline ==&lt;br /&gt;
&lt;br /&gt;
I see everyday A LOT of beginers who start with the old deprecated OpenGL. This is wrong, this is so wrong. [https://github.com/elect86/ I, personally,] went through this and today I realize I did it wrong and I wished someone could have told me that at the time I start.&lt;br /&gt;
&lt;br /&gt;
In order to say you why you should start right away learning modern OpenGL, I will use the words of Jason L. McKesson:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Programmability. Virtually all of the aforementioned sources instruct beginners using something called “fixed functionality.” This represents configurations in older graphics processors that define how a particular rendering operation will proceed. It is generally considered easiest to teach neophyte graphics programmers using the fixed function pipeline.&lt;br /&gt;
&lt;br /&gt;
This is considered true because it is easy to get something to happen with fixed functionality. It&#039;s simpler to make pictures that look like something real. The fixed function pipeline is like training wheels for a bicycle.&lt;br /&gt;
&lt;br /&gt;
There are downsides to this approach. First, much of what is learned with this approach must be inevitably abandoned when the user encounters a graphics problem that must be solved with programmability. Programmability wipes out almost all of the fixed function pipeline, so the knowledge does not easily transfer.&lt;br /&gt;
&lt;br /&gt;
A more insidious problem is that the fixed function pipeline can give the &#039;&#039;illusion&#039;&#039; of knowledge. A user can think they understand what they are doing, but they&#039;re really just copy-and-pasting code around. Programming thus becomes akin to magical rituals: you put certain bits of code before other bits, and everything seems to work.&lt;br /&gt;
&lt;br /&gt;
This makes debugging nightmarish. Because the user never really understood what the code does, the user is unable to diagnose what a particular problem could possibly mean. And without that ability, debugging becomes a series of random guesses as to what the problem is.&lt;br /&gt;
&lt;br /&gt;
By contrast, you cannot use a programmable system successfully without first understanding it. Confronting programmable graphics hardware means confronting issues that fixed function materials often gloss over. This may mean a slower start overall, but when you finally get to the end, you truly &#039;&#039;know&#039;&#039; how everything works.&lt;br /&gt;
&lt;br /&gt;
Another problem is that, even if you truly understand the fixed function pipeline, it limits how you think about solving problems. Because of its inflexibility, it focuses your mind along certain problem solving possibilities and away from others. It encourages you to think of textures as pictures; vertex data as texture coordinates, colors, or positions; and the like. By its very nature, it limits creativity and problem solving.&lt;br /&gt;
&lt;br /&gt;
Lastly, even on mobile systems, fixed functionality is generally not available in the graphics hardware. Programmability is the order of the day for most graphics hardware, and this will only become more true in the future.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1833</id>
		<title>Jogl FAQ</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1833"/>
		<updated>2015-08-26T12:04:08Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: /* Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;JOGL FAQ&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Jogamp Versioning and Releases|Versioning and Releases]] ==&lt;br /&gt;
&lt;br /&gt;
== What are the Runtime OpenGL Version Requirements ? ==&lt;br /&gt;
The current JOGL2 spec is in WIP state, but mostly finished.&lt;br /&gt;
We do not require any extra features of GL versions &amp;gt; 1.1,&lt;br /&gt;
hence it shall just work.&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to&lt;br /&gt;
* support OpenGL platforms not supporting a version &amp;amp;gt; 1.2&lt;br /&gt;
* use GL &amp;amp;ge; 1.3 features optionally&lt;br /&gt;
Just query their availability e.g.:&lt;br /&gt;
 gl.isExtensionAvailable(&amp;quot;GL_VERSION_1_3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you call a &amp;amp;gt; 1.2 GL function where it is not available,&lt;br /&gt;
a GLException is thrown.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;JOGL requires at least an OpenGL version 1.1&#039;&#039;&#039;,&lt;br /&gt;
due to its dynamical function binding starting with OpenGL 1.2.&lt;br /&gt;
&lt;br /&gt;
== Use and test Autobuilds ==&lt;br /&gt;
&lt;br /&gt;
I like to summarize how to manually test the JOGL autobuilds, starting with 2010-11-10.&lt;br /&gt;
&lt;br /&gt;
You can fetch autobuilds from one the [[Jogamp Versioning and Releases#Autobuilds|autobuild folder]].&lt;br /&gt;
&lt;br /&gt;
=== Runtime Version Check ===&lt;br /&gt;
&lt;br /&gt;
The simplest verification of a JOGL build is to use the &lt;br /&gt;
[[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]]&lt;br /&gt;
and the [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
See [[#Bugreports &amp;amp; Testing]].&lt;br /&gt;
&lt;br /&gt;
=== JOGL Demos ===&lt;br /&gt;
&lt;br /&gt;
Let’s assume we are in the test directory ‘test’, from which we operate from this point.&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogl-demos.7z jogl-demos.7z]. Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogl-demos.7z&amp;lt;/pre&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z jogamp-all-platforms.7z].  Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogamp-all-platforms.7z&amp;lt;/pre&amp;gt;] Create a symbolic link or rename the archive directory from &#039;&#039;jogamp-all-platforms&#039;&#039; to &#039;&#039;jogl&#039;&#039;, ie &amp;lt;pre&amp;gt;ln -s jogamp-all-platforms jogl&amp;lt;/pre&amp;gt;.&lt;br /&gt;
* If you like to test the binding to NV’s Cg, [http://developer.nvidia.com/object/cg_download.html download and install]&lt;br /&gt;
&lt;br /&gt;
We assume java is in your binary search path.&lt;br /&gt;
&lt;br /&gt;
On X11/Unix and MaxOSX you can test the build as follows:&lt;br /&gt;
&lt;br /&gt;
 sh java-run-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-run.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 sh java-dbg-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-dbg.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
On Windows you shall be able to run:&lt;br /&gt;
&lt;br /&gt;
 java-win32.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 java-win32-dbg.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32-dbg.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
The windows scripts are pretty simple and flat.&lt;br /&gt;
&lt;br /&gt;
The magic unix scripts offer more features and can be used either in the autobuild environment or in your development one.&lt;br /&gt;
* &amp;lt;pre&amp;gt;setenv-jogl.sh &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looks up and invokes profile.jogl, finds gluegen, sets the environment variables (CLASSPATH, LD_LIBRARY_PATH &amp;amp; PATH).&lt;br /&gt;
* &amp;lt;pre&amp;gt;jogl/etc/profile.jogl &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
JOGL profiles are one of JOGL_ALL, JOGL_ES1_MIN, JOGL_ES1_MAX, JOGL_ES2_MIN, JOGL_ES2_MAX,&lt;br /&gt;
JOGL_GL2ES12_MIN, JOGL_GL2ES12_MAX, JOGL_GL2_MIN, JOGL_GL2_MAX.&lt;br /&gt;
Looks up the set of JAR files necessary to satisfy the chosen JOGL-PROFILE.&lt;br /&gt;
&lt;br /&gt;
This allows you to test a specific environment, ie ES2 without GL2 and AWT, using JOGL_ES2_MIN.&lt;br /&gt;
For this case I would recommend the native ES2 implementation from imageon SDK_OGLES2_LINUX_PCEMULATION_2.02.22.0756.&lt;br /&gt;
&lt;br /&gt;
== Bugreports &amp;amp; Testing ==&lt;br /&gt;
For all bug reports, please add the following information to&lt;br /&gt;
your bug report:&lt;br /&gt;
* [[#JOGL, Platform and OpenGL Version]]&lt;br /&gt;
* [[#Detailed Debug Log]]&lt;br /&gt;
* your email&lt;br /&gt;
&lt;br /&gt;
Please use one of the [{{SERVER}}/deployment/archive/master/?C=M;O=D latest aggregated archives],&lt;br /&gt;
as described in [[Downloading and installing JOGL#Downloading the latest aggregated autobuild|this section]].&lt;br /&gt;
&lt;br /&gt;
Using our [{{SERVER}}/bugzilla/ bug tracking system] is strongly recommended.&amp;lt;br&amp;gt;&lt;br /&gt;
We also have a [[SW Tracking|bug overview page]] available via this wiki.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please add all subsequent information as stated below to your bugreport&#039;&#039;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
otherwise we are not capable to hunt it down for you and us.&lt;br /&gt;
&lt;br /&gt;
=== JOGL, Platform and OpenGL Version ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]],&lt;br /&gt;
which provides the following information:&lt;br /&gt;
&lt;br /&gt;
* Platform&lt;br /&gt;
** OS &amp;amp; version&lt;br /&gt;
** Architecture&lt;br /&gt;
** OpenGL Version&lt;br /&gt;
** Java version (java -version)&lt;br /&gt;
* JOGL version&lt;br /&gt;
** GIT revision&lt;br /&gt;
** Autobuild version&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Debug Log ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test_dbg.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Bug Information ===&lt;br /&gt;
&lt;br /&gt;
* Your Test case&lt;br /&gt;
** Source code, [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;a junit test&amp;lt;/b&amp;gt;] would be best.&lt;br /&gt;
** Invocation command-line&lt;br /&gt;
** Exceptions, stdout/stderr log file&lt;br /&gt;
&lt;br /&gt;
==== Applications ====&lt;br /&gt;
&lt;br /&gt;
Adding a comprehensive [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;junit test&amp;lt;/b&amp;gt;] &lt;br /&gt;
would help us the most to reproduce the bug, to discuss it with you and to achieve a good response time.&amp;lt;br&amp;gt;&lt;br /&gt;
You may add it to your [{{SERVER}}/bugzilla/ bug report] directly or better, give us your [[How to Contribute|git repository pull request]].&lt;br /&gt;
&lt;br /&gt;
If possible, please add the following system properties to enable DEBUG logging:&lt;br /&gt;
&#039;&#039;-Dnewt.debug=all -Dnativewindow.debug=all -Djogl.debug=all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 java -Djava.awt.headless=true -Dnewt.debug=all -Dnativewindow.debug=all \&lt;br /&gt;
 -Djogl.debug=all demos.es2.RedSquare 2&amp;gt;&amp;amp;1 | tee RedSquare.report.log&lt;br /&gt;
&lt;br /&gt;
Attach the log file to your bug report ..&lt;br /&gt;
&lt;br /&gt;
==== Applets and Java Webstart ====&lt;br /&gt;
&lt;br /&gt;
To test &#039;&#039;applets&#039;&#039; and &#039;&#039;javaws&#039;&#039; use &lt;br /&gt;
* the jcontrol panel &lt;br /&gt;
* or edit the &#039;&#039;java properties file&#039;&#039;:&lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment.properties&#039;&#039;&lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\deployment.properties&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where you add the following JRE Arguments. The &#039;&#039;jnlp&#039;&#039; prefix supports the &#039;&#039;javaws&#039;&#039; launch method.&lt;br /&gt;
* jcontrol panel: &amp;lt;pre&amp;gt;-Djnlp.newt.debug=all -Djnlp.nativewindow.debug=all -Djnlp.jogl.debug=all&amp;lt;/pre&amp;gt; &lt;br /&gt;
* properties file: &amp;lt;pre&amp;gt;deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&amp;lt;/pre&amp;gt; Of course you have to add these arguments to all of your JRE lines, ie &#039;&#039;0&#039;&#039; and &#039;&#039;1&#039;&#039;, etc, if they exist.&lt;br /&gt;
&lt;br /&gt;
You also want to &lt;br /&gt;
* Enable logging/trace&lt;br /&gt;
* Show the console window, or just use the latest log files in &lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment/log/&#039;&#039;, or &lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\log\&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hence the &#039;&#039;java properties file&#039;&#039; (see location above) shall contain the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
deployment.log=true&lt;br /&gt;
deployment.trace=true&lt;br /&gt;
deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
deployment.javaws.jre.1.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Best practice:&lt;br /&gt;
* Close your browser and ensure no JVM is running anymore&lt;br /&gt;
* Delete all old log files in above log file folder&lt;br /&gt;
* Start browser and the test applet&lt;br /&gt;
* Close browser after test .. maybe after a while if you see nothing&lt;br /&gt;
* Attach all new generated *.trace files to your bug report ..&lt;br /&gt;
&lt;br /&gt;
== Get the Source Code ==&lt;br /&gt;
&lt;br /&gt;
Create a local copy/branch of a [[Jogamp SCM Repositories|git repository]]&lt;br /&gt;
either anonymous:&lt;br /&gt;
&lt;br /&gt;
* git clone git://github.com/sgothel/gluegen.git gluegen&lt;br /&gt;
* git clone git://github.com/sgothel/jogl.git jogl&lt;br /&gt;
* git clone git://github.com/sgothel/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
or via SSH and your user credential, so you can easily push back your&lt;br /&gt;
changes to the github server:&lt;br /&gt;
&lt;br /&gt;
* git clone git@github.com:username/gluegen.git gluegen&lt;br /&gt;
* git clone git@github.com:username/jogl.git jogl&lt;br /&gt;
* git clone git@github.com:username/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
== [http://jogamp.org/jogl/doc/HowToBuild.html How to build] ==&lt;br /&gt;
&lt;br /&gt;
== [[How to Contribute]] ==&lt;br /&gt;
&lt;br /&gt;
== Common Runtime Problems ==&lt;br /&gt;
&lt;br /&gt;
=== X11: OpenGL library is not picked up correctly,  no OpenGL available ===&lt;br /&gt;
&lt;br /&gt;
In case you are running a DRI machine, eg ATI&#039;s proprietary driver or &lt;br /&gt;
an open source one, you may need to ensure that the environment variable &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039;&lt;br /&gt;
is set properly.&lt;br /&gt;
&lt;br /&gt;
I ran into this while testing the 32bit builds on a 64bit machine&lt;br /&gt;
as a different user. Since &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039; is only setup for the desktop user&lt;br /&gt;
on Ubuntu, some &#039;&#039;/etc/X11/Xsession.d/&#039;&#039; script, I couldn&#039;t get a GL context to work.&lt;br /&gt;
&lt;br /&gt;
So I had to set mine to the value:&lt;br /&gt;
 export LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
[https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/250944 Ubuntu fglrx bug entry]&lt;br /&gt;
&lt;br /&gt;
== How to develop Cross-Device Applications ==&lt;br /&gt;
First you have to pick your lowest common denominator of an OpenGL profile, ie OpenGL ES1 or ES2.&lt;br /&gt;
For either we offer an intersecting desktop GL profile, GL2ES1 or GL2ES2.&lt;br /&gt;
Use the latter while creating your GLCapabilities.&lt;br /&gt;
Build and run your application with the minimum GL profile JARS, e.g. on the desktop use:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; . ./setenv-jogl.sh JOGL_GL2ES12_MIN ../jogl/build&lt;br /&gt;
&lt;br /&gt;
Here you are on a Unix platform (not Window) and your common build subdirectory is &#039;build&#039;.&lt;br /&gt;
&#039;&#039;jogl-demos/setenv-jogl.sh&#039;&#039; is provided within &#039;&#039;jogl-demos&#039;&#039;, which itself utilizes &#039;&#039;jogl/etc/profile.jogl&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL JARS:&lt;br /&gt;
* gluegen-rt.jar&lt;br /&gt;
* jogl-all.jar&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL atomic JARS for minimal deployment:&lt;br /&gt;
* gluegen-gl.jar&lt;br /&gt;
* nativewindow-core.jar&lt;br /&gt;
* jogl-core.jar&lt;br /&gt;
* jogl-util.jar&lt;br /&gt;
* jogl-util-fixedfuncemu.jar&lt;br /&gt;
* newt-core.jar&lt;br /&gt;
* newt-awt.jar&lt;br /&gt;
&lt;br /&gt;
Please check [http://jogamp.org/jogl/doc/deployment/JOGL-DEPLOYMENT.html JOGL Deployment] also.&lt;br /&gt;
&lt;br /&gt;
Now, the same Java application shall run on all devices, desktop and mobile.&lt;br /&gt;
See &#039;&#039;demos.es1.RedSquare&#039;&#039; of the &#039;&#039;jogl-demos&#039;&#039; repository.&lt;br /&gt;
&lt;br /&gt;
On the desktop you may run the ES1 demo:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; sh java-run-newt.sh demos.es1.RedSquare -GL2ES1&lt;br /&gt;
&lt;br /&gt;
and the output is:&lt;br /&gt;
 null RedSquare.run() 0&lt;br /&gt;
 User screen size 0x0&lt;br /&gt;
 Detected screen size 1920x1200&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] Entering initialization&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL Profile: GLProfile[GL2ES1/GL2ES12]&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL:com.sun.opengl.impl.gl2es12.GL2ES12Impl@b815859&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_VERSION=3.0.0 NVIDIA 185.18.14&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_EXTENSIONS: ..&lt;br /&gt;
&lt;br /&gt;
== Is my phone, embedded device or OpenGL ES driver supported by JogAmp? ==&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL ES Driver compatibility matrix]]&lt;br /&gt;
&lt;br /&gt;
== How to use JOGL in Applets ==&lt;br /&gt;
&lt;br /&gt;
See:&lt;br /&gt;
* [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NApplets JOGL Deployment as an NApplet]&lt;br /&gt;
&lt;br /&gt;
== What is &#039;&#039;Newt&#039;s&#039;&#039; Threading Model for native window events ? ==&lt;br /&gt;
As of today, Newt&#039;s default threading model to handle native events&lt;br /&gt;
is the event dispatch thread (EDT) model.&lt;br /&gt;
&lt;br /&gt;
Newt&#039;s EDT impl. creates one EDT per NEWT Display,&lt;br /&gt;
as the Display is a unique abstraction of a graphics device connection&lt;br /&gt;
serving all of it&#039;s Screens and Windows.&lt;br /&gt;
&lt;br /&gt;
EDT is being used to&lt;br /&gt;
* dispatch native Screen and Window events&lt;br /&gt;
* lifecycle Screen and Window functionality &lt;br /&gt;
** create / destroy&lt;br /&gt;
** reparenting&lt;br /&gt;
** native &amp;lt;i&amp;gt;repaint&amp;lt;/i&amp;gt; calls (if no &amp;lt;i&amp;gt;AnimatorControl&amp;lt;/i&amp;gt; is attached and animating)&lt;br /&gt;
** ..&lt;br /&gt;
&lt;br /&gt;
EDT is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; &lt;br /&gt;
* blocking your rendering with event dispatching,&lt;br /&gt;
* needed for pipelining your rendering commands,&lt;br /&gt;
* hence not hindering your high performance rendering in it&#039;s own thread, eg an &amp;lt;i&amp;gt;Animator&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using EDT is not mandatory, and you can turn it off in the NewtFactory,&lt;br /&gt;
and deal with the event dispatch manually.&lt;br /&gt;
&lt;br /&gt;
It&#039;s introduction was necessary to allow a &amp;lt;i&amp;gt;peace of mind&amp;lt;/i&amp;gt;,&lt;br /&gt;
high performance and reactive solution of the dispatch event problem.&lt;br /&gt;
Some OS, especially MS-Windows, require one to create the native Window&lt;br /&gt;
and dispatch it&#039;s events from the same native thread.&lt;br /&gt;
As it was easy to handle these requirements from a simple test application,&lt;br /&gt;
as it is difficult to solve this from a framework operating with multiple temporary threads,&lt;br /&gt;
a web browser for example.&lt;br /&gt;
&lt;br /&gt;
== How to use &#039;&#039;Newt&#039;&#039; with multiple Windows &amp;amp; Threads ==&lt;br /&gt;
Newt is capable of handling multiple threads and windows.&lt;br /&gt;
&lt;br /&gt;
For best performance, you may create one thread per window, if possible.&lt;br /&gt;
&lt;br /&gt;
Below you see the invocation of the ES2 RedSquare jogl-demos utilizing multiple threads.&lt;br /&gt;
&lt;br /&gt;
* Single thread (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single thread (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true com.sun.javafx.newt.util.MainThread demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The serialization of the main Java class through &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039;&lt;br /&gt;
may be used for all platforms, since it only takes effect on &#039;&#039;MacOSX&#039;&#039;.&lt;br /&gt;
This allows you an almost platform independent invocation of your multithreaded Java applications.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;MacOSX&#039;&#039;, &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039; will occupy the main thread and&lt;br /&gt;
serializes all native window related tasks through it.&lt;br /&gt;
This mechanism is thread safe utilizes reentrant locking.&lt;br /&gt;
&lt;br /&gt;
== Why using AWT for high performance is not a good idea ? ==&lt;br /&gt;
&lt;br /&gt;
AWT (on many implementations) holds the lock to the underlying native resources,&lt;br /&gt;
e.g. X11 display, screen and window surface, hence we have to obey these&lt;br /&gt;
locks for any GL action bound to such.&lt;br /&gt;
&lt;br /&gt;
This is still pretty standard matter as long these locks only have to be applied to&lt;br /&gt;
the actual resource in use.&lt;br /&gt;
&lt;br /&gt;
On AWT, it turns out that we have to use the global JAWT toolkit lock&lt;br /&gt;
for any native operation, ie OpenGL.&lt;br /&gt;
This might not be a problem for a single threaded GL application,&lt;br /&gt;
but if you start a multithreaded beast, you will recognize that it will&lt;br /&gt;
stumble around.&lt;br /&gt;
&lt;br /&gt;
You can verify this behavior with the ES1 RedSquare demo:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  java demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
      5s: 3379f, 675 fps, 1 ms/f; total: 5s, 675 fps, 1 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Even here you may experience some stuttering ..&lt;br /&gt;
&lt;br /&gt;
If you force disabling the toolkit lock:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     java -Dnativewindow.nolocking=true demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The demo may freeze forever .. due to native locking.&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2&lt;br /&gt;
      5s: 5958f, 1191 fps, 0 ms/f; total: 5s, 1191 fps, 0 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Runs much smoother .. without the stuttering locking experience ..&lt;br /&gt;
&lt;br /&gt;
This becomes much clearer with more threads:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java demos.es1.RedSquare -awt -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 772f, 151 fps, 6 ms/f; total: 5s, 151 fps, 6 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 1669f, 333 fps, 2 ms/f; total: 5s, 333 fps, 2 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why using Swing for high performance is not a good idea ? ==&lt;br /&gt;
First, all this inherents all arguments from &#039;&#039;&#039;Why using AWT for high performance is not a good idea ?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Second, it involves compositioning using different methods,&lt;br /&gt;
some may not be available on some platforms.&lt;br /&gt;
&lt;br /&gt;
From fast to slow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 1.) External Java2D&#039;s GLContext and FBO object. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on some platforms: Linux/Windows Sun&#039;s Java2D impl.&lt;br /&gt;
* Setup with System property &#039;sun.java2d.opengl&#039; to &#039;true&#039;.&lt;br /&gt;
* Renders directly into Java2D&#039;s FBO object, if available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 2.) Own PBuffer GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D implementation.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 3.) Own Pixmap GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff unlikely hw accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D impl.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
As you see, no straight forward HW rendering is involved,&lt;br /&gt;
assuming that even the windowing manager is using offscreen&lt;br /&gt;
surfaces - you would have 2 compositions here already.&lt;br /&gt;
&lt;br /&gt;
At least (1) would be &#039;acceptable&#039; here, if available,&lt;br /&gt;
but if only (2) is available - the performance would&lt;br /&gt;
not match the state of the art!&lt;br /&gt;
&lt;br /&gt;
Sure, it might be enough for some UIs or static pictures .. or so,&lt;br /&gt;
otherwise, I would prefer the &#039;overlay&#039; method, ie using a&lt;br /&gt;
GLCanvas within a Swing component, while no menu is being shown.&lt;br /&gt;
&lt;br /&gt;
However you do it .. the generic AWT &#039;restrictions&#039; apply here&lt;br /&gt;
as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using OpenGL without a visible component ==&lt;br /&gt;
Sometimes you might want to do OpenGL work without a visible GLDrawable or before making your drawable visible.&lt;br /&gt;
* http://jogamp.762907.n3.nabble.com/Binding-textures-without-showing-the-GLCanvas-tp960145p960234.html&lt;br /&gt;
&lt;br /&gt;
== Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline ==&lt;br /&gt;
&lt;br /&gt;
I see everyday A LOT of beginers who start with the old deprecated OpenGL. This is wrong, this is so wrong. [https://github.com/elect86/ I, personally,] went through this and today I realize I did it wrong and I wished someone could have told me that at the time I start.&lt;br /&gt;
&lt;br /&gt;
In order to say you why you should start right away learning modern OpenGL, I will use the words of Jason L. McKesson:&lt;br /&gt;
&lt;br /&gt;
Programmability. Virtually all of the aforementioned sources instruct beginners using something called “fixed functionality.” This represents configurations in older graphics processors that define how a particular rendering operation will proceed. It is generally considered easiest to teach neophyte graphics programmers using the fixed function pipeline.&lt;br /&gt;
&lt;br /&gt;
This is considered true because it is easy to get something to happen with fixed functionality. It&#039;s simpler to make pictures that look like something real. The fixed function pipeline is like training wheels for a bicycle.&lt;br /&gt;
&lt;br /&gt;
There are downsides to this approach. First, much of what is learned with this approach must be inevitably abandoned when the user encounters a graphics problem that must be solved with programmability. Programmability wipes out almost all of the fixed function pipeline, so the knowledge does not easily transfer.&lt;br /&gt;
&lt;br /&gt;
A more insidious problem is that the fixed function pipeline can give the illusion of knowledge. A user can think they understand what they are doing, but they&#039;re really just copy-and-pasting code around. Programming thus becomes akin to magical rituals: you put certain bits of code before other bits, and everything seems to work.&lt;br /&gt;
&lt;br /&gt;
This makes debugging nightmarish. Because the user never really understood what the code does, the user is unable to diagnose what a particular problem could possibly mean. And without that ability, debugging becomes a series of random guesses as to what the problem is.&lt;br /&gt;
&lt;br /&gt;
By contrast, you cannot use a programmable system successfully without first understanding it. Confronting programmable graphics hardware means confronting issues that fixed function materials often gloss over. This may mean a slower start overall, but when you finally get to the end, you truly know how everything works.&lt;br /&gt;
&lt;br /&gt;
Another problem is that, even if you truly understand the fixed function pipeline, it limits how you think about solving problems. Because of its inflexibility, it focuses your mind along certain problem solving possibilities and away from others. It encourages you to think of textures as pictures; vertex data as texture coordinates, colors, or positions; and the like. By its very nature, it limits creativity and problem solving.&lt;br /&gt;
&lt;br /&gt;
Lastly, even on mobile systems, fixed functionality is generally not available in the graphics hardware. Programmability is the order of the day for most graphics hardware, and this will only become more true in the future.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1832</id>
		<title>Jogl FAQ</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_FAQ&amp;diff=1832"/>
		<updated>2015-08-26T12:00:18Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;JOGL FAQ&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== [[Jogamp Versioning and Releases|Versioning and Releases]] ==&lt;br /&gt;
&lt;br /&gt;
== What are the Runtime OpenGL Version Requirements ? ==&lt;br /&gt;
The current JOGL2 spec is in WIP state, but mostly finished.&lt;br /&gt;
We do not require any extra features of GL versions &amp;gt; 1.1,&lt;br /&gt;
hence it shall just work.&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to&lt;br /&gt;
* support OpenGL platforms not supporting a version &amp;amp;gt; 1.2&lt;br /&gt;
* use GL &amp;amp;ge; 1.3 features optionally&lt;br /&gt;
Just query their availability e.g.:&lt;br /&gt;
 gl.isExtensionAvailable(&amp;quot;GL_VERSION_1_3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
If you call a &amp;amp;gt; 1.2 GL function where it is not available,&lt;br /&gt;
a GLException is thrown.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;JOGL requires at least an OpenGL version 1.1&#039;&#039;&#039;,&lt;br /&gt;
due to its dynamical function binding starting with OpenGL 1.2.&lt;br /&gt;
&lt;br /&gt;
== Use and test Autobuilds ==&lt;br /&gt;
&lt;br /&gt;
I like to summarize how to manually test the JOGL autobuilds, starting with 2010-11-10.&lt;br /&gt;
&lt;br /&gt;
You can fetch autobuilds from one the [[Jogamp Versioning and Releases#Autobuilds|autobuild folder]].&lt;br /&gt;
&lt;br /&gt;
=== Runtime Version Check ===&lt;br /&gt;
&lt;br /&gt;
The simplest verification of a JOGL build is to use the &lt;br /&gt;
[[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]]&lt;br /&gt;
and the [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
See [[#Bugreports &amp;amp; Testing]].&lt;br /&gt;
&lt;br /&gt;
=== JOGL Demos ===&lt;br /&gt;
&lt;br /&gt;
Let’s assume we are in the test directory ‘test’, from which we operate from this point.&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogl-demos.7z jogl-demos.7z]. Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogl-demos.7z&amp;lt;/pre&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
* Get [http://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z jogamp-all-platforms.7z].  Extract the archive, i.e. [http://www.7-zip.org/7z.html &amp;lt;pre&amp;gt;7z x jogamp-all-platforms.7z&amp;lt;/pre&amp;gt;] Create a symbolic link or rename the archive directory from &#039;&#039;jogamp-all-platforms&#039;&#039; to &#039;&#039;jogl&#039;&#039;, ie &amp;lt;pre&amp;gt;ln -s jogamp-all-platforms jogl&amp;lt;/pre&amp;gt;.&lt;br /&gt;
* If you like to test the binding to NV’s Cg, [http://developer.nvidia.com/object/cg_download.html download and install]&lt;br /&gt;
&lt;br /&gt;
We assume java is in your binary search path.&lt;br /&gt;
&lt;br /&gt;
On X11/Unix and MaxOSX you can test the build as follows:&lt;br /&gt;
&lt;br /&gt;
 sh java-run-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-run.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 sh java-dbg-newt.sh demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 sh java-dbg.sh demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
On Windows you shall be able to run:&lt;br /&gt;
&lt;br /&gt;
 java-win32.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
and with debug output&lt;br /&gt;
&lt;br /&gt;
 java-win32-dbg.bat demos.es2.RedSquare -GL2 -GL2 -GL2&lt;br /&gt;
 java-win32-dbg.bat demos.gears.Gears&lt;br /&gt;
&lt;br /&gt;
The windows scripts are pretty simple and flat.&lt;br /&gt;
&lt;br /&gt;
The magic unix scripts offer more features and can be used either in the autobuild environment or in your development one.&lt;br /&gt;
* &amp;lt;pre&amp;gt;setenv-jogl.sh &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looks up and invokes profile.jogl, finds gluegen, sets the environment variables (CLASSPATH, LD_LIBRARY_PATH &amp;amp; PATH).&lt;br /&gt;
* &amp;lt;pre&amp;gt;jogl/etc/profile.jogl &amp;lt;JOGL-PROFILE&amp;gt; [&amp;lt;jogl-build-dir&amp;gt;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
JOGL profiles are one of JOGL_ALL, JOGL_ES1_MIN, JOGL_ES1_MAX, JOGL_ES2_MIN, JOGL_ES2_MAX,&lt;br /&gt;
JOGL_GL2ES12_MIN, JOGL_GL2ES12_MAX, JOGL_GL2_MIN, JOGL_GL2_MAX.&lt;br /&gt;
Looks up the set of JAR files necessary to satisfy the chosen JOGL-PROFILE.&lt;br /&gt;
&lt;br /&gt;
This allows you to test a specific environment, ie ES2 without GL2 and AWT, using JOGL_ES2_MIN.&lt;br /&gt;
For this case I would recommend the native ES2 implementation from imageon SDK_OGLES2_LINUX_PCEMULATION_2.02.22.0756.&lt;br /&gt;
&lt;br /&gt;
== Bugreports &amp;amp; Testing ==&lt;br /&gt;
For all bug reports, please add the following information to&lt;br /&gt;
your bug report:&lt;br /&gt;
* [[#JOGL, Platform and OpenGL Version]]&lt;br /&gt;
* [[#Detailed Debug Log]]&lt;br /&gt;
* your email&lt;br /&gt;
&lt;br /&gt;
Please use one of the [{{SERVER}}/deployment/archive/master/?C=M;O=D latest aggregated archives],&lt;br /&gt;
as described in [[Downloading and installing JOGL#Downloading the latest aggregated autobuild|this section]].&lt;br /&gt;
&lt;br /&gt;
Using our [{{SERVER}}/bugzilla/ bug tracking system] is strongly recommended.&amp;lt;br&amp;gt;&lt;br /&gt;
We also have a [[SW Tracking|bug overview page]] available via this wiki.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please add all subsequent information as stated below to your bugreport&#039;&#039;&#039;,&amp;lt;br&amp;gt;&lt;br /&gt;
otherwise we are not capable to hunt it down for you and us.&lt;br /&gt;
&lt;br /&gt;
=== JOGL, Platform and OpenGL Version ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Version Check|runtime version check]],&lt;br /&gt;
which provides the following information:&lt;br /&gt;
&lt;br /&gt;
* Platform&lt;br /&gt;
** OS &amp;amp; version&lt;br /&gt;
** Architecture&lt;br /&gt;
** OpenGL Version&lt;br /&gt;
** Java version (java -version)&lt;br /&gt;
* JOGL version&lt;br /&gt;
** GIT revision&lt;br /&gt;
** Autobuild version&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Debug Log ===&lt;br /&gt;
&lt;br /&gt;
Please perform a [[Jogamp Versioning and Releases#Runtime Debug Logs|runtime debug test]].&lt;br /&gt;
&lt;br /&gt;
Send us the resulting file &amp;lt;pre&amp;gt;test_dbg.log&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Detailed Bug Information ===&lt;br /&gt;
&lt;br /&gt;
* Your Test case&lt;br /&gt;
** Source code, [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;a junit test&amp;lt;/b&amp;gt;] would be best.&lt;br /&gt;
** Invocation command-line&lt;br /&gt;
** Exceptions, stdout/stderr log file&lt;br /&gt;
&lt;br /&gt;
==== Applications ====&lt;br /&gt;
&lt;br /&gt;
Adding a comprehensive [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/newt/TestGLWindows00NEWT.java &amp;lt;b&amp;gt;junit test&amp;lt;/b&amp;gt;] &lt;br /&gt;
would help us the most to reproduce the bug, to discuss it with you and to achieve a good response time.&amp;lt;br&amp;gt;&lt;br /&gt;
You may add it to your [{{SERVER}}/bugzilla/ bug report] directly or better, give us your [[How to Contribute|git repository pull request]].&lt;br /&gt;
&lt;br /&gt;
If possible, please add the following system properties to enable DEBUG logging:&lt;br /&gt;
&#039;&#039;-Dnewt.debug=all -Dnativewindow.debug=all -Djogl.debug=all&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 java -Djava.awt.headless=true -Dnewt.debug=all -Dnativewindow.debug=all \&lt;br /&gt;
 -Djogl.debug=all demos.es2.RedSquare 2&amp;gt;&amp;amp;1 | tee RedSquare.report.log&lt;br /&gt;
&lt;br /&gt;
Attach the log file to your bug report ..&lt;br /&gt;
&lt;br /&gt;
==== Applets and Java Webstart ====&lt;br /&gt;
&lt;br /&gt;
To test &#039;&#039;applets&#039;&#039; and &#039;&#039;javaws&#039;&#039; use &lt;br /&gt;
* the jcontrol panel &lt;br /&gt;
* or edit the &#039;&#039;java properties file&#039;&#039;:&lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment.properties&#039;&#039;&lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\deployment.properties&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where you add the following JRE Arguments. The &#039;&#039;jnlp&#039;&#039; prefix supports the &#039;&#039;javaws&#039;&#039; launch method.&lt;br /&gt;
* jcontrol panel: &amp;lt;pre&amp;gt;-Djnlp.newt.debug=all -Djnlp.nativewindow.debug=all -Djnlp.jogl.debug=all&amp;lt;/pre&amp;gt; &lt;br /&gt;
* properties file: &amp;lt;pre&amp;gt;deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&amp;lt;/pre&amp;gt; Of course you have to add these arguments to all of your JRE lines, ie &#039;&#039;0&#039;&#039; and &#039;&#039;1&#039;&#039;, etc, if they exist.&lt;br /&gt;
&lt;br /&gt;
You also want to &lt;br /&gt;
* Enable logging/trace&lt;br /&gt;
* Show the console window, or just use the latest log files in &lt;br /&gt;
** Unix: &#039;&#039;~/.java/deployment/log/&#039;&#039;, or &lt;br /&gt;
** Windows: &#039;&#039;\Users\&amp;lt;username&amp;gt;\AppData\LocalLow\Sun\Java\Deployment\log\&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hence the &#039;&#039;java properties file&#039;&#039; (see location above) shall contain the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
deployment.log=true&lt;br /&gt;
deployment.trace=true&lt;br /&gt;
deployment.javaws.jre.0.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
deployment.javaws.jre.1.args=-Djnlp.newt.debug\=all -Djnlp.nativewindow.debug\=all -Djnlp.jogl.debug\=all&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Best practice:&lt;br /&gt;
* Close your browser and ensure no JVM is running anymore&lt;br /&gt;
* Delete all old log files in above log file folder&lt;br /&gt;
* Start browser and the test applet&lt;br /&gt;
* Close browser after test .. maybe after a while if you see nothing&lt;br /&gt;
* Attach all new generated *.trace files to your bug report ..&lt;br /&gt;
&lt;br /&gt;
== Get the Source Code ==&lt;br /&gt;
&lt;br /&gt;
Create a local copy/branch of a [[Jogamp SCM Repositories|git repository]]&lt;br /&gt;
either anonymous:&lt;br /&gt;
&lt;br /&gt;
* git clone git://github.com/sgothel/gluegen.git gluegen&lt;br /&gt;
* git clone git://github.com/sgothel/jogl.git jogl&lt;br /&gt;
* git clone git://github.com/sgothel/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
or via SSH and your user credential, so you can easily push back your&lt;br /&gt;
changes to the github server:&lt;br /&gt;
&lt;br /&gt;
* git clone git@github.com:username/gluegen.git gluegen&lt;br /&gt;
* git clone git@github.com:username/jogl.git jogl&lt;br /&gt;
* git clone git@github.com:username/jogl-demos.git jogl-demos&lt;br /&gt;
&lt;br /&gt;
== [http://jogamp.org/jogl/doc/HowToBuild.html How to build] ==&lt;br /&gt;
&lt;br /&gt;
== [[How to Contribute]] ==&lt;br /&gt;
&lt;br /&gt;
== Common Runtime Problems ==&lt;br /&gt;
&lt;br /&gt;
=== X11: OpenGL library is not picked up correctly,  no OpenGL available ===&lt;br /&gt;
&lt;br /&gt;
In case you are running a DRI machine, eg ATI&#039;s proprietary driver or &lt;br /&gt;
an open source one, you may need to ensure that the environment variable &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039;&lt;br /&gt;
is set properly.&lt;br /&gt;
&lt;br /&gt;
I ran into this while testing the 32bit builds on a 64bit machine&lt;br /&gt;
as a different user. Since &#039;&#039;&#039;LIBGL_DRIVERS_PATH&#039;&#039;&#039; is only setup for the desktop user&lt;br /&gt;
on Ubuntu, some &#039;&#039;/etc/X11/Xsession.d/&#039;&#039; script, I couldn&#039;t get a GL context to work.&lt;br /&gt;
&lt;br /&gt;
So I had to set mine to the value:&lt;br /&gt;
 export LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
[https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/250944 Ubuntu fglrx bug entry]&lt;br /&gt;
&lt;br /&gt;
== How to develop Cross-Device Applications ==&lt;br /&gt;
First you have to pick your lowest common denominator of an OpenGL profile, ie OpenGL ES1 or ES2.&lt;br /&gt;
For either we offer an intersecting desktop GL profile, GL2ES1 or GL2ES2.&lt;br /&gt;
Use the latter while creating your GLCapabilities.&lt;br /&gt;
Build and run your application with the minimum GL profile JARS, e.g. on the desktop use:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; . ./setenv-jogl.sh JOGL_GL2ES12_MIN ../jogl/build&lt;br /&gt;
&lt;br /&gt;
Here you are on a Unix platform (not Window) and your common build subdirectory is &#039;build&#039;.&lt;br /&gt;
&#039;&#039;jogl-demos/setenv-jogl.sh&#039;&#039; is provided within &#039;&#039;jogl-demos&#039;&#039;, which itself utilizes &#039;&#039;jogl/etc/profile.jogl&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL JARS:&lt;br /&gt;
* gluegen-rt.jar&lt;br /&gt;
* jogl-all.jar&lt;br /&gt;
&lt;br /&gt;
This uses the GlueGen/JOGL atomic JARS for minimal deployment:&lt;br /&gt;
* gluegen-gl.jar&lt;br /&gt;
* nativewindow-core.jar&lt;br /&gt;
* jogl-core.jar&lt;br /&gt;
* jogl-util.jar&lt;br /&gt;
* jogl-util-fixedfuncemu.jar&lt;br /&gt;
* newt-core.jar&lt;br /&gt;
* newt-awt.jar&lt;br /&gt;
&lt;br /&gt;
Please check [http://jogamp.org/jogl/doc/deployment/JOGL-DEPLOYMENT.html JOGL Deployment] also.&lt;br /&gt;
&lt;br /&gt;
Now, the same Java application shall run on all devices, desktop and mobile.&lt;br /&gt;
See &#039;&#039;demos.es1.RedSquare&#039;&#039; of the &#039;&#039;jogl-demos&#039;&#039; repository.&lt;br /&gt;
&lt;br /&gt;
On the desktop you may run the ES1 demo:&lt;br /&gt;
&lt;br /&gt;
 ~/jogl-demos&amp;gt; sh java-run-newt.sh demos.es1.RedSquare -GL2ES1&lt;br /&gt;
&lt;br /&gt;
and the output is:&lt;br /&gt;
 null RedSquare.run() 0&lt;br /&gt;
 User screen size 0x0&lt;br /&gt;
 Detected screen size 1920x1200&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] Entering initialization&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL Profile: GLProfile[GL2ES1/GL2ES12]&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL:com.sun.opengl.impl.gl2es12.GL2ES12Impl@b815859&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_VERSION=3.0.0 NVIDIA 185.18.14&lt;br /&gt;
 GLProfile[GL2ES1/GL2ES12] GL_EXTENSIONS: ..&lt;br /&gt;
&lt;br /&gt;
== Is my phone, embedded device or OpenGL ES driver supported by JogAmp? ==&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL ES Driver compatibility matrix]]&lt;br /&gt;
&lt;br /&gt;
== How to use JOGL in Applets ==&lt;br /&gt;
&lt;br /&gt;
See:&lt;br /&gt;
* [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html#NApplets JOGL Deployment as an NApplet]&lt;br /&gt;
&lt;br /&gt;
== What is &#039;&#039;Newt&#039;s&#039;&#039; Threading Model for native window events ? ==&lt;br /&gt;
As of today, Newt&#039;s default threading model to handle native events&lt;br /&gt;
is the event dispatch thread (EDT) model.&lt;br /&gt;
&lt;br /&gt;
Newt&#039;s EDT impl. creates one EDT per NEWT Display,&lt;br /&gt;
as the Display is a unique abstraction of a graphics device connection&lt;br /&gt;
serving all of it&#039;s Screens and Windows.&lt;br /&gt;
&lt;br /&gt;
EDT is being used to&lt;br /&gt;
* dispatch native Screen and Window events&lt;br /&gt;
* lifecycle Screen and Window functionality &lt;br /&gt;
** create / destroy&lt;br /&gt;
** reparenting&lt;br /&gt;
** native &amp;lt;i&amp;gt;repaint&amp;lt;/i&amp;gt; calls (if no &amp;lt;i&amp;gt;AnimatorControl&amp;lt;/i&amp;gt; is attached and animating)&lt;br /&gt;
** ..&lt;br /&gt;
&lt;br /&gt;
EDT is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; &lt;br /&gt;
* blocking your rendering with event dispatching,&lt;br /&gt;
* needed for pipelining your rendering commands,&lt;br /&gt;
* hence not hindering your high performance rendering in it&#039;s own thread, eg an &amp;lt;i&amp;gt;Animator&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using EDT is not mandatory, and you can turn it off in the NewtFactory,&lt;br /&gt;
and deal with the event dispatch manually.&lt;br /&gt;
&lt;br /&gt;
It&#039;s introduction was necessary to allow a &amp;lt;i&amp;gt;peace of mind&amp;lt;/i&amp;gt;,&lt;br /&gt;
high performance and reactive solution of the dispatch event problem.&lt;br /&gt;
Some OS, especially MS-Windows, require one to create the native Window&lt;br /&gt;
and dispatch it&#039;s events from the same native thread.&lt;br /&gt;
As it was easy to handle these requirements from a simple test application,&lt;br /&gt;
as it is difficult to solve this from a framework operating with multiple temporary threads,&lt;br /&gt;
a web browser for example.&lt;br /&gt;
&lt;br /&gt;
== How to use &#039;&#039;Newt&#039;&#039; with multiple Windows &amp;amp; Threads ==&lt;br /&gt;
Newt is capable of handling multiple threads and windows.&lt;br /&gt;
&lt;br /&gt;
For best performance, you may create one thread per window, if possible.&lt;br /&gt;
&lt;br /&gt;
Below you see the invocation of the ES2 RedSquare jogl-demos utilizing multiple threads.&lt;br /&gt;
&lt;br /&gt;
* Single thread (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Single thread (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true demos.es2.RedSquare -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (Unix, Win32) &amp;lt;pre&amp;gt;java -Djava.awt.headless=true demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Multiple threads &amp;amp; windows (MacOSX) &amp;lt;pre&amp;gt;java -XstartOnFirstThread -Djava.awt.headless=true com.sun.javafx.newt.util.MainThread demos.es2.RedSquare -GL2 -GL2 -GL2 -GL2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The serialization of the main Java class through &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039;&lt;br /&gt;
may be used for all platforms, since it only takes effect on &#039;&#039;MacOSX&#039;&#039;.&lt;br /&gt;
This allows you an almost platform independent invocation of your multithreaded Java applications.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;MacOSX&#039;&#039;, &#039;&#039;com.sun.javafx.newt.util.MainThread&#039;&#039; will occupy the main thread and&lt;br /&gt;
serializes all native window related tasks through it.&lt;br /&gt;
This mechanism is thread safe utilizes reentrant locking.&lt;br /&gt;
&lt;br /&gt;
== Why using AWT for high performance is not a good idea ? ==&lt;br /&gt;
&lt;br /&gt;
AWT (on many implementations) holds the lock to the underlying native resources,&lt;br /&gt;
e.g. X11 display, screen and window surface, hence we have to obey these&lt;br /&gt;
locks for any GL action bound to such.&lt;br /&gt;
&lt;br /&gt;
This is still pretty standard matter as long these locks only have to be applied to&lt;br /&gt;
the actual resource in use.&lt;br /&gt;
&lt;br /&gt;
On AWT, it turns out that we have to use the global JAWT toolkit lock&lt;br /&gt;
for any native operation, ie OpenGL.&lt;br /&gt;
This might not be a problem for a single threaded GL application,&lt;br /&gt;
but if you start a multithreaded beast, you will recognize that it will&lt;br /&gt;
stumble around.&lt;br /&gt;
&lt;br /&gt;
You can verify this behavior with the ES1 RedSquare demo:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  java demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
      5s: 3379f, 675 fps, 1 ms/f; total: 5s, 675 fps, 1 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Even here you may experience some stuttering ..&lt;br /&gt;
&lt;br /&gt;
If you force disabling the toolkit lock:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     java -Dnativewindow.nolocking=true demos.es1.RedSquare -awt -swapi 0 -GL2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The demo may freeze forever .. due to native locking.&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - One Thread&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2&lt;br /&gt;
      5s: 5958f, 1191 fps, 0 ms/f; total: 5s, 1191 fps, 0 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Runs much smoother .. without the stuttering locking experience ..&lt;br /&gt;
&lt;br /&gt;
This becomes much clearer with more threads:&lt;br /&gt;
&lt;br /&gt;
* AWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java demos.es1.RedSquare -awt -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 772f, 151 fps, 6 ms/f; total: 5s, 151 fps, 6 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* NEWT - No VSync - Three Threads&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    java -Djava.awt.headless=true demos.es1.RedSquare -swapi 0 -GL2 -GL2 -GL2&lt;br /&gt;
      5s: 1669f, 333 fps, 2 ms/f; total: 5s, 333 fps, 2 ms/f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why using Swing for high performance is not a good idea ? ==&lt;br /&gt;
First, all this inherents all arguments from &#039;&#039;&#039;Why using AWT for high performance is not a good idea ?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Second, it involves compositioning using different methods,&lt;br /&gt;
some may not be available on some platforms.&lt;br /&gt;
&lt;br /&gt;
From fast to slow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 1.) External Java2D&#039;s GLContext and FBO object. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on some platforms: Linux/Windows Sun&#039;s Java2D impl.&lt;br /&gt;
* Setup with System property &#039;sun.java2d.opengl&#039; to &#039;true&#039;.&lt;br /&gt;
* Renders directly into Java2D&#039;s FBO object, if available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 2.) Own PBuffer GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff HW accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D implementation.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; 3.) Own Pixmap GLContext, which has to be composed. &amp;lt;/h5&amp;gt;&lt;br /&gt;
* GL stuff unlikely hw accelerated.&lt;br /&gt;
* Available on most platforms: No dependency to Java2D impl.&lt;br /&gt;
* Renders into an own offscreen drawable, and copies it over to AWT&#039;s BufferedImage.&lt;br /&gt;
&lt;br /&gt;
As you see, no straight forward HW rendering is involved,&lt;br /&gt;
assuming that even the windowing manager is using offscreen&lt;br /&gt;
surfaces - you would have 2 compositions here already.&lt;br /&gt;
&lt;br /&gt;
At least (1) would be &#039;acceptable&#039; here, if available,&lt;br /&gt;
but if only (2) is available - the performance would&lt;br /&gt;
not match the state of the art!&lt;br /&gt;
&lt;br /&gt;
Sure, it might be enough for some UIs or static pictures .. or so,&lt;br /&gt;
otherwise, I would prefer the &#039;overlay&#039; method, ie using a&lt;br /&gt;
GLCanvas within a Swing component, while no menu is being shown.&lt;br /&gt;
&lt;br /&gt;
However you do it .. the generic AWT &#039;restrictions&#039; apply here&lt;br /&gt;
as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using OpenGL without a visible component ==&lt;br /&gt;
Sometimes you might want to do OpenGL work without a visible GLDrawable or before making your drawable visible.&lt;br /&gt;
* http://jogamp.762907.n3.nabble.com/Binding-textures-without-showing-the-GLCanvas-tp960145p960234.html&lt;br /&gt;
&lt;br /&gt;
== Why you should learn direct from start the modern OpenGL (programmable and shader based) over the deprecated fixed function pipeline ==&lt;br /&gt;
&lt;br /&gt;
I see everyday A LOT of beginers who start with the old deprecated OpenGL. This is wrong, this is so wrong. [https://github.com/elect86/ I] went through this and I did it wrong because nobody told me different.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1817</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1817"/>
		<updated>2015-08-07T08:09:28Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby ]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/jogl-samples/blob/master/jogl-samples/src/helloTriangle/HelloTriangle.java Simple sample] that features GL4, pure newt, glWindow options, animator, indexed drawing, dinamic attribute and frag data binding, interleaved data, vao, vbo (with normalization on one attribute), ibo (with shorts), uniform, glsl program (with specific suffix) and matrix jogl util, gl error check, key listener and right way to dispose.&lt;br /&gt;
&lt;br /&gt;
= Common Mistakes =&lt;br /&gt;
I suggest you to take a read to these two pages for a quick overview over the most common problems, it is a very useful reading, legacy sections are carefully signaled.&lt;br /&gt;
&lt;br /&gt;
[https://www.opengl.org/wiki/Common_Mistakes OpenGL]&lt;br /&gt;
[https://www.opengl.org/wiki/GLSL_:_common_mistakes GLSL]&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1816</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1816"/>
		<updated>2015-08-05T07:51:29Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: /* Hello Triangle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby ]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/jogl-samples/blob/master/jogl-samples/src/helloTriangle/HelloTriangle.java Simple sample] that features GL4, pure newt, glWindow options, animator, indexed drawing, dinamic attribute and frag data binding, interleaved data, vao, vbo (with normalization on one attribute), ibo (with shorts), uniform, glsl program (with specific suffix) and matrix jogl util, gl error check, key listener and right way to dispose.&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1815</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1815"/>
		<updated>2015-08-05T07:51:19Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: /* Hello Triangle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby ]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/jogl-samples/blob/master/jogl-samples/src/helloTriangle/HelloTriangle.java Simple sample] that features GL4, pure newt, glWindows options, animator, indexed drawing, dinamic attribute and frag data binding, interleaved data, vao, vbo (with normalization on one attribute), ibo (with shorts), uniform, glsl program (with specific suffix) and matrix jogl util, gl error check, key listener and right way to dispose.&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1814</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1814"/>
		<updated>2015-08-05T07:49:44Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: /* Hello Triangle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby ]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/jogl-samples/blob/master/jogl-samples/src/helloTriangle/HelloTriangle.java Simple sample] that features GL4, pure newt, animator, indexed drawing, dinamic attribute and frag data binding, interleaved data, vao, vbo (with normalization on one attribute), ibo (with shorts), uniform, glsl program (with specific suffix) and matrix jogl util, gl error check, key listener and right way to dispose.&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1813</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1813"/>
		<updated>2015-08-05T07:48:21Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: /* Hello Triangle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby ]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/jogl-samples/blob/master/jogl-samples/src/helloTriangle/HelloTriangle.java Simple sample] that features GL4, pure newt, animator, indexed drawing, dinamic attribute and frag data binding, interleaved data, vao, vbo (with normalization on one attribute), ibo (with shorts), glsl program and matrix jogl util, key listener and right way to dispose.&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1812</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1812"/>
		<updated>2015-08-05T07:47:38Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby ]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/jogl-samples/blob/master/jogl-samples/src/helloTriangle/HelloTriangle.java Simple sample] that features pure newt, animator, indexed drawing, dinamic attribute and frag data binding, vao, vbo (with normalization on one attribute), ibo (with shorts), glsl program and matrix jogl util, key listener and right way to dispose&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1811</id>
		<title>Jogl Tutorial</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_Tutorial&amp;diff=1811"/>
		<updated>2015-08-05T07:47:14Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JogAmp&#039;s Static =&lt;br /&gt;
* [{{SERVER}}/jogl/doc/Overview-OpenGL-Evolution-And-JOGL.html OpenGL Evolution &amp;amp;amp; JOGL]&lt;br /&gt;
*API Doc [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc/ Public], Specs [ [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_nativewindow_spec/ Nativewindow], [{{SERVER}}/deployment/jogamp-next/javadoc/jogl/javadoc_jogl_spec/ JOGL] ] ]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/HowToBuild.html How to Build JOGL]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/userguide/ Userguide]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/deployment/JOGL-DEPLOYMENT.html Deployment]&lt;br /&gt;
* [{{SERVER}}/deployment/jogamp-current/jogl-test-applets.html JOGL Test Applets]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal.html using Object/Embed tags]&lt;br /&gt;
** [{{SERVER}}/deployment/jogamp-current/jogl-demos/applet-gears.html using the Applet Tag]&lt;br /&gt;
* [{{SERVER}}/jogl/doc/NEWT-Overview.html NEWT - High Performance Native Windowing Toolkit]&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl-demos.git;a=blob;f=src/demos/es2/RawGL2ES2demo.java;hb=HEAD OpenGL GL2ES2 GLSL Standalone Example by Xerxes Rånby ]&lt;br /&gt;
* [https://gist.github.com/gouessej/3420e2b6f632efdddf98 Rudimentary standalone example using the fixed pipeline by Julien Gouesse]&lt;br /&gt;
&lt;br /&gt;
= JogAmp&#039;s Wiki =&lt;br /&gt;
* [[Downloading and installing JOGL|Downloading and installing JOGL]]&lt;br /&gt;
** [[Jogamp_Versioning_and_Releases|Versioning And Release Information]]&lt;br /&gt;
* [[Setting up a JogAmp project in your favorite IDE|Setting up a JogAmp project in your favorite IDE]]&lt;br /&gt;
* Deployment&lt;br /&gt;
** [[JogAmp JAR File Handling|JAR File Handling]]&lt;br /&gt;
** [[Using JOGL in a Java applet|Using JOGL in a Java Applet]]&lt;br /&gt;
** [[Using JOGL in Java Web Start|Using JOGL in Java Web Start]]&lt;br /&gt;
** [[Foreign Packaging|Foreign Packaging]]&lt;br /&gt;
* JOGL&lt;br /&gt;
** [[How to write cross GLProfile compatible shader using JOGL]]&lt;br /&gt;
** [[How to use the Debug and Trace GL Pipeline and Debug GL Context]]&lt;br /&gt;
** [[Using JOGL in AWT SWT and Swing|Using JOGL in AWT, SWT, and Swing]]&lt;br /&gt;
** [[How to use X11 displays]]&lt;br /&gt;
* [[Jogl_FAQ|FAQ]]&lt;br /&gt;
&lt;br /&gt;
= JOGL Hello Triangle =&lt;br /&gt;
[https://github.com/elect86/jogl-samples/blob/master/jogl-samples/src/helloTriangle/HelloTriangle.java Simple sample] that features pure newt, animator, indexed drawing, dinamic attribute and frag data binding, vao, vbo (with normalization on one attribute), ibo (with shorts), glsl program and matrix jogl util, key listener and right way to dispose&lt;br /&gt;
&lt;br /&gt;
= Wade&#039;s JOGL tutorials =&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/ Cross-platform workbench program using Eclipse and JOGL]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/ Faster rendering with vertex buffer objects]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/ Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP]&lt;br /&gt;
* [http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/ Displaying Java OpenGL in an Eclipse RCP editor with a menu bar and a run/pause button]&lt;br /&gt;
&lt;br /&gt;
= Rami&#039;s JOGL tutorials =&lt;br /&gt;
* [http://ramisantina.com/blog/?p=8 Rami&#039;s Guide how to setup a JOGL Eclipse project]&lt;br /&gt;
&lt;br /&gt;
= [https://sites.google.com/site/justinscsstuff/jogl-tutorials Justin&#039;s Getting Started with JOGL 2 Tutorials] =&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 JOGL Tutorial 1 - Environment Setup]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 JOGL Tutorial 2 - Creating a Window]&lt;br /&gt;
* [https://sites.google.com/site/justinscsstuff/jogl-tutorial-3 JOGL Tutorial 3 - Creating a Render Loop]&lt;br /&gt;
&lt;br /&gt;
= Elect86&#039;s modern OpenGL examples =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/elect86/modern-jogl-examples Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Nils Hoffmann&#039;s Netbeans Platform examples =&lt;br /&gt;
* [https://github.com/nilshoffmann/netbeans-jogl2 Source code on Github]&lt;br /&gt;
&lt;br /&gt;
= Courses =&lt;br /&gt;
* [http://www3.ntu.edu.sg/home/ehchua/programming/opengl/JOGL2.0.html Yet Another Tutorial on JOGL 2.0 - Including Nehe JOGL Port (Chua Hock-Chuan&#039;s notes at Nanyang Tech. University)]&lt;br /&gt;
* [http://www.informatik.uni-oldenburg.de/~trigger/opengl_course.html Johannes&#039;s Courses at University of Oldenburg (German)]&lt;br /&gt;
* [http://www.manuel-carcenac.com/courses/index.html Manuel&#039;s Courses at European University of Lefke]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Graphics_in_Java/index.htm Graphics in Java incl. 3D/JOGL]&lt;br /&gt;
** [http://www.manuel-carcenac.com/courses/Advanced_Graphics_in_Java_and_JOGL/index.htm Advanced 3D Graphics in Java and Java OpenGL (JOGL 2)]&lt;br /&gt;
&lt;br /&gt;
= [http://leolol.com/tutorials/graphics_tutorials.html LeoLoL.com Tutorials] (Currently unreachable) =&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson01.html Lesson 1 - Setting up a JOGL Template]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson02.html Lesson 2 - Drawing basic 2D shapes]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson03.html Lesson 3 - Adding colour]&lt;br /&gt;
* [http://leolol.com/tutorials/graphics/lesson04.html Lesson 4 - 3D Shapes and Rotation]&lt;br /&gt;
&lt;br /&gt;
= JOGL 1 tutorials =&lt;br /&gt;
* [http://www.felixgers.de/teaching/jogl/ Felix&#039;s OpenGL and JOGL]&lt;br /&gt;
&lt;br /&gt;
== [http://www.sjonesart.com/gl.php Ste3e&#039;s JOGL tutorials] ==&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENGE3ZmZkOGItZGYzZC00ZDgzLTg0NTAtMTk1MTAwMzYxYzNk&amp;amp;hl=en Keys and Mouse]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEYTFiMmFiYzQtMDA0MC00ZWI0LWI1NjItODE3ZjM2OGUxOWEw&amp;amp;hl=en First-Person Shooter]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEZGI2NTZhZTMtYWYwNS00NTljLWFiNGQtM2UyNTYyNjAzNDYy&amp;amp;hl=en Vertex Buffer Objects]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fENWFhODk0M2UtZDY0Ni00YWM5LWIxZGUtMzM0YzMxMmRlODgx&amp;amp;hl=en Shader Setup]&lt;br /&gt;
* [https://docs.google.com/viewer?a=v&amp;amp;pid=explorer&amp;amp;chrome=true&amp;amp;srcid=0B9hhZie2D-fEMzNjNDBmMjUtNGQzNS00ODY0LWJkYmUtNDM5Y2I5ODc0Y2Nj&amp;amp;hl=en Texture Using Shaders]&lt;br /&gt;
&lt;br /&gt;
(The old (not quite up-to-date) JOGL Userguide is currently available [http://jogamp.org/jogl/doc/userguide/ here])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1801</id>
		<title>Jogl API Overview</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1801"/>
		<updated>2015-07-26T10:45:34Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before starting, you should know that the JOGL API is not a young API, this means that there are some things that are (very) old, so you should always evaluate what you are looking at.&lt;br /&gt;
&lt;br /&gt;
We will reference the links giving the priority to the main [http://jogamp.org/git/?p=jogl.git;a=tree;hb=HEAD jogamp server], but you can click also on the GitHub version ([https://github.com/sgothel/jogl GH]) for a better layout, font and support for highlighting or on the API docs ([http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ AD]).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; Preface &amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOGL API offers a lots of deep and detailed utilities for almost all the possible needs regarding OpenGL but most of them aren&#039;t used simply because people ignore about their existence. This small overview aims to alleviate this problem.&lt;br /&gt;
&lt;br /&gt;
You can find the most interesting part under [http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl;h=1b5d1802174cbd371560c9c786039870dcb106fa;hb=HEAD com.jogamp.opengl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl GH]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Shaders &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl/util/glsl;h=8e0f6ddfb2817836db16f26ecc8967553d8b6bd7;hb=HEAD com.jogamp.opengl.util.glsl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl/util/glsl GH]).&lt;br /&gt;
&lt;br /&gt;
You can create your own GLSL program in JOGL by simply calling:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    private int initProgram(GL4 gl4) {&lt;br /&gt;
        ShaderCode vertexShader = ShaderCode.create(gl4, GL4.GL_VERTEX_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;vert&amp;quot;, null, true);&lt;br /&gt;
        ShaderCode fragmentShader = ShaderCode.create(gl4, GL4.GL_FRAGMENT_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;frag&amp;quot;, null, true);&lt;br /&gt;
        ShaderProgram program = new ShaderProgram();&lt;br /&gt;
        program.add(vertexShader);&lt;br /&gt;
        program.add(fragmentShader);&lt;br /&gt;
        program.link(gl4, System.out);&lt;br /&gt;
        return program.program();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can init vertex, fragment, geometry, tesselation control and tesselation evaluation shaders (compute will be implemented soon) using [http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java;h=e1db3f7a3467c57ebddbafcda52eddc154c4866b;hb=HEAD ShaderCode.create] ([https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L683-L689 GH] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderCode.html AD]). &lt;br /&gt;
For the vertex shader, note that &amp;lt;code&amp;gt;&amp;quot;simple&amp;quot;&amp;lt;/code&amp;gt; is the name and &amp;quot;vert&amp;quot; is the custom suffix. You need to specify that if your shaders suffices differ from [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L77-L117 these]. &lt;br /&gt;
&lt;br /&gt;
The two &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; refer to the path for the binary shaders and the name. If the shaders are located in the same package of the &amp;lt;code&amp;gt;class.initProgram(gl4)&amp;lt;/code&amp;gt; you can pass  &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; also on the src path.&lt;br /&gt;
&lt;br /&gt;
Then you can create the class ShaderProgram, but please note that this has nothing to do with OpenGL, it is just Java side.&lt;br /&gt;
&lt;br /&gt;
Finally we can add the created shaders into our Program and link it. This last call is important because it is here that our program will be [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L242 initialized] on OpenGL and [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L259 linked].&lt;br /&gt;
&lt;br /&gt;
The function will also check at the end if everything [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L261 went fine] or not.&lt;br /&gt;
&lt;br /&gt;
Please note that the program id/name [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L321 &amp;lt;code&amp;gt;shaderProgram&amp;lt;/code&amp;gt;] is obtained through the [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L54 program() method], the [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L59 &amp;lt;code&amp;gt;id()&amp;lt;/code&amp;gt; method] has nothing to do with it.&lt;br /&gt;
&lt;br /&gt;
API docs: [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderCode.html ShaderCode] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderProgram.html ShaderProgram] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderState.html ShaderState] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderUtil.html ShaderUtil]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Textures &amp;lt;/h3&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1800</id>
		<title>Jogl API Overview</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1800"/>
		<updated>2015-07-26T10:43:04Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before starting, you should know that the JOGL API is not a young API, this means that there are some things that are (very) old, so you should always evaluate what you are looking at.&lt;br /&gt;
&lt;br /&gt;
We will reference the links giving the priority to the main [http://jogamp.org/git/?p=jogl.git;a=tree;hb=HEAD jogamp server], but you can click also on the GitHub version ([https://github.com/sgothel/jogl GH]) for a better layout, font and support for highlighting or on the API docs ([http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ AD]).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; Preface &amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOGL API offers a lots of deep and detailed utilities for almost all the possible needs regarding OpenGL but most of them aren&#039;t used simply because people ignore about their existence. This small overview aims to alleviate this problem.&lt;br /&gt;
&lt;br /&gt;
You can find the most interesting part under [http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl;h=1b5d1802174cbd371560c9c786039870dcb106fa;hb=HEAD com.jogamp.opengl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl GH]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Shaders &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl/util/glsl;h=8e0f6ddfb2817836db16f26ecc8967553d8b6bd7;hb=HEAD com.jogamp.opengl.util.glsl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl/util/glsl GH]).&lt;br /&gt;
&lt;br /&gt;
You can create your own GLSL program in JOGL by simply calling:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    private int initProgram(GL4 gl4) {&lt;br /&gt;
        ShaderCode vertexShader = ShaderCode.create(gl4, GL4.GL_VERTEX_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;vert&amp;quot;, null, true);&lt;br /&gt;
        ShaderCode fragmentShader = ShaderCode.create(gl4, GL4.GL_FRAGMENT_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;frag&amp;quot;, null, true);&lt;br /&gt;
        ShaderProgram program = new ShaderProgram();&lt;br /&gt;
        program.add(vertexShader);&lt;br /&gt;
        program.add(fragmentShader);&lt;br /&gt;
        program.link(gl4, System.out);&lt;br /&gt;
        return program.program();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can init vertex, fragment, geometry, tesselation control and tesselation evaluation shaders (compute will be implemented soon) using [http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java;h=e1db3f7a3467c57ebddbafcda52eddc154c4866b;hb=HEAD ShaderCode.create] ([https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L683-L689 GH] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderCode.html AD]). &lt;br /&gt;
For the vertex shader, note that &amp;lt;code&amp;gt;&amp;quot;simple&amp;quot;&amp;lt;/code&amp;gt; is the name and &amp;quot;vert&amp;quot; is the custom suffix. You need to specify that if your shaders suffices differ from [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L77-L117 these]. &lt;br /&gt;
&lt;br /&gt;
The two &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; refer to the path for the binary shaders and the name. If the shaders are located in the same package of the &amp;lt;code&amp;gt;class.initProgram(gl4)&amp;lt;/code&amp;gt; you can pass  &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; also on the src path.&lt;br /&gt;
&lt;br /&gt;
Then you can create the class ShaderProgram, but please note that this has nothing to do with OpenGL, it is just Java side.&lt;br /&gt;
&lt;br /&gt;
Finally we can add the created shaders into our Program and link it. This last call is important because it is here that our program will be [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L242 initialized] on OpenGL and [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L259 linked].&lt;br /&gt;
&lt;br /&gt;
The function will also check at the end if everything [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L261 went fine] or not.&lt;br /&gt;
&lt;br /&gt;
Please note that the program id/name [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L321 &amp;lt;code&amp;gt;shaderProgram&amp;lt;/code&amp;gt;] is obtained through the [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L54 program() method], the [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L59 &amp;lt;code&amp;gt;id()&amp;lt;/code&amp;gt; method] has nothing to do with it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Textures &amp;lt;/h3&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1799</id>
		<title>Jogl API Overview</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1799"/>
		<updated>2015-07-26T10:42:16Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before starting, you should know that the JOGL API is not a young API, this means that there are some things that are (very) old, so you should always evaluate what you are looking at.&lt;br /&gt;
&lt;br /&gt;
We will reference all the links to the main [http://jogamp.org/git/?p=jogl.git;a=tree;hb=HEAD jogamp server], but you can click also on the GitHub version ([https://github.com/sgothel/jogl GH]) for a better layout, font and support for highlighting or on the API docs ([http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ AD]).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; Preface &amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOGL API offers a lots of deep and detailed utilities for almost all the possible needs regarding OpenGL but most of them aren&#039;t used simply because people ignore about their existence. This small overview aims to alleviate this problem.&lt;br /&gt;
&lt;br /&gt;
You can find the most interesting part under [http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl;h=1b5d1802174cbd371560c9c786039870dcb106fa;hb=HEAD com.jogamp.opengl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl GH]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Shaders &amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl/util/glsl;h=8e0f6ddfb2817836db16f26ecc8967553d8b6bd7;hb=HEAD com.jogamp.opengl.util.glsl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl/util/glsl GH]).&lt;br /&gt;
&lt;br /&gt;
You can create your own GLSL program in JOGL by simply calling:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    private int initProgram(GL4 gl4) {&lt;br /&gt;
        ShaderCode vertexShader = ShaderCode.create(gl4, GL4.GL_VERTEX_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;vert&amp;quot;, null, true);&lt;br /&gt;
        ShaderCode fragmentShader = ShaderCode.create(gl4, GL4.GL_FRAGMENT_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;frag&amp;quot;, null, true);&lt;br /&gt;
        ShaderProgram program = new ShaderProgram();&lt;br /&gt;
        program.add(vertexShader);&lt;br /&gt;
        program.add(fragmentShader);&lt;br /&gt;
        program.link(gl4, System.out);&lt;br /&gt;
        return program.program();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can init vertex, fragment, geometry, tesselation control and tesselation evaluation shaders (compute will be implemented soon) using [http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java;h=e1db3f7a3467c57ebddbafcda52eddc154c4866b;hb=HEAD ShaderCode.create] ([https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L683-L689 GH] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderCode.html AD]). &lt;br /&gt;
For the vertex shader, note that &amp;lt;code&amp;gt;&amp;quot;simple&amp;quot;&amp;lt;/code&amp;gt; is the name and &amp;quot;vert&amp;quot; is the custom suffix. You need to specify that if your shaders suffices differ from [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L77-L117 these]. &lt;br /&gt;
&lt;br /&gt;
The two &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; refer to the path for the binary shaders and the name. If the shaders are located in the same package of the &amp;lt;code&amp;gt;class.initProgram(gl4)&amp;lt;/code&amp;gt; you can pass  &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; also on the src path.&lt;br /&gt;
&lt;br /&gt;
Then you can create the class ShaderProgram, but please note that this has nothing to do with OpenGL, it is just Java side.&lt;br /&gt;
&lt;br /&gt;
Finally we can add the created shaders into our Program and link it. This last call is important because it is here that our program will be [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L242 initialized] on OpenGL and [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L259 linked].&lt;br /&gt;
&lt;br /&gt;
The function will also check at the end if everything [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L261 went fine] or not.&lt;br /&gt;
&lt;br /&gt;
Please note that the program id/name [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L321 &amp;lt;code&amp;gt;shaderProgram&amp;lt;/code&amp;gt;] is obtained through the [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L54 program() method], the [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L59 &amp;lt;code&amp;gt;id()&amp;lt;/code&amp;gt; method] has nothing to do with it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt; Textures &amp;lt;/h3&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1798</id>
		<title>Jogl API Overview</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1798"/>
		<updated>2015-07-26T10:40:35Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before starting, you should know that the JOGL API is not a young API, this means that there are some things that are (very) old, so you should always evaluate what you are looking at.&lt;br /&gt;
&lt;br /&gt;
We will reference all the links to the main [http://jogamp.org/git/?p=jogl.git;a=tree;hb=HEAD jogamp server], but you can click also on the GitHub version ([https://github.com/sgothel/jogl GH]) for a better layout, font and support for highlighting or on the API docs ([http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ AD]).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; Preface &amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOGL API offers a lots of deep and detailed utilities for almost all the possible needs regarding OpenGL but most of them aren&#039;t used simply because people ignore about their existence. This small overview aims to alleviate this problem.&lt;br /&gt;
&lt;br /&gt;
You can find the most interesting part under [http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl;h=1b5d1802174cbd371560c9c786039870dcb106fa;hb=HEAD com.jogamp.opengl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl GH]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt; Shaders &amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl/util/glsl;h=8e0f6ddfb2817836db16f26ecc8967553d8b6bd7;hb=HEAD com.jogamp.opengl.util.glsl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl/util/glsl GH]).&lt;br /&gt;
&lt;br /&gt;
You can create your own GLSL program in JOGL by simply calling:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    private int initProgram(GL4 gl4) {&lt;br /&gt;
        ShaderCode vertexShader = ShaderCode.create(gl4, GL4.GL_VERTEX_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;vert&amp;quot;, null, true);&lt;br /&gt;
        ShaderCode fragmentShader = ShaderCode.create(gl4, GL4.GL_FRAGMENT_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;frag&amp;quot;, null, true);&lt;br /&gt;
        ShaderProgram program = new ShaderProgram();&lt;br /&gt;
        program.add(vertexShader);&lt;br /&gt;
        program.add(fragmentShader);&lt;br /&gt;
        program.link(gl4, System.out);&lt;br /&gt;
        return program.program();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can init vertex, fragment, geometry, tesselation control and tesselation evaluation shaders (compute will be implemented soon) using [http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java;h=e1db3f7a3467c57ebddbafcda52eddc154c4866b;hb=HEAD ShaderCode.create] ([https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L683-L689 GH] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderCode.html AD]). &lt;br /&gt;
For the vertex shader, note that &amp;lt;code&amp;gt;&amp;quot;simple&amp;quot;&amp;lt;/code&amp;gt; is the name and &amp;quot;vert&amp;quot; is the custom suffix. You need to specify that if your shaders suffices differ from [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L77-L117 these]. &lt;br /&gt;
&lt;br /&gt;
The two &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; refer to the path for the binary shaders and the name. If the shaders are located in the same package of the &amp;lt;code&amp;gt;class.initProgram(gl4)&amp;lt;/code&amp;gt; you can pass  &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; also on the src path.&lt;br /&gt;
&lt;br /&gt;
Then you can create the class ShaderProgram, but please note that this has nothing to do with OpenGL, it is just Java side.&lt;br /&gt;
&lt;br /&gt;
Finally we can add the created shaders into our Program and link it. This last call is important because it is here that our program will be [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L242 initialized] on OpenGL and [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L259 linked].&lt;br /&gt;
&lt;br /&gt;
The function will also check at the end if everything [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L261 went fine] or not.&lt;br /&gt;
&lt;br /&gt;
Please note that the program id/name [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L321 &amp;lt;code&amp;gt;shaderProgram&amp;lt;/code&amp;gt;] is obtained through the [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L54 program() method], the [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L59 &amp;lt;code&amp;gt;id()&amp;lt;/code&amp;gt; method] has nothing to do with it.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1797</id>
		<title>Jogl API Overview</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1797"/>
		<updated>2015-07-26T10:39:32Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before starting, you should know that the JOGL API is not a young API, this means that there are some things that are (very) old, so you should always evaluate what you are looking at.&lt;br /&gt;
&lt;br /&gt;
We will reference all the links to the main [http://jogamp.org/git/?p=jogl.git;a=tree;hb=HEAD jogamp server], but you can click also on the GitHub version ([https://github.com/sgothel/jogl GH]) for a better layout, font and support for highlighting or on the API docs ([http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ AD]).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; Preface &amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOGL API offers a lots of deep and detailed utilities for almost all the possible needs regarding OpenGL but most of them aren&#039;t used simply because people ignore about their existence. This small overview aims to alleviate this problem.&lt;br /&gt;
&lt;br /&gt;
You can find the most interesting part under [http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl;h=1b5d1802174cbd371560c9c786039870dcb106fa;hb=HEAD com.jogamp.opengl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl GH]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt; Shaders &amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl/util/glsl;h=8e0f6ddfb2817836db16f26ecc8967553d8b6bd7;hb=HEAD com.jogamp.opengl.util.glsl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl/util/glsl GH]).&lt;br /&gt;
&lt;br /&gt;
You can create your own GLSL program in JOGL by simply calling:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    private int initProgram(GL4 gl4) {&lt;br /&gt;
        ShaderCode vertexShader = ShaderCode.create(gl4, GL4.GL_VERTEX_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;vert&amp;quot;, null, true);&lt;br /&gt;
        ShaderCode fragmentShader = ShaderCode.create(gl4, GL4.GL_FRAGMENT_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;frag&amp;quot;, null, true);&lt;br /&gt;
        ShaderProgram program = new ShaderProgram();&lt;br /&gt;
        program.add(vertexShader);&lt;br /&gt;
        program.add(fragmentShader);&lt;br /&gt;
        program.link(gl4, System.out);&lt;br /&gt;
        return program.program();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can init vertex, fragment, geometry, tesselation control and tesselation evaluation shaders (compute will be implemented soon) using [http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java;h=e1db3f7a3467c57ebddbafcda52eddc154c4866b;hb=HEAD ShaderCode.create] ([https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L683-L689 GH] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderCode.html AD]). &lt;br /&gt;
For the vertex shader, note that &amp;lt;code&amp;gt;&amp;quot;simple&amp;quot;&amp;lt;/code&amp;gt; is the name and &amp;quot;vert&amp;quot; is the custom suffix. You need to specify that if your shaders suffices differ from [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L77-L117 these]. &lt;br /&gt;
&lt;br /&gt;
The two &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; refer to the path for the binary shaders and the name. If the shaders are located in the same package of the &amp;lt;code&amp;gt;class.initProgram(gl4)&amp;lt;/code&amp;gt; you can pass  &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; also on the src path.&lt;br /&gt;
&lt;br /&gt;
Then you can create the class ShaderProgram, but please note that this has nothing to do with OpenGL, it is just Java side.&lt;br /&gt;
&lt;br /&gt;
Finally we can add the created shaders into our Program and link it. This last call is important because it is here that our program will be [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L242 initialized] on OpenGL and [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L259 linked].&lt;br /&gt;
&lt;br /&gt;
The function will also check at the end if everything [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L261 went fine] or not.&lt;br /&gt;
&lt;br /&gt;
Please note that the program id/name [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L321 &amp;lt;code&amp;gt;shaderProgram&amp;lt;/code&amp;gt;] is obtained through the [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderProgram.java#L54 program() method]&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1796</id>
		<title>Jogl API Overview</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1796"/>
		<updated>2015-07-26T10:28:02Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before starting, you should know that the JOGL API is not a young API, this means that there are some things that are (very) old, so you should always evaluate what you are looking at.&lt;br /&gt;
&lt;br /&gt;
We will reference all the links to the main [http://jogamp.org/git/?p=jogl.git;a=tree;hb=HEAD jogamp server], but you can click also on the GitHub version ([https://github.com/sgothel/jogl GH]) for a better layout, font and support for highlighting or on the API docs ([http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ AD]).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; Preface &amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOGL API offers a lots of deep and detailed utilities for almost all the possible needs regarding OpenGL but most of them aren&#039;t used simply because people ignore about their existence. This small overview aims to alleviate this problem.&lt;br /&gt;
&lt;br /&gt;
You can find the most interesting part under [http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl;h=1b5d1802174cbd371560c9c786039870dcb106fa;hb=HEAD com.jogamp.opengl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl GH]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt; Shaders &amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl/util/glsl;h=8e0f6ddfb2817836db16f26ecc8967553d8b6bd7;hb=HEAD com.jogamp.opengl.util.glsl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl/util/glsl GH]).&lt;br /&gt;
&lt;br /&gt;
You can create your own GLSL program in JOGL by simply calling:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    private int initProgram(GL4 gl4) {&lt;br /&gt;
        ShaderCode vertexShader = ShaderCode.create(gl4, GL4.GL_VERTEX_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;vert&amp;quot;, null, true);&lt;br /&gt;
        ShaderCode fragmentShader = ShaderCode.create(gl4, GL4.GL_FRAGMENT_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;frag&amp;quot;, null, true);&lt;br /&gt;
        ShaderProgram program = new ShaderProgram();&lt;br /&gt;
        program.add(vertexShader);&lt;br /&gt;
        program.add(fragmentShader);&lt;br /&gt;
        program.link(gl4, System.out);&lt;br /&gt;
        return program.program();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can init vertex, fragment, geometry, tesselation control and tesselation evaluation shaders (compute will be implemented soon) using [http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java;h=e1db3f7a3467c57ebddbafcda52eddc154c4866b;hb=HEAD ShaderCode.create] ([https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L683-L689 GH] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderCode.html AD]). &lt;br /&gt;
For the vertex shader, note that &amp;lt;code&amp;gt;&amp;quot;simple&amp;quot;&amp;lt;/code&amp;gt; is the name and &amp;quot;vert&amp;quot; is the custom suffix. You need to specify that if your shaders suffices differ from [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L77-L117 these]. &lt;br /&gt;
&lt;br /&gt;
The two &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; refer to the path for the binary shaders and the name. If the shaders are located in the same package of the &amp;lt;code&amp;gt;class.initProgram(gl4)&amp;lt;/code&amp;gt; you can pass  &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; also on the src path.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1795</id>
		<title>Jogl API Overview</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1795"/>
		<updated>2015-07-26T10:25:37Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before starting, you should know that the JOGL API is not a young API, this means that there are some things that are (very) old, so you should always evaluate what you are looking at.&lt;br /&gt;
&lt;br /&gt;
We will reference all the links to the main [http://jogamp.org/git/?p=jogl.git;a=tree;hb=HEAD jogamp server], but you can click also on the GitHub version ([https://github.com/sgothel/jogl GH]) for a better layout, font and support for highlighting or on the API docs ([http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ AD]).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; Preface &amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOGL API offers a lots of deep and detailed utilities for almost all the possible needs regarding OpenGL but most of them aren&#039;t used simply because people ignore about their existence. This small overview aims to alleviate this problem.&lt;br /&gt;
&lt;br /&gt;
You can find the most interesting part under [http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl;h=1b5d1802174cbd371560c9c786039870dcb106fa;hb=HEAD com.jogamp.opengl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl GH]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt; Shaders &amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl/util/glsl;h=8e0f6ddfb2817836db16f26ecc8967553d8b6bd7;hb=HEAD com.jogamp.opengl.util.glsl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl/util/glsl GH]).&lt;br /&gt;
&lt;br /&gt;
You can create your own GLSL program in JOGL by simply calling:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    private int initProgram(GL4 gl4) {&lt;br /&gt;
        ShaderCode vertexShader = ShaderCode.create(gl4, GL4.GL_VERTEX_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;vert&amp;quot;, null, true);&lt;br /&gt;
        ShaderCode fragmentShader = ShaderCode.create(gl4, GL4.GL_FRAGMENT_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;frag&amp;quot;, null, true);&lt;br /&gt;
        ShaderProgram program = new ShaderProgram();&lt;br /&gt;
        program.add(vertexShader);&lt;br /&gt;
        program.add(fragmentShader);&lt;br /&gt;
        program.link(gl4, System.out);&lt;br /&gt;
        return program.program();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can init vertex, fragment, geometry, tesselation control and tesselation evaluation shaders (compute will be implemented soon) using [http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java;h=e1db3f7a3467c57ebddbafcda52eddc154c4866b;hb=HEAD ShaderCode.create] ([https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L683-L689 GH] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderCode.html AD]). &lt;br /&gt;
For the vertex shader, note that &amp;lt;code&amp;gt;&amp;quot;simple&amp;quot;&amp;lt;/code&amp;gt; is the name and &amp;quot;vert&amp;quot; is the custom suffix. You need to specify that if your shaders suffices differ from [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L77-L117 these]. &lt;br /&gt;
The two &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; refer to the path for the binary shaders and the name. If the shaders are located in the same package of the &amp;lt;code&amp;gt;class.initProgram(gl4)&amp;lt;/code&amp;gt; you can pass  &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; also on the src path.&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1794</id>
		<title>Jogl API Overview</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1794"/>
		<updated>2015-07-26T10:22:44Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before starting, you should know that the JOGL API is not a young API, this means that there are some things that are (very) old, so you should always evaluate what you are looking at.&lt;br /&gt;
&lt;br /&gt;
We will reference all the links to the main [http://jogamp.org/git/?p=jogl.git;a=tree;hb=HEAD jogamp server], but you can click also on the GitHub version ([https://github.com/sgothel/jogl GH]) for a better layout, font and support for highlighting or on the API docs ([http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ AD]).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; Preface &amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOGL API offers a lots of deep and detailed utilities for almost all the possible needs regarding OpenGL but most of them aren&#039;t used simply because people ignore about their existence. This small overview aims to alleviate this problem.&lt;br /&gt;
&lt;br /&gt;
You can find the most interesting part under [http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl;h=1b5d1802174cbd371560c9c786039870dcb106fa;hb=HEAD com.jogamp.opengl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl GH]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt; Shaders &amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl/util/glsl;h=8e0f6ddfb2817836db16f26ecc8967553d8b6bd7;hb=HEAD com.jogamp.opengl.util.glsl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl/util/glsl GH]).&lt;br /&gt;
&lt;br /&gt;
You can create your own GLSL program in JOGL by simply calling:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    private int initProgram(GL4 gl4) {&lt;br /&gt;
        ShaderCode vertexShader = ShaderCode.create(gl4, GL4.GL_VERTEX_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;vert&amp;quot;, null, true);&lt;br /&gt;
        ShaderCode fragmentShader = ShaderCode.create(gl4, GL4.GL_FRAGMENT_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;frag&amp;quot;, null, true);&lt;br /&gt;
        ShaderProgram program = new ShaderProgram();&lt;br /&gt;
        program.add(vertexShader);&lt;br /&gt;
        program.add(fragmentShader);&lt;br /&gt;
        program.link(gl4, System.out);&lt;br /&gt;
        return program.program();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can init vertex, fragment, geometry, tesselation control and tesselation evaluation shaders (compute will be implemented soon) using [http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java;h=e1db3f7a3467c57ebddbafcda52eddc154c4866b;hb=HEAD ShaderCode.create] ([https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L683-L689 GH] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderCode.html AD]). &lt;br /&gt;
For the vertex shader, note that &amp;lt;code&amp;gt;&amp;quot;simple&amp;quot;&amp;lt;/code&amp;gt; is the name and &amp;quot;vert&amp;quot; is the custom suffix. You need to specify that if your shaders suffices differ from [https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L77-L117 these].&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1793</id>
		<title>Jogl API Overview</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1793"/>
		<updated>2015-07-26T10:20:24Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before starting, you should know that the JOGL API is not a young API, this means that there are some things that are (very) old, so you should always evaluate what you are looking at.&lt;br /&gt;
&lt;br /&gt;
We will reference all the links to the main [http://jogamp.org/git/?p=jogl.git;a=tree;hb=HEAD jogamp server], but you can click also on the GitHub version ([https://github.com/sgothel/jogl GH]) for a better layout, font and support for highlighting or on the API docs ([http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ AD]).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; Preface &amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOGL API offers a lots of deep and detailed utilities for almost all the possible needs regarding OpenGL but most of them aren&#039;t used simply because people ignore about their existence. This small overview aims to alleviate this problem.&lt;br /&gt;
&lt;br /&gt;
You can find the most interesting part under [http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl;h=1b5d1802174cbd371560c9c786039870dcb106fa;hb=HEAD com.jogamp.opengl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl GH]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt; Shaders &amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl/util/glsl;h=8e0f6ddfb2817836db16f26ecc8967553d8b6bd7;hb=HEAD com.jogamp.opengl.util.glsl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl/util/glsl GH]).&lt;br /&gt;
&lt;br /&gt;
You can create your own GLSL program in JOGL by simply calling:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    private int initProgram(GL4 gl4) {&lt;br /&gt;
        ShaderCode vertexShader = ShaderCode.create(gl4, GL4.GL_VERTEX_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;vert&amp;quot;, null, true);&lt;br /&gt;
        ShaderCode fragmentShader = ShaderCode.create(gl4, GL4.GL_FRAGMENT_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;frag&amp;quot;, null, true);&lt;br /&gt;
        ShaderProgram program = new ShaderProgram();&lt;br /&gt;
        program.add(vertexShader);&lt;br /&gt;
        program.add(fragmentShader);&lt;br /&gt;
        program.link(gl4, System.out);&lt;br /&gt;
        return program.program();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can init vertex, fragment, geometry, tesselation control and tesselation evaluation shaders (compute will be implemented soon) using [http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java;h=e1db3f7a3467c57ebddbafcda52eddc154c4866b;hb=HEAD ShaderCode.create] ([https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L683-L689 GH] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderCode.html AD]). &lt;br /&gt;
Note that &amp;lt;code&amp;gt;&amp;quot;simple&amp;quot;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1792</id>
		<title>Jogl API Overview</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1792"/>
		<updated>2015-07-26T10:17:33Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before starting, you should know that the JOGL API is not a young API, this means that there are some things that are (very) old, so you should always evaluate what you are looking at.&lt;br /&gt;
&lt;br /&gt;
We will reference all the links to the main [http://jogamp.org/git/?p=jogl.git;a=tree;hb=HEAD jogamp server], but you can click also on the GitHub version ([https://github.com/sgothel/jogl GH]) for a better layout, font and support for highlighting or on the API docs ([http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ AD]).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; Preface &amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOGL API offers a lots of deep and detailed utilities for almost all the possible needs regarding OpenGL but most of them aren&#039;t used simply because people ignore about their existence. This small overview aims to alleviate this problem.&lt;br /&gt;
&lt;br /&gt;
You can find the most interesting part under [http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl;h=1b5d1802174cbd371560c9c786039870dcb106fa;hb=HEAD com.jogamp.opengl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl GH]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt; Shaders &amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl/util/glsl;h=8e0f6ddfb2817836db16f26ecc8967553d8b6bd7;hb=HEAD com.jogamp.opengl.util.glsl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl/util/glsl GH]).&lt;br /&gt;
&lt;br /&gt;
You can create your own GLSL program in JOGL by simply calling:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    private int initProgram(GL4 gl4) {&lt;br /&gt;
        ShaderCode vertexShader = ShaderCode.create(gl4, GL4.GL_VERTEX_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;vert&amp;quot;, null, true);&lt;br /&gt;
        ShaderCode fragmentShader = ShaderCode.create(gl4, GL4.GL_FRAGMENT_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;frag&amp;quot;, null, true);&lt;br /&gt;
        ShaderProgram program = new ShaderProgram();&lt;br /&gt;
        program.add(vertexShader);&lt;br /&gt;
        program.add(fragmentShader);&lt;br /&gt;
        program.link(gl4, System.out);&lt;br /&gt;
        return program.program();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can init vertex, fragment, geometry, tesselation control and tesselation evaluation shaders (compute will be implemented soon) using [http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java;h=e1db3f7a3467c57ebddbafcda52eddc154c4866b;hb=HEAD ShaderCode.create] ([https://github.com/sgothel/jogl/blob/master/src/jogl/classes/com/jogamp/opengl/util/glsl/ShaderCode.java#L683-L689 GH] [http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/com/jogamp/opengl/util/glsl/ShaderCode.html AD])&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1791</id>
		<title>Jogl API Overview</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Jogl_API_Overview&amp;diff=1791"/>
		<updated>2015-07-26T10:12:57Z</updated>

		<summary type="html">&lt;p&gt;Gbarbieri: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before starting, you should know that the JOGL API is not a young API, this means that there are some things that are (very) old, so you should always evaluate what you are looking at.&lt;br /&gt;
&lt;br /&gt;
We will reference all the links to the main [http://jogamp.org/git/?p=jogl.git;a=tree;hb=HEAD jogamp server], but you can click also on the GitHub version ([https://github.com/sgothel/jogl GH]) for a better layout, font and support for highlighting or on the API docs ([http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ AD]).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h5&amp;gt; Preface &amp;lt;/h5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JOGL API offers a lots of deep and detailed utilities for almost all the possible needs regarding OpenGL but most of them aren&#039;t used simply because people ignore about their existence. This small overview aims to alleviate this problem.&lt;br /&gt;
&lt;br /&gt;
You can find the most interesting part under [http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl;h=1b5d1802174cbd371560c9c786039870dcb106fa;hb=HEAD com.jogamp.opengl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl GH]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt; Shaders &amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://jogamp.org/git/?p=jogl.git;a=tree;f=src/jogl/classes/com/jogamp/opengl/util/glsl;h=8e0f6ddfb2817836db16f26ecc8967553d8b6bd7;hb=HEAD com.jogamp.opengl.util.glsl] ([https://github.com/sgothel/jogl/tree/master/src/jogl/classes/com/jogamp/opengl/util/glsl GH]).&lt;br /&gt;
&lt;br /&gt;
You can create your own GLSL program in JOGL by simply calling:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    private int initProgram(GL4 gl4) {&lt;br /&gt;
        ShaderCode vertexShader = ShaderCode.create(gl4, GL4.GL_VERTEX_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;vert&amp;quot;, null, true);&lt;br /&gt;
        ShaderCode fragmentShader = ShaderCode.create(gl4, GL4.GL_FRAGMENT_SHADER, this.getClass(), &amp;quot;src/data&amp;quot;, null, &amp;quot;simple&amp;quot;, &amp;quot;frag&amp;quot;, null, true);&lt;br /&gt;
        ShaderProgram program = new ShaderProgram();&lt;br /&gt;
        program.add(vertexShader);&lt;br /&gt;
        program.add(fragmentShader);&lt;br /&gt;
        program.link(gl4, System.out);&lt;br /&gt;
        return program.program();&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gbarbieri</name></author>
	</entry>
</feed>