<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Framebuffer?</title>
		<link>http://www.allegro.cc/forums/view/612537</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 10 May 2013 00:29:50 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi. I&#39;ve been playing around with Allegro 5 on my Raspberry Pi for a little while now (enjoying it a lot, by the way). I recently purchased a <a href="http://www.sainsmart.com/arduino-compatibles/module/lcd-module/sainsmart-1-8-spi-lcd-module-with-microsd-led-backlight-for-arduino-mega-atmel-atmega.html">small LCD</a> and followed <a href="http://marks-space.com/2012/11/23/raspberrypi-tft/">this</a> tutorial to get the drivers working for it. Now I&#39;d like to be able to display Allegro happenings to the TFT, but it doesn&#39;t work by default. It plays on my TV through composite cables, but not on the LCD itself. So, I was wondering if there was anyway to make it work with the LCD&#39;s framebuffer, or if it could detect and display on the LCD in any way possible. Is there a way to specify the framebuffer? Do you know?</p><p><b>Edit</b><br />I know that both pygame and SDL have things to allow for the setting of environment settings to use a framebuffer. For example, in pygame I&#39;d use: os.environ[&quot;SDL_FBDEV&quot;] = “/dev/fb1″, and in SDL I&#39;d use: SDL_putenv(“SDL_FBDEV=/dev/fb1″);. Does Allegro have any such feature?</p><p>I appreciate feedback.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Mon, 06 May 2013 06:42:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Allegro 5 on RPi can&#39;t use the framebuffer devices. It uses some broadcom thing to get OpenGL. The only way you could do it (if it is limited to fbdev) is fish out the old GP2X Wiz code from Allegro git history. That had a framebuffer device driver that should work with some tweaks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Mon, 06 May 2013 07:16:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I appreciate your reply, Trent.</p><p>So this &quot;GP2X Wiz code&quot; was under the Allegro 5 development at one point, or was it Allegro 4? Also, where would I find the git repository?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Mon, 06 May 2013 09:28:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Allegro 5. There were some optimized blitting routines for it for 16 bit color... not sure they&#39;re faster than what we have now or not.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Mon, 06 May 2013 09:36:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Interesting. Why was it removed/not included in proceeding versions of Allegro 5? Are there any plans to implement framebuffers to Allegro 5 at any point in the foreseeable future?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Tue, 07 May 2013 00:49:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>By framebuffer, you mean CPU addressable display memory?  You can emulate it with glDrawPixels(), or I think you can still do it with DirectDraw for windows, just blitting a memory buffer to/from the video memory.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 07 May 2013 01:45:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Pretty much, Arthur. Allegro has/uses some OpenGL at its core, right? Would the Allegro 5 library itself support <span class="source-code">glDrawPixels<span class="k2">(</span><span class="k2">)</span></span>, or would I need to include OpenGL in my project alongside Allegro 5?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Tue, 07 May 2013 01:57:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have to </p><pre>#include  &lt;allegro5/allegro_opengl.h&gt;</pre><p> and link in at least the GL library.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 07 May 2013 02:01:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>&quot;...and link in at least the GL library.&quot; The wording on that bit throws me off. Care to elaborate?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Tue, 07 May 2013 02:08:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I know very little about RP, if you&#39;re using GCC, you&#39;d link -lGL at the command line, similar to -lallegro.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 07 May 2013 02:21:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>How is this screen connected? It sounded to me like it wasn&#39;t a regular monitor. If it&#39;s a regular monitor A5 should work with OpenGL. If it&#39;s just something that you plugin USB or something that gives you /de/fb* device, it won&#39;t work with OpenGL. You&#39;ll have to add framebuffer support to A5.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 07 May 2013 03:02:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just for fun, I threw together a little <a href="https://www.allegro.cc/files/attachment/607535">&quot;framebuffer&quot;</a> demo.  First couple seconds, it shows a blank white screen, then it draws a red line and blue line across the screen, and after four seconds, starts filling the screen with a gradient (one scanline per frame) and then after a few more seconds, draws 1000 random pixels per frame.  It&#39;ll end by itself after the screen is full of dots, or hit ESC.</p><p>[EDIT]</p><p>I forgot the compile command</p><pre>gcc -s -O2 -Wall main.c -o t -lallegro -lGL</pre><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 07 May 2013 03:28:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In this case I think we&#39;re talking about the linux framebuffer &quot;fbdev&quot; drivers.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 07 May 2013 03:39:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I remember playing with the framebuffer a bit a couple years ago on Slackware, but what difference does it make?  In that demo I put up last post, you set ints in an array to whatever color you want them to be, then use glDrawPixels() to blit that to the screen.  You could do a software rendered 3D game if you wanted. <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 07 May 2013 03:48:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You use the framebuffer device to actually output to the screen attached to it. And there may not be GL support on those devices.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 07 May 2013 03:52:28 +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/612537/982144#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p> And there may not be GL support on those devices.</p></div></div><p>So A5 for Raspberry Pi uses DirectX?  Or A5 has something else?</p><p>[EDIT]</p><p>After googling a bit, I see that OpenGL ES doesn&#39;t have glDrawPixels().
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 07 May 2013 03:54:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>First off, let me say that I am extremely appreciative of each of you posting your thoughts and ideas on this forum. Secondly, yes, this does pertain to the Linux framebuffer &quot;fbdev&quot; drivers. I have a small (128x160 resolution) TFT LCD attached to my RPi via GPIO pins, and have it attached to /dev/fb1. I followed <a href="http://marks-space.com/2012/11/23/raspberrypi-tft/">this</a> tutorial to get the drivers working.</p><p>Arthur, I appreciate you writing a demo for me. One thing I&#39;ve noticed from examining the source files is that there is no GLES directory on Allegro 5.0.6. So, when I tried your demo, it threw me an error saying... &quot;In file included from main.cpp:4:0:/usr/local/include/allegro5/allegro_opengl.h:63:21: fatal error: GLES/gl.h: No such file or directory compilation terminated.&quot; So, allegro_opengl.h is including GLES/gl.h, but that doesn&#39;t exist as far I can see on 5.0.6.</p><p>[EDIT]</p><p>I took a look at the 5.0.9 release and couldn&#39;t find GLES there either. Perhaps I&#39;m blind? <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Tue, 07 May 2013 04:23:27 +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/612537/982145#target">Arthur Kalliokoski</a> said:</div><div class="quote"><p>So A5 for Raspberry Pi uses DirectX? Or A5 has something else?</p></div></div><p>

