<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Planet JogAmp</title>
    <link>http://jogamp.org/planet/rss_2.0.xml</link>
    <description>JogAmp Aggregated Feeds</description>
    <dc:creator>Hungry Harry</dc:creator>
    <item>
      <title>Version 3.1.0</title>
      <link>http://www.dyn4j.org/archives/239</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dyn4j.org/archives/239/feed</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>The latest release of dyn4j adds a number of new features. See the features page for more details or the release notes. It also contains a number of important bug fixes. On the other hand, the API has been changed slightly and may break code written against older versions. The Sandbox app has also seen [...]</description>
      <content:encoded>&lt;p&gt;The latest release of dyn4j adds a number of new features.  See the &lt;a href="http://www.dyn4j.org/features" title="Features"&gt;features&lt;/a&gt; page for more details or the &lt;a href="http://code.google.com/p/dyn4j/" title="Latest Release Notes" target="_blank"&gt;release notes&lt;/a&gt;.  It also contains a number of important bug fixes.  On the other hand, the API has been changed slightly and may break code written against older versions.&lt;/p&gt;
&lt;p&gt;The Sandbox app has also seen some changes.  Many bug fixes along with the features in dyn4j have been added.  In addition, the threading issue on some platforms has been resolved by using the Newt-AWT bridge offered by JOGL.  This makes the app far more efficient at handling input.  The Sandbox includes precompiled tests along with the declarative (xml) tests.  This allows the deprecation of the TestBed application.  The Sandbox will take its place as the sole testing application.&lt;/p&gt;
&lt;div style="text-align: center;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="border: none; width: 100%;"&gt;
&lt;tr&gt;
&lt;td style="border: none;"&gt;Launch the Sandbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border: none;"&gt;&lt;a href="http://www.dyn4j.org/Sandbox/latest/dyn4j-Sandbox.jnlp" target="_self"&gt;&lt;img src="http://www.dyn4j.org/images/jws_launch.gif" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;When running the Sandbox application you may be asked to accept a certificate from me (I just self signed the JARs).  The certificates will expire six months from today.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Both applications require Java 1.6+.&lt;/p&gt;</content:encoded>
      <category>Uncategorized</category>
      <pubDate>Sun, 06 May 2012 02:08:26 GMT</pubDate>
      <guid isPermaLink="false">http://www.dyn4j.org/?p=239</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2012-05-06T02:08:26Z</dc:date>
    </item>
    <item>
      <title>Awesome! Just as last year @twbompo ported my PC 4k entry for...</title>
      <link>http://copypastaresearch.tumblr.com/post/22340553339</link>
      <description>&lt;img src="http://24.media.tumblr.com/tumblr_m3gunwYyoQ1qdsecho1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Awesome! &lt;a href="http://copypastaresearch.tumblr.com/post/6330391822/awesome-twbombo-ported"&gt;Just as last year&lt;/a&gt; &lt;a href="https://twitter.com/#!/twbompo"&gt;@twbompo&lt;/a&gt; ported my PC 4k entry for Revision 2012 ?&lt;a href="http://copypastaresearch.tumblr.com/post/22049217566/as-the-fragment-main-and-post-processing-shaders"&gt;Hartverdrahtet&lt;/a&gt;? to WebGL (using libgdx). Nice Job! The port is available &lt;a href="http://bompo-content.appspot.com/webgl/hartverdrahtet/index.html"&gt;here&lt;/a&gt;. It?s always encouraging to see that it actually pays off opensourcing ur stuff :)&lt;/p&gt;</description>
      <category>WebGL</category>
      <category>PC 4k</category>
      <category>GLSL</category>
      <category>JOGL</category>
      <category>Port</category>
      <category>Demoscene</category>
      <category>revision 2012</category>
      <pubDate>Thu, 03 May 2012 21:35:56 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/22340553339</guid>
      <dc:date>2012-05-03T21:35:56Z</dc:date>
    </item>
    <item>
      <title>As the fragment main and post-processing shaders of my Revision...</title>
      <link>http://copypastaresearch.tumblr.com/post/22049217566</link>
      <description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/UjgRGDhgehA?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;As the fragment main and post-processing shaders of my Revision 2012 PC 4k entry port were processed or better ?obfusicated? with &lt;a href="http://www.ctrl-alt-test.fr/?page_id=7"&gt;the shader minifier tool&lt;/a&gt; to meet the size restriction of &lt;=4096 bytes, it became nearly impossible to understand or make any sense of the GLSL code. So here is the ?unminified? version with additional comments I used during development (as good as it gets):?&lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/shaders/raymarchingshaders/hartverdrahtet_development_main.fs"&gt;main.fs&lt;/a&gt; &lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/shaders/raymarchingshaders/hartverdrahtet_development_post.fs"&gt;post.fs&lt;/a&gt;&lt;/p&gt;</description>
      <category>Revision 2012</category>
      <category>PC 4k</category>
      <category>1st Place</category>
      <category>Fractals</category>
      <category>GLSL</category>
      <category>Raymarching</category>
      <category>Demoscene</category>
      <category>Akronyme Analogiker</category>
      <category>JOGL2</category>
      <pubDate>Sun, 29 Apr 2012 14:45:22 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/22049217566</guid>
      <dc:date>2012-04-29T14:45:22Z</dc:date>
    </item>
    <item>
      <title>As promised before, here?s the direct 1:1 JOGL2 port of my PC 4k...</title>
      <link>http://copypastaresearch.tumblr.com/post/22048623038</link>
      <description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/iPaxlPT3vkw?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://copypastaresearch.tumblr.com/post/21141853592/back-from-revision-2012-it-was-a-blast-to-say"&gt;As promised before&lt;/a&gt;, here?s the direct 1:1 JOGL2 port of my PC 4k intro competition entry for Revision 2012. Sure it got a little bigger while porting but the shader and control code remained more or less untouched.?&lt;/p&gt;
&lt;p&gt;The intro renders a fullscreen billboard using a single fragment shader. The shader basically encapsulates &lt;a href="http://graphics.cs.uiuc.edu/~jch/papers/zeno.pdf"&gt;a?sphere-tracing based raymarcher&lt;/a&gt; for a single fractal formula with camera handling. Additionally a second post-processing shader is applied to the render output from the raymarching shader. Post effects are god-rays, tv-lines and noise to make the overall look more interesting and less ?sterile?. The different intro parts are all parameter and camera position variations of the same fractal.?Anyway, code as always on Github:?&lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/src/jogamp/routine/jogl/programmablepipeline/GL3_Hartverdrahtet_Port.java"&gt;GL3_Hartverdrahtet_Port.java&lt;/a&gt;?and the corresponding main+postprocessing shaders: &lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/shaders/raymarchingshaders/hartverdrahtet_port_main.fs"&gt;main.fs&lt;/a&gt; &lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/shaders/raymarchingshaders/hartverdrahtet_port_post.fs"&gt;post.fs&lt;/a&gt;&lt;/p&gt;</description>
      <category>Revision 2012</category>
      <category>PC 4k</category>
      <category>1st Place</category>
      <category>Fractals</category>
      <category>GLSL</category>
      <category>Raymarching</category>
      <category>Demoscene</category>
      <category>Akronyme Analogiker</category>
      <category>JOGL2</category>
      <pubDate>Sun, 29 Apr 2012 14:33:36 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/22048623038</guid>
      <dc:date>2012-04-29T14:33:36Z</dc:date>
    </item>
    <item>
      <title>Jogl/JogAmp Status Update ..</title>
      <link>http://jausoft.com/blog/2012/04/19/jogljogamp-status-update/</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jausoft.com/blog/2012/04/19/jogljogamp-status-update/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>Last weeks the new video streaming feature GLMediaPlayer was added for Android and machines w/ Libav/FFmpeg pre-installed. We produced a presentation video showcasing JogAmp&amp;#8217;s objectives: Jogl/JogAmp on the Web, Desktop and Mobile 2012 RC6 is now underway, I still have to add some supplied patches and walk through the buglist though. However, this time I [...]</description>
      <content:encoded>&lt;p&gt;Last weeks the new video streaming feature &lt;a href='http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java;hb=HEAD'&gt;GLMediaPlayer&lt;/a&gt;&lt;br /&gt;
was added for Android and machines w/ Libav/FFmpeg pre-installed.&lt;/p&gt;
&lt;p&gt;We produced a presentation video showcasing JogAmp&amp;#8217;s objectives:&lt;/p&gt;
&lt;p&gt;&lt;iframe width="500" height="281" src="http://www.youtube.com/embed/4gWStKCioi8?fs=1&amp;#038;feature=oembed" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href='http://www.youtube.com/watch?v=4gWStKCioi8'&gt;Jogl/JogAmp on the Web, Desktop and Mobile 2012&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RC6 is now underway, I still have to add some supplied patches and walk through the buglist though.&lt;br /&gt;
However, this time I have to complete this task until tomorrow regardless whether I could complete the bug walk or not.&lt;/p&gt;
&lt;p&gt;Cheers, Sven&lt;/p&gt;</content:encoded>
      <category>3D, OpenGL, ..</category>
      <category>Computer Stuff</category>
      <category>JOGL</category>
      <category>3D</category>
      <category>Android</category>
      <category>Applet</category>
      <category>Java</category>
      <category>Linux</category>
      <category>mobile</category>
      <category>OpenGL</category>
      <category>OS X</category>
      <category>Solaris</category>
      <category>Windows</category>
      <pubDate>Thu, 19 Apr 2012 19:26:50 GMT</pubDate>
      <guid isPermaLink="false">http://jausoft.com/blog/?p=421</guid>
      <dc:creator>Sven</dc:creator>
      <dc:date>2012-04-19T19:26:50Z</dc:date>
    </item>
    <item>
      <title>Back from Revision 2012 :) It was a blast to say the least....</title>
      <link>http://copypastaresearch.tumblr.com/post/21141853592</link>
      <description>&lt;img src="http://25.media.tumblr.com/tumblr_m2isbuFRVy1qdsecho1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Back from &lt;a href="http://www.revision-party.net/"&gt;Revision 2012&lt;/a&gt; :) It was a blast to say the least. I?ve met so many interesting people from all over?Europe, I?m still flashed by all those overwhelming impressions. Definitly coming back there next year. As on &lt;a href="http://2011.revision-party.net/history/2011"&gt;last?years Revision&lt;/a&gt; I had again prepared an entry for the PC 4k (executable size has to be &lt;=4096 bytes) called?&lt;a href="http://www.pouet.net/prod.php?which=59086"&gt;?Hartverdrahtet?&lt;/a&gt;. Nearly took me two month to prepare. Technically speaking it?s more or less an enhanced version?of &lt;a href="http://copypastaresearch.tumblr.com/post/6282679213/i-have-been-quite-lazy-in-the-last-couple-of"&gt;what I?ve already done last year&lt;/a&gt;, but this time the shader does not only use up every ALU peformance ur GPU has?to offer but also goes quite heavy on the texture units to render some nice post-effects (e.g. god-rays). I guess?&lt;a href="http://www.youtube.com/watch?v=iPaxlPT3vkw"&gt;the crowd really liked what I did&lt;/a&gt; in 4k, so I eventually &lt;a href="http://2012.revision-party.net/history/2012"&gt;placed 1st&lt;/a&gt; (take a look at the &lt;a href="http://2012.revision-party.net/history/2012/voting"&gt;voting slices&lt;/a&gt;). Placing?first also got me a little bit attention press wise, thus &lt;a href="http://www.heise.de/newsticker/meldung/Revision-2012-Augenschmaus-satt-1520286.html"&gt;heise.de&lt;/a&gt; and &lt;a href="http://www.4players.de/4players.php/dispbericht/PS_Vita/Special/7020/75647/2.html"&gt;4players.de&lt;/a&gt; mentioned the production?(sorry, german only). My buddy tokra with whom I was awarded the &lt;a href="http://www.echtzeitkultur.org/blog/archives/34-Newcomer-Award-fuer-Akronyme-Analogiker.html"&gt;?Newcomer Award?&lt;/a&gt; last year, also released stg for?the VIC20 called &lt;a href="http://www.pouet.net/prod.php?which=59081"&gt;?VIC can again?&lt;/a&gt; (a new interlaced graphics mode). After Revision I took the liberty of doing some?chillout for a couple of days, but stay tuned as I?m currently working on a JOGL port of &lt;a href="http://www.pouet.net/prod.php?which=59086"&gt;?Hartverdrahtet?&lt;/a&gt; ?&lt;/p&gt;</description>
      <category>Revision 2012</category>
      <category>PC 4k</category>
      <category>1st Place</category>
      <category>Fractals</category>
      <category>GLSL</category>
      <category>Raymarching</category>
      <category>Demoscene</category>
      <category>Ankronyme Analogiker</category>
      <pubDate>Sun, 15 Apr 2012 12:07:06 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/21141853592</guid>
      <dc:date>2012-04-15T12:07:06Z</dc:date>
    </item>
    <item>
      <title>Spam incoming :) ? another nine fractal bitmap orbit...</title>
      <link>http://copypastaresearch.tumblr.com/post/20294023605</link>
      <description>&lt;img src="http://25.media.tumblr.com/tumblr_m1t91aCEf31qdsecho1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Spam incoming :) ? another nine fractal bitmap orbit trapping variations: &lt;a href="http://www.youtube.com/watch?v=Zbz1JrL6quU"&gt;#1&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=QL_yiqRSnJk"&gt;#2&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=UwOHe5WmGic"&gt;#3&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=gBez1ztuPIk"&gt;#4&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=tCLC6AK3Hnw"&gt;#5&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=0n5FbP2vMXg"&gt;#6&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=7Hf9wJ9Aa1E"&gt;#7&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=JOlbjDOomDA"&gt;#8&lt;/a&gt; and &lt;a href="http://www.youtube.com/watch?v=pF66_6D5Dtc"&gt;#9&lt;/a&gt;. Enjoy!&lt;/p&gt;</description>
      <category>GLSL</category>
      <category>fractals</category>
      <category>Fragment Shader</category>
      <category>Orbit Trapping</category>
      <pubDate>Sun, 01 Apr 2012 17:10:22 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/20294023605</guid>
      <dc:date>2012-04-01T17:10:22Z</dc:date>
    </item>
    <item>
      <title>GPU Vertex and Fragment shader introduction.</title>
      <link>http://labb.zafena.se/?p=547</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://labb.zafena.se/?feed=rss2&amp;p=547</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>I have posted a small JogAmp JOGL OpenGL ES 2.0 Vertex and Fragment shader introduction at: https://github.com/xranby/jogl/blob/master/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RawGL2ES2demo.java#L54 The nice thing about this introduction are that it will run unmodified on both Desktop OpenGL GL2 systems and Mobile OpenGL ES2 systems. It uses the GL2ES2 GLProfile that use the common subset of OpenGL calls found in [...]</description>
      <content:encoded>&lt;pre&gt;
&lt;div id="LC71"&gt;I have posted a small JogAmp JOGL OpenGL ES 2.0 Vertex and Fragment shader introduction at:
&lt;a href="https://github.com/xranby/jogl/blob/master/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RawGL2ES2demo.java#L54"&gt;https://github.com/xranby/jogl/blob/master/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RawGL2ES2demo.java#L54&lt;/a&gt;

