<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>graphics | Learn C Games Programming Blog</title>
	<atom:link href="https://learncgames.com/tag/graphics/feed/" rel="self" type="application/rss+xml" />
	<link>https://learncgames.com</link>
	<description>A blog about C, programming games and my ebook(s).</description>
	<lastBuildDate>Sat, 07 Nov 2020 09:56:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://learncgames.com/wp-content/uploads/2020/03/cropped-favicon-32x32.png</url>
	<title>graphics | Learn C Games Programming Blog</title>
	<link>https://learncgames.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">181446779</site>	<item>
		<title>Rogue like &#8211; do you use graphics or text?</title>
		<link>https://learncgames.com/rogue-like-do-you-use-graphics-or-text/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rogue-like-do-you-use-graphics-or-text</link>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Sun, 08 Nov 2020 00:00:11 +0000</pubDate>
				<category><![CDATA[design]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[rogue]]></category>
		<category><![CDATA[text]]></category>
		<guid isPermaLink="false">https://learncgames.com/?p=1739</guid>

					<description><![CDATA[<p>The original rogue used graphics. This was back in the era of terminals and home computers and graphics could be quite limited. So there&#8217;s a tradition of using text. However if you do a google image search for rogue game like I did here, you can see that while many of them are text there [&#8230;]</p>
The post <a href="https://learncgames.com/rogue-like-do-you-use-graphics-or-text/">Rogue like – do you use graphics or text?</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></description>
										<content:encoded><![CDATA[<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:399,&quot;href&quot;:&quot;https:\/\/www.cprogramming.com\/tutorial\/unicode.html&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:400,&quot;href&quot;:&quot;https:\/\/www.compart.com\/en\/unicode\/U+1F47E&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:401,&quot;href&quot;:&quot;https:\/\/www.reddit.com\/r\/roguelikedev\/comments\/2fxaks\/a_compendium_of_ascii_characters_across_roguelikes&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20250306102914\/https:\/\/www.reddit.com\/r\/roguelikedev\/comments\/2fxaks\/a_compendium_of_ascii_characters_across_roguelikes\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 14:43:07&quot;,&quot;http_code&quot;:404},{&quot;date&quot;:&quot;2026-02-16 05:45:33&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-23 12:26:25&quot;,&quot;http_code&quot;:404},{&quot;date&quot;:&quot;2026-02-28 00:27:02&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-13 04:31:06&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-30 18:34:37&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-03 23:03:25&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-13 06:15:57&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-21 18:55:37&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 18:55:37&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;}]'></div>
<p><img fetchpriority="high" decoding="async" class="alignleft size-large wp-image-1740" src="https://learncgames.com/wp-content/uploads/2020/11/roguegames-1024x628.png" alt="Rogue games search " width="1024" height="628" srcset="https://learncgames.com/wp-content/uploads/2020/11/roguegames-1024x628.png 1024w, https://learncgames.com/wp-content/uploads/2020/11/roguegames-300x184.png 300w, https://learncgames.com/wp-content/uploads/2020/11/roguegames-768x471.png 768w, https://learncgames.com/wp-content/uploads/2020/11/roguegames.png 1139w" sizes="(max-width: 1024px) 100vw, 1024px" />The original rogue used graphics. This was back in the era of terminals and home computers and graphics could be quite limited. So there&#8217;s a tradition of using text. However if you do a google image search for rogue game like I did here, you can see that while many of them are text there are a couple that are graphics.</p>
<p><strong>So the question is do you use graphics or text?</strong></p>
<p>Text has the advantage that its just there. All you have to do is choose the appropriate character.</p>
<p>Plus if you use Unicode (<em>always a bit of a pain in C b<a title="Link to C programming about Unicode" href="https://www.cprogramming.com/tutorial/unicode.html" target="_blank" rel="nofollow noopener noreferrer">ut doable</a></em>) then you have access to hundreds of thousands of different characters. Like this one:</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f47e.png" alt="👾" class="wp-smiley" style="height: 1em; max-height: 1em;" />. Which is actually these</p>
<p><code class="" data-line="">&amp;#128126;</code></p>
<p><code class="" data-line="">&amp;#x1F47E;</code></p>
<p>More information about this one <a title="Link to Compart.com" href="https://www.compart.com/en/unicode/U+1F47E" target="_blank" rel="nofollow noopener noreferrer">from here</a>.</p>
<p>Graphics on the other hand can be a lot more colourful but you have to get them drawn, or acquire them from somewhere like kenney.nl. So not an easy one to decide. If I had the resources I&#8217;d use graphics, but I&#8217;ll keep to the tradition of using Text.</p>
<p><strong>A tip. </strong>When you have a question like &#8220;What characters are used in rogue&#8221; just try it. There is so much information on the web that there&#8217;s a good chance that someone will have done it. I&#8217;m finding this more and more and sure enough, I found <a title="Link to a compendium of rogue characters on Reddit" href="https://www.reddit.com/r/roguelikedev/comments/2fxaks/a_compendium_of_ascii_characters_across_roguelikes/" target="_blank" rel="nofollow noopener noreferrer">this on Reddit.</a> How would you have ever found that out before the web existed?</p>The post <a href="https://learncgames.com/rogue-like-do-you-use-graphics-or-text/">Rogue like – do you use graphics or text?</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1739</post-id>	</item>
		<item>
		<title>How to create a big image from a number of smaller ones</title>
		<link>https://learncgames.com/how-to-create-a-big-image-from-a-number-of-smaller-ones/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-create-a-big-image-from-a-number-of-smaller-ones</link>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Sat, 01 Aug 2020 23:00:59 +0000</pubDate>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[graphics]]></category>
		<guid isPermaLink="false">https://learncgames.com/?p=1095</guid>

					<description><![CDATA[<p>After the day before yesterday&#8217;s experiment showed that loading a single larger image on an Android phone is nearly three times faster than loading 52 smaller images, I decided to write a short utility program to read all the 52 individual card files and create one file with them laid out neatly in four rows [&#8230;]</p>
The post <a href="https://learncgames.com/how-to-create-a-big-image-from-a-number-of-smaller-ones/">How to create a big image from a number of smaller ones</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></description>
										<content:encoded><![CDATA[<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:478,&quot;href&quot;:&quot;http:\/\/www.libpng.org\/pub\/png\/libpng.html&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260204064028\/https:\/\/www.libpng.org\/pub\/png\/libpng.html&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 15:15:57&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-12 02:14:17&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-22 09:31:09&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-27 23:50:28&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-11 17:26:42&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-17 04:48:23&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-26 10:35:19&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-29 14:35:45&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-03 10:29:09&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-06 22:53:19&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-10 02:01:13&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-14 23:03:15&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-19 22:48:01&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-19 22:48:01&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:601,&quot;href&quot;:&quot;http:\/\/acbl.mybigcommerce.com\/52-playing-cards&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251017150451\/https:\/\/acbl.mybigcommerce.com\/52-playing-cards\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 16:30:33&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-14 12:35:36&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-27 23:50:30&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-06 09:10:22&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-12 00:00:29&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-17 04:48:31&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-26 10:35:29&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-31 02:13:26&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-05 11:15:11&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-09 17:23:49&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-13 18:49:25&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-17 08:46:29&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-04-20 12:22:01&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 12:22:01&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;}]'></div>
<p><img decoding="async" class="alignleft size-full wp-image-1097" src="https://learncgames.com/wp-content/uploads/2020/07/carddeck.png" alt="Card Deck" width="450" height="212" srcset="https://learncgames.com/wp-content/uploads/2020/07/carddeck.png 450w, https://learncgames.com/wp-content/uploads/2020/07/carddeck-300x141.png 300w" sizes="(max-width: 450px) 100vw, 450px" />After the day before yesterday&#8217;s experiment showed that loading a single larger image on an Android phone is <em>nearly three times faster</em> than loading 52 smaller images, I decided to write a short utility program to read all the 52 individual card files and create one file with them laid out neatly in four rows of cards, one row per suite with each card running from Ace to King.</p>
<p>The individual card .png files were all in one folder with two letter filenames rank and suit in capitals like AS.png (Ace of spades), TH.png (Ten of Hearts and so on).</p>
<p>This 62 line C# program reads all 52 files into RAM in a two-dimension array <strong>cards</strong> (<em>original name eh!</em>) in the method <strong>LoadAllImages()</strong> then in BuildOneImage() it writes them out in the four rows into the bitmap <strong>allcards</strong> then saves them out as one .png format file.</p>
<p>C# makes doing this very easy. In C you would have to write your own file format handling code or use a library like <a title="Link to libpng website" href="http://www.libpng.org/pub/png/libpng.html" target="_blank" rel="noopener noreferrer">libpng</a>.</p>
<pre><code class="language-csharp" data-line="">// Author D. Bolton Learncgames.com You are free to use and copy this program as you wish but please leave this line in.
using System;
using System.Drawing;
using System.Drawing.Imaging;

namespace mpics
{
    class Program
    {
        const int CardWidth = 100;
        const int CardHeight = 153;
        const string source = &quot;your path here&quot;; // Path to all 52 card files
        const string dest = &quot;target file here&quot;; // Path + filename for target .png file.
        const string suits = &quot;HCDS&quot;;
        const string ranks = &quot;A23456789TJQK&quot;;

        static Bitmap[,] cards = new Bitmap[13,4];
        static Bitmap allcards = new Bitmap(CardWidth * 13,CardHeight * 4);

        static void Main(string[] args)
        {
            LoadAllImages();
            BuildOneImage();
        }

        private static void BuildOneImage()
        {
            Console.WriteLine();
            var aty = 0.0f;
            using (Graphics g = Graphics.FromImage(allcards))
            {
                for (var y = 0; y &lt; 4; y++)
                {
                    var atx = 0.0f;
                    for (int x = 0; x &lt; 13; x++)
                    {
                        var r = new Rectangle((int)atx, (int)aty, CardWidth, CardHeight);
                        g.DrawImage(cards[x,y],r);
                        atx += CardWidth;
                    }
                    aty += CardHeight;
                }
            }
            allcards.Save(dest, ImageFormat.Png);
        }

        private static void LoadAllImages()
        {
            var i = 0;
            foreach (char c in suits)
            {
                var j = 0;
                foreach (char r in ranks)
                {
                    var s = source + r + c+&quot;.png&quot;;
                    cards[j++,i] = (Bitmap)Bitmap.FromFile(s);
                }
                i++;
            }
        }
    }
}
</code></pre>
<p>Don&#8217;t forget to set the <strong>source</strong> and <strong>dest</strong> path constants. This was compiled in Visual Studio 2019 and run on Windows 10. The only really important thing I found was using the Rectangle r in <strong>BuildOneImage()</strong>. If I used just atx and aty and didn&#8217;t specify the size of card then <strong>DrawImage</strong>() drew much smaller images into the bitmap. I&#8217;m not sure why as the card images when loaded from disk were 100 wide by 153 deep, the same as specified in the constants <strong>CardWidth</strong> and <strong>CardHeight</strong>.</p>
<p>The card images were originally downloaded from the <a title="Link to American Contract Bridge League" href="http://acbl.mybigcommerce.com/52-playing-cards/" target="_blank" rel="noopener noreferrer">American Contract Bridge League</a> but were much bigger so I scaled them first to 100 x 153 pixels. There are many free playing card images on the web but these are one of the nicer sets.</p>The post <a href="https://learncgames.com/how-to-create-a-big-image-from-a-number-of-smaller-ones/">How to create a big image from a number of smaller ones</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1095</post-id>	</item>
		<item>
		<title>A rather powerful C Graphics library</title>
		<link>https://learncgames.com/a-rather-powerful-c-graphics-library/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=a-rather-powerful-c-graphics-library</link>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Mon, 22 Jun 2020 23:00:33 +0000</pubDate>
				<category><![CDATA[C]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[raylib]]></category>
		<guid isPermaLink="false">https://learncgames.com/?p=857</guid>

					<description><![CDATA[<p>I&#8217;m not going to be departing from SDL2 any day soon, but if I were starting from scratch, I would seriously consider raylib.  It ticks many boxes! Written in C(C99). Tick. Cross platform including Raspberry Pi desktop. Tick. Open source and liberal licensing tick. Full 3D support with animated models. Tick. Extensive Sound support. Tick. [&#8230;]</p>
The post <a href="https://learncgames.com/a-rather-powerful-c-graphics-library/">A rather powerful C Graphics library</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></description>
										<content:encoded><![CDATA[<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:281,&quot;href&quot;:&quot;https:\/\/www.raylib.com&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260206133105\/https:\/\/www.raylib.com\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 18:46:50&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-10 13:49:49&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-13 15:37:06&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-16 22:41:30&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-20 12:21:10&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-25 14:58:59&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-28 18:54:02&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-04 10:10:49&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-07 11:25:15&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-11 23:14:54&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-17 11:18:45&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-21 23:31:24&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-26 02:10:24&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-30 11:29:19&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-03 04:01:03&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-06 15:55:21&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-09 16:02:12&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-13 13:33:47&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-17 06:22:35&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-04-20 08:23:45&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-20 08:23:45&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:652,&quot;href&quot;:&quot;https:\/\/github.com\/raysan5\/raylib-games&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260130020545\/https:\/\/github.com\/raysan5\/raylib-games&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 17:11:58&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-13 11:09:58&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-18 15:10:37&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-26 21:34:09&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-04 10:10:48&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-08 04:22:00&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-13 09:06:00&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-19 12:48:36&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-23 11:13:38&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-03 04:00:58&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-07 03:20:57&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-14 19:20:29&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-19 07:55:16&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-23 04:05:10&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-23 04:05:10&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:653,&quot;href&quot;:&quot;https:\/\/github.com\/raysan5\/raylib\/wiki&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260202023944\/https:\/\/github.com\/raysan5\/raylib\/wiki&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 17:12:10&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-13 11:09:52&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-18 15:11:01&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-26 21:34:07&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-04 10:10:48&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-08 04:22:00&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-13 09:06:00&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-23 11:13:38&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-03 04:00:58&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-07 03:20:57&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-15 20:19:58&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-19 07:55:16&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-23 04:05:09&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-23 04:05:09&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:654,&quot;href&quot;:&quot;https:\/\/github.com\/raysan5\/raylib\/wiki\/raylib-data-structures&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260107170845\/https:\/\/github.com\/raysan5\/raylib\/wiki\/raylib-data-structures&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 17:12:13&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-13 11:09:54&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-18 15:10:46&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-24 21:03:33&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-28 18:54:04&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-04 10:10:52&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-08 04:22:01&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-13 09:06:00&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-23 11:13:41&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-03 04:00:57&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-07 03:20:58&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-15 20:19:59&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-19 07:55:18&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-23 04:05:10&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-23 04:05:10&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:655,&quot;href&quot;:&quot;https:\/\/www.raylib.com\/cheatsheet\/cheatsheet.html&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260111075733\/https:\/\/www.raylib.com\/cheatsheet\/cheatsheet.html&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-02-06 17:12:16&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-13 11:09:59&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-18 15:10:39&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-26 21:34:07&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-04 10:10:52&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-08 04:22:01&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-13 09:06:01&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-23 11:13:39&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-03 04:01:00&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-07 03:20:58&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-15 20:20:00&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-19 07:55:20&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-23 04:05:11&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-23 04:05:11&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;}]'></div>
<p><img decoding="async" class="alignleft size-medium wp-image-858" src="https://learncgames.com/wp-content/uploads/2020/06/raylib-300x169.png" alt="Raylib library" width="300" height="169" srcset="https://learncgames.com/wp-content/uploads/2020/06/raylib-300x169.png 300w, https://learncgames.com/wp-content/uploads/2020/06/raylib-768x432.png 768w, https://learncgames.com/wp-content/uploads/2020/06/raylib.png 801w" sizes="(max-width: 300px) 100vw, 300px" />I&#8217;m not going to be departing from SDL2 any day soon, but if I were starting from scratch, I would seriously consider<a title="Link to Raylib website" href="https://www.raylib.com/" target="_blank" rel="nofollow noopener noreferrer"> raylib</a>.  It ticks many boxes!</p>
<ul>
<li>Written in C(C99). Tick.</li>
<li>Cross platform including Raspberry Pi desktop. Tick.</li>
<li>Open source and liberal licensing tick.</li>
<li>Full 3D support with animated models. Tick.</li>
<li>Extensive Sound support. Tick.</li>
<li>Very open license that even allows static linking with closed software. Tick.</li>
<li>Lots of examples. Tick.</li>
</ul>
<p>There&#8217;s even a set of open source games on <a title="Link to Raylib games on GitHub" href="https://github.com/raysan5/raylib-games/" target="_blank" rel="nofollow noopener noreferrer">GitHub</a>. including several that you can play in your browser (HTML5). Documntation is in the form of a 36-page <a title="Link to Raylib Wiki" href="https://github.com/raysan5/raylib/wiki" target="_blank" rel="nofollow noopener noreferrer">Wiki</a>. I took a quick glance through there and was impressed with some of the features. For example, OpenGl can be used directly and not through X11 though that is also available.</p>
<p>Plus full marks for including struct sizes on the <a title="Link to Raylib Wiki data structures page" href="https://github.com/raysan5/raylib/wiki/raylib-data-structures" target="_blank" rel="nofollow noopener noreferrer">data structures</a> page. That&#8217;s not something you often see, nor is instructions for configuring Visual Studio, Visual Studio Cocde, Codeblocks, Eclipse and Sublime Text. The <a title="Link to Raylib cheat sheet" href="https://www.raylib.com/cheatsheet/cheatsheet.html" target="_blank" rel="nofollow noopener noreferrer">cheat sheet</a> (which you can also download as a pdf) gives an idea of the number of functions in Raylib. They cover five pages!</p>The post <a href="https://learncgames.com/a-rather-powerful-c-graphics-library/">A rather powerful C Graphics library</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">857</post-id>	</item>
		<item>
		<title>I&#8217;m tempted to go Nuklear</title>
		<link>https://learncgames.com/im-tempted-to-go-nuklear/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=im-tempted-to-go-nuklear</link>
		
		<dc:creator><![CDATA[David]]></dc:creator>
		<pubDate>Tue, 17 Mar 2020 00:00:01 +0000</pubDate>
				<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Techniques]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[GUI]]></category>
		<guid isPermaLink="false">https://learncgames.com/?p=150</guid>

					<description><![CDATA[<p>Nuklear is a library that is a single-header ANSI C immediate mode cross-platform GUI toolkit. It lets you develop stylish and beautiful GUIs for your applications. It&#8217;s written in C but any programming language that can work with C such as C++ or Python can also use it. Importantly, it also includes documentation so you [&#8230;]</p>
The post <a href="https://learncgames.com/im-tempted-to-go-nuklear/">I’m tempted to go Nuklear</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></description>
										<content:encoded><![CDATA[<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:815,&quot;href&quot;:&quot;https:\/\/github.com\/Immediate-Mode-UI\/Nuklear&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:816,&quot;href&quot;:&quot;https:\/\/cdn.statically.io\/gh\/Immediate-Mode-UI\/nuklear\/master\/doc\/nuklear.html&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;http:\/\/cdn.statically.io\/gh\/Immediate-Mode-UI\/nuklear@master\/doc\/nuklear.html&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;}]'></div>
<p><a href="https://github.com/Immediate-Mode-UI/Nuklear" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" class="size-medium wp-image-152 alignleft" src="https://learncgames.com/wp-content/uploads/2020/03/Nuklear-1-300x231.png" alt="Gallery Image of GUI developed with Nuklear" width="300" height="231" srcset="https://learncgames.com/wp-content/uploads/2020/03/Nuklear-1-300x231.png 300w, https://learncgames.com/wp-content/uploads/2020/03/Nuklear-1.png 579w" sizes="auto, (max-width: 300px) 100vw, 300px" />Nuklear</a> is a library that is a single-header ANSI C immediate mode cross-platform GUI toolkit. It lets you develop stylish and beautiful GUIs for your applications. It&#8217;s written in C but any programming language that can work with C such as C++ or Python can also use it.</p>
<p>Importantly, it also includes <a href="https://cdn.statically.io/gh/Immediate-Mode-UI/nuklear/master/doc/nuklear.html" target="_blank" rel="noopener noreferrer">documentation</a> so you can make use of it. The best software in the world is useless if you can&#8217;t use it and GUI toolkits tend to be a little bit more complicated than say a text editor.  This is nicely written, and though it&#8217;s just one document, it&#8217;s a long one!</p>
<p>It&#8217;s one thing to write a simple GUI as I did in that Empire game but mine was only 600 lines long and pretty rough looking. Nuklear is 18,000 lines long ie 30x as big.  If there&#8217;s one thing I&#8217;ve found from my software development experience, it&#8217;s that a nice looking piece of software will get away with having more bugs than something that looks not as nice.</p>
<p>&nbsp;</p>The post <a href="https://learncgames.com/im-tempted-to-go-nuklear/">I’m tempted to go Nuklear</a> first appeared on <a href="https://learncgames.com">Learn C Games Programming Blog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">150</post-id>	</item>
	</channel>
</rss>