After looking at the OPs links, yeah, no the LCD device he&#39;s talking about will NOT have hw GL support of any kind. Its a small TFT lcd riding on the SPI bus. It might be possible that the lcd driver on the tft lcd module might have some acceleration for basic things like clears and basic drawing, but I highly doubt it&#39;ll have anything more than that.</p><p>So basically, all he gets is framebuffer access to the device, which is likely going to be very slow as the SPI bus can be quite slow (1-10MB/s?).</p><p>append2:</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/612537/982150#target">Sheegoth</a> said:</div><div class="quote"><p>I took a look at the 5.0.9 release and couldn&#39;t find GLES there either. Perhaps I&#39;m blind? </p></div></div><p>It&#39;s built into the opengl code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 07 May 2013 05:00:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Actually, I have the console and x11 desktop environment displaying on the LCD at ~60 FPS, so the display itself is actually quite fast. As for the above being built into the OpenGL code, how come it can&#39;t procure the appropriate files upon compilation?</p><p>If Allegro 5 is ultimately unable to draw to my LCD, then the only other options are to 1) Use SDL (which I believe can accomplish this), or 2) Use an LCD with composite jacks, which would act like a regular TV. The issue with the first option is that I enjoy Allegro much more than SDL, and the second is that it would cost me more money and is more cumbersome. So at this point I&#39;m willing to try virtually everything with Allegro.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Tue, 07 May 2013 06:30:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you really sure the LCD is actually updating at 60fps? I somehow doubt it. Some google results hint at 32mhz being the maximum useable SPI frequency on the pi, which <i>might</i> get you 40fps for 16bit color.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/612537/982162#target">Sheegoth</a> said:</div><div class="quote"><p>As for the above being built into the OpenGL code, how come it can&#39;t procure the appropriate files upon compilation?</p></div></div><p>I meant to say that allegro&#39;s OpenGL ES code is part of allegros OpenGL code. They aren&#39;t separate ports, a lot of the code between the two is very similar, so there&#39;s a few ifdefs here and there to determine whether you want GL or GLES for each port.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 07 May 2013 06:59:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><i>&quot;Are you really sure the LCD is actually updating at 60fps? I somehow doubt it. Some google results hint at 32mhz being the maximum useable SPI frequency on the pi, which might get you 40fps for 16bit color.&quot;</i> (Too lazy to properly quote you, sorry. Ha ha.)</p><p>I&#39;m not an expert at frame rates, nor did I properly measure it myself, but it <i>feels</i> and definitely <i>looks</i> like ~60 FPS. I&#39;m quite impressed with the small display, actually. Also keep in mind that LCDs on the Pi itself are quite experimental, so there&#39;s a lot of mention of it floating around, some of which is spot on and others which is outdated.</p><p>As for GL and GLES, do you know what ifdefs I&#39;d need to use to specify one over the other? I&#39;m unexperienced in this respect.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Tue, 07 May 2013 07:19:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There is no GL or GLES support for your LCD device. I am 100% certain of that. </p><p>What you&#39;ll want to do, is try and get Mesa Software support on the fbdev device, and see if allegro plays well with that, or do as Trent suggested and see if you can&#39;t resurrect the old GPX Wiz driver code which knows what a /dev/fbX device is.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 07 May 2013 07:27:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I imagine you mean <a href="http://en.wikipedia.org/wiki/Mesa_(computer_graphics)">this</a> when you mention &quot;Mesa Software&quot;? As for resurrecting old drivers, do you know where the build for that is? I did a few quick searches for it and only came across mention of it on forums and a few entries from Trent&#39;s blog, but not source itself. Perhaps you&#39;d know, Trent?</p><p>Thanks for the continual input, Thomas.</p><p>[EDIT]<br />You&#39;re correct about the lack of GL nor GL ES support on the Pi. I&#39;m looking for the Wiz whatnots now. I pinpointed where Trent&#39;s work on the GP2X Wiz began; it was <a href="http://www.nooskewl.com/blogs/trent?page=13">here</a>. Also, it seems that the last entry in his blog regarding the Wiz was <a href="http://www.nooskewl.com/content/allegro-5-wiz-port-primitives">this</a> one here. At least, the last I&#39;ve seen so far. Cool stuff!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Tue, 07 May 2013 07:40:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You have to go back in git history to find it. There are ways to search old history like git log --name-status. You can narrow the search by looking around those dates of those blog posts. git help &lt;command&gt; and Google will tell you all you need to know to dig it out.</p><p>Ha, scratch that. It was never removed from the repo. It&#39;s in src/gp2xwiz.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 07 May 2013 09:10:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Wha? I could swear you committed a &quot;remove gp2x&quot; changeset. Maybe we&#39;re both crazy. <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 07 May 2013 10:39:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ha ha; Trent, you rock! There it is: wiz_display_fb, wiz_display_opengl, wiz_joystick, and wiz_system! <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /> What I&#39;m really here for is the wiz_display_fb, right; you think it could be modified to support what I have going on?</p><p>[EDIT]<br />Also, people on the Raspberry Pi forum are telling me that the Pi supports both GL and GL ES (there&#39;s even a <a href="http://www.raspberrypi.org/phpBB3/viewforum.php?f=68">sub-forum</a> about it). Yet Allegro on the Pi doesn&#39;t use GL, does it?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Tue, 07 May 2013 20:18:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Allegro uses OpenGL ES. But if I understand this thread right, the question is whether OpenGL ES (not Allegro) can work with your monitor (since it might just send the data to the HDMI port).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Tue, 07 May 2013 20:31:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, I see. Thanks, Elias. Then scratch the GL and GL ES whatnots. I&#39;m looking at the GP2X files now.</p><p>[EDIT]<br />Taking a look at the wiz files, I&#39;ve found a few issues. In wiz_system.c, the inclusion of &quot;allegro5/internal/aintern_gp2xwiz.h&quot; doesn&#39;t exist; the same applies to wiz_display_opengl.c. Also, aintern_bitmap.h and aintern_opengl.h are missing. As a matter of fact, this also applies to wiz_display_fb.c. This comes at no surprise though, as this is older, so it makes sense things go missing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Tue, 07 May 2013 20:41:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In those blog posts I made is the important stuff you need. There should be a libwiz or something like that attached to one post. That has the main bulk of the framebuffer code. Actually it&#39;s based on libcastor which you can probably find for wiz.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 07 May 2013 21:35:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I haven&#39;t yet found the attached file(s) you speak of (still browsing the blog), but I did find libcastor 0.2, which debuted on January the 26th, of 2009. The contents of the libcastor files are opaque to me; I understand C&#39;s constructs and whatnot, but it&#39;s difficult to follow... Aah, I see there&#39;s a readme with documentation links. I&#39;ll explore those for a while.</p><p>[EDIT]<br />The documentation site has a lovely SQL error; nice. Trent, what you did was modeled off of the libcastor files (or perhaps modified off of)?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Wed, 08 May 2013 03:08:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I modified libcastor but only slightly. You should be able to start with that and work from there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Wed, 08 May 2013 03:34:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sounds good; thanks, Trent. I don&#39;t quite know where to start with this, but I&#39;ll give it a go and play with it for a while. Also, on an off-topic question: how long must a thread remain untouched for it to be locked by the system? I&#39;ve gone places before and left threads for a while, only to return and have them locked. I&#39;d rather than not happen here. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Wed, 08 May 2013 09:21:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Threads get locked after 1 week of inactivity. But opening a new thread is no problem and is even encouraged. So don&#39;t worry man. <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Vanneto)</author>
		<pubDate>Wed, 08 May 2013 11:49:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The stale threads are locked to avoid people dredging up stuff that&#39;s several months or years old, and nobody cares about them anymore.  But if you have something truly valuable to say, go ahead and make a new thread.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Wed, 08 May 2013 11:58:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for clearing that up for me! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> On other forums, posting new topics that continue threads which have been locked is deemed as spam, so I wasn&#39;t sure. Thanks for the input.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Wed, 08 May 2013 22:31:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If the thread was locked my a moderator, then yes, continuing it in the same way the thread ended would be seen as spam or against the rules.</p><p>But even in the case it was locked by a moderator, if you continue it on topic, (threads usually get locked by a mod after they go way off topic) then its ok.</p><p>The rules here are fairly lax.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 09 May 2013 05:42:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s good to know, Thomas; thank you. <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /></p><p>Trent, I found some files pertaining to the Wiz on your blog. I don&#39;t know if they are the correct files, but they&#39;re the only ones I&#39;ve found so far. I&#39;m looking them over now, trying to make sense of them. There is hope yet.</p><p>[EDIT]<br />You even were kind enough to upload a bitmap example file for the Wiz. I&#39;ll post it here just for the heck of it.</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 "allegro5/allegro5.h"</span>
