{"id":368,"date":"2010-09-26T14:54:26","date_gmt":"2010-09-26T13:54:26","guid":{"rendered":"http:\/\/www.ozone3d.net\/blogs\/lab\/?p=368"},"modified":"2011-09-07T20:42:40","modified_gmt":"2011-09-07T19:42:40","slug":"glsl-ecriture-dans-gl_fragdepth","status":"publish","type":"post","link":"https:\/\/www.ozone3d.net\/blogs\/lab\/20100926\/glsl-ecriture-dans-gl_fragdepth\/","title":{"rendered":"(GLSL) Ecriture dans gl_FragDepth"},"content":{"rendered":"<p><center><\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.ozone3d.net\/public\/jegx\/201009\/glsl.jpg\" alt=\"GLSL, OpenGL shading language\"\/><\/p>\n<p><\/center><br \/>\n<!--more--><br \/>\n<b>gl_FragDepth<\/b> est une des built-in variables disponibles dans <b>GLSL<\/b>. Plus exactement, gl_FragDepth est une variable de sortie du fragment shader. gl_FragDepth sert \u00e0 mettre \u00e0 jour la valeur du <b>depth buffer<\/b> pour le fragment en cours de traitement. C&#8217;est un variable de type float.<br \/>\n<br \/>\ngl_FragDepth n&#8217;est pas obligatoire et si elle n&#8217;est pas pr\u00e9sente dans le pixel shader (ooops le fragment shader je voulais dire), OpenGL la met \u00e0 jour automatiquement avec la bonne valeur. Quand elle est pr\u00e9sente dans le frag shader, le developpeur doit bien sur la mettre \u00e0 jour, mais doit aussi faire attention aux diff\u00e9rents branchmements (if\/else) afin qu&#8217;une valeur soit \u00e9crite quelque soit la branche. En r\u00e9sum\u00e9, gl_FragDepth doit \u00eatre obligatoirement mise \u00e0 jour dans tous les cas, sinon sa valeur sera ind\u00e9finie (car OpenGL ne va pas s&#8217;en occuper).<br \/>\n<br \/>\nQuelle valeur \u00e9crire dans gl_FragDepth? Et bien je vois deux cas: soit une valeur qui d\u00e9pend de votre algo, soit une simple copie de <b>gl_FragCoord.z<\/b>. Un petit example de frag shader:<\/p>\n<pre>\r\nuniform float x;\r\nvoid main (void)\r\n{\r\n  if (x &lt; 0.5)\r\n    gl_FragDepth = x;\r\n  else\r\n    gl_FragDepth = gl_FragCoord.z;\r\n}\r\n<\/pre>\n<p>En g\u00e9n\u00e9ral gl_FragDepth varie de 0.0 \u00e0 1.0:<br \/>\n&#8211; 0.0 repr\u00e9sente un pixel sur le near plane de la camera<br \/>\n&#8211; 1.0 repr\u00e9sente un pixel sur le far plane de la camera<\/p>\n<p>gl_FragDepth est disponible dans toutes les version de GLSL, y compris dans le GLSL d&#8217;<b>OpenGL 4 et 4.1<\/b>.<\/p>\n<p>Voil\u00e0, c&#8217;est tout ce que j&#8217;ai \u00e0 dire sur gl_FragDepth pour aujourd&#8217;hui! Si j&#8217;ai dit une b\u00e9tise ou mieux si vous avez quelque chose \u00e0 ajouter par rapport \u00e0 gl_FragDepth, un petit commentaire (ou un tweet) fera l&#8217;affaire.<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[406,18,407,405,638],"class_list":["post-368","post","type-post","status-publish","format-standard","hentry","category-opengl","tag-depth-buffer","tag-glsl","tag-gl_fragcoord","tag-gl_fragdepth","tag-opengl"],"aioseo_notices":[],"views":2764,"_links":{"self":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/posts\/368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/comments?post=368"}],"version-history":[{"count":0,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/posts\/368\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/media?parent=368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/categories?post=368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ozone3d.net\/blogs\/lab\/wp-json\/wp\/v2\/tags?post=368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}