<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.7.6(BH)" -->
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>Planet Maemo: category &quot;feed:ffedab845b17ad5f072a1f90af70d0f9&quot;</title>
        <description>Blog entries from Maemo community</description>
        <link>http://maemo.org/news/planet-maemo/</link>
        <lastBuildDate>Sun, 05 Apr 2026 05:57:00 +0000</lastBuildDate>
        <generator>FeedCreator 1.7.6(BH)</generator>
        <language>en</language>
        <managingEditor>planet@maemo.org</managingEditor>
        <item>
            <title>Qt5 Battery Component</title>
            <link>http://kgronholm.blogspot.com/2013/05/qt5-battery-component.html</link>
            <description><![CDATA[
After the QUItIndicator trilogy which introduced idea, design and performance of a specific Qt5 QML component there's room for more, right?! Something like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKJHiG1P2cUhQOqZMKvpe_ZdhxfHWpwjf1aEfNwLFbMqQr5D0fiKznUngjDHDyBhAnvMXESJD5YJU1_NMNwwvMDtQGaesNGqgc78m5kX0m_SN19IQNz2noTXwuJ3fvC_Hs5BAmtfsG4eI/s1600/QUItBattery_sc.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKJHiG1P2cUhQOqZMKvpe_ZdhxfHWpwjf1aEfNwLFbMqQr5D0fiKznUngjDHDyBhAnvMXESJD5YJU1_NMNwwvMDtQGaesNGqgc78m5kX0m_SN19IQNz2noTXwuJ3fvC_Hs5BAmtfsG4eI/s320/QUItBattery_sc.jpg" /></a></div>
<br />
This time we have a dynamic QML component for showing the remaining power of your mobile device battery. As a recap, with "Dynamic QML component" I mean someting which utilizes not only basic QML animation properties (position, opacity, scale etc.) but also new Qt5 features (shaders, particles, scenegraph powa!) to appear "more dynamic". Maybe it's just me, but I would love to see UIs really utilizing modern GPUs... and accelerating this progress is one of the reasons why I code these examples and blog about them. Another reason being to rule-the-world, obviously ;-P<br />
<br />
Instead of explaining design &amp; features of QUItBattery component I'll let this video to do that:<br />
<br />
<br />
<object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/JULY24SHJ1E?fs=1&amp;hl=en_US"> <param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/JULY24SHJ1E?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br />
<br />
<br />
If you want to use this liquid battery component in your UI: Download the <a href="http://quitcoding.com/?page=work#quitbattery">sources from here</a>, copy QUItBatteryComponent directory, import it in your QML and off you go. Happy hacking!<br />
<br />
<span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2bb8f6bc12538bb8f11e2a63c45f1bacf31b231b2&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2bb8f6bc12538bb8f11e2a63c45f1bacf31b231b2/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=1e2bb8f6bc12538bb8f11e2a63c45f1bacf31b231b2&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2bb8f6bc12538bb8f11e2a63c45f1bacf31b231b2/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Mon, 13 May 2013 08:34:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2bb8f6bc12538bb8f11e2a63c45f1bacf31b231b2</guid>
        </item>
        <item>
            <title>QUItIndicators: Performance considerations</title>
            <link>http://kgronholm.blogspot.com/2013/05/quitindicators-performance.html</link>
            <description><![CDATA[
(This is part III, please check also <a href="http://kgronholm.blogspot.fi/2013/04/quitindicators-introduction.html">parts I</a> and <a href="http://kgronholm.blogspot.fi/2013/04/quitindicators-design-considerations.html">II</a>)<br />
<br />
Even with a small component like this, there are plenty of possibilities to improve (or sink) the performance. To make sure that our indicators perform as expected, we'll test them on Nokia N9 and and on Raspberry Pi.<br />
<br />
These both devices are relatively low-end by current standards. N9 contains 1GHz Cortex-A8 CPU which is still quite beefy, but GPU (SGX530) on the other hand is getting old and unable to handle more complicated fragment shaders. For RPi these are just the opposite: CPU is slowish 700MHz ARM11 while the GPU (VideoCore IV) is more performant than N9 SGX530. Because of these qualities (and because both support Qt5, naturally) this duo is excellent for our performance ensurement.<br />
<br />
So here's a short video showing how our indicators perform on Nokia N9 and on RaspberryPi:<br />
<br />
<object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/zlkYm3_OwM0?fs=1&amp;hl=en_US"> <param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/zlkYm3_OwM0?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br />
<br />
<br />
Performs pretty OK on both, right? ProgressIndicator stress test isn't smooth on RPi, which indicates that its CPU can't handle 100 indicators animated like that. So stress test does what it's supposed to, normal use cases perform well.<br />
<br />
Even with declarative QML language, good performance doesn't just happen, you need to work towards it. By looking at the sources of these indicators, at least these tips/notes can be made:<br />
<br />
<ul>
<li>BusyIndicator and ProgressIndicator are separate components instead of just one component with e.g. "indeterminate" property. This allows using a more light-weight (only one texture, animating only vertex shader, less properties etc.) BusyIndicator component with indeterminate use-cases. Lesson to learn is to avoid making too general/bloat QML components.</li>
<li>There are four different sizes for indicators, from small (64x64px) to huge (512x512px). These sizes were selected because power-of-two texture sizes are more optimal for GPU. <a href="http://qt-project.org/doc/qt-5.0/qtquick/qml-qtquick2-image.html#sourceSize-prop">SourceSize</a> property is used to scale and cache exactly the correct sized textures.</li>
<li>BusyIndicator animation is achieved purely on vertex shader. As vertex shader is run once for every vertex instead of once for every fragment (pixel), it can be much more GPU-friendly. In case of an 256x256px indicator, our vertex shader is executed over 650(!) times less than fragment shader.</li>
<li>To keep the amount of vertices as small as possible while making sure animation looks still smooth, the mesh size is allocated based on indicator size. <a href="http://qt-project.org/doc/qt-5.0/qtquick/qml-qtquick2-gridmesh.html">GridMesh</a> resolution for 256x256 indicator is 10x10 while 64x64 indicator manages with a 4x4 mesh.</li>
<li>When using items&amp;images as sources for <a href="http://qt-project.org/doc/qt-5.0/qtquick/qml-qtquick2-shadereffect.html">ShaderEffect</a> and not needing the original one, remember to set its visibility to false to prevent it from rendering.</li>
<li>ProgressIndicator can show percentages in the center and applies vertex animation also for it, which requires that the whole Item is used as a source for ShaderEffect. Initialize of Item as a ShaderEffect source is slightly slower than initialize of Image. This is because Items (with their child Items) need to be rendered into FBO first while Image textures are instantly available. When percentages are disabled (showPercentages: false), Image is used directly and stress test of 162 ProgressIndicators starts pretty instantly. So if you need instantly appearing ProgressIndicators, don't show percentages on them.</li>
<li>Minimize the amount of property changes. Property bindings in QML are so easy to make that without paying attention you may forget to disable those when not needed. As an example, ProgressIndicator percentages Text element visibility was set to false when disabled and it wasn't even used as part of the shader source. But because of an oversight, its text property was still updated whenever ProgressIndicator value changed. That's bad, fixed now to update text only when showPercentages is true. Qt Creator QML Profiler is the tool to use to analyze your code.</li>
</ul>
<br />
So with all this, does it mean that these indicator components are fully optimized? Well of course not! There are still some generalization left and room for improvements. Additinally, although we have tried to offload most of the work from CPU to GPU, indicator animations like these should be run in a separate thread instead of the GUI thread. Only this would allow smooth 60fps even when processing under heavy CPU load. For details, please read this blog post by Gunnar: <a href="http://blog.qt.digia.com/blog/2012/08/20/render-thread-animations-in-qt-quick-2-0/">http://blog.qt.digia.com/blog/2012/08/20/render-thread-animations-in-qt-quick-2-0/</a><br />
<br />
Summing up briefly: When implementing QML components for applications, developers and designers should co-operate closely to bend the design to be as CPU&amp;GPU friendly as possible while still making designers happy. Designers dig perfect pixels, but they also appreciate smooth 60fps. By making wise compromises and utilizing Qt5 correctly, we can deliver both.<br />
<br />
Sources of QUItIndicator components &amp; examples are available from: <a href="http://quitcoding.com/?page=work#indicators">http://quitcoding.com/?page=work#indicators</a><br />
<br /><span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2b74176e122bcb74111e29e8e9d7e4d68814e814e&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2b74176e122bcb74111e29e8e9d7e4d68814e814e/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=1e2b74176e122bcb74111e29e8e9d7e4d68814e814e&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2b74176e122bcb74111e29e8e9d7e4d68814e814e/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Thu, 02 May 2013 13:34:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2b74176e122bcb74111e29e8e9d7e4d68814e814e</guid>
        </item>
        <item>
            <title>QUItIndicators: Design considerations</title>
            <link>http://kgronholm.blogspot.com/2013/04/quitindicators-design-considerations.html</link>
            <description><![CDATA[
(This is part II, for the introduction see <a href="http://kgronholm.blogspot.fi/2013/04/quitindicators-introduction.html">part I</a>)<br />
<br />
The main points of this indicators exercise are to promote Qt5 QML+GLSL approach for building dynamic UI components (part I) and to give performance tips (part III, coming!). But here in the middle, we talk also a bit about design considerations behind these indicators. After all, who cares if your component performs well if it doesn't also look good and fulfil its functionality. <br />
<br />
Here's set of design-related notes about QUItIndicators which we wanted to achieve:<br />
<br />
<ul>
<li>The design language should be relatively neutral. Indicators like these may be used in many places, in applications and games, so they should not be too characteristic. And circles are pretty universal, so circles it is. The amount of circles in BusyIndicator is 11, by design. Reason behind this is that ProgressIndicator has one missing from top to mark start/end position, meaning 10 circles. This is optimal for percentages math e.g. when user sees 4 circles highlighted she can count that progress is at 40%. For smaller indicators, less &amp; bigger circles might look better but decision was not to differentiate on these.</li>
</ul>
<br />
<ul>
<li>Different use-cases call for different kind of indicators. When indicator is only visible briefly and progress can't be tracked, BusyIndicator is the one to use. Some events may take more time and then ProgressIndicator can be used to keep users better informed of how long they still need to wait. With longer taking tasks you could show percentages and make indicator even more dynamic to make it less boring for user to watch. Watching interesting animation makes 5 seconds to feel like 2... So from brief (left) to longer (right) waiting times, indicator to choose from our set would be:</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCHxUku4viuZWNmA3YS5ivvebgyYrqYZrELjM0BtAW8KiQlI6LZRY3Vy9cQeqNffnALG0IZ2jrntiDFwO0mjbIot7rzo6Jo_SQwQXzGFvmyiNzj-uGqZwz7uI-Axmb3Cr2t8Q20BaiSRs/s1600/indicators2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCHxUku4viuZWNmA3YS5ivvebgyYrqYZrELjM0BtAW8KiQlI6LZRY3Vy9cQeqNffnALG0IZ2jrntiDFwO0mjbIot7rzo6Jo_SQwQXzGFvmyiNzj-uGqZwz7uI-Axmb3Cr2t8Q20BaiSRs/s320/indicators2.png" width="320" /></a></div>
<br />
<ul>
<li>Indicators should fit and be clearly visible on top of any background. Users may wish to place them on white, black or colorful areas and expects indicator to fit there. To achieve this, our indicators use neutral black&amp;white as their base colors and contain inverted version which works better on light backgrounds. It's also possible to define alternative highlight color when the default yellowish isn't suitable. Here are few examples of ProgressIndicators on top of different backgrounds:</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUtVpCmS716v4ciLCo_6cuFkZSJSMPEjEp1k68AWYU0PgI0o-K-7aer_c6lszVHvzG8jtrkw-PuMuIyoGaQyrmSI3_bSvsojk5zZF99oKvMIf6qpETEVbCFwbZn12eH4UgQgkfecnMCUE/s1600/indicators.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUtVpCmS716v4ciLCo_6cuFkZSJSMPEjEp1k68AWYU0PgI0o-K-7aer_c6lszVHvzG8jtrkw-PuMuIyoGaQyrmSI3_bSvsojk5zZF99oKvMIf6qpETEVbCFwbZn12eH4UgQgkfecnMCUE/s320/indicators.png" width="320" /></a></div>
<br />
<ul>
<li>Show/hide animations are also important. Too often animated items like these appear and disappear suddenly, breaking the illusion of a fluid component. In our component showing/hiding animations are combination of opacity, scale and vertex position skewing. Strips below show what the animation looks like. This could be made smoother but for performance reasons we use only vertex shader with a minimal mesh size. Fastly animated it anyway looks better than these still images.</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw1y63ZJDiR6uLCYRp40gqLwyCA4AsHk2pmYwW9I2oB_XX17oEaJGGXBsWEewlhvjgS1gENi2IYSUZ0AK19IUfImXE1B2L8KwYTVo2-sxqSk-7Y2EAGbeTcEt9iQyG_cgz-MS7KpEw3V8/s1600/indicators3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw1y63ZJDiR6uLCYRp40gqLwyCA4AsHk2pmYwW9I2oB_XX17oEaJGGXBsWEewlhvjgS1gENi2IYSUZ0AK19IUfImXE1B2L8KwYTVo2-sxqSk-7Y2EAGbeTcEt9iQyG_cgz-MS7KpEw3V8/s320/indicators3.png" width="320" /></a></div>
<br />
<ul>
<li>Sometimes indicators like these should attract user attention. When the application is blocked until loading is ready, it's good that user eyes focus on the indicator. Darkening (and blurring, <a href="http://qt-project.org/doc/qt-5.0/qtgraphicaleffects/qml-qtgraphicaleffects1-fastblur.html">Qt5 graphical effects</a> make that easy) the rest of the UI is a good way to achieve this. But sometimes just the opposite is desired, directing user focus to real content and keeping indicators relatively obscure. Example of this is our Picture Wall demo, users attention is on loaded images instead of the ones still loading. With our indicators this can be achieved by decreasing opacity. <i>(Developer note: When making your own ShaderEffect which rewrites the default fragmentShader, remember to multiply gl_FragColor with qt_Opacity to keep QML opacity property behaving correctly!)</i>. Here's how Picture Wall demo fades indicators into background:</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3_h1f3ZPIP_W4tIK0MhJDgKoz51F-jfeDlK3qgaeVjoIiN1Kk39YVJsdGnHO8JNmT47ulKQTeUEEZD4LepDG4-yeUVL0vrc0y3nLhM3safBoctJ_4cWjZKZ81-geTCvvQQH3qQTk_UoA/s1600/indicators4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3_h1f3ZPIP_W4tIK0MhJDgKoz51F-jfeDlK3qgaeVjoIiN1Kk39YVJsdGnHO8JNmT47ulKQTeUEEZD4LepDG4-yeUVL0vrc0y3nLhM3safBoctJ_4cWjZKZ81-geTCvvQQH3qQTk_UoA/s320/indicators4.png" width="320" /></a></div>
<br />
<ul>
<li>Circular zooming animation doesn't progress linearly, but instead follows a custom bezier curve. This change in speed makes animation feel more lively and natural as it would be affected by slight gravity, gaining speed when moving down and slowing down while reaching the top. Designs are often filled with small details like this, final touches.</li>
</ul>
<br />
These indicators are not highly original and will not win design awards. Graphics, effects and small details could be greatly refined. But we anyway tried to consider use-cases and apply them into the design. If you are eager to experiment yourself, grab the <a href="http://quitcoding.com/?page=work#indicators">sources</a>.<br />
<br />
Next part will explain how to reach optimal performance to support these design considerations. <br />
<br />
<br /><span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2a8f61b318ba4a8f611e2b2ef770686ceab5cab5c&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2a8f61b318ba4a8f611e2b2ef770686ceab5cab5c/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=1e2a8f61b318ba4a8f611e2b2ef770686ceab5cab5c&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2a8f61b318ba4a8f611e2b2ef770686ceab5cab5c/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Fri, 19 Apr 2013 16:20:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2a8f61b318ba4a8f611e2b2ef770686ceab5cab5c</guid>
        </item>
        <item>
            <title>QUItIndicators: Introduction</title>
            <link>http://kgronholm.blogspot.com/2013/04/quitindicators-introduction.html</link>
            <description><![CDATA[
Few months ago I wrote a normal mapping series with <a href="http://kgronholm.blogspot.fi/2012/10/qt5-and-normal-mapping.html">part I</a> and <a href="http://kgronholm.blogspot.fi/2012/10/qt5-and-normal-mapping-reloaded.html">part II</a>. That was a good experience, so series it is again! This time about implementing dynamic QML components, with an example case being busy&amp;progress indicators. We'll call these specific ones QUItIndicators.<br />
<br />
Let's start with obligatory video which demonstrates these components, BusyIndicator and ProgressIndicator, with few examples:<br />
<br />
<object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/5SAAfSXkW8s?fs=1&amp;hl=en_US"> <param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/5SAAfSXkW8s?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br />
<br />
Traditionally indicators like these would be implemented as an animated GIF or a sprite. Cons of that approach are zero customization and memory consumption: 2s animation of 256x256px 32-bit color indicator at 60fps would mean 2*60*256*256*4 = 31.5Mb memory consumption. That's quite a bit for just one indicator, so usually frames are animated slower than 60fps which makes animation less smooth.<br />
<br />
Alternative way to implement animated indicator would be using imperative drawing API (QPainter, Cairo, Skia etc.). Drawing freely to a canvas gives a lot of possibilities, but can easily lead to non-optimal performance. Many of these APIs have OpenGL backends which sounds good in theory, but the reality is that they can't take full gains out of modern GPUs. Like wise Tro^H^H^HDigians have said, combining QPainter with OpenGL backend doesn't make a perfect harmony.<br />
<br />
So as you probably guessed, our indicators use Qt5+QML+GLSL instead. The pros of this approach compared to sprites or imperative drawing are rendering performance, low memory consumption and customization possibilities. There is also at least one con: Indicator needs to be designed so that required animations can be achieved with vertex &amp; fragment shaders.<br />
<br />
Next blog post goes through design thoughts behind these indicators. In the meantime, you can get the sources <a href="http://quitcoding.com/?page=work#indicators">from here</a> and try yourself!<br />
<br />
<span class="net_nemein_favourites">0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=1e2a81e5f267b04a81e11e2b3abe32c13ab620d620d&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/1e2a81e5f267b04a81e11e2b3abe32c13ab620d620d/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=1e2a81e5f267b04a81e11e2b3abe32c13ab620d620d&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/1e2a81e5f267b04a81e11e2b3abe32c13ab620d620d/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Thu, 18 Apr 2013 14:26:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-1e2a81e5f267b04a81e11e2b3abe32c13ab620d620d</guid>
        </item>
        <item>
            <title>Qt5 and normal mapping - reloaded</title>
            <link>http://kgronholm.blogspot.com/2012/10/qt5-and-normal-mapping-reloaded.html</link>
            <description><![CDATA[
<i>(This is part II of the normal mapping journey, check <a href="http://kgronholm.blogspot.fi/2012/10/qt5-and-normal-mapping.html">the part I</a> first for details.)</i><br />
<br />
So you have all now played with Qt5 NMapper tool, right? Goody, that means we have gained experience of normal mapping and created some perfectly tuned normal mapped textures. Now it's time to use these in a separate application.<br />
<br />
Let's assume that you are working on a 2D QML application, but would want 3D-looking effect into some part(s) of the UI. To visualize, here's an example NMapCarousel demo application:<br />
<br />
<object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/PRx_tTPXR4c?fs=1&amp;hl=en_US"> <param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/PRx_tTPXR4c?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br />
<center>
(Qt5 NMap Carousel, running on PC and on Raspberry Pi)</center>
<br />
<br />
Here normal mapping is used to make the carousel icons more dynamic by applying lighting. To increase the 3D impression, there are also extra shadows reflected behind the icons.<br />
<br />
To implement something similar, here's how to proceed:<br />
<br />
<ol>
<li>If not already, setup Qt5 to your PC/Mac/RPi or equivalent platform.</li>
<li>Create normal maps of your graphic assets using Gimp, Blender, Photoshop etc. tool of your choice. Name the normal mapped image with extra "n" in the end, so images are something like "thing.png" and "thingn.png".</li>
<li>Test your graphics with <a href="http://quitcoding.com/?page=work#nmapper">NMapper</a> by copying these images into "images" folder and adding "thing" into imageFiles array property. Play with the light intensity, diffuse, switching x&amp;y coordinates etc. If you are not happy with the results, jump back to step 2 to edit the images and iterate.</li>
<li>Make your own application. Copy NMapEffect.qml and NMapLightSource.qml from NMapper, use your freshly made images, the lighting settings you tested earlier and implement rest of the UI.</li>
<li>Profit! (Sorry that this took a bit more steps than normally... but on the positive side there is no unknown ???-step in the middle!)</li>
</ol>
<br />
Source codes of this demo are available <a href="http://quitcoding.com/?page=work#nmapper">from here</a>. I'm waiting to see cool normal mapping uses!<br />
<br />
<i>PS: To learn shaders from the master, check out Andrew's <a href="http://thndl.com/">thndl.com</a>!</i>
<br />
<br /><span class="net_nemein_favourites">4 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=af6e104e15da11e2bdfc892903f375607560&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/af6e104e15da11e2bdfc892903f375607560/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=af6e104e15da11e2bdfc892903f375607560&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/af6e104e15da11e2bdfc892903f375607560/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Sun, 14 Oct 2012 10:54:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-af6e104e15da11e2bdfc892903f375607560</guid>
        </item>
        <item>
            <title>Qt5 and normal mapping</title>
            <link>http://kgronholm.blogspot.com/2012/10/qt5-and-normal-mapping.html</link>
            <description><![CDATA[
This one has been on my "blog at some point" back burner for some time now...<br /><br />

'<a href="http://en.wikipedia.org/wiki/Normal_mapping">Normal mapping</a>' is a graphics rendering technique used for faking the lighting conditions. In 3D software it is often used for bringing small bumps and dents of textures visible to achieve more realistic graphical appearance without using huge amount of polygons. Normal mapping is kinda advanced version of preceding '<a href="http://en.wikipedia.org/wiki/Bump_mapping">Bump mapping</a>'&nbsp; technique. Where bump mapping uses just one channel for 'bumps', normal mapping uses 3-channel (RGB) bitmaps and can therefore contain more detailed normal vector information.<br /><br />

Normal mapping technique can also be used in 2D applications to get 3D'ish looking UI elements, which means it can be used also in normal non-Qt3D QML applications. Combining image textures with specifically made normal map textures using a suitable shader is all you need. And normal maps can be automatically created with Gimp, Blender, Photoshop etc. drawing tools, although for best results some tweaking may be required.<br /><br />

But enough about theoretical mumbling, here comes visuals:<br /><br />

<object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/HbG-qt9UTaY?fs=1&amp;hl=en_US"> <param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/HbG-qt9UTaY?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br />

<center>(Qt5 NMapper tool, running on PC and on Raspberry Pi)</center>
<br /><br />

To experiment with normal mapping I implemented a simple Qt5 NMapper application. As seen from video, it can be used to play with different graphical assets, change lighting conditions, switch normal map x&amp;y-coordinates etc. It also includes the essential 'cave mode' for wiggly fire light.. ;-)<br /><br />

Download NMapper application <a href="http://quitcoding.com/?page=work#nmapper">from here</a> and try it on PC/Mac/RPi or equivalent platform with Qt5.<br /><br />

After this brief intro I'll make a follow-up post within few days about example usage. Have a hacking weekend everyone!<br /><br /><span class="net_nemein_favourites">4 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=8f70c9a2145011e28edbe5828ae08dc78dc7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/8f70c9a2145011e28edbe5828ae08dc78dc7/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=8f70c9a2145011e28edbe5828ae08dc78dc7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/8f70c9a2145011e28edbe5828ae08dc78dc7/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Fri, 12 Oct 2012 12:04:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-8f70c9a2145011e28edbe5828ae08dc78dc7</guid>
        </item>
        <item>
            <title>Qt5 &amp; Raspberry Pi</title>
            <link>http://kgronholm.blogspot.com/2012/09/qt5-raspberry-pi.html</link>
            <description><![CDATA[
I received a Raspberry Pi this week (thanks Nokia &amp; QtonPi!) and naturally baked Qt5 into it as the first thing. Started by just installing premade RPi Qt5 package, but as qmlscene is not yet included, went for building Qt5 following loosely <a href="http://qt-project.org/wiki/RaspberryPi_Beginners_guide">these instructions</a>. About 2 hours later, I had system setup with latest Raspbian image running Qt5 QML apps.<br />
<br />

Last month when Qt5 first beta was coming together I prepared this "<a href="http://kgronholm.blogspot.fi/2012/08/qt5-cinematic-experience.html">Qt5 Cinematic Experience</a>" technology demo and got some good feedback. Samuel Rødal (btw check out his awesome "<a href="http://www.youtube.com/watch?v=_FjuPn7MXMs">Qt 5 based 3D Wayland compositor</a>" video!) kindly tested that it works also in RPi. Yes, it worked and was pretty fast also, but not even close to perfect... Now armed with RPi I wanted to spend some quality time with it, experimenting what the GPU (Broadcom VideoCore IV) likes and hates. So here comes "Qt5 Cinematic Experience - Raspberry Pi Edition":<br />
<br />

<object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/wulbR2R1GpM?fs=1&amp;hl=en_US"> <param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/wulbR2R1GpM?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br />
<br />
The changes made for this RPi version are:
<br />
<ul>
<li>Original version was quite scalable, but it was optimized for ~N9 screen resolutions. I wanted to run RPi in full HD 1080p (1920x1080) so adjusted things to fit better for the larger screen, making everything bigger and better. Though more pixels means more work for CPU&amp;GPU so..</li>
<li>Added FPS item in the top-left corner which shows how frequently QML animation loop gets called. Seeing this all the time while developing gives good feedback on how different changes affect the performance and also adds some demonstration sugar.</li>
<li>Reduced smoke particles amount &amp; size as that was a clear bottleneck.</li>
<li>Another slowdown was DropShadow effect for big movie title texts, switched it now to plain Text.Outline style.</li>
<li>On the other hand, increased shooting star sprite and its particles sizes as these changes didn't notably decrease the performance.</li>
<li>On the RPi side used 128/128 CPU/GPU memory split and to get even more juices out, overclocked it to "medium" 700MHz -&gt; 900MHz (see <a href="http://www.raspberrypi.org/archives/2008">instructions</a>)</li>
<li>Went for a more colorful theme by default, raspberries are bright!</li>
</ul>
These RPi tuned sources as well as original ones are are available <a href="http://quitcoding.com/?page=work#cinex">from here</a> if you wanna grab and hack!
<span class="net_nemein_favourites">4 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=d2738b6e042311e2bcd87fa1e696c458c458&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/d2738b6e042311e2bcd87fa1e696c458c458/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=d2738b6e042311e2bcd87fa1e696c458c458&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/d2738b6e042311e2bcd87fa1e696c458c458/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Fri, 21 Sep 2012 22:24:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-d2738b6e042311e2bcd87fa1e696c458c458</guid>
        </item>
        <item>
            <title>Qt5 Cinematic Experience</title>
            <link>http://kgronholm.blogspot.com/2012/08/qt5-cinematic-experience.html</link>
            <description><![CDATA[
<br />
During the past ~20 months I've made several blog posts about Qt5, QML Scene Graph, shaders and whatnot. As Qt5 beta is getting reeeeally close, I thought this would be a good time for a fresh Qt5 technology demo. This one is called 'Cinematic Experience' and looks a bit like this:<br />
<br />
<object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/kBNelaiCJZg?fs=1&amp;hl=en_US">



<param name="allowFullScreen" value="true">



<param name="allowscriptaccess" value="always">



<embed src="http://www.youtube.com/v/kBNelaiCJZg?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br />
<center>(best viewed <a href="http://www.youtube.com/watch_popup?v=kBNelaiCJZg&vq=hd1080">in HD</a>)</center>
<br />
Cinematic Experience collects many of the new Qt5 QtQuick 2.0 features into the same UX demo application. It uses particles, sprites, path animation, custom shaders etc. features which Qt5 introduces for QML UIs. As usual, source codes are available <a href="http://quitcoding.com/?page=work#cinex">from here</a>.<br />
<br />
<b>Performance note:</b> The GPU in N9 (SGX530, released Jul 2005) is showing its age. Especially fragment shaders need to be very conservative as the GPU just isn't powerful enough for the N9 screen resolution. To get the application perform in N9, some optimizations were required like disabling the normal-mapping lighting and reducing the amount of fog particles. As seen in the video, after these tweakings N9 can run the demo okeyish. Definitely far from velvet, but I would say it's more like butter ;P<br />
<br />
<b>PS.</b> In case you own RPi, Beagleboard, Pandaboard, Snowball or any other embedded hardware running Qt5, please grab the demo and give it a go. I'm waiting for feedback and videos!<span class="net_nemein_favourites">5 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=85bf5ae8e77511e1a3defbf05663c386c386&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/85bf5ae8e77511e1a3defbf05663c386c386/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=85bf5ae8e77511e1a3defbf05663c386c386&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/85bf5ae8e77511e1a3defbf05663c386c386/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Thu, 16 Aug 2012 10:34:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-85bf5ae8e77511e1a3defbf05663c386c386</guid>
        </item>
        <item>
            <title>Qt5 LedScreen component</title>
            <link>http://kgronholm.blogspot.com/2012/06/qt5-ledscreen-component.html</link>
            <description><![CDATA[
<br />
Howdy! Do you remember the time before HD, amoled etc. super sharp screens? When pixels were so big that you could easily count them and any colors were luxury? This is your ticket back to these good ol' times: LedScreen Qt5 &amp; QtQuick 2.0 component! Here is a video presenting it with example applications:<br />
<br />
<object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/CBhRC1oNtnM?fs=1&amp;hl=en_US">



<param name="allowFullScreen" value="true">



<param name="allowscriptaccess" value="always">



<embed src="http://www.youtube.com/v/CBhRC1oNtnM?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br />
<br />
This component allows you to use any QML content as the source for the ledscreen, define led size and color or use colors from the source item. So it doesn't contain kitchen sink yet, but there's only so much you can fit into 60 lines of QML + GLSL with API documentation.. ;-)<br />
<br />
Feel free to grab sources <a href="http://quitcoding.com/?page=work#ledscreen">from here</a> &amp; modify &amp; use as you want!<br />
<br />
PS: Hoping to be able to develop &amp; demo Qt5 soon on Raspberry Pi!<span class="net_nemein_favourites">7 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=ff4f306eb24011e19ff37d6994065dc95dc9&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/ff4f306eb24011e19ff37d6994065dc95dc9/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=ff4f306eb24011e19ff37d6994065dc95dc9&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/ff4f306eb24011e19ff37d6994065dc95dc9/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Sat, 09 Jun 2012 16:33:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-ff4f306eb24011e19ff37d6994065dc95dc9</guid>
        </item>
        <item>
            <title>Smoke The Bugs!</title>
            <link>http://kgronholm.blogspot.com/2012/03/smoke-bugs.html</link>
            <description><![CDATA[
Smoke the Bugs is now available to download from Nokia Store for <a href="http://store.ovi.com/content/262602">Harmattan N9</a> and for <a href="http://store.ovi.com/content/263056">Anna/Belle</a>. No bugs (except software bugs!) were harmed while developing the game, but to know whether this virtual bug smoking is suitable for you, check this video of game play on N9:<br /><br /><object height="260" width="420"><param name="movie" value="http://www.youtube.com/v/LK3Usa4HISM?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/LK3Usa4HISM?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="260" width="420"></embed></object><br /><br />As explained <a href="http://kgronholm.blogspot.com/2011/12/games-for-next-billion.html">here earlier</a>, this was partly an expedition on making a game with pure QML + JavaScript + shader effects. Plan was to make it totally without C++ (excluding the launcher which Qt SDK generates automatically) and to see what the outcome would be. <br /><br />So summing up some random development notes here:<br /><ul><br /><li>Harmattan version of the game utilizes Qt-components for <a href="http://harmattan-dev.nokia.com/docs/library/html/guide/html/Developer_Library_Developing_for_Harmattan_Controlling_rotation.html">portrait main window</a> and for <a href="http://harmattan-dev.nokia.com/docs/library/html/guide/html/Developer_Library_Developing_for_Harmattan_Enabling_swipe_lock.html">disabling swipe</a> while playing. Symbian version does not use Qt-components as pure QML was enough.</li><br /><li>It's good to use <a href="http://doc.qt.nokia.com/4.7/qml-loader.html">Loader</a> for separating rest of the UI from initial "splash screen" for faster startup. Another option on Harmattan would be to show static splash screen image with <a href="http://harmattan-dev.nokia.com/docs/library/html/guide/html/main.html">invoker</a>.</li><br /><li>In this game, loaders are also used for help and high score views. As these are not often used, it is better to save memory and only load them when needed. Loading is fast enough not to cause notable delay.</li><br /><li><a href="http://doc.qt.nokia.com/4.7/qml-shadereffectitem.html">ShaderEffectItem</a> is available on Harmattan, Belle and Anna+Qt 4.7.4, so it's possible to target quite a many devices. Exception is Nokia 500 which is lacking GPU for OpenGL.</li><br /><li>With Symbian, setting QGLWidget for viewport is required to be able to use ShaderEffectItem. On Harmattan this is not needed as the default graphics system is already set to use OpenGL.</li><br /><li>When application is minimized, unload ShaderEffectItems or set their 'visible' property to false. Not doing this causes minimized application to use resources unnecessarily. Application state can be tracked with <a href="http://doc.qt.nokia.com/4.7-snapshot/qml-qt.html#application-prop">Qt.application.active</a></li><br /><li>When writing shaders, be careful to keep them performing well. Symbian devices and especially newer Belle ones can handle heavy fragment shaders better than N9. As an example, moving night effect math from fragment shader to vertex shader improved performance notably on N9.</li><br /><li>Avoid too many ShaderEffectItems to save resources. As an example, instead of each bug containing its own burning effect, there are three global effect items in a queue, positioned and animated when needed. If three simultaneously burning bugs are not enough, it's easy to add more effect items into queue.</li><br /><li><a href="http://doc.qt.nokia.com/4.7/qdeclarativeperformance.html">QML performance notes</a> give good general guidelines what to avoid. <a href="http://doc.qt.nokia.com/qt5/qtquick2-qtquick2-performance.html">Qt5 version</a> of this document is even better and provides also information on how Qt5 scenegraph and V8 engine changes reflect to optimizing QML performance.</li><br /></ul><br />P.S. I joined Nokia ~month ago which may increase my bias towards Qt... But it's not like I wouldn't have made <a href="http://kgronholm.blogspot.com/2011/02/superior-technology.html">my opinion</a> pretty clear already ;-)<span class="net_nemein_favourites">4 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=bce4839a72cc11e1b0806fbcc40ab61db61d&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/bce4839a72cc11e1b0806fbcc40ab61db61d/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=bce4839a72cc11e1b0806fbcc40ab61db61d&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/bce4839a72cc11e1b0806fbcc40ab61db61d/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Tue, 20 Mar 2012 20:16:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-bce4839a72cc11e1b0806fbcc40ab61db61d</guid>
        </item>
        <item>
            <title>Games for the Next Billion</title>
            <link>http://kgronholm.blogspot.com/2011/12/games-for-next-billion.html</link>
            <description><![CDATA[
Catchy title right? Don't worry, content partly matches to that description... ;)<br /><br />It seems that I quite often include videos in my blog posts. There is no reason to stray away from that habit now, so here's a video showing a beta version of "Smoke the Bugs!" game on N950 & N8:<br /><br /><object height="265" width="320"><param name="movie" value="http://www.youtube.com/v/Kz3ucpzUueg?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/Kz3ucpzUueg?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="265" width="320"></embed></object><br /><br />By looking at the graphics, effects, dynamic lights etc. what you saw was a pretty average OpenGL (ES 2.0) game, right? Well yes and no... Yes, GLSL shaders have been used for the effects. But no, there is zero lines of OpenGL and in fact also zero lines of C/C++ in the game. It's all QML + GLSL + JavaScript.<br /><br />To work on current Harmattan & Symbian devices, game uses Qt 4.7 with the shaders plugin. This is an okay-ish platform, as you see from the video: N8@680MHz runs at smooth ~60fps. But I have also smelled, tasted and floated in the sweet velvet of Qt5 and can tell you as a fact that it will be much better. With Qt5 & QtQuick 2.0, applications will get a healthy boost of performance, smoothness and possibility for even better effects.<br /><br />Here is a short list of improvements QtQuick-based games will gain from Qt5:<br />- <span style="font-weight:bold;">Performance:</span> QML Scene Graph will render everything faster than Qt4 QGraphicsView-based renderer, especially when the amount and complexity of (animated) items rises.<br />- <span style="font-weight:bold;">Performance2:</span> New V8 JavaScript engine performs much better than the JavaScriptCore engine in Qt4. Also thanks to this integration work, there is deeper co-operation between QML and JavaScript. <br />- <span style="font-weight:bold;">Smoothness:</span> Qt5 moves rendering into a separate thread which makes UI feel much smoother.<br />- <span style="font-weight:bold;">Effects:</span> QtQuick 2.0 supports shader effects to make QML UI's much more dynamic. Using shaders with Qt4 is possible with the shader plugin as shown above, but Qt5 native support will be more complete.<br />- <span style="font-weight:bold;">Particles:</span> QtQuick 1.0 contains particles plugin but it's very basic when compared to QtQuick 2.0 particles. No game can survive without particles!<br />- <span style="font-weight:bold;">QML features:</span> There are additions in QML which will suit games very well like SpriteImage for sprite animations and PathAnimation & PathInterpolator to animate along a custom path instead of linear path.<br />- <span style="font-weight:bold;">QtCreator:</span> Had to mention this one still as the work done in QtCreator Qt5 integration, QML debugger & analyzer etc. will improve the developer (that's me) productivity.<br /><br />Now look at the video again to see what the old 2011 QML looked like, add all the above improvements to it and use your imagination... For me it feels like Qt5 & QtQuick 2.0 can offer a great platform not just for applications but also for games. Billion or two, I don't really care... ;) Happy New Year 2012 Everyone!<span class="net_nemein_favourites">6 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=915188ec339b11e19f936bd148d13bdb3bdb&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/915188ec339b11e19f936bd148d13bdb3bdb/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=915188ec339b11e19f936bd148d13bdb3bdb&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/915188ec339b11e19f936bd148d13bdb3bdb/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Sat, 31 Dec 2011 12:16:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-915188ec339b11e19f936bd148d13bdb3bdb</guid>
        </item>
        <item>
            <title>5inarow @ N9</title>
            <link>http://kgronholm.blogspot.com/2011/10/5inarow-n9.html</link>
            <description><![CDATA[
Hey! Qt Developer Days '11 are over and I want to thank all organizers & attendees, what a great event again!!<br /><br />For fresh owners of N9 (congratulations!), I'll say that 5inarow game is now available through Nokia Store. Here's how to get beaten by medium level:<br /><br /><object height="265" width="320"><param name="movie" value="http://www.youtube.com/v/ASdnWXShRVE?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/ASdnWXShRVE?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="265" width="320"></embed></object><br /><br />Symbian version may follow later, but for now game is only available on N9/N950. It's free and contains no ads so if you feel like it, go grab it from <a href="http://store.ovi.com/content/209023">here</a>.<br /><br /><span style="font-weight:bold;">PS.</span> If this tickles your <span style="font-style:italic;">"How to implement a Qt game like that?"</span> or <span style="font-style:italic;">"I could do much better than that!"</span> -nerves, source codes and Qt Quick Game Programming tutorial are still available from <a href="http://quitcoding.com/?page=work#qtquick">here</a>. These are for the older N900 version, without e.g. sounds and computer AI. But an idea of updating the document for Qt5 & shader effects is floating in my mind, we'll see, we'll see...<span class="net_nemein_favourites">6 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=dd402266019d11e1a27e03f6d8c49f709f70&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/dd402266019d11e1a27e03f6d8c49f709f70/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=dd402266019d11e1a27e03f6d8c49f709f70&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/dd402266019d11e1a27e03f6d8c49f709f70/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Fri, 28 Oct 2011 21:04:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-dd402266019d11e1a27e03f6d8c49f709f70</guid>
        </item>
        <item>
            <title>Qt5 + Distance Field Effects</title>
            <link>http://kgronholm.blogspot.com/2011/08/qt5-distance-field-effects-yoann-lopes.html</link>
            <description><![CDATA[
Yoann Lopes blogged recently about <a href="http://labs.qt.nokia.com/2011/07/15/text-rendering-in-the-qml-scene-graph/">Text Rendering in the QML Scene Graph</a> using distance field alpha testing. This technique brings smoothly scalable fonts with fast OpenGL rendering to Qt5.
<br />
<br />Distance field is of course not limited for just fonts (although they are the most usual use-case), same technique can be used also with suitable images. Here is a video of an example application running on PC and N950 which demonstrates the effect:
<br />
<br /><object height="265" width="320"><param name="movie" value="http://www.youtube.com/v/__NBFqCOGqs?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/__NBFqCOGqs?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="265" width="320"></embed></object>
<br />
<br />As you can see, the original image becomes quite pixelated when zooming in, which is expected as <span style="font-weight:bold;">image is only 256x160 pixels</span> (smiley 64x64 pixels). But enabling smoothing with distance field shader makes it very scalable with nice anti-aliasing, outline and transparency. As the pixmap required for this is so small, GPU / fragment shader has less to process leading to better performance. Like with fonts, adding effects such as outline, smoothing, glow and shadow can be implemented very effectively.
<br />
<br />This application is under 300 lines of QML with a GLSL shader, including slider and toggle button components. So if you have <a href="https://qt.gitorious.org/qt/qt5">Qt5</a> built up and want to give it a try, source codes are available from <a href="http://quitcoding.com/?page=work#QUItDistFieldFX">here</a>. Creative usage ideas and astonishing shaders are welcomed!<span class="net_nemein_favourites">7 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=e9d753a2cbea11e0b9c7973bed539d449d44&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/e9d753a2cbea11e0b9c7973bed539d449d44/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=e9d753a2cbea11e0b9c7973bed539d449d44&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/e9d753a2cbea11e0b9c7973bed539d449d44/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Sun, 21 Aug 2011 13:40:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-e9d753a2cbea11e0b9c7973bed539d449d44</guid>
        </item>
        <item>
            <title>Qt Contributors' Summit</title>
            <link>http://kgronholm.blogspot.com/2011/06/qt-contributors-summit.html</link>
            <description><![CDATA[
<a href="http://bit.ly/qcswiki"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 196px; height: 121px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBCtVYW1y1DkfT01uaRGvRJ_Y42IqATkyLdgN5D6ylDG_ZumH2lV36zpRxDfJZRtU8MGGz3Q793SEXdw83GXuMTObRiOK-uhn2Abj65WXpWwhw3wYJLW9SZdrQSw2Lkr8kUbXuNlzhKdg/s320/summit_01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5617799951387394306" /></a><br /><br />I will be mostly interested in discussions about Qt5 graphics stack, qml-box2d, QtQuick 2.0 and of course QML Scene Graph. So whenever something related to these is going on, please grab me in!<span class="net_nemein_favourites">4 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=c2c8044695fd11e0ad33df499201a6d1a6d1&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/c2c8044695fd11e0ad33df499201a6d1a6d1/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=c2c8044695fd11e0ad33df499201a6d1a6d1&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/c2c8044695fd11e0ad33df499201a6d1a6d1/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Mon, 13 Jun 2011 22:53:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-c2c8044695fd11e0ad33df499201a6d1a6d1</guid>
        </item>
        <item>
            <title>QML Metaballs</title>
            <link>http://kgronholm.blogspot.com/2011/05/qml-metaballs.html</link>
            <description><![CDATA[
Kimi, the man with excellent genes, blogged few days ago <a href="http://labs.qt.nokia.com/2011/05/03/qml-shadereffectitem-on-qgraphicsview/">in here</a> about QML extension plugin that provides shader effects for QGraphicsView based Qt Quick 1.x. What makes this magnificent, is the fact that API matches to what QML Scene Graph (at least currently) has, making it a perfect solution to start experimenting with the future. Also, as it is a separate plugin sitting on top of standard Qt 4.7.x, it turns "Qt everywhere" to "shaders everywhere" right now while waiting for the full Scene Graph glory.<br /><br />All you need is 1) Qt 4.7 installed in suitable environment (Linux, Windows, Symbian etc.) 2) the qml1-shadersplugin and 3) imagination for writing QML & GLSL.<br /><br />What I came up with using the plugin is something they call <a href="http://en.wikipedia.org/wiki/Metaballs">metaballs</a>:<br /><br /><object height="265" width="320"><param name="movie" value="http://www.youtube.com/v/2nYk2eO-wRE?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/2nYk2eO-wRE?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="265" width="320"></embed></object><br /><br />Source codes are available <a href="http://quitcoding.com/?page=work#metaballs">in here</a>, go wild! And kudos to Nokia/Qt team for providing this plugin!<span class="net_nemein_favourites">7 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=26c524ce77ef11e0a123ebc443fa7a3c7a3c&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/26c524ce77ef11e0a123ebc443fa7a3c7a3c/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=26c524ce77ef11e0a123ebc443fa7a3c7a3c&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/26c524ce77ef11e0a123ebc443fa7a3c7a3c/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Fri, 06 May 2011 16:19:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-26c524ce77ef11e0a123ebc443fa7a3c7a3c</guid>
        </item>
        <item>
            <title>Superior technology</title>
            <link>http://kgronholm.blogspot.com/2011/02/superior-technology.html</link>
            <description><![CDATA[
I decided not to blog anything right after Nokia & Microsoft deal was published. And I'm glad about that, because I have now reached the state where I'm actually excited again! Volker Hilsheimer made a very good <a href="http://labs.qt.nokia.com/2011/02/18/buckets-of-cold-water/">summary about the situation from Qt perspective</a>.<br /><br />Instead of going deep into politics and sales speeches, I decided to approach this from a technical perspective. Keeping things simple and concrete, here's one example UI implemented in few hours with Qt Quick & QML Scene Graph:<br /><br /><object height="265" width="320"><param name="movie" value="http://www.youtube.com/v/VMz5Z_vdDSA?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/VMz5Z_vdDSA?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="265" width="320"></embed></object><br /><br />Please spend a bit time looking at what is really happening in there: wave, colorize, fading, water, text highlight... This is ~300 lines of QML + GLSL, performing smoothly on good ol' N900 hardware. Same can not be done using WP7 Silverlight & XAML, period.<br /><br />Qt is still the best platform for "mobile phones" and we have also here good ingredients for the "future disruption" like Nokia management has outlined. But technology is nothing without a community (a.k.a. "ecosystem"), so question is that are we going to continue the work and do it? While you think about that, I'll continue hacking with my superior technology! =)<span class="net_nemein_favourites">15 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=60068ad63d5511e0bb98e9cabc8861d561d5&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/60068ad63d5511e0bb98e9cabc8861d561d5/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=60068ad63d5511e0bb98e9cabc8861d561d5&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/60068ad63d5511e0bb98e9cabc8861d561d5/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Mon, 21 Feb 2011 00:23:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-60068ad63d5511e0bb98e9cabc8861d561d5</guid>
        </item>
        <item>
            <title>QML Scene Graph demo</title>
            <link>http://kgronholm.blogspot.com/2011/01/qml-scene-graph-demo.html</link>
            <description><![CDATA[
Here is a small demo of QML animations combined with OpenGL shader effects, running on <a href="http://qt.gitorious.org/qt-labs/scene-graph">QML Scene Graph</a>:<br /><br /><object height="265" width="320"><param name="movie" value="http://www.youtube.com/v/7ecjf0WlvwU?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/7ecjf0WlvwU?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="265" width="320"></embed></object><br /><br />At first, everything is gray and plain. But once you enable <a href="http://quitcoding.com">QUIt</a> mode, the whole world feels a lot more colorful and dynamic. Some call this feeling <a href="http://labs.qt.nokia.com/2010/12/02/velvet-and-the-qml-scene-graph/">velvet</a>, I call it.. exciting 2011!<span class="net_nemein_favourites">8 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=3820a22c218f11e09efda1e0c9062d472d47&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/3820a22c218f11e09efda1e0c9062d472d47/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=3820a22c218f11e09efda1e0c9062d472d47&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/3820a22c218f11e09efda1e0c9062d472d47/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Sun, 16 Jan 2011 18:00:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-3820a22c218f11e09efda1e0c9062d472d47</guid>
        </item>
        <item>
            <title>MeeGo Conference &amp; SteelRat</title>
            <link>http://kgronholm.blogspot.com/2010/11/meego-conference-steelrat.html</link>
            <description><![CDATA[
I'm personally not attending to MeeGo Conference this year. Past two Maemo Summits have been great, so I'm sure this time things will be even <span style="font-style:italic;">Harder, Better, Faster, Stronger!</span><br /><br />But in a way part of me is attending, as one thing I have been working with recently is a UX prototype called "SteelRat". It will be shown in Nomovok booth, running on top of MeeGo in different ARM development boards. This is what SteelRat looked like in Freescale i.MX51 during Qt Developer Days:<br /><br /><object height="265" width="320"><param name="movie" value="http://www.youtube.com/v/osDlTdl5lAk?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/osDlTdl5lAk?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="265" width="320"></embed></object><br /><br />But anyway, wishing good times for all you attending!<span class="net_nemein_favourites">1 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=b295b2c2f09d11df8f5c694503d2495b495b&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/b295b2c2f09d11df8f5c694503d2495b495b/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=b295b2c2f09d11df8f5c694503d2495b495b&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/b295b2c2f09d11df8f5c694503d2495b495b/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Sun, 14 Nov 2010 23:41:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-b295b2c2f09d11df8f5c694503d2495b495b</guid>
        </item>
        <item>
            <title>Qt Quick Game Programming</title>
            <link>http://kgronholm.blogspot.com/2010/10/qt-quick-game-programming.html</link>
            <description><![CDATA[
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://quitcoding.com/?page=work#qtquick"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 140px; height: 181px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_tCRYamupGVpCAV8CAy_y-0d4yLF98hFILwTINQtztGJRcK8Trok1oRCLIS6dofH65kVA1GkxW6na8dkq9gf2YIlRgeZZ50A8e-trrIWsEa-IcwUNfo0XOhgI3M0PA4wPOS3WLJyksvE/s320/qt_quick_game_programming_cover.png" alt="" id="BLOGGER_PHOTO_ID_5531617736368448338" border="0" /></a>Are you interested about Qt Quick? Want to get jiggy with it and develop mad skillz? Wanna become first Qt Quick OVI Store millionaire? Good news, we have a (partial) solution!<br /><br />We've been working with Qt Quick / QML for quite some time now and decided to write ~30 pages short tutorial which goes through step-by-step the implementation of <a href="http://quitcoding.com/?page=work#5inarow">5-in-a-row game</a>. My recommendation would be to read the tutorial while browsing game sources and reaching towards <a href="http://doc.qt.nokia.com/4.7/qtquick.html">Qt Quick API documentation</a> whenever interested in more details.<br /><br />Download the "Qt Quick Game Programming" tutorial from <a href="http://quitcoding.com/?page=work#qtquick">here</a>!<span class="net_nemein_favourites">14 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=b01f93b4df7c11df942ba12230077da77da7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/b01f93b4df7c11df942ba12230077da77da7/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=b01f93b4df7c11df942ba12230077da77da7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/b01f93b4df7c11df942ba12230077da77da7/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Sun, 24 Oct 2010 17:15:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-b01f93b4df7c11df942ba12230077da77da7</guid>
        </item>
        <item>
            <title>5-in-a-row</title>
            <link>http://kgronholm.blogspot.com/2010/10/5-in-row.html</link>
            <description><![CDATA[
We released today a game called 5-in-a-row. It's implemented with Qt Quick / QML and designed for 2 players playing next to each other:<br /><br /><object height="265" width="320"><param name="movie" value="http://www.youtube.com/v/0cfzkKtnzfg&amp;hl=en_US&amp;fs=1&amp;"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/0cfzkKtnzfg&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="265" width="320"></embed></object><br /><br />Want it? Package for N900 as well as source codes are available from <a href="http://quitcoding.com/?page=work#5inarow">here</a>!<span class="net_nemein_favourites">7 <a href="http://maemo.org/news/?net_nemein_favourites_execute=fav&net_nemein_favourites_execute_for=ae8a2ff0df7c11df942ba12230077da77da7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/fav/midgard_article/ae8a2ff0df7c11df942ba12230077da77da7/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-favorite.png" style="border: none;" alt="Add to favourites" title="Add to favourites" /></a>0 <a href="http://maemo.org/news/?net_nemein_favourites_execute=bury&net_nemein_favourites_execute_for=ae8a2ff0df7c11df942ba12230077da77da7&net_nemein_favourites_url=https://maemo.org/news/favorites//json/bury/midgard_article/ae8a2ff0df7c11df942ba12230077da77da7/" class="net_nemein_favourites_create"><img src="http://static.maemo.org:81/net.nemein.favourites/not-buried.png" style="border: none;" alt="Bury" title="Bury" /></a></span>]]></description>
            <author>Kaj Grönholm &lt;kgronholm@gmail.com&gt;</author>
            <category>feed:ffedab845b17ad5f072a1f90af70d0f9</category>
            <pubDate>Sun, 24 Oct 2010 17:01:00 +0000</pubDate>
            <guid>http://maemo.org/midcom-permalink-ae8a2ff0df7c11df942ba12230077da77da7</guid>
        </item>
    </channel>
</rss>