The nice thing about this introduction are that it will run unmodified on both Desktop OpenGL GL2 systems and Mobile OpenGL ES2 systems.
It uses the &lt;a href="http://jogamp.org/jogl/doc/bouml/html-svg/"&gt;GL2ES2 GLProfile&lt;/a&gt; that use the common subset of OpenGL calls found in both desktop GL2 and mobile ES2.&lt;/div&gt;
&lt;/pre&gt;
&lt;blockquote&gt;
&lt;pre&gt;
&lt;div id="LC72"&gt;
&lt;pre&gt;wget http://jogamp.org/deployment/jogamp-test/archive/jogamp-all-platforms.7z
7z x jogamp-all-platforms.7z
cd jogamp-all-platforms
wget https://raw.github.com/xranby/jogl/master/src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/RawGL2ES2demo.java
javac -cp jar/jogl.all.jar:jar/gluegen-rt.jar RawGL2ES2demo.java
java -cp jar/jogl.all.jar:jar/gluegen-rt.jar:. RawGL2ES2demo&lt;/pre&gt;
&lt;/div&gt;
&lt;div id="LC76"&gt;
&lt;pre&gt;&lt;a href="http://labb.zafena.se/wp-content/uploads/2012/03/Raw-GL2ES2-Demo.png"&gt;&lt;img class="size-full wp-image-548 alignnone" title="Raw GL2ES2 Demo" src="http://labb.zafena.se/wp-content/uploads/2012/03/Raw-GL2ES2-Demo.png" alt="" width="887" height="304" /&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/pre&gt;
&lt;/blockquote&gt;</content:encoded>
      <category>JogAmp</category>
      <pubDate>Fri, 23 Mar 2012 12:15:56 GMT</pubDate>
      <guid isPermaLink="false">http://labb.zafena.se/?p=547</guid>
      <dc:creator>xerxes</dc:creator>
      <dc:date>2012-03-23T12:15:56Z</dc:date>
    </item>
    <item>
      <title>As I can?t get my fingers off these flare bitmaps, here is...</title>
      <link>http://copypastaresearch.tumblr.com/post/19062441569</link>
      <description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/LI3J1U_eqQA?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;As I can?t get my fingers off &lt;a href="http://copypastaresearch.tumblr.com/post/19062281328/and-here-we-go-with-another-one-in-the-series"&gt;these flare bitmaps&lt;/a&gt;, here is yet another one &lt;a href="http://copypastaresearch.tumblr.com/post/18614905288/the-logical-consequence-of-my-last-six-postings"&gt;in the series&lt;/a&gt; ?&lt;/p&gt;</description>
      <category>GLSL</category>
      <category>JOGL2</category>
      <category>Fragment Shader</category>
      <category>GPGPU</category>
      <category>Orbit Trapping</category>
      <category>Julia Set</category>
      <category>fractals</category>
      <pubDate>Sat, 10 Mar 2012 16:38:10 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/19062441569</guid>
      <dc:date>2012-03-10T16:38:10Z</dc:date>
    </item>
    <item>
      <title>And here we go with another one in the series ?</title>
      <link>http://copypastaresearch.tumblr.com/post/19062281328</link>
      <description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/jQ0UdJS8Tn0?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;And here we go with another one &lt;a href="http://copypastaresearch.tumblr.com/post/18614905288/the-logical-consequence-of-my-last-six-postings"&gt;in the series&lt;/a&gt; ?&lt;/p&gt;</description>
      <category>GLSL</category>
      <category>JOGL</category>
      <category>JAVA</category>
      <category>fractals</category>
      <category>Fragment Shader</category>
      <category>Julia Set</category>
      <pubDate>Sat, 10 Mar 2012 16:34:56 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/19062281328</guid>
      <dc:date>2012-03-10T16:34:56Z</dc:date>
    </item>
    <item>
      <title>Version 3.0.3</title>
      <link>http://www.dyn4j.org/archives/234</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dyn4j.org/archives/234/feed</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>Version 3.0.3 is a maintenance release with very few changes. The primary change was the move of the Settings class from being a singleton to being a member of the World class. This allows each instance of the World class to have different settings. The changes may break compatibility with previous versions, although they should [...]</description>
      <content:encoded>&lt;p&gt;Version 3.0.3 is a maintenance release with very few changes.  The primary change was the move of the Settings class from being a singleton to being a member of the World class.  This allows each instance of the World class to have different settings.  The changes may break compatibility with previous versions, although they should be minimal.&lt;/p&gt;</content:encoded>
      <category>Uncategorized</category>
      <pubDate>Sat, 03 Mar 2012 22:07:01 GMT</pubDate>
      <guid isPermaLink="false">http://www.dyn4j.org/?p=234</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2012-03-03T22:07:01Z</dc:date>
    </item>
    <item>
      <title>And another one in the Julia-Set fractal bitmap orbit trapping...</title>
      <link>http://copypastaresearch.tumblr.com/post/18661793044</link>
      <description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/FZTEmy8tec0?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;And another one in the &lt;a href="http://copypastaresearch.tumblr.com/post/18614905288/the-logical-consequence-of-my-last-six-postings"&gt;Julia-Set fractal bitmap orbit trapping series&lt;/a&gt; ?&lt;/p&gt;</description>
      <category>JOGL</category>
      <category>Fragment Shader</category>
      <category>GLSL</category>
      <category>fractals</category>
      <category>Julia Set</category>
      <pubDate>Sat, 03 Mar 2012 14:28:15 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/18661793044</guid>
      <dc:date>2012-03-03T14:28:15Z</dc:date>
    </item>
    <item>
      <title>The logical consequence of my last six postings: Julia-set...</title>
      <link>http://copypastaresearch.tumblr.com/post/18614905288</link>
      <description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/odFATcfuDPU?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;The logical consequence of my last six postings: Julia-set fractal bitmap orbit traps. &lt;a href="http://copypastaresearch.tumblr.com/post/18078370198/back-when-doing-my-pc-4k-entry-for-the-revision"&gt;Same codebase&lt;/a&gt; as the last six times ofcourse ?&lt;/p&gt;</description>
      <category>JOGL</category>
      <category>fractals</category>
      <category>Fragment Shader</category>
      <category>Orbit Trapping</category>
      <category>Julia Set</category>
      <pubDate>Fri, 02 Mar 2012 19:08:41 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/18614905288</guid>
      <dc:date>2012-03-02T19:08:41Z</dc:date>
    </item>
    <item>
      <title>Overview of over ~40 different bitmap variations for my fractal...</title>
      <link>http://copypastaresearch.tumblr.com/post/18565623792</link>
      <description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/03OD_e9cX3M?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Overview of over ~40 different bitmap variations for &lt;a href="http://copypastaresearch.tumblr.com/post/18078370198/back-when-doing-my-pc-4k-entry-for-the-revision"&gt;my fractal bitmap orbit trapping fragment shader&lt;/a&gt;. Guess I?m ready for some new stuff here, so next up: julia-set fractal bitmap orbit trapping :)&lt;/p&gt;</description>
      <category>JOGL</category>
      <category>GLSL</category>
      <category>Java</category>
      <category>Fragment Shader</category>
      <category>fractals</category>
      <category>mandelbrot</category>
      <category>Orbit Trapping</category>
      <pubDate>Thu, 01 Mar 2012 21:09:01 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/18565623792</guid>
      <dc:date>2012-03-01T21:09:01Z</dc:date>
    </item>
    <item>
      <title>Another fractal bitmap orbit trapping experiment. Seems that...</title>
      <link>http://copypastaresearch.tumblr.com/post/18496135845</link>
      <description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/z0wocD_BbwM?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Another fractal bitmap orbit trapping experiment. Seems that highly translucent flare bitmaps work quite well. Guess I?ll have to dig in deeper on these ? code is ofcourse &lt;a href="http://copypastaresearch.tumblr.com/post/18078370198/back-when-doing-my-pc-4k-entry-for-the-revision"&gt;the same as before&lt;/a&gt;.&lt;/p&gt;</description>
      <category>JOGL2</category>
      <category>GLSL</category>
      <category>Fragment Shader</category>
      <category>fractals</category>
      <category>Orbit Trapping</category>
      <category>mandelbrot</category>
      <pubDate>Wed, 29 Feb 2012 15:48:07 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/18496135845</guid>
      <dc:date>2012-02-29T15:48:07Z</dc:date>
    </item>
    <item>
      <title>Another try in my ?A fractal a day keeps the doctor...</title>
      <link>http://copypastaresearch.tumblr.com/post/18436415822</link>
      <description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/ZwdX1HFuhmQ?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Another try in my ?A fractal a day keeps the doctor away!?-series. Code stays &lt;a href="http://copypastaresearch.tumblr.com/post/18078370198/back-when-doing-my-pc-4k-entry-for-the-revision"&gt;the same&lt;/a&gt;.&lt;/p&gt;</description>
      <category>JOGL</category>
      <category>GLSL</category>
      <category>Fragment Shader</category>
      <category>Mandelbrot</category>
      <category>Orbit Trapping</category>
      <pubDate>Tue, 28 Feb 2012 13:56:03 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/18436415822</guid>
      <dc:date>2012-02-28T13:56:03Z</dc:date>
    </item>
    <item>
      <title>Jogl/JogAmp RC6 Beta / Linux Armv7 Builds</title>
      <link>http://jausoft.com/blog/2012/02/27/jogamp-rc6-beta-linux-armv7-builds/</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jausoft.com/blog/2012/02/27/jogamp-rc6-beta-linux-armv7-builds/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>Besides adding proper Mac OS X support (10.5.8 &amp;#8211; 10.7.*, incl. OpenJDK7), OpenGL 4.2 and latest EGL, ES1 and ES2 extension updates and lot&amp;#8217;s of stabilization&amp;#8217;s, Xerxes R?nby and myself worked on a proper Linux ARMv7 support. Both were able to test on Omap4 (Pandaboard ES), Tegra2 (AC100), where Xerxes also tested on other machines, [...]</description>
      <content:encoded>&lt;p&gt;Besides adding proper Mac OS X support (10.5.8 &amp;#8211; 10.7.*, incl. OpenJDK7),&lt;br /&gt;
OpenGL 4.2 and latest EGL, ES1 and ES2 extension updates and lot&amp;#8217;s of stabilization&amp;#8217;s,&lt;br /&gt;
&lt;a href="http://labb.zafena.se/?p=532"&gt;Xerxes R?nby&lt;/a&gt; and myself worked on a proper Linux ARMv7 support.&lt;br /&gt;
Both were able to test on Omap4 (Pandaboard ES), Tegra2 (AC100), where Xerxes also tested on other machines, eg. Nokia N9 MeeGo.&lt;/p&gt;
&lt;p&gt;Even though &lt;a href="http://jogamp.org/gluegen/www/"&gt;GlueGen&lt;/a&gt; and &lt;a href="http://jogamp.org/jogl/www/"&gt;JOGL&lt;/a&gt; in general support EGL and ES1/ES2 since 2008 incl. the GL profile selection,&lt;br /&gt;
we figured we need better support for multiple GL implementations on one platform, Mesa3D software and the hardware EGL/ES ones.&lt;br /&gt;
Without tweaking your default configuration, JOGL chooses the right implementation for the desired profile,&lt;br /&gt;
e.g. hardware accelerate GLES2 for the desired common GL2ES2 profile on your mobile device, even though Mesa is installed.&lt;br /&gt;
&lt;span id="more-407"&gt;&lt;/span&gt;&lt;br /&gt;
Besides tiny big fixes and workarounds the biggest amount of work was to attach the Linux ARMv7 job to Jenkins.&lt;br /&gt;
We use a cross-compile and cross-test environment, where the build host cross-compiles and makes the Pandaboard ES&lt;br /&gt;
fetch the artifacts via rsync and execute the tests. Later the build host pulls the results and forwards them to the Jenkins master.&lt;/p&gt;
&lt;p&gt;All&lt;a href="http://jogamp.org/"&gt; JogAmp modules&lt;/a&gt; are now build for Linux-Armv7,&lt;br /&gt;
a &lt;a href="http://jogamp.org/deployment/jogamp-test/"&gt;test release is made available here&lt;/a&gt;.&lt;br /&gt;
You may like to try &lt;a href="http://jogamp.org/deployment/jogamp-test/jogl-test-applets.html"&gt;the test Applets&lt;/a&gt;.&lt;br /&gt;
Note: This week RC6 will be released under the usual location and the above test URL will cease to exist.&lt;/p&gt;
&lt;p&gt;I dared to test browser support via OpenJDK and the IcedTea Plugin,&lt;br /&gt;
and for some reason .. it just works &lt;img src='http://jausoft.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Please feel welcome to &lt;a href="http://forum.jogamp.org/Jogl-JogAmp-RC6-Beta-Linux-Armv7-Builds-td3782764.html"&gt;join the discussion&lt;/a&gt;.&lt;/p&gt;
&lt;div id="attachment_408" class="wp-caption alignleft" style="width: 810px"&gt;&lt;a href="http://jausoft.com/blog/wp-content/uploads/2012/02/jogamp-jogl-armv7-omap4.png"&gt;&lt;img src="http://jausoft.com/blog/wp-content/uploads/2012/02/jogamp-jogl-armv7-omap4.png" alt="JOGL on Linux-ARMv7-Omap4" width="800" class="size-full wp-image-408" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;JOGL on Linux-ARMv7-Omap4&lt;/p&gt;&lt;/div&gt;</content:encoded>
      <category>3D, OpenGL, ..</category>
      <category>Computer Stuff</category>
      <category>JOGL</category>
      <category>3D</category>
      <category>Applet</category>
      <category>ARM</category>
      <category>Java</category>
      <category>mobile</category>
      <category>Omap</category>
      <category>OpenGL</category>
      <category>OS X</category>
      <category>Tegra2</category>
      <pubDate>Tue, 28 Feb 2012 02:05:42 GMT</pubDate>
      <guid isPermaLink="false">http://jausoft.com/blog/?p=407</guid>
      <dc:creator>Sven</dc:creator>
      <dc:date>2012-02-28T02:05:42Z</dc:date>
    </item>
    <item>
      <title>Hardware accelerated Gears running on Nokia N9 using OpenJDK 6 JamVM and JogAmp JOGL OpenGL ES bindings</title>
      <link>http://labb.zafena.se/?p=532</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://labb.zafena.se/?feed=rss2&amp;p=532</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">5</slash:comments>
      <description>Today JogAmp added a workaround to deal with GPU drivers that reports a bogus 0Hz screen refresh rate. With this fix in place hardware acceleration are working out of the box on Nokia N9 MeeGo phones in combination with the Nokia compiled Imaginative Technologies SGX 530 GPU drivers! If you have OpenJDK installed on any [...]</description>
      <content:encoded>&lt;p&gt;&lt;a href="http://labb.zafena.se/wp-content/uploads/2012/02/N9-jamvm-openjdk-6-jogamp-jogl-2.0-2012-02-27-1230461.png"&gt;&lt;img class="alignright size-full wp-image-534" title="N9 jamvm openjdk-6 jogamp jogl 2.0 2012-02-27 12:30:46" src="http://labb.zafena.se/wp-content/uploads/2012/02/N9-jamvm-openjdk-6-jogamp-jogl-2.0-2012-02-27-1230461.png" alt="" width="516" height="412" /&gt;&lt;/a&gt;Today JogAmp added a &lt;a href="https://github.com/sgothel/jogl/commit/f519190f0cf97eb6b3fda61f4eb8c1f55de43b51"&gt;workaround to deal with GPU drivers that reports a bogus 0Hz screen refresh rate&lt;/a&gt;. With this fix in place hardware acceleration are working out of the box on &lt;a href="http://jogamp.org/wiki/index.php/SGX_530_N9_running_MeeGo_1.2_Harmattan_PR1.1_using_the_1.4_build_1.4.14.2514_Nokia_driver"&gt;Nokia N9 MeeGo phones in combination with the Nokia compiled Imaginative Technologies SGX 530 GPU drivers&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;If you have OpenJDK installed on any ARMv7 board with a proper OpenGL-ES libEGL and libGLES driver setup then you can try running this for yourself by using my prebuilt jogamp-armv7 jars.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;wget http://labb.zafena.se/jogamp/armv7/jogamp-armv7.tar.gz&lt;/p&gt;
&lt;p&gt;tar zxvf jogamp-armv7.tar.gz&lt;/p&gt;
&lt;p&gt;cd jogamp&lt;/p&gt;
&lt;p&gt;sh ./run-desktop.sh&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://labb.zafena.se/jogamp/armv7/src"&gt;Source&lt;/a&gt; and&lt;a href="http://www.trimslice.com/forum/viewtopic.php?p=1804#p1804"&gt; build instructions&lt;/a&gt; are available.&lt;/p&gt;
&lt;h2&gt;JogAmp JOGL OpenGL-ES Driver compatiblity matrix&lt;/h2&gt;
&lt;p&gt;I am tracking ARMv7 libEGL/libGLES* GPU drivers compatiblity with JogAmp here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jogamp.org/wiki/index.php/OpenGL_ES_Driver_compatibility_matrix"&gt;http://jogamp.org/wiki/index.php/OpenGL_ES_Driver_compatibility_matrix&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Chuck Norris force you to use the produced jars from the JogAmp &amp;#8220;Chuck Norris&amp;#8221; build-bot!&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://jogamp.org/chuck/job/jogl/684/"&gt;https://jogamp.org/chuck/job/jogl/684/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #8f0240;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://jogamp.org/deployment/autobuilds/master/jogl-b684-2012-02-27_11-04-43/"&gt;http://jogamp.org/deployment/autobuilds/master/jogl-b684-2012-02-27_11-04-43/&lt;/a&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #8f0240;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://jogamp.org/deployment/autobuilds/master/jogl-b684-2012-02-27_11-04-43/artifact.properties"&gt;http://jogamp.org/deployment/autobuilds/master/jogl-b684-2012-02-27_11-04-43/artifact.properties&lt;/a&gt; uses gluegen build 510&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #8f0240;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://jogamp.org/deployment/autobuilds/master/gluegen-b510-2012-02-25_20-44-27/"&gt;http://jogamp.org/deployment/autobuilds/master/gluegen-b510-2012-02-25_20-44-27/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Assemble a ARMv7 jogamp testfolder using the JogAmp daily build:&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;wget http://jogamp.org/deployment/autobuilds/master/gluegen-b510-2012-02-25_20-44-27/gluegen-2.0-b510-20120225-linux-armv7.7z&lt;/p&gt;
&lt;p&gt;wget http://jogamp.org/deployment/autobuilds/master/jogl-b684-2012-02-27_11-04-43/jogl-2.0-b684-20120227-linux-armv7.7z&lt;/p&gt;
&lt;p&gt;7z x gluegen-2.0-b510-20120225-linux-armv7.7z&lt;/p&gt;
&lt;p&gt;7z x jogl-2.0-b684-20120227-linux-armv7.7z&lt;/p&gt;
&lt;p&gt;mkdir -p jogamp/jar&lt;br /&gt;
cp -r jogl*/etc jogamp/etc/&lt;br /&gt;
cp gluegen*/jar/*.jar jogamp/jar&lt;br /&gt;
cp gluegen*/lib/* jogamp/jar&lt;br /&gt;
cp jogl*/jar/*.jar jogamp/jar&lt;br /&gt;
cp jogl*/lib/lib* jogamp/jar&lt;br /&gt;
cp /usr/share/java/hamcrest-core.jar jogamp/&lt;br /&gt;
cp /usr/share/java/junit4.jar jogamp/&lt;/p&gt;
&lt;p&gt;cd jogamp&lt;/p&gt;
&lt;p&gt;java -cp jar/gluegen.jar:jar/jogl.all-mobile.jar:jar/jogl.test.jar:hamcrest-core.jar:junit4.jar com/jogamp/opengl/test/junit/jogl/demos/es2/newt/TestGearsES2NEWT -time 40000&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;</content:encoded>
      <category>ARM</category>
      <category>Embedded</category>
      <category>Icedtea6</category>
      <category>JamVM</category>
      <category>JogAmp</category>
      <category>Uncategorized</category>
      <pubDate>Mon, 27 Feb 2012 11:18:27 GMT</pubDate>
      <guid isPermaLink="false">http://labb.zafena.se/?p=532</guid>
      <dc:creator>xerxes</dc:creator>
      <dc:date>2012-02-27T11:18:27Z</dc:date>
    </item>
    <item>
      <title>OpenGL ES hardware acceleration on OpenJDK ARM GNU/Linux twitter stream.</title>
      <link>http://labb.zafena.se/?p=514</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://labb.zafena.se/?feed=rss2&amp;p=514</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
      <description>I have created a Twitter stream where I track my current progress on getting desktop OpenJDK applications running faster on ARM by taking advantage of the OpenGL ES, possibly in combination with the lima driver, and OpenVG hardware acceleration. OpenJDK? currently fallback to used CPU bound software rendering to draw most of Java2D and 3D [...]</description>
      <content:encoded>&lt;p&gt;&lt;a href="https://twitter.com/#!/xranby"&gt;I have created a Twitter stream&lt;/a&gt; where I track my current progress on getting desktop OpenJDK applications running faster on ARM by taking advantage of the &lt;a href="http://www.khronos.org/opengles/"&gt;OpenGL ES&lt;/a&gt;, possibly in combination with the &lt;a href="http://limadriver.org/"&gt;lima driver&lt;/a&gt;, and &lt;a href="http://www.khronos.org/openvg/"&gt;OpenVG&lt;/a&gt; hardware acceleration.&lt;/p&gt;
&lt;p&gt;OpenJDK? currently fallback to used CPU bound software rendering to draw most of Java2D and 3D application on ARM.&lt;/p&gt;
&lt;p&gt;I decided to look into it and noticed that OpenJDK internally currently only support fast hardware acceleration on GNU/Linux systems by using the standard libGL OpenGL library, this libGL library do not support the latest ARM system on a chip GPU designs instead it allways fallback to use the uttelry slow Mesa software rasterizer. In order to get things fast OpenJDK need to take controll of the ARM GPU&amp;#8217;s using the libEGL and libGLES* OpenGL ES library drivers.&lt;/p&gt;
&lt;p&gt;You can get OpenJDK running 2x faster today by simply setting:&lt;/p&gt;
&lt;p&gt;_JAVA_OPTIONS=&amp;#8221;-Dsun.java2d.xrender=true&amp;#8221;&lt;/p&gt;
&lt;p&gt;This will enable the &lt;a href="http://linuxhippy.blogspot.com/"&gt;xrender pipeline made by Clemens&lt;/a&gt;, its compiled in most OpenJDK builds and are simply waiting for you to switch it on to test it, its not as fast as the &lt;a href="http://www.khronos.org/egl"&gt;libEGL drivers&lt;/a&gt; but its faster than the pure software rendered X11 pipeline. &lt;img src='http://labb.zafena.se/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;I expect to get OpenJDK running butter smooth when proper hardware acceleration using &lt;a href="http://jogamp.org/"&gt;JogAmp&lt;/a&gt; or&lt;a href="http://lwjgl.org/"&gt; LWJGL&lt;/a&gt; are in place, both of these API have recently added OpenGL ES support in the latest releases. A promising candidate to make it happen are to combine the JogAmp JOGL OpenGL ES bindings with &lt;a href="http://brandonborkholder.github.com/glg2d/"&gt;Brandon Borkholder&amp;#8217;s GLG2D&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/#!/xranby"&gt;https://twitter.com/#!/xranby&lt;/a&gt; -Tweeets for you!&lt;/p&gt;</content:encoded>
      <category>ARM</category>
      <category>Embedded</category>
      <category>JogAmp</category>
      <category>LWJGL</category>
      <category>Uncategorized</category>
      <pubDate>Fri, 24 Feb 2012 22:46:45 GMT</pubDate>
      <guid isPermaLink="false">http://labb.zafena.se/?p=514</guid>
      <dc:creator>xerxes</dc:creator>
      <dc:date>2012-02-24T22:46:45Z</dc:date>
    </item>
    <item>
      <title>Yet another fractal bitmap orbit trap variation. Setup- and...</title>
      <link>http://copypastaresearch.tumblr.com/post/18210429662</link>
      <description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/xN1qlO8PW0c?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Yet another fractal bitmap orbit trap variation. &lt;a href="http://copypastaresearch.tumblr.com/post/18078370198/back-when-doing-my-pc-4k-entry-for-the-revision"&gt;Setup- and shader-code stays the same&lt;/a&gt;, &lt;a href="http://copypastaresearch.tumblr.com/post/18137546877/a-fractal-orbit-trap-a-day-keeps-the-doctor-away"&gt;as before&lt;/a&gt; just varied the bitmap.&lt;/p&gt;</description>
      <category>JOGL</category>
      <category>GLSL</category>
      <category>Fragment Shader</category>
      <category>Mandelbrot</category>
      <category>Orbit Trapping</category>
      <pubDate>Fri, 24 Feb 2012 22:36:49 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/18210429662</guid>
      <dc:date>2012-02-24T22:36:49Z</dc:date>
    </item>
    <item>
      <title>A fractal orbit trap a day keeps the doctor away! ? or stg...</title>
      <link>http://copypastaresearch.tumblr.com/post/18137546877</link>
      <description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/U_RI_hdWgTQ?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;A fractal orbit trap a day keeps the doctor away! ? or stg like that. &lt;a href="http://copypastaresearch.tumblr.com/post/18078370198/back-when-doing-my-pc-4k-entry-for-the-revision"&gt;As promised before&lt;/a&gt; another orbit trap variation. Setup and shader code stays the same, only varied the bitmap.&lt;/p&gt;</description>
      <category>JOGL</category>
      <category>Mandelbrot</category>
      <category>GLSL</category>
      <category>Fragment Shader</category>
      <category>Fractals</category>
      <category>Orbit Trapping</category>
      <pubDate>Thu, 23 Feb 2012 18:14:23 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/18137546877</guid>
      <dc:date>2012-02-23T18:14:23Z</dc:date>
    </item>
    <item>
      <title>Back when doing my PC 4k entry for the Revision 2011 I felt I...</title>
      <link>http://copypastaresearch.tumblr.com/post/18078370198</link>
      <description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/G79KtKOBr9Y?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Back when doing my &lt;a href="http://copypastaresearch.tumblr.com/post/6283491929/as-promised-before-heres-the-direct-1-1-jogl2"&gt;PC 4k entry for the Revision 2011&lt;/a&gt; I felt I only scratched the surface to what?s possible with &lt;a href="http://iquilezles.org/www/articles/ftrapsbitmap/ftrapsbitmap.htm"&gt;fractal bitmap orbit traps&lt;/a&gt;. So finally I got the time to revisit these beauties. This time a quite extended visit, so be prepared for a lot more videos in the coming weeks. The setup/init code on Github:?&lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/src/jogamp/routine/jogl/programmablepipeline/GL3_FractalBitmapOrbitTrapping.java"&gt;GL3_FractalBitmapOrbitTrapping.java&lt;/a&gt;?and the shader: &lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/shaders/fractalshaders/fractalbitmaporbittrapping.fs"&gt;.fs&lt;/a&gt;&lt;/p&gt;</description>
      <category>GLSL</category>
      <category>Fragment Shader</category>
      <category>Fractal</category>
      <category>Bitmap Orbit Trap</category>
      <category>mandelbrot</category>
      <pubDate>Wed, 22 Feb 2012 18:10:00 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/18078370198</guid>
      <dc:date>2012-02-22T18:10:00Z</dc:date>
    </item>
    <item>
      <title>Having recently bought a new GPU (ATI 6990M) it was time to test...</title>
      <link>http://copypastaresearch.tumblr.com/post/18008133145</link>
      <description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/FjK9a6b47A8?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Having recently bought a new GPU (ATI 6990M) it was time to test a quite cool feature I had to pass on for a while: double precision floating-point arithmetic (&lt;a href="http://www.opengl.org/registry/specs/ARB/gpu_shader_fp64.txt"&gt;GL_ARB_gpu_shader_fp64&lt;/a&gt;). So it was obviously time for &lt;a href="http://copypastaresearch.tumblr.com/post/1121383030/made-a-small-field-trip-into-the-world-of-fractals"&gt;another field trip&lt;/a&gt; into the world of fractals, and this time a really deep one. Code can be found here: &lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/src/jogamp/routine/jogl/programmablepipeline/GL4_Mandelbrot_DoublePrecision.java"&gt;GL4_Mandelbrot_DoublePrecision.java&lt;/a&gt; Shader code: &lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/shaders/fractalshaders/mandelbrot_doubleprecision.fs"&gt;.fs&lt;/a&gt;&lt;/p&gt;</description>
      <category>JOGL2</category>
      <category>GLSL</category>
      <category>Fractal</category>
      <category>Mandelbrot</category>
      <category>FP64</category>
      <category>Double Precision</category>
      <pubDate>Tue, 21 Feb 2012 13:30:00 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/18008133145</guid>
      <dc:date>2012-02-21T13:30:00Z</dc:date>
    </item>
    <item>
      <title>Upgrade to JOGL2.0 build #661</title>
      <link>http://copypastaresearch.tumblr.com/post/17985234521</link>
      <description>&lt;p&gt;Saying &amp;#8220;it has been a while&amp;#8221; since &lt;a href="http://copypastaresearch.tumblr.com/post/2623668982/upgrade-to-jogl2-0-build-266"&gt;my last upgrade of JOGL2&lt;/a&gt; would be putting it mildy .. anyway I finally won the struggle with procrastination and downed a new version today: &lt;a href="https://jogamp.org/chuck/job/jogl/661/"&gt;Build #661 (15.02.2012&amp;#160;14:00:11)&lt;/a&gt;. Tested all my current routines with the new build, and so far all seem to run flawlessly both on ATI and NVIDIA. Nice work there jogamp community! A minor downside is the never ending story with NEWT bugs wich is more than ever up2date (at least on Windows). So I guess I?ll have to spam bugzilla within the next few days ?&lt;/p&gt;</description>
      <category>JOG2</category>
      <category>Upgrade</category>
      <category>nice work</category>
      <category>Minor Bugs</category>
      <category>NEWT</category>
      <category>build 661</category>
      <pubDate>Tue, 21 Feb 2012 02:03:00 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/17985234521</guid>
      <dc:date>2012-02-21T02:03:00Z</dc:date>
    </item>
    <item>
      <title>Version 3.0.2</title>
      <link>http://www.dyn4j.org/archives/225</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dyn4j.org/archives/225/feed</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>3.0.2 introduces significant changes in the Sandbox application along with some minor bug fixes to dyn4j and some new features. Specifically, small CCD improvements, a new fixture filter TypeFilter, and tangent speed settings on contacts. Bug fixes include: a fix to the Body.setMass(Mass.Type) method, auto-sleeping bug, and a rotation disc computation bug. In addition, both [...]</description>
      <content:encoded>&lt;p&gt;3.0.2 introduces significant changes in the Sandbox application along with some minor bug fixes to dyn4j and some new features.  Specifically, small CCD improvements, a new fixture filter TypeFilter, and tangent speed settings on contacts.  Bug fixes include: a fix to the Body.setMass(Mass.Type) method, auto-sleeping bug, and a rotation disc computation bug.  In addition, both dyn4j and Sandbox have been internationalized (any volunteers for translating?).&lt;/p&gt;
&lt;p&gt;The Sandbox includes many new features and fixes.  First, is the ability to add Rays to test raycasting.  Next, all output angles are in Degrees (GUI, xml, and java files).  Finally there is a new Export feature to export a simulation to a Java class file.  This allows you to create a simulation inside the Sandbox application and export it for use in your application.&lt;/p&gt;
&lt;p&gt;Soon I plan to post some videos on how to get started and some of the useful features contained in the Sandbox application.&lt;br /&gt;
&lt;/p&gt;
&lt;div style="text-align: center;"&gt;
&lt;img src="http://www.dyn4j.org/Sandbox/screenshot-v3.0.2.png" width="350" height="269" /&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0" style="border: none; width: 100%;"&gt;
&lt;tr&gt;
&lt;td style="border: none;"&gt;Launch the TestBed&lt;/td&gt;
&lt;td style="border: none; width: 30px;"&gt;&lt;/td&gt;
&lt;td style="border: none;"&gt;Launch the Sandbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border: none;"&gt;&lt;a href="http://www.dyn4j.org/TestBed/latest/dyn4j-TestBed.jnlp" target="_self"&gt;&lt;img src="http://www.dyn4j.org/images/jws_launch.gif" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td style="border: none; width: 30px;"&gt;&lt;/td&gt;
&lt;td style="border: none;"&gt;&lt;a href="http://www.dyn4j.org/Sandbox/latest/dyn4j-Sandbox.jnlp" target="_self"&gt;&lt;img src="http://www.dyn4j.org/images/jws_launch.gif" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;When running either test application you may be asked to accept a certificate from me (I just self signed the JARs).  The certificates will expire six months from today.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Both applications require Java 1.6+.&lt;/p&gt;</content:encoded>
      <category>Uncategorized</category>
      <pubDate>Tue, 20 Dec 2011 21:44:46 GMT</pubDate>
      <guid isPermaLink="false">http://www.dyn4j.org/?p=225</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2011-12-20T21:44:46Z</dc:date>
    </item>
    <item>
      <title>JogAmp Release v2.0-rc4</title>
      <link>http://jausoft.com/blog/2011/12/02/jogamp-release-v2-0-rc4/</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jausoft.com/blog/2011/12/02/jogamp-release-v2-0-rc4/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>After tons of bug fixes and Mac OS X, Solaris and Android platform support we finally have v2.0-rc4. Besides many important bug fixes this release supports Mac OS X 10.6.4 and 10.7. The Applet browser plugin is also enhanced and validated on all platforms for FF, Chrome, Safari and IE where supported. http://jogamp.org/deployment/jogamp-current/jogl-test-applets.html +++ We [...]</description>
      <content:encoded>&lt;p&gt;After tons of bug fixes and Mac OS X, Solaris and Android platform support&lt;br /&gt;
we finally have v2.0-rc4.&lt;/p&gt;
&lt;p&gt;Besides many important bug fixes this release supports&lt;br /&gt;
Mac OS X 10.6.4 and 10.7.&lt;/p&gt;
&lt;p&gt;The Applet browser plugin is also enhanced and validated&lt;br /&gt;
on all platforms for FF, Chrome, Safari and IE where supported.&lt;/p&gt;
&lt;p&gt;  &lt;a href="http://jogamp.org/deployment/jogamp-current/jogl-test-applets.html"&gt;http://jogamp.org/deployment/jogamp-current/jogl-test-applets.html&lt;/a&gt;&lt;br /&gt;
&lt;span id="more-400"&gt;&lt;/span&gt;&lt;br /&gt;
+++&lt;/p&gt;
&lt;p&gt;We have to thank each other for our ongoing support,&lt;br /&gt;
bug reports, inspiration and pushing for results.&lt;/p&gt;
&lt;p&gt;Thank you.&lt;/p&gt;
&lt;p&gt;+++&lt;/p&gt;
&lt;p&gt;The following aliasing of URL location has been made,&lt;br /&gt;
ie. all are aligned to v2.0-rc4 for now.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jogamp.org/deployment/"&gt;http://jogamp.org/deployment/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;v2.0-rc4 -&amp;#62; archive/rc/v2.0-rc4&lt;/li&gt;
&lt;li&gt;jogamp-current -&amp;#62; v2.0-rc4&lt;/li&gt;
&lt;li&gt;jogamp-next -&amp;#62; v2.0-rc4&lt;/li&gt;
&lt;li&gt;webstart -&amp;#62; v2.0-rc4&lt;/li&gt;
&lt;li&gt;webstart-next -&amp;#62; v2.0-rc4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Developer downloads at:&lt;br /&gt;
    &lt;a href="http://jogamp.org/deployment/v2.0-rc4/archive/"&gt;http://jogamp.org/deployment/v2.0-rc4/archive/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jogamp.org/git/"&gt;Git repositories&lt;/a&gt; have been tagged w/ v2.0-rc4.&lt;/p&gt;
&lt;p&gt;+++&lt;/p&gt;
&lt;p&gt;Planned for RC5 so far:&lt;/p&gt;
&lt;p&gt;RC5:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Maven2 integration (I know .. a bit late it is already)&lt;/li&gt;
&lt;li&gt;Mobile/Android autobuilds / release&lt;/li&gt;
&lt;li&gt;More bugfixes&lt;/li&gt;
&lt;li&gt;Update the graph package&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;+++&lt;/p&gt;
&lt;p&gt;Please join the discussion &lt;a href="http://forum.jogamp.org/"&gt;in our forum&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You may like to comment &lt;a href="http://forum.jogamp.org/JogAmp-Release-Candidate-v2-0-rc4-td3554090.html"&gt;on this release here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cheers, Sven&lt;/p&gt;</content:encoded>
      <category>3D, OpenGL, ..</category>
      <category>Computer Stuff</category>
      <category>JOGL</category>
      <category>3D</category>
      <category>Applet</category>
      <category>Java</category>
      <category>OpenGL</category>
      <category>OS X</category>
      <pubDate>Fri, 02 Dec 2011 08:56:56 GMT</pubDate>
      <guid isPermaLink="false">http://jausoft.com/blog/?p=400</guid>
      <dc:creator>Sven</dc:creator>
      <dc:date>2011-12-02T08:56:56Z</dc:date>
    </item>
    <item>
      <title>JOGL Test Statistics (Linux, Windows and OS X)</title>
      <link>http://jausoft.com/blog/2011/10/13/jogl-test-statistics-linux-windows-and-os-x/</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jausoft.com/blog/2011/10/13/jogl-test-statistics-linux-windows-and-os-x/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>To conclude my today series of blog entries, I thought it might be a good idea to show our automatic test statistics. Here are the latest good and failed test charts for all platforms: And finally the progress on OS X with all tests included: Besides adding running all unit tests to OSX, we also [...]</description>
      <content:encoded>&lt;p&gt;To conclude my today series of blog entries, I thought it might be a good idea to show our automatic test statistics.&lt;/p&gt;
&lt;p&gt;Here are the latest good and failed test charts for all platforms:&lt;/p&gt;
&lt;table border="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div id="osx-testres-all1-300x231" class="wp-caption alignnone" style="width: 310px"&gt;&lt;br /&gt;
&lt;a href="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres-all1.png"&gt;&lt;img src="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres-all1-300x231.png" alt="" width="300" height="231" class="aligncenter size-medium wp-image-383" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Test Stats 20111013 All&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div id="osx-testres-all2-300x231" class="wp-caption alignnone" style="width: 310px"&gt;&lt;br /&gt;
&lt;a href="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres-all2.png"&gt;&lt;img src="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres-all2-300x230.png" alt="" width="300" height="230" class="aligncenter size-medium wp-image-384" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Test Stats 20111013 All - Errors Only&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;span id="more-382"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;td&gt;
&lt;div id="osx-testres-all3-300x231" class="wp-caption alignnone" style="width: 310px"&gt;&lt;br /&gt;
&lt;a href="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres-all3.png"&gt;&lt;img src="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres-all3-300x230.png" alt="" width="300" height="230" class="aligncenter size-medium wp-image-385" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p class="wp-caption-text"&gt;Test Stats 20111013 All - Failure Chart&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;And finally the progress on OS X with all tests included:&lt;/p&gt;
&lt;table border="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div id="osx-testres-osx-overview-300x231" class="wp-caption alignnone" style="width: 310px"&gt;&lt;br /&gt;
&lt;a href="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres01a.png"&gt;&lt;img src="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres01a-300x239.png" alt="" width="300" height="239" class="aligncenter size-medium wp-image-388" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p class="wp-caption-text"&gt;Test OS X 20111013 Overview&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div id="osx-testres-osx-count-300x231" class="wp-caption alignnone" style="width: 310px"&gt;&lt;br /&gt;
&lt;a href="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres01b.png"&gt;&lt;img src="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres01b-300x154.png" alt="" width="300" height="154" class="aligncenter size-medium wp-image-391" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p class="wp-caption-text"&gt;Test OS X 20111013 Count&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div id="osx-testres-osx--runtime-300x231" class="wp-caption alignnone" style="width: 310px"&gt;&lt;br /&gt;
&lt;a href="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres01c.png"&gt;&lt;img src="http://jausoft.com/blog/wp-content/uploads/2011/10/osx-testres01c-300x156.png" alt="" width="300" height="156" class="aligncenter size-medium wp-image-390" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p class="wp-caption-text"&gt;Test OS X 20111013 Runtime&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Besides adding running all unit tests to OSX, we also made sure that it&amp;#8217;s performance is now equal to the other platforms, ie. around 4 minutes runtime for all tests.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://jogamp.org/chuck/job/jogl/label=macosx-10_6-x86_64-nvidia/516/testReport/junit/history/#"&gt;Our Jenkins (Chuck) test result page for the above numbers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jogamp.org"&gt;JogAmp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jogamp.org/wiki/index.php/Downloading_and_installing_JOGL"&gt;How to download and install.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But be aware that these features will be promoted to the next release RC4,&lt;br /&gt;
so you would need to wait or use the autobuilds, see &lt;a href="http://jogamp.org/wiki/index.php/Downloading_and_installing_JOGL#Downloading_the_latest_automatic_build"&gt;Downloading the latest automatic build&lt;/a&gt;.&lt;/p&gt;</content:encoded>
      <category>3D, OpenGL, ..</category>
      <category>Computer Stuff</category>
      <category>JOGL</category>
      <category>3D</category>
      <category>Java</category>
      <category>OpenGL</category>
      <category>OS X</category>
      <pubDate>Thu, 13 Oct 2011 22:27:02 GMT</pubDate>
      <guid isPermaLink="false">http://jausoft.com/blog/?p=382</guid>
      <dc:creator>Sven</dc:creator>
      <dc:date>2011-10-13T22:27:02Z</dc:date>
    </item>
    <item>
      <title>Jogl OS X Port is Nigh :)</title>
      <link>http://jausoft.com/blog/2011/10/13/jogl-osx-port/</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jausoft.com/blog/2011/10/13/jogl-osx-port/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>Since the mouse features were to easy to add and my Android vacation should take a bit longer, our OS X port was a good candidate to burn some hours I don&amp;#8217;t have. What should work for OS X by now: NEWT Top-Level Windowing NEWT Child Window w/ NEWT Parent NEWT Child Window w/ AWT [...]</description>
      <content:encoded>&lt;p&gt;Since the mouse features were to easy to add and my Android vacation should take a bit longer, our OS X port was a good candidate to burn some hours I don&amp;#8217;t have.&lt;/p&gt;
&lt;p&gt;What should work for OS X by now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NEWT Top-Level Windowing&lt;/li&gt;
&lt;li&gt;NEWT Child Window w/ NEWT Parent&lt;/li&gt;
&lt;li&gt;NEWT Child Window w/ AWT Parent&lt;/li&gt;
&lt;li&gt;JOGL incl. shared context&lt;/li&gt;
&lt;li&gt;NEWT works w/ AWT enabled JVM out of the box&lt;/li&gt;
&lt;li&gt;Method to execute a Runnable on the MainThread&lt;/li&gt;
&lt;li&gt;The new native Jar loading facility (Application, Applet, Webstart)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span id="more-374"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The window positioning code was a torture, since the AWT components are not top-level on OS X. Hence we have to calculation the proper screen size position in bottom-left coordination space, even when resizing the window.&lt;br /&gt;
Maybe there are still some glitches in case of a NEWT child within an AWT floating Container, but most cases work fine.&lt;/p&gt;
&lt;p&gt;Shared or offscreen context destruction was another issue.&lt;br /&gt;
We have to run this task on the MainThread, otherwise we experienced a ~10s freeze.&lt;/p&gt;
&lt;p&gt;Btw our MainThread semantics have been simplified a lot.&lt;br /&gt;
On OS X, it just launches the user main class in a new thread while continuing &lt;i&gt;as&lt;/i&gt; the NSApp MainThread.&lt;br /&gt;
In short, it is no more required when using an AWT enabled JVM, since it already launches as the NSApp MainThread.&lt;/p&gt;
&lt;p&gt;After a few more cleanups, I will prepare the next release and test our new native Jar loading mechanism&lt;br /&gt;
and Applets in general.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://jogamp.org"&gt;JogAmp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jogamp.org/wiki/index.php/Downloading_and_installing_JOGL"&gt;How to download and install.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But be aware that these features will be promoted to the next release RC4,&lt;br /&gt;
so you would need to wait or use the autobuilds, see &lt;a href="http://jogamp.org/wiki/index.php/Downloading_and_installing_JOGL#Downloading_the_latest_automatic_build"&gt;Downloading the latest automatic build&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Note on the side: Motivation for the OS X port was not my liking of the platform, which I don&amp;#8217;t, but to just complete our platform independent solution. Hence having NEWT working well on OS X is mandatory here.&lt;/p&gt;</content:encoded>
      <category>3D, OpenGL, ..</category>
      <category>Computer Stuff</category>
      <category>JOGL</category>
      <category>3D</category>
      <category>Java</category>
      <category>OpenGL</category>
      <category>OS X</category>
      <pubDate>Thu, 13 Oct 2011 21:48:16 GMT</pubDate>
      <guid isPermaLink="false">http://jausoft.com/blog/?p=374</guid>
      <dc:creator>Sven</dc:creator>
      <dc:date>2011-10-13T21:48:16Z</dc:date>
    </item>
    <item>
      <title>New NEWT Mouse Features</title>
      <link>http://jausoft.com/blog/2011/10/13/new-newt-mouse-features/</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jausoft.com/blog/2011/10/13/new-newt-mouse-features/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>After doing all the Android work, I thought I need a break and finally added the NEWT mouse features some are desiring: Visibility set pointer visible or invisible Confined confine pointer to window, or not Warp set mouse position within the window This is NEWT&amp;#8217;s minimal API addition in this regard. The InputEvent&amp;#8217;s modifiers expose [...]</description>
      <content:encoded>&lt;p&gt;After doing all the Android work, I thought I need a break and finally&lt;br /&gt;
added the NEWT mouse features some are desiring:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Visibility&lt;br /&gt;
set pointer visible or invisible
&lt;/li&gt;
&lt;li&gt;Confined&lt;br /&gt;
confine pointer to window, or not
&lt;/li&gt;
&lt;li&gt;Warp&lt;br /&gt;
set mouse position within the window
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span id="more-365"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This is &lt;a href="http://jogamp.org/git/?p=jogl.git;a=blobdiff;f=src/newt/classes/com/jogamp/newt/Window.java;h=a69b8dbb390f77fc6753ce3d5e58246367599659;hp=24555bf395ee608a9e6f0c69f21700e8c069a5d9;hb=24e0591b6be036d5389cc1eb986ed5e86043ba65;hpb=51a9f23d629cd4e6b22d7afaf009bb96b2ed270f"&gt;NEWT&amp;#8217;s minimal API&lt;/a&gt; addition in this regard.&lt;/p&gt;
&lt;p&gt;The InputEvent&amp;#8217;s modifiers expose the above states &lt;i&gt;confined&lt;/i&gt; and &lt;i&gt;invisible&lt;/i&gt;&lt;br /&gt;
which can be easily queried and reacted upon in the event listener, as shown in &lt;a href="http://jogamp.org/git/?p=jogl.git;a=blob;f=src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/GearsES2.java;hb=HEAD#l297"&gt;GearsES2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This allows you to have a game-like mouse navigation, where you control the direction w/o pressing the mouse button (which you may need for something else), not seeing the mouse pointer and last but not least,&lt;br /&gt;
not leaving the game window.&lt;/p&gt;
&lt;p&gt;Tested w/ &lt;a href="http://jogamp.org/git/?p=jogl.git;a=blob;f=src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/newt/TestGearsES2NEWT.java;hb=HEAD"&gt;TestGearsES2NEWT&lt;/a&gt;, using&lt;br /&gt;
&lt;a href="http://jogamp.org/git/?p=jogl.git;a=blob;f=src/test/com/jogamp/opengl/test/junit/jogl/demos/es2/GearsES2.java;hb=HEAD#l297"&gt;GearsES2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is currently impl. for X11 and Windows and I am currently adding these to our OSX port.&lt;br /&gt;
Since the default operation for these features are NOP and touchscreen don&amp;#8217;t require any of those, there is no work to do on Android in this regard.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://jogamp.org"&gt;JogAmp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jogamp.org/wiki/index.php/Downloading_and_installing_JOGL"&gt;How to download and install.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But be aware that these features will be promoted to the next release RC4,&lt;br /&gt;
so you would need to wait or use the autobuilds, see &lt;a href="http://jogamp.org/wiki/index.php/Downloading_and_installing_JOGL#Downloading_the_latest_automatic_build"&gt;Downloading the latest automatic build&lt;/a&gt;.&lt;/p&gt;</content:encoded>
      <category>3D, OpenGL, ..</category>
      <category>Computer Stuff</category>
      <category>JOGL</category>
      <category>3D</category>
      <category>Java</category>
      <category>OpenGL</category>
      <pubDate>Thu, 13 Oct 2011 21:20:48 GMT</pubDate>
      <guid isPermaLink="false">http://jausoft.com/blog/?p=365</guid>
      <dc:creator>Sven</dc:creator>
      <dc:date>2011-10-13T21:20:48Z</dc:date>
    </item>
    <item>
      <title>Finished my post processing anti-aliasing evaluation and settled...</title>
      <link>http://copypastaresearch.tumblr.com/post/11316341043</link>
      <description>&lt;img src="http://25.media.tumblr.com/tumblr_lswnptrMCD1qdsecho1_r1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Finished &lt;a href="http://copypastaresearch.tumblr.com/post/11101649574/continuing-with-my-experiments-regarding-anti"&gt;my post processing anti-aliasing evaluation&lt;/a&gt; and settled with a combination of &lt;a href="http://timothylottes.blogspot.com/2011/03/nvidia-fxaa.html"&gt;FXAA &lt;/a&gt;and &lt;a href="http://copypastaresearch.tumblr.com/post/1270735985/while-experimenting-with-glsl-based-fsaa-aka"&gt;2xFSAA&lt;/a&gt;. As before I used the Mandelbrot and Displaylist routines as basis for the experiments. Source on Github: &lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/src/jogamp/routine/jogl/programmablepipeline/GL3_FXAA_Mandelbrot.java"&gt;GL3_FXAA_Mandelbrot.java&lt;/a&gt; and &lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/src/jogamp/routine/jogl/programmablepipeline/GL3_FXAA_DisplayLists.java"&gt;GL3_FXAA_DisplayLists.java&lt;/a&gt;. JOGL ?friendly? fragment shader (eliminated the need for a dedicated vertex shader): &lt;a href="https://github.com/demoscenepassivist/SocialCoding/blob/master/code_demos_jogamp/shaders/fxaa.fs"&gt;.fs&lt;/a&gt;&lt;/p&gt;</description>
      <category>FXAA</category>
      <category>post processing</category>
      <category>anti aliasing</category>
      <category>Fragment Shader</category>
      <category>jogl</category>
      <pubDate>Tue, 11 Oct 2011 14:17:00 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/11316341043</guid>
      <dc:date>2011-10-11T14:17:00Z</dc:date>
    </item>
    <item>
      <title>Android Test APKs [201110080141utc]</title>
      <link>http://jausoft.com/blog/2011/10/07/android-test-apks-201110080141utc/</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jausoft.com/blog/2011/10/07/android-test-apks-201110080141utc/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>Since we were not able to hook up the Android test machine to Jenkins to produce builds and a release, I thought it might be of interest to share my builds with whoever is interested. Just go to this test deployment folder: http://jogamp.org/deployment/test/android/201110080141utc/ Download all the APKs: gluegen-rt.apk jogl.all-android.apk jogl.test.apk jogl.android-launcher.apk and install them via [...]</description>
      <content:encoded>&lt;p&gt;Since we were not able to hook up the Android test machine to Jenkins&lt;br /&gt;
