<?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>Coder-Studio &#187; OpenGL</title>
	<atom:link href="http://www.coder-studio.com/blog/tag/opengl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coder-studio.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 02 Mar 2011 22:17:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>OCaml et la 3D : CamlGL &amp; LablGL</title>
		<link>http://www.coder-studio.com/blog/276/</link>
		<comments>http://www.coder-studio.com/blog/276/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 15:50:35 +0000</pubDate>
		<dc:creator>Alp Mestan</dc:creator>
				<category><![CDATA[Langages fonctionnels]]></category>
		<category><![CDATA[GlCaml]]></category>
		<category><![CDATA[LablGl]]></category>
		<category><![CDATA[ocaml]]></category>
		<category><![CDATA[ocamlsdl]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[SDL]]></category>

		<guid isPermaLink="false">http://www.coder-studio.com/blog/?p=276</guid>
		<description><![CDATA[Bonsoir, Comme demandé récemment par l'un des membres, il est tout à fait possible de faire de la 3D avec OpenGL en OCaml. Il y a principalement 2 bindings. LablGL GlCaml Inutile de commencer à donner un cours sur OpenGL, la plupart d'entre vous connaissant déjà, qui plus est il y a tout le nécessaire [...]]]></description>
			<content:encoded><![CDATA[<p>Bonsoir,</p>
<p>Comme demandé récemment par l'un des membres, il est tout à fait possible de faire de la 3D avec OpenGL en OCaml. Il y a principalement 2 bindings.</p>
<ul>
<li><a href="http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgl.html">LablGL</a></li>
<li><a href="http://glcaml.sourceforge.net/">GlCaml</a></li>
</ul>
<p><div id="attachment_277" class="wp-caption aligncenter" style="width: 657px"><a href="http://www.coder-studio.com/blog/wp-content/uploads/2009/04/glcaml.png"><img src="http://www.coder-studio.com/blog/wp-content/uploads/2009/04/glcaml.png" alt="Exemple d&#039;utilisation de GlCaml" title="glcaml" width="647" height="517" class="size-full wp-image-277" /></a><p class="wp-caption-text">Exemple d'utilisation de GlCaml</p></div><br />
Inutile de commencer à donner un cours sur OpenGL, la plupart d'entre vous connaissant déjà, qui plus est il y a tout le nécessaire pour OpenGL en C &#038; C++. Ces deux bibliothèques OCaml ne sont que des bindings, c'est à dire qu'elles appellent les fonctions C classiques en interfaçant par le biais de fonctions OCaml.</p>
<p>Juste pour vous donner une idée, voici un extrait du code correspondant au screenshot ci-dessus. Il s'agissait ici de montrer que ça existe, à quoi ça ressemble et où trouver le nécessaire pour s'y mettre.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p276code2'); return false;">View Code</a> OCAML</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2762"><td class="code" id="p276code2"><pre class="ocaml" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">let</span> draw_gl_scene <span style="color: #6c6;">&#40;</span><span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">=</span>
    glClear  <span style="color: #6c6;">&#40;</span>gl_color_buffer_bit lor gl_depth_buffer_bit<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>		 <span style="color: #5d478b; font-style: italic;">(* Clear The Screen And The Depth Buffer *)</span>
    glLoadIdentity  <span style="color: #6c6;">&#40;</span><span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>				 <span style="color: #5d478b; font-style: italic;">(* Reset The View*)</span>
&nbsp;
    glTranslatef <span style="color: #c6c;">0.0</span> <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">!</span>z <span style="color: #a52a2a;">;</span>                   <span style="color: #5d478b; font-style: italic;">(* move z units out from the screen. *)</span>
&nbsp;
    glRotatef <span style="color: #a52a2a;">!</span>xrot <span style="color: #c6c;">1.0</span> <span style="color: #c6c;">0.0</span> <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span>		 <span style="color: #5d478b; font-style: italic;">(* Rotate On The X Axis *)</span>
    glRotatef <span style="color: #a52a2a;">!</span>yrot <span style="color: #c6c;">0.0</span> <span style="color: #c6c;">1.0</span> <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span>		 <span style="color: #5d478b; font-style: italic;">(* Rotate On The Y Axis *)</span>
&nbsp;
    glBindTexture gl_texture_2d  texture<span style="color: #a52a2a;">.</span><span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">!</span>filter<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>    <span style="color: #5d478b; font-style: italic;">(* choose the texture to use. *)</span>
&nbsp;
    glBegin gl_quads <span style="color: #a52a2a;">;</span>		                 <span style="color: #5d478b; font-style: italic;">(* begin drawing a cube *)</span>
&nbsp;
     <span style="color: #5d478b; font-style: italic;">(* Front Face  note that the texture's corners have to match the quad's corners  *)</span>
    glNormal3f  <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>                               <span style="color: #5d478b; font-style: italic;">(* front face points out of the screen on z. *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Left Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Right Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Right Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Left Of The Texture and Quad *)</span>
&nbsp;
     <span style="color: #5d478b; font-style: italic;">(* Back Face *)</span>
    glNormal3f  <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>                               <span style="color: #5d478b; font-style: italic;">(* back face points into the screen on z. *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Right Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Right Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Left Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Left Of The Texture and Quad *)</span>
&nbsp;
     <span style="color: #5d478b; font-style: italic;">(* Top Face *)</span>
    glNormal3f  <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span>                               <span style="color: #5d478b; font-style: italic;">(* top face points up on y. *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Left Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Left Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Right Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Right Of The Texture and Quad *)</span>
&nbsp;
     <span style="color: #5d478b; font-style: italic;">(* Bottom Face   *)</span>     
    glNormal3f  <span style="color: #c6c;">0.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span>                              <span style="color: #5d478b; font-style: italic;">(* bottom face points down on y.  *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Right Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Left Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Left Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Right Of The Texture and Quad *)</span>
&nbsp;
     <span style="color: #5d478b; font-style: italic;">(* Right face *)</span>
    glNormal3f  <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span>                               <span style="color: #5d478b; font-style: italic;">(* right face points right on x. *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Right Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Right Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Left Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f  <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Left Of The Texture and Quad *)</span>
&nbsp;
     <span style="color: #5d478b; font-style: italic;">(* Left Face *)</span>
    glNormal3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span>                               <span style="color: #5d478b; font-style: italic;">(* left face points left on x. *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Left Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">0.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Bottom Right Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">1.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span>   <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Right Of The Texture and Quad *)</span>
    glTexCoord2f <span style="color: #c6c;">0.0</span>  <span style="color: #c6c;">1.0</span> <span style="color: #a52a2a;">;</span> glVertex3f <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span>   <span style="color: #c6c;">1.0</span>  <span style="color: #6c6;">&#40;</span><span style="color: #a52a2a;">-.</span>1<span style="color: #a52a2a;">.</span>0<span style="color: #6c6;">&#41;</span> <span style="color: #a52a2a;">;</span>	 <span style="color: #5d478b; font-style: italic;">(* Top Left Of The Texture and Quad *)</span>
&nbsp;
    glEnd  <span style="color: #6c6;">&#40;</span><span style="color: #6c6;">&#41;</span><span style="color: #a52a2a;">;</span>                                     <span style="color: #5d478b; font-style: italic;">(* done with the polygon. *)</span>
&nbsp;
    xrot <span style="color: #a52a2a;">:=</span> <span style="color: #a52a2a;">!</span>xrot <span style="color: #a52a2a;">+.</span> <span style="color: #a52a2a;">!</span>xspeed<span style="color: #a52a2a;">;</span>		                 <span style="color: #5d478b; font-style: italic;">(* X Axis Rotation	 *)</span>
    yrot <span style="color: #a52a2a;">:=</span> <span style="color: #a52a2a;">!</span>yrot <span style="color: #a52a2a;">+.</span> <span style="color: #a52a2a;">!</span>yspeed		                 <span style="color: #5d478b; font-style: italic;">(* Y Axis Rotation *)</span></pre></td></tr></table></div>

<p>PS : aucun des deux ne semble être encore maintenu, toutefois GlCaml prend en charge les versions d'OpenGL jusqu'à 2.1 + extensions ARB et spécifiques aux vendeurs. GlCaml embarque un binding minimal de la SDL, moins complet que OCamlSDL que j'ai présenté dans un post précédent.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/276/feed/</wfw:commentRss>
		<slash:comments>5107</slash:comments>
		</item>
		<item>
		<title>Les sujets en rapport avec OCaml qui vous intéresseraient</title>
		<link>http://www.coder-studio.com/blog/les-sujets-en-rapport-avec-ocaml-qui-vous-interesseraient/</link>
		<comments>http://www.coder-studio.com/blog/les-sujets-en-rapport-avec-ocaml-qui-vous-interesseraient/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 18:18:18 +0000</pubDate>
		<dc:creator>Alp Mestan</dc:creator>
				<category><![CDATA[Langages fonctionnels]]></category>
		<category><![CDATA[Non classé]]></category>
		<category><![CDATA[maths]]></category>
		<category><![CDATA[ocaml]]></category>
		<category><![CDATA[OpenGL]]></category>

		<guid isPermaLink="false">http://www.coder-studio.com/blog/?p=262</guid>
		<description><![CDATA[Salut, Étant tombé amoureux du langage OCaml, et comptant propulser cette activité de blog sur Coder-Studio, j'aimerais savoir ce que vous, amateur du langage OCaml, de la programmation fonctionnelle en général ou tout simplement curieux, vous souhaiteriez lire en rapport avec OCaml sur notre site préféré Alors ? Quelques grandes lignes qui pourraient intéresser : [...]]]></description>
			<content:encoded><![CDATA[<p><center>Salut,</center></p>
<p><center><img src="http://lampwww.epfl.ch/%7Emichelou/images/ocaml.gif" alt="" /></center></p>
<p>Étant tombé amoureux du langage OCaml, et comptant propulser cette activité de blog sur Coder-Studio, j'aimerais savoir ce que vous, amateur du langage OCaml, de la programmation fonctionnelle en général ou tout simplement curieux, vous souhaiteriez lire en rapport avec OCaml sur notre site préféré <img src='http://www.coder-studio.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Alors ?<br />
Quelques grandes lignes qui pourraient intéresser :<br />
- OCaml et les maths (comme <a href="http://www.coder-studio.com/blog/construction-de-lensemble-de-cantor-en-ocaml/">mon billet précédent</a>)<br />
- OCaml et les GUIs<br />
- OCaml et le multimédia (OCamlSDL, OCaml/OpenGL, ...)<br />
- OCaml et la conception de compilateurs/interpréteurs (lexing, parsing, etc)<br />
- ...</p>
<p>Merci de donner votre avis !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/les-sujets-en-rapport-avec-ocaml-qui-vous-interesseraient/feed/</wfw:commentRss>
		<slash:comments>1759</slash:comments>
		</item>
		<item>
		<title>Introduction des RAII en OpenGL</title>
		<link>http://www.coder-studio.com/blog/introduction-des-raii-en-opengl/</link>
		<comments>http://www.coder-studio.com/blog/introduction-des-raii-en-opengl/#comments</comments>
		<pubDate>Sun, 03 Oct 2004 17:07:45 +0000</pubDate>
		<dc:creator>twxs</dc:creator>
				<category><![CDATA[C & C++]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[RAII]]></category>

		<guid isPermaLink="false">http://r19649.ovh.net/cs/blog/?p=137</guid>
		<description><![CDATA[Ce tutoriel introduit l'utilisation des RAII (Ressource Aquisition Is Initialisation) en OpenGL. Un point clef en opengl est de conserver la "machine à états" propre. L'utilisation de RAII va permettre de faciliter cette gestion et également de clarifier le code. Prenons un exemple: ?View Code CglEnable&#40;flag&#41;; .... glDisable&#40;flag&#41;; C'est ici l'utilisation normale d'opengl. Rien de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ce tutoriel introduit l'utilisation des RAII (Ressource Aquisition Is Initialisation) en OpenGL. Un point clef en opengl est de conserver la "machine à états" propre. L'utilisation de RAII va permettre de faciliter cette gestion et également de clarifier le code.</p>
<p><span id="more-137"></span>Prenons un exemple:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code14'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13714"><td class="code" id="p137code14"><pre class="c" style="font-family:monospace;">glEnable<span style="color: #009900;">&#40;</span>flag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
....
<span style="color: #202020;">glDisable</span><span style="color: #009900;">&#40;</span>flag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p style="text-align: justify;">C'est ici l'utilisation normale d'opengl. Rien de compliqué mais c'est exactement ce qu'on veut éviter pour ne pas alourdir le code...</p>
<h2>Un premier pas vers le RAII</h2>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code15'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13715"><td class="code" id="p137code15"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">struct</span> Enable<span style="color: #009900;">&#123;</span>
   Enable<span style="color: #009900;">&#40;</span>GLenum flag<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      glEnable<span style="color: #009900;">&#40;</span>flag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
   ~Enable<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      glDisable<span style="color: #009900;">&#40;</span>flag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Puis on l'utilise dans un bloc, comme suit :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code16'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13716"><td class="code" id="p137code16"><pre class="c" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
   Enable active<span style="color: #009900;">&#40;</span>flag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   ...
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Comme on peut le voir ici, Le principe est très simple : Lors de la création de l'instance de la structure Enable, on execute via le constructeur la commande opengl glEnable(). Lorsque l'on sort de la zone de portée de cette instance (ici, le bloc {}), elle est détruite. Il y a donc appel du destructeur dans lequel on a placé la commande glDisable().</p>
<h2>Conservation et propreté</h2>
<p style="text-align: justify;">Cette première version fonctionne, mais imaginons qu'avant le bloc le flag soit deja activé : à la sortie il sera desactivé. Pour s'assurer de la récuperation d'un contexte identique, nous devons modifier notre classe pour mémoriser l'etat courant avant sa modification.</p>
<p>On procède de cette manière :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code17'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13717"><td class="code" id="p137code17"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">struct</span> Enable <span style="color: #009900;">&#123;</span>
&nbsp;
   GLboolean state<span style="color: #339933;">;</span>
   Enable<span style="color: #009900;">&#40;</span>GLenum flag<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      state <span style="color: #339933;">=</span> glIsEnable<span style="color: #009900;">&#40;</span>flag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #666666; font-style: italic;">// State contient l'état actuel du flag</span>
      <span style="color: #666666; font-style: italic;">// Si le flag est deja activé il n'est pas necessaire de le réactiver</span>
      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>state<span style="color: #009900;">&#41;</span>
         glEnable<span style="color: #009900;">&#40;</span>flag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
   ~Enable<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">// Si le flag était désactivé à la création de la classe on le désactive à nouveau</span>
      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>state<span style="color: #009900;">&#41;</span>
         glDisable<span style="color: #009900;">&#40;</span>flag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Ici nous sommes : L'utilisation de l'objet conserve le contexte opengl.</p>
<h2>Cas d'usage : factorisation du code à l'aide des templates</h2>
<p>Prenons le cas suivant :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code18'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13718"><td class="code" id="p137code18"><pre class="c" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
   Enable lighting<span style="color: #009900;">&#40;</span>GL_LIGHTING<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   Enable light0<span style="color: #009900;">&#40;</span>GL_LIGHT0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   Enable depth<span style="color: #009900;">&#40;</span>GL_DEPTH_TEST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #666666; font-style: italic;">// ...code</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: justify;">Supposons que ces trois appels reviennnent régulierement : l'héritage multiple devrait nous permettre de factoriser ce code en regroupant le tout en une seule et même classe. Mais le probleme ici, c'est que nous avons une unique classe pour tous les états. Comme nous ne pouvons pas heriter plusiseurs fois de la même classe, il va falloir trouver une autre solution.</p>
<p style="text-align: justify;">Et celle qui s'y prête le mieux reste l'utilisation de templates :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code19'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13719"><td class="code" id="p137code19"><pre class="c" style="font-family:monospace;">template <span style="color: #993333;">struct</span> Enable <span style="color: #009900;">&#123;</span>
   GLboolean state<span style="color: #339933;">;</span>
   Enable<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">//plus de paramètre au constructeur</span>
      state <span style="color: #339933;">=</span> glIsEnable<span style="color: #009900;">&#40;</span>Flag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #666666; font-style: italic;">// state contiend l'etat actuel du flag</span>
      <span style="color: #666666; font-style: italic;">// si le flag est deja active il 'est pas necessaire de le reactiver</span>
&nbsp;
      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>state<span style="color: #009900;">&#41;</span>
          glEnable<span style="color: #009900;">&#40;</span>Flag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
   ~Enable<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>state<span style="color: #009900;">&#41;</span>
      glDisable<span style="color: #009900;">&#40;</span>Flag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p style="text-align: justify;">En "templetant" la classe Enable, nous obtenons une classe différente pour chaque paramètre du template, et donc pour chaque flag.</p>
<p style="text-align: justify;">Au niveau de l'utilisation,</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code20'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13720"><td class="code" id="p137code20"><pre class="c" style="font-family:monospace;">Enable depth<span style="color: #009900;">&#40;</span>GL_DEPTH_TEST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>deviendra :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code21'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13721"><td class="code" id="p137code21"><pre class="c" style="font-family:monospace;">Enable depth<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Mais surtout, ceci va nous permettre de factoriser des états.<br />
Reprenons les trois appels redondant de notre programme :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code22'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13722"><td class="code" id="p137code22"><pre class="c" style="font-family:monospace;">Enable lighting<span style="color: #339933;">;</span>
Enable light0<span style="color: #339933;">;</span>
Enable depth<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>En templatant, on peut créer une structure héritant de chaque classe :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code23'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13723"><td class="code" id="p137code23"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">struct</span> MonContext <span style="color: #339933;">:</span>
   Enable <span style="color: #339933;">,</span>
   Enable <span style="color: #339933;">,</span>
   Enable
<span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Nous obtenons une structure ayant les propriétés de 3 classes parents. Et surtout, à la creation de l'objet les 3 constructeurs des parents seront appelés, et réciproquement à la destruction.<br />
On peut donc se contenter de ceci :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p137code24'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13724"><td class="code" id="p137code24"><pre class="c" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
   MonContext ctx_light<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h2>Conclusion</h2>
<p>Voilà pour l'utilisation des RAII : Rien de très complexe dans la théorie ou dans la pratique. C'est par contre un puissant outil qui devrait rapidement devenir indispensable à la clarté de tout programme conséquent.<br />
<strong>Un grand merci à Twxs pour ce tuto !</strong></p>
<blockquote><p>Cet article provient du tutorial publié par Twxs le 03/10/2004 sur l'ancien site de Coder-Studio.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/introduction-des-raii-en-opengl/feed/</wfw:commentRss>
		<slash:comments>1116</slash:comments>
		</item>
	</channel>
</rss>

