<?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>Qt &#8211; WLGfx</title>
	<atom:link href="https://csnorwood.com/category/qt/feed/" rel="self" type="application/rss+xml" />
	<link>https://csnorwood.com</link>
	<description>Programmers Website and Blog</description>
	<lastBuildDate>Tue, 25 Nov 2025 13:30:18 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://csnorwood.com/wp-content/uploads/2024/01/cropped-wlgfx-favicon-white-32x32.png</url>
	<title>Qt &#8211; WLGfx</title>
	<link>https://csnorwood.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>OpenMPT and Qt C++, and RayLib</title>
		<link>https://csnorwood.com/2025/11/25/openmpt-and-qt-c-and-raylib/</link>
					<comments>https://csnorwood.com/2025/11/25/openmpt-and-qt-c-and-raylib/#respond</comments>
		
		<dc:creator><![CDATA[csnorwood]]></dc:creator>
		<pubDate>Tue, 25 Nov 2025 13:30:18 +0000</pubDate>
				<category><![CDATA[C]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[threads]]></category>
		<guid isPermaLink="false">https://csnorwood.com/?p=849</guid>

					<description><![CDATA[It&#8217;s not much at the moment but I have integrated all 3 and have a player that loads a module file and plays it. Meanwhile RayLib shows the channel VU meters for both left and right channels all in 3D. That was the easy bit. Qt handles it&#8217;s own threading and signals so both OpenMPT [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>It&#8217;s not much at the moment but I have integrated all 3 and have a player that loads a module file and plays it. Meanwhile RayLib shows the channel VU meters for both left and right channels all in 3D. That was the easy bit.</p>
<p><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-850" src="https://csnorwood.com/wp-content/uploads/2025/11/Screenshot_20251125_132409.png" alt="" width="1404" height="1256" srcset="https://csnorwood.com/wp-content/uploads/2025/11/Screenshot_20251125_132409.png 1404w, https://csnorwood.com/wp-content/uploads/2025/11/Screenshot_20251125_132409-300x268.png 300w, https://csnorwood.com/wp-content/uploads/2025/11/Screenshot_20251125_132409-1024x916.png 1024w, https://csnorwood.com/wp-content/uploads/2025/11/Screenshot_20251125_132409-768x687.png 768w, https://csnorwood.com/wp-content/uploads/2025/11/Screenshot_20251125_132409-650x581.png 650w" sizes="(max-width: 1404px) 100vw, 1404px" /></p>
<p>Qt handles it&#8217;s own threading and signals so both OpenMPT and Raylib run on their own thread.</p>
<p>All I need to do next is to extract the current row from the pattern which it is playing and handling each note for each channel differently for displaying. As used in a lot of old-skool demos.</p>
<p>Playing back mod files on PC&#8217;s nowadays is nothing, the old days of the Amiga 1200 I had, it would not leave much CPU left.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://csnorwood.com/2025/11/25/openmpt-and-qt-c-and-raylib/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Qt now works with the latest Android SDK/NDK</title>
		<link>https://csnorwood.com/2017/10/17/qt-now-works-with-the-latest-android-sdkndk/</link>
		
		<dc:creator><![CDATA[csnorwood]]></dc:creator>
		<pubDate>Tue, 17 Oct 2017 20:31:28 +0000</pubDate>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Qt]]></category>
		<guid isPermaLink="false">http://wlgfx.com/?p=322</guid>

					<description><![CDATA[After a short time to install 5.9.2 of Qt and then without my fingers crossed even, I loaded up Qt and loaded one of the 3D Android compatible examples. After the first build complaining about API level 1 I fixed that and ran it again. And voila! My phone ran it. All being very slow [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>After a short time to install 5.9.2 of Qt and then without my fingers crossed even, I loaded up Qt and loaded one of the 3D Android compatible examples.</p>
<p>After the first build complaining about API level 1 I fixed that and ran it again. And voila! My phone ran it. All being very slow because it was that water demo one.</p>
<p>Woo hoo! Might be back to Qt for desktop and mobile app dev again.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Java vs C++ for 3D mesh building</title>
		<link>https://csnorwood.com/2017/10/17/java-vs-c-for-3d-mesh-building/</link>
		
		<dc:creator><![CDATA[csnorwood]]></dc:creator>
		<pubDate>Tue, 17 Oct 2017 20:09:13 +0000</pubDate>
				<category><![CDATA[android]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[libgdx]]></category>
		<category><![CDATA[openGL]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[threads]]></category>
		<guid isPermaLink="false">http://wlgfx.com/?p=318</guid>

					<description><![CDATA[A few days ago, playing around with LibGDX again I was getting back into 3D programming and created a very simple demo of a load of spheres and the camera rotating around the scene as below: Which on my laptop ran just fine. It took about a second to generate all the meshes for each [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>A few days ago, playing around with LibGDX again I was getting back into 3D programming and created a very simple demo of a load of spheres and the camera rotating around the scene as below:</p>
<p><img decoding="async" class="alignnone size-large wp-image-319" src="https://csnorwood.com/wp-content/uploads/2017/10/ballslibgdx-1024x654.png" alt="" width="678" height="433" srcset="https://csnorwood.com/wp-content/uploads/2017/10/ballslibgdx-1024x654.png 1024w, https://csnorwood.com/wp-content/uploads/2017/10/ballslibgdx-300x192.png 300w, https://csnorwood.com/wp-content/uploads/2017/10/ballslibgdx-768x491.png 768w, https://csnorwood.com/wp-content/uploads/2017/10/ballslibgdx.png 1600w" sizes="(max-width: 678px) 100vw, 678px" /></p>
<p>Which on my laptop ran just fine. It took about a second to generate all the meshes for each of the spheres.</p>
<p>Took bloody ages on my phone though, even though it&#8217;s a quad core 64 bit android phone. Approximately 5 to 8 seconds. Ouch.</p>
<p>None of this nonsense in C++ for starters. I know this from a very old project I was working back in the day. Procedural map generator. More about that here: <a href="https://forum.thegamecreators.com/thread/193276">PROCMAP DBP LINK</a></p>
<p><img decoding="async" class="alignnone size-large" src="https://forum.thegamecreators.com/xt/xt_apollo_pic.php?i=2315899" width="640" height="480" /></p>
<p>So for the last couple of days (actually on the evenings because of work), I&#8217;ve looked into creating a single sphere mesh and then duplicating it. In LibGdx</p>
<p>A minor problem to start off with is that a lot of LibGdx&#8217;s mesh generators have been deprecated and I don&#8217;t know how long for now, and I can&#8217;t find examples on how to use the new stuff. This would have made things easier, but that minor problem got bigger.</p>
<p>It seems that ModelBuilder only runs on the GL thread, so I tried the MeshBuilder. No luck there after trying to hunt info down on google, (Maybe google is hiding it from me :P) how to use the thing.</p>
<p>So I gave up, closed the project, might go back to it if the next step fails.</p>
<p>I&#8217;m waiting on a huge update from Qt. Oh! At this time it has finished downloading and updated.</p>
<p>The previous versions of Qt didn&#8217;t work with the latest Android SDK/NDK. Fingers crossed with this one&#8230;</p>
<p>Next&#8230;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Libvlc and my Odroid</title>
		<link>https://csnorwood.com/2017/08/05/libvlc-and-my-odroid/</link>
		
		<dc:creator><![CDATA[csnorwood]]></dc:creator>
		<pubDate>Sat, 05 Aug 2017 17:03:22 +0000</pubDate>
				<category><![CDATA[C]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[VLC]]></category>
		<guid isPermaLink="false">http://wlgfx.com/?p=204</guid>

					<description><![CDATA[Before I go ahead and actually buy the Odroid C2, I thought I&#8217;d dig out my U3 and try the vlc library on that. All I had to do was to copy the project folder over SSH to it and build it. At first it didn&#8217;t compile because I needed to install the X11 dev [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Before I go ahead and actually buy the Odroid C2, I thought I&#8217;d dig out my U3 and try the vlc library on that. All I had to do was to copy the project folder over SSH to it and build it. At first it didn&#8217;t compile because I needed to install the X11 dev files, and then again I had to install the libvlc-dev files. And then it built just fine.</p>
<p>Major problem though, VLC doesn&#8217;t have hardware acceleration on any of the Arm processors yet.</p>
<p>Well, now it looks like I&#8217;ll either go down the Qt route, FFMpeg route, OGV decoder route, or find another player library.</p>
<p>One thing I do know is that I&#8217;d like to stick to a single video format, ie OGV. So that makes writing my own player easy enough.</p>
<p>My next step is to get a player working by myself and make it work on the Odroid. I&#8217;m going to see about the OGV sources before checking out other open source players.</p>
<p>I&#8217;ll keep you posted.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Variable names are important</title>
		<link>https://csnorwood.com/2017/03/02/variable-names-are-important/</link>
		
		<dc:creator><![CDATA[csnorwood]]></dc:creator>
		<pubDate>Thu, 02 Mar 2017 21:39:46 +0000</pubDate>
				<category><![CDATA[android]]></category>
		<category><![CDATA[openGL]]></category>
		<category><![CDATA[Qt]]></category>
		<guid isPermaLink="false">http://wlgfx.com/?p=160</guid>

					<description><![CDATA[For the last two days I&#8217;ve been working on decoding video frames and displaying them. The idea is to run against the system clock which I&#8217;ve had working everytime so far. This time though, I decided to make a general decoder so that I didn&#8217;t have to worry about FFMpeg&#8217;s video decoded format which up [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>For the last two days I&#8217;ve been working on decoding video frames and displaying them. The idea is to run against the system clock which I&#8217;ve had working everytime so far. This time though, I decided to make a general decoder so that I didn&#8217;t have to worry about FFMpeg&#8217;s video decoded format which up until now has always been YUV420 which I just had a GL using SL shader convert on the fly. Everything gets converted to an RGBA bitmap so I don&#8217;t have to worry about it.</p>
<p>Anyway, variable names&#8230;</p>
<p>I buffer up the frames and then test them against the current system clock for a frame that&#8217;s ready to be presented. I had two variable names, <em>frame</em> and <em>frame_temp</em> which are pretty innocent. Unfortunately though, and which I kept missing whilst going through the code, I was grabbing a pointer in <em>frame_temp</em> and testing it. If it fell below the current system time then it would then be assigned to <em>frame. </em>If there was a previous frame then it would be cleared from the buffer queue and added to the unused buffer queue.</p>
<p>Now this is what I missed.</p>
<p><em>Frame_temp </em>is first used, <em>frame</em> is unitialised (actually null), the tests are done on <em>frame_temp</em> and if failed then just exits with a null pointer. Fair enough.</p>
<p>It was a &#8220;typo&#8221;.</p>
<p>Hidden between four lines of code using <em>frame_temp</em> I had used the variable <em>frame</em> instead (which is null to start with). When I accessed a method on that class it would crash.</p>
<p>The error message was very obscure and nothing on google search or anywhere else was any help.</p>
<p>My mistake&#8230;</p>
<p>Most of the time I rely on debug log outputs. And whilst running this code, everything was running just as it should. It&#8217;s hard to follow multiple threads in debug output.</p>
<p>Finally, I ran it through gdb which took me straight to the line of code where it crashed. The line right after the &#8220;typo&#8221;.</p>
<p>Lesson learnt&#8230;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Online GL shader editor</title>
		<link>https://csnorwood.com/2016/09/09/online-gl-shader-editor/</link>
		
		<dc:creator><![CDATA[csnorwood]]></dc:creator>
		<pubDate>Fri, 09 Sep 2016 12:42:03 +0000</pubDate>
				<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[openGL]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">http://wlgfx.com/?p=135</guid>

					<description><![CDATA[Just so I don&#8217;t lose or forget about it, I&#8217;ve found a very handy online openGL shader editor&#8230; ShaderFrog From basic shaders including texturing and lighting right up to procedural shaders and more. All I need now is to run a sample project in Qt to test out some of these and then transfer them [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Just so I don&#8217;t lose or forget about it, I&#8217;ve found a very handy online openGL shader editor&#8230;</p>
<p><a href="http://shaderfrog.com/app/" target="_blank" rel="noopener">ShaderFrog</a></p>
<p>From basic shaders including texturing and lighting right up to procedural shaders and more.</p>
<p>All I need now is to run a sample project in Qt to test out some of these and then transfer them to GWT and Parallax. Good stuff can now be done.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Good and bad for embedded and Android</title>
		<link>https://csnorwood.com/2016/09/09/good-and-bad-for-embedded-and-android/</link>
		
		<dc:creator><![CDATA[csnorwood]]></dc:creator>
		<pubDate>Fri, 09 Sep 2016 10:06:55 +0000</pubDate>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Qt]]></category>
		<guid isPermaLink="false">http://wlgfx.com/?p=133</guid>

					<description><![CDATA[Embedded Linux is the bees knees for doing a lot of things, especially when you really don&#8217;t want the Android overhead on top of it. For a device such as the Odroid range which can be used as a headless server providing and IPTV gateway and a web interface for controls, linux is the better [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Embedded Linux is the bees knees for doing a lot of things, especially when you really don&#8217;t want the Android overhead on top of it. For a device such as the Odroid range which can be used as a headless server providing and IPTV gateway and a web interface for controls, linux is the better option.</p>
<p>When it comes to graphical applications, for example decoding video streams and openGL rendering, it always becomes a toss up between Linux and Android. A lot of people who are familiar with Java will automatically pick Java and I have to say, I do actually like the Java Virtual Machine. The JVM is handy whilst developing because a crashed application just gets cleared out.</p>
<p>Qt can also be used for developing mobile applications and has a very extensive framework and because it&#8217;s C++, time critical code isn&#8217;t a problem.</p>
<p>The only issue I have with Qt is that when it comes the day when I do want to release and application for whatever it is I finally do, packaging it up for all OS&#8217;s becomes a pain.</p>
<p>Qt for Android is easy, just build the project and get the APK. Just one file and it can be copied to any Adroid device.</p>
<p>Qt for Windows is a nuisance because you have to faff about with the terminal (which is awful in Windows) to package all the required libraries, and then it&#8217;s not guaranteed to run straight out of the box. For Windows you have to use a dependency walker to find the missing libraries.</p>
<p>Qt for Linux isn&#8217;t too bad unless you want the latest libraries. At this moment you can install Qt5.5 from the Linux repositories and away you go. Unfortunately, the latest version of Qt is 5.7 with some very nice additions so it&#8217;s back to packaging stuff up.</p>
<p>For embedded Linux it would have to be Qt from the Linux repositories.</p>
<p>For Android it is still a toss up between Qt and Android Studio + NDK. Although if I could get away with it I would use Qt and Linux unless it was going to be an application for the Android market.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
