<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Translucent Allegro Windows</title>
		<link>http://www.allegro.cc/forums/view/617989</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 10 Mar 2020 12:48:05 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s time to join the future.</p><p>Allegro needs custom OpenGL contexts and translucent windows. SDL has it, why not us?</p><p>So, I&#39;m starting a project to get it done.</p><p>Step 1) Create a basic working example on every platform without using allegro. OpenGL and system calls only.</p><p>Step 2) Integrate custom OpenGL context creation into Allegro.</p><p>1a) Win32 and WGL</p><p>1b) X11, XLib, and XGL</p><p>1c) OSX, OpenGL</p><p>I&#39;ll start working on 1a. A Win32 example with WGL.</p><p>If anyone can tackle 1b or 1c, we&#39;ll get this done in no time.</p><p>This is something I have wanted to do for a long time, and I&#39;m going to get it done if it kills me.</p><p>Edgar
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 20 Nov 2019 01:12:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good idea. I&#39;m not fluent enough in OpenGL to help you, but I can make some tests if needed (Windows/Linux/Android)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Wed, 20 Nov 2019 14:29:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, I&#39;ve got a win32 OpenGL solution &#39;mostly&#39; working.</p><p>It&#39;s translucent, but for some reason, it&#39;s like it&#39;s over gray at 1/2 alpha and I can&#39;t explain why.</p><p><a href="https://github.com/EdgarReynaldo/TransAllegro">https://github.com/EdgarReynaldo/TransAllegro</a></p><p><span class="remote-thumbnail"><span class="json">{"name":"Trans3.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/3\/6\/36fa9553a11faa418c6300affd33af6b.png","w":1920,"h":1080,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/3\/6\/36fa9553a11faa418c6300affd33af6b"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/3/6/36fa9553a11faa418c6300affd33af6b-240.jpg" alt="Trans3.png" width="240" height="135" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 25 Nov 2019 01:23:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is definitely way over my skill level and a good addition to Allegro.<br />Though, I am not sure even what could be suggested to help understand why it would be like that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MikiZX)</author>
		<pubDate>Mon, 25 Nov 2019 19:10:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In all actuality, once you get past all the misinformation and crap on the internet, it&#39;s actually quite easy.</p><p><a href="https://www.allegro.cc/files/attachment/612219">Working win32 demo</a>. Try it!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 26 Nov 2019 01:32:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sorry to report... I get a blank black rectangle in top-left corner of the screen.</p><p>EDIT: not sure if this helps:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:732  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">5</span>.<span class="n">87641</span><span class="k2">]</span> <span class="k3">-</span><span class="k3">-</span> 
