<?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>protected  * void &#187; kde</title>
	<atom:link href="http://www.danilocesar.com/blog/category/kde/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.danilocesar.com/blog</link>
	<description>Tecnologia, Linux e Software Livre</description>
	<lastBuildDate>Thu, 30 Sep 2010 16:00:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Symbian, 2D games e Flags de Optimização.</title>
		<link>http://www.danilocesar.com/blog/2010/09/30/symbian-2d-games-e-flags-de-optimizacao-performance/</link>
		<comments>http://www.danilocesar.com/blog/2010/09/30/symbian-2d-games-e-flags-de-optimizacao-performance/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 15:53:34 +0000</pubDate>
		<dc:creator>Danilo Cesar</dc:creator>
				<category><![CDATA[kde]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Maemo]]></category>
		<category><![CDATA[Mandriva]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Portáteis]]></category>
		<category><![CDATA[QT]]></category>
		<category><![CDATA[SL]]></category>
		<category><![CDATA[Nokia]]></category>
		<category><![CDATA[Symbian]]></category>

		<guid isPermaLink="false">http://www.danilocesar.com/blog/?p=224</guid>
		<description><![CDATA[Este artigo é uma tradução rápida do original&#8230; Após dois anos e meio desenvolvendo rich ui&#8217;s usando QGraphicsView e tentando todo tipo de flags exóticas ou abordagens diferentes para conseguir melhores resultados de performance com Symbian, estou publicando aquelas que podem ser úteis para programadores de jogos. Com a ajuda do Ademar escolhemos um bom [...]]]></description>
			<content:encoded><![CDATA[<p><em>Este artigo é uma tradução rápida do <a href="http://labs.danilocesar.com/blog/2010/09/19/symbian-2d-games-and-qt-optimization-flags/">original</a>&#8230;</em><br />
Após dois anos e meio desenvolvendo <em>rich ui&#8217;s</em> usando QGraphicsView e tentando todo tipo de flags exóticas ou abordagens diferentes para conseguir melhores resultados de performance com Symbian, estou publicando aquelas que podem ser úteis para programadores de jogos.</p>
<p>Com a ajuda do <a href="http://www.ademar.org">Ademar</a> escolhemos um bom caso de uso. Um &#8220;bouncing game&#8221;.</p>
<h2>O Jogo</h2>
<p><img class="size-medium wp-image-52 alignleft" style="margin: 2px 20px 2px 2px;" title="ChainReaction" src="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/10_balls-168x300.png" alt="10 balls image of chainreaction game" width="151" height="270" /></p>
<div style="display: block;">
<p>O Jogo é bem simples: Algumas bolinhas correndo pela tela; Se você pressionar alguma delas ela vai explodir. Se uma bolinha explodida tocar em uma bola normal, esta explode também. Mas no fim das contas a lógica do jogo não é muito importante agora, mas sim as características do jogo vistas pela visão de um desenvolvedor. São elas:</p>
<ul>
<li>Background estático.</li>
<li>Bolinhas podem ser implementadas como QGraphicsItem.</li>
<li>Bolinhas vermelhas estão sempre em movimento.</li>
<li>Não acontece colisão entre as bolinhas não explodidas.</li>
<li>A lista de elementos pode crescer.</li>
<li>Os elementos estão espalhados aleatoriamente pela tela.</li>
</ul>
</div>
<div style="display: block; clear: both;"><span style="color: #ff6600;"><strong><em>Os comentários abaixo são válidos para jogos com as características acima. Mudanças nestas características podem influenciar o resultado final.</em></strong></span></div>
<h2>As flags</h2>
<p>As flags que comentarei neste post são:</p>
<ul>
<li><a href="http://doc.trolltech.com/4.6/qgraphicsscene.html#ItemIndexMethod-enum">QGraphicsScene::ItemIndexMethod</a></li>
<li><a href="http://doc.trolltech.com/4.6/qgraphicsview.html#OptimizationFlag-enum">QGraphicsView::OptimizationFlags</a></li>
<li><a href="http://doc.trolltech.com/4.6/qgraphicsview.html#ViewportUpdateMode-enum">QGraphicsView::ViewportUpdateMode</a></li>
</ul>
<h2>Os resultados</h2>
<p>* Os testes foram executados em um Nokia 5800, RM-356 rodando firmware V51.0.006 com Qt 4.6.3.<br />
** O eixo Y dos testes é o FPS. Quanto maior, melhor.</p>
<h3>Testes com 10 elementos</h3>
<p><a href="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/bsp-noindex-all.png"><img class="alignnone size-full wp-image-56" title="bsp-noindex-all" src="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/bsp-noindex-all.png" alt="" width="721" height="374" /></a></p>
<p>Primeiro de tudo, tentei as 4 formas de update da Viewport usando 10 elementos na tela. O MinimalViewportUpdate e o SmartViewportUpdate renderam a maior taxa de FPS (34 e 33.5). A documentação da biblioteca mostra que <a href="http://doc.trolltech.com/4.6/qgraphicsscene.html#ItemIndexMethod-enum">NoIndex</a> é a melhor opção para cenas dinâmicas. Bem, a diferença é bem pequena, mas é verdade.</p>
<p>Neste caso, para os próximos testes, usarei sempre NoIndex.</p>
<h4>E quanto às flags?</h4>
<p><a href="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/opt-1.png"><img class="alignnone size-full wp-image-57" title="opt-1" src="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/opt-1.png" alt="" width="575" height="379" /></a></p>
<p>Dado os melhores resultado dos últimos testes (SmartViewportUpdate and BoundingRectViewportUpdate) foi feito outro teste com as duas flags de optimização <a href="http://doc.trolltech.com/4.6/qgraphicsview.html#OptimizationFlag-enum">QGraphicsView::DontSavePainterState</a> e <a href="QGraphicsView::DontAdjustForAntialiasing">QGraphicsView::DontAdjustForAntialiasing</a>. A conclusão foi que estas flags de optimização rendem uma pequena melhora no desempenho, mas somente se você puder controlar precisamente a maneira como seus elementos são desenhados. Caso contrário você pode enfrentar problemas de renderização.</p>
<h3>20 elementos</h3>
<p><a href="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/opt-20.png"><img class="alignnone size-full wp-image-58" title="opt-20" src="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/opt-20.png" alt="" width="728" height="375" /></a></p>
<h3>30 elementos</h3>
<p><a href="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/opt-30.png"><img class="alignnone size-full wp-image-60" title="opt-30" src="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/opt-30.png" alt="" width="723" height="376" /></a></p>
<h3>40 elementos</h3>
<p><a href="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/opt-40.png"><img class="alignnone size-full wp-image-61" title="opt-40" src="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/opt-40.png" alt="" width="723" height="369" /></a></p>
<h2>Lições aprendidas</h2>
<p>É importante selecionar corretamente a maneira como serão feitos dos updates da Viewport. Isso pode fazer a diferença.</p>
<p>Se existem muitos elementos dinâmicos, e se eles estão espalhados por toda a tela, é mais barato pintar toda a tela (ou pelo menos o bounding rect) do que tentar determinar a área afetada pelo movimento e só pintar estes espaços.</p>
<p>Para ser honesto eu estava esperando um resultado melhor do FullViewportUpdate, mas acredito que obteríamos melhores resultados (do que o BoundingRect) se fosse utilizado um background não estático.</p>
<h2>Mas&#8230; E se..?</h2>
<p>Q:O que aconteceria se fosse utilizado somente um único graphicsItem para pintar todas a bolinhas? O que aconteceria se uma bolinha não fosse um ítem, mas apenas um objeto com um método de renderização?</p>
<p>R: Fiquei um pouco surpreso com o resultado, mas o desempenho do Qt (especialmente os states do QPainter) melhorou muito desde a versão 4.6 e o resultado deste teste obteve resultados piores do que usando vários QGraphicsItems. Esta abordagem obtém melhor rendimento que a abordagem padrão apenas se o número de elementos é maior que 60.</p>
<p><a href="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/hack.png"><img class="alignnone size-full wp-image-62" title="hack" src="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/hack.png" alt="" width="521" height="379" /></a></p>
<h2>Depois de escrever os testes, o que acontece com o código?</h2>
<p>Usando os conhecimentos adquirido pelos testes e com a ajuda de uma das designers do INdT &#8211; <a href="http://www.naraosga.com">Nara</a> &#8211; estou liberando uma versão de um jogo baseado na engine dos testes. Não está totalmente concluído, faltam alguns elementos, mas já está jogável. =)</p>
<p><a href="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/chubbalubba.png"><img class="alignnone size-medium wp-image-69" title="chubbalubba" src="http://labs.danilocesar.com/blog/wp-content/uploads/2010/09/chubbalubba-168x300.png" alt="" width="168" height="300" /></a></p>
<p><a href="http://labs.danilocesar.com/qt/symbian/chubbyluba.sis">Symbian package here!</a></p>
<p>Por enquanto segue apenas o demo, e em breve a versão completa na Ovi Store mais perto de você!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilocesar.com/blog/2010/09/30/symbian-2d-games-e-flags-de-optimizacao-performance/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>QtMobility Project, ou desenvolvendo para Symbian no Linux</title>
		<link>http://www.danilocesar.com/blog/2010/02/25/qtmobility-project-ou-desenvolvendo-para-symbian-no-linux/</link>
		<comments>http://www.danilocesar.com/blog/2010/02/25/qtmobility-project-ou-desenvolvendo-para-symbian-no-linux/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 19:27:10 +0000</pubDate>
		<dc:creator>Danilo Cesar</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Maemo]]></category>
		<category><![CDATA[Mandriva]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[QT]]></category>
		<category><![CDATA[SL]]></category>
		<category><![CDATA[S60]]></category>
		<category><![CDATA[Symbian]]></category>

		<guid isPermaLink="false">http://www.danilocesar.com/blog/?p=206</guid>
		<description><![CDATA[Como nem só de Maemo Meego vive o homem, então é hora de iniciar projetos com Symbian. O fato de sermos usuários Linux não nos afasta mais deste objetivo. O colega Lizardo, não muito feliz com a dependência do Janelas, adaptou com sucesso o famigerado GNUPOC para funcionar com o Qt 4.6.X, dando-nos assim um [...]]]></description>
			<content:encoded><![CDATA[<p>Como nem só de <del datetime="2010-02-25T18:15:55+00:00">Maemo</del> Meego vive o homem, então é hora de iniciar projetos com Symbian.</p>
<p>O fato de sermos usuários Linux não nos afasta mais deste objetivo. O colega <a href="http://lizardo.wordpress.com">Lizardo</a>, não muito feliz com a dependência do Janelas, <a href="http://lizardo.wordpress.com/2010/02/18/installing-qt-for-symbian-sdk-4-6-2-on-linux/">adaptou com sucesso</a> o famigerado <a href="http://www.martin.st/symbian/">GNUPOC</a> para funcionar com o Qt 4.6.X, dando-nos assim um ambiente <del datetime="2010-02-25T18:15:55+00:00">agradável</del> de desenvolvimento Qt/Symbian no Linux.</p>
<p>Graças a ele temos qmake, QGraphicsView e QCoisas funcionando da mesma forma como funcionavam no desktop.</p>
<p><strong>E as APIs específicas como GPS, sensores e rede?</strong></p>
<p>A idéia do Qt everywhere inclui abstrair a API não tão bonita do symbian e maemo (e outros) para uma única API Qt.</p>
<p>Seguindo este princípio lançaram, dia 15/02, um pacote beta do <a href="http://qt.nokia.com/developer/new-qt-apis">Qt-Mobility Project</a>, com classes Qt para sensores, GPS, contatos e etc.</p>
<p>A instalação é simples mas, para <a href="http://lizardo.wordpress.com/2010/02/18/installing-qt-for-symbian-sdk-4-6-2-on-linux/">quem seguiu os passos do Lizardo</a>, basta utilizar este <a href="http://labs.danilocesar.com/files/qt-mobility-install.sh">script</a> e passar o diretório onde o download do <a href="http://get.qt.nokia.com/qt/solutions/qt-mobility-symbian-1.0.0-beta1.zip">pacote</a> foi feito:</p>
<p><code>qt-mobility-install.sh &lt;directory&gt; </code></p>
<p><strong>*Observação</strong>: Não esqueça de setar as variáveis de ambiente $EPOCROOT e $PATH, de forma que o qmake utilizado seja o da instalação para S60</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilocesar.com/blog/2010/02/25/qtmobility-project-ou-desenvolvendo-para-symbian-no-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Have you ever seen KDE mobil?</title>
		<link>http://www.danilocesar.com/blog/2009/08/27/have-you-ever-seen-kde-mobil/</link>
		<comments>http://www.danilocesar.com/blog/2009/08/27/have-you-ever-seen-kde-mobil/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 17:27:02 +0000</pubDate>
		<dc:creator>Danilo Cesar</dc:creator>
				<category><![CDATA[/dev/null]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mandriva]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[QT]]></category>

		<guid isPermaLink="false">http://www.danilocesar.com/blog/?p=199</guid>
		<description><![CDATA[I have! =)]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.danilocesar.com/blog/wp-content/uploads/2009/08/kde_mobil.jpg"><img class="alignnone size-medium wp-image-198" title="kde_mobil" src="http://www.danilocesar.com/blog/wp-content/uploads/2009/08/kde_mobil-300x225.jpg" alt="kde_mobil" width="300" height="225" /></a></p>
<p>I have! =)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilocesar.com/blog/2009/08/27/have-you-ever-seen-kde-mobil/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