to produce builds and a release, I thought it might be of interest to share my builds with&lt;br /&gt;
whoever is interested.&lt;/p&gt;
&lt;p&gt;Just go to this test deployment folder:&lt;br /&gt;
&lt;a href="http://jogamp.org/deployment/test/android/201110080141utc/"&gt;http://jogamp.org/deployment/test/android/201110080141utc/&lt;/a&gt;&lt;span id="more-360"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Download all the APKs:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;gluegen-rt.apk&lt;/li&gt;
&lt;li&gt;jogl.all-android.apk &lt;/li&gt;
&lt;li&gt;jogl.test.apk&lt;/li&gt;
&lt;li&gt;jogl.android-launcher.apk&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;and install them via the ADB:&lt;/p&gt;
&lt;pre&gt;
   adb install gluegen-rt.apk
   adb install jogl.all-android.apk
   adb install jogl.test.apk
   adb install jogl.android-launcher.apk
&lt;/pre&gt;
&lt;p&gt;You can uninstall them as follows:&lt;/p&gt;
&lt;pre&gt;
adb uninstall com.jogamp.common
adb uninstall javax.media.opengl
adb uninstall com.jogamp.opengl.test
adb uninstall com.jogamp.android.launcher
&lt;/pre&gt;
&lt;p&gt;The APKs are currently just signed with a temporary key and debug is enabled.&lt;/p&gt;
&lt;p&gt;Uninstalling them manually is required when you like to try to test a new version,&lt;br /&gt;
which will appear in the same parent folder under a different timestamp soon.&lt;/p&gt;
&lt;p&gt;Please visit our forum at &lt;a href="http://forum.jogamp.org/"&gt;http://forum.jogamp.org/&lt;/a&gt;,&lt;br /&gt;
actual thread for this test release is&lt;br /&gt;
&lt;a href="http://forum.jogamp.org/Android-Test-APKs-201110080141utc-td3404613.html"&gt;http://forum.jogamp.org/Android-Test-APKs-201110080141utc-td3404613.html&lt;/a&gt;,&lt;br /&gt;
and leave your comments there if you like, thank you.&lt;/p&gt;
&lt;p&gt;The API in regards to Android is under review and will change&lt;br /&gt;
to make the experience more comfortable.&lt;/p&gt;
&lt;p&gt;However, we already achieved to run a Java  module on desktop as an application or applet&lt;br /&gt;
and on Android / Mobile w/o any change.&lt;br /&gt;
This is the main goal of porting JOGL on Android, no need for native code or rewriting your application.&lt;/p&gt;
&lt;p&gt;Cheers, Sven&lt;/p&gt;</content:encoded>
      <category>3D, OpenGL, ..</category>
      <category>Computer Stuff</category>
      <category>JOGL</category>
      <category>3D</category>
      <category>Android</category>
      <category>Applet</category>
      <category>Java</category>
      <pubDate>Sat, 08 Oct 2011 02:11:23 GMT</pubDate>
      <guid isPermaLink="false">http://jausoft.com/blog/?p=360</guid>
      <dc:creator>Sven</dc:creator>
      <dc:date>2011-10-08T02:11:23Z</dc:date>
    </item>
    <item>
      <title>Continuing with my experiments regarding anti aliasing, I took a...</title>
      <link>http://copypastaresearch.tumblr.com/post/11101649574</link>
      <description>&lt;img src="http://25.media.tumblr.com/tumblr_lsnh5b26Wa1qdsecho1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Continuing with my experiments regarding anti aliasing, I took a look at the idea of combining post-processing anti-aliasing (&lt;a href="http://timothylottes.blogspot.com/2011/03/nvidia-fxaa.html"&gt;FXAA&lt;/a&gt;) with &lt;a href="http://copypastaresearch.tumblr.com/post/1270735985/while-experimenting-with-glsl-based-fsaa-aka"&gt;super sampling&lt;/a&gt; &lt;a href="http://timothylottes.blogspot.com/2011/05/fxaa-3-status-update.html"&gt;as explained by Timothy Lottes&lt;/a&gt;. As the above picture clearly shows the results of 2xFSAA+FXAA line up somewhat between 2xFSAA and 4xFSAA at the cost of 2xFSAA (as FXAA is neglectable performance wise). JOGL2 port/implementation coming up shortly ?&lt;/p&gt;</description>
      <category>post processing</category>
      <category>FXAA</category>
      <category>Super Sampling</category>
      <category>jogl</category>
      <category>Fragment Shader</category>
      <pubDate>Thu, 06 Oct 2011 15:17:00 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/11101649574</guid>
      <dc:date>2011-10-06T15:17:00Z</dc:date>
    </item>
    <item>
      <title>JOGL/JogAmp @ Red Square / Moscow ? NURBS @ GraphiCon?2011</title>
      <link>http://jausoft.com/blog/2011/10/05/jogljogamp-red-square-moscow-nurbs-graphicon2011/</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jausoft.com/blog/2011/10/05/jogljogamp-red-square-moscow-nurbs-graphicon2011/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>While being in Moscow at GraphiCon&amp;#8217;2011 to release Rami&amp;#8217;s paper about the math of JOGL&amp;#8217;s new graph package &amp;#8230; Resolution Independent GPU Accelerated Curve &amp;#38; Font Rendering .. we finally made good progress in completing the Android port including graph. JOGL/JogAmp @ Red Square / Moscow (edited) 0:00 &amp;#8211; 1:20 : Part 1 &amp;#8211; Gears [...]</description>
      <content:encoded>&lt;p&gt;While being in Moscow at &lt;a href="http://gc2011.graphicon.ru/en/program/scientific#en4"&gt;GraphiCon&amp;#8217;2011&lt;/a&gt; to release &lt;a href="http://ramisantina.com/blog/?p=114"&gt;Rami&amp;#8217;s paper&lt;/a&gt;&lt;/p&gt;
&lt;table border="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div id="attachment_325" class="wp-caption alignnone" style="width: 310px"&gt;&lt;br /&gt;
&lt;a href="http://jausoft.com/blog/wp-content/uploads/2011/10/book_face.small_.png"&gt;&lt;img class="alignnone size-medium wp-image-326" src="http://jausoft.com/blog/wp-content/uploads/2011/10/book_face.small_-225x300.png" alt="GraphiCon'2011 Book" width="225" height="300" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;GraphiCon 2011 Book&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div id="attachment_325" class="wp-caption alignnone" style="width: 310px"&gt;&lt;a href="http://jausoft.com/blog/wp-content/uploads/2011/10/book_page70.med_..png"&gt;&lt;img class="size-medium wp-image-325" src="http://jausoft.com/blog/wp-content/uploads/2011/10/book_page70.med_.-300x225.png" alt="Resolution Independent NURBS Curves Rendering using Programmable Graphics Pipeline" width="300" height="225" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Resolution Independent NURBS Curves Rendering using Programmable Graphics Pipeline&lt;/p&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span id="more-324"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;about the math of JOGL&amp;#8217;s new graph package &amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;iframe width="500" height="281" src="http://www.youtube.com/embed/Rqsu46ifMaw?fs=1&amp;#038;feature=oembed" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href='http://www.youtube.com/watch?v=Rqsu46ifMaw'&gt;Resolution Independent GPU Accelerated Curve &amp;#38; Font Rendering &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;.. we finally made good progress in completing the Android port including graph.&lt;/p&gt;
&lt;p&gt;&lt;iframe width="500" height="281" src="http://www.youtube.com/embed/jANikHFGwks?fs=1&amp;#038;feature=oembed" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href='http://www.youtube.com/watch?v=jANikHFGwks'&gt;JOGL/JogAmp @ Red Square / Moscow (edited)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;0:00 &amp;#8211; 1:20 : Part 1 &amp;#8211; Gears ES 2.0 @ Red Square @ Day&lt;br /&gt;
1:25 &amp;#8211; 2:50 : Part 2 &amp;#8211; All Demos @ Red Square @ Night&lt;br /&gt;
2:50 &amp;#8211; 3:45 : Part 3 &amp;#8211; Graph UI on Tablet &amp;#38; Phone&lt;/p&gt;</content:encoded>
      <category>3D, OpenGL, ..</category>
      <category>Computer Stuff</category>
      <category>JOGL</category>
      <category>3D</category>
      <category>Android</category>
      <category>Java</category>
      <category>OpenGL</category>
      <pubDate>Wed, 05 Oct 2011 19:26:34 GMT</pubDate>
      <guid isPermaLink="false">http://jausoft.com/blog/?p=324</guid>
      <dc:creator>Sven</dc:creator>
      <dc:date>2011-10-05T19:26:34Z</dc:date>
    </item>
    <item>
      <title>With the current rate post-processing antialiasing techniques...</title>
      <link>http://copypastaresearch.tumblr.com/post/11058620045</link>
      <description>&lt;img src="http://25.media.tumblr.com/tumblr_lslesfOHg31qdsecho1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;With the current rate post-processing antialiasing techniques are invented my projection is that we will run out of four letter acronyms by the end of the year: &lt;a href="http://www.realtimerendering.com/blog/morphological-antialiasing/"&gt;MLAA&lt;/a&gt;, &lt;a href="http://timothylottes.blogspot.com/2011/03/nvidia-fxaa.html"&gt;FXAA&lt;/a&gt;, &lt;a href="http://www.geeks3d.com/20110129/sraa-subpixel-reconstruction-anti-aliasing-nvidias-reply-to-amds-mlaa/"&gt;SRAA&lt;/a&gt;, &lt;a href="http://www.geeks3d.com/20110313/gpaa-geometric-post-process-anti-aliasing/"&gt;GPAA&lt;/a&gt;, &lt;a href="http://www.gamedev.net/topic/580517-nfaa---a-post-process-anti-aliasing-filter-results-implementation-details/"&gt;NFAA&lt;/a&gt; (to name only a few). So I felt it was time to &lt;a href="http://copypastaresearch.tumblr.com/post/1270735985/while-experimenting-with-glsl-based-fsaa-aka"&gt;revisit the whole anti-aliasing problem&lt;/a&gt; and started with porting/evaluating FXAA. Looks promising, more to come ?&lt;/p&gt;</description>
      <category>postprocessing</category>
      <category>anti aliasing</category>
      <category>FXAA</category>
      <category>jogl</category>
      <pubDate>Wed, 05 Oct 2011 12:31:27 GMT</pubDate>
      <guid isPermaLink="false">http://copypastaresearch.tumblr.com/post/11058620045</guid>
      <dc:date>2011-10-05T12:31:27Z</dc:date>
    </item>
    <item>
      <title>Bug Hunting on Android ?</title>
      <link>http://jausoft.com/blog/2011/10/04/bug-hunting-on-android/</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jausoft.com/blog/2011/10/04/bug-hunting-on-android/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>While fixing JOGL for Android, Rami and I are testing the code against the consumer devices: Asus Transformer, Android 3.2, NV Tegra2 Samsung Galaxy Tab 10.1, Android 3.1, NV Tegra2 Samsung Galaxy S2, Android 2.3, ARM Mali 400 MP Samsung Galaxy S1, Android 2.3, Omap 34xx We have expected glitches in the OpenGL drivers and/or [...]</description>
      <content:encoded>&lt;p&gt;While fixing &lt;a href="http://jogamp.org/"&gt;JOGL&lt;/a&gt; for Android,&lt;br /&gt;
&lt;a href="http://ramisantina.com/blog/"&gt;Rami&lt;/a&gt; and I are testing the code against the consumer devices:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Asus Transformer, Android 3.2, NV Tegra2&lt;/li&gt;
&lt;li&gt;Samsung Galaxy Tab 10.1, Android 3.1, NV Tegra2&lt;/li&gt;
&lt;li&gt;Samsung Galaxy S2, Android 2.3, ARM Mali 400 MP&lt;/li&gt;
&lt;li&gt;Samsung Galaxy S1, Android 2.3, Omap 34xx&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span id="more-312"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We have expected glitches in the OpenGL drivers and/or Android environment&lt;br /&gt;
and even found bugs which does not exist on a similar device, ie device 1 and 2.&lt;/p&gt;
&lt;p&gt;Device 3 works absolutely flawless, &lt;strong&gt;kudos&lt;/strong&gt; to the ARM developer&lt;br /&gt;
of the MALI silicon and it&amp;#8217;s drivers! No workaround is necessary and our demos worked&lt;br /&gt;
straight out of the box, even w/ multisampling enabled.&lt;/p&gt;
&lt;p&gt;Device 4 shows flickering on &lt;strong&gt;all&lt;/strong&gt; demos, where the FPS value&lt;br /&gt;
is always just around 18-23, hence below V-Sync.&lt;br /&gt;
We actually have no clue why, since device 3 works perfect. Since both devices are mostly equal&lt;br /&gt;
but it&amp;#8217;s GPU .. we must assume it&amp;#8217;s about the Omap3 driver.&lt;/p&gt;
&lt;p&gt;The Tegra2 devices gave us quite a headache &lt;img src='http://jausoft.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;Device 1 and 2 (hence Tegra2) exposes the following bugs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;discard&lt;/strong&gt; in fragment shader freezes the GLSL compiler&lt;/li&gt;
&lt;li&gt; mixing sampler2D w/ a non texture code path let&amp;#8217;s GLSL compiler result in error&lt;br /&gt;
        &lt;code&gt;P1202 Texture's gl states do not match with shader's&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Device 2 also exposes an &lt;em&gt;interesting&lt;/em&gt; bug not &lt;em&gt;available&lt;/em&gt; on the other Tegra2 device,&lt;br /&gt;
which rendered all our demos invisible, ie. resulting in a&lt;strong&gt; blank screen&lt;/strong&gt;, where only the clear color was shown.&lt;br /&gt;
Hunting down this one took also quite a while, but after stumbling over &lt;a href="http://developer.nvidia.com/nvidia-perfhud-es"&gt;NV&amp;#8217;s PerfHud ES&lt;/a&gt; and some hints about &lt;a href="http://developer.nvidia.com/beta-forum#/discussion/541/instrumented-opengl-es-drivers-for-end-user-device-to-use-perfhud-es"&gt;how to enable it on consumer devices&lt;/a&gt; the culprit was found.&lt;br /&gt;
The &lt;em&gt;GLState Viewer&lt;/em&gt; exposed that our &lt;code&gt;uniform mat4 mgl_PMVMatrix[2];&lt;/code&gt; wasn&amp;#8217;t set via &lt;code&gt;glUniformMatrix4fv(..)&lt;/code&gt;,&lt;del datetime="2011-10-04T23:34:39+00:00"&gt; probably a bug within the OpenGL ES 2.0 driver code.&lt;br /&gt;
Actually device 1 and 2&amp;#8242;s &lt;code&gt;libGLESv2_tegra.so&lt;/code&gt; differ where the other EGL/GL driver files are the same. However, replacing it did not do the trick.&lt;/del&gt;&lt;br /&gt;
&lt;del datetime="2011-10-04T23:34:39+00:00"&gt;Replacing the mat4 array with a simple &lt;code&gt;uniform mat4 mgl_PMVMatrix;&lt;/code&gt; did the trick, ofc we need a better workaround for this case.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The mat4 array bug turns out to be &lt;a href="http://code.google.com/p/android/issues/detail?id=16434"&gt;Android 3.0 Dalvik Issue 16434&lt;/a&gt;. A simple workaround for our &lt;a href="http://jogamp.org/git/?p=jogl.git;a=commit;h=54fe0a4a5ccc74030e6c00fd13b29fc443620c8f"&gt;PMVMatrix&lt;/a&gt; &lt;a href="http://jogamp.org/git/?p=jogl.git;a=blob;f=src/jogl/classes/com/jogamp/opengl/util/PMVMatrix.java;hb=HEAD#l129"&gt;is submitted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Further more Tegra2 doesn&amp;#8217;t support the old fashioned &lt;a href="http://developer.nvidia.com/archived-tegra-forums/forum/msaa"&gt;MSAA&lt;/a&gt;, but their own &lt;em&gt;new&lt;/em&gt; extension&lt;br /&gt;
&lt;a href="http://www.khronos.org/registry/gles/extensions/NV/EGL_NV_coverage_sample.txt"&gt;EGL_NV_coverage_sample&lt;/a&gt;, to which we will have to revert to in our multisample GLCapabilties.&lt;/p&gt;</content:encoded>
      <category>3D, OpenGL, ..</category>
      <category>Computer Stuff</category>
      <category>JOGL</category>
      <category>3D</category>
      <category>Android</category>
      <category>Java</category>
      <category>OpenGL</category>
      <category>Tegra2</category>
      <pubDate>Tue, 04 Oct 2011 23:34:20 GMT</pubDate>
      <guid isPermaLink="false">http://jausoft.com/blog/?p=312</guid>
      <dc:creator>Sven</dc:creator>
      <dc:date>2011-10-04T23:34:20Z</dc:date>
    </item>
    <item>
      <title>Version 3.0.1</title>
      <link>http://www.dyn4j.org/archives/214</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dyn4j.org/archives/214/feed</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>3.0.1 incorporates many small changes. JUnit test, the TestBed and a new testing/demo application, Sandbox, have been moved around to better structure the project. Many major and minor bug fixes have been made. The most visible change is the normalization of the Joint class methods. In addition, the WeldJoint class now supports a soft joint [...]</description>
      <content:encoded>&lt;p&gt;3.0.1 incorporates many small changes.  JUnit test, the TestBed and a new testing/demo application, Sandbox, have been moved around to better structure the project.  Many major and minor bug fixes have been made.  The most visible change is the normalization of the Joint class methods.  In addition, the WeldJoint class now supports a soft joint setting.&lt;br /&gt;
&lt;/p&gt;
&lt;div style="text-align: center;"&gt;
&lt;img src="http://www.dyn4j.org/Sandbox/screenshot-v3.0.1.png" width="350" height="311" /&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0" style="border: none; width: 100%;"&gt;
&lt;tr&gt;
&lt;td style="border: none;"&gt;Launch the TestBed&lt;/td&gt;
&lt;td style="border: none; width: 30px;"&gt;&lt;/td&gt;
&lt;td style="border: none;"&gt;Launch the Sandbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border: none;"&gt;&lt;a href="http://www.dyn4j.org/TestBed/latest/dyn4j-TestBed.jnlp" target="_self"&gt;&lt;img src="http://www.dyn4j.org/images/jws_launch.gif" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td style="border: none; width: 30px;"&gt;&lt;/td&gt;
&lt;td style="border: none;"&gt;&lt;a href="http://www.dyn4j.org/Sandbox/latest/dyn4j-Sandbox.jnlp" target="_self"&gt;&lt;img src="http://www.dyn4j.org/images/jws_launch.gif" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;When running either test application you may be asked to accept a certificate from me (I just self signed the JARs).  The certificates will expire six months from today&amp;#8230;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Both applications require Java 1.6+.&lt;/p&gt;
&lt;p&gt;In the TestBed application, be sure to type the &amp;#8220;c&amp;#8221; key to get the TestBed Control Panel so you can play with the simulator.  Use the Controls tab to view all the key board and mouse options.  Use the Tests tab to run a test of your choosing.  Use the Draw Options tab to set what is drawn to the screen.  And finally, use the Simulation Settings tab to play with all the different settings allowed by the engine.&lt;/p&gt;
&lt;p&gt;In the Sandbox application, use the menus, toolbar and the tree (right click for context menus) to run tests, save them, add bodies/joints, etc.&lt;/p&gt;</content:encoded>
      <category>Uncategorized</category>
      <pubDate>Tue, 04 Oct 2011 02:22:34 GMT</pubDate>
      <guid isPermaLink="false">http://www.dyn4j.org/?p=214</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2011-10-04T02:22:34Z</dc:date>
    </item>
    <item>
      <title>JogAmp Deployment Enhancements: Automatic loading of native JARs (Applet/Application)</title>
      <link>http://jausoft.com/blog/2011/09/23/jogamp-deployment-enhancements-automatic-loading-of-native-jars-appletapplication/</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://jausoft.com/blog/2011/09/23/jogamp-deployment-enhancements-automatic-loading-of-native-jars-appletapplication/feed/</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>Currently implemented in modules GlueGen and JOGL. TODO: JOAL and JOCL. jogamp-next points now to the signed beta build gluegen_410-joal_213-jogl_489-jocl_424-signed. See how it (NApplet) works online on the new JOGL Applet Test page. Without the need for using our Applet-Launcher the JNLP extension setting up the native library folder for applications we automatically verify all [...]</description>
      <content:encoded>&lt;p&gt;Currently implemented in modules GlueGen and JOGL. TODO: JOAL and JOCL.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jogamp.org/deployment/jogamp-next/"&gt;jogamp-next&lt;/a&gt; points now to the signed beta build &lt;a href="http://jogamp.org/deployment/archive/master/gluegen_410-joal_213-jogl_489-jocl_424-signed/"&gt;gluegen_410-joal_213-jogl_489-jocl_424-signed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See how it (NApplet) &lt;b&gt;works online&lt;/b&gt; on the new &lt;a href="http://jogamp.org/deployment/jogamp-next/jogl-test-applets.html"&gt;JOGL Applet Test page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Without&lt;/b&gt; the need for using&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;our Applet-Launcher&lt;/li&gt;
&lt;li&gt;the JNLP extension&lt;/li&gt;
&lt;li&gt;setting up the native library folder for applications&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;we automatically  &lt;span id="more-303"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;verify all it&amp;#8217;s certificates (for non applications)&lt;/li&gt;
&lt;li&gt;cache the JAR files native libraries&lt;/li&gt;
&lt;li&gt;use the cached native libraries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you can see in the documented html pages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://jogamp.org/deployment/jogamp-next/jogl-applet-version-napplet.html"&gt;JOGL Version NApplet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jogamp.org/deployment/jogamp-next/jogl-applet-runner-newt-gears-normal-napplet.html"&gt;NEWT Gears NApplet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;.. this simplifies the tag writing and removes the need to write your JNLP file.&lt;/p&gt;
&lt;p&gt;The native JAR download mechanism still benefits from the applet&amp;#8217;s&lt;br /&gt;
network cache mechanism, hence downloads the JAR only &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if it doesn&amp;#8217;t exist, or&lt;/li&gt;
&lt;li&gt;if the server version is updated&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course, this causes a network connection but surely not a big deal&lt;br /&gt;
and more correct. Users can still use the JNLP mechanism of course&lt;br /&gt;
using the JNLP tag:&lt;/p&gt;
&lt;pre&gt;
  &amp;#60;update check="background" policy="always"/&amp;#62;
&lt;/pre&gt;
&lt;p&gt;Applications don&amp;#8217;t need to worry about the system dependent way&lt;br /&gt;
of dropping and publish the native lib folder anymore.&lt;br /&gt;
Applications also load the native JAR file and use their native libs,&lt;br /&gt;
just deploy all JARs in the same folder &amp;#8211; done.&lt;/p&gt;
&lt;p&gt;Git commits in this regard:&lt;br /&gt;
 &amp;#8211; GlueGen from &lt;a href="http://jogamp.org/git/?p=gluegen.git;a=commit;h=f357a00e511f0049865392adecc4d042663da6e6"&gt;f357a00e511f0049865392adecc4d042663da6e6&lt;/a&gt; upto &lt;a href="http://jogamp.org/git/?p=gluegen.git;a=commit;h=609e649443f900116039cda7a1bc7c9359b0242f"&gt;609e649443f900116039cda7a1bc7c9359b0242f&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &amp;#8211; JOGL from &lt;a href="http://jogamp.org/git/?p=jogl.git;a=commit;h=ac358bd66878e63a370377d4c7f625ec5b1b9e31"&gt;ac358bd66878e63a370377d4c7f625ec5b1b9e31&lt;/a&gt; upto &lt;a href="http://jogamp.org/git/?p=jogl.git;a=commit;h=424a5ecbd7575eb39343638696c19cd617577912"&gt;424a5ecbd7575eb39343638696c19cd617577912&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This feature will be enabled in general for rc4 soon.&lt;/p&gt;
&lt;p&gt;Please reply w/ your concerns and ideas etc,&lt;br /&gt;
so we can make this one work fine and secure for all.&lt;/p&gt;
&lt;p&gt;Cheers, Sven&lt;/p&gt;</content:encoded>
      <category>3D, OpenGL, ..</category>
      <category>Computer Stuff</category>
      <category>JOGL</category>
      <category>3D</category>
      <category>Applet</category>
      <category>Java</category>
      <category>OpenGL</category>
      <category>Security</category>
      <category>Web</category>
      <pubDate>Fri, 23 Sep 2011 17:22:06 GMT</pubDate>
      <guid isPermaLink="false">http://jausoft.com/blog/?p=303</guid>
      <dc:creator>Sven</dc:creator>
      <dc:date>2011-09-23T17:22:06Z</dc:date>
    </item>
    <item>
      <title>Resolution independent curves @ GraphiCon 2011</title>
      <link>http://ramisantina.com/blog/?p=114</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://ramisantina.com/blog/?feed=rss2&amp;p=114</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments>
      <description>Will be presenting by the end of this month the paper behind the Resolution Independent Fonts, Curve, and UI rendering API added recently to jogl. Title:??Resolution Independent NURBS Curves Rendering using Programmable Graphics Pipeline Abstract: Non-Uniform Rational B-Splines (NURBS) are widely used,especially in the design and manufacturing industry, for their precision and ability to represent [...]</description>
      <content:encoded>&lt;p style="padding-left: 30px;"&gt;Will be presenting by the end of this month the paper behind the &lt;a href="http://ramisantina.com/blog/?p=73"&gt;Resolution Independent Fonts, Curve, and UI rendering API&lt;/a&gt; added recently to jogl.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Title:??Resolution Independent NURBS Curves Rendering using Programmable Graphics Pipeline&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Abstract:&lt;br /&gt;
Non-Uniform Rational B-Splines (NURBS) are widely used,especially in the design and manufacturing industry, for their precision and ability to represent complex shapes. These properties come at the cost of being computationally expensive for rendering. Many methods have tackled NURBS rendering by view based approximations and/or heavy pre-processing. We present a method for resolution independent rendering of curves and shapes, de?ned by NURBS, by utilizing the high parallelism of the programmable graphics hardware. The computation of the curve is processed directly on the GPU, without the need for complex pre-processing and/or additional storage of the basis functions as textures. Our method enables rendering of a complex NURBS shape in precise form, by de?ning only the curve?s hull. We also present a method to enhance the performance of the preprocessing stage, mainly triangulation, that ?tsour requirements and speeds up the process. With opti-mized preprocessing and using only the mobile pro?le of theprogrammable graphics pipeline, we achieve a fast and resolution independent method for rendering NURBS based 2d shapes on desktop and mobile devices.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Conference Program: ???&lt;a href="http://gc2011.graphicon.ru/en/program/scientific#en4" target="_blank"&gt;http://gc2011.graphicon.ru/en/program/scientific#en4&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Thanks to &lt;a href="http://jausoft.com/blog/"&gt;Sven Gothel&lt;/a&gt; and the &lt;a href="http://jogamp.org"&gt;Jogamp Community&lt;/a&gt; for all the fruitful discussions regarding this topic.&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;Hope to see you all there!&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;strong&gt;Update&lt;/strong&gt;: &lt;a title="paper" href="http://jogamp.org/doc/gpunurbs2011/p70-santina.pdf" target="_blank"&gt;Paper&lt;/a&gt; and &lt;a href="http://jogamp.org/doc/gpunurbs2011/graphicon2011-slides.pdf" target="_blank"&gt;slides&lt;/a&gt; published on &lt;a href="http://jogamp.org" target="_blank"&gt;Jogamp.org&lt;/a&gt;.&lt;/p&gt;</content:encoded>
      <category>development</category>
      <category>algorithm</category>
      <category>conference</category>
      <category>curve</category>
      <category>gpu</category>
      <category>jogl</category>
      <category>nurbs</category>
      <category>opengl</category>
      <category>rendering</category>
      <category>resolution independent</category>
      <pubDate>Wed, 07 Sep 2011 07:01:52 GMT</pubDate>
      <guid isPermaLink="false">http://ramisantina.com/blog/?p=114</guid>
      <dc:creator>Rami</dc:creator>
      <dc:date>2011-09-07T07:01:52Z</dc:date>
    </item>
    <item>
      <title>Siggraph 2011 ? Vancouver</title>
      <link>http://ramisantina.com/blog/?p=109</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://ramisantina.com/blog/?feed=rss2&amp;p=109</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>Once again siggraph was great&amp;#8230; didnt get time to see Vancouver but it looked nice! had the pleasure to co-present with Sven the latest development on Jogamp.org, mainly JOGL highlighting the newly added support for embedded devices (linux ARM and Android) and the new Resolution independent Font and User Interface. In all, it was a [...]</description>
      <content:encoded>&lt;p&gt;Once again siggraph was great&amp;#8230; didnt get time to see Vancouver but it looked nice!&lt;/p&gt;
