<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>enable_triple_buffer - segmentation error</title>
		<link>http://www.allegro.cc/forums/view/567954</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 20 Feb 2006 21:01:14 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m trying to have three different methods of updating screen - double buffer, page flipping and triple buffer. Basicly I went to allegro examples to get to know how to program them. After getting the ideas I wrote a code to initialize gfx_mode and to redraw the screen using theese three methods. There are two possible ways of initializing the mode. At first it will try to initialize triple buffer, then if gfx_card don&#39;t support it it will try to init page flip and at last double buffer. The second way is manualy typing a request as program parameter - this will override checking of gfx_capabilities &amp; GFX_CAN_TRIPLE_BUFFER. When I manualy specify the mode everything goes perfectly. All three modes are working without problems (well under GFX_SAFE only double buffer works because page flip and triple buffer says that they don&#39;t have enough memory). But the problem begins when I let the program to set it automaticaly. In the beggining it uses this code to recognise if gfx card is capable of using triple buffer:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">if</span><span class="k2">(</span>update_mode <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">{</span>  <span class="c">// pokud neni pouzit override prikazem</span></td></tr><tr><td class="number">2</td><td>  <span class="k1">if</span><span class="k2">(</span>logging<span class="k2">)</span></td></tr><tr><td class="number">3</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"&gt; -Checking triple buffer support"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  <span class="c">/* zjistime jestli je mozno pouzit tripple buffer */</span></td></tr><tr><td class="number">5</td><td>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/gfx_capabilities" target="_blank"><span class="a">gfx_capabilities</span></a> <span class="k3">&amp;</span> GFX_CAN_TRIPLE_BUFFER<span class="k2">)</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">6</td><td>    <span class="k1">if</span><span class="k2">(</span>logging<span class="k2">)</span></td></tr><tr><td class="number">7</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"&gt; -Trying to enable triple buffer"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <a href="http://www.allegro.cc/manual/enable_triple_buffer" target="_blank"><span class="a">enable_triple_buffer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>  <span class="c">// pokud ne zkusime to manualne</span></td></tr><tr><td class="number">9</td><td>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/gfx_capabilities" target="_blank"><span class="a">gfx_capabilities</span></a> <span class="k3">&amp;</span> GFX_CAN_TRIPLE_BUFFER<span class="k2">)</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">10</td><td>      <span class="k1">if</span><span class="k2">(</span>logging<span class="k2">)</span></td></tr><tr><td class="number">11</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"&gt; -Triple buffer unsupported"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>      update_mode <span class="k3">=</span> PFLIP<span class="k2">;</span>  <span class="c">// a pokud vse selze pouzijeme page flipping</span></td></tr><tr><td class="number">13</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">14</td><td>  <span class="k2">}</span><span class="k1">else</span><span class="k2">{</span></td></tr><tr><td class="number">15</td><td>    <span class="k1">if</span><span class="k2">(</span>logging<span class="k2">)</span></td></tr><tr><td class="number">16</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"&gt; -Triple buffer is supported"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    update_mode <span class="k3">=</span> TBUF<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
It&#39;s very similar to ex3buf code from allegro examples, with one exception: this one crashes at calling enable_triple_buffer with &quot;Your program has generated segmentation error: reading or writing to forbidden memory&quot;. And I&#39;m curious why this should be when the ex3buf works perfectly and says that it&#39;s using real triple buffering.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OICW)</author>
		<pubDate>Mon, 20 Feb 2006 01:12:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It might crash if you haven&#39;t done set_gfx_mode(...) yet.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Mon, 20 Feb 2006 01:23:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh holy crap, that would be it. I didn&#39;t expected that I must set gfx mode prior to call enable_triple_buffer. Heh that would mean I have to rewrite the code a bit. Anyway thank you. Can anybody tell me why under GFX_SAFE it is unable to set three video pages? I&#39;m just curious.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OICW)</author>
		<pubDate>Mon, 20 Feb 2006 02:45:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Can anybody tell me why under GFX_SAFE it is unable to set three video pages?
</p></div></div><p>
Because that&#39;s the &quot;safe&quot;, least featured/accelerated driver. In Windows, it&#39;s a windowed GDI mode, which is unable to use video bitmaps (and thus no page flipping or triple buffering).</p><p>What would probably work, would be:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>bpp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>driver, w, h, vw, vh<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="k1">switch</span><span class="k2">(</span>detect_update_method<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">5</td><td><span class="k2">{</span></td></tr><tr><td class="number">6</td><td>   <span class="k1">case</span> TBUF:</td></tr><tr><td class="number">7</td><td>      blah<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>      <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>   <span class="k1">case</span> PFLIP:</td></tr><tr><td class="number">10</td><td>      blah<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>      <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>   <span class="k1">case</span> DBUF:</td></tr><tr><td class="number">13</td><td>      blah<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>      <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>   default:</td></tr><tr><td class="number">16</td><td>      <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_TEXT, <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></td></tr><tr><td class="number">17</td><td>      <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"No suitable update method found!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Mon, 20 Feb 2006 08:43:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you for enlighten me. I changed it to something simillar yesterday and it works.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OICW)</author>
		<pubDate>Mon, 20 Feb 2006 21:01:14 +0000</pubDate>
	</item>
</rss>