<span class="number">  2</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:733  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">5</span>.<span class="n">87644</span><span class="k2">]</span> Decoding visual no. <span class="n">98</span>...
<span class="number">  3</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:306  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93237</span><span class="k2">]</span> Decoding:
<span class="number">  4</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:210  display_pixel_format             <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93243</span><span class="k2">]</span> Accelerated: no
<span class="number">  5</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:211  display_pixel_format             <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93247</span><span class="k2">]</span> Single-buffer: no
<span class="number">  6</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:213  display_pixel_format             <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93250</span><span class="k2">]</span> Swap method: copy
<span class="number">  7</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:216  display_pixel_format             <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93253</span><span class="k2">]</span> Color format: r8 g8 b8 a8, <span class="n">32</span> bit
<span class="number">  8</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:222  display_pixel_format             <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93256</span><span class="k2">]</span> Depth buffer: <span class="n">16</span> bits
<span class="number">  9</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:223  display_pixel_format             <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93260</span><span class="k2">]</span> Sample buffers: no
<span class="number"> 10</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:224  display_pixel_format             <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93263</span><span class="k2">]</span> Samples: <span class="n">0</span>
<span class="number"> 11</span>display  D E:\LIBS\LIBS81Rebuild\A5FORK\src\display_settings.c:212  debug_display_settings           <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93266</span><span class="k2">]</span> color: <span class="n">32</span> <span class="k2">(</span>rgba <span class="n">8888</span><span class="k2">)</span>, depth: <span class="n">16</span>, stencil: <span class="n">8</span>, acc: <span class="n">16161616</span>, samples: <span class="n">0</span><span class="k3">/</span><span class="n">0</span>
<span class="number"> 12</span>display  D E:\LIBS\LIBS81Rebuild\A5FORK\src\display_settings.c:527  _al_score_display_settings       <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93269</span><span class="k2">]</span> Score is <span class="k2">:</span> <span class="n">1025</span>
<span class="number"> 13</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:732  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93272</span><span class="k2">]</span> <span class="k3">-</span><span class="k3">-</span> 
<span class="number"> 14</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:733  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">5</span>.<span class="n">93275</span><span class="k2">]</span> Decoding visual no. <span class="n">99</span>...
<span class="number"> 15</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:306  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">5</span>.<span class="n">98865</span><span class="k2">]</span> Decoding:
<span class="number"> 16</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:326  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">5</span>.<span class="n">98873</span><span class="k2">]</span> Not RGBA mode
<span class="number"> 17</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:732  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">5</span>.<span class="n">98876</span><span class="k2">]</span> <span class="k3">-</span><span class="k3">-</span> 
<span class="number"> 18</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:733  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">5</span>.<span class="n">98879</span><span class="k2">]</span> Decoding visual no. <span class="n">100</span>...
<span class="number"> 19</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:306  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">04412</span><span class="k2">]</span> Decoding:
<span class="number"> 20</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:326  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">04418</span><span class="k2">]</span> Not RGBA mode
<span class="number"> 21</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:732  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">6</span>.<span class="n">04421</span><span class="k2">]</span> <span class="k3">-</span><span class="k3">-</span> 
<span class="number"> 22</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:733  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">6</span>.<span class="n">04424</span><span class="k2">]</span> Decoding visual no. <span class="n">101</span>...
<span class="number"> 23</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:306  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">09996</span><span class="k2">]</span> Decoding:
<span class="number"> 24</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:326  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">10003</span><span class="k2">]</span> Not RGBA mode
<span class="number"> 25</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:732  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">6</span>.<span class="n">10006</span><span class="k2">]</span> <span class="k3">-</span><span class="k3">-</span> 
<span class="number"> 26</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:733  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">6</span>.<span class="n">10009</span><span class="k2">]</span> Decoding visual no. <span class="n">102</span>...
<span class="number"> 27</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:306  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">15576</span><span class="k2">]</span> Decoding:
<span class="number"> 28</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:326  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">15582</span><span class="k2">]</span> Not RGBA mode
<span class="number"> 29</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:732  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">6</span>.<span class="n">15585</span><span class="k2">]</span> <span class="k3">-</span><span class="k3">-</span> 
<span class="number"> 30</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:733  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">6</span>.<span class="n">15588</span><span class="k2">]</span> Decoding visual no. <span class="n">103</span>...
<span class="number"> 31</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:306  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">21173</span><span class="k2">]</span> Decoding:
<span class="number"> 32</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:321  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">21180</span><span class="k2">]</span> Can<span class="s">'t draw to window</span>
<span class="number"> 33</span><span class="s">display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:732  get_available_pixel_formats_ext  [   6.21184] -- </span>
<span class="number"> 34</span><span class="s">display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:733  get_available_pixel_formats_ext  [   6.21187] Decoding visual no. 104...</span>
<span class="number"> 35</span><span class="s">display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:306  decode_pixel_format_attrib       [   6.26753] Decoding:</span>
<span class="number"> 36</span><span class="s">display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:321  decode_pixel_format_attrib       [   6.26760] Can'</span>t draw to <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a>
<span class="number"> 37</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:732  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">6</span>.<span class="n">26764</span><span class="k2">]</span> <span class="k3">-</span><span class="k3">-</span> 
<span class="number"> 38</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:733  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">6</span>.<span class="n">26767</span><span class="k2">]</span> Decoding visual no. <span class="n">105</span>...
<span class="number"> 39</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:306  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">32312</span><span class="k2">]</span> Decoding:
<span class="number"> 40</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:321  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">32321</span><span class="k2">]</span> Can<span class="s">'t draw to window</span>
<span class="number"> 41</span><span class="s">display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:732  get_available_pixel_formats_ext  [   6.32324] -- </span>
<span class="number"> 42</span><span class="s">display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:733  get_available_pixel_formats_ext  [   6.32327] Decoding visual no. 106...</span>
<span class="number"> 43</span><span class="s">display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:306  decode_pixel_format_attrib       [   6.37919] Decoding:</span>
<span class="number"> 44</span><span class="s">display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:321  decode_pixel_format_attrib       [   6.37927] Can'</span>t draw to <a href="http://www.delorie.com/djgpp/doc/libc/libc_865.html" target="_blank">window</a>
<span class="number"> 45</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:732  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">6</span>.<span class="n">37930</span><span class="k2">]</span> <span class="k3">-</span><span class="k3">-</span> 
<span class="number"> 46</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:733  get_available_pixel_formats_ext  <span class="k2">[</span>   <span class="n">6</span>.<span class="n">37933</span><span class="k2">]</span> Decoding visual no. <span class="n">107</span>...
<span class="number"> 47</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:306  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">43517</span><span class="k2">]</span> Decoding:
<span class="number"> 48</span>display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:321  decode_pixel_format_attrib       <span class="k2">[</span>   <span class="n">6</span>.<span class="n">43524</span><span class="k2">]</span> Can<span class="s">'t draw to window</span>
<span class="number"> 49</span><span class="s">display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:732  get_available_pixel_formats_ext  [   6.43528] -- </span>
<span class="number"> 50</span><span class="s">display  I E:\LIBS\LIBS81Rebuild\A5FORK\src\win\wgl_disp.c:733  get_available_pixel_formats_ext  [   6.43531] Decoding visual no. 108...</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MikiZX)</author>
		<pubDate>Tue, 26 Nov 2019 02:07:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What version of Windows are you using?</p><p>Is your desktop 32 bit color depth?</p><p>I&#39;m on IRC on #allegro right now. Meet me there. Allegro.cc is being sketchy.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 26 Nov 2019 02:47:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Windows 10, 32 bit.<br />I&#39;ll try the IRC though have never used it before so might be a minute or two...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MikiZX)</author>
		<pubDate>Tue, 26 Nov 2019 02:58:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Is translucency enabled in your desktop?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 26 Nov 2019 03:00:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>log
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MikiZX)</author>
		<pubDate>Tue, 26 Nov 2019 03:10:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Since the first demo doesn&#39;t work for you, try this one :</p><p><a href="https://www.allegro.cc/files/attachment/612221">https://www.allegro.cc/files/attachment/612221</a></p><p>The first one uses a hacked Allegro.</p><p>This one is straight win32 and OpenGL, with a little help from datenwolf.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 26 Nov 2019 03:22:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Both work - I just needed a little patience for the bitmaps to load.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MikiZX)</author>
		<pubDate>Tue, 26 Nov 2019 03:59:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>All source code for the stand alone win32 opengl demo can be found here :</p><p><a href="https://github.com/EdgarReynaldo/TransAllegro/tree/master/src/win">https://github.com/EdgarReynaldo/TransAllegro/tree/master/src/win</a></p><p>Note it borrows some helper functions from datenwolf and his wglarb demo, which can be found here :</p><p><a href="https://github.com/datenwolf/wglarb">https://github.com/datenwolf/wglarb</a></p><p>The gist of it is really simple.</p><p>1) Register a window class. The class style can be 0 or CS_OWNDC or perhaps others (not tested).</p><p>2) Create a window with CreateWindowEx, specifying WS_EX_APPWINDOW for the extended style and WS_POPUP for the style.</p><p>3) Create an OpenGL context that has 32 bit color, 8 bit alpha, and the WGL_TRANSPARENT_ARB extension enabled.</p><p>4) Use DWM to blur the window. DwmEnableBlurBehindWindow and DwmExtendFrameIntoClientArea are necessary to set up the window correctly so that the client area is NOT blurred (only non-blurred regions are drawn using alpha values [ yes this is as backwards as your reflection in the mirror ]).</p><div class="source-code snippet"><div class="inner"><pre>   DWM_BLURBEHIND bb <span class="k3">=</span> <span class="k2">{</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
   
   bb.dwFlags <span class="k3">=</span> DWM_BB_ENABLE<span class="k2">;</span>
   bb.fEnable <span class="k3">=</span> TRUE<span class="k2">;</span>
   bb.hRgnBlur <span class="k3">=</span> NULL<span class="k2">;</span>
   HRESULT hr <span class="k3">=</span> DwmEnableBlurBehindWindow<span class="k2">(</span>hwnd, <span class="k3">&amp;</span>bb<span class="k2">)</span><span class="k2">;</span>
   <span class="k1">if</span> <span class="k2">(</span>FAILED<span class="k2">(</span>hr<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Could not enable blur behind."</span><span class="k2">)</span><span class="k2">;</span>
   <span class="k2">}</span>

   MARGINS margins <span class="k3">=</span> <span class="k2">{</span><span class="k3">-</span><span class="n">1</span><span class="k2">}</span><span class="k2">;</span>
   DwmExtendFrameIntoClientArea<span class="k2">(</span>hwnd, <span class="k3">&amp;</span>margins<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>


5) Draw with OpenGL and enjoy.</p><p><b>UPDATE</b> :<br />I found working source code on the internet from datenwolf for an XGLX translucency example. I haven&#39;t figured out exactly what does what yet, but I&#39;m working on that.</p><p><a href="https://www.allegro.cc/files/attachment/612224">source code</a></p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="c">/*------------------------------------------------------------------------</span>
<span class="number">   2</span><span class="c"> * A demonstration of OpenGL in a  ARGB window</span>
<span class="number">   3</span><span class="c"> *    =&gt; support for composited window transparency</span>
<span class="number">   4</span><span class="c"> *</span>
<span class="number">   5</span><span class="c"> * (c) 2011 by Wolfgang 'datenwolf' Draxinger</span>
<span class="number">   6</span><span class="c"> *     See me at comp.graphics.api.opengl and StackOverflow.com</span>
<span class="number">   7</span><span class="c"></span>
<span class="number">   8</span><span class="c"> * License agreement: This source code is provided "as is". You</span>
<span class="number">   9</span><span class="c"> * can use this source code however you want for your own personal</span>
<span class="number">  10</span><span class="c"> * use. If you give this source code to anybody else then you must</span>
<span class="number">  11</span><span class="c"> * leave this message in it.</span>
<span class="number">  12</span><span class="c"> *</span>
<span class="number">  13</span><span class="c"> * This program is based on the simplest possible</span>
<span class="number">  14</span><span class="c"> * Linux OpenGL program by FTB (see info below)</span>
<span class="number">  15</span><span class="c"></span>
<span class="number">  16</span><span class="c">  The simplest possible Linux OpenGL program? Maybe...</span>
<span class="number">  17</span><span class="c"></span>
<span class="number">  18</span><span class="c">  (c) 2002 by FTB. See me in comp.graphics.api.opengl</span>
<span class="number">  19</span><span class="c"></span>
<span class="number">  20</span><span class="c">  --</span>
<span class="number">  21</span><span class="c">  &lt;___/&gt;</span>
<span class="number">  22</span><span class="c">  / O O \</span>
<span class="number">  23</span><span class="c">  _____/  FTB.</span>
<span class="number">  24</span><span class="c"></span>
<span class="number">  25</span><span class="c">------------------------------------------------------------------------*/</span>
<span class="number">  26</span>
<span class="number">  27</span><span class="p">#include &lt;stdlib.h&gt;</span>
<span class="number">  28</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  29</span><span class="p">#include &lt;string.h&gt;</span>
<span class="number">  30</span><span class="p">#include &lt;math.h&gt;</span>
<span class="number">  31</span>
<span class="number">  32</span><span class="p">#include &lt;GL/gl.h&gt;</span>
<span class="number">  33</span><span class="p">#include &lt;GL/glx.h&gt;</span>
<span class="number">  34</span><span class="p">#include &lt;GL/glxext.h&gt;</span>
<span class="number">  35</span><span class="p">#include &lt;X11/Xatom.h&gt;</span>
<span class="number">  36</span><span class="p">#include &lt;X11/extensions/Xrender.h&gt;</span>
<span class="number">  37</span><span class="p">#include &lt;X11/Xutil.h&gt;</span>
<span class="number">  38</span>
<span class="number">  39</span><span class="p">#define USE_CHOOSE_FBCONFIG</span>
<span class="number">  40</span>
<span class="number">  41</span><span class="k1">static</span> <span class="k1">void</span> fatalError<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>why<span class="k2">)</span>
<span class="number">  42</span><span class="k2">{</span>
<span class="number">  43</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"%s"</span>, why<span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">0x666</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</span><span class="k2">}</span>
<span class="number">  46</span>
<span class="number">  47</span><span class="k1">static</span> <span class="k1">int</span> Xscreen<span class="k2">;</span>
<span class="number">  48</span><span class="k1">static</span> Atom del_atom<span class="k2">;</span>
<span class="number">  49</span><span class="k1">static</span> Colormap cmap<span class="k2">;</span>
<span class="number">  50</span><span class="k1">static</span> Display <span class="k3">*</span>Xdisplay<span class="k2">;</span>
<span class="number">  51</span><span class="k1">static</span> XVisualInfo <span class="k3">*</span>visual<span class="k2">;</span>
<span class="number">  52</span><span class="k1">static</span> XRenderPictFormat <span class="k3">*</span>pict_format<span class="k2">;</span>
<span class="number">  53</span><span class="k1">static</span> GLXFBConfig <span class="k3">*</span>fbconfigs, fbconfig<span class="k2">;</span>
<span class="number">  54</span><span class="k1">static</span> <span class="k1">int</span> numfbconfigs<span class="k2">;</span>
<span class="number">  55</span><span class="k1">static</span> GLXContext render_context<span class="k2">;</span>
<span class="number">  56</span><span class="k1">static</span> Window Xroot, window_handle<span class="k2">;</span>
<span class="number">  57</span><span class="k1">static</span> GLXWindow glX_window_handle<span class="k2">;</span>
<span class="number">  58</span><span class="k1">static</span> <span class="k1">int</span> width, height<span class="k2">;</span>
<span class="number">  59</span>
<span class="number">  60</span><span class="k1">static</span> <span class="k1">int</span> VisData<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number">  61</span>GLX_RENDER_TYPE, GLX_RGBA_BIT,
<span class="number">  62</span>GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,
<span class="number">  63</span>GLX_DOUBLEBUFFER, True,
<span class="number">  64</span>GLX_RED_SIZE, <span class="n">8</span>,
<span class="number">  65</span>GLX_GREEN_SIZE, <span class="n">8</span>,
<span class="number">  66</span>GLX_BLUE_SIZE, <span class="n">8</span>,
<span class="number">  67</span>GLX_ALPHA_SIZE, <span class="n">8</span>,
<span class="number">  68</span>GLX_DEPTH_SIZE, <span class="n">16</span>,
<span class="number">  69</span>None
<span class="number">  70</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  71</span>
<span class="number">  72</span><span class="k1">static</span> <span class="k1">int</span> isExtensionSupported<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>extList, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>extension<span class="k2">)</span>
<span class="number">  73</span><span class="k2">{</span>
<span class="number">  74</span>
<span class="number">  75</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>start<span class="k2">;</span>
<span class="number">  76</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>where, <span class="k3">*</span>terminator<span class="k2">;</span>
<span class="number">  77</span>
<span class="number">  78</span>  <span class="c">/* Extension names should not have spaces. */</span>
<span class="number">  79</span>  where <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_753.html" target="_blank">strchr</a><span class="k2">(</span>extension, <span class="s">' '</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>  <span class="k1">if</span> <span class="k2">(</span> where <span class="k3">|</span><span class="k3">|</span> <span class="k3">*</span>extension <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span> <span class="k2">)</span>
<span class="number">  81</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  82</span>
<span class="number">  83</span>  <span class="c">/* It takes a bit of care to be fool-proof about parsing the</span>
<span class="number">  84</span><span class="c">     OpenGL extensions string. Don't be fooled by sub-strings,</span>
<span class="number">  85</span><span class="c">     etc. */</span>
<span class="number">  86</span>  <span class="k1">for</span> <span class="k2">(</span> start <span class="k3">=</span> extList<span class="k2">;</span> <span class="k2">;</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number">  87</span>    where <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_775.html" target="_blank">strstr</a><span class="k2">(</span> start, extension <span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>
<span class="number">  89</span>    <span class="k1">if</span> <span class="k2">(</span> <span class="k3">!</span>where <span class="k2">)</span>
<span class="number">  90</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number">  91</span>
<span class="number">  92</span>    terminator <span class="k3">=</span> where <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span> extension <span class="k2">)</span><span class="k2">;</span>
<span class="number">  93</span>
<span class="number">  94</span>    <span class="k1">if</span> <span class="k2">(</span> where <span class="k3">=</span><span class="k3">=</span> start <span class="k3">|</span><span class="k3">|</span> <span class="k3">*</span><span class="k2">(</span>where <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">' '</span> <span class="k2">)</span>
<span class="number">  95</span>      <span class="k1">if</span> <span class="k2">(</span> <span class="k3">*</span>terminator <span class="k3">=</span><span class="k3">=</span> <span class="s">' '</span> <span class="k3">|</span><span class="k3">|</span> <span class="k3">*</span>terminator <span class="k3">=</span><span class="k3">=</span> <span class="s">'\0'</span> <span class="k2">)</span>
<span class="number">  96</span>        <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  97</span>
<span class="number">  98</span>    start <span class="k3">=</span> terminator<span class="k2">;</span>
<span class="number">  99</span>  <span class="k2">}</span>
<span class="number"> 100</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 101</span><span class="k2">}</span>
<span class="number"> 102</span>
<span class="number"> 103</span><span class="k1">static</span> Bool WaitForMapNotify<span class="k2">(</span>Display <span class="k3">*</span>d, XEvent <span class="k3">*</span>e, <span class="k1">char</span> <span class="k3">*</span>arg<span class="k2">)</span>
<span class="number"> 104</span><span class="k2">{</span>
<span class="number"> 105</span>    <span class="k1">return</span> d <span class="k3">&amp;</span><span class="k3">&amp;</span> e <span class="k3">&amp;</span><span class="k3">&amp;</span> arg <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>e-&gt;type <span class="k3">=</span><span class="k3">=</span> MapNotify<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>e-&gt;xmap.window <span class="k3">=</span><span class="k3">=</span> <span class="k3">*</span><span class="k2">(</span>Window<span class="k3">*</span><span class="k2">)</span>arg<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span><span class="k2">}</span>
<span class="number"> 107</span>
<span class="number"> 108</span><span class="k1">static</span> <span class="k1">void</span> describe_fbconfig<span class="k2">(</span>GLXFBConfig fbconfig<span class="k2">)</span>
<span class="number"> 109</span><span class="k2">{</span>
<span class="number"> 110</span>    <span class="k1">int</span> doublebuffer<span class="k2">;</span>
<span class="number"> 111</span>    <span class="k1">int</span> red_bits, green_bits, blue_bits, alpha_bits, depth_bits<span class="k2">;</span>
<span class="number"> 112</span>
<span class="number"> 113</span>    glXGetFBConfigAttrib<span class="k2">(</span>Xdisplay, fbconfig, GLX_DOUBLEBUFFER, <span class="k3">&amp;</span>doublebuffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 114</span>    glXGetFBConfigAttrib<span class="k2">(</span>Xdisplay, fbconfig, GLX_RED_SIZE, <span class="k3">&amp;</span>red_bits<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>    glXGetFBConfigAttrib<span class="k2">(</span>Xdisplay, fbconfig, GLX_GREEN_SIZE, <span class="k3">&amp;</span>green_bits<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>    glXGetFBConfigAttrib<span class="k2">(</span>Xdisplay, fbconfig, GLX_BLUE_SIZE, <span class="k3">&amp;</span>blue_bits<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>    glXGetFBConfigAttrib<span class="k2">(</span>Xdisplay, fbconfig, GLX_ALPHA_SIZE, <span class="k3">&amp;</span>alpha_bits<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>    glXGetFBConfigAttrib<span class="k2">(</span>Xdisplay, fbconfig, GLX_DEPTH_SIZE, <span class="k3">&amp;</span>depth_bits<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</span>
<span class="number"> 120</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"FBConfig selected:\n"</span>
<span class="number"> 121</span>        <span class="s">"Doublebuffer: %s\n"</span>
<span class="number"> 122</span>        <span class="s">"Red Bits: %d, Green Bits: %d, Blue Bits: %d, Alpha Bits: %d, Depth Bits: %d\n"</span>,
<span class="number"> 123</span>        doublebuffer <span class="k3">=</span><span class="k3">=</span> True ? <span class="s">"Yes"</span> <span class="k2">:</span> <span class="s">"No"</span>,
<span class="number"> 124</span>        red_bits, green_bits, blue_bits, alpha_bits, depth_bits<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span><span class="k2">}</span>
<span class="number"> 126</span>
<span class="number"> 127</span><span class="k1">static</span> <span class="k1">void</span> createTheWindow<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 128</span><span class="k2">{</span>
<span class="number"> 129</span>    XEvent event<span class="k2">;</span>
<span class="number"> 130</span>    <span class="k1">int</span> x,y, attr_mask<span class="k2">;</span>
<span class="number"> 131</span>    XSizeHints hints<span class="k2">;</span>
<span class="number"> 132</span>    XWMHints <span class="k3">*</span>startup_state<span class="k2">;</span>
<span class="number"> 133</span>    XTextProperty textprop<span class="k2">;</span>
<span class="number"> 134</span>    XSetWindowAttributes attr <span class="k3">=</span> <span class="k2">{</span><span class="n">0</span>,<span class="k2">}</span><span class="k2">;</span>
<span class="number"> 135</span>    <span class="k1">static</span> <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>title <span class="k3">=</span> <span class="s">"FTB's little OpenGL example - ARGB extension by WXD"</span><span class="k2">;</span>
<span class="number"> 136</span>
<span class="number"> 137</span>    Xdisplay <span class="k3">=</span> XOpenDisplay<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>Xdisplay<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 139</span>        fatalError<span class="k2">(</span><span class="s">"Couldn't connect to X server\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>    <span class="k2">}</span>
<span class="number"> 141</span>    Xscreen <span class="k3">=</span> DefaultScreen<span class="k2">(</span>Xdisplay<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</span>    Xroot <span class="k3">=</span> RootWindow<span class="k2">(</span>Xdisplay, Xscreen<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>
<span class="number"> 144</span>    fbconfigs <span class="k3">=</span> glXChooseFBConfig<span class="k2">(</span>Xdisplay, Xscreen, VisData, <span class="k3">&amp;</span>numfbconfigs<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 145</span>    fbconfig <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 146</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>numfbconfigs<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 147</span>        visual <span class="k3">=</span> <span class="k2">(</span>XVisualInfo<span class="k3">*</span><span class="k2">)</span> glXGetVisualFromFBConfig<span class="k2">(</span>Xdisplay, fbconfigs<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>        <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>visual<span class="k2">)</span>
<span class="number"> 149</span>            <span class="k1">continue</span><span class="k2">;</span>
<span class="number"> 150</span>
<span class="number"> 151</span>        pict_format <span class="k3">=</span> XRenderFindVisualFormat<span class="k2">(</span>Xdisplay, visual-&gt;visual<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 152</span>        <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>pict_format<span class="k2">)</span>
<span class="number"> 153</span>            <span class="k1">continue</span><span class="k2">;</span>
<span class="number"> 154</span>
<span class="number"> 155</span>        fbconfig <span class="k3">=</span> fbconfigs<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 156</span>        <span class="k1">if</span><span class="k2">(</span>pict_format-&gt;direct.alphaMask <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 157</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 158</span>        <span class="k2">}</span>
<span class="number"> 159</span>    <span class="k2">}</span>
<span class="number"> 160</span>
<span class="number"> 161</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>fbconfig<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 162</span>        fatalError<span class="k2">(</span><span class="s">"No matching FB config found"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 163</span>    <span class="k2">}</span>
<span class="number"> 164</span>
<span class="number"> 165</span>    describe_fbconfig<span class="k2">(</span>fbconfig<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 166</span>
<span class="number"> 167</span>    <span class="c">/* Create a colormap - only needed on some X clients, eg. IRIX */</span>
<span class="number"> 168</span>    cmap <span class="k3">=</span> XCreateColormap<span class="k2">(</span>Xdisplay, Xroot, visual-&gt;visual, AllocNone<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>
<span class="number"> 170</span>    attr.colormap <span class="k3">=</span> cmap<span class="k2">;</span>
<span class="number"> 171</span>    attr.background_pixmap <span class="k3">=</span> None<span class="k2">;</span>
<span class="number"> 172</span>    attr.border_pixmap <span class="k3">=</span> None<span class="k2">;</span>
<span class="number"> 173</span>    attr.border_pixel <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 174</span>    attr.event_mask <span class="k3">=</span>
<span class="number"> 175</span>        StructureNotifyMask <span class="k3">|</span>
<span class="number"> 176</span>        EnterWindowMask <span class="k3">|</span>
<span class="number"> 177</span>        LeaveWindowMask <span class="k3">|</span>
<span class="number"> 178</span>        ExposureMask <span class="k3">|</span>
<span class="number"> 179</span>        ButtonPressMask <span class="k3">|</span>
<span class="number"> 180</span>        ButtonReleaseMask <span class="k3">|</span>
<span class="number"> 181</span>        OwnerGrabButtonMask <span class="k3">|</span>
<span class="number"> 182</span>        KeyPressMask <span class="k3">|</span>
<span class="number"> 183</span>        KeyReleaseMask<span class="k2">;</span>
<span class="number"> 184</span>
<span class="number"> 185</span>    attr_mask <span class="k3">=</span>
<span class="number"> 186</span>        CWBackPixmap<span class="k3">|</span>
<span class="number"> 187</span>        CWColormap<span class="k3">|</span>
<span class="number"> 188</span>        CWBorderPixel<span class="k3">|</span>
<span class="number"> 189</span>        CWEventMask<span class="k2">;</span>
<span class="number"> 190</span>
<span class="number"> 191</span>    width <span class="k3">=</span> DisplayWidth<span class="k2">(</span>Xdisplay, DefaultScreen<span class="k2">(</span>Xdisplay<span class="k2">)</span><span class="k2">)</span><span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 192</span>    height <span class="k3">=</span> DisplayHeight<span class="k2">(</span>Xdisplay, DefaultScreen<span class="k2">(</span>Xdisplay<span class="k2">)</span><span class="k2">)</span><span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 193</span>    x<span class="k3">=</span>width<span class="k3">/</span><span class="n">2</span>, y<span class="k3">=</span>height<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 194</span>
<span class="number"> 195</span>    window_handle <span class="k3">=</span> XCreateWindow<span class="k2">(</span>  Xdisplay,
<span class="number"> 196</span>                    Xroot,
<span class="number"> 197</span>                    x, y, width, height,
<span class="number"> 198</span>                    <span class="n">0</span>,
<span class="number"> 199</span>                    visual-&gt;depth,
<span class="number"> 200</span>                    InputOutput,
<span class="number"> 201</span>                    visual-&gt;visual,
<span class="number"> 202</span>                    attr_mask, <span class="k3">&amp;</span>attr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 203</span>
<span class="number"> 204</span>    <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span>window_handle <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 205</span>        fatalError<span class="k2">(</span><span class="s">"Couldn't create the window\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 206</span>    <span class="k2">}</span>
<span class="number"> 207</span>
<span class="number"> 208</span><span class="p">#if USE_GLX_CREATE_WINDOW</span>
<span class="number"> 209</span>    <span class="k1">int</span> glXattr<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> None <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 210</span>    glX_window_handle <span class="k3">=</span> glXCreateWindow<span class="k2">(</span>Xdisplay, fbconfig, window_handle, glXattr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 211</span>    <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span>glX_window_handle <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 212</span>        fatalError<span class="k2">(</span><span class="s">"Couldn't create the GLX window\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 213</span>    <span class="k2">}</span>
<span class="number"> 214</span><span class="p">#else</span>
<span class="number"> 215</span>    glX_window_handle <span class="k3">=</span> window_handle<span class="k2">;</span>
<span class="number"> 216</span><span class="p">#endif</span>
<span class="number"> 217</span>
<span class="number"> 218</span>    textprop.value <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span><span class="k2">)</span>title<span class="k2">;</span>
<span class="number"> 219</span>    textprop.encoding <span class="k3">=</span> XA_STRING<span class="k2">;</span>
<span class="number"> 220</span>    textprop.format <span class="k3">=</span> <span class="n">8</span><span class="k2">;</span>
<span class="number"> 221</span>    textprop.nitems <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>title<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 222</span>
<span class="number"> 223</span>    hints.x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number"> 224</span>    hints.y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 225</span>    hints.width <span class="k3">=</span> width<span class="k2">;</span>
<span class="number"> 226</span>    hints.height <span class="k3">=</span> height<span class="k2">;</span>
<span class="number"> 227</span>    hints.flags <span class="k3">=</span> USPosition<span class="k3">|</span>USSize<span class="k2">;</span>
<span class="number"> 228</span>
<span class="number"> 229</span>    startup_state <span class="k3">=</span> XAllocWMHints<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 230</span>    startup_state-&gt;initial_state <span class="k3">=</span> NormalState<span class="k2">;</span>
<span class="number"> 231</span>    startup_state-&gt;flags <span class="k3">=</span> StateHint<span class="k2">;</span>
<span class="number"> 232</span>
<span class="number"> 233</span>    XSetWMProperties<span class="k2">(</span>Xdisplay, window_handle,<span class="k3">&amp;</span>textprop, <span class="k3">&amp;</span>textprop,
<span class="number"> 234</span>            NULL, <span class="n">0</span>,
<span class="number"> 235</span>            <span class="k3">&amp;</span>hints,
<span class="number"> 236</span>            startup_state,
<span class="number"> 237</span>            NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 238</span>
<span class="number"> 239</span>    XFree<span class="k2">(</span>startup_state<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 240</span>
<span class="number"> 241</span>    XMapWindow<span class="k2">(</span>Xdisplay, window_handle<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 242</span>    XIfEvent<span class="k2">(</span>Xdisplay, <span class="k3">&amp;</span>event, WaitForMapNotify, <span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span><span class="k3">&amp;</span>window_handle<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 243</span>
<span class="number"> 244</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>del_atom <span class="k3">=</span> XInternAtom<span class="k2">(</span>Xdisplay, <span class="s">"WM_DELETE_WINDOW"</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> None<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 245</span>        XSetWMProtocols<span class="k2">(</span>Xdisplay, window_handle, <span class="k3">&amp;</span>del_atom, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 246</span>    <span class="k2">}</span>
<span class="number"> 247</span><span class="k2">}</span>
<span class="number"> 248</span>
<span class="number"> 249</span><span class="k1">static</span> <span class="k1">int</span> ctxErrorHandler<span class="k2">(</span> Display <span class="k3">*</span>dpy, XErrorEvent <span class="k3">*</span>ev <span class="k2">)</span>
<span class="number"> 250</span><span class="k2">{</span>
<span class="number"> 251</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_348.html" target="_blank">fputs</a><span class="k2">(</span><span class="s">"Error at context creation"</span>, stderr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 252</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 253</span><span class="k2">}</span>
<span class="number"> 254</span>
<span class="number"> 255</span><span class="k1">static</span> <span class="k1">void</span> createTheRenderContext<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 256</span><span class="k2">{</span>
<span class="number"> 257</span>    <span class="k1">int</span> dummy<span class="k2">;</span>
<span class="number"> 258</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>glXQueryExtension<span class="k2">(</span>Xdisplay, <span class="k3">&amp;</span>dummy, <span class="k3">&amp;</span>dummy<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 259</span>        fatalError<span class="k2">(</span><span class="s">"OpenGL not supported by X server\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 260</span>    <span class="k2">}</span>
<span class="number"> 261</span>
<span class="number"> 262</span><span class="p">#if USE_GLX_CREATE_CONTEXT_ATTRIB</span>
<span class="number"> 263</span>    <span class="p">#define GLX_CONTEXT_MAJOR_VERSION_ARB       0x2091</span>
<span class="number"> 264</span>    <span class="p">#define GLX_CONTEXT_MINOR_VERSION_ARB       0x2092</span>
<span class="number"> 265</span>    render_context <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 266</span>    <span class="k1">if</span><span class="k2">(</span> isExtensionSupported<span class="k2">(</span> glXQueryExtensionsString<span class="k2">(</span>Xdisplay, DefaultScreen<span class="k2">(</span>Xdisplay<span class="k2">)</span><span class="k2">)</span>, <span class="s">"GLX_ARB_create_context"</span> <span class="k2">)</span> <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 267</span>        <span class="k1">typedef</span> GLXContext <span class="k2">(</span><span class="k3">*</span>glXCreateContextAttribsARBProc<span class="k2">)</span><span class="k2">(</span>Display<span class="k3">*</span>, GLXFBConfig, GLXContext, Bool, <span class="k1">const</span> <span class="k1">int</span><span class="k3">*</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 268</span>        glXCreateContextAttribsARBProc glXCreateContextAttribsARB <span class="k3">=</span> <span class="k2">(</span>glXCreateContextAttribsARBProc<span class="k2">)</span>glXGetProcAddressARB<span class="k2">(</span> <span class="k2">(</span><span class="k1">const</span> GLubyte <span class="k3">*</span><span class="k2">)</span> <span class="s">"glXCreateContextAttribsARB"</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 269</span>        <span class="k1">if</span><span class="k2">(</span> glXCreateContextAttribsARB <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 270</span>            <span class="k1">int</span> context_attribs<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span>
<span class="number"> 271</span>            <span class="k2">{</span>
<span class="number"> 272</span>                GLX_CONTEXT_MAJOR_VERSION_ARB, <span class="n">3</span>,
<span class="number"> 273</span>                GLX_CONTEXT_MINOR_VERSION_ARB, <span class="n">0</span>,
<span class="number"> 274</span>                <span class="c">//GLX_CONTEXT_FLAGS_ARB        , GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,</span>
<span class="number"> 275</span>                None
<span class="number"> 276</span>            <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 277</span>
<span class="number"> 278</span>            <span class="k1">int</span> <span class="k2">(</span><span class="k3">*</span>oldHandler<span class="k2">)</span><span class="k2">(</span>Display<span class="k3">*</span>, XErrorEvent<span class="k3">*</span><span class="k2">)</span> <span class="k3">=</span> XSetErrorHandler<span class="k2">(</span><span class="k3">&amp;</span>ctxErrorHandler<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 279</span>
<span class="number"> 280</span>            render_context <span class="k3">=</span> glXCreateContextAttribsARB<span class="k2">(</span> Xdisplay, fbconfig, <span class="n">0</span>, True, context_attribs <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 281</span>
<span class="number"> 282</span>            XSync<span class="k2">(</span> Xdisplay, False <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 283</span>            XSetErrorHandler<span class="k2">(</span> oldHandler <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 284</span>
<span class="number"> 285</span>            <a href="http://www.delorie.com/djgpp/doc/libc/libc_348.html" target="_blank">fputs</a><span class="k2">(</span><span class="s">"glXCreateContextAttribsARB failed"</span>, stderr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 286</span>        <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 287</span>            <a href="http://www.delorie.com/djgpp/doc/libc/libc_348.html" target="_blank">fputs</a><span class="k2">(</span><span class="s">"glXCreateContextAttribsARB could not be retrieved"</span>, stderr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 288</span>        <span class="k2">}</span>
<span class="number"> 289</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 290</span>            <a href="http://www.delorie.com/djgpp/doc/libc/libc_348.html" target="_blank">fputs</a><span class="k2">(</span><span class="s">"glXCreateContextAttribsARB not supported"</span>, stderr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 291</span>    <span class="k2">}</span>
<span class="number"> 292</span>
<span class="number"> 293</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>render_context<span class="k2">)</span>
<span class="number"> 294</span>    <span class="k2">{</span>
<span class="number"> 295</span><span class="p">#else</span>
<span class="number"> 296</span>    <span class="k2">{</span>
<span class="number"> 297</span><span class="p">#endif</span>
<span class="number"> 298</span>        render_context <span class="k3">=</span> glXCreateNewContext<span class="k2">(</span>Xdisplay, fbconfig, GLX_RGBA_TYPE, <span class="n">0</span>, True<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 299</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>render_context<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 300</span>            fatalError<span class="k2">(</span><span class="s">"Failed to create a GL context\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 301</span>        <span class="k2">}</span>
<span class="number"> 302</span>    <span class="k2">}</span>
<span class="number"> 303</span>
<span class="number"> 304</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>glXMakeContextCurrent<span class="k2">(</span>Xdisplay, glX_window_handle, glX_window_handle, render_context<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 305</span>        fatalError<span class="k2">(</span><span class="s">"glXMakeCurrent failed for window\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 306</span>    <span class="k2">}</span>
<span class="number"> 307</span><span class="k2">}</span>
<span class="number"> 308</span>
<span class="number"> 309</span><span class="k1">static</span> <span class="k1">int</span> updateTheMessageQueue<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 310</span><span class="k2">{</span>
<span class="number"> 311</span>    XEvent event<span class="k2">;</span>
<span class="number"> 312</span>    XConfigureEvent <span class="k3">*</span>xc<span class="k2">;</span>
<span class="number"> 313</span>
<span class="number"> 314</span>    <span class="k1">while</span> <span class="k2">(</span>XPending<span class="k2">(</span>Xdisplay<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 315</span>    <span class="k2">{</span>
<span class="number"> 316</span>        XNextEvent<span class="k2">(</span>Xdisplay, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 317</span>        <span class="k1">switch</span> <span class="k2">(</span>event.type<span class="k2">)</span>
<span class="number"> 318</span>        <span class="k2">{</span>
<span class="number"> 319</span>        <span class="k1">case</span> ClientMessage:
<span class="number"> 320</span>            <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span><span class="k2">)</span>event.xclient.data.l<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> del_atom<span class="k2">)</span>
<span class="number"> 321</span>            <span class="k2">{</span>
<span class="number"> 322</span>                <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 323</span>            <span class="k2">}</span>
<span class="number"> 324</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 325</span>
<span class="number"> 326</span>        <span class="k1">case</span> ConfigureNotify:
<span class="number"> 327</span>            xc <span class="k3">=</span> <span class="k3">&amp;</span><span class="k2">(</span>event.xconfigure<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 328</span>            width <span class="k3">=</span> xc-&gt;width<span class="k2">;</span>
<span class="number"> 329</span>            height <span class="k3">=</span> xc-&gt;height<span class="k2">;</span>
<span class="number"> 330</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 331</span>        <span class="k2">}</span>
<span class="number"> 332</span>    <span class="k2">}</span>
<span class="number"> 333</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 334</span><span class="k2">}</span>
<span class="number"> 335</span>
<span class="number"> 336</span><span class="c">/*  6----7</span>
<span class="number"> 337</span><span class="c">   /|   /|</span>
<span class="number"> 338</span><span class="c">  3----2 |</span>
<span class="number"> 339</span><span class="c">  | 5--|-4</span>
<span class="number"> 340</span><span class="c">  |/   |/</span>
<span class="number"> 341</span><span class="c">  0----1</span>
<span class="number"> 342</span><span class="c"></span>
<span class="number"> 343</span><span class="c">*/</span>
<span class="number"> 344</span>
<span class="number"> 345</span>GLfloat cube_vertices<span class="k2">[</span><span class="k2">]</span><span class="k2">[</span><span class="n">8</span><span class="k2">]</span> <span class="k3">=</span>  <span class="k2">{</span>
<span class="number"> 346</span>    <span class="c">/*  X     Y     Z   Nx   Ny   Nz    S    T */</span>
<span class="number"> 347</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 0</span>
<span class="number"> 348</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 1</span>
<span class="number"> 349</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 2</span>
<span class="number"> 350</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 3</span>
<span class="number"> 351</span>
<span class="number"> 352</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 4</span>
<span class="number"> 353</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 5</span>
<span class="number"> 354</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 6</span>
<span class="number"> 355</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 7</span>
<span class="number"> 356</span>
<span class="number"> 357</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 5</span>
<span class="number"> 358</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 0</span>
<span class="number"> 359</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 3</span>
<span class="number"> 360</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 6</span>
<span class="number"> 361</span>
<span class="number"> 362</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 1</span>
<span class="number"> 363</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 4</span>
<span class="number"> 364</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 7</span>
<span class="number"> 365</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 2</span>
<span class="number"> 366</span>
<span class="number"> 367</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">0</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 5</span>
<span class="number"> 368</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">0</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 4</span>
<span class="number"> 369</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>,  <span class="n">0</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 1</span>
<span class="number"> 370</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>,  <span class="n">0</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 0</span>
<span class="number"> 371</span>
<span class="number"> 372</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>,  <span class="n">0</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 3</span>
<span class="number"> 373</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>,  <span class="n">0</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 2</span>
<span class="number"> 374</span>    <span class="k2">{</span> <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">0</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 7</span>
<span class="number"> 375</span>    <span class="k2">{</span><span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>.<span class="n">0</span>,  <span class="n">0</span>.<span class="n">0</span>,  <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">}</span>, <span class="c">// 6</span>
<span class="number"> 376</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 377</span>
<span class="number"> 378</span><span class="k1">static</span> <span class="k1">void</span> draw_cube<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number"> 379</span><span class="k2">{</span>
<span class="number"> 380</span>    glEnableClientState<span class="k2">(</span>GL_VERTEX_ARRAY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 381</span>    glEnableClientState<span class="k2">(</span>GL_NORMAL_ARRAY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 382</span>    glEnableClientState<span class="k2">(</span>GL_TEXTURE_COORD_ARRAY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 383</span>
<span class="number"> 384</span>    glVertexPointer<span class="k2">(</span><span class="n">3</span>, GL_FLOAT, <span class="k1">sizeof</span><span class="k2">(</span>GLfloat<span class="k2">)</span> <span class="k3">*</span> <span class="n">8</span>, <span class="k3">&amp;</span>cube_vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 385</span>    glNormalPointer<span class="k2">(</span>GL_FLOAT, <span class="k1">sizeof</span><span class="k2">(</span>GLfloat<span class="k2">)</span> <span class="k3">*</span> <span class="n">8</span>, <span class="k3">&amp;</span>cube_vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 386</span>    glTexCoordPointer<span class="k2">(</span><span class="n">2</span>, GL_FLOAT, <span class="k1">sizeof</span><span class="k2">(</span>GLfloat<span class="k2">)</span> <span class="k3">*</span> <span class="n">8</span>, <span class="k3">&amp;</span>cube_vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">[</span><span class="n">6</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 387</span>
<span class="number"> 388</span>    glDrawArrays<span class="k2">(</span>GL_QUADS, <span class="n">0</span>, <span class="n">24</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 389</span><span class="k2">}</span>
<span class="number"> 390</span>
<span class="number"> 391</span><span class="k1">float</span> <span class="k1">const</span> light0_dir<span class="k2">[</span><span class="k2">]</span><span class="k3">=</span><span class="k2">{</span><span class="n">0</span>,<span class="n">1</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 392</span><span class="k1">float</span> <span class="k1">const</span> light0_color<span class="k2">[</span><span class="k2">]</span><span class="k3">=</span><span class="k2">{</span><span class="n">78</span>.<span class="k3">/</span><span class="n">255</span>., <span class="n">80</span>.<span class="k3">/</span><span class="n">255</span>., <span class="n">184</span>.<span class="k3">/</span><span class="n">255</span>.,<span class="n">1</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 393</span>
<span class="number"> 394</span><span class="k1">float</span> <span class="k1">const</span> light1_dir<span class="k2">[</span><span class="k2">]</span><span class="k3">=</span><span class="k2">{</span><span class="k3">-</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 395</span><span class="k1">float</span> <span class="k1">const</span> light1_color<span class="k2">[</span><span class="k2">]</span><span class="k3">=</span><span class="k2">{</span><span class="n">255</span>.<span class="k3">/</span><span class="n">255</span>., <span class="n">220</span>.<span class="k3">/</span><span class="n">255</span>., <span class="n">97</span>.<span class="k3">/</span><span class="n">255</span>.,<span class="n">1</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 396</span>
<span class="number"> 397</span><span class="k1">float</span> <span class="k1">const</span> light2_dir<span class="k2">[</span><span class="k2">]</span><span class="k3">=</span><span class="k2">{</span><span class="n">0</span>,<span class="k3">-</span><span class="n">1</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 398</span><span class="k1">float</span> <span class="k1">const</span> light2_color<span class="k2">[</span><span class="k2">]</span><span class="k3">=</span><span class="k2">{</span><span class="n">31</span>.<span class="k3">/</span><span class="n">255</span>., <span class="n">75</span>.<span class="k3">/</span><span class="n">255</span>., <span class="n">16</span>.<span class="k3">/</span><span class="n">255</span>.,<span class="n">1</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 399</span>
<span class="number"> 400</span><span class="k1">static</span> <span class="k1">void</span> redrawTheWindow<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 401</span><span class="k2">{</span>
<span class="number"> 402</span>    <span class="k1">float</span> <span class="k1">const</span> aspect <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>width <span class="k3">/</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>height<span class="k2">;</span>
<span class="number"> 403</span>
<span class="number"> 404</span>    <span class="k1">static</span> <span class="k1">float</span> a<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 405</span>    <span class="k1">static</span> <span class="k1">float</span> b<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 406</span>    <span class="k1">static</span> <span class="k1">float</span> c<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 407</span>
<span class="number"> 408</span>    glDrawBuffer<span class="k2">(</span>GL_BACK<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 409</span>
<span class="number"> 410</span>    glViewport<span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, width, height<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 411</span>
<span class="number"> 412</span>    <span class="c">// Clear with alpha = 0.0, i.e. full transparency</span>
<span class="number"> 413</span>        glClearColor<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 414</span>    glClear<span class="k2">(</span>GL_COLOR_BUFFER_BIT<span class="k3">|</span>GL_DEPTH_BUFFER_BIT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 415</span>
<span class="number"> 416</span>    glMatrixMode<span class="k2">(</span>GL_PROJECTION<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 417</span>    glLoadIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 418</span>    glFrustum<span class="k2">(</span><span class="k3">-</span>aspect, aspect, <span class="k3">-</span><span class="n">1</span>, <span class="n">1</span>, <span class="n">2</span>.<span class="n">5</span>, <span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 419</span>
<span class="number"> 420</span>    glMatrixMode<span class="k2">(</span>GL_MODELVIEW<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 421</span>    glLoadIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 422</span>
<span class="number"> 423</span>    glEnable<span class="k2">(</span>GL_DEPTH_TEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 424</span>    glEnable<span class="k2">(</span>GL_CULL_FACE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 425</span>
<span class="number"> 426</span>    glEnable<span class="k2">(</span>GL_BLEND<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 427</span>    glBlendFunc<span class="k2">(</span>GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 428</span>
<span class="number"> 429</span>    glLightfv<span class="k2">(</span>GL_LIGHT0, GL_POSITION, light0_dir<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 430</span>    glLightfv<span class="k2">(</span>GL_LIGHT0, GL_DIFFUSE, light0_color<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 431</span>
<span class="number"> 432</span>    glLightfv<span class="k2">(</span>GL_LIGHT1, GL_POSITION, light1_dir<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 433</span>    glLightfv<span class="k2">(</span>GL_LIGHT1, GL_DIFFUSE, light1_color<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 434</span>
<span class="number"> 435</span>    glLightfv<span class="k2">(</span>GL_LIGHT2, GL_POSITION, light2_dir<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 436</span>    glLightfv<span class="k2">(</span>GL_LIGHT2, GL_DIFFUSE, light2_color<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 437</span>
<span class="number"> 438</span>    glTranslatef<span class="k2">(</span><span class="n">0</span>., <span class="n">0</span>., <span class="k3">-</span><span class="n">5</span>.<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 439</span>
<span class="number"> 440</span>    glRotatef<span class="k2">(</span>a, <span class="n">1</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 441</span>    glRotatef<span class="k2">(</span>b, <span class="n">0</span>, <span class="n">1</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 442</span>    glRotatef<span class="k2">(</span>c, <span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 443</span>
<span class="number"> 444</span>    glEnable<span class="k2">(</span>GL_LIGHT0<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 445</span>    glEnable<span class="k2">(</span>GL_LIGHT1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 446</span>    glEnable<span class="k2">(</span>GL_LIGHTING<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 447</span>
<span class="number"> 448</span>    glEnable<span class="k2">(</span>GL_COLOR_MATERIAL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 449</span>    glColorMaterial<span class="k2">(</span>GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 450</span>
<span class="number"> 451</span>    glColor4f<span class="k2">(</span><span class="n">1</span>., <span class="n">1</span>., <span class="n">1</span>., <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 452</span>
<span class="number"> 453</span>    glCullFace<span class="k2">(</span>GL_FRONT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 454</span>    draw_cube<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 455</span>    glCullFace<span class="k2">(</span>GL_BACK<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 456</span>    draw_cube<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 457</span>
<span class="number"> 458</span>    a <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_332.html" target="_blank">fmod</a><span class="k2">(</span>a<span class="k3">+</span><span class="n">0</span>.<span class="n">1</span>, <span class="n">360</span>.<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 459</span>    b <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_332.html" target="_blank">fmod</a><span class="k2">(</span>b<span class="k3">+</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">360</span>.<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 460</span>    c <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_332.html" target="_blank">fmod</a><span class="k2">(</span>c<span class="k3">+</span><span class="n">0</span>.<span class="n">25</span>, <span class="n">360</span>.<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 461</span>
<span class="number"> 462</span>    glXSwapBuffers<span class="k2">(</span>Xdisplay, glX_window_handle<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 463</span><span class="k2">}</span>
<span class="number"> 464</span>
<span class="number"> 465</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span>argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="number"> 466</span><span class="k2">{</span>
<span class="number"> 467</span>    createTheWindow<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 468</span>    createTheRenderContext<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 469</span>
<span class="number"> 470</span>    <span class="k1">while</span> <span class="k2">(</span>updateTheMessageQueue<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 471</span>        redrawTheWindow<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 472</span>    <span class="k2">}</span>
<span class="number"> 473</span>
<span class="number"> 474</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 475</span><span class="k2">}</span>
</div></div><p>

Can people with some flavor of *NIX compile this and try it?</p><p>Compilation should be as easy as :</p><pre>
g++ -Wall -g -I/usr/include -c xglx_trans.cpp -o xglx_trans.o

g++ -L/usr/X11/lib -L/usr/lib/x86_64-linux-gnu -o XTranslucency xglx_trans.o  -lX11 -lGLX -lGLU -lGL -lXrender
</pre><p>

<b>UPDATE</b><br />I know y&#39;all are a bunch of nerds with computers. Help me test this and I&#39;ll give you a free lollipop. <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /></p><p>Windows :<br /><a href="https://www.allegro.cc/files/attachment/612221">https://www.allegro.cc/files/attachment/612221</a> Spinny triangle<br /><a href="https://www.allegro.cc/files/attachment/612219">https://www.allegro.cc/files/attachment/612219</a> This one&#39;s fun</p><p>Linux<br /><a href="https://www.allegro.cc/files/attachment/612224">https://www.allegro.cc/files/attachment/612224</a> Spinny cube
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 04 Dec 2019 22:55:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I tried the Windows example.  The translucency on the triangle was working fine but there was none on the running man.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Thu, 05 Dec 2019 11:24:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="remote-thumbnail"><span class="json">{"name":"lollipop1.jpg","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/8\/48d0423c04adcaa027b88d78ae5a5195.jpg","w":390,"h":600,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/8\/48d0423c04adcaa027b88d78ae5a5195"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/4/8/48d0423c04adcaa027b88d78ae5a5195-240.jpg" alt="lollipop1.jpg" width="240" height="369" /></span></p><p>Interesting, LennyLen. I&#39;ll look into it. What version of Windows are you running?</p><p>The running man example was with a quickly hacked allegro.</p><p>The triangle was clean win32 and opengl with help from wglarb by datenwolf.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 05 Dec 2019 17:41:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617989/1044285#target">Edgar Reynaldo</a> said:</div><div class="quote"><p> Interesting, LennyLen. I&#39;ll look into it. What version of Windows are you running?</p></div></div><p>Windows 10, version 1903, OS build 18362.476
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Thu, 05 Dec 2019 18:37:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m running the same version, and it works for me.... ?</p><p>And I can&#39;t tell the difference between what I did with datenwolf&#39;s wglarb and my hacked allegro.</p><p>So I don&#39;t know why it&#39;s not working. Can you post your allegro.log file for me?</p><p>You can also run it from the command line and see if there are any errors.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 10 Dec 2019 03:06:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617989/1044330#target">Edgar Reynaldo</a> said:</div><div class="quote"><p> I&#39;m running the same version, and it works for me.... ?</p></div></div><p>Is the running man himself supposed to be translucent or is the background just supposed to be transparent? Because if it&#39;s the latter, then it is working.</p><p>There were no errors while running from the command line, and the log file is attached.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Tue, 10 Dec 2019 17:03:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah, good. So it is working. There was no aliasing on the running man, just wanted to see him run around my desktop. So no square window right?</p><p><b>EDIT</b><br />I should note, WGL_TRANSPARENT_ARB is not required at all. It&#39;s a total duck. The only thing necessary for a translucent win32 window is WS_POPUP style and enabling blur behind with DWM (note the invalid margins are important!).</p><p><b>*EDIT</b>*<br />Here&#39;s the same running man demo, but he&#39;s on top, and up and down keys control alpha value, so you can see he&#39;s really translucent.</p><p><a href="https://www.allegro.cc/files/attachment/612232">allegro_trans.7z</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 11 Dec 2019 04:04:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617989/1044336#target">Edgar Reynaldo</a> said:</div><div class="quote"><p> So no square window right?</p></div></div><p>Correct.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> Here&#39;s the same running man demo, but he&#39;s on top, and up and down keys control alpha value, so you can see he&#39;s really translucent.</p></div></div><p>I think you attached the wrong project.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Wed, 11 Dec 2019 16:52:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Derp. Sorry.</p><p><a href="https://www.allegro.cc/files/attachment/612233">distro.7z</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 11 Dec 2019 21:27:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Seems to be working fine.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Thu, 12 Dec 2019 09:43:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>When you turned the alpha down, was it still pretty red on his shoes when he was supposed to be all translucent?</p><p>So because you only need DWM, this also works for DX, so it&#39;s now a win32 translucency function that I&#39;m adding to allegro.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 13 Dec 2019 02:54:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I made a short video of it running while I adjusted the settings:</p><p><div class="media-player youtube"><div style="margin: 1em 2em; background: url(/images/movie.png); width: 180px; height: 100px; text-align: center;"><a href="http://www.allegro.cc//www.youtube.com/watch?v=vHvBQwlMgW0" target="_blank"><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/object/4/6/466fda286b1e4fe0c601c64e79f79ba0.jpg" border="0" alt="video" title="Click to play video" /></a></div></div>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Fri, 13 Dec 2019 06:01:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks to Elias, we can do it on X11 with GLX now too.</p><p>Any OSX users out there? We need your help!</p><p><b>EDIT</b><br />Can anyone on OSX test this code?</p><p><a href="https://stackoverflow.com/questions/34531118/how-can-i-create-a-window-with-transparent-background-with-swift-on-osx#34533768">https://stackoverflow.com/questions/34531118/how-can-i-create-a-window-with-transparent-background-with-swift-on-osx#34533768</a></p><p>Peter Hull? Mark Oates? SiegeLord? Anybuddy?</p><p><b>EDIT2</b><br />Derp. doesn&#39;t anyone use OSX?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 19 Jan 2020 18:59:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ll give it a try. Please keep ping me until I do, as I&#39;m liable to forget <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 20 Jan 2020 12:27:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>SiegeLord - two week bump
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 03 Feb 2020 12:28:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>i download the source code from <a href="https://github.com/EdgarReynaldo/TransAllegro">https://github.com/EdgarReynaldo/TransAllegro</a></p><p>i guess that have all...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (RmBeer2)</author>
		<pubDate>Mon, 17 Feb 2020 23:59:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, that doesn&#39;t have the code. I haven&#39;t submitted it yet.</p><p>All you need is step 4 and 32 bit color backbuffer.</p><p><a href="https://www.allegro.cc/forums/thread/617989/1044177#target">https://www.allegro.cc/forums/thread/617989/1044177#target</a></p><p><b>EDIT</b><br />Just to re-iterate :</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;dwmapi.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;allegro5/allegro_windows.h&gt;</span>
<span class="number">  3</span>...
<span class="number">  4</span>   <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_ALPHA_SIZE , <span class="n">8</span> , ALLEGRO_REQUIRE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>   <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_COLOR_SIZE , <span class="n">32</span> , ALLEGRO_REQUIRE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>   <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_WINDOWED <span class="k3">|</span> ALLEGRO_FRAMELESS<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">800</span>,<span class="n">600</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>...
<span class="number"> 11</span>   HWND hwnd <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>      
<span class="number"> 13</span>   DWM_BLURBEHIND bb <span class="k3">=</span> <span class="k2">{</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 14</span>   
<span class="number"> 15</span>   bb.dwFlags <span class="k3">=</span> DWM_BB_ENABLE<span class="k2">;</span>
<span class="number"> 16</span>   bb.fEnable <span class="k3">=</span> TRUE<span class="k2">;</span>
<span class="number"> 17</span>   bb.hRgnBlur <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 18</span>   HRESULT hr <span class="k3">=</span> DwmEnableBlurBehindWindow<span class="k2">(</span>hwnd, <span class="k3">&amp;</span>bb<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>   <span class="k1">if</span> <span class="k2">(</span>FAILED<span class="k2">(</span>hr<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 20</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Could not enable blur behind."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>   <span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span>   MARGINS margins <span class="k3">=</span> <span class="k2">{</span><span class="k3">-</span><span class="n">1</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 24</span>   DwmExtendFrameIntoClientArea<span class="k2">(</span>hwnd, <span class="k3">&amp;</span>margins<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>...
<span class="number"> 26</span><span class="c">/// Paint to backbuffer using overwrite blender to write the mask, then draw normally</span>
<span class="number"> 27</span>   <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 29 Feb 2020 16:18:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thread bump anyone?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Rodolfo Lam)</author>
		<pubDate>Fri, 06 Mar 2020 09:51:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Downloaded and tried your demo on Windows 10, works well.  Made me chuckle, nicely done.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617989/1044169#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>In all actuality, once you get past all the misinformation and crap on the internet, it&#39;s actually quite easy.</p></div></div><p>

Boy, you got that right!  There&#39;s a lot of legacy, deprecated code examples out there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 06 Mar 2020 10:58:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can&#39;t wait until it&#39;s mainlined. I hope it&#39;ll ! <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Tue, 10 Mar 2020 12:48:05 +0000</pubDate>
	</item>
</rss>