&lt;p&gt;had the pleasure to co-present with &lt;a href="http://http://jausoft.com/blog/" target="_blank"&gt;Sven&lt;/a&gt; the latest development on Jogamp.org, mainly JOGL highlighting the newly added support for embedded devices (linux ARM and Android) and the&lt;br /&gt;
new Resolution independent Font and User Interface. In all, it was a great &amp;#8220;journey&amp;#8221; and the feedback we got was great as well.&lt;/p&gt;
&lt;p&gt;More:&lt;br /&gt;
&lt;a href="http://forum.jogamp.org/JOGL-Embedded-Device-Status-p1-tp3261029p3264149.html" target="_blank"&gt;The journey to Siggraph&lt;/a&gt; (the story)&lt;br /&gt;
&lt;a href="http://jausoft.com/blog/2011/08/17/jogl-embedded-device-status-p1/" target="_blank"&gt;JOGL Embedded Devices &lt;/a&gt; (the status)&lt;/p&gt;
&lt;p&gt;The presentation well be posted to jogamp.org by next week, we need to add snapshots to it&amp;#8230;etc)&lt;/p&gt;
&lt;p&gt;The Pictures: (courtesy of Justin)&lt;br /&gt;
&lt;span id="more-109"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class="wp-caption alignnone" style="width: 624px"&gt;&lt;img class="   " title="Setting up" src="http://ramisantina.com/images/siggraph2011/setup.jpg" alt="Setting up" width="614" height="461" /&gt;&lt;p class="wp-caption-text"&gt;Setting up the presentation and devices&lt;/p&gt;&lt;/div&gt;
&lt;div class="wp-caption alignnone" style="width: 624px"&gt;&lt;img class="  " title="Have to start" src="http://ramisantina.com/images/siggraph2011/start.jpg" alt="Starting" width="614" height="461" /&gt;&lt;p class="wp-caption-text"&gt;Left to right: projector problems, goodmorning...&lt;/p&gt;&lt;/div&gt;
&lt;div class="wp-caption alignnone" style="width: 624px"&gt;&lt;img class="  " title="Talk" src="http://ramisantina.com/images/siggraph2011/talk1.jpg" alt="" width="614" height="461" /&gt;&lt;p class="wp-caption-text"&gt;Talking..&lt;/p&gt;&lt;/div&gt;
&lt;div class="wp-caption alignnone" style="width: 624px"&gt;&lt;img class="  " title="the talk" src="http://ramisantina.com/images/siggraph2011/talk2.jpg" alt="" width="614" height="461" /&gt;&lt;p class="wp-caption-text"&gt;Talking..&lt;/p&gt;&lt;/div&gt;</content:encoded>
      <category>development</category>
      <category>bof</category>
      <category>jogamp</category>
      <category>jogl</category>
      <category>opengl</category>
      <category>siggraph</category>
      <category>visualization</category>
      <pubDate>Wed, 31 Aug 2011 10:25:26 GMT</pubDate>
      <guid isPermaLink="false">http://ramisantina.com/blog/?p=109</guid>
      <dc:creator>Rami</dc:creator>
      <dc:date>2011-08-31T10:25:26Z</dc:date>
    </item>
    <item>
      <title>JogAmp @ Siggraph2011</title>
      <link>http://ramisantina.com/blog/?p=105</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://ramisantina.com/blog/?feed=rss2&amp;p=105</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>Cross posting announcement with Sven Gothel. ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Jogamp will be at Siggraph this year after the great success of last year&amp;#8217;s BOF. JogAmp: 2D/3D &amp;#38; Multimedia Across Devices Tuesday, 9 August &amp;#124; 2:30 pm ? 4:30 pm &amp;#124; Vancouver Convention Centre JogAmp provides JOGL (OpenGL), JOCL (OpenCL) across devices on top of Java. Showcasing Resolution [...]</description>
      <content:encoded>&lt;p&gt;Cross posting announcement with &lt;a href="http://jausoft.com/blog/" target="_blank"&gt;Sven Gothel&lt;/a&gt;.&lt;br /&gt;
