<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JeGX&#039;s Infamous Lab &#187; OpenGL</title>
	<atom:link href="http://www.ozone3d.net/blogs/lab/category/tech/opengl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ozone3d.net/blogs/lab</link>
	<description>Geeky life of a 3D programmer...</description>
	<lastBuildDate>Thu, 05 Aug 2010 20:15:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Visualisez les Molécules en OpenGL + AO avec QuteMol</title>
		<link>http://www.ozone3d.net/blogs/lab/20100805/visualisez-les-molecules-en-opengl-ao-avec-qutemol/</link>
		<comments>http://www.ozone3d.net/blogs/lab/20100805/visualisez-les-molecules-en-opengl-ao-avec-qutemol/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 20:03:26 +0000</pubDate>
		<dc:creator>JeGX</dc:creator>
				<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ambient occlusion]]></category>
		<category><![CDATA[molecule]]></category>
		<category><![CDATA[qutmol]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://www.ozone3d.net/blogs/lab/?p=342</guid>
		<description><![CDATA[QutMol est un soft pour visualiser les molécules (format PDB) et utilise OpenGL pour le rendu 3D. Bon QutMol (drôle de nom au passage) n&#8217;a pas été updaté depuis presque 3 ans mais dans la liste des features il y &#8230; <a href="http://www.ozone3d.net/blogs/lab/20100805/visualisez-les-molecules-en-opengl-ao-avec-qutemol/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><center></p>
<p><img src="http://www.ozone3d.net/public/jegx/201008/qutmol_01.jpg" alt="QutMol - high quality molecular visualization system"/></p>
<p></center><br />
<span id="more-342"></span></p>
<p><a href="http://qutemol.sourceforge.net/">QutMol</a> est un soft pour visualiser les molécules (format PDB) et utilise <b>OpenGL</b> pour le rendu 3D. Bon QutMol (drôle de nom au passage)  n&#8217;a pas été updaté depuis presque 3 ans mais dans la liste des features il y a: <i>Real Time Ambient Occlusion</i>. C&#8217;est bon je lance le download&#8230;</p>
<p>Une grosse molécule avec de l&#8217;AO uniquement:<br />
<center></p>
<p><img src="http://www.ozone3d.net/public/jegx/201008/qutmol_02.jpg" alt="QutMol - real time ambient occlusion"/></p>
<p></center></p>
<p>Et là une autre molécule avec toujours de l&#8217;AO mais aussi une détection de silhouette et même un petit halo (noir) pour la rendre plus classe la publication des molécules sur les sites web par exemple:<br />
<center></p>
<p><img src="http://www.ozone3d.net/public/jegx/201008/qutmol_03.jpg" alt="QutMol - real time ambient occlusion - silhouette detection"/></p>
<p></center></p>
<p>Tiens, je vais peut être en faire une news sur Geeks3D un des ces quatres <img src='http://www.ozone3d.net/blogs/lab/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ozone3d.net/blogs/lab/20100805/visualisez-les-molecules-en-opengl-ao-avec-qutemol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Demos (Videos!) Particules OpenGL JOGL</title>
		<link>http://www.ozone3d.net/blogs/lab/20100805/demos-videos-particules-opengl-jogl/</link>
		<comments>http://www.ozone3d.net/blogs/lab/20100805/demos-videos-particules-opengl-jogl/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 19:35:57 +0000</pubDate>
		<dc:creator>JeGX</dc:creator>
				<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[jogl]]></category>
		<category><![CDATA[particle system]]></category>
		<category><![CDATA[stateless]]></category>

		<guid isPermaLink="false">http://www.ozone3d.net/blogs/lab/?p=339</guid>
		<description><![CDATA[Basic stateless &#8220;Particle System&#8221; calculated entirely as vertex shader. JOGL est le wrapper OpenGL pour le language Java. Voilà quelques videos sympas qui montrent des particles JOGL en action. &#8220;Intermediate Particle System&#8221; using a more complex movement algorithm as in &#8230; <a href="http://www.ozone3d.net/blogs/lab/20100805/demos-videos-particules-opengl-jogl/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><center><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/CTf6e3T93o4&#038;fs=1" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed src="http://www.youtube.com/v/CTf6e3T93o4&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br /><i>Basic stateless &#8220;Particle System&#8221; calculated entirely as vertex shader.</i><br />
</center><br />
<span id="more-339"></span><br />
<a href="http://jogamp.org/jogl/www/">JOGL</a> est le wrapper <b>OpenGL</b> pour le language Java. Voilà quelques videos sympas qui montrent des particles JOGL en action.</p>
<p><center><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/E_pPPjT-Ero&#038;fs=1" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed src="http://www.youtube.com/v/E_pPPjT-Ero&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br /><i>&#8220;Intermediate Particle System&#8221; using a more complex movement algorithm as in the &#8220;Basic Particle System&#8221;</i><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ozone3d.net/blogs/lab/20100805/demos-videos-particules-opengl-jogl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geometry Instancing en OpenGL: le Presque Retour!</title>
		<link>http://www.ozone3d.net/blogs/lab/20100625/geometry-instancing-opengl-gtx480-hd5870/</link>
		<comments>http://www.ozone3d.net/blogs/lab/20100625/geometry-instancing-opengl-gtx480-hd5870/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 12:20:55 +0000</pubDate>
		<dc:creator>JeGX</dc:creator>
				<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[geometry instancing]]></category>

		<guid isPermaLink="false">http://www.ozone3d.net/blogs/lab/?p=318</guid>
		<description><![CDATA[80,000,000 de polygones&#8230; c&#8217;est cool l&#8217;instancing! Vue les feedbacks réguliers (genre: le download n&#8217;est plus dispo!!!) que je reçois par rapport au petit article que j&#8217;ai pondu il y a 2 ans sur le geometry instancing en OpenGL, j&#8217;ai decidé &#8230; <a href="http://www.ozone3d.net/blogs/lab/20100625/geometry-instancing-opengl-gtx480-hd5870/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><center></p>
<p><img src="http://www.ozone3d.net/public/jegx/201006/opengl_geometry_instancing_20100625.jpg" alt="OpenGL geometry instancing"/><br /><i>80,000,000 de polygones&#8230; c&#8217;est cool l&#8217;instancing!</i></p>
<p></center><br />
<span id="more-318"></span></p>
<p>Vue les feedbacks réguliers (genre: le download n&#8217;est plus dispo!!!) que je reçois par rapport au <a href="http://www.ozone3d.net/blogs/lab/20080316/opengl-geometry-instancing/">petit article</a> que j&#8217;ai pondu il y a 2 ans sur le <b>geometry instancing en OpenGL</b>, j&#8217;ai decidé de remettre le pack de demos à jour. </p>
<p>Et j&#8217;ai ajouté un nouveau mode basé sur les <b>uniform buffers</b>.</p>
<p>Les demos fonctionnent maintenant correctement sur ma <b>GTX 480</b>. Et bien sûr, je viens juste de tester sur une <b>HD 5870</b> + Cat 10.6 et ça mer&#8230; euh crashe!</p>
<p>Et vue que j&#8217;ai pas envie de remplacer la GTX 480 par la HD 5870 sur ma machine de dev, je vais devoir debugger à distance&#8230;</p>
<p>Dès que c&#8217;est ok sur la radeon, je publie l&#8217;article complet sur <a href="http://www.geeks3d.com">Geeks3D.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ozone3d.net/blogs/lab/20100625/geometry-instancing-opengl-gtx480-hd5870/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: Matrice de Projection Perspective en OpenGL</title>
		<link>http://www.ozone3d.net/blogs/lab/20090728/howto-matrice-de-projection-perspective-en-opengl/</link>
		<comments>http://www.ozone3d.net/blogs/lab/20090728/howto-matrice-de-projection-perspective-en-opengl/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 08:48:52 +0000</pubDate>
		<dc:creator>JeGX</dc:creator>
				<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[direct3d]]></category>
		<category><![CDATA[larrabee]]></category>
		<category><![CDATA[matrice]]></category>
		<category><![CDATA[perspective]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[projection]]></category>

		<guid isPermaLink="false">http://www.ozone3d.net/blogs/lab/?p=215</guid>
		<description><![CDATA[Je viens de tomber sur ce post de Xavier Gouchet qui avait besoin d&#8217;une routine pour initialiser la matrice de projection de la caméra en OpenGL. Vu qu&#8217;il ne pouvait pas utiliser les fonctions de la glu/glut car non supportées &#8230; <a href="http://www.ozone3d.net/blogs/lab/20090728/howto-matrice-de-projection-perspective-en-opengl/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><center></p>
<p><img src="http://www.ozone3d.net/blogs/lab/public/common/maths.jpg" alt="Maths..."/></p>
<p></center><br />
<span id="more-215"></span><br />
Je viens de tomber sur <a href="http://www.xgouchet.fr/blog/index.php/post/2009/07/27/Definir-le-zoom-du-Camera-sous-OpenGL-ES">ce post</a> de Xavier Gouchet qui avait besoin d&#8217;une routine pour initialiser la matrice de projection de la caméra en OpenGL. Vu qu&#8217;il ne pouvait pas utiliser les fonctions de la glu/glut car non supportées sous Android, il a du trouver une routine avec juste deux fonctions de base d&#8217;OpenGL: glMatrixMode et glFrustum. C&#8217;est bien! Mais on peut mieux faire: rendre le calcul de la matrice totalement indépendant d&#8217;OpenGL. En gros, recoder la fonction glFrustum. </p>
<p><b>Gros intéret de la méthode</b>: la routine peut être utilisée aussi bien avec <b>Direct3D</b> qu&#8217;avec avec le futur <b>Larrabee</b>&#8230;</p>
<p>Okay mes amis, voici le code extrait de mes routines 3D (et légèrement modifié pour les besoins de ce post):</p>
<pre>
void BuildPerspProjMat(float *m, float fov, float aspect,
float znear, float zfar)
{
  float xymax = znear * tan(fov * PI_OVER_360);
  float ymin = -ymax;
  float xmin = -xmax;

  float width = xymax - xmin;
  float height = xymax - ymin;

  float depth = zfar - znear;
  float q = -(zfar + znear) / depth;
  float qn = -2 * (zfar * znear) / depth;

  float w = 2 * znear / width;
  w = w / aspect;
  float h = 2 * znear / height;

  m[0]  = w;
  m[1]  = 0;
  m[2]  = 0;
  m[3]  = 0;

  m[4]  = 0;
  m[5]  = h;
  m[6]  = 0;
  m[7]  = 0;

  m[8]  = 0;
  m[9]  = 0;
  m[10] = q;
  m[11] = -1;

  m[12] = 0;
  m[13] = 0;
  m[14] = qn;
  m[15] = 0;
}
</pre>
<p>et voici son utilisation:</p>
<pre>
float m[16] = {0};
float fov=60.0f; // en degrés
float aspect=1.3333f;
float znear=1.0f;
float zfar=1000.0f;
BuildPerspProjMat(m, fov, aspect, znear, zfar);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(m);

// et hop on repasse en modelview pour le reste des matrices
glMatrixMode(GL_MODELVIEW);
...
</pre>
<p>Pour finir et juste pour optimiser un peu, la fonction glLoadIdentity dans le code de Xavier n&#8217;est pas nécessaire car la fonction glFrustum remplace complétement la matrice&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ozone3d.net/blogs/lab/20090728/howto-matrice-de-projection-perspective-en-opengl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vertex Displacement Mapping in GLSL Now Available on Radeon!</title>
		<link>http://www.ozone3d.net/blogs/lab/20080930/vertex-displacement-mapping-in-glsl-now-available-on-radeon/</link>
		<comments>http://www.ozone3d.net/blogs/lab/20080930/vertex-displacement-mapping-in-glsl-now-available-on-radeon/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 16:29:54 +0000</pubDate>
		<dc:creator>JeGX</dc:creator>
				<category><![CDATA[GLSL]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[catalyst 8.10]]></category>
		<category><![CDATA[displacement mapping]]></category>
		<category><![CDATA[glsl]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[vertex texture fetch]]></category>

		<guid isPermaLink="false">http://www.ozone3d.net/blogs/lab/?p=125</guid>
		<description><![CDATA[As I said in this news, the release of Catalyst 8.10 BETA comes with a nice bugfix: vertex texture fetching is now operational on Radeon (at least on my Radeon HD 4850). From 2 or 3 months, Catalyst makes it &#8230; <a href="http://www.ozone3d.net/blogs/lab/20080930/vertex-displacement-mapping-in-glsl-now-available-on-radeon/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As I said in this <a href="http://www.geeks3d.com/?p=1525">news</a>, the release of <b>Catalyst 8.10 BETA</b> comes with a nice bugfix: <b>vertex texture fetching</b> is now operational on <b>Radeon</b> (at least on my Radeon HD 4850). From 2 or 3 months, Catalyst makes it possible to fetch texture from inside a vertex shader. You can see with <a href="http://www.ozone3d.net/gpu_caps_viewer/">GPU Caps Viewer</a> how many texture units are exposed in a vertex shader for your Radeon:<br />
<center>
<p><img src="http://www.ozone3d.net/blogs/lab/public/200809/gpu-caps-viewer-cat-8.10-opengl-caps.jpg" /></p>
<p></center><br />
But so far, vertex texture fetching in <b>GLSL</b> didn&#8217;t work due to a bug in the driver. But now this is an old story, since VTF works well. For more details about vertex displacement mapping, you can read this rather old (2 years!) tutorial: <a href="http://www.ozone3d.net/tutorials/vertex_displacement_mapping.php">Vertex Displacement Mapping using GLSL</a>.</p>
<p>This very cool news makes me want to create a new benchmark based on VTF! </p>
<p><center>
<p><img src="http://www.ozone3d.net/blogs/lab/public/200809/vertex-displacement-mapping-radeon-hd-4850.jpg" /></p>
<p></center></p>
<p>I&#8217;ve only tested the XP version of Catalyst 8.10. If someone has tested the Vista version, feel free to post a comment&#8230;</p>
<p>Next step for ATI driver team: enable geometry texture fetching: allows texture fetching inside a geometry shader&#8230;</p>
<p>See you soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ozone3d.net/blogs/lab/20080930/vertex-displacement-mapping-in-glsl-now-available-on-radeon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpenGL Geometry Instancing</title>
		<link>http://www.ozone3d.net/blogs/lab/20080316/opengl-geometry-instancing/</link>
		<comments>http://www.ozone3d.net/blogs/lab/20080316/opengl-geometry-instancing/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 14:40:13 +0000</pubDate>
		<dc:creator>JeGX</dc:creator>
				<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[geforce]]></category>
		<category><![CDATA[geometry instancing]]></category>
		<category><![CDATA[glDrawElementsInstancedEXT]]></category>
		<category><![CDATA[gl_InstanceID]]></category>
		<category><![CDATA[pseudo-instancing]]></category>
		<category><![CDATA[radeon]]></category>
		<category><![CDATA[TechDemo]]></category>

		<guid isPermaLink="false">http://www.ozone3d.net/blogs/lab/?p=87</guid>
		<description><![CDATA[This article has been updated with new demos and new GI technique. Read the complete article here: OpenGL Geometry Instancing: GeForce GTX 480 vs Radeon HD 5870. This demo uses instancing techniques (simple instancing, pseudo-instancing and geometry instancing(or GI)) to &#8230; <a href="http://www.ozone3d.net/blogs/lab/20080316/opengl-geometry-instancing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="jLanguage">
<ul>
<li><a href="?lan=English"><img alt="English" src="http://www.ozone3d.net/blogs/lab/wp-content/plugins/jLanguage/icons/en.png" /></a></li>
<li><a href="?lan=French"><img alt="French" src="http://www.ozone3d.net/blogs/lab/wp-content/plugins/jLanguage/icons/fr.png" /></a></li>
</ul>
</div>
<hr />
<b>This article has been updated with new demos and new GI technique. Read the complete article here: <a href="http://www.geeks3d.com/20100629/test-opengl-geometry-instancing-geforce-gtx-480-vs-radeon-hd-5870/">OpenGL Geometry Instancing: GeForce GTX 480 vs Radeon HD 5870</a>.</b></p>
<hr />
This demo uses instancing techniques (simple instancing, pseudo-instancing and geometry instancing(or GI)) to render a ring made of 10,000 small spheres. The demo is delivered in 5 versions:</p>
<ul>
<li>each sphere is made of 1,800 triangles (18 millions triangles for the whole ring)</li>
<li>each sphere is made of 800 triangles (8 millions triangles for the whole ring)</li>
<li>each sphere is made of 200 triangles (2 millions triangles for the whole ring)</li>
<li>each sphere is made of 72 triangles (720,000 triangles for the whole ring)</li>
<li>each sphere is made of 18 triangles (180,000 triangles for the whole ring)</li>
</ul>
<p>I added in the last moment a bonus: a 20,000 instances version, each instance made of 5,000 triangles. We get the monstruous count of 100 millions triangles (file Demo_Instancing_100MTriangles_20kInstances.exe).<br />
<center><br />
<img src="public/200803/demo_opengl_instancing_01_400x253.jpg" /><br />
<img src="public/200803/demo_opengl_instancing_02_400x253.jpg" /><br />
<img src="public/200803/demo_opengl_instancing_03_400x253.jpg" /><br />
</center></p>
<h3>DOWNLOAD</h3>
<ul>
<strong><a href="public/200803/Demo_Instancing_20080316.zip">OpenGL Instancing DemoPack &#8211; (2676k)</a></strong>
</ul>
<p>Several instancing techniques are used and you can select them with F1 to F6 keys.</p>
<ul>
<li>F1: simple instancing with camera frustum culling: there is one source for geometry (a mesh) and it&#8217;s rendered for each instance. The tranformation matrix calculation is done on the CPU as well as the camera frustum test. OpenGL rendering uses the glDrawElements() function.</li>
<li>F2: simple instancing without camera frustum culling: there is one source for geometry (a mesh) and it&#8217;s rendered for each instance. The tranformation matrix calculation is done on the CPU but there is no longer camera frustum test. OpenGL rendering uses the glDrawElements() function.</li>
<li>F3: slow pseudo-instancing: there is one source for geometry (a mesh) and it&#8217;s rendered for each instance. Now the tranformation matrix calculation is done on the GPU and per-instance data are passed via uniform variables. There is no camera frustum test.  OpenGL rendering uses the glDrawElements() function.</li>
<li>F4: pseudo-instancing: there is one source for geometry (a mesh) and it&#8217;s rendered for each instance. The tranformation matrix calculation is done on the GPU and per-instance data are passed via persistent vertex attributes (like texture coordinates or color). This technique has been shown by NVIDIA in the following whitepaper: <a href="http://download.nvidia.com/developer/SDK/Individual_Samples/DEMOS/OpenGL/src/glsl_pseudo_instancing/docs/glsl_pseudo_instancing.pdf">GLSL Pseudo-Instancing</a>. There is no camera frustum test. OpenGL rendering uses the glDrawElements() function.</li>
<li>F5: geometry instancing: it&#8217;s the real hardware instancing. There is one source for geometry (a mesh) and rendering is done by batchs of 400 instances per draw-call. The whole rendering of the ring requires 25 draw-calls instead of 10,000. The tranformation matrix calculation is done on the GPU and per-batch data is passed via uniform arrays. There is no camera frustum test. OpenGL rendering uses the glDrawElementsInstancedEXT() function. Currently, only NVIDIA GeForce 8 (and higher) support this function.</li>
<li>F6: geometry instancing with persistant vertex attributes: it&#8217;s the hardware instancing coupled with the transmission of parameters is done via the persistent vertex attributes. But the number of persistent vertex attributes is very limited. The best I did is to render 4 instances per draw-call. But oddly, I got the best results with 2 instances per draw-call. In that case, the rendering of whole ring requires 5000 draw-calls. The tranformation matrix calculation is done on the GPU and per-batch data is passed via uniform arrays. There is no camera frustum test. OpenGL rendering uses the glDrawElementsInstancedEXT() function. Currently, only NVIDIA GeForce 8 (and higher) support this function.</li>
</ul>
<p>Ok now, let&#8217;s see some results with a NVIDIA GeForce 8800 GTX and an ATI Radeon HD 3870. Both cards have been tested with an AMD 64 3800+.</p>
<h3>18 millions triangles &#8211; 1800 tri/instance</h3>
<p><b>NVIDIA GeForce 8800 GTX &#8211; Forceware 169.38 XP32</b></p>
<ul>
<li>F1: 223MTris/sec &#8211; 13FPS </li>
<li>F2: 223MTris/sec &#8211; 13FPS </li>
<li>F3: 223MTris/sec &#8211; 13FPS </li>
<li>F4: 223MTris/sec &#8211; 13FPS </li>
<li>F5: 223MTris/sec &#8211; 13FPS </li>
<li>F6: 171MTris/sec &#8211; 10FPS </li>
</ul>
<p><b>ATI Radeon HD 3870 &#8211; Catalyst 8.2 XP32</b></p>
<ul>
<li>F1: 429MTris/sec &#8211; 25FPS </li>
<li>F2: 463MTris/sec &#8211; 27FPS </li>
<li>F3: 446MTris/sec &#8211; 26FPS </li>
<li>F4: 274MTris/sec &#8211; 16FPS </li>
<li>F5: mode not available </li>
<li>F6: mode not available </li>
</ul>
<h3>8 millions de triangles &#8211; 800 tri/instance</h3>
<p><b>NVIDIA GeForce 8800 GTX &#8211; Forceware 169.38 XP32</b></p>
<ul>
<li>F1: 190MTri/sec &#8211; 25FPS</li>
<li>F2: 190MTri/sec &#8211; 25FPS</li>
<li>F3: 205MTri/sec &#8211; 27FPS</li>
<li>F4: 213MTri/sec &#8211; 28FPS</li>
<li>F5: 205MTri/sec &#8211; 27FPS</li>
<li>F6: 152MTri/sec &#8211; 20FPS</li>
</ul>
<p><b>ATI Radeon HD 3870 &#8211; Catalyst 8.2 XP32</b></p>
<ul>
<li>F1: 251MTris/sec &#8211; 33FPS </li>
<li>F2: 236MTris/sec &#8211; 31FPS </li>
<li>F3: 297MTris/sec &#8211; 39FPS </li>
<li>F4: 251MTris/sec &#8211; 33FPS </li>
<li>F5: mode not available </li>
<li>F6: mode not available </li>
</ul>
<h3>2 millions de triangles &#8211; 200 tri/instance</h3>
<p><b>NVIDIA GeForce 8800 GTX &#8211; Forceware 169.38 XP32</b></p>
<ul>
<li>F1: 47MTri/sec &#8211; 25FPS</li>
<li>F2: 47MTri/sec &#8211; 25FPS</li>
<li>F3: 57MTri/sec &#8211; 30FPS</li>
<li>F4: 131MTri/sec &#8211; 69FPS</li>
<li>F5: 167MTri/sec &#8211; 88FPS</li>
<li>F6: 148MTri/sec &#8211; 78FPS</li>
</ul>
<p><b>ATI Radeon HD 3870 &#8211; Catalyst 8.2 XP32</b></p>
<ul>
<li>F1: 47MTris/sec &#8211; 25FPS </li>
<li>F2: 59MTris/sec &#8211; 31FPS </li>
<li>F3: 74MTris/sec &#8211; 39FPS </li>
<li>F4: 112MTris/sec &#8211; 59FPS </li>
<li>F5: mode not available </li>
<li>F6: mode not available </li>
</ul>
<h3>720,000 triangles &#8211; 72 tri/instance</h3>
<p><b>NVIDIA GeForce 8800 GTX &#8211; Forceware 169.38 XP32</b></p>
<ul>
<li>F1: 17MTri/sec &#8211; 25FPS</li>
<li>F2: 17MTri/sec &#8211; 25FPS</li>
<li>F3: 20MTri/sec &#8211; 30FPS</li>
<li>F4: 47MTri/sec &#8211; 69FPS</li>
<li>F5: 60MTri/sec &#8211; 88FPS</li>
<li>F6: 53MTri/sec &#8211; 78FPS</li>
</ul>
<p><b>ATI Radeon HD 3870 &#8211; Catalyst 8.2 XP32</b></p>
<ul>
<li>F1: 17MTris/sec &#8211; 25FPS </li>
<li>F2: 21MTris/sec &#8211; 31FPS </li>
<li>F3: 26MTris/sec &#8211; 39FPS </li>
<li>F4: 40MTris/sec &#8211; 59FPS </li>
<li>F5: mode not available </li>
<li>F6: mode not available </li>
</ul>
<h3>180000 triangles &#8211; 18 tri/instance</h3>
<p><b>NVIDIA GeForce 8800 GTX &#8211; Forceware 169.38 XP32</b></p>
<ul>
<li>F1: 4MTri/sec &#8211; 25FPS</li>
<li>F2: 4MTri/sec &#8211; 25FPS</li>
<li>F3: 5MTri/sec &#8211; 30FPS</li>
<li>F4: 11MTri/sec &#8211; 69FPS</li>
<li>F5: 15MTri/sec &#8211; 89FPS</li>
<li>F6: 13MTri/sec &#8211; 79FPS</li>
</ul>
<p><b>ATI Radeon HD 3870 &#8211; Catalyst 8.2 XP32</b></p>
<ul>
<li>F1: 4MTris/sec &#8211; 25FPS </li>
<li>F2: 5MTris/sec &#8211; 31FPS </li>
<li>F3: 6MTris/sec &#8211; 39FPS </li>
<li>F4: 10MTris/sec &#8211; 59FPS </li>
<li>F5: mode not available </li>
<li>F6: mode not available </li>
</ul>
<p>Quick results analysis:</p>
<ul>
<li>we now understand why NVIDIA has called the technique using persistent vertex attributes &#8220;Pseudo-Instancing&#8221; (key F4). OpenGL glDrawElements() function is extremly fastand persistent vertex attributes require less overhead than uniforms to be passed to vertex shader. Both coupled together give this performance boost.</li>
<li>benefit of real hardware geometry instancing is mostly visible with few triangles per instance.</li>
<li>when there are many triangles per instance (1,800), the hardware implementation of glDrawElements() seems to be more efficient (twice!) on RV670 GPU than on G80.</li>
</ul>
<h3>Conclusion</h3>
<p>From the results, hardware geometry instancing isn&#8217;t the kill-feature I expected. I find that very weird since the différence between 10000 render-calls with glDrawElements and 25 render-calls with glDrawElementsInstancedEXT is not verx important. Seems the instancing management (gl_InstanceID variable in the vertex shader) is a GPU-cycle eater!What a pity ATI hasn&#8217;t implemented yet geometry instancing in the Catalyst drivers. I&#8217;d be very curious to test hardware GI with a RV670.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ozone3d.net/blogs/lab/20080316/opengl-geometry-instancing/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>ForceWare 163.75 et Occlusion Query</title>
		<link>http://www.ozone3d.net/blogs/lab/20080206/forceware-16375-et-occlusion-query/</link>
		<comments>http://www.ozone3d.net/blogs/lab/20080206/forceware-16375-et-occlusion-query/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 15:12:35 +0000</pubDate>
		<dc:creator>JeGX</dc:creator>
				<category><![CDATA[Drivers]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[driver]]></category>
		<category><![CDATA[forceware]]></category>

		<guid isPermaLink="false">http://www.ozone3d.net/blogs/lab/?p=75</guid>
		<description><![CDATA[Je viens de passer deux heures de debug pour rien à cause d&#8217;un bug dans les Forceware 163.75. Une de mes routines qui utilise les fonctions de l&#8217;extension GL_ARB_occlusion_query plantait dès que le nombre de demandes devenait un peu grand &#8230; <a href="http://www.ozone3d.net/blogs/lab/20080206/forceware-16375-et-occlusion-query/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Je viens de passer deux heures de debug pour rien à cause d&#8217;un bug dans les Forceware 163.75. Une de mes routines qui utilise les fonctions de l&#8217;extension GL_ARB_occlusion_query plantait dès que le nombre de demandes devenait un peu grand (genre plus de 10000 demandes). Je me disais qu&#8217;il devait surement s&#8217;agir d&#8217;un buffer trop plein quelque part ou bien trop de demandes en attente (le debugger plantait dans la lib opengl de NVIDIA). Alors j&#8217;ai un peu bricolé et je me suis aperçu que glGetError() permettait à mon code de fonctionner ce qui laisse penser à un problème de latence / parallélisme au niveau des instructions OpenGL dans le pilote forceware.</p>
<p>Puis soudainement, en voyant arriver sur mon lecteur RSS la disponibilité du nouveau pilote <a href="http://www.ozone3d.net/smf/index.php/topic,1208.0.html">ForceWare 169.38</a>, je me suis dis: allez je ferme mes cinquantes fenêtres (je ne sais pas pour vous mais chez moi chaque instance de Visual Studio 2005 met 3 plombes pour se fermer en comparaison de Visual C++ 6.0 qui se fermait quasi immédiatement)<br />
et hop j&#8217;installe ce nouveau driver. Yes! Mes routines d&#8217;occlusion query se sont remises à marcher parfaitement. Donc je me suis pris la tête pour rien sur un bug des ForceWare 163.75 ou mieux sur un bug qui est plus présent dans les ForceWare 169.38. Conclusion: mettez à jour vos drivers!</p>
<p><center><img src="/public/news/forceware_logo.jpg" /></center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ozone3d.net/blogs/lab/20080206/forceware-16375-et-occlusion-query/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Review &#8211; Lumina &#8211; GLSL studio</title>
		<link>http://www.ozone3d.net/blogs/lab/20080131/review-lumina-glsl-studio/</link>
		<comments>http://www.ozone3d.net/blogs/lab/20080131/review-lumina-glsl-studio/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 12:52:28 +0000</pubDate>
		<dc:creator>JeGX</dc:creator>
				<category><![CDATA[GLSL]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[demoniak3d]]></category>
		<category><![CDATA[fx composer]]></category>
		<category><![CDATA[glsl]]></category>
		<category><![CDATA[lumina]]></category>
		<category><![CDATA[rendermonkey]]></category>

		<guid isPermaLink="false">http://www.ozone3d.net/blogs/lab/?p=40</guid>
		<description><![CDATA[Je viens de m&#8217;amuser un peu avec Lumina. C&#8217;est un petit environnement de mise au point de shader GLSL. Le projet demarre et il y a encore pas mal de petites coquilles (essayez de charger plusieurs projets les uns à &#8230; <a href="http://www.ozone3d.net/blogs/lab/20080131/review-lumina-glsl-studio/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Je viens de m&#8217;amuser un peu avec <a href="http://lumina.sourceforge.net/Home.html">Lumina</a>. C&#8217;est un petit environnement de mise au point de shader GLSL. Le projet demarre et il y a encore pas mal de petites coquilles (essayez de charger plusieurs projets les uns à la suite des autres ou plus simplement chargez le projet de test deferred3.lum: l&#8217;interface graphique aime moyennement!) qui trainent mais le concept est bon. En regardant de plus prêt, cela ressemble fortement à une interface graphique posé sur un soft comme Demoniak3D. Il y a des scripts (écrits dans un language basé sur <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ECMA</a>)pour mettre en place les éléments de la scene 3d et les controler. Il y a aussi les scripts GLSL (vertex, pixel et geometry). Si on analyse un fichier de projet on découvre une structure similaire à une démo Demoniak3D: un script XML, des nodes &lt;script&gt;, &lt;shader&gt;, etc. </p>
<p>Maintenant que le tour du proprio est fait, voilà mon premier projet de test ultra simple: afficher un torus jaune qui tourne le tout utilisant un vertex et un pixel shader pour le rendu. J&#8217;ai pu coder ce projet rapidement avec une analyse rapide des fichiers de projets *.lum.</p>
<p><center><img src="public/200801/lumina_jegx_first_test" /></center></p>
<p>Le projet est téléchargeable ici: <a href="public/200801/lumina_jegx_test_01.zip">lumina_jegx_test_01.zip</a></p>
<p>Globalement c&#8217;est sympa mais l&#8217;interêt de l&#8217;interface graphique est discutable. Dans ce type de soft (Lumina ou Demoniak3D) soit l&#8217;interface graphique est de haut niveau et simple à utiliser soit vaut mieux s&#8217;en passer. Je vais quand même étudier plus en détail le fonctionnement de Lumina ne serait-ce que pour améliorer Demoniak3D et son successeur&#8230;</p>
<p>Dans le même esprit que lumina il y a aussi FX Composer (NVIDIA) et RenderMonkey (ATI).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ozone3d.net/blogs/lab/20080131/review-lumina-glsl-studio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Catalyst 7.9 and Radeon 2K Shadow Mapping Bug</title>
		<link>http://www.ozone3d.net/blogs/lab/20070912/catalyst-79-and-radeon-2k-shadow-mapping-bug/</link>
		<comments>http://www.ozone3d.net/blogs/lab/20070912/catalyst-79-and-radeon-2k-shadow-mapping-bug/#comments</comments>
		<pubDate>Wed, 12 Sep 2007 08:00:53 +0000</pubDate>
		<dc:creator>JeGX</dc:creator>
				<category><![CDATA[Drivers]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[ati]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[catalyst]]></category>
		<category><![CDATA[driver]]></category>
		<category><![CDATA[radeon]]></category>
		<category><![CDATA[shadow mapping]]></category>

		<guid isPermaLink="false">http://www.ozone3d.net/blogs/lab/?p=44</guid>
		<description><![CDATA[I found this bug while I was coding a new small soft shadows demo for GPU Caps Viewer. Soft shadows are built on shadow mapping and my OpenGL shadow mapping code works perfectly on all Geforce 6/7/8 and Radeon 1k &#8230; <a href="http://www.ozone3d.net/blogs/lab/20070912/catalyst-79-and-radeon-2k-shadow-mapping-bug/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I found this bug while I was coding a new small soft shadows demo for GPU Caps Viewer. Soft shadows are built on shadow mapping and my OpenGL shadow mapping code works perfectly on all Geforce 6/7/8 and Radeon 1k but not on Radeon 2K (2400/2600/2900). Why ? Because of the shadow mapping comparison function that had a serious bug! To be short, the comparison function was supposed to return a boolean value (if shadow returns 0, else returns 1) and before Catalyst 7.9, this function returned, for Radeon 2K, the depth buffer value (as if the comparison function was disabled). But this bug is now a memory since Catalyst 7.9 has fixed it.</p>
<p>I guess we can say thanks to Quake Wars, that has been released few days ago and that is an OpenGL game. For this game (that is really nice), ATI has fixed all major OpenGL bugs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ozone3d.net/blogs/lab/20070912/catalyst-79-and-radeon-2k-shadow-mapping-bug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New NVIDIA OpenGL Extensions Headers</title>
		<link>http://www.ozone3d.net/blogs/lab/20070224/new-nvidia-opengl-extensions-headers/</link>
		<comments>http://www.ozone3d.net/blogs/lab/20070224/new-nvidia-opengl-extensions-headers/#comments</comments>
		<pubDate>Sat, 24 Feb 2007 08:04:06 +0000</pubDate>
		<dc:creator>JeGX</dc:creator>
				<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[nvidia]]></category>

		<guid isPermaLink="false">http://www.ozone3d.net/blogs/lab/?p=55</guid>
		<description><![CDATA[The new OpenGL headers files contain new extensions stuff. You can download them from&#8230; just a second, I start GPU Caps Viewer and&#8230; okay I got it :thumbup: : from developer.nvidia.com/object/nvidia_opengl_specs.html. But there are a couple of weird things: 1 &#8230; <a href="http://www.ozone3d.net/blogs/lab/20070224/new-nvidia-opengl-extensions-headers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The new OpenGL headers files contain new extensions stuff. You can download them from&#8230; just a second, I start <a href="http://www.ozone3d.net/gpu_caps_viewer/">GPU Caps Viewer</a> and&#8230; okay I got it :thumbup: : from <a href="http://developer.nvidia.com/object/nvidia_opengl_specs.html">developer.nvidia.com/object/nvidia_opengl_specs.html</a>.</p>
<p>But there are a couple of weird things:</p>
<p>1 &#8211; the glext.h version is 28 (#define GL_GLEXT_VERSION 28). The version I use to compile the oZone3D engine renderer is the 29. And I use this header since more than one year&#8230;</p>
<p>2 &#8211; the glext.h header does not compile with vc6 (yes I still use visual studio 6!) because of the GL_EXT_timer_query extension. Here is the origianl piece of code you can find in glext.h:</p>
<pre>
/*
* Original code - does not compile with vc6.
*/
#ifndef GL_EXT_timer_query
typedef signed long long GLint64EXT;
typedef unsigned long long GLuint64EXT;
#endif
</pre>
<p>and here is the code I updated for visual c 6:</p>
<pre>
/*
Modified code for oZone3D engine - compile with vc6
*/
#ifndef GL_EXT_timer_query
	#ifdef _WIN32
		typedef signed __int64 GLint64EXT;
		typedef unsigned __int64 GLuint64EXT;
	#else
		typedef signed long long GLint64EXT;
		typedef unsigned long long GLuint64EXT;
	#endif
#endif
</pre>
<p>I wonder if the original glext.h compiles with vc7 or vc8. If anyone has the answer, feel free to contact me&#8230; </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ozone3d.net/blogs/lab/20070224/new-nvidia-opengl-extensions-headers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