<span class="number">   2</span><span class="p">#include "allegro5/a5_iio.h"</span>
<span class="number">   3</span><span class="p">#include "allegro5/a5_primitives.h"</span>
<span class="number">   4</span>
<span class="number">   5</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;stdarg.h&gt;</span>
<span class="number">   7</span>
<span class="number">   8</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">   9</span><span class="k2">{</span>
<span class="number">  10</span>    <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  11</span>    al_init_iio_addon<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  12</span>
<span class="number">  13</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">320</span>, <span class="n">240</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  14</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"rock.tga"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span>    <span class="k1">int</span> i<span class="k2">;</span>
<span class="number">  17</span>    <span class="k1">const</span> <span class="k1">int</span> NUM <span class="k3">=</span> <span class="n">250</span><span class="k2">;</span>
<span class="number">  18</span>
<span class="number">  19</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> v<span class="k2">[</span>NUM<span class="k3">*</span><span class="n">6</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  20</span>
<span class="number">  21</span>    <span class="k1">struct</span> Info <span class="k2">{</span>
<span class="number">  22</span>        <span class="k1">float</span> dx, dy<span class="k2">;</span>
<span class="number">  23</span>        <span class="k1">float</span> a<span class="k2">;</span>
<span class="number">  24</span>        <span class="k1">float</span> maxscale<span class="k2">;</span>
<span class="number">  25</span>        <span class="k1">float</span> currscale<span class="k2">;</span>
<span class="number">  26</span>        <span class="k1">float</span> ds<span class="k2">;</span>
<span class="number">  27</span>        <span class="k1">float</span> x, y<span class="k2">;</span>
<span class="number">  28</span>    <span class="k2">}</span> info<span class="k2">[</span>NUM<span class="k2">]</span><span class="k2">;</span>
<span class="number">  29</span>
<span class="number">  30</span>    <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> NUM<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  31</span>        <span class="k1">int</span> w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  32</span>        <span class="k1">int</span> h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  34</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k2">]</span>.y <span class="k3">=</span> h<span class="k2">;</span>
<span class="number">  35</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k2">]</span>.u <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  36</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k2">]</span>.v <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  37</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k2">]</span>.color <span class="k3">=</span> al_get_prim_color<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>
<span class="number">  39</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  40</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  41</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.u <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  42</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.v <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  43</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.color <span class="k3">=</span> al_get_prim_color<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>
<span class="number">  45</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">2</span><span class="k2">]</span>.x <span class="k3">=</span> w<span class="k2">;</span>
<span class="number">  46</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">2</span><span class="k2">]</span>.y <span class="k3">=</span> h<span class="k2">;</span>
<span class="number">  47</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">2</span><span class="k2">]</span>.u <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  48</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">2</span><span class="k2">]</span>.v <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  49</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">2</span><span class="k2">]</span>.color <span class="k3">=</span> al_get_prim_color<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>
<span class="number">  51</span>
<span class="number">  52</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">3</span><span class="k2">]</span>.x <span class="k3">=</span> w<span class="k2">;</span>
<span class="number">  53</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">3</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  54</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">3</span><span class="k2">]</span>.u <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  55</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">3</span><span class="k2">]</span>.v <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  56</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">3</span><span class="k2">]</span>.color <span class="k3">=</span> al_get_prim_color<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>
<span class="number">  58</span>
<span class="number">  59</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">4</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  60</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">4</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  61</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">4</span><span class="k2">]</span>.u <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  62</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">4</span><span class="k2">]</span>.v <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  63</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">4</span><span class="k2">]</span>.color <span class="k3">=</span> al_get_prim_color<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>
<span class="number">  65</span>
<span class="number">  66</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">5</span><span class="k2">]</span>.x <span class="k3">=</span> w<span class="k2">;</span>
<span class="number">  67</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">5</span><span class="k2">]</span>.y <span class="k3">=</span> h<span class="k2">;</span>
<span class="number">  68</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">5</span><span class="k2">]</span>.u <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  69</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">5</span><span class="k2">]</span>.v <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  70</span>        v<span class="k2">[</span>i<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">5</span><span class="k2">]</span>.color <span class="k3">=</span> al_get_prim_color<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</span>
<span class="number">  72</span>        info<span class="k2">[</span>i<span class="k2">]</span>.dx <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="n">3</span> <span class="k3">-</span> <span class="n">1</span> <span class="k3">*</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % RAND_MAX<span class="k2">)</span> <span class="k3">/</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>RAND_MAX <span class="k3">*</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>        info<span class="k2">[</span>i<span class="k2">]</span>.dy <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="n">3</span> <span class="k3">-</span> <span class="n">1</span> <span class="k3">*</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % RAND_MAX<span class="k2">)</span> <span class="k3">/</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>RAND_MAX <span class="k3">*</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>
<span class="number">  75</span>        info<span class="k2">[</span>i<span class="k2">]</span>.a <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % RAND_MAX<span class="k2">)</span> <span class="k3">/</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>RAND_MAX<span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">2f</span><span class="k2">;</span>
<span class="number">  76</span>        info<span class="k2">[</span>i<span class="k2">]</span>.maxscale <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % RAND_MAX<span class="k2">)</span> <span class="k3">/</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>RAND_MAX<span class="k2">)</span> <span class="k3">*</span> <span class="n">4</span> <span class="k3">+</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  77</span>        info<span class="k2">[</span>i<span class="k2">]</span>.ds <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="n">2</span> ? <span class="n">0</span>.<span class="n">95f</span> <span class="k2">:</span> <span class="n">1</span>.<span class="n">05f</span><span class="k2">;</span>
<span class="number">  78</span>        info<span class="k2">[</span>i<span class="k2">]</span>.currscale <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  79</span>
<span class="number">  80</span>        info<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="n">320</span><span class="k2">;</span>
<span class="number">  81</span>        info<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span> % <span class="n">240</span><span class="k2">;</span>
<span class="number">  82</span>    <span class="k2">}</span>
<span class="number">  83</span>
<span class="number">  84</span>    <span class="k1">long</span> now <span class="k3">=</span> al_current_time<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>
<span class="number">  86</span>    <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="n">60</span><span class="k3">*</span><span class="n">10</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  87</span>        <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</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="k2">;</span>
<span class="number">  88</span>        <span class="k1">int</span> j<span class="k2">;</span>
<span class="number">  89</span>        <span class="k1">for</span> <span class="k2">(</span>j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j <span class="k3">&lt;</span> NUM<span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  90</span>            info<span class="k2">[</span>j<span class="k2">]</span>.currscale <span class="k3">*</span><span class="k3">=</span> info<span class="k2">[</span>j<span class="k2">]</span>.ds<span class="k2">;</span>
<span class="number">  91</span>            <span class="k1">if</span> <span class="k2">(</span>info<span class="k2">[</span>j<span class="k2">]</span>.ds <span class="k3">&lt;</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  92</span>                <span class="k1">if</span> <span class="k2">(</span>info<span class="k2">[</span>j<span class="k2">]</span>.currscale <span class="k3">&lt;</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  93</span>                    info<span class="k2">[</span>j<span class="k2">]</span>.ds <span class="k3">=</span> <span class="n">1</span>.<span class="n">05f</span><span class="k2">;</span>
<span class="number">  94</span>                    info<span class="k2">[</span>j<span class="k2">]</span>.currscale <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  95</span>                <span class="k2">}</span>
<span class="number">  96</span>            <span class="k2">}</span>
<span class="number">  97</span>            <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  98</span>                <span class="k1">if</span> <span class="k2">(</span>info<span class="k2">[</span>j<span class="k2">]</span>.currscale <span class="k3">&gt;</span> info<span class="k2">[</span>j<span class="k2">]</span>.maxscale<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  99</span>                    info<span class="k2">[</span>j<span class="k2">]</span>.ds <span class="k3">=</span> <span class="n">0</span>.<span class="n">95f</span><span class="k2">;</span>
<span class="number"> 100</span>                    info<span class="k2">[</span>j<span class="k2">]</span>.currscale <span class="k3">=</span> info<span class="k2">[</span>j<span class="k2">]</span>.maxscale<span class="k2">;</span>
<span class="number"> 101</span>                <span class="k2">}</span>
<span class="number"> 102</span>            <span class="k2">}</span>
<span class="number"> 103</span>
<span class="number"> 104</span>            <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> t<span class="k2">;</span>
<span class="number"> 105</span>            <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>            <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t, <span class="k3">-</span>v<span class="k2">[</span>j<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.x-8, <span class="k3">-</span>v<span class="k2">[</span>j<span class="k3">*</span><span class="n">6</span><span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.y-8<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 107</span>            <span class="k1">int</span> k<span class="k2">;</span>
<span class="number"> 108</span>            <span class="k1">for</span> <span class="k2">(</span>k <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> k <span class="k3">&lt;</span> <span class="n">6</span><span class="k2">;</span> k<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 109</span>                al_transform_vertex<span class="k2">(</span><span class="k3">&amp;</span>t, <span class="k3">&amp;</span>v<span class="k2">[</span>j<span class="k3">*</span><span class="n">6</span><span class="k3">+</span>k<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>            <span class="k2">}</span>
<span class="number"> 111</span>            <a href="http://www.allegro.cc/manual/al_build_transform"><span class="a">al_build_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t, info<span class="k2">[</span>j<span class="k2">]</span>.x<span class="k3">+</span><span class="n">8</span>, info<span class="k2">[</span>j<span class="k2">]</span>.y<span class="k3">+</span><span class="n">8</span>, info<span class="k2">[</span>j<span class="k2">]</span>.ds,
<span class="number"> 112</span>                info<span class="k2">[</span>j<span class="k2">]</span>.ds, info<span class="k2">[</span>j<span class="k2">]</span>.a<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>            <span class="k1">for</span> <span class="k2">(</span>k <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> k <span class="k3">&lt;</span> <span class="n">6</span><span class="k2">;</span> k<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 114</span>                al_transform_vertex<span class="k2">(</span><span class="k3">&amp;</span>t, <span class="k3">&amp;</span>v<span class="k2">[</span>j<span class="k3">*</span><span class="n">6</span><span class="k3">+</span>k<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>            <span class="k2">}</span>
<span class="number"> 116</span>
<span class="number"> 117</span>            info<span class="k2">[</span>j<span class="k2">]</span>.x <span class="k3">+</span><span class="k3">=</span> info<span class="k2">[</span>j<span class="k2">]</span>.dx <span class="k3">*</span> <span class="n">0</span>.<span class="n">4f</span><span class="k2">;</span>
<span class="number"> 118</span>            info<span class="k2">[</span>j<span class="k2">]</span>.y <span class="k3">+</span><span class="k3">=</span> info<span class="k2">[</span>j<span class="k2">]</span>.dy <span class="k3">*</span> <span class="n">0</span>.<span class="n">4f</span><span class="k2">;</span>
<span class="number"> 119</span>
<span class="number"> 120</span>            <span class="k1">if</span> <span class="k2">(</span>info<span class="k2">[</span>j<span class="k2">]</span>.x <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 121</span>                info<span class="k2">[</span>j<span class="k2">]</span>.dx <span class="k3">=</span> <span class="k3">-</span>info<span class="k2">[</span>j<span class="k2">]</span>.dx<span class="k2">;</span>
<span class="number"> 122</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>info<span class="k2">[</span>j<span class="k2">]</span>.x <span class="k3">&gt;</span> <span class="n">320</span><span class="k2">)</span>
<span class="number"> 123</span>                info<span class="k2">[</span>j<span class="k2">]</span>.dx <span class="k3">=</span> <span class="k3">-</span>info<span class="k2">[</span>j<span class="k2">]</span>.dx<span class="k2">;</span>
<span class="number"> 124</span>
<span class="number"> 125</span>            <span class="k1">if</span> <span class="k2">(</span>info<span class="k2">[</span>j<span class="k2">]</span>.y <span class="k3">&gt;</span> <span class="n">240</span><span class="k2">)</span>
<span class="number"> 126</span>                info<span class="k2">[</span>j<span class="k2">]</span>.dy <span class="k3">=</span> <span class="k3">-</span>info<span class="k2">[</span>j<span class="k2">]</span>.dy<span class="k2">;</span>
<span class="number"> 127</span>            <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>info<span class="k2">[</span>j<span class="k2">]</span>.y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 128</span>                info<span class="k2">[</span>j<span class="k2">]</span>.dy <span class="k3">=</span> <span class="k3">-</span>info<span class="k2">[</span>j<span class="k2">]</span>.dy<span class="k2">;</span>
<span class="number"> 129</span>        <span class="k2">}</span>
<span class="number"> 130</span>        <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>v, bmp, <span class="n">0</span>, NUM<span class="k3">*</span><span class="n">6</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</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>
<span class="number"> 132</span>    <span class="k2">}</span>
<span class="number"> 133</span>
<span class="number"> 134</span>    <span class="k1">long</span> end <span class="k3">=</span> al_current_time<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"FPS=%d\n"</span>, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span><span class="n">600</span><span class="k3">/</span><span class="k2">(</span>end-now<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 136</span>
<span class="number"> 137</span>    <a href="http://www.allegro.cc/manual/al_uninstall_system"><span class="a">al_uninstall_system</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>
<span class="number"> 139</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 140</span><span class="k2">}</span>
<span class="number"> 141</span><a href="http://www.allegro.cc/manual/END_OF_MAIN"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Thu, 09 May 2013 09:08:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, there&#39;s no point in me looking up my modified version of libcastor really. All it did was combine the OpenGL libraries and libcastor and clean it up a little but that&#39;s mostly Wiz specific. If you&#39;re serious about writing a framebuffer driver, look into SDL&#39;s framebuffer code, or optionally libcastor&#39;s. When you get that far, the attached file might help with optimization (too big to inline.)</p><p>That is one file that was removed from the Allegro repo. I believe I got 30-60 fps on Wiz (a very slow system) with these routines.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Thu, 09 May 2013 09:29:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am serious about this, as it&#39;d be quite helpful to me. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> I&#39;m going at it somewhat blind though, so it&#39;ll take some time. I appreciate you giving me these files.</p><p>[EDIT]<br />I&#39;ve been messing around with drawing low-level &quot;graphics&quot; (just colors really) to the framebuffer in C. It&#39;s pretty cool how this stuff works. So basically I&#39;m getting a feel for how this stuff works before I go into attempting to make it work with Allegro. Cool stuff though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Fri, 10 May 2013 00:29:50 +0000</pubDate>
	</item>
</rss>