++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;/p&gt;
&lt;p&gt;Jogamp will be at &lt;a href="http://www.siggraph.org/s2011/for_attendees/birds-feather"&gt;Siggraph&lt;/a&gt; this year after the great success of last year&amp;#8217;s BOF.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;JogAmp: 2D/3D &amp;#38; Multimedia Across Devices&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tuesday, 9 August | 2:30 pm ? 4:30 pm | Vancouver Convention Centre&lt;br /&gt;
JogAmp provides JOGL (OpenGL), JOCL (OpenCL) across devices on top of Java.&lt;br /&gt;
Showcasing Resolution Independent Curve, Font and UI GPU Rendering on desktop and mobile (Android, etc).&lt;/p&gt;
&lt;p&gt;Jogamp Community&lt;br /&gt;
sgothel (at) jogamp.org&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Our goal is to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;recapitulate last year progress and discuss our directions&lt;/li&gt;
&lt;li&gt;demonstrate JogAmp Modules (JOGL, JOCL, ..) on multiple devices, PC (Windows, Linux, ..) and Mobile (Android, Linux.&lt;/li&gt;
&lt;li&gt;showcase our new resolution Independent Curve rendering, utilized shapes, fonts and UI. We also like to discuss it?s usability and how to accomplish a complete UI toolkit&lt;/li&gt;
&lt;li&gt;showcase user contributions and applications / use-cases&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you would like to showcase some tool/demo that uses jogl please contact us asap.&lt;/p&gt;
&lt;p&gt;all our results will be visible as usual via?&lt;a href="http://jogamp.org/"&gt;jogamp.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hope to see you there&amp;#8230;.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;</content:encoded>
      <category>development</category>
      <category>gpu</category>
      <category>jogamp</category>
      <category>jogl</category>
      <category>opengl</category>
      <category>resolution independent</category>
      <category>siggraph</category>
      <category>visualization</category>
      <pubDate>Wed, 15 Jun 2011 15:35:11 GMT</pubDate>
      <guid isPermaLink="false">http://ramisantina.com/blog/?p=105</guid>
      <dc:creator>Rami</dc:creator>
      <dc:date>2011-06-15T15:35:11Z</dc:date>
    </item>
    <item>
      <title>Version 3.0.0</title>
      <link>http://www.dyn4j.org/archives/206</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dyn4j.org/archives/206/feed</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>3.0.0 incorporates big changes to the library. The base package has been changed, the broadphase collision detection code has been updated adding 3 new implementations, many bug fixes and performance enhancements, a new joint, better documentation, many more JUnit tests, new example applications, and more. Show Me The TestBed! When running you may be asked [...]</description>
      <content:encoded>&lt;p&gt;3.0.0 incorporates big changes to the library.  The base package has been changed, the broadphase collision detection code has been updated adding 3 new implementations, many bug fixes and performance enhancements, a new joint, better documentation, many more JUnit tests, new example applications, and more.&lt;br /&gt;
&lt;/p&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="http://www.dyn4j.org/TestBed/latest/dyn4j-TestBed.jnlp" target="_self"&gt;&lt;br /&gt;
&lt;img src="http://www.dyn4j.org/TestBed/screenshot-v3.0.0.png" width="300" height="234" /&gt;&lt;br /&gt;
Show Me The TestBed!&lt;br /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;When running you may be asked to accept a certificate from me (I just self signed the JARs).  The certificates will expire six months from today&amp;#8230;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;All the releases require Java 1.6+.  Be sure to type the &amp;#8220;c&amp;#8221; key to get the TestBed Control Panel so you can play with the simulator.&lt;/p&gt;
&lt;p&gt;Use the Controls tab to view all the key board and mouse options.  Use the Tests tab to run a test of your choosing.  Use the Draw Options tab to set what is drawn to the screen.  And finally, use the Simulation Settings tab to play with all the different settings allowed by the engine.&lt;/p&gt;</content:encoded>
      <category>Uncategorized</category>
      <pubDate>Sun, 05 Jun 2011 19:15:55 GMT</pubDate>
      <guid isPermaLink="false">http://www.dyn4j.org/?p=206</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2011-06-05T19:15:55Z</dc:date>
    </item>
    <item>
      <title>GPU based User Interface ? WIP</title>
      <link>http://ramisantina.com/blog/?p=98</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://ramisantina.com/blog/?feed=rss2&amp;p=98</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>One the goals behind the work done in GPU based Curve Rendering, was the ability to investigate the possibilities regarding GPU based user interface in a 2D/3D scene &amp;#8211; ontop of jogl. As a test, pushed to repo a testcase for rendering a button with a label, using the Resolution Independent Region/Text Renderer. https://github.com/rsantina/jogl/commit/e6de1dcd253ef4d6ba9f584b4ed3540c85c66d2c Screenshots: [...]</description>
      <content:encoded>&lt;p&gt;One the goals behind the work done in GPU based Curve Rendering, was the ability to investigate the&lt;br /&gt;
possibilities regarding GPU based user interface in a 2D/3D scene &amp;#8211; ontop of jogl.&lt;/p&gt;
&lt;p&gt;As a test, pushed to repo a testcase for rendering a button with a label, using the Resolution Independent Region/Text Renderer.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/rsantina/jogl/commit/e6de1dcd253ef4d6ba9f584b4ed3540c85c66d2c" target="_blank"&gt;https://github.com/rsantina/jogl/commit/e6de1dcd253ef4d6ba9f584b4ed3540c85c66d2c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Screenshots: (click to view)&lt;span id="more-98"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class="wp-caption alignnone" style="width: 406px"&gt;&lt;a href="http://ramisantina.com/images/button01.png" target="_blank"&gt;&lt;img title="Resolution Independent Button" src="http://ramisantina.com/images/button01.png" alt="Resolution Independent Button" width="396" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Resolution Independent Button&lt;/p&gt;&lt;/div&gt;
&lt;div class="wp-caption alignnone" style="width: 406px"&gt;&lt;a href="http://ramisantina.com/images/button02.png" target="_blank"&gt;&lt;img title="Resolution Independent Button" src="http://ramisantina.com/images/button02.png" alt="Resolution Independent Button - rotated" width="396" height="127" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Resolution Independent Button - rotated&lt;/p&gt;&lt;/div&gt;
&lt;div class="wp-caption alignnone" style="width: 406px"&gt;&lt;a href="http://ramisantina.com/images/button03.png" target="_blank"&gt;&lt;img title="Resolution Independent Button" src="http://ramisantina.com/images/button03.png" alt="Resolution Independent Button - zoom in" width="396" height="127" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Resolution Independent Button  - closeup&lt;/p&gt;&lt;/div&gt;
&lt;div class="wp-caption alignnone" style="width: 406px"&gt;&lt;a href="http://ramisantina.com/images/button04.png" target="_blank"&gt;&lt;img title="Resolution Independent Button" src="http://ramisantina.com/images/button04.png" alt="Resolution Independent Button - closeup" width="396" height="127" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Resolution Independent Button  - clicked&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Cheers,&lt;/p&gt;</content:encoded>
      <category>development</category>
      <category>curve</category>
      <category>interface</category>
      <category>jogl</category>
      <category>newt</category>
      <category>nurbs</category>
      <category>opengl</category>
      <category>rendering</category>
      <category>resolution independent</category>
      <category>text</category>
      <category>UI</category>
      <pubDate>Fri, 08 Apr 2011 15:49:34 GMT</pubDate>
      <guid isPermaLink="false">http://ramisantina.com/blog/?p=98</guid>
      <dc:creator>Rami</dc:creator>
      <dc:date>2011-04-08T15:49:34Z</dc:date>
    </item>
    <item>
      <title>GPU based Resolution Independent Font &amp; Curve Rendering ? initial Release</title>
      <link>http://ramisantina.com/blog/?p=73</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://ramisantina.com/blog/?feed=rss2&amp;p=73</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments>
      <description>Below is about the latest project done by Sven Gothel and myself, which is now published/merged in JogAmp &amp;#8211; Jogl Project. The story: At first we started this project as an idea, started with a chat with Sven on possible ways to by pass the Microsoft patent on GPU Curve Rendering. So after digging into [...]</description>
      <content:encoded>&lt;p&gt;Below is about the latest project done by &lt;a title="Sven Gothel" href="http://jausoft.com/blog" target="_blank&amp;#34;"&gt;Sven Gothel&lt;/a&gt; and myself, which is now published/merged in &lt;a title="JogAmp - Jogl Project" href="http://jogamp.org" target="_blank"&gt;JogAmp &amp;#8211; Jogl Project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The story: At first we started this project as an idea, started with a chat with Sven on possible ways to by pass the Microsoft patent on GPU Curve Rendering. So after digging into the math of Loop/Blinn patent, devised a way to solve the problem with a different approach than the one used in the patent, the math behind the new approach will be published here soon (need to type them, currently on a notebook with too many scrabble).&lt;/p&gt;
&lt;p&gt;After making sure the math works in theory, moved into developing a prototype for the algorithm. While doing this, developed a tessellation utility to provide Delaunay based triangulation of the curved outlines, mainly to avoid using a hack on GLU tessellation to get the triangles and not to have a slow solution.  After having a working version of the demo, we went into the ?harder? part, getting good quality AA on the ever so tiny fonts. After lots of discussions and fighting the small dimples in the curves, we were able to devise a method that provided the best output of all the others we tried and sharp quality Anti Aliasing.&lt;/p&gt;
&lt;p&gt;At that point, we moved from building a prototype (proof of concept) to building an API so that we can add it to JOGL API, which was a great experience by it self, thinking of all the ways the user might wanna use it. ?We looked into making it more generic, usable, readable, and stable for a user. Not to forget making sure all the code is BSD license clean.&lt;/p&gt;
&lt;p&gt;Yesterday,?we reached to a point where we agreed that its ?clean? and good for an initial public release, merge with jogl project. ?More than enjoying the results and outcomes the best part was the collaboration and the discussion held during the project development. ?In short it was a great experience, and lots of fun!&lt;/p&gt;
&lt;p&gt;As for the tech part:?first some new snapshots,&lt;/p&gt;
&lt;p&gt;&lt;span id="more-73"&gt;&lt;/span&gt; (click image to view)&lt;/p&gt;
&lt;div class="wp-caption aligncenter" style="width: 410px"&gt;&lt;a href="http://ramisantina.com/images/text-sample01.png" target="_blank&amp;#34;"&gt;&lt;img title="Text with two pass AA" src="http://ramisantina.com/images/text-sample01.png" alt="Text with two pass AA" width="400" height="23" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Text with two pass AA&lt;/p&gt;&lt;/div&gt;
&lt;div class="wp-caption aligncenter" style="width: 410px"&gt;&lt;a href="http://ramisantina.com/images/text-ubuntufontset.png" target="_blank&amp;#34;"&gt;&lt;img title="Font Set showing all the glyphs in two pass rendering" src="http://ramisantina.com/images/text-ubuntufontset.png" alt="Font Set showing all the glyphs in two pass rendering" width="400" height="80" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Font Set showing all the glyphs in two pass rendering&lt;/p&gt;&lt;/div&gt;
&lt;div class="wp-caption aligncenter" style="width: 310px"&gt;&lt;a href="http://ramisantina.com/images/region-1pass.png" target="_blank&amp;#34;"&gt;&lt;img title="Manually Defined Region - One Pass" src="http://ramisantina.com/images/region-1pass.png" alt="Manually Defined Region - One Pass" width="300" height="169" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Manually Defined Region - One Pass&lt;/p&gt;&lt;/div&gt;
&lt;div class="wp-caption aligncenter" style="width: 231px"&gt;&lt;a href="http://ramisantina.com/images/font02.png"&gt;&lt;img title="Small text string - Two Pass Rendering" src="http://ramisantina.com/images/font02.png" alt="Small text string - Two Pass Rendering" width="221" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Small text string - Two Pass Rendering&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;?as a continuation to the earlier post, we have cleaned up the repository of the curve rendering module, and now merged into jogamp.org &amp;#8211; jogl project. (git sub-tree merge ).&lt;br /&gt;
The text and region renderer, have two rendering types defining the rendering Technique (SINGLE_PASS or TWO_PASS).&lt;/p&gt;
&lt;p&gt;Single Pass: the region with no AA for the straight edges and general shape, where only the curved regions have implicit AA function embedded in the calculations in the relevant fragment shader. This type of rendering is useful for most cases where AA quality on very small fonts/regions is not important. Example usage would be having text scattered around in a 3D scene. The developer is then free to use/plug in his post processing or just use MSAA which gives good results in most cases.&lt;/p&gt;
&lt;p&gt;Two Pass: (check the pictures above) render the region to an FBO and then in a second pass  attach it to the Bounding Box of the String and do a variant of a Gaussian blur on the text/region. Giving the ever sharp effect on the text that can?t be accomplished in a single pass rendering (at least all the other approaches that I tried). The sharpness of the final shape is dependent on the variable texture size for the first pass (giving the user a way to play with the effect: blurry to sharp). Note: later this will be available in an automatic manner. (hopefully not too later)&lt;/p&gt;
&lt;p&gt;To see details on how to use it you can take a look at the unit tests, and demos also pushed to the jogl repository.&lt;/p&gt;
&lt;p&gt;&lt;a title="https://github.com/sgothel/jogl" href="https://github.com/sgothel/jogl" target="_blank"&gt;https://github.com/sgothel/jogl&lt;/a&gt;&lt;br /&gt;
&lt;a title="https://github.com/rsantina/jogl" href="https://github.com/rsantina/jogl" target="_blank"&gt; https://github.com/rsantina/jogl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Having said all that, download the latest jogl build and try the demos,&lt;br /&gt;
would love hearing your feedback and ideas.&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;</content:encoded>
      <category>development</category>
      <category>algorithm</category>
      <category>curve</category>
      <category>glsl</category>
      <category>gpu</category>
      <category>jogl</category>
      <category>nurbs</category>
      <category>opengl</category>
      <category>rendering</category>
      <category>resolution independent</category>
      <category>text</category>
      <pubDate>Fri, 01 Apr 2011 15:58:21 GMT</pubDate>
      <guid isPermaLink="false">http://ramisantina.com/blog/?p=73</guid>
      <dc:creator>Rami</dc:creator>
      <dc:date>2011-04-01T15:58:21Z</dc:date>
    </item>
    <item>
      <title>GPU Resolution Independent Curve Rendering ? Brief</title>
      <link>http://ramisantina.com/blog/?p=45</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://ramisantina.com/blog/?feed=rss2&amp;p=45</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>In the past couple of weeks, I worked on developing a new technique to create an API for resolution independent?curve bounded regions and text in general. ?The main goal of this project was to move out of the Microsoft Patent Loop/Blinn approach which uses Bezier (Quadratic/Cubic) curve rendering to solve the problem. To by-pass the [...]</description>
      <content:encoded>&lt;p&gt;In the past couple of weeks, I worked on developing a new technique to create an API for resolution independent?curve bounded regions and text in general. ?The main goal of this project was to move out of the Microsoft Patent Loop/Blinn approach which uses Bezier (Quadratic/Cubic) curve rendering to solve the problem.&lt;/p&gt;
&lt;p&gt;To by-pass the Microsoft patent, developed the functions and parameters based on nurbs blending functions. The result of this approach gives great results especially in the region of injection points which where a main concern as well. ?The next problem?approached?was?Anti aliasing for the rendered curves especially targeting small fonts, since MSAA on small fonts will give a blurry non-sharp effect.&lt;/p&gt;
&lt;p&gt;Below are some snapshots from demos created to use the new text/curve renderer API (where the algorithm is implemented). Later on, ?will publish the detailed algorithm with a review of the AA techniques used and tested. But first will work in the upcoming week or so to polish the API before pushing to jogl repository.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-45"&gt;&lt;/span&gt;Click on image to view original size (all images are in png format to preserve quality)&lt;/p&gt;
&lt;p&gt;&lt;a href="../images/font01.png" target="_blank"&gt;&lt;img src="../images/font01.png" alt="Rendered string with AA" width="200" /&gt; &lt;/a&gt;&lt;br /&gt;
- A text string rendered with AA.&lt;/p&gt;
&lt;p&gt;&lt;a href="../images/font02.png" target="_blank"&gt;&lt;img src="../images/font02.png" alt="small sized string with high zoom out." width="200" /&gt; &lt;/a&gt;&lt;br /&gt;
- Rendering a small text using the same algorithm with AA.&lt;/p&gt;
&lt;p&gt;&lt;a href="../images/font03.png" target="_blank"&gt;&lt;img src="../images/font03.png" alt="Zoomed in Resolution Independent with AA" width="200" /&gt; &lt;/a&gt;&lt;br /&gt;
- Zoom in to the text showing Resolution independence.&lt;/p&gt;
&lt;p&gt;&lt;a href="../images/font04.png" target="_blank"&gt;&lt;img src="../images/font04.png" alt="Rendered string with AA" width="200" /&gt; &lt;/a&gt;&lt;br /&gt;
- Rotated text in a 3D scene.&lt;/p&gt;
&lt;p&gt;&lt;a href="../images/region01.png" target="_blank"&gt;&lt;img src="../images/region01.png" alt="Rendered string with AA" width="200" /&gt; &lt;/a&gt;&lt;br /&gt;
- A general curve bounded region rendered.&lt;/p&gt;</content:encoded>
      <category>development</category>
      <category>3d</category>
      <category>algorithm</category>
      <category>curve</category>
      <category>glsl</category>
      <category>gpu</category>
      <category>jogl</category>
      <category>nurbs</category>
      <category>opengl</category>
      <category>resolution independent</category>
      <category>text</category>
      <pubDate>Tue, 15 Mar 2011 14:31:31 GMT</pubDate>
      <guid isPermaLink="false">http://ramisantina.com/blog/?p=45</guid>
      <dc:creator>Rami</dc:creator>
      <dc:date>2011-03-15T14:31:31Z</dc:date>
    </item>
    <item>
      <title>The dyn4j TestBed Now Uses JOGL</title>
      <link>http://www.codezealot.org/archives/367</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.codezealot.org/archives/367/feed</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>I recently released a new version of the TestBed application (which is used to test the dyn4j project. In this new version I decided to move from Java2D to OpenGL. There is a great open source project called JOGL that makes the OpenGL API available to Java. You can test out the new TestBed here. [...]</description>
      <content:encoded>&lt;p&gt;I recently released a new version of the TestBed application (which is used to test the &lt;a href="http://www.dyn4j.org/"&gt;dyn4j&lt;/a&gt; project.  In this new version I decided to move from Java2D to OpenGL.&lt;/p&gt;
&lt;p&gt;There is a great open source project called &lt;a href="http://www.jogamp.org"&gt;JOGL&lt;/a&gt; that makes the OpenGL API available to Java.&lt;/p&gt;
&lt;p&gt;You can test out the new TestBed &lt;a href="http://www.dyn4j.org/TestBed/latest/dyn4j-TestBed.jnlp"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In addition to the full OpenGL API, JOGL also offers OO approaches to common tasks like texturing, shaders, etc.  The project owners, after reviving JOGL and JOAL (thank you!!!) have also been working on a binding to OpenCL called JOCL.  This seems very promising and hopefully I&amp;#8217;ll have some time to actually look into using this to help speed up some bottlenecks in dyn4j.&lt;/p&gt;
&lt;p&gt;As a side note, I do have to say that the OpenGL API is really good and pretty well documented.  I had a few &amp;#8220;scratch my head&amp;#8221; moments but for the most part I&amp;#8217;m really liking it.&lt;/p&gt;</content:encoded>
      <category>Game Development</category>
      <category>Java</category>
      <category>OpenGL</category>
      <pubDate>Sat, 05 Feb 2011 19:31:35 GMT</pubDate>
      <guid isPermaLink="false">http://www.codezealot.org/?p=367</guid>
      <dc:creator>William</dc:creator>
      <dc:date>2011-02-05T19:31:35Z</dc:date>
    </item>
    <item>
      <title>Version 2.2.3</title>
      <link>http://www.dyn4j.org/archives/193</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dyn4j.org/archives/193/feed</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>The new version, 2.2.3, features updated Javadocs, 3 different CCD modes, and a new JOGL based TestBed. Show Me The TestBed! When running you may be asked to accept a certificate from me (I just self signed the JARs). The certificates will expire six months from today&amp;#8230; All the releases require Java 1.6+. Be sure [...]</description>
      <content:encoded>&lt;p&gt;The new version, 2.2.3, features updated Javadocs, 3 different CCD modes, and a new &lt;a href="http://www.jogamp.org"&gt;JOGL&lt;/a&gt; based TestBed.&lt;br /&gt;
&lt;/p&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="http://www.dyn4j.org/TestBed/latest/dyn4j-TestBed.jnlp" target="_self"&gt;&lt;br /&gt;
&lt;img src="http://www.dyn4j.org/TestBed/screenshot-v2.2.3.png" width="300" height="234" /&gt;&lt;br /&gt;
Show Me The TestBed!&lt;br /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;/div&gt;
&lt;blockquote&gt;&lt;p&gt;When running you may be asked to accept a certificate from me (I just self signed the JARs).  The certificates will expire six months from today&amp;#8230;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;All the releases require Java 1.6+.  Be sure to type the &amp;#8220;c&amp;#8221; key to get the TestBed Control Panel so you can play with the simulator.&lt;/p&gt;
&lt;p&gt;Use the Controls tab to view all the key board and mouse options.  Use the Tests tab to run a test of your choosing.  Use the Draw Options tab to set what is drawn to the screen.  And finally, use the Simulation Settings tab to play with all the different settings allowed by the engine.&lt;/p&gt;</content:encoded>
      <category>Uncategorized</category>
      <pubDate>Sun, 30 Jan 2011 01:39:03 GMT</pubDate>
      <guid isPermaLink="false">http://www.dyn4j.org/?p=193</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2011-01-30T01:39:03Z</dc:date>
    </item>
    <item>
      <title>Version 2.2.2</title>
      <link>http://www.dyn4j.org/archives/182</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dyn4j.org/archives/182/feed</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>The new version, 2.2.2, features one more joint, AngleJoint and a few minor bug fixes. The RopeJoint has been extended to allow for a minimum distance in addition to the maximum distance. See the javadocs or source updates for more details. When running you may be asked to accept a certificate from me (I just [...]</description>
      <content:encoded>&lt;p&gt;The new version, 2.2.2, features one more joint, AngleJoint and a few minor bug fixes.  The RopeJoint has been extended to allow for a minimum distance in addition to the maximum distance.  See the &lt;a href="http://docs.dyn4j.org"&gt;javadocs&lt;/a&gt; or &lt;a href="http://code.google.com/p/dyn4j/updates/list"&gt;source updates&lt;/a&gt; for more details.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;When running you may be asked to accept a certificate from me (I just self signed the JARs).  The certificates will expire six months from today&amp;#8230;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div id="attachment_51" class="wp-caption alignright" style="width: 310px"&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.2/screenshot.png"&gt;&lt;img class="size-medium wp-image-51" title="TestBed Screenshot" src="http://www.dyn4j.org/files/testbed/release/v2.2.2/screenshot.png" alt="" width="300" height="234" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;The &amp;#34;Angle&amp;#34; test from the TestBed&lt;/p&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.2/testbed.jnlp" target="_self"&gt;JNLP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.2/testbed.html" target="_blank"&gt;Applet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.2/testbed.zip" target="_self"&gt;Standalone JARs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.2/license.txt" target="_blank"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All the releases require Java 1.6+.  Be sure to type the &amp;#8220;c&amp;#8221; key to get the TestBed Control Panel so you can play with the simulator.&lt;/p&gt;
&lt;p&gt;Use the Controls tab to view all the key board and mouse options.  Use the Tests tab to run a test of your choosing.  Use the Draw Options tab to set what is drawn to the screen.  And finally, use the Simulation Settings tab to play with all the different settings allowed by the engine.&lt;/p&gt;</content:encoded>
      <category>Uncategorized</category>
      <pubDate>Sat, 15 Jan 2011 18:35:08 GMT</pubDate>
      <guid isPermaLink="false">http://www.dyn4j.org/?p=182</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2011-01-15T18:35:08Z</dc:date>
    </item>
    <item>
      <title>3D Scene Navigation standards</title>
      <link>http://ramisantina.com/blog/?p=25</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://ramisantina.com/blog/?feed=rss2&amp;p=25</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>Picking up a new software and navigating thru the scene should be easy and intuitive.? Most of the tools out there are picking up a standard set of navigation modes which are the bare essential for a good user experience with your tool. Sure, some tools add a set of &amp;#8220;identity&amp;#8221;? navigation mode which identify [...]</description>
      <content:encoded>&lt;p&gt;Picking up a new software and navigating thru the scene should be easy and intuitive.? Most of the tools out there are picking up a standard set of navigation modes which are the bare essential for a good user experience with your tool.&lt;/p&gt;
&lt;p&gt;Sure, some tools add a set of &amp;#8220;identity&amp;#8221;? navigation mode which identify the software, but that can be tricky business since you need the user to quickly start navigating without worrying or reading the manual. Since very few are willing to read the manual anyways.&lt;/p&gt;
&lt;p&gt;While designing your user experience with your visualization tool, it would be a good idea to start with the following set of modes which are intuitive enough for users to start clicking away.&lt;/p&gt;
&lt;p&gt;This list assumes your building a navigation system for visualizing a large model for a City, landscape, CAD&amp;#8230;etc. For design tools, this list is not nearly complete.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Examine&lt;br /&gt;
&lt;/strong&gt;Summary: The default, basic mouse based navigation, and user fail safe.&lt;br /&gt;
Benefits: This mode is your navigation fail safe since if while using another mode and the user isn&amp;#8217;t able to get the desired view, this mode can be used for fine tuning.&lt;br /&gt;
Usage:&lt;br /&gt;
Dragging + Left Mouse: Rotate around viewpoint center or initial clicked location&lt;br /&gt;
Dragging + Right Mouse: Translate within current view plane.&lt;br /&gt;
Dragging + Middle Mouse: Zoom in/out along current view direction.&lt;br /&gt;
Mouse Wheel: smaller step zoom in/out along view direction, best for fine tuning.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hover&lt;br /&gt;
&lt;/strong&gt;Summary: Keyboard based, game like (easy for people with game experience)&lt;br /&gt;
Benefits: Always aligned/oriented along the ground, Intuitive for users with gaming background, best for scene movements, basic impl for a realistic walk&lt;br /&gt;
Usage:&lt;br /&gt;
W/A/S/D keys: movement around the current perpView plane (view-direction x right).&lt;br /&gt;
Arrow keys: same as WASD.&lt;br /&gt;
Dragging + Left Mouse: Change looking direction (rotate around the up vector)&lt;br /&gt;
Dragging + Right Mouse: nothing (extra: user action)&lt;br /&gt;
Dragging + Middle Mouse: nothing&lt;br /&gt;
Mouse Wheel: smaller step zoom in/out along view direction, best for fine tuning.&lt;br /&gt;
Additional: add gravity to move along the up vector, (great for climbing stairs, dropping to another level, &amp;#8230;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fly&lt;br /&gt;
&lt;/strong&gt;Summary: mouse based hover like navigation, fly around the scene.&lt;br /&gt;
Benefits: Fast movement around the scene, ability to change elevation and &amp;#8220;pitch&amp;#8221;&lt;br /&gt;
Usage:&lt;br /&gt;
Dragging + Left Mouse: move forward, turn left/right, or move backwards. depending on mouse diff.&lt;br /&gt;
Dragging + Right Mouse: nothing (extra: user action)&lt;br /&gt;
Dragging + Middle Mouse: change pitch&lt;/p&gt;
&lt;p&gt;Mouse Wheel: smaller step pitch change, best for fine tuning.&lt;br /&gt;
Additional: Left+Mouse dragging changes pitch direction, best for continuous movement since moving to middle mouse dragging not very intuitive and causes a slight interruption.&lt;/p&gt;
&lt;p&gt;With the above in hand a user can navigate along the scene, reach any view he wants, and have &amp;#8220;fun&amp;#8221; while doing so. Additional features like zoom-to-window, gravity on/off switch, axis alignment (forcing navigations to align with x, y, and/or z-axis) can be useful as shortcuts.&lt;/p&gt;
&lt;p&gt;Another helpful and very intuitive user control is the Over Head navigation control, which can be placed in the top right corner, great for user orientation and a good shortcut for switching views/modes. The best of such controls, in my view, the ViewCube created by AutoDesk AutoCAD.&lt;/p&gt;</content:encoded>
      <category>development</category>
      <category>jogl</category>
      <category>opengl</category>
      <category>visualization</category>
      <pubDate>Mon, 27 Dec 2010 08:51:35 GMT</pubDate>
      <guid isPermaLink="false">http://ramisantina.com/blog/?p=25</guid>
      <dc:creator>Rami</dc:creator>
      <dc:date>2010-12-27T08:51:35Z</dc:date>
    </item>
    <item>
      <title>Version 2.2.1</title>
      <link>http://www.dyn4j.org/archives/167</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dyn4j.org/archives/167/feed</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>The new version, 2.2.1, features one more joint, RopeJoint and a few minor bug fixes involving SecurityExceptions for sand-boxed environments. See the javadocs for more details. When running you may be asked to accept a certificate from me (I just self signed the JARs). The certificates will expire six months from today&amp;#8230; JNLP Applet Standalone [...]</description>
      <content:encoded>&lt;p&gt;The new version, 2.2.1, features one more joint, RopeJoint and a few minor bug fixes involving SecurityExceptions for sand-boxed environments.  See the &lt;a href="http://docs.dyn4j.org"&gt;javadocs&lt;/a&gt; for more details.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;When running you may be asked to accept a certificate from me (I just self signed the JARs).  The certificates will expire six months from today&amp;#8230;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div id="attachment_51" class="wp-caption alignright" style="width: 310px"&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.1/screenshot.png"&gt;&lt;img class="size-medium wp-image-51" title="TestBed Screenshot" src="http://www.dyn4j.org/files/testbed/release/v2.2.1/screenshot.png" alt="" width="300" height="234" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;The &amp;#34;Rope&amp;#34; test from the TestBed&lt;/p&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.1/testbed.jnlp" target="_self"&gt;JNLP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.1/testbed.html" target="_blank"&gt;Applet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.1/testbed.zip" target="_self"&gt;Standalone JARs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.1/license.txt" target="_blank"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All the releases require Java 1.6+.  Be sure to type the &amp;#8220;c&amp;#8221; key to get the TestBed Control Panel so you can play with the simulator.&lt;/p&gt;
&lt;p&gt;Use the Controls tab to view all the key board and mouse options.  Use the Tests tab to run a test of your choosing.  Use the Draw Options tab to set what is drawn to the screen.  And finally, use the Simulation Settings tab to play with all the different settings allowed by the engine.&lt;/p&gt;</content:encoded>
      <category>Uncategorized</category>
      <pubDate>Sun, 26 Dec 2010 23:58:14 GMT</pubDate>
      <guid isPermaLink="false">http://www.dyn4j.org/?p=167</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2010-12-26T23:58:14Z</dc:date>
    </item>
    <item>
      <title>Tutorial: Displaying Java OpenGL in an Eclipse editor with a menu bar and a run/pause button</title>
      <link>http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/</link>
      <description>Hi again! Wade Walker here, back for the fourth tutorial in my ongoing series on writing scientific</description>
      <content:encoded>&lt;p&gt;Hi again! Wade Walker here, back for the fourth tutorial in my ongoing series on writing scientific and engineering apps with Java OpenGL and Eclipse. OK, that might sound pretty forbidding, but it?s really not&amp;#8212;if you want to write any type of app with a complex interface and 3D graphics, these tutorials can help.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;I am returned as well! I am called Stitio, and, much as a viticulturist will build a trellis to guide his vines upwards to the sun, I create these headings to coax our readers? comprehensions to fruition!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Over the last three tutorials, me and my suddenly-wine-loving friend Stitio created a simple Java OpenGL (JOGL) app and showed how we can use the Eclipse Rich Client Platform (RCP) to let it run cross-platform and to create native binaries.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;And in this, the &lt;i&gt;quatri?me partie&lt;/i&gt; of our &lt;i&gt;oeuvre&lt;/i&gt;, we first revisit our humble origins before reaching a new apotheosis!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Hmm, your guess is as good as mine there. But what I think Stitio means is, before we can pile this thing any higher, we need to get a firmer foundation under it. First we?ll rename a few things to make more sense, and we?ll change the type of Eclipse RCP window we draw in so we won?t run into trouble later on. Then we?ll add a menu bar to our app, and finally&lt;br /&gt;
we?ll give it a toolbar with a run/pause button that can start and stop the simulation.&lt;/p&gt;
&lt;p&gt;Let the science begin! &lt;i&gt;Again!&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;!--more continue reading...--&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Preparing the soil: Wherein we set up our workspace yet once more&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;We?ll build on the &lt;a href="http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/"&gt;previous tutorial&lt;/a&gt;, so long-time readers can continue in the same workspace as last time. Or if you?re just joining us, you can create a new workspace directory, unzip &lt;a href="http://wadeawalker.files.wordpress.com/2010/10/jogl-projects-zip-not-a.doc"&gt;JOGL&lt;/a&gt; and the &lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-project-zip-not-a.doc"&gt;previous tutorial&lt;/a&gt; into it, and follow the instructions from the &lt;a href="http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/"&gt;second tutorial&lt;/a&gt; to import those projects into a new workspace.&lt;/p&gt;
&lt;p&gt;As usual, if you just want to skip to the end of this tutorial without all the clicky-typey, you can unzip &lt;a href="http://wadeawalker.files.wordpress.com/2010/10/jogl-projects-zip-not-a.doc"&gt;JOGL&lt;/a&gt; and &lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-project-zip-not-a1.doc"&gt;this tutorial&lt;/a&gt; into a new workspace directory, import them, and you?re done.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Changing the rootstock: Renaming one?s project and package&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;When I started this tutorial series, I didn?t realize I?d be expanding the same project over and over. So like an idiot I?ve been naming every tutorial?s project something different. But however! I can pretend I meant to do this all along, and show you how to use Eclipse?s refactoring features to change a project name.&lt;/p&gt;
&lt;p&gt;It starts off innocently enough. Right-click the project ?name.wadewalker.vbotutorial? in the package editor and select ?Refactor &amp;#62; Rename??.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-00-project-rename.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-00-project-rename.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then change the project name to ?name.wadewalker.tutorial? and click ?OK?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-01-new-project-name.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-01-new-project-name.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now, no one says the package name has to match the project, but I?ve got a bit of a compulsiveness problem. To change the package name to ?tutorial?, open the ?src? directory inside the project, right-click ?name.wadewalker.vbotutorial? and select ?Refactor &amp;#62; Rename??.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-02-package-rename.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-02-package-rename.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then change the package name to ?name.wadewalker.tutorial? and click ?OK?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-03-new-package-name.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-03-new-package-name.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In any sane world, that would be the end of it. But there are a few more references to the old project name squirreled away! So, lemons into lemonade, et cetera&amp;#8212;here?s how you fix those.&lt;/p&gt;
&lt;p&gt;There are three places in the Tutorial.product file that refer to the old name. First, double-click on ?Tutorial.product? inside the ?name.wadewalker.tutorial? project, click the ?Overview? tab at the bottom, and change the product name to ?name.wadewalker.tutorial.product?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-04-product-change.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-04-product-change.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then change the application name to ?name.wadewalker.tutorial.application? the same way.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-05-application-change.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-05-application-change.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click the ?Dependencies? tab at the bottom of the product editor, then select the ?name.wadewalker.vbotutorial? plugin and click ?Remove?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-06-remove-dependency.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-06-remove-dependency.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then click ?Add??, type ?name? in the filter box, select ?name.wadewalker.tutorial?, and click ?OK? to add the dependency back with the new name.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-07-add-dependency.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-07-add-dependency.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There?s one more reference to the old project name inside the plugin.xml file. Double-click ?plugin.xml? to open the plugin file editor, then click the ?Extensions? tab at the bottom, open ?org.eclipse.core.runtime.products? and select ?Tutorial (product)?. Change the application name on the right to ?name.wadewalker.tutorial.application?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-08a-plugin-application-change.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-08a-plugin-application-change.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So now our project?s totally renamed, I?ve learned a lesson in thinking ahead, and you?ve learned a lesson in Eclipse refactoring. Champagne and sushi all ?round!&lt;/p&gt;
&lt;p&gt;Side note to all you Eclipse smarty-pantses out there: if you wanted to cheat, you could have done these last few changes by closing Eclipse, editing Tutorial.product and plugin.xml in a text editor, and restarting Eclipse. But beware! Sometimes this sort of thing works fine, but other times you also have to delete your .metadata directory and recreate it by re-importing your projects to get things back in sync.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nipping a view in the bud: Removing our simple ?view? to make way for an ?editor?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Mea culpa number two! I gotta confess to you guys, I used an Eclipse ?view? for the first tutorial because it was easy, it worked, and it kept the tutorial short so we didn?t blast apart the tender cortexes of any first-time Eclipse developers out there.&lt;/p&gt;
&lt;p&gt;But the view wasn?t meant to be a long-term choice. Eclipse views are really supposed to show things like code outlines or object properties. There can only be one view of each type open at a time, and they usually show information about the currently selected file or object. Right now our graphical display isn?t editable, but it will be eventually, and views aren?t generally where you?re supposed to be doing your editing in an Eclipse RCP application.&lt;/p&gt;
&lt;p&gt;An Eclipse ?editor? is what we really need for the long term. Editors can be attached to files, and they let you put buttons in the toolbar. But you need to create three Java files just to make one editor, so I had put it off until later. Well, it?s later now, babies! Time to yank off those training wheels.&lt;/p&gt;
&lt;p&gt;First we get rid of our view?s code. Open ?src &amp;#62; name.wadewalker.tutorial? inside the project, then right-click ?JOGLView.java? and select ?Delete?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-08b-remove-jogl-view.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-08b-remove-jogl-view.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When the confirmation dialog pops up, click ?OK?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-08c-confirm-delete.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-08c-confirm-delete.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once the view?s code is gone, we tell Eclipse not to put that view into the workspace anymore. Double-click ?Perspective.java? inside the ?name.wadewalker.tutorial? package and change the contents to look like this:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
package name.wadewalker.tutorial;

import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;

public class Perspective implements IPerspectiveFactory {

    /*
     * Makes the editor area visible with no views.
     * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout)
     */
    public void createInitialLayout( IPageLayout ipagelayout ) {
        ipagelayout.setEditorAreaVisible( true );
    }
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Let?s run it and see what butchery we?ve performed on our poor app. Right-click the project ?name.wadewalker.tutorial? in the package explorer and select ?Debug As &amp;#62; Eclipse Application?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-09a-debug-as-eclipse-app.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-09a-debug-as-eclipse-app.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Depending on your workspace, you may see this prompt to save your files. If so, check ?Always save resources before launching? and click ?OK?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-09b-save-and-launch.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-09b-save-and-launch.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When you finally launch you?ll see an app with an empty editor area like this. It?s naked! One fig leaf, coming up.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-10-empty-editor-area.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-10-empty-editor-area.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Grafting on a new scion: We create an empty editor and let it show us nothing&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The first step towards an editor is creating an empty one. To help your clicky-hands grow strong, I?ll show how to do that using the Eclipse GUI instead of by hacking file contents like a savage.&lt;/p&gt;
&lt;p&gt;First, there?s one more bit of the view remaining: its ?metadata?. To remove it, double-click ?plugin.xml? to open the plugin file editor, then click the ?Extensions? tab at the bottom. Select ?org.eclipse.ui.views?, then click ?Remove?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-11-remove-views.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-11-remove-views.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Perhaps our gentle readers would appreciate a tastevin-full of explanation for this ?metadata??&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I?ll just pretend like I know what that means. You can customize Eclipse to create RCP apps in two different ways: by adding metadata to the ?plugins.xml? file, and by adding code. Some customizations, like adding a new menu item to Eclipse with a simple plugin, you can do entirely with metadata. The kind of stuff we?re doing in a full-custom RCP app mostly involves adding code.&lt;/p&gt;
&lt;p&gt;But a downside to this metadata is that sometimes Eclipse doesn?t have a fully programmatic way to do something. In our case, creating views and editors involves both metadata and code. So as you might expect, now that we?ve removed the view?s metadata, we have to add some metadata for the editor.&lt;/p&gt;
&lt;p&gt;Click ?Add??, then type ?org.eclipse.ui.e? in the filter box, select ?org.eclipse.ui.editors?, and click ?Finish?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-12-add-editor.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-12-add-editor.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then in the ?Extension Element Details? set the ID to ?name.wadewalker.tutorial.jogleditor?, the name to ?JOGLEditor?, the class to ?JOGLEditor?, and the contributor class to ?JOGLEditorActionBarContributor?. The result should look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-13-editor-properties.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-13-editor-properties.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now the metadata for the editor is complete, so we can write some code. Click the ?class? link, set the package to ?name.wadewalker.tutorial.jogleditor? and click ?Finish?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-14-new-jogleditor.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-14-new-jogleditor.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This creates you a new editor class in JOGLEditor.java. Note that we put it into a separate package. That?s so we can put the other files associated with this editor in there too, for better organization.&lt;/p&gt;
&lt;p&gt;The bare-bones editor that Eclipse creates won?t quite work on its own, we need to juice it up a bit. First, add this member into the JOGLEditor class:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
    /** Workbench uses this ID to refer to instances of this type of editor. */
    public static final String ssID = &amp;#34;name.wadewalker.tutorial.jogleditor&amp;#34;;
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Then replace the init() method with this one:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
    //================================================================
    /**
     * Initializes this editor with the given editor site and input.
     *
     * @param ieditorsite The editor site.
     * @param ieditorinput The editor input.
     * @throws PartInitException if this editor was not initialized successfully.
     * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
     */
    @Override
    public void init( IEditorSite ieditorsite, IEditorInput ieditorinput ) throws PartInitException {

        setSite( ieditorsite );
        if( ieditorinput != null )
            setInput( ieditorinput );
    }
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The second thing an editor needs is an ?action bar contributor?. In Eclipse-speak, a ?contributor? is a class that?s responsible for putting controls into tool bars, menus, status lines, and similar places. The action bar contributor of an editor puts the custom buttons for the editor into the app?s tool bar.&lt;/p&gt;
&lt;p&gt;You may be asking yourself, ?Why have a whole separate class just to put buttons into the tool bar? Isn?t that kind of insane?? Well, it makes sense in the Eclipseiverse. When you?ve got a big framework like Eclipse, you want to have as much separability as possible, so you don?t have to change the whole framework to change one part. And one of the ways they do this is by defining separate class types to handle common tasks like this, so that these separate types can be changed without affecting anything else.&lt;/p&gt;
&lt;p&gt;Our first version of the action bar contributor is just an empty shell that does nothing. To create it, navigate back to the plugin editor ?Extensions? tab, click the ?contributorClass? link, set the package to ?name.wadewalker.tutorial.jogleditor? and click ?Finish?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-15-new-contributor.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-15-new-contributor.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;OK, now the editor?s two-thirds done! But we still need one more file to make it work. See, there?s a reason we didn?t do this in the first tutorial!&lt;/p&gt;
&lt;p&gt;The last thing we need is an input object for the editor. The input object is what the editor is editing. If this were a text editor, the input object would wrap a text file. Eventually, once our app supports graphical editing of some science-y data, we?ll store that data in a file and put that file in the input object. But for now, we can just make an empty input object.&lt;/p&gt;
&lt;p&gt;To create the input object, right-click ?name.wadewalker.tutorial.jogleditor? in the package explorer, then select ?New &amp;#62; Class?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-16-add-editor-input-class.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-16-add-editor-input-class.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Set the class name to ?JOGLEditorInput? and click ?Finish?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-17-new-editor-input-class.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-17-new-editor-input-class.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Copy these contents into JOGLEditorInput.java. This is just enough code to get us by for now.&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
package name.wadewalker.tutorial.jogleditor;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;

//================================================================
/**
 * Editor input object for the JOGL editor. Currently these editors
 * aren't associated with any files, but eventually they will be.
 *
 * @author Wade Walker
 * @version 1.0
 */
public class JOGLEditorInput implements IEditorInput {

    //================================================================
    /**
     * Returns an object which is an instance of the given class
     * associated with this object. Returns null if no such object can
     * be found.
     *
     * @param classAdapter the adapter class to look up.
     * @return an object castable to the given class, or null if this
     * object does not have an adapter for the given class.
     * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
     */
    @SuppressWarnings(&amp;#34;rawtypes&amp;#34;)
    public Object getAdapter( Class classAdapter ) {
        if( classAdapter.equals( JOGLEditorInput.class ) )
            return this;

        return null;
    }

    @Override
    public boolean exists() {
        return true;
    }

    @Override
    public ImageDescriptor getImageDescriptor() {
        return null;
    }

    @Override
    public String getName() {
        return &amp;#34;JOGLEditor&amp;#34;;
    }

    @Override
    public IPersistableElement getPersistable() {
        return null;
    }

    @Override
    public String getToolTipText() {
        return &amp;#34;Editor that uses JOGL&amp;#34;;
    }
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Now that the editor?s three parts are all created, we can show the empty editor in the workbench. Later on we?ll let the user open editors on demand, but for now, we?ll open one editor when our program starts.&lt;/p&gt;
&lt;p&gt;To do that, double-click ?ApplicationWorkbenchWindowAdvisor.java? in the package explorer and add this method.&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
    //================================================================
    /**
     * Performs final setup once the window is open.
     *
     * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#postWindowOpen()
     */
    @Override
    public void postWindowOpen() {

        IWorkbenchWindow iworkbenchwindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();

        try {
            iworkbenchwindow.getActivePage().openEditor( new JOGLEditorInput(), JOGLEditor.ssID );
        } catch( PartInitException partinitexception ) {
            // TODO: add error handling
        }
    }
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;After you paste in this code, you?ll see that some of the class names have red underlines. This means they haven?t been imported yet. Another Eclipse teachable moment! Hover the mouse over each of these until the ?quick fix? window appears, then click the ?import? quick fix to add the import statement at the top of the class.&lt;/p&gt;
&lt;p&gt;Now when you right-click the project and select ?Debug As &amp;#62; Eclipse Application? you?ll see an empty editor.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-19-empty-editor.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-19-empty-editor.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It looks almost exactly like the empty editor area from before, but with a tab showing the editor?s name. Now that?s progress!&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The first scion bears fruit: Our new editor displays the graphics from our old view&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Now we gotta get our OpenGL graphics back where they were in the last tutorial. Replace the contents of JOGLEditor.java with this:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
package name.wadewalker.tutorial.jogleditor;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.util.List;

import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GL2ES1;
import javax.media.opengl.GLContext;
import javax.media.opengl.GLDrawableFactory;
import javax.media.opengl.GLProfile;
import javax.media.opengl.fixedfunc.GLMatrixFunc;
import javax.media.opengl.glu.GLU;

import name.wadewalker.tutorial.Activator;
import name.wadewalker.tutorial.DataSource;
import name.wadewalker.tutorial.DataSource.DataObject;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.bindings.keys.ParseException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.opengl.GLCanvas;
import org.eclipse.swt.opengl.GLData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.EditorPart;

import com.jogamp.common.nio.Buffers;

public class JOGLEditor extends EditorPart {

    /** Workbench uses this ID to refer to instances of this type of editor. */
    public static final String ssID = &amp;#34;name.wadewalker.tutorial.jogleditor&amp;#34;;

    /** Holds the OpenGL canvas. */
    protected Composite composite;

    /** Widget that displays OpenGL content. */
    protected GLCanvas glcanvas;

    /** Used to get OpenGL object that we need to access OpenGL functions. */
    protected GLContext glcontext;

    /** Source of data to draw. */
    protected DataSource datasource;

    /** X distance to translate the viewport by. */
    protected float fViewTranslateX = 0.0f;

    /** Y distance to translate the viewport by. */
    protected float fViewTranslateY = 0.0f;

    /** Ratio of world-space units to screen pixels.
     * Increasing this zooms the display out,
     * decreasing it zooms the display in. */
    protected float fObjectUnitsPerPixel = 0.03f;

    /** Index of vertex buffer object. We store interleaved vertex and color data here
     * like this: x0, r0, y0, g0, z0, b0, x1, r1, y1, g1, z1, b1...
     * Stored in an array because glGenBuffers requires it. */
    protected int [] aiVertexBufferIndices = new int [] {-1};

    /** Constant used in FPS calculation. */ 
    protected static final long slMillisecondsPerSecond = 1000; 

    /** Number of frames drawn since last FPS calculation. */
    protected int iFPSFrames;

    /** Time in milliseconds at start of FPS calculation interval. */
    protected long lFPSIntervalStartTimeMS;

    //================================================================
    /**
     * Constructor.
     */
    public JOGLEditor() {
        datasource = new DataSource();
    }

    @Override
    public void doSave( IProgressMonitor monitor ) {
        // TODO Auto-generated method stub

    }

    @Override
    public void doSaveAs() {
        // TODO Auto-generated method stub

    }

    //================================================================
    /**
     * Initializes this editor with the given editor site and input.
     *
     * @param ieditorsite The editor site.
     * @param ieditorinput The editor input.
     * @throws PartInitException if this editor was not initialized successfully.
     * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
     */
    @Override
    public void init( IEditorSite ieditorsite, IEditorInput ieditorinput ) throws PartInitException {

        setSite( ieditorsite );
        if( ieditorinput != null )
            setInput( ieditorinput );

        // create action handlers
/*        try {
            Activator.createKeyBinding(
                new IAction [] {
                    ieditorsite.getActionBars().getGlobalActionHandler( RunPauseAction.ssID ),
                }, 
                new String [] {
                    &amp;#34;Space&amp;#34;,
                },
                getSite() );
        }
        catch( ParseException parseexception ) {
            throw new PartInitException( parseexception.getMessage() );
        }
        catch( IOException ioexception ) {
            throw new PartInitException( ioexception.getMessage() );
        }*/
    }

    //================================================================
    /**
     * Disposes all OpenGL resources in case this view is closed and reopened.
     * @see org.eclipse.ui.part.WorkbenchPart#dispose()
     */
    @Override
    public void dispose() {
        disposeVertexBuffers();
        glcanvas.dispose();
        super.dispose();
    }

    @Override
    public boolean isDirty() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean isSaveAsAllowed() {
        // TODO Auto-generated method stub
        return false;
    }

    //================================================================
    /**
     * Sets up an OpenGL canvas to draw in.
     * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
     */
    @Override
    public void createPartControl( Composite compositeParent ) {
        GLProfile glprofile = GLProfile.get( GLProfile.GL2 );

        composite = new Composite( compositeParent, SWT.NONE );
        composite.setLayout( new FillLayout() );

        GLData gldata = new GLData();
        gldata.doubleBuffer = true;
        glcanvas = new GLCanvas( composite, SWT.NO_BACKGROUND, gldata );
        glcanvas.setCurrent();
        glcontext = GLDrawableFactory.getFactory( glprofile ).createExternalGLContext();

        glcanvas.addListener( SWT.Resize, new Listener() {
            public void handleEvent( Event event ) {
                glcanvas.setCurrent();
                glcontext.makeCurrent();
                GL2 gl = glcontext.getGL().getGL2();
                setTransformsAndViewport( gl );
                glcontext.release();
            }
        });

        glcontext.makeCurrent();
        GL2 gl = glcontext.getGL().getGL2();
        gl.setSwapInterval( 1 );
        gl.glClearColor( 1.0f, 1.0f, 1.0f, 1.0f );
        gl.glColor3f( 1.0f, 0.0f, 0.0f );
        gl.glHint( GL2ES1.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST );
        gl.glClearDepth( 1.0 );
        gl.glLineWidth( 2 );
        gl.glEnable( GL.GL_DEPTH_TEST );
        glcontext.release();

        // spawn a worker thread to call the renderer in a loop until the program closes.
        (new Thread() {
            public void run() {

                // look at the run/pause button state to see whether we should be running or not 
//                RunPauseAction runpauseaction = (RunPauseAction)getEditorSite().getActionBars().getGlobalActionHandler( RunPauseAction.ssID );

                // render once to get it on screen (we start out paused)
                render();

                try {
                    while( (glcanvas != null) &amp;#38;&amp;#38; !glcanvas.isDisposed() ) {
                        // if we're running, render in the GUI thread
                        if( true /*runpauseaction.isRunning()*/ )
                            render();
                        // else we're paused, so sleep for a little so we don't peg the CPU
                        else
                            sleep( 250 );
                    }
                } catch( InterruptedException interruptedexception ) {
                    // if sleep interrupted just let the thread quite
                }
            }
        }).start();
    }

    //================================================================
    /**
     * Calculates the FPS and shows it in the status line.
     */
    protected void calculateAndShowFPS() {
        ++iFPSFrames;
        long lTime = System.currentTimeMillis();
        // update the FPS (once per second at most, to avoid flooding
        // the UI with text updates)
        long lTimeIntervalMS = lTime - lFPSIntervalStartTimeMS;
        if( lTimeIntervalMS &amp;#62;= slMillisecondsPerSecond ) {
            lFPSIntervalStartTimeMS = lTime;
            int iFPS = (int)((double)(iFPSFrames * slMillisecondsPerSecond) / (double)lTimeIntervalMS);
            iFPSFrames = 0;
            getEditorSite().getActionBars().getStatusLineManager().setMessage( String.format( &amp;#34;FPS: %d&amp;#34;, iFPS ) );
        }
    }

    //================================================================
    /**
     * Renders into the GUI thread synchronously. Meant to be called
     * from a worker thread.
     */
    private void render() {

        PlatformUI.getWorkbench().getDisplay().syncExec( new Runnable() {
            public void run() {
                if( (glcanvas != null) &amp;#38;&amp;#38; !glcanvas.isDisposed() ) {
                    glcanvas.setCurrent();
                    glcontext.makeCurrent();
                    GL2 gl2 = glcontext.getGL().getGL2();
                    gl2.glClear( GL.GL_COLOR_BUFFER_BIT &amp;#124; GL.GL_DEPTH_BUFFER_BIT );
                    gl2.glClearColor( 1.0f, 1.0f, 1.0f, 1.0f );

                    // create vertex buffers if needed, then copy data in
                    int [] aiNumOfVertices = createAndFillVertexBuffer( gl2, datasource.getData() );

                    // needed so material for quads will be set from color map
                    gl2.glColorMaterial( GL.GL_FRONT_AND_BACK, GL2.GL_AMBIENT_AND_DIFFUSE );
                    gl2.glEnable( GL2.GL_COLOR_MATERIAL );

                    // draw all quads in vertex buffer
                    gl2.glBindBuffer( GL.GL_ARRAY_BUFFER, aiVertexBufferIndices[0] );
                    gl2.glEnableClientState( GL2.GL_VERTEX_ARRAY );
                    gl2.glEnableClientState( GL2.GL_COLOR_ARRAY );
                    gl2.glVertexPointer( 3, GL.GL_FLOAT, 6 * Buffers.SIZEOF_FLOAT, 0 );
                    gl2.glColorPointer( 3, GL.GL_FLOAT, 6 * Buffers.SIZEOF_FLOAT, 3 * Buffers.SIZEOF_FLOAT );
                    gl2.glPolygonMode( GL.GL_FRONT, GL2.GL_FILL );
                    gl2.glDrawArrays( GL2.GL_QUADS, 0, aiNumOfVertices[0] );

                    // disable arrays once we're done
                    gl2.glBindBuffer( GL.GL_ARRAY_BUFFER, 0 );
                    gl2.glDisableClientState( GL2.GL_VERTEX_ARRAY );
                    gl2.glDisableClientState( GL2.GL_COLOR_ARRAY );
                    gl2.glDisable( GL2.GL_COLOR_MATERIAL );

                    glcanvas.swapBuffers();
                    glcontext.release();

                    // advance time so the data changes for the next frame
                    datasource.incrementTime( 0.005 );

                    calculateAndShowFPS();
                }
            }
        });
    }

    //================================================================
    /**
     * Sets up an orthogonal projection suitable for a 2D CAD program.
     *
     * @param gl GL object to set transforms and viewport on.
     */
    protected void setTransformsAndViewport( GL2 gl2 ) {

        Rectangle rectangle = glcanvas.getClientArea();
        int iWidth = rectangle.width;
        int iHeight = Math.max( rectangle.height, 1 );

        gl2.glMatrixMode( GLMatrixFunc.GL_PROJECTION );
        gl2.glLoadIdentity();

        // set the clipping planes based on the ratio of object units
        // to screen pixels, but preserving the correct aspect ratio
        GLU glu = new GLU();
        glu.gluOrtho2D( -(fObjectUnitsPerPixel * iWidth) / 2.0f,
                         (fObjectUnitsPerPixel * iWidth) / 2.0f,
                        -(fObjectUnitsPerPixel * iHeight) / 2.0f,
                         (fObjectUnitsPerPixel * iHeight) / 2.0f );

        gl2.glMatrixMode( GLMatrixFunc.GL_MODELVIEW );
        gl2.glViewport( 0, 0, iWidth, iHeight );
        gl2.glLoadIdentity();
        gl2.glTranslatef( fViewTranslateX, fViewTranslateY, 0.0f );
    }

    //================================================================
    /**
     * Creates vertex buffer object used to store vertices and colors
     * (if it doesn't exist). Fills the object with the latest
     * vertices and colors from the data store.
     *
     * @param gl2 GL object used to access all GL functions.
     * @return the number of vertices in each of the buffers.
     */
    protected int [] createAndFillVertexBuffer( GL2 gl2, List&amp;#60;DataObject&amp;#62; listDataObjects ) {

        int [] aiNumOfVertices = new int [] {listDataObjects.size() * 4};
        
        // create vertex buffer object if needed
        if( aiVertexBufferIndices[0] == -1 ) {
            // check for VBO support
            if(    !gl2.isFunctionAvailable( &amp;#34;glGenBuffers&amp;#34; )
                &amp;#124;&amp;#124; !gl2.isFunctionAvailable( &amp;#34;glBindBuffer&amp;#34; )
                &amp;#124;&amp;#124; !gl2.isFunctionAvailable( &amp;#34;glBufferData&amp;#34; )
                &amp;#124;&amp;#124; !gl2.isFunctionAvailable( &amp;#34;glDeleteBuffers&amp;#34; ) ) {
                Activator.openError( &amp;#34;Error&amp;#34;, &amp;#34;Vertex buffer objects not supported.&amp;#34; );
            }

            gl2.glGenBuffers( 1, aiVertexBufferIndices, 0 );

            // create vertex buffer data store without initial copy
            gl2.glBindBuffer( GL.GL_ARRAY_BUFFER, aiVertexBufferIndices[0] );
            gl2.glBufferData( GL.GL_ARRAY_BUFFER,
                              aiNumOfVertices[0] * 3 * Buffers.SIZEOF_FLOAT * 2,
                              null,
                              GL2.GL_DYNAMIC_DRAW );
        }

        // map the buffer and write vertex and color data directly into it
        gl2.glBindBuffer( GL.GL_ARRAY_BUFFER, aiVertexBufferIndices[0] );
        ByteBuffer bytebuffer = gl2.glMapBuffer( GL.GL_ARRAY_BUFFER, GL2.GL_WRITE_ONLY );
        FloatBuffer floatbuffer = bytebuffer.order( ByteOrder.nativeOrder() ).asFloatBuffer();

        for( DataObject dataobject : listDataObjects )
            storeVerticesAndColors( floatbuffer, dataobject );

        gl2.glUnmapBuffer( GL.GL_ARRAY_BUFFER );

        return( aiNumOfVertices );
    }

    //================================================================
    /**
     * Stores the vertices and colors of one object interleaved into
     * a buffer (vertices in counterclockwise order).
     * @param floatbuffer Buffer to store vertices and colors in.
     * @param dataobject Object whose vertices and colors are stored.
     */
    protected void storeVerticesAndColors( FloatBuffer floatbuffer, DataObject dataobject ) {

        floatbuffer.put( dataobject.getX() );
        floatbuffer.put( dataobject.getY() );
        floatbuffer.put( 0.0f );

        floatbuffer.put( dataobject.getColor()[0] );
        floatbuffer.put( dataobject.getColor()[1] );
        floatbuffer.put( dataobject.getColor()[2] );

        floatbuffer.put( dataobject.getX() + dataobject.getWidth() );
        floatbuffer.put( dataobject.getY() );
        floatbuffer.put( 0.0f );

        floatbuffer.put( dataobject.getColor()[0] );
        floatbuffer.put( dataobject.getColor()[1] );
        floatbuffer.put( dataobject.getColor()[2] );

        floatbuffer.put( dataobject.getX() + dataobject.getWidth() );
        floatbuffer.put( dataobject.getY() + dataobject.getHeight() );
        floatbuffer.put( 0.0f );

        floatbuffer.put( dataobject.getColor()[0] );
        floatbuffer.put( dataobject.getColor()[1] );
        floatbuffer.put( dataobject.getColor()[2] );

        floatbuffer.put( dataobject.getX() );
        floatbuffer.put( dataobject.getY() + dataobject.getHeight() );
        floatbuffer.put( 0.0f );        

        floatbuffer.put( dataobject.getColor()[0] );
        floatbuffer.put( dataobject.getColor()[1] );
        floatbuffer.put( dataobject.getColor()[2] );
    }

    //================================================================
    /**
     * Deletes the vertex and color buffers.
     */
    protected void disposeVertexBuffers() {
        glcontext.makeCurrent();
        GL2 gl2 = glcontext.getGL().getGL2();
        gl2.glDeleteBuffers( 1, aiVertexBufferIndices, 0 );
        aiVertexBufferIndices[0] = -1;
        glcontext.release();
    }

    @Override
    public void setFocus() {
        // TODO Auto-generated method stub

    }
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;This is almost exactly the same code that showed OpenGL in a view last time. It?s just been slightly adapted to go in an editor instead. Also, there are a few bits commented out that we?re not ready to try yet.&lt;/p&gt;
&lt;p&gt;Now when you right-click the project and select ?Debug As &amp;#62; Eclipse Application? you?ll see the same animated display as in the last tutorial, but in an editor instead of a view. All this work, just to get back to where we were last time!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-20-filled-editor.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-20-filled-editor.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Grafting on a second scion: Adding a ?menu bar? to our barren application&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;OK, now we?re finally ready to blast ahead of where our last tutorial ended. First new feature: a menu bar! There won?t be much in it right now, but we?ve gotta start somewhere.&lt;/p&gt;
&lt;p&gt;First we turn on the menu bar by replacing ApplicationWorkbenchWindowAdvisor.preWindowOpen() with this code.&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
    //================================================================
    /**
     * Configures the window before it opens.
     *
     * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#preWindowOpen()
     */
    @Override
    public void preWindowOpen() {
        IWorkbenchWindowConfigurer iworkbenchwindowconfigurer = getWindowConfigurer();
        iworkbenchwindowconfigurer.setTitle( &amp;#34;Tutorial&amp;#34; );
        iworkbenchwindowconfigurer.setInitialSize( new Point( 400, 300) );
        iworkbenchwindowconfigurer.setShowMenuBar( true );
        iworkbenchwindowconfigurer.setShowCoolBar( false );
        iworkbenchwindowconfigurer.setShowStatusLine( true );
    }
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Next, we need to put an ?action? into the menu so we?ll have something to click on. In Eclipse, an action is something the app does in response to user interaction. We wrap these actions up into objects, which we can put into menus and attach to buttons. In this case, we?ll use a standard ?Exit? action that Eclipse defines for us.&lt;/p&gt;
&lt;p&gt;Replace the contents of ApplicationActionBarAdvisor.java with this code to add an ?Exit? action to the menu bar:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
package name.wadewalker.tutorial;

import org.eclipse.jface.action.ICoolBarManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;

//================================================================
/**
 * Creates, adds, and disposes the actions for the workbench window.
 *
 * @author Wade Walker
 * @version 1.0
 */
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

    /** Exits the app. */
    private IWorkbenchAction iworkbenchactionExit;

    //================================================================
    /**
     * Constructor.
     *
     * @param iactionbarconfigurer Data needed to configure the action bar.
     */
    public ApplicationActionBarAdvisor( IActionBarConfigurer iactionbarconfigurer ) {
        super( iactionbarconfigurer );
    }

    //================================================================
    /**
     * Creates and registers actions.
     * 
     * @param iworkbenchwindow Window the actions are for.
     * @see org.eclipse.ui.application.ActionBarAdvisor#makeActions(org.eclipse.ui.IWorkbenchWindow)
     */
    @Override
    protected void makeActions( final IWorkbenchWindow iworkbenchwindow ) {
        iworkbenchactionExit = ActionFactory.QUIT.create( iworkbenchwindow );
        register( iworkbenchactionExit );
    }

    //================================================================
    /**
     * Puts actions into the main menu bar.
     *
     * @param imenumanagerBar The menu manager for the menu bar.
     * @see org.eclipse.ui.application.ActionBarAdvisor#fillMenuBar(org.eclipse.jface.action.IMenuManager)
     */
    @Override
    protected void fillMenuBar( IMenuManager imenumanagerBar ) {

        MenuManager menumanagerFile = new MenuManager( &amp;#34;&amp;#38;File&amp;#34;, IWorkbenchActionConstants.M_FILE );
        imenumanagerBar.add( menumanagerFile );
        menumanagerFile.add( iworkbenchactionExit );
    }

    //================================================================
    /**
     * Puts the tool bar into the &amp;#34;cool bar&amp;#34; for the window.
     *
     * @param icoolbarmanager Used to add tool bars.
     * @see org.eclipse.ui.application.ActionBarAdvisor#fillCoolBar(org.eclipse.jface.action.ICoolBarManager)
     */
    @Override
    protected void fillCoolBar( ICoolBarManager icoolbarmanager ) {
        super.fillCoolBar( icoolbarmanager );

        ToolBarManager toolbarmanager = new ToolBarManager();
        icoolbarmanager.add( toolbarmanager );
    }
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Now when you run the app, you?ll see a menu bar with an ?Exit? action in it. When you select it, the app exits. Hey, I never claimed this first one would set the universe on fire.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-21-exit-action.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-21-exit-action.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Grafting on a third scion, or, ?The Fructification?: Adding a button which runs or pauses our simulation&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Eventually our app will be a full-fledged &lt;i&gt;SCIENCE!&lt;/i&gt; program that runs some sort of physical simulation, and we?ll need a way to start and stop the simulation so we can interact with it. Ergo, a run/pause button like on an MP3 player.&lt;/p&gt;
&lt;p&gt;To add a run/pause button to our toolbar, first we need icons to put on the button. Create a directory named ?jogleditor? inside ?name.wadewalker.tutorial\icons? to hold them.&lt;/p&gt;
&lt;p&gt;Now, I could draw some icons myself, but that?s a one-way non-refundable ticket to Ugly App Land. Fortunately for me, there are thousands of icons inside Eclipse already, and they?re easy to get to. Unzip the file ?plugins\org.eclipse.jdt.debug.ui_3.5.0.v20100602-0830.jar? from your Eclipse installation in some convenient place. Then copy ?resume_co.gif? and ?suspend_co.gif? from the ?icons\full\elcl16? directory into our new ?name.wadewalker.tutorial\icons\jogleditor? directory.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-22-icons-dir.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-22-icons-dir.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Might we not harvest other icons from within Eclipse at a later time?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Indeed we might! Lots of the JAR files inside Eclipse contain useful icons. If you unzip them all and remove everything but the icons from the resulting directories, you?ll have quite a collection. Usually I can find what I need somewhere in there, or at least find a good starting point for a new icon.&lt;/p&gt;
&lt;p&gt;Now that we?ve got icons on disk, we need some code to read them in, and some code to set up keyboard shortcuts for buttons. We get that by replacing Activator.java with this code:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
package name.wadewalker.tutorial;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.media.opengl.GLProfile;

import org.eclipse.core.commands.Category;
import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.core.commands.contexts.Context;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.bindings.Binding;
import org.eclipse.jface.bindings.Scheme;
import org.eclipse.jface.bindings.keys.KeyBinding;
import org.eclipse.jface.bindings.keys.KeySequence;
import org.eclipse.jface.bindings.keys.ParseException;
import org.eclipse.jface.commands.ActionHandler;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.keys.IBindingService;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

/**
 * The activator class controls the plug-in life cycle
 */
public class Activator extends AbstractUIPlugin {

    // The plug-in ID
    public static final String PLUGIN_ID = &amp;#34;name.wadewalker.tutorial&amp;#34;; //$NON-NLS-1$

    // The shared instance
    private static Activator plugin;
    
    /** Eclipse packages needed during key binding. */
    private static final String ssDefaultSchemeID = &amp;#34;org.eclipse.ui.defaultAcceleratorConfiguration&amp;#34;;
    private static final String ssParentContextID = &amp;#34;org.eclipse.ui.contexts.window&amp;#34;;

    /** ID and name of command category used in key binding. */
    private static final String ssCommandCategoryID = &amp;#34;Tutorial.commands.category&amp;#34;;
    private static final String ssCommandCategoryName = &amp;#34;Tutorial commands&amp;#34;;

    /** ID and name of command context used in key binding. */
    private static final String ssContextID = &amp;#34;viewerKeyContext&amp;#34;;
    private static final String ssContextName = &amp;#34;In Placement Editor&amp;#34;;

    // Needed to set up threading properly for JOGL on Linux systems. This
    // has to be done before any X11 calls, so it goes here in the class
    // Eclipse loads first.
    // NOTE: If you don't put this early enough, you'll probably get SIGSEGV
    // in libpthread.so (or other sorts of multithreading errors) when you
    // try to run the program.
    static {
        GLProfile.initSingleton();
    }

    /**
     * The constructor
     */
    public Activator() {
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
     */
    public void start(BundleContext context) throws Exception {
        super.start(context);
        plugin = this;
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
     */
    public void stop(BundleContext context) throws Exception {
        plugin = null;
        super.stop(context);
    }

    /**
     * Returns the shared instance
     *
     * @return the shared instance
     */
    public static Activator getDefault() {
        return plugin;
    }

    /**
     * Returns an image descriptor for the image file at the given
     * plug-in relative path
     *
     * @param path the path
     * @return the image descriptor
     */
    public static ImageDescriptor getImageDescriptor(String path) {
        return imageDescriptorFromPlugin(PLUGIN_ID, path);
    }

    //================================================================
    /**
     * Returns an image descriptor for the specified icon.
     *
     * @param sIconPath Path to the icon file inside the &amp;#34;icons&amp;#34;
     * directory of the plugin project.
     * @return the image descriptor for the specified icon.
     */
    public static ImageDescriptor getIcon( String sIconPath ) {

        ImageDescriptor imagedescriptor = Activator.getImageDescriptor( &amp;#34;icons/&amp;#34; + sIconPath );
        if( imagedescriptor == null )
            imagedescriptor = ImageDescriptor.getMissingImageDescriptor();

        return( imagedescriptor );
    }

    //================================================================
    /**
     * Opens an error dialog box and logs the error.
     * @param sDialogTitle Title of dialog box.
     * @param istatus Status object to get message from.
     */
    public static void openError( String sDialogTitle, IStatus istatus ) {
        ErrorDialog.openError( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                               sDialogTitle,
                               null,
                               istatus );
        Activator.getDefault().log( sDialogTitle + &amp;#34; : &amp;#34; + istatus.getMessage() );
    }

    //================================================================
    /**
     * Opens an &amp;#34;internal error&amp;#34; dialog box and logs the error.
     * @param exception Exception containing the message to put in the dialog box.
     */
    public static void openError( Exception exception ) {
        openError( &amp;#34;Internal error&amp;#34;, new Status( Status.ERROR,
                                                 Activator.PLUGIN_ID,
                                                   exception.getMessage() != null
                                                 ? exception.getMessage()
                                                 : exception.getClass().toString() ) );
        Activator.getDefault().log( exception.getMessage(), exception );
    }

    //================================================================
    /**
     * Opens an error dialog box and logs the error.
     * @param sDialogTitle Dialog box title.
     * @param sMessage Message to put in dialog box.
     */
    public static void openError( String sDialogTitle, String sMessage ) {
        openError( sDialogTitle, new Status( Status.ERROR, Activator.PLUGIN_ID, sMessage ) );
        Activator.getDefault().log( sDialogTitle + &amp;#34; : &amp;#34; + sMessage );
    }

    //================================================================
    /**
     * Prints a message to the Eclipse log.
     *
     * @param sMessage Message to print.
     */
    public void log( String sMessage ) {
        log( sMessage, null );
    }

    //================================================================
    /**
     * Prints a message to the Eclipse log.
     *
     * @param sMessage Message to print.
     * @param exception Exception we're logging.
     */
    public void log( String sMessage, Exception exception ) {
        getLog().log( new Status( Status.INFO, PLUGIN_ID, Status.OK, sMessage, exception ) );
    }

    //================================================================
    /**
     * Creates key bindings for an array of actions, saving them to
     * the preference store if needed.
     *
     * Only creates a new key sequence if one doesn't exist for this
     * context; otherwise, leaves any altered user preferences in place.
     *
     * Takes an array so the number of writes to the preference store
     * can be minimized.
     *
     * TODO: this code is using the binding service in a way that
     * Paul Webster (the guy responsible for this part of Eclipse)
     * seems uncomfortable with, but right now there's no other option.
     * This code may be able to be replaced after Eclipse 3.4 sometime,
     * when PW finally puts in a programmatic interface for this.
     *
     * @param aiaction Actions to create key binding for.
     * @param asKey Keys to bind actions to (in the format required by KeySequence).
     * If the key string of an action is null, this method still activates
     * a handler and defines this action's command, which is needed to stop
     * some logged warnings when showing actions in menus.
     * @param iworkbenchpartsite Site to do the binding at.
     * @throws ParseException if one of the key strings can't be parsed.
     * @throws IOException if the key bindings can't be saved to the preference store.
     */
    public static void createKeyBinding( IAction [] aiaction,
                                         String [] asKey,
                                         IWorkbenchPartSite iworkbenchpartsite )
        throws ParseException, IOException {
        assert( aiaction.length == asKey.length );

        // services outside loop for speed
        IHandlerService ihandlerservice = (IHandlerService)iworkbenchpartsite.getService( IHandlerService.class );
        ICommandService icommandservice = (ICommandService)iworkbenchpartsite.getService( ICommandService.class );
        IContextService icontextservice = (IContextService)iworkbenchpartsite.getService( IContextService.class );
        IBindingService ibindingservice = (IBindingService)PlatformUI.getWorkbench().getAdapter( IBindingService.class );

        // current bindings
        Binding [] abinding = ibindingservice.getBindings();

        // new  bindings
        List&amp;#60;Binding&amp;#62; listNewBindings = new ArrayList&amp;#60;Binding&amp;#62;( 0 );

        for( int i = 0; i &amp;#60; aiaction.length; i++ ) {

            ActionHandler actionhandler = new ActionHandler( aiaction[i] );
            ihandlerservice.activateHandler( aiaction[i].getActionDefinitionId(), actionhandler );
    
            Category category = icommandservice.getCategory( ssCommandCategoryID );
            if( !category.isDefined() )
                category.define( ssCommandCategoryName, null );
    
            Command command = icommandservice.getCommand( aiaction[i].getActionDefinitionId() );
            if( !command.isDefined() )
                command.define( aiaction[i].getText(), aiaction[i].getDescription(), category );

            Context context = icontextservice.getContext( ssContextID );
            if( !context.isDefined() )
                context.define( ssContextName, null, ssParentContextID );

            icontextservice.activateContext( ssContextID );

            boolean bCreateNewBinding = true;

            // make sure the binding doesn't already exist for this context
            for( Binding binding : abinding ) {                    
                if(    (binding.getParameterizedCommand() != null)
                    &amp;#38;&amp;#38; binding.getParameterizedCommand().getCommand().getId().equals( aiaction[i].getActionDefinitionId() )
                    &amp;#38;&amp;#38; binding.getContextId().equals( ssContextID ) )
                    bCreateNewBinding = false;
            }

            if( bCreateNewBinding &amp;#38;&amp;#38; (asKey[i] != null) ) {
                ParameterizedCommand parameterizedcommand = new ParameterizedCommand( command, null );
                KeySequence keysequence = KeySequence.getInstance( asKey[i] );
                listNewBindings.add( new KeyBinding( keysequence, parameterizedcommand,
                                                     ssDefaultSchemeID, ssContextID,
                                                     null, null, null,
                                                     Binding.USER ) );
            }
        }

        if( listNewBindings.size() == 0 )
            return;

        // add new bindings to current and save them
        Binding [] abindingNew = listNewBindings.toArray( new Binding [] {} );
        Binding [] abindingPlusNew = new Binding[abinding.length + abindingNew.length];

        System.arraycopy( abinding, 0, abindingPlusNew, 0, abinding.length );
        System.arraycopy( abindingNew, 0, abindingPlusNew, abinding.length, abindingNew.length );

        Scheme schemeDefault = ibindingservice.getScheme( ssDefaultSchemeID );
        ibindingservice.savePreferences( schemeDefault, abindingPlusNew );
    }
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Now we create the action that happens when the user presses the run/pause button. Back when we put the exit action in the menu bar, we used an existing action that Eclipse defined. But this time we have to make our own action from scratch.&lt;/p&gt;
&lt;p&gt;Right-click ?name.wadewalker.tutorial.jogleditor? in the package explorer, then select ?New &amp;#62; Class?. Set the class name to ?RunPauseAction? and click ?Finish?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-23-new-run-pause-action.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-23-new-run-pause-action.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Replace the contents of RunPauseAction.java with this code:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
package name.wadewalker.tutorial.jogleditor;

import name.wadewalker.tutorial.Activator;

import org.eclipse.jface.action.Action;

//================================================================
/**
 * Runs or pauses the simulation on alternate button presses.
 * Changes the picture and tooltip of the button accordingly.
 *
 * @author Wade Walker
 * @version 1.0
 */
public class RunPauseAction extends Action {

    /** Unique action ID for the Eclipse platform. */
    public static final String ssID = &amp;#34;JOGLEditor.RunPauseAction&amp;#34;;

    /** True if the simulation is running, false if it's paused. */
    private boolean bRunning = false;

    //================================================================
    /**
     * Constructor.
     */
    public RunPauseAction() {
        super( &amp;#34;Run&amp;#34;, Action.AS_PUSH_BUTTON );
        setToolTipText( &amp;#34;Run simulation&amp;#34; );
        setImageDescriptor( Activator.getIcon( &amp;#34;jogleditor/resume_co.gif&amp;#34; ) );
        setId( ssID );
        setActionDefinitionId( ssID );
    }

    //================================================================
    /**
     * Code to run the action.
     *
     * @see org.eclipse.jface.action.Action#run()
     */
    @Override
    public void run() {
        if( bRunning ) {
            setToolTipText( &amp;#34;Run simulation&amp;#34; );
            setImageDescriptor( Activator.getIcon( &amp;#34;jogleditor/resume_co.gif&amp;#34; ) );
        }
        else {
            setToolTipText( &amp;#34;Pause simulation&amp;#34; );
            setImageDescriptor( Activator.getIcon( &amp;#34;jogleditor/suspend_co.gif&amp;#34; ) );
        }
        bRunning = !bRunning;
    }

    //================================================================
    /**
     * Accessor.
     * @return true if the simulation is running, false otherwise.
     */
    public boolean isRunning() {
        return( bRunning );
    }
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Turn on the toolbar by changing one line in ApplicationWorkbenchWindowAdvisor.preWindowOpen() to this:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
        iworkbenchwindowconfigurer.setShowCoolBar( true );
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Now finally we can finish the action bar contributor for our editor and make it add our new button to the tool bar. Replace the contents of JOGLEditorActionBarContributor.java with this code:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
package name.wadewalker.tutorial.jogleditor;

import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.part.EditorActionBarContributor;

//================================================================
/**
 * Contributes the JOGLEditor's actions to the action bar.
 *
 * @author Wade Walker
 * @version 1.0
 */
public class JOGLEditorActionBarContributor extends EditorActionBarContributor {

    /** Runs and pauses the simulation. */
    private RunPauseAction runpauseaction;

    //================================================================
    /**
     * Constructor. Creates the actions.
     */
    public JOGLEditorActionBarContributor() {
        runpauseaction = new RunPauseAction();
    }

    //================================================================
    /**
     * Registers action handlers.
     *
     * @param iactionbars Used to register global actions.
     * @param iworkbenchpage Used to set part listeners.
     * @see org.eclipse.ui.part.EditorActionBarContributor#init(org.eclipse.ui.IActionBars, org.eclipse.ui.IWorkbenchPage)
     */
    @Override
    public void init( IActionBars iactionbars, IWorkbenchPage iworkbenchpage ) {
        super.init( iactionbars, iworkbenchpage );

        // register handlers
        iactionbars.setGlobalActionHandler( RunPauseAction.ssID, runpauseaction );
    }

    //================================================================
    /**
     * Contributes the editor's actions to the tool bar.
     *
     * @param itoolbarmanager Used to add actions to the editor tool bar.
     * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToToolBar(org.eclipse.jface.action.IToolBarManager)
     */
    @Override
    public void contributeToToolBar( IToolBarManager itoolbarmanager ) {
        itoolbarmanager.add( runpauseaction );
    }
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;To let the editor use the new action, comment in the block of code at the end of JOGLEditor.init() and the two lines in JOGLEditor.createPartControl().&lt;/p&gt;
&lt;p&gt;&lt;b&gt;From viniculture to oenology: Savoring our completed vintage&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Now when you run the app, you can see a ?Run simulation? button in the toolbar, complete with tooltip and keyboard shortcut.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-24-run-app.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-24-run-app.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When you click the ?Run simulation? button or press the space bar, the animation begins, the frame rate climbs to its max, and the button icon and tooltip change to ?Pause simulation?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-25-pause-app.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-25-pause-app.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clicking or pressing the space bar again pauses the simulation. Here?s what our app looks like in Linux:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/12/t4-26-pause-app-linux.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/12/t4-26-pause-app-linux.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; And there you have it! A complete app that lets you start, stop, and exit in a civilized way.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Resources which the reader may find helpful&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Eclipse: At &lt;a href="http://wiki.eclipse.org/index.php/Eclipse_FAQs"&gt;http://wiki.eclipse.org/index.php/Eclipse_FAQs&lt;/a&gt; there?s a ton of information about Eclipse, including definitions of confusing Eclipse terms.&lt;/p&gt;
&lt;p&gt;Eclipse RCP: At &lt;a href="http://wiki.eclipse.org/RCP"&gt;http://wiki.eclipse.org/RCP&lt;/a&gt; they?ve got a long list of resources that will help with Eclipse RCP programming.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;A list of the revisions which we have made to this document&lt;/b&gt;&lt;/p&gt;
&lt;li&gt;12/06/2010: Wrote the first version.&lt;/li&gt;
&lt;li&gt;12/11/2010: Fixed the Tutorial.project file to remove outdated reference to &amp;#8220;vbotutorial&amp;#8221;.&lt;/li&gt;</content:encoded>
      <pubDate>Mon, 06 Dec 2010 22:21:18 GMT</pubDate>
      <guid isPermaLink="false">http://wadeawalker.wordpress.com/2010/12/06/tutorial-displaying-java-opengl-in-an-eclipse-editor-with-a-menu-bar-and-a-runpause-button/</guid>
      <dc:creator>Wade Walker</dc:creator>
      <dc:date>2010-12-06T22:21:18Z</dc:date>
    </item>
    <item>
      <title>Version 2.2.0</title>
      <link>http://www.dyn4j.org/archives/157</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dyn4j.org/archives/157/feed</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>The new version, 2.2.0, features convex hull and convex decomposition algorithms. Intended for use during runtime or for pre-processing. See the javadocs for more details. When running you may be asked to accept a certificate from me (I just self signed the JARs). The certificates will expire six months from today&amp;#8230; JNLP Applet Standalone JARs [...]</description>
      <content:encoded>&lt;p&gt;The new version, 2.2.0, features convex hull and convex decomposition algorithms.  Intended for use during runtime or for pre-processing.  See the &lt;a href="http://docs.dyn4j.org"&gt;javadocs&lt;/a&gt; for more details.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;When running you may be asked to accept a certificate from me (I just self signed the JARs).  The certificates will expire six months from today&amp;#8230;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div id="attachment_51" class="wp-caption alignright" style="width: 310px"&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.0/screenshot.png"&gt;&lt;img class="size-medium wp-image-51" title="TestBed Screenshot" src="http://www.dyn4j.org/files/testbed/release/v2.2.0/screenshot.png" alt="" width="300" height="234" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;The &amp;#34;Decompose&amp;#34; test from the TestBed&lt;/p&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.0/testbed.jnlp" target="_self"&gt;JNLP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.0/testbed.html" target="_blank"&gt;Applet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.0/testbed.zip" target="_self"&gt;Standalone JARs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.2.0/license.txt" target="_blank"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All the releases require Java 1.6+.  Be sure to type the &amp;#8220;c&amp;#8221; key to get the TestBed Control Panel so you can play with the simulator.&lt;/p&gt;
&lt;p&gt;Use the Controls tab to view all the key board and mouse options.  Use the Tests tab to run a test of your choosing.  Use the Draw Options tab to set what is drawn to the screen.  And finally, use the Simulation Settings tab to play with all the different settings allowed by the engine.&lt;/p&gt;</content:encoded>
      <category>Uncategorized</category>
      <pubDate>Sat, 20 Nov 2010 22:57:45 GMT</pubDate>
      <guid isPermaLink="false">http://www.dyn4j.org/?p=157</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2010-11-20T22:57:45Z</dc:date>
    </item>
    <item>
      <title>Tutorial: Creating native binary executables for multi-platform Java apps with OpenGL and Eclipse RCP</title>
      <link>http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/</link>
      <description>Greets to my peeps, and to eybody reppin? the 512! Wade Walker back in the house, and hype for some</description>
      <content:encoded>&lt;p&gt;Greets to my peeps, and to eybody reppin? the 512! Wade Walker back in the house, and hype for some third-time tutorialization.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;I also return to the dwelling! Debonair of aspect, felicitous of phrase: ?Stitio? is my nom-de-guerre!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Hey, did I miss something? I thought your name was ?Interstitius? or something Latiny like that.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;?Interstitius? was not so swashbuckling as I had hoped. This shorter, Italianate version should manifest my dashing and adventurous persona to any pulchritudinous lady-beings who may chance upon these writings.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;That kind of sounds like you?re an alien AI impersonating a Renaissance Italian Musketeer.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Even so! You have seized upon the very crux of my intent!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;People keep telling me that.&lt;/p&gt;
&lt;p&gt;So! In our &lt;a href="http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/"&gt;last tutorial&lt;/a&gt;, me and the mutably-named Stitio showed how to speed up the rendering in our cross-platform scientific application by using OpenGL?s vertex buffer objects.&lt;/p&gt;
&lt;p&gt;This time, we?ll show you how to create true native binaries for these sorts of Eclipse RCP apps. This lets you distribute them the same way as non-Java apps, so you don?t have to use wrapper scripts or other hackery.&lt;/p&gt;
&lt;p&gt;&lt;!--more continue reading...--&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ante-ante-prelude: An overview of how ?Java apps? are normally launched&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;When you compile a Java app, it?s turned into .class files, one per Java class. Eclipse puts them into the ?bin? or ?classes? directory inside the project directory. Here are the .class files for our previous tutorial:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-00-class-files.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-00-class-files.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;These files are full of platform-independent Java byte code that the Java virtual machine (JVM) interprets. To run an app that?s compiled into a directory of files like this, you have to type&lt;/p&gt;
&lt;p&gt;&lt;code&gt;java ?classpath MyClassDir MyMainClassName&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;But some users are gonna be put off by this. It would be nicer if you could just double-click ?MyApp.exe? to run, like for a normal app.&lt;/p&gt;
&lt;p&gt;We can get closer to that by packaging our .class files into a single JAR (Java ARchive) file. Here?s how you do it:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;jar cfm MyApp.jar MyMainClassName MyClassDir/*.class&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This makes a single .jar file containing all your .class files, with a ?manifest? file inside that tells Java which class is your main class. Then you run it like this&lt;/p&gt;
&lt;p&gt;&lt;code&gt;java -jar MyApp.jar&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Or on Windows if you have a Java Runtime Environment (JRE) installed, you can just double-click the JAR file and Windows will add in the &lt;code&gt;java -jar&lt;/code&gt; for you.&lt;/p&gt;
&lt;p&gt;They call these kinds of .jar files ?executable JARs?, but they?re not native binary executables, they?re really just zip files full of .class files. And this type of JAR can?t hold the native libraries that are in Java OpenGL, because those libraries have to be sitting on the file system separately so the operating system can see them.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ante-prelude: How might one create a ?Java native binary??&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Well, there?s no way to do it by using the ?java? and ?jar? commands that come with a Java installation. You have to use some third-party system. If we weren?t already using Eclipse, we might use something like &lt;a href="http://launch4j.sourceforge.net/"&gt;launch4j&lt;/a&gt; or &lt;a href="http://jsmooth.sourceforge.net/"&gt;JSmooth&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But! Eclipse itself comes as a native binary, and it has its own built-in system that lets you create similar ones for your Eclipse RCP apps. Take a look at the Eclipse installation:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-01-eclipse-installation.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-01-eclipse-installation.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can see there?s a small native binary, ?eclipse.exe?, plus a bunch of directories. These directories contain all the JAR files and other stuff that?s part of Eclipse. When you run ?eclipse.exe?, it finds the JRE on your system, unpacks any native libraries into its ?configuration? directory, shows a splash screen, then runs &lt;code&gt;java -jar SomeEclipseJARFile.jar&lt;/code&gt; for you.&lt;/p&gt;
&lt;p&gt;But why is there so much stuff in this installation directory? It?s possible to make a Java native binary that?s one single executable file: an executable header with the JAR file appended. So why doesn?t Eclipse do it like that?&lt;/p&gt;
&lt;p&gt;Several reasons. First, having a ?plugins? directory lets you drop additional JARs into the installation. You need to do this if your app is something like Eclipse, where you can download and install new features over time.&lt;/p&gt;
&lt;p&gt;Second, if your app contains native libraries (.dll or .so files), they need to be unpacked and written out as separate files before the operating system can load them. Eclipse does that for you, and hides them down inside the ?configuration? directory.&lt;/p&gt;
&lt;p&gt;Third, the ?eclipse.ini? file let users pass extra startup arguments to the app or the JVM without having to put them on the command line every time.&lt;/p&gt;
&lt;p&gt;And fourth, you can include a ?jre? directory in the installation that makes your app completely independent of any Java installation on the host computer.&lt;/p&gt;
&lt;p&gt;So, bottom line: Eclipse?s native binary system is complex, but gives you lots of options and room to grow your app into something bigger later on.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Prelude: We augment our Eclipse installation&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Eclipse can already export native binaries for the platform you?re running it on. But if you want to export native binaries for all the other platforms at the same time, you have to install the Eclipse Delta Pack. To find it, start at the &lt;a href="http://www.eclipse.org/downloads/"&gt;Eclipse download site&lt;/a&gt; and click the ?Other Downloads? link under ?Eclipse Classic?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-02-other-downloads.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-02-other-downloads.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then click the version of Eclipse you?ve got installed under ?Build Name?. I?ve got version 3.6.1 installed.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-03-eclipse-version.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-03-eclipse-version.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then finally click on the delta pack download link. The one I got was ?eclipse-3.6.1-delta-pack.zip?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-04-delta-pack.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-04-delta-pack.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Unzip this file where you want to install the delta pack. I put it beside my Eclipse installation and called it ?eclipse-3.6.1-delta-pack?. You can also unzip it directly onto your Eclipse installation, but everyone seems to advise against that. Here?s how mine looks.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-05-delta-pack-location.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-05-delta-pack-location.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We still have to tell Eclipse where to find the delta pack, but we can?t do that until we set up our workspace, since Eclipse stores that setting in your workspace?s ?.metadata? directory.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Intermezzo: For expediency?s sake, we re-use our previous project&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;We?ll use our previous masterwork as a starting point. First, create a new workspace directory and unzip &lt;a href="http://wadeawalker.files.wordpress.com/2010/10/jogl-projects-zip-not-a.doc"&gt;this file&lt;/a&gt; and &lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t2-project-zip-not-a.doc"&gt;this file&lt;/a&gt; from the &lt;a href="http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/"&gt;last tutorial&lt;/a&gt; into it. Then follow the instructions from the last tutorial to import those projects into your workspace.&lt;/p&gt;
&lt;p&gt;Or, as usual, if you just wanna skip to the end of this tutorial without all the typing and clicking, create your new workspace directory and unzip &lt;a href="http://wadeawalker.files.wordpress.com/2010/10/jogl-projects-zip-not-a.doc"&gt;this file&lt;/a&gt; and &lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-project-zip-not-a.doc"&gt;this file&lt;/a&gt; into it, then import the projects. You?ll still have to point Eclipse at your delta pack, though.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Entremet: We inform Eclipse as to the location of our ?delta pack?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Now that we have a workspace to store these settings, click ?Window &amp;#62; Preferences? from the menu, open ?Plug-in Development? on the left, click ?Target Platform?, and select the ?Running Platform? on the right. Then click ?Edit??.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-06-running-platform.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-06-running-platform.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When the ?Edit Target Definition? dialog appears, click ?Add??.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-07-edit-platform.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-07-edit-platform.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then select ?Directory? and click ?Next?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-08-add-content.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-08-add-content.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enter the directory where you put the delta pack. Mine is right beside Eclipse, so I can do it like this: ?${eclipse_home}\..\eclipse-3.6.1-delta-pack?. Then click ?Finish?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-09-delta-pack-dir.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-09-delta-pack-dir.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now you should see the delta pack in your platform like this. Click ?Finish? again.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-10-edit-platform-filled.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-10-edit-platform-filled.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Finally, click ?OK? to dismiss the Preferences dialog. Eclipse will grind for a moment, then the delta pack is in! Just remember, if you make a new workspace later, you gotta do this again.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Opus: The creation of our ?product?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Now we tell Eclipse what it needs to know to export our tutorial as native binaries. Right-click the ?name.wadewalker.tutorial? project in the Package Explorer and select ?New &amp;#62; Product Configuration?. Enter ?Tutorial? as the file name, then click ?Finish?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-11-new-product-configuration.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-11-new-product-configuration.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This creates a new file ?Tutorial.product? in the ?name.wadewalker.tutorial? directory. This file will hold all the settings we need to export native binaries. It should look like this to start with:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-12-first-overview.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-12-first-overview.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now change the version to ?1.0.0?. Click the ?Application? drop-down and select ?name.wadewalker.vbotutorial.application?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-13-edited-overview.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-13-edited-overview.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then click the ?Launching? tab at the bottom of the Tutorial.product window. Enter ?Tutorial? as the launcher name.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-14-launcher-name.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-14-launcher-name.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then click the ?Overview? tab to go back, and click the ?Eclipse Product export wizard? link to start the native binary export.&lt;/p&gt;
&lt;p&gt;When the export wizard comes up, set the root directory to ?bin?. Then set the destination to an empty directory where you want the native binaries to go. I put mine in a directory called ?installation? beside the workspace, but it can be anywhere. Minor annoyance: this apparently has to be an absolute path. Then check the ?Export for multiple platforms? box and click ?Next?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-15-export.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-15-export.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Check the boxes of the platforms you want to export to. I?m doing Linux GTK 32- and 64-bit, Mac OS X Cocoa 64-bit, and Windows 32- and 64-bit. I don?t have a way to test the Mac version right now, but we can at least see that it exports. Click ?Finish? to start the export process.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-16-export-platforms.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-16-export-platforms.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Exporting takes a minute or so, but once it?s done you should see this in your destination directory:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-17-installation-dir.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-17-installation-dir.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There?s one directory per platform, and one common ?repository? that holds JARs and other files that are the same for all platforms. If you look down inside the ?win32.win32.x86_64\bin? directory, you?ll see an installation that looks just like Eclipse:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-18-win64-installation.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-18-win64-installation.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Double-click on that executable, and pow! Here?s the binary running on Windows 7 64-bit:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-19-win64-running.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-19-win64-running.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And onomatopoeia! Here it is on CentOS 5.4 64-bit:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-20-linux64-running.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-20-linux64-running.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now you can write one Java OpenGL app, export it, and get native binaries for five different platforms at once. And that, my friends, is super-genius-ness in &lt;i&gt;action!&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Postlude: Where further customization is left for your amusement, chiefly due to our laziness&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;You can see from all the tabs and fields of the ?Tutorial.product? file that there?s a lot more customization you can do. You can put in a custom splash screen, custom icon, custom JVM arguments, and a lot more.&lt;/p&gt;
&lt;p&gt;One thing that doesn?t work right as of Eclipse 3.6.1 is the ?Bundle JRE for this environment with the product? check box on the ?Launching? tab of ?Tutorial.product?. If you check the box, re-export, and compare the exported product to the one you had before, you?ll see they?re freaken identical.&lt;/p&gt;
&lt;p&gt;But then we open up the smartness hose on this problem. Find the JRE directory of your system?s Java installation, which looks like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-21-jre-dir.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-21-jre-dir.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Create a new directory in your app?s installation (under the same platform as your system) and name it ?jre?. Then copy the contents of the above JRE directory into it. Now that platform in your installation should look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t3-22-installation-with-jre.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t3-22-installation-with-jre.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And now when you double-click your ?Tutorial.exe?, it will use the ?java.dll? and ?jvm.dll? from this new ?jre? directory instead of using your system?s installation of the JRE. I?ve confirmed this with Windows Process Explorer, and I?ve done it on Linux the same way. The Eclipse launcher always looks here first, so we?re just putting a JRE right where it expects to find one.&lt;/p&gt;
&lt;p&gt;I usually put this annoying little step in an installation script. I custom-made a zipped JRE for each platform, and I have the script unzip them into the right directories during the install process.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Resources which the reader may find helpful&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Windows Process Explorer: Get it &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;here&lt;/a&gt;. It helps verify that you?re really getting the JRE from where you think you are. It?s also handy for seeing where the JOGL DLLs get unpacked to.&lt;/p&gt;
&lt;p&gt;Eclipse product configurations: There?s a tutorial from Lars Vogel &lt;a href="http://www.vogella.de/articles/EclipseRCP/article.html#product"&gt;here &lt;/a&gt; that has more details than I give.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;A list of the revisions which we have made to this document&lt;/b&gt;&lt;/p&gt;
&lt;li&gt;10/24/2010: Wrote the first version.&lt;/li&gt;
&lt;li&gt;10/25/2010: Fixed the links to full-sized images.&lt;/li&gt;
&lt;li&gt;11/19/2010: Added a link to the completed version of this tutorial.&lt;/li&gt;</content:encoded>
      <pubDate>Mon, 25 Oct 2010 03:02:52 GMT</pubDate>
      <guid isPermaLink="false">http://wadeawalker.wordpress.com/2010/10/24/tutorial-creating-native-binary-executables-for-multi-platform-java-apps-with-opengl-and-eclipse-rcp/</guid>
      <dc:creator>Wade Walker</dc:creator>
      <dc:date>2010-10-25T03:02:52Z</dc:date>
    </item>
    <item>
      <title>Tutorial: Faster rendering with vertex buffer objects</title>
      <link>http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/</link>
      <description>Hi again! Wade Walker here: engineer, would-be scientist, and second-time tutorializer. I return as</description>
      <content:encoded>&lt;p&gt;Hi again! Wade Walker here: engineer, would-be scientist, and second-time tutorializer.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;I return as well! Dashing being-about-town and nascent heading-writer ?Interstitius?, at your service&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;What can I say?he brings a unique sensibility to his work. Anyway, in our last &lt;a href="http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/"&gt;tutorial&lt;/a&gt;, me and Stish showed how to create the skeleton of a scientific app using Eclipse RCP and Java OpenGL (JOGL, which I like to pronounce ?joggle?).&lt;/p&gt;
&lt;p&gt;This time, I?ll show how to speed up rendering by using OpenGL?s ?vertex buffer objects? instead of glBegin and glEnd like we did last time. I?ll also keep evolving the tutorial towards a ?real? scientific app by making the data source more like scientific data.&lt;/p&gt;
&lt;p&gt;Science, ho!&lt;/p&gt;
&lt;p&gt;&lt;!--more continue reading...--&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Formerly our method of drawing was easy, but slow&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;This is how you draw one quadrilateral (what we call a ?square?, ?rectangle?, ?trapezoid?, or ?rhombus? in English, except that the last two are technically Greek) in old-style OpenGL:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
glBegin( GL_QUADS );
    glVertex3f( -1.0f, 1.0f, 0.0f );    // top left
    glVertex3f( 1.0f, 1.0f, 0.0f );     // top right
    glVertex3f( 1.0f,-1.0f, 0.0f );     // bottom right
    glVertex3f( -1.0f,-1.0f, 0.0f );    // bottom left
glEnd();
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Perfectly straightforward ? it draws one quad, which has four vertices, as quads often do. Easy to understand, easy to write. So why not do everything like this?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;In a somewhat predictable inversion, our new method is difficult, but fast&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Here?s why we can?t: in a real app, you?ve got a huge mess of stuff between glBegin and glEnd, and the OpenGL driver will struggle to optimize it into something efficient that it can send to the graphics card. Sometimes this works OK, but other times the driver can?t handle it well, and the result is something that?s correct, but slow.&lt;/p&gt;
&lt;p&gt;Here?s how we fix it. We create a vertex buffer object, which is just a big chunk of memory that holds the objects we want to draw. Then we send it to our graphics card all at once, where it gets drawn super-fast by dedicated hardware.&lt;/p&gt;
&lt;p&gt;The new hotness of vertex buffer objects makes you do all the hard work of setting up your object data in the exact format that the graphics card can process the fastest. So at the price of a few extra drops of programmer brain-juice, your users get faster graphics. And everyone?s happy!&lt;/p&gt;
&lt;p&gt;I won?t show an example yet, because it?s too ugly to put first thing in the tutorial. Just hold on to that dream of gloriously fast graphics while we set up this new project.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Importing all of one?s projects at a stroke&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;This time instead of crawling through the tutorial one file at a time, I zipped up all the projects so you can slurp them into Eclipse all at once.&lt;/p&gt;
&lt;p&gt;Download &lt;a href="http://wadeawalker.files.wordpress.com/2010/10/jogl-projects-zip-not-a.doc"&gt;this file&lt;/a&gt; and &lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t2-project-zip-not-a.doc"&gt;this file&lt;/a&gt;, rename them so they end with ?.zip? instead of ?-zip-not-a.doc?, and unzip them inside an empty folder that you?ll use as a new Eclipse workspace. Then start Eclipse, select ?File &amp;#62; Switch Workspace &amp;#62; Other??, browse to your new workspace folder, and click ?OK?. If you see the welcome screen, click the ?Workbench? button on the right to go past it.&lt;/p&gt;
&lt;p&gt;?Then select ?File &amp;#62; Import?? from the main menu, select ?Existing Projects into Workspace?, and click ?Next?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t2-00-import-projects.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t2-00-import-projects.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click ?Browse??, navigate to your workspace folder, and click ?OK?. Then you should see these seven projects. Click ?Finish? to import them into your workspace.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t2-01-import-select-root1.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t2-01-import-select-root1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The word ?import? is a little misleading here, since the projects were already in your workspace folder. What happened just then was Eclipse wrote into its ?.metadata? folder inside the workspace folder, to tell itself which projects are in the workbench. The next time you open Eclipse, you should see the same projects again.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;A rather unsporting leap forward to reveal this tutorial?s outcome&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Let?s run the tutorial first to see what it does, then I?ll go back and explain it. After importing the projects, you should be seeing this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t2-02-workbench1.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t2-02-workbench1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now right-click on ?name.wadewalker.vbotutorial? in the ?Package Explorer? view on the left, then select ?Run As &amp;#62; Eclipse Application.? Now bask in the glory of vertex buffer objects! Yes, bask!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2010/10/t2-03-running.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2010/10/t2-03-running.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Perhaps a bit of explanation is needed for this rather uninspiring image?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I?m on it. This is supposed to approximate what a scientific visualization program might do. The sine wave on screen is made of 300,000 skinny vertical quads of different colors. The quads are stationary, but they?re constantly changing size to make the sine wave look like it?s moving. The ?frames per second? (FPS) counter in the bottom left shows you how fast your system can render this demo. The code that creates this data is in DataSource.java.&lt;/p&gt;
&lt;p&gt;Before an actual scientist VR-stabs me over the internet, let me say that of course no scientist would need to visualize something so simple. Because they?re all ?ber-geniuses! But this demo is to show us how to program, not how to drop science. The point is that we have a source of data that?s constantly changing, and we have to throw it up on screen as it evolves.&lt;/p&gt;
&lt;p&gt;So how does it work?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Creating a vertex buffer object &lt;i&gt;ex nihilo&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Technically it?s not created from &lt;i&gt;nothing&lt;/i&gt;, it?s created from &lt;i&gt;electrons&lt;/i&gt;, smarty-shorts. To see how, open up the ?name.wadewalker.vbotutorial? project in the Package Explorer on the left, then drill down to ?src/name.wadewalker.vbotutorial?, double-click on ?JOGLView.java?, and scroll to this part.&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java; first-line: 226;"&gt;
//================================================================
/**
 * Creates vertex buffer object used to store vertices and colors
 * (if it doesn't exist). Fills the object with the latest
 * vertices and colors from the data store.
 *
 * @param gl2 GL object used to access all GL functions.
 * @return the number of vertices in each of the buffers.
 */
protected int [] createAndFillVertexBuffer( GL2 gl2, List&amp;#60;DataObject&amp;#62; listDataObjects ) {

    int [] aiNumOfVertices = new int [] {listDataObjects.size() * 4};
        
    // create vertex buffer object if needed
    if( aiVertexBufferIndices[0] == -1 ) {
        // check for VBO support
        if(    !gl2.isFunctionAvailable( &amp;#34;glGenBuffers&amp;#34; )
            &amp;#124;&amp;#124; !gl2.isFunctionAvailable( &amp;#34;glBindBuffer&amp;#34; )
            &amp;#124;&amp;#124; !gl2.isFunctionAvailable( &amp;#34;glBufferData&amp;#34; )
            &amp;#124;&amp;#124; !gl2.isFunctionAvailable( &amp;#34;glDeleteBuffers&amp;#34; ) ) {
            Activator.openError( &amp;#34;Error&amp;#34;, &amp;#34;Vertex buffer objects not supported.&amp;#34; );
        }

        gl2.glGenBuffers( 1, aiVertexBufferIndices, 0 );

        // create vertex buffer data store without initial copy
        gl2.glBindBuffer( GL.GL_ARRAY_BUFFER, aiVertexBufferIndices[0] );
        gl2.glBufferData( GL.GL_ARRAY_BUFFER,
                          aiNumOfVertices[0] * 3 * Buffers.SIZEOF_FLOAT * 2,
                          null,
                          GL2.GL_DYNAMIC_DRAW );
    }

    // map the buffer and write vertex and color data directly into it
    gl2.glBindBuffer( GL.GL_ARRAY_BUFFER, aiVertexBufferIndices[0] );
    ByteBuffer bytebuffer = gl2.glMapBuffer( GL.GL_ARRAY_BUFFER, GL2.GL_WRITE_ONLY );
    FloatBuffer floatbuffer = bytebuffer.order( ByteOrder.nativeOrder() ).asFloatBuffer();

    for( DataObject dataobject : listDataObjects )
        storeVerticesAndColors( floatbuffer, dataobject );

    gl2.glUnmapBuffer( GL.GL_ARRAY_BUFFER );

    return( aiNumOfVertices );
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;First we create a vertex buffer object with glGenBuffers, then do a glBufferData to allocate the size we want. Every vertex needs three floats for the position (x, y, z), and three more for the color (r, g, b). Then we use glMapBuffer to get an object we can write into, we write all our floats into it, then we call glUnmapBuffer to finish.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Might you explain why both colors and vertices are placed into a so-called ?vertex buffer??&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Aha, good point! It?s true that in math, a ?vertex? is really just a point where lines meet, but in computer graphics we can also consider the color to be a part of the vertex. There can be more stuff in a vertex too, like the normal vector, texture coordinates, and other things we don?t need yet. So ?vertex buffer? isn?t really a misnomer.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Why, then, do we interdigitate the positions and colors? Could we not write all of one, then all of the other?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Alternating positions and colors in a single vertex buffer speeds things up by preserving data locality. When you write the data into the buffer, you don?t want to be writing to two widely separated addresses, because your computer?s memory system isn?t good at that.&lt;/p&gt;
&lt;p&gt;Similarly, if the graphics card has to fetch the positions from one address in memory and the colors from a very different address to render each triangle, it?s gonna be slower than if all the data for that triangle is close together.&lt;/p&gt;
&lt;p&gt;I originally used separate position and color buffers for this tutorial, and when I switched to one ?interdigitated? buffer, I got a 5% to 10% increase in frame rate.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Rendering one?s vertex buffer&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Here?s the code to draw the vertex buffer we just created, also in JOGLView.java:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java; first-line: 147;"&gt;
// needed so material for quads will be set from color map
gl2.glColorMaterial( GL.GL_FRONT_AND_BACK, GL2.GL_AMBIENT_AND_DIFFUSE );
gl2.glEnable( GL2.GL_COLOR_MATERIAL );

// draw all quads in vertex buffer
gl2.glBindBuffer( GL.GL_ARRAY_BUFFER, aiVertexBufferIndices[0] );
gl2.glEnableClientState( GL2.GL_VERTEX_ARRAY );
gl2.glEnableClientState( GL2.GL_COLOR_ARRAY );
gl2.glVertexPointer( 3, GL.GL_FLOAT, 6 * Buffers.SIZEOF_FLOAT, 0 );
gl2.glColorPointer( 3, GL.GL_FLOAT, 6 * Buffers.SIZEOF_FLOAT, 3 * Buffers.SIZEOF_FLOAT );
gl2.glPolygonMode( GL.GL_FRONT, GL2.GL_FILL );
gl2.glDrawArrays( GL2.GL_QUADS, 0, aiNumOfVertices[0] );

// disable arrays once we're done
gl2.glBindBuffer( GL.GL_ARRAY_BUFFER, 0 );
gl2.glDisableClientState( GL2.GL_VERTEX_ARRAY );
gl2.glDisableClientState( GL2.GL_COLOR_ARRAY );
gl2.glDisable( GL2.GL_COLOR_MATERIAL );

glcanvas.swapBuffers();
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;We use glVertexPointer and glColorPointer to set the starting positions in the buffer, with the first color pointer three floats after the first position. Then we tell the graphics card that each new position and color is six floats past the current one. We call that a ?stride? of six floats, which is 24 bytes. Then finally we draw the whole buffer full of quads with just one command, glDrawArrays.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;What, then, is the benefit of all our labors?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I did this tutorial with glBegin/glEnd first, as a test. When I switched to a vertex buffer, the frame rate increased by 100%.&lt;/p&gt;
&lt;p&gt;And this is a worst-case scenario, too. In many apps, most of the scene will be constant from one frame to the next, so we can just move the viewpoint and call glDrawArrays again without changing the vertex buffer at all.&lt;/p&gt;
&lt;p&gt;As a test, I changed the tutorial code to only write the vertex buffer once, and the frame rate jumped from 14 to 25. So vertex buffers are almost 200% faster than glBegin/glEnd for this more common situation.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Might we run faster still?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;There are 600K triangles here (2 per quad), and at 14 FPS, that?s 8.4 million triangles per second. With the vertex buffer written only once, we get 25 FPS, or 15M tris/sec.&lt;/p&gt;
&lt;p&gt;I downloaded the &lt;a href="http://developer.nvidia.com/object/nvperfkit_home.html"&gt;NVIDIA performance tools&lt;/a&gt; and profiled a couple of C++ DirectX demos that come with them. One got 5.7M tris/sec, and one got 8.4M tris/sec. They had texturing and other effects turned on, so their rendering isn?t as simple as ours, but their triangle rates seem comparable.&lt;/p&gt;
&lt;p&gt;But! When I look at the theoretical maximum speed, things aren?t so clear. My graphics card is an NVIDIA GeForce 8800 GTX, which can supposedly do 250M tris/sec on the &lt;a href="http://www.futuremark.com/"&gt;3DMark06 benchmark&lt;/a&gt;. That would give 417 FPS on our tutorial! Why is 3DMark06 16 times faster than us?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;A few thought-experiments as to how our speed could be increased&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Part of it may be the geometrical primitives 3DMark06 is rendering. We?re rendering quads, which have four vertices for two triangles, which means two vertices per triangle. If we jumped ahead in the OpenGL playbook and used triangle strips instead, we could get that down to one vertex per triangle, which could double our frame rate.&lt;/p&gt;
&lt;p&gt;But we need to double our rate three more times to get to that theoretical max. If we removed the color information and just drew all the triangles in the same color, we could halve the size of our vertices and maybe double the speed again.&lt;/p&gt;
&lt;p&gt;But how do we double it two more times? No clue.&lt;/p&gt;
&lt;p&gt;Maybe changing the vertex buffer every frame is saturating the bus between my computer and the video card? Let?s check.&lt;/p&gt;
&lt;p&gt;My video card is designed for an x16 PCI Express 1.x slot, which is rated at 4GB/sec. In this tutorial, each vertex buffer is (300,000 quads) * (4 verts/quad) * (6 floats/vert) * (4 bytes/float) = 28,800,000 bytes. At 14 FPS, that?s 403,000,000 bytes/sec, which is only about 10% of our bus capacity. So that can?t be the problem.&lt;/p&gt;
&lt;p&gt;Hmm, I?m out of ideas for the moment. But handing back my super-genius credentials isn?t an option, so I?ll look into this and cover it in a future tutorial.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Resources which the reader may find helpful&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;OpenGL tutorials: Check out &lt;a href="http://nehe.gamedev.net/"&gt;http://nehe.gamedev.net/&lt;/a&gt;. These go over OpenGL more slowly and thoroughly than I do, and are recommended.&lt;/p&gt;
&lt;p&gt;The OpenGL Programming Guide, n&lt;sup&gt;th&lt;/sup&gt; edition: You can buy it for about $50 on Amazon. It?s definitive, but not exactly a tutorial. The style of OpenGL I?ve used so far is actually 1.5 to 2.0, not the latest 4.1 stuff, so make sure to get a book about the version you want.&lt;/p&gt;
&lt;p&gt;Basic documentation: At &lt;a href="http://www.opengl.org/"&gt;http://www.opengl.org/&lt;/a&gt; you can find docs for the C API calls. The ones in JOGL are Java-fied, but you can usually tell how to translate one to the other.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;A list of the revisions which we have made to this document&lt;/b&gt;&lt;/p&gt;
&lt;li&gt;10/17/2010: Wrote first version.&lt;/li&gt;
&lt;li&gt;10/23/2010: Updated to split the zip file and include JOGL for multiple platforms.&lt;/li&gt;
&lt;li&gt;10/26/2010: Fixed the links to full-sized images.&lt;/li&gt;</content:encoded>
      <pubDate>Sun, 17 Oct 2010 22:06:07 GMT</pubDate>
      <guid isPermaLink="false">http://wadeawalker.wordpress.com/2010/10/17/tutorial-faster-rendering-with-vertex-buffer-objects/</guid>
      <dc:creator>Wade Walker</dc:creator>
      <dc:date>2010-10-17T22:06:07Z</dc:date>
    </item>
    <item>
      <title>MM Adaptive Rendering using JOGL and Newt</title>
      <link>http://ramisantina.com/blog/?p=9</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://ramisantina.com/blog/?feed=rss2&amp;p=9</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>Was working recently on creating an adaptive renderer, using JOGL. The goal of this project was to ensure high frame rate and usability while walking thru a model of a large data set. Ideally, containing approx. a million+ complex geometric objects. What follows is a description on how it was done. (you might see this [...]</description>
      <content:encoded>&lt;p&gt;Was working recently on creating an adaptive renderer, using JOGL. The goal of this project was to ensure high frame rate and usability while walking thru a model of a large data set. Ideally, containing approx. a million+ complex geometric objects. What follows is a description on how it was done. (you might see this as lengthy or over simplified&amp;#8230;depends)&lt;/p&gt;
&lt;p&gt;Before I go into the details, lets see what is required to achieve a &amp;#8220;good&amp;#8221; adaptive rendering for massive model visualization (MMV).&lt;/p&gt;
&lt;p&gt;What is required:&lt;br /&gt;
1- Ability to navigate smoothly within the large data set&lt;br /&gt;
2- Renderer can hide objects to speed the rendering.&lt;br /&gt;
3- At any point, near objects should always be visible and in high resolution&lt;br /&gt;
4- When navigation stops, hidden objects should be re-shown.&lt;br /&gt;
5- Keep CPU/GPU usage to minimum when navigation is stopped.&lt;br /&gt;
6- Don&amp;#8217;t block the application when re-showing objects on scene.&lt;/p&gt;
&lt;p&gt;A bit of background, the application uses AWT and Swing for Interface, and JOGL for rendering. Using an AWT canvas to do this doesnt work since (6) would need to be compromised since AWT treats the display as another UI.&lt;br /&gt;
With the addition of Newt &amp;#8211; AWT parenting added to JOGL 2, We can go ahead and render in an independent thread which is independent of the AWT EDT. This takes care of (6)&lt;/p&gt;
&lt;p&gt;Now to the rest. To ensure high frame rate we will need to hide objects while rendering, In a large model we will for sure have a lot of occluded objects which at any point can reduce the number of objects drawn on scene. And also depending on the occlusion results u can know approx. how many fragments resulted from each object.&lt;/p&gt;
&lt;p&gt;Using this information you can sort your objects depending on the occlusion result. You can do this on every frame (using two pass rendering) if you have time or every couple of frames if you need every ms (which is usually the case). If you have objects that require to be rendered in the end, like transparent objects, a separate list is needed. This ensures (3) since near objects will have high fragment count. Large objects in scene will also have high fragment count, which is a plus to always have large object shown giving the general structure of the scene helping in user orientation.&lt;/p&gt;
&lt;p&gt;We create a threshold value set to the minimum fragment count to render. This threshold will stop rendering the objects once we reach an object with fragment_count less than the threshold. An initial value can be set by statistical computations of fragment counts, like median, avg, or min value. In our case, chose a value between avg and min.&lt;/p&gt;
&lt;p&gt;Using this threshold, and our statistical fragment count curve, which tell us approx how much objects will be hidden, we can choose the best new threshold. The curve is used to create a smooth hiding and showing of objects.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-9"&gt;&lt;/span&gt;With this information and the current fps we can render the scene.&lt;/p&gt;
&lt;p&gt;During navigation, at each frame we update the threshold to reach the required fps, this is done using a convergence approach of the threshold on the curve with respect to the desired fps. A convergence approach since you cant reach a stable desired fps in a linear manipulation of the threshold.&lt;/p&gt;
&lt;p&gt;When navigation stops, in each frame we move gradually the threshold to its min value. (disable occlusion tests in this stage since viewpoint wont be changed)&lt;/p&gt;
&lt;p&gt;To ensure (1), we move the camera based on fps ensuring that  we will rotate, move:? x and y steps per second where x and y are  application defined.&lt;/p&gt;
&lt;p&gt;This ensures that the navigation is consistent.&lt;br /&gt;
Now we have all the modules, we need now an animator that puts all these together and ensures (5).&lt;br /&gt;
a high level pseudo code for the? animator is shown below:&lt;/p&gt;
&lt;p&gt;while(shouldNotStop){&lt;br /&gt;
if(!animate and !popingup){&lt;br /&gt;
lock.wait() // pauses the animator &amp;#8211; ensuring (6)&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;&amp;#8212;render with current threshold (two or single pass)&lt;/p&gt;
&lt;p&gt;// update camera position and orientation if needed&lt;br /&gt;
// returning if navigation is still active (stooped or not)&lt;br /&gt;
animate = navigationMode-&amp;#62;continueNavigation&lt;/p&gt;
&lt;p&gt;if(!animate) {&lt;br /&gt;
// start poping up the objects until all objects that are no totally occluded&lt;br /&gt;
// are rendered&lt;br /&gt;
popingup = renderer -&amp;#62;popupObjects&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;Hope you find this useful!&lt;/p&gt;</content:encoded>
      <category>development</category>
      <category>adaptive</category>
      <category>algorithm</category>
      <category>jogl</category>
      <category>model</category>
      <category>newt</category>
      <category>opengl</category>
      <category>rendering</category>
      <category>visualization</category>
      <pubDate>Mon, 11 Oct 2010 10:31:00 GMT</pubDate>
      <guid isPermaLink="false">http://88.198.19.198/blog/?p=9</guid>
      <dc:creator>Rami</dc:creator>
      <dc:date>2010-10-11T10:31:00Z</dc:date>
    </item>
    <item>
      <title>Tutorial: A cross-platform graphical application using Java, OpenGL, and Eclipse</title>
      <link>http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/</link>
      <description>Hi! My name?s Wade Walker. I?m an engineer and wanna-be scientist. And you may call me ?Interstitius</description>
      <content:encoded>&lt;p&gt;Hi! My name?s Wade Walker. I?m an engineer and wanna-be scientist.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;And you may call me ?Interstitius?. I am something of a Renaissance-being, but my current occupation is penning the headings between these paragraphs.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Yeah, that doesn?t come across weird at all! But this guy comes highly recommended, so I figured I?d give him a try. What?s with the name, anyway?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;It is a Latinate nom de plume, of course. I thought it dashing and flamboyant, much like myself.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Um, OK sure. Don?t ask questions you don?t want answered, et cetera. Anyway moving on!&lt;/p&gt;
&lt;p&gt;At my day job, I write engineering apps that help chip designers make the chips that go into all your iStuff. But by night, and also on weekends, I write scientific apps as a hobby. And before anyone asks: no, I don?t live in my mom?s basement. Trust me, I?m &lt;i&gt;perfectly normal&lt;/i&gt;. Except for writing science apps.&lt;/p&gt;
&lt;p&gt;I?m gonna write a set of tutorials that walk you through creating a cross-platform graphical app using Java, OpenGL, and the Eclipse Rich Client Platform (?Eclipse RCP? for short). There are lots of other ways to do this, like with C++ and Qt, but I?m lazy and I figured I?d stick with what I know.&lt;/p&gt;
&lt;p&gt;What do I get out of this? &lt;i&gt;Glad you asked!&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;No one has asked anything as yet.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Dude, that?s just for color. Not supposed to be literal. Anyway, what I get out of tutorializing is this: I?m in the process of translating my hobby science app from C# and DirectX to Java and OpenGL. So I figured I might as well write up how I do it, and maybe help out some other folks in the process.&lt;/p&gt;
&lt;p&gt;In this first tutorial, I?ll make a bare-bones app that draws a rotating 3-D demo object in a window using Java OpenGL (JOGL).&lt;/p&gt;
&lt;p&gt;&lt;!--more continue reading...--&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;A brief description of the intended audience of this tutorial&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Nice heading, I-dog! Just keep ?em punchy like that and you?ll do great.&lt;/p&gt;
&lt;p&gt;I?m aiming these tutorials at people who want to write cross-platform graphical ?workbench? apps, the kind where users create some kind of project and edit it interactively using 3D hardware-accelerated graphics. Apps like this are common in the &lt;a href="http://www.schrodinger.com/"&gt;sciences&lt;/a&gt;, in &lt;a href="http://www.fluent.com/"&gt;engineering&lt;/a&gt;, and in the &lt;a href="http://usa.autodesk.com/adsk/servlet/pc/index?siteID=123112&amp;#38;id=13577897"&gt;graphic arts&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You should be able to do these tutorials if you?ve got a bit of software dev experience, but you don?t need any prior exposure to Java, Eclipse, or OpenGL. I?ll give you working code for each tutorial that you can adapt and use for whatever you want. Then you can gradually figure out how it works as you customize it.&lt;/p&gt;
&lt;p&gt;Java, Eclipse, and OpenGL are all super-deep neck-beard topics that take years of study to master, so don?t feel like you need to totally comprehend every bit of these tutorials the first time you see them. My main point in putting them up here is to give you working starting points for your own stuff and to get you past some common roadblocks, not to instantly transmute you into a super-genius like me.&lt;/p&gt;
&lt;p&gt;Quick pro tip for any eager beavers out there: If you already know how to set up an Eclipse workspace and just want to see the money shot, here?s a &lt;a href="http://wadeawalker.files.wordpress.com/2011/04/jogl-projects-zip-not-a.doc"&gt;zip file&lt;/a&gt; of the JOGL projects, and here?s &lt;a href="http://wadeawalker.files.wordpress.com/2011/04/t1-project-zip-not-a.doc"&gt;another zip file&lt;/a&gt; for the tutorial project. Just change the file names to end in  ?.zip? instead of ?-zip-not-a.doc?, unzip them, import them into Eclipse, and go nuts!&lt;/p&gt;
&lt;p&gt;Now, let?s do this!&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Put ?Java? and the ?Eclipse development environment? in order&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;If you don?t already have it, download and install the Standard Edition of the latest Java Development Kit (the Java SE JDK) from &lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"&gt;here&lt;/a&gt;. When I downloaded it, the latest version was JDK 7 update 4. You?ll have to pick the platform you?re running on, too. I?m running Windows 7 64-bit, so I picked the ?Windows x64? platform.&lt;/p&gt;
&lt;p&gt;Note! A JDK isn?t the same as a Java Runtime Environment (JRE) or Java browser plug-in that you may already have installed. If you?re not sure, check your installed programs to make sure you really have the JDK and not something else.&lt;/p&gt;
&lt;p&gt;Further note! If you?re running on Mac OS X, you may already have a Java JDK installed at /System/Library/Java/JavaVirtualMachines/1.6.0.jdk, since it used to ship with the operating system. If not, you can install Oracle&amp;#8217;s JDK 7 from &lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"&gt;here&lt;/a&gt;. Or if you don&amp;#8217;t want to try JDK 7 on OS X yet, you can install Apple&amp;#8217;s JDK 6 as documented &lt;a href="http://stackoverflow.com/questions/6614380/jdk-on-osx-10-7-lion"&gt;here&lt;/a&gt;. Just be aware that if you want this tutorial to build on more than one platform without changing any Eclipse settings, it&amp;#8217;s best to have the same version of the JDK installed on all your platforms.&lt;/p&gt;
&lt;p&gt;After your JDK is set, download and install ?Eclipse for RCP and RAP Developers? from &lt;a href="http://www.eclipse.org/downloads/"&gt;here&lt;/a&gt;. When I downloaded it, the latest version was 3.7.2, nicknamed ?Indigo? because of the obvious similarity between ?a dye-producing plant? and ?a software development environment?. I downloaded the Windows 64-bit version of this too. To run Eclipse, you just unzip it into any directory and double-click on ?eclipse.exe?.&lt;/p&gt;
&lt;p&gt;The first time you run Eclipse, it?ll show you the world?s most unhelpful welcome page. Click the ?Workbench? button on the right to go past it.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-00-go-to-workbench.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-00-go-to-workbench.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;?Then Eclipse will ask you what ?workspace? to open. Set this to a directory where you want to create your new projects for this tutorial, then click ?OK?. You can switch between workspaces or create new ones later on by selecting ?File &amp;#62; Switch Workspace? from the main menu.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-01-workspace-picking.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-01-workspace-picking.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here?s what your new empty workspace should look like now.
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-02-plug-in-development.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-02-plug-in-development.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Eclipse is a great sprawling beast, baroque but hyper-useful, and I can?t even try to explain everything about it here. I?ll just keep to the minimum that we need to make this tutorial work, and you can pick up the rest as you need it.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Obtain ?Java OpenGL?, or ?JOGL? as it is commonly known&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Um, I-man? You don?t have to scare-quote all the tech words. I think our audience can figure it out.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;My apologies.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;No biggie, just trying to keep it casual up in here. Java OpenGL, or yes, ?JOGL? as it?s known to those of us in the know, such as myself, is maintained by the super-programmers at &lt;a href="http://jogamp.org"&gt;JogAmp&lt;/a&gt;. So grab the latest gluegen and JOGL archive files from &lt;a href="http://jogamp.org/deployment/autobuilds/master/"&gt;here&lt;/a&gt;. I got five .7z files from gluegen-b547-2012-04-19_20-39-21 and five from jogl-b736-2012-04-19_20-43-43, which were the latest builds at the time of this writing.&lt;/p&gt;
&lt;li&gt;gluegen-2.0-b547-20120419-linux-amd64.7z&lt;/li&gt;
&lt;li&gt;gluegen-2.0-b547-20120419-linux-i586.7z&lt;/li&gt;
&lt;li&gt;gluegen-2.0-b547-20120419-macosx-universal.7z&lt;/li&gt;
&lt;li&gt;gluegen-2.0-b547-20120419-windows-amd64.7z&lt;/li&gt;
&lt;li&gt;gluegen-2.0-b547-20120419-windows-i586.7z&lt;/li&gt;
&lt;p&gt;&lt;/p&gt;
&lt;li&gt;jogl-2.0-b736-20120419-linux-amd64.7z&lt;/li&gt;
&lt;li&gt;jogl-2.0-b736-20120419-linux-i586.7z&lt;/li&gt;
&lt;li&gt;jogl-2.0-b736-20120419-macosx-universal.7z&lt;/li&gt;
&lt;li&gt;jogl-2.0-b736-20120419-windows-amd64.7z&lt;/li&gt;
&lt;li&gt;jogl-2.0-b736-20120419-windows-i586.7z&lt;/li&gt;
&lt;/p&gt;
&lt;p&gt;Since I develop on 64-bit Windows 7, I only need gluegen-2.0-b547-20120419-windows-amd64.7z and jogl-2.0-b736-20120419-windows-amd64.7z to run on my main computer, but I got all ten so I can make this project multi-platform. Unzip these files somewhere convenient. To unzip .7z files, I recommend &lt;a href="http://www.7-zip.org/"&gt;7-Zip&lt;/a&gt; on Windows and Linux, and &lt;a href="http://www.kekaosx.com/"&gt;Keka&lt;/a&gt; on Mac OS X.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Create JOGL projects within Eclipse&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;To use JOGL from an Eclipse RCP project, we have to repackage it a bit. JOGL is made of two types of files: JAR files that are common to all platforms, and library files (.dll files on Windows, .so files on Linux, and .jnilib or .dylib files on Mac OS X) that are specific to each platform you want your program to run on. We?ll put the JOGL JARs in an Eclipse plug-in project, and the JOGL library files in separate Eclipse plug-in fragment projects. If you?re not familiar with Eclipse don?t worry about what the different Eclipse project types mean right now. This setup is just a good way for all the platforms? libraries to live together without anything blowing up.&lt;/p&gt;
&lt;p&gt;First we create a project to hold the JAR files. Select ?File &amp;#62; New &amp;#62; Project?? from the Eclipse main menu to bring up the ?New Project? wizard. Open ?Plug-in Development?, select ?Plug-in from Existing JAR Archives?, and click ?Next?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-03-plug-in-wizard.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-03-plug-in-wizard.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click ?Add External??, and in the ?Open? dialog that pops up, navigate to the ?jar? directory inside an unzipped gluegen archive, select ?gluegen-rt.jar? and click ?Open?. Then do the same thing for the ?jogl.all.jar? file in the &amp;#8220;jar&amp;#8221; directory of an unzipped JOGL archive. It doesn&amp;#8217;t matter which platform&amp;#8217;s archive you get these JARs from, since they&amp;#8217;re all the same. Click ?Next? when you&amp;#8217;re done.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-04-add-jars.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-04-add-jars.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enter ?com.jogamp.jogl? as the project name. Set the plug-in version to ?2.0.0?. Set the plug-in name to &amp;#8220;JOGL&amp;#8221; and the plug-in provider to ?jogamp.org?. Uncheck ?Unzip the JAR archives into the project?. Then click ?Finish?, and Eclipse will magically create the project especially just for you.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-05-plugin-properties.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-05-plugin-properties.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Your finished project should look like this. The new ?com.jogamp.jogl? directory is inside your workspace directory. The settings you typed in are stored in the ?META-INF/MANIFEST.MF? and ?build.properties? files that the wizard just created for you. The wizard also copied the gluegen and JOGL JAR files into your new project.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-06-jogl-plugin-done.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-06-jogl-plugin-done.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next we create projects to hold the platform-specific libraries. Eclipse calls this type of project a ?fragment? because it?s an ?extra bit? of the earlier JAR project, and it holds stuff we only need on some platforms. Select ?File &amp;#62; New &amp;#62; Project?? to bring up the ?New Project? wizard again. Then open ?Plug-in Development?, select ?Fragment Project?, and click ?Next?. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-07-fragment-project.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-07-fragment-project.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enter ?com.jogamp.jogl-windows-amd64? as the project name, then click ?Next?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-08-fragment-project-name1.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-08-fragment-project-name1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Set the plug-in version to ?2.0.0?, the name to ?jogl-windows-amd64?, and the plug-in provider to ?jogamp.org?. Set the host plug-in ID to ?com.jogamp.jogl? (that?s the project this one is a fragment of). Set the minimum version to ?2.0.0?. Then click ?Finish? to create the project.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-09-fragment-project-finish1.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-09-fragment-project-finish1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When the overview of this fragment comes up, set the platform filter to the incantation ?(&amp;#38; (osgi.os=win32) (osgi.arch=x86_64))?. This makes sure the fragment project is only loaded when your program is run on a 64-bit Windows system.&lt;/p&gt;
&lt;p&gt;In Windows, manually copy all the DLLs from the ?lib? directories inside the unzipped ?*-windows-amd64? gluegen and JOGL archives into the new ?com.jogamp.jogl-windows-amd64? directory in your workspace. Then back in Eclipse, right-click the ?com.jogamp.jogl-windows-amd64? project and select ?Refresh?. You should see the DLLs in your project like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-10-fragment-project-overview1.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-10-fragment-project-overview1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To finish setting up this fragment, click the ?Build? tab at the bottom of the main window and check all the DLLs under ?Binary Build? list. It should look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-11-1-fragment-binary-build1.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-11-1-fragment-binary-build1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Create one?s other fragments, &lt;i&gt;mutatis mutandis&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I guess what Stish means by that is, we can create fragments for the rest of the platforms that we want to support by redoing what we just did for the 64-bit Windows fragment, but making the necessary changes for each one. Here are the fragment names and platform filters for all five:&lt;/p&gt;
&lt;li&gt;com.jogamp.jogl-linux-amd64: (&amp;#38; (osgi.os=linux) (osgi.arch=x86_64))&lt;/li&gt;
&lt;li&gt;com.jogamp.jogl-linux-i586: (&amp;#38; (osgi.os=linux) (osgi.arch=x86))&lt;/li&gt;
&lt;li&gt;com.jogamp.jogl-macosx-universal: (&amp;#38; (osgi.os=macosx) (osgi.arch=x86_64))&lt;/li&gt;
&lt;li&gt;com.jogamp.jogl-windows-amd64: (&amp;#38; (osgi.os=win32) (osgi.arch=x86_64))&lt;/li&gt;
&lt;li&gt;com.jogamp.jogl-windows-i586: (&amp;#38; (osgi.os=win32) (osgi.arch=x86))&lt;/li&gt;
&lt;/p&gt;
&lt;p&gt;And there is a complete table of the names of the native library files on the JogAmp wiki for reference &lt;a href="http://jogamp.org/wiki/index.php/Downloading_and_installing_JOGL#Unzipping_the_files"&gt;here&lt;/a&gt;. When you?ve created all five fragments, your workspace will look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-11-5-all-fragments-in-workspace.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-11-5-all-fragments-in-workspace.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Note for JDK 7 users on Mac OS X! Due to an incompatibility between JDK 6 and JDK 7 documented &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?format=multiple&amp;#38;id=276564"&gt;here&lt;/a&gt; and &lt;a href="http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-April/009725.html"&gt;here&lt;/a&gt;, you need to either rename your .jnilib files to .dylib (if you only need to run under Java 7), or create copies of the .jnilib files as .dylib files (if you want to run under both Java 6 and Java 7).&lt;/p&gt;
&lt;p&gt;You can see there?s a &amp;#8220;Platform filter does not match the current environment&amp;#8221; warning at the bottom for each of the platforms other than the one Eclipse is running on now. You could ignore those, but if you&amp;#8217;re as compulsive as I am, that&amp;#8217;s just not an option. So right-click the first fragment project in the Package Explorer on the left, click Properties, then expand &amp;#8220;Plug-in Development&amp;#8221; on the left and select &amp;#8220;Plug-in Manifest Compiler&amp;#8221;. Check &amp;#8220;Enable project specific settings&amp;#8221;, then change &amp;#8220;General &amp;#62; Incompatible environment&amp;#8221; to &amp;#8220;Ignore&amp;#8221;. The properties dialog should look like this when you&amp;#8217;re done.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-11-7-turn-off-platform-warning.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-11-7-turn-off-platform-warning.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click &amp;#8220;OK&amp;#8221;, then click &amp;#8220;Yes&amp;#8221; when it asks you if it can rebuild the project. Do this for all five fragment projects, and your warnings list will be gloriously empty.&lt;/p&gt;
&lt;p&gt;With these five fragment projects included, our app will be able to run with no modification on five different platforms. When we run the app, the Eclipse RCP framework will load the com.jogamp.jogl plugin first, then it will load the correct fragment for the platform the app is running on, without you having to write any custom code or wrapper scripts to try to change the Java library path.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Create one?s principal project&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Now that JOGL is ready for use, we can create the main project. Select ?File &amp;#62; New &amp;#62; Project?? to bring up the ?New Project? wizard. Open ?Plug-in Development?, select ?Plug-in Project?, and click ?Next?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-12-plugin-project.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-12-plugin-project.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enter your project?s name. Mine is ?name.wadewalker.tutorial?. Then click ?Next?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-13-project-name.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-13-project-name.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then set your project version number (mine is ?1.0.0?), your provider (mine is ?Wade Walker?), click ?Yes? beside ?Would you like to create a rich client application??, and click ?Next?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-14-project-content.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-14-project-content.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Select the ?Hello RCP? template under ?Available Templates?. This will make a minimal RCP app that we can stuff our own JOGL code into. Then click ?Next? (not ?Finish?).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-15-rcp-template.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-15-rcp-template.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Fill in your window title (mine?s ?Tutorial?), and check the ?Add branding? box (this lets you customize your splash screen later). Then click ?Finish? to create the project.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-16-branding.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-16-branding.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Your project overview should look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-17-plugin-project-overview1.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-17-plugin-project-overview1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now click the ?Dependencies? tab at the bottom of the main window. Click ?Add?? beside ?Required Plug-ins?, and type ?com.jo? in the ?Select a Plug-in? box. Select ?com.jogamp.jogl (2.0.0)? in the list of matching items, then click ?OK?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-18-select-dependency.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-18-select-dependency.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Your dependencies should look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-19-plugin-project-dependencies1.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-19-plugin-project-dependencies1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At this point, if you right-click this project in the list, then select ?Run As &amp;#62; Eclipse Application?, you?ll see the most minimal app you can imagine. OK, I guess it could technically be more minimal, but this is pretty bare. But at least it runs! The empty frame inside our window is where the editors go in an RCP app. We?ll get rid of that in a moment, since we don?t want an editor yet.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-20-empty-window.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-20-empty-window.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Add a ?view? to one?s principal application&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Eclipse calls the kind of window we?re creating for JOGL a ?view?. To create it, click the ?Extensions? tab, then click the ?Add?? button, type ?org.eclipse.ui.v? in the ?Extension Point filter? box, select ?org.eclipse.ui.views?, and click ?Finish?.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-21-add-views-extension.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-21-add-views-extension.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Right-click ?org.eclipse.ui.views? under ?All Extensions? and select ?New &amp;#62; view?. Then under ?Extension Element Details?, fill in the ID (?name.wadewalker.tutorial.joglview?), the name (?JOGLView?), and the class (?name.wadewalker.tutorial.JOGLView?).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-22-view-name1.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-22-view-name1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click the ?class? hyperlink under ?Extension Element Details?, then click ?Finish? to create the Java file that implements the JOGL view.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-23-create-view-class.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-23-create-view-class.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now we have to tell our program to open this view at startup so we can see it. Open the ?Perspective.java? file by double-clicking it in the package explorer:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-24-open-perspective.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-24-open-perspective.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And change the contents of ?Perspective.java? in the text editor to this:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
package name.wadewalker.tutorial;

import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;

public class Perspective implements IPerspectiveFactory {

	public void createInitialLayout(IPageLayout layout) {
		// editor area invisible to avoid empty editor frame below our view  
		layout.setEditorAreaVisible( false );
		layout.addView( &amp;#34;name.wadewalker.tutorial.joglview&amp;#34;, IPageLayout.TOP,
						IPageLayout.RATIO_MAX, IPageLayout.ID_EDITOR_AREA);
		}
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Now if you right-click your project in the list, then select ?Run As &amp;#62; Eclipse Application?, you?ll see that our app has an empty JOGL view now. Still bare, but getting closer! The empty editor frame?s gone too, since we turned it off in the code above.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-25-empty-view.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-25-empty-view.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now we put in some demo JOGL code. This snippet was originally used to demonstrate the old JOGL 1.1.1 (pre-JogAmp) in SWT (the windowing toolkit that Eclipse uses). Sven G&amp;#246;thel at JogAmp adapted it for JOGL 2.0, then I adapted &lt;i&gt;that&lt;/i&gt; to make it an Eclipse ViewPart. Double-click the ?JOGLView.java? file on the left, then replace its contents with this:&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
/*******************************************************************************
 * Copyright (c) 2000, 2005, 2010 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *     Sven Gothel     - conversion to JOGL 2.0 (original at http://github.com/sgothel/jogl-demos/blob/master/src/demos/swt/Snippet209.java)
 *     Wade Walker     - conversion to an Eclipse ViewPart
 *     
 *******************************************************************************/

package name.wadewalker.tutorial;

/*
 * SWT OpenGL snippet: use JOGL to draw to an SWT GLCanvas
 *
 * For a list of all SWT example snippets see
 * http://www.eclipse.org/swt/snippets/
 * 
 * @since 3.2
 */
import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GL2ES1;
import javax.media.opengl.GL2GL3;
import javax.media.opengl.GLContext;
import javax.media.opengl.GLDrawableFactory;
import javax.media.opengl.GLProfile;
import javax.media.opengl.fixedfunc.GLMatrixFunc;
import javax.media.opengl.glu.GLU;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.opengl.GLCanvas;
import org.eclipse.swt.opengl.GLData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

public class JOGLView extends ViewPart {

    /** Holds the OpenGL canvas. */
    private Composite composite;

    /** Widget that displays OpenGL content. */
    private GLCanvas glcanvas;

    /** Used to get OpenGL object that we need to access OpenGL functions. */
    private GLContext glcontext;

    /** Master rotation angle of the torus, in degrees. */
    private int rot = 0;

    public JOGLView() {
    }

    @Override
    public void createPartControl( Composite compositeParent ) {
        GLProfile glprofile = GLProfile.get(GLProfile.GL2);

        composite = new Composite( compositeParent, SWT.NONE );
        composite.setLayout( new FillLayout() );

        GLData gldata = new GLData();
        gldata.doubleBuffer = true;
        glcanvas = new GLCanvas( composite, SWT.NO_BACKGROUND, gldata );
        glcanvas.setCurrent();
        glcontext = GLDrawableFactory.getFactory( glprofile ).createExternalGLContext();

        glcanvas.addListener(SWT.Resize, new Listener() {
            public void handleEvent(Event event) {
                Rectangle bounds = glcanvas.getBounds();
                float fAspect = (float) bounds.width / (float) bounds.height;
                glcanvas.setCurrent();
                glcontext.makeCurrent();
                GL2 gl = glcontext.getGL().getGL2();
                gl.glViewport(0, 0, bounds.width, bounds.height);
                gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
                gl.glLoadIdentity();
                GLU glu = new GLU();
                glu.gluPerspective(45.0f, fAspect, 0.5f, 400.0f);
                gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
                gl.glLoadIdentity();
                glcontext.release();
                }
        });

        glcontext.makeCurrent();
        GL2 gl = glcontext.getGL().getGL2();
        gl.setSwapInterval(1);
        gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
        gl.glColor3f(1.0f, 0.0f, 0.0f);
        gl.glHint(GL2ES1.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
        gl.glClearDepth(1.0);
        gl.glLineWidth(2);
        gl.glEnable(GL.GL_DEPTH_TEST);
        glcontext.release();

        (new Thread() {
            public void run() {
                while( (glcanvas != null) &amp;#38;&amp;#38; !glcanvas.isDisposed() ) {
                    render();
                    try {
                        // don't make loop too tight, or not enough time
                        // to process window messages properly
                        sleep( 1 );
                    } catch( InterruptedException interruptedexception ) {
                        // we just quit on interrupt, so nothing required here
                    }
                }
            }
        }).start();
    }

    protected void render() {
        PlatformUI.getWorkbench().getDisplay().syncExec( new Runnable() {
            public void run() {
                if( (glcanvas != null) &amp;#38;&amp;#38; !glcanvas.isDisposed()) {
                    glcanvas.setCurrent();
                    glcontext.makeCurrent();
                    GL2 gl = glcontext.getGL().getGL2();
                    gl.glClear(GL.GL_COLOR_BUFFER_BIT &amp;#124; GL.GL_DEPTH_BUFFER_BIT);
                    gl.glClearColor(.3f, .5f, .8f, 1.0f);
                    gl.glLoadIdentity();
                    gl.glTranslatef(0.0f, 0.0f, -10.0f);
                    gl.glRotatef(0.15f * rot, 2.0f * rot, 10.0f * rot, 1.0f);
                    gl.glRotatef(0.3f * rot, 3.0f * rot, 1.0f * rot, 1.0f);
                    rot++;
                    gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL2GL3.GL_LINE);
                    gl.glColor3f(0.9f, 0.9f, 0.9f);
                    drawTorus(gl, 1, 1.9f + ((float) Math.sin((0.004f * rot))), 15, 15);
                    glcanvas.swapBuffers();
                    glcontext.release();
                }
            }
        });
    }

    protected void drawTorus(GL2 gl, float r, float R, int nsides, int rings) {
        float ringDelta = 2.0f * (float) Math.PI / rings;
        float sideDelta = 2.0f * (float) Math.PI / nsides;
        float theta = 0.0f, cosTheta = 1.0f, sinTheta = 0.0f;
        for (int i = rings - 1; i &amp;#62;= 0; i--) {
            float theta1 = theta + ringDelta;
            float cosTheta1 = (float) Math.cos(theta1);
            float sinTheta1 = (float) Math.sin(theta1);
            gl.glBegin(GL2.GL_QUAD_STRIP);
            float phi = 0.0f;
            for (int j = nsides; j &amp;#62;= 0; j--) {
                phi += sideDelta;
                float cosPhi = (float) Math.cos(phi);
                float sinPhi = (float) Math.sin(phi);
                float dist = R + r * cosPhi;
                gl.glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi);
                gl.glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi);
                gl.glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi);
                gl.glVertex3f(cosTheta * dist, -sinTheta * dist, r * sinPhi);
            }
            gl.glEnd();
            theta = theta1;
            cosTheta = cosTheta1;
            sinTheta = sinTheta1;
        }
    }

    @Override
    public void setFocus() {
    }

    @Override
    public void dispose() {
        glcanvas.dispose();
        super.dispose();
    }
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;And one last change, this time to Activator.java. It?s only needed on Linux, but it doesn?t hurt other platforms. Stick this code before the constructor.&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush: java;"&gt;
    // NOTE for Linux: Needed to set up threading properly for JOGL. This
    // has to be done before any X11 calls, so it goes here in the class
    // Eclipse loads first. If you don't put this early enough, you may
    // get SIGSEGV in libpthread.so (or other sorts of multithreading errors)
    // when you try to run the program.
    // NOTE for Mac OS X: If you don't set -Djava.awt.headless=true in the
    // program's VM arguments, this call may freeze the program. This is because
    // it tries to load the AWT library, which can't coexist with SWT on Mac OS X.
    static {
        GLProfile.initSingleton( false );
    }
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Then run the main project again, and finally our JOGL view shows an animated wireframe doughnut ? what we super-geniuses call a ?torus?. Success!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-26-jogl-view.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-26-jogl-view.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here?s what it looks like in Linux:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-27-jogl-view-linux.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-27-jogl-view-linux.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And last but not least et cetera, here&amp;#8217;s the Mac OS X version:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wadeawalker.files.wordpress.com/2012/04/t1-28-jogl-view-mac.png"&gt;&lt;img src="http://wadeawalker.files.wordpress.com/2012/04/t1-28-jogl-view-mac.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now that we?ve got this skeleton up and walking, we?ll start putting some meat on it in the next tutorial.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;A quick but important note to those running Mac OS X&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;On Mac OS X, this application may freeze on startup or log an error saying &amp;#8220;Can&amp;#8217;t start the AWT because Java was started on the first thread&amp;#8221;. If it does, simply right-click the project and select ?Run As &amp;#62; Run Configurations&amp;#8230;?. Make sure ?Eclipse Application &amp;#62; name.wadewalker.tutorial.product? is selected in the left pane. Then click the ?Arguments? tab on the right and add ? -Djava.awt.headless=true? to the end of the list of arguments in the ?VM Arguments? box. This insures that AWT will not be loaded, which can cause problems with SWT applications on Mac OS X.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Resources upon which you may draw for more information&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;JOGL: Sven G&amp;#246;thel and the guys at &lt;a href="http://jogamp.org"&gt;http://jogamp.org&lt;/a&gt; have the source code for JOGL, zipped builds, and discussion forums. This is the main home for JOGL now, even though it still shows up a few other places on the web. Huge props to these guys for taking on such a large project that?s helpful to so many people around the world!&lt;/p&gt;
&lt;p&gt;Eclipse RCP programming: Lars Vogel has a great article about creating Eclipse RCP programs at &lt;a href="http://www.vogella.de/articles/EclipseRCP/article.html"&gt;http://www.vogella.de/articles/EclipseRCP/article.html&lt;/a&gt;. The other articles on his site are also awesome.&lt;/p&gt;
&lt;p&gt;SWT: The snippets at &lt;a href="http://www.eclipse.org/swt/snippets/"&gt;http://www.eclipse.org/swt/snippets/&lt;/a&gt; are very helpful when putting other controls into RCP apps.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;A concise history of the changes which we have made to this document&lt;/b&gt;&lt;/p&gt;
&lt;li&gt;10/09/2010: Wrote this post.&lt;/li&gt;
&lt;li&gt;10/17/2010: Punched up the language, added zip files.&lt;/li&gt;
&lt;li&gt;10/23/2010: Added fragments for all platforms; split the zip into two parts; fixed the location of GLProfile.initSingleton() after testing on Linux.&lt;/li&gt;
&lt;li&gt;10/26/2010: Fixed the links to full-sized images.&lt;/li&gt;
&lt;li&gt;3/23/2011: Fixed quote marks in code snipped from Perspective.java.&lt;/li&gt;
&lt;li&gt;4/10/2011: Updated code to work with the latest JOGL across all three major platforms. Updated zip file to JOGL b365. Put in new Linux and Mac OS X screenshots.&lt;/li&gt;
&lt;li&gt;10/14/2011: Fixed typo in Mac OS X platform filter.&lt;/li&gt;
&lt;li&gt;04/20/2012: Updated text for JOGL b736, Eclipse 3.7.2, and Java 1.7.0_03.&lt;/li&gt;
&lt;li&gt;04/21/2012: Uploaded new images.&lt;/li&gt;
&lt;li&gt;05/1/2012: Updated with .dylib vs. .jnilib information after I got JDK 7 working on Mac OS X.&lt;/li&gt;</content:encoded>
      <pubDate>Sat, 09 Oct 2010 13:57:21 GMT</pubDate>
      <guid isPermaLink="false">http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/</guid>
      <dc:creator>Wade Walker</dc:creator>
      <dc:date>2010-10-09T13:57:21Z</dc:date>
    </item>
    <item>
      <title>Version 2.1.0</title>
      <link>http://www.dyn4j.org/archives/152</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dyn4j.org/archives/152/feed</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>The next release of dyn4j is ready! The new version, 2.1.0, features a new PulleyJoint and multi-threading support. When running you may be asked to accept a certificate from me (I just self signed the JARs). The certificates will expire six months from today&amp;#8230; JNLP Applet Standalone JARs License All the releases require Java 1.6+. [...]</description>
      <content:encoded>&lt;p&gt;The next release of dyn4j is ready!  The new version, 2.1.0, features a new PulleyJoint and multi-threading support.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;When running you may be asked to accept a certificate from me (I just self signed the JARs).  The certificates will expire six months from today&amp;#8230;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div id="attachment_51" class="wp-caption alignright" style="width: 310px"&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.1.0/screenshot.png"&gt;&lt;img class="size-medium wp-image-51" title="TestBed Screenshot" src="http://www.dyn4j.org/files/testbed/release/v2.1.0/screenshot.png" alt="" width="300" height="234" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;The &amp;#34;Parallel&amp;#34; test from the TestBed&lt;/p&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.1.0/testbed.jnlp" target="_self"&gt;JNLP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.1.0/testbed.html" target="_blank"&gt;Applet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.1.0/testbed.zip" target="_self"&gt;Standalone JARs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dyn4j.org/files/testbed/release/v2.1.0/license.txt" target="_blank"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All the releases require Java 1.6+.  Be sure to type the &amp;#8220;c&amp;#8221; key to get the TestBed Control Panel so you can play with the simulator.&lt;/p&gt;
&lt;p&gt;Use the Controls tab to view all the key board and mouse options.  Use the Tests tab to run a test of your choosing.  Use the Draw Options tab to set what is drawn to the screen.  And finally, use the Simulation Settings tab to play with all the different settings allowed by the engine.&lt;/p&gt;</content:encoded>
      <category>Uncategorized</category>
      <pubDate>Fri, 24 Sep 2010 01:52:01 GMT</pubDate>
      <guid isPermaLink="false">http://www.dyn4j.org/?p=152</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2010-09-24T01:52:01Z</dc:date>
    </item>
    <item>
      <title>Creating a JOGL Eclipse Project</title>
      <link>http://ramisantina.com/blog/?p=8</link>
      <wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://ramisantina.com/blog/?feed=rss2&amp;p=8</wfw:commentRss>
      <slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments>
      <description>Below is a how to create an eclipse project for JOGL project, www.jogamp.org. Why isnt it on github&amp;#8230;.well since eclipse takes full paths of the src directories, you would need to practicaly re-do it after fetching the project. 1- After downloading the source code, create an eclipse workspace in the jogl directory ..or anywhere else.2- [...]</description>
      <content:encoded>&lt;p&gt;Below is a how to create an eclipse project for JOGL project, www.jogamp.org.&lt;/p&gt;
&lt;p&gt;Why isnt it on github&amp;#8230;.well since eclipse takes full paths of the src  directories, you would need to practicaly re-do it after fetching the  project.&lt;/p&gt;
&lt;p&gt;1- After downloading the source code, create an eclipse workspace in  the jogl directory ..or anywhere else.&lt;br /&gt;2- Create a new Java project  (jogl-eclipse) with jdk_6u21&amp;#8230;&lt;br /&gt;3- Now delete the src forder from package explorer which will remove it from the disk as well.&lt;br /&gt;4- Go to Project &amp;#8211;&amp;#62; Properties&lt;/p&gt;
&lt;p&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;a- In the Java Build Path menu:&lt;/p&gt;
&lt;p&gt;Under Source Tab: Link the following sources &amp;#8220;&amp;#8230;&amp;#8221; is the path to your jogl directory.&lt;/p&gt;
&lt;p&gt;&amp;#8230;/src/jogl/classes&amp;#160; &amp;#8211;&amp;#62; jogl&lt;br /&gt;../build/jogl/gensrc/classes &amp;#8211;&amp;#62; jogl gensrc&lt;br /&gt;&amp;#8230;/src/nativewindow/classes &amp;#8211;&amp;#62; nativewindow&lt;br /&gt;&amp;#8230;/build/nativewindow/gensrc/classes &amp;#8211;&amp;#62; nativewindow gensrc&lt;br /&gt;&amp;#8230;/src/newt/classes &amp;#8211;&amp;#62; newt&lt;br /&gt;&amp;#8230;/build/newt/gensrc &amp;#8211;&amp;#62; newt gensrc&lt;br /&gt;&amp;#8230;/jogl/src/junit &amp;#8211;&amp;#62; junit&lt;/p&gt;
&lt;p&gt;finally add, &lt;br /&gt;GLUEGEN_HOME/src/java/ &amp;#8211;&amp;#62;gluegen common &lt;br /&gt;with the following as excluded paths &amp;#8220;com/sun/&amp;#8221; and &amp;#8220;net/&amp;#8221;&lt;/p&gt;
&lt;p&gt;In the Libraries tab: add the following as external jars&lt;/p&gt;
&lt;p&gt;ant-junit.jar (apache-ant/lib)&lt;br /&gt;gluegen-rt.jar (&amp;#8230;/build/jar)&lt;br /&gt;junit.jar (GLUGEN_PATH/make/lib)&lt;/p&gt;
&lt;p&gt;b- In the Builders menu:&lt;br /&gt;Add a new Ant Builder: (optional to build from eclipse) with:&lt;/p&gt;
&lt;p&gt;Buildfile: &amp;#8230;/make/build.xml&lt;br /&gt;Base Directory: &amp;#8230;/make&lt;/p&gt;
&lt;p&gt;You can then specify the targets if you want. For me I disabled the ant builder and use the command line &lt;img src='http://ramisantina.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; . You can also add the egit plugin&amp;#8230;good for visualizing changes  (reporting) but kinda of slow. You will get some errors in the gensrc code from extra semicolon&amp;#8230; should be fixed in the emitter&lt;/p&gt;
&lt;p&gt;And your done!&lt;/p&gt;</content:encoded>
      <category>development</category>
      <category>eclipse</category>
      <category>jogl</category>
      <category>project</category>
      <pubDate>Sun, 22 Aug 2010 17:46:00 GMT</pubDate>
      <guid isPermaLink="false">http://88.198.19.198/blog/?p=8</guid>
      <dc:creator>Rami</dc:creator>
      <dc:date>2010-08-22T17:46:00Z</dc:date>
    </item>
  </channel>
</rss>


