<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Einar Ingebrigtsen</title>
    <description>A playground</description>
    <link>http://www.ingebrigtsen.info/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.5.0</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://www.ingebrigtsen.info/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>My name</dc:creator>
    <dc:title>Einar Ingebrigtsen</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <media:copyright>(C)2009</media:copyright><media:thumbnail url="http://www.ingebrigtsen.info/themes/Grey/Images/myself.png" /><media:keywords>Silverlight,net,C,development,Java,Microsoft,Apple</media:keywords><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology/Podcasting</media:category><itunes:owner><itunes:email>einar@dolittle.com</itunes:email><itunes:name>Einar Ingebrigtsen</itunes:name></itunes:owner><itunes:author>Einar Ingebrigtsen</itunes:author><itunes:explicit>no</itunes:explicit><itunes:image href="http://www.ingebrigtsen.info/themes/Grey/Images/myself.png" /><itunes:keywords>Silverlight,net,C,development,Java,Microsoft,Apple</itunes:keywords><itunes:subtitle>Einars Storytime</itunes:subtitle><itunes:summary>Random ramblings from a Norwegian Developer</itunes:summary><itunes:category text="Technology"><itunes:category text="Podcasting" /></itunes:category><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/einari" type="application/rss+xml" /><item>
      <title>[Getting realtime data from Tollef Slaathaug]</title>
      <description>&lt;p&gt;
Tollef Slaathaug is a senior developer at Baze Technology, a software company based in Porsgrunn, Norway. Tollef has great experience with working with optimizations in .net code. This show we&amp;#39;re talking about their project and how they have done things to get the desired performance.
&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;
&lt;table border="0"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;img style="max-width: 800px" src="/images/flag_usa.png" alt="" width="64" height="64" /&gt;
			&lt;/td&gt;
			&lt;td&gt;English&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;img style="max-width: 800px" src="http://www.ingebrigtsen.info/image.axd?picture=cd_music.png" border="0" alt="" width="64" height="64" /&gt;
			&lt;/td&gt;
			&lt;td&gt;&lt;a href="http://www.ingebrigtsen.info/Podcasts/IngebrigtsenShow8.mp3"&gt;Download full MP3&lt;/a&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;img src="/images/podcast.png" alt="" /&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=304523653"&gt;Subscribe on iTunes&lt;/a&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/h3&gt;
&lt;br /&gt;
&lt;strong&gt;Some irrelevant information&lt;/strong&gt;
&lt;br /&gt;
The recording of this show was done a little more than a month ago. Normally I use Oovoo to do the shows with persons sitting remote, it has excellent audio and video quality. This day, my freebie account had expired - instead of opening up a new account, which I should have done (twenty twenty heinsight and all), I decided to use Skype and found a 3rd party software that could intercept Skype calls and save the streams to disk. All nice, so far. &lt;br /&gt;
&lt;br /&gt;
Comes editing day; we had two takes, due to loss of connection and the application had therefore produced two AVI files. All good, at least I thought so. Turns out that it had created AVI files with multiple video and audio streams in them, two streams for video and two for audio, representing both cameras and microphones. Seemed reasonable enough. Only problem is that most editing software didn&amp;#39;t figure this out. On top of this, it had used Microsoft MPEG4 for video and audio was supposedly in WMA format, but most applications didn&amp;#39;t recognize it. &lt;br /&gt;
&lt;br /&gt;
Anyhow, weeks went by, I went on a holiday, came back and was ready to start editing again. I figured I&amp;#39;d use GraphEdit that was part of the DirectShow and later in the DirectX SDK. Turns out it wasn&amp;#39;t there anymore. Googled away and found someone who had created a nice version themselves of it and created a graph and got all the streams out into separate files. I felt really proud of myself.&lt;br /&gt;
&lt;br /&gt;
It was finally time to get it all into GarageBand and edit and get it all out. Trouble was not over. The application I used that hooked into Skype and streamed it all to disk had done something quite interesting. All the four streams I was sitting with had all different framerates, and some pretty obscure framerates as well (30.118 and such). So getting this in there was not something it would cope with. &lt;br /&gt;
&lt;br /&gt;
Long story short, invoking some 10 audio and video tools, I managed to extract the audio in a sensible manner and editing could finally start. &lt;br /&gt;
&lt;br /&gt;
Lesson learned: be wary of nifty tools found, check references. :)
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Notes
&lt;/strong&gt;The intro and the outro music created by &lt;a href="http://www.audioplant.no/"&gt;Kim M. Jensen&lt;/a&gt;.
Please do not hesitate to leave any comments on this post. If you have ideas for people you&amp;#39;d like to get interviewed, please leave a comment or contact me through the contact page.
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="zemanta-pixie"&gt;
&lt;img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=5ffd50c1-7a74-8dbd-a51a-69be87c248bb" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/evTJoy4yagKd8tH2MBG_ekSiyvA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/evTJoy4yagKd8tH2MBG_ekSiyvA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/evTJoy4yagKd8tH2MBG_ekSiyvA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/evTJoy4yagKd8tH2MBG_ekSiyvA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/einari?a=T07Q-XRb9zs:QI4B0YdpdGM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=T07Q-XRb9zs:QI4B0YdpdGM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=T07Q-XRb9zs:QI4B0YdpdGM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=T07Q-XRb9zs:QI4B0YdpdGM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=T07Q-XRb9zs:QI4B0YdpdGM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=T07Q-XRb9zs:QI4B0YdpdGM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=T07Q-XRb9zs:QI4B0YdpdGM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=T07Q-XRb9zs:QI4B0YdpdGM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=T07Q-XRb9zs:QI4B0YdpdGM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=T07Q-XRb9zs:QI4B0YdpdGM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/einari/~4/T07Q-XRb9zs" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/einari/~3/T07Q-XRb9zs/post.aspx</link>
      <author>einar@dolittle.com (Einar Ingebrigtsen)</author>
      <comments>http://www.ingebrigtsen.info/post/2009/07/03/Getting-realtime-data-from-Tollef-Slaathaug.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ingebrigtsen.info/post.aspx?id=523c8562-5e6c-4758-abf5-b4bbb5e5a0f0</guid>
      <pubDate>Fri, 03 Jul 2009 05:22:00 -0300</pubDate>
      <category>.net</category>
      <category>podcast</category>
      <dc:publisher>einar</dc:publisher>
      <pingback:server>http://www.ingebrigtsen.info/pingback.axd</pingback:server>
      <pingback:target>http://www.ingebrigtsen.info/post.aspx?id=523c8562-5e6c-4758-abf5-b4bbb5e5a0f0</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ingebrigtsen.info/trackback.axd?id=523c8562-5e6c-4758-abf5-b4bbb5e5a0f0</trackback:ping>
      <wfw:comment>http://www.ingebrigtsen.info/post/2009/07/03/Getting-realtime-data-from-Tollef-Slaathaug.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ingebrigtsen.info/syndication.axd?post=523c8562-5e6c-4758-abf5-b4bbb5e5a0f0</wfw:commentRss>
    <enclosure url="http://www.ingebrigtsen.info/Podcasts/IngebrigtsenShow8.mp3" length="50312591" type="audio/mpeg" /><media:content url="http://www.ingebrigtsen.info/Podcasts/IngebrigtsenShow8.mp3" fileSize="50312591" type="audio/mpeg" /><itunes:explicit>no</itunes:explicit><itunes:subtitle> Tollef Slaathaug is a senior developer at Baze Technology, a software company based in Porsgrunn, Norway. Tollef has great experience with working with optimizations in .net code. This show we&amp;#39;re talking about their project and how they have done thi</itunes:subtitle><itunes:author>Einar Ingebrigtsen</itunes:author><itunes:summary> Tollef Slaathaug is a senior developer at Baze Technology, a software company based in Porsgrunn, Norway. Tollef has great experience with working with optimizations in .net code. This show we&amp;#39;re talking about their project and how they have done things to get the desired performance. English Download full MP3 Subscribe on iTunes Some irrelevant information The recording of this show was done a little more than a month ago. Normally I use Oovoo to do the shows with persons sitting remote, it has excellent audio and video quality. This day, my freebie account had expired - instead of opening up a new account, which I should have done (twenty twenty heinsight and all), I decided to use Skype and found a 3rd party software that could intercept Skype calls and save the streams to disk. All nice, so far. Comes editing day; we had two takes, due to loss of connection and the application had therefore produced two AVI files. All good, at least I thought so. Turns out that it had created AVI files with multiple video and audio streams in them, two streams for video and two for audio, representing both cameras and microphones. Seemed reasonable enough. Only problem is that most editing software didn&amp;#39;t figure this out. On top of this, it had used Microsoft MPEG4 for video and audio was supposedly in WMA format, but most applications didn&amp;#39;t recognize it. Anyhow, weeks went by, I went on a holiday, came back and was ready to start editing again. I figured I&amp;#39;d use GraphEdit that was part of the DirectShow and later in the DirectX SDK. Turns out it wasn&amp;#39;t there anymore. Googled away and found someone who had created a nice version themselves of it and created a graph and got all the streams out into separate files. I felt really proud of myself. It was finally time to get it all into GarageBand and edit and get it all out. Trouble was not over. The application I used that hooked into Skype and streamed it all to disk had done something quite interesting. All the four streams I was sitting with had all different framerates, and some pretty obscure framerates as well (30.118 and such). So getting this in there was not something it would cope with. Long story short, invoking some 10 audio and video tools, I managed to extract the audio in a sensible manner and editing could finally start. Lesson learned: be wary of nifty tools found, check references. :) Notes The intro and the outro music created by Kim M. Jensen. Please do not hesitate to leave any comments on this post. If you have ideas for people you&amp;#39;d like to get interviewed, please leave a comment or contact me through the contact page. </itunes:summary><itunes:keywords>Silverlight,net,C,development,Java,Microsoft,Apple</itunes:keywords><feedburner:origLink>http://www.ingebrigtsen.info/post.aspx?id=523c8562-5e6c-4758-abf5-b4bbb5e5a0f0</feedburner:origLink></item>
    <item>
      <title>Norwegian Silverlight MVPs</title>
      <description>&lt;p&gt;
2nd of July 2009, &lt;a href="http://jonas.follesoe.no"&gt;Jonas Folles&amp;oslash;&lt;/a&gt; got awarded the Silverlight MVP, congratulations to him. That is the second Silverlight MVP in Norway, we must be doing something right in this small country. :) 
&lt;/p&gt;
&lt;p&gt;
The second Silverlight MVP in Norway is actually me.&amp;nbsp; I&amp;#39;ve forgotten to announce it myself, but I was transferred to from being a Xna/DirectX MVP to become a Silverlight MVP a couple of months ago. 
&lt;/p&gt;
&lt;p&gt;
Again, congratulations to Jonas, well deserved! 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gyUtj4i917XtfDTX1xsuNAYlGnw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gyUtj4i917XtfDTX1xsuNAYlGnw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gyUtj4i917XtfDTX1xsuNAYlGnw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gyUtj4i917XtfDTX1xsuNAYlGnw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/einari?a=Yz2D2x3qFEw:2dNMEaW2T08:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=Yz2D2x3qFEw:2dNMEaW2T08:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=Yz2D2x3qFEw:2dNMEaW2T08:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=Yz2D2x3qFEw:2dNMEaW2T08:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=Yz2D2x3qFEw:2dNMEaW2T08:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=Yz2D2x3qFEw:2dNMEaW2T08:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=Yz2D2x3qFEw:2dNMEaW2T08:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=Yz2D2x3qFEw:2dNMEaW2T08:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=Yz2D2x3qFEw:2dNMEaW2T08:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=Yz2D2x3qFEw:2dNMEaW2T08:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/einari/~4/Yz2D2x3qFEw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/einari/~3/Yz2D2x3qFEw/post.aspx</link>
      <author>einar@dolittle.com (Einar Ingebrigtsen)</author>
      <comments>http://www.ingebrigtsen.info/post/2009/07/03/Norwegian-Silverlight-MVPs.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ingebrigtsen.info/post.aspx?id=de0ade6c-45bb-43da-abbb-145f78fbd999</guid>
      <pubDate>Fri, 03 Jul 2009 03:07:00 -0300</pubDate>
      <category>Silverlight</category>
      <dc:publisher>einar</dc:publisher>
      <pingback:server>http://www.ingebrigtsen.info/pingback.axd</pingback:server>
      <pingback:target>http://www.ingebrigtsen.info/post.aspx?id=de0ade6c-45bb-43da-abbb-145f78fbd999</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ingebrigtsen.info/trackback.axd?id=de0ade6c-45bb-43da-abbb-145f78fbd999</trackback:ping>
      <wfw:comment>http://www.ingebrigtsen.info/post/2009/07/03/Norwegian-Silverlight-MVPs.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ingebrigtsen.info/syndication.axd?post=de0ade6c-45bb-43da-abbb-145f78fbd999</wfw:commentRss>
    <feedburner:origLink>http://www.ingebrigtsen.info/post.aspx?id=de0ade6c-45bb-43da-abbb-145f78fbd999</feedburner:origLink></item>
    <item>
      <title>Balder reaches alpha release</title>
      <description>&lt;p&gt;
We&amp;#39;re closing in a version 1.0 release of Balder, for the moment we&amp;#39;re at Alpha and we decided to put out a release on the Balder codeplex site for everyone to start working with.
&lt;/p&gt;
&lt;p&gt;
The release can be found &lt;a href="http://balder.codeplex.com/Release/ProjectReleases.aspx#ReleaseFiles"&gt;here&lt;/a&gt;. In addition we&amp;#39;ve started on a getting started guide as well to get you up and running pretty quick, it is located &lt;a href="http://balder.codeplex.com/Wiki/View.aspx?title=GettingStarted&amp;amp;referringTitle=Home"&gt;here&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uKmTraGmkdXfiPL170VcSPX0Q2I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uKmTraGmkdXfiPL170VcSPX0Q2I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uKmTraGmkdXfiPL170VcSPX0Q2I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uKmTraGmkdXfiPL170VcSPX0Q2I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/einari?a=QABTuuoFjEs:YkSDalGdlcw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=QABTuuoFjEs:YkSDalGdlcw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=QABTuuoFjEs:YkSDalGdlcw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=QABTuuoFjEs:YkSDalGdlcw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=QABTuuoFjEs:YkSDalGdlcw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=QABTuuoFjEs:YkSDalGdlcw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=QABTuuoFjEs:YkSDalGdlcw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=QABTuuoFjEs:YkSDalGdlcw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=QABTuuoFjEs:YkSDalGdlcw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=QABTuuoFjEs:YkSDalGdlcw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/einari/~4/QABTuuoFjEs" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/einari/~3/QABTuuoFjEs/post.aspx</link>
      <author>einar@dolittle.com (Einar Ingebrigtsen)</author>
      <comments>http://www.ingebrigtsen.info/post/2009/06/27/Balder-reaches-alpha-release.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ingebrigtsen.info/post.aspx?id=92d6388a-077f-475b-b7b4-20cba1f022f2</guid>
      <pubDate>Sat, 27 Jun 2009 02:59:00 -0300</pubDate>
      <category>.net</category>
      <category>C#</category>
      <category>Game Development</category>
      <category>Silverlight</category>
      <dc:publisher>einar</dc:publisher>
      <pingback:server>http://www.ingebrigtsen.info/pingback.axd</pingback:server>
      <pingback:target>http://www.ingebrigtsen.info/post.aspx?id=92d6388a-077f-475b-b7b4-20cba1f022f2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ingebrigtsen.info/trackback.axd?id=92d6388a-077f-475b-b7b4-20cba1f022f2</trackback:ping>
      <wfw:comment>http://www.ingebrigtsen.info/post/2009/06/27/Balder-reaches-alpha-release.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ingebrigtsen.info/syndication.axd?post=92d6388a-077f-475b-b7b4-20cba1f022f2</wfw:commentRss>
    <feedburner:origLink>http://www.ingebrigtsen.info/post.aspx?id=92d6388a-077f-475b-b7b4-20cba1f022f2</feedburner:origLink></item>
    <item>
      <title>Balder - Silverlight 3 ++</title>
      <description>&lt;p&gt;
We&amp;#39;ve been hard at work on Balder lately, with getting Silverlight 3 support up and running, optimizations and bugfixes. 
&lt;/p&gt;
&lt;p&gt;
Uptil this last week, we were focused on getting the most juice out of Silverlight2 before thinking about Silverlight 3, meaning a lot of work on the PNG streaming feature to get it just right and exploit multithreading to achieve parallelism in the pipeline. The result was a framerate boost that gave the test scene we&amp;#39;re running a pretty steady 35 FPS. With the introduction of Silverlight 3 and its WriteableBitmap, things are looking up quite a bit for getting quite acceptable framerates. Only problem we&amp;#39;ve got now, is that the scale has tipped a bit. With SL2 we had to focus on the last part of the rendering pipeline, namely getting the pixels to the plugin from the managed buffers. With SL3 and the speed we&amp;#39;re seeing with the usage og WriteableBitmap, we need to go back and optimize other parts of the rendering pipeline to get the framerates we want.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
The current rendering technique has a lot to be desired as for optimizations, it was &amp;quot;thrown&amp;quot; together more as a proof of concept, we&amp;#39;re now hard at work with a new technique that will enable us to really not draw more than we need to and be able to run more complex scenes.
&lt;/p&gt;
&lt;p&gt;
Silverlight 3 samples:
&lt;/p&gt;
&lt;p&gt;
Only shading:
&lt;/p&gt;
&lt;img src="/Silverlight/Balder/20090622/Screenshot.png" alt="" width="580" height="464" /&gt;
&lt;p&gt;
&amp;nbsp; 
&lt;/p&gt;
Environment mapped:
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img src="/Silverlight/Balder/20090622_EnvMap/Screenshot.png" alt="" width="580" height="464" /&gt;
&lt;p&gt;
&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
You&amp;#39;ll find the samples &lt;a href="http://www.ingebrigtsen.info/Silverlight/Balder/20090622/TestPage.html"&gt;here&lt;/a&gt; and &lt;a href="http://www.ingebrigtsen.info/Silverlight/Balder/20090622_EnvMap/TestPage.html"&gt;here &lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cC3qD-Xn_txN3APTcbfijUTLcbg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cC3qD-Xn_txN3APTcbfijUTLcbg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cC3qD-Xn_txN3APTcbfijUTLcbg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cC3qD-Xn_txN3APTcbfijUTLcbg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/einari?a=AxQIi4KoKMU:qkZc9Pg-3Fs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=AxQIi4KoKMU:qkZc9Pg-3Fs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=AxQIi4KoKMU:qkZc9Pg-3Fs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=AxQIi4KoKMU:qkZc9Pg-3Fs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=AxQIi4KoKMU:qkZc9Pg-3Fs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=AxQIi4KoKMU:qkZc9Pg-3Fs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=AxQIi4KoKMU:qkZc9Pg-3Fs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=AxQIi4KoKMU:qkZc9Pg-3Fs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=AxQIi4KoKMU:qkZc9Pg-3Fs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=AxQIi4KoKMU:qkZc9Pg-3Fs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/einari/~4/AxQIi4KoKMU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/einari/~3/AxQIi4KoKMU/post.aspx</link>
      <author>einar@dolittle.com (Einar Ingebrigtsen)</author>
      <comments>http://www.ingebrigtsen.info/post/2009/06/22/Balder-Silverlight-3-2b2b.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ingebrigtsen.info/post.aspx?id=e0f91bfd-77b0-463a-ab15-e5929c2f9efa</guid>
      <pubDate>Mon, 22 Jun 2009 05:10:00 -0300</pubDate>
      <category>.net</category>
      <category>Game Development</category>
      <category>Silverlight</category>
      <dc:publisher>einar</dc:publisher>
      <pingback:server>http://www.ingebrigtsen.info/pingback.axd</pingback:server>
      <pingback:target>http://www.ingebrigtsen.info/post.aspx?id=e0f91bfd-77b0-463a-ab15-e5929c2f9efa</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.ingebrigtsen.info/trackback.axd?id=e0f91bfd-77b0-463a-ab15-e5929c2f9efa</trackback:ping>
      <wfw:comment>http://www.ingebrigtsen.info/post/2009/06/22/Balder-Silverlight-3-2b2b.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ingebrigtsen.info/syndication.axd?post=e0f91bfd-77b0-463a-ab15-e5929c2f9efa</wfw:commentRss>
    <feedburner:origLink>http://www.ingebrigtsen.info/post.aspx?id=e0f91bfd-77b0-463a-ab15-e5929c2f9efa</feedburner:origLink></item>
    <item>
      <title>Balder - Silverlight 2 poll</title>
      <description>&lt;p&gt;
We&amp;#39;ve just added Silverlight 3 support for Balder and at the moment we have support for both Silverlight 2 and 3. As developers we&amp;#39;d love to just have support for one version, but we&amp;#39;ve opened up a poll for people to cast there vote if support for Silverlight 2 is critical.
&lt;/p&gt;
&lt;p&gt;
Please go &lt;a href="http://balder.codeplex.com/WorkItem/View.aspx?WorkItemId=13513"&gt;here&lt;/a&gt; and cast your vote and also please leave a note as to why this is critical for you. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r-npGvcE61UAdizLnHPYeAdvEhk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r-npGvcE61UAdizLnHPYeAdvEhk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/r-npGvcE61UAdizLnHPYeAdvEhk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r-npGvcE61UAdizLnHPYeAdvEhk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/einari?a=zxJW-NhbRMI:Tn8g5t9tTw8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zxJW-NhbRMI:Tn8g5t9tTw8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zxJW-NhbRMI:Tn8g5t9tTw8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zxJW-NhbRMI:Tn8g5t9tTw8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=zxJW-NhbRMI:Tn8g5t9tTw8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zxJW-NhbRMI:Tn8g5t9tTw8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=zxJW-NhbRMI:Tn8g5t9tTw8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zxJW-NhbRMI:Tn8g5t9tTw8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zxJW-NhbRMI:Tn8g5t9tTw8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=zxJW-NhbRMI:Tn8g5t9tTw8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/einari/~4/zxJW-NhbRMI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/einari/~3/zxJW-NhbRMI/post.aspx</link>
      <author>einar@dolittle.com (Einar Ingebrigtsen)</author>
      <comments>http://www.ingebrigtsen.info/post/2009/06/20/Balder-Silverlight-2-poll.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ingebrigtsen.info/post.aspx?id=48a124e7-09c2-4494-be22-ddc8886a7994</guid>
      <pubDate>Sat, 20 Jun 2009 04:31:00 -0300</pubDate>
      <category>.net</category>
      <category>Game Development</category>
      <category>Silverlight</category>
      <dc:publisher>einar</dc:publisher>
      <pingback:server>http://www.ingebrigtsen.info/pingback.axd</pingback:server>
      <pingback:target>http://www.ingebrigtsen.info/post.aspx?id=48a124e7-09c2-4494-be22-ddc8886a7994</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ingebrigtsen.info/trackback.axd?id=48a124e7-09c2-4494-be22-ddc8886a7994</trackback:ping>
      <wfw:comment>http://www.ingebrigtsen.info/post/2009/06/20/Balder-Silverlight-2-poll.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ingebrigtsen.info/syndication.axd?post=48a124e7-09c2-4494-be22-ddc8886a7994</wfw:commentRss>
    <feedburner:origLink>http://www.ingebrigtsen.info/post.aspx?id=48a124e7-09c2-4494-be22-ddc8886a7994</feedburner:origLink></item>
    <item>
      <title>Another chapter</title>
      <description>&lt;p&gt;
Today was the last day for me over at Objectware. It was a day I have dreaded somehow for a while. I really loved it at Objectware. Due to the fact that it is about 2 hours by bus or train away from where I live, it got to be too much of a strain on my family. I got an opportunity some months back to join a company called &lt;a href="http://www.bouvet.no"&gt;Bouvet &lt;/a&gt;and join them on establishing in my town; Sandefjord. So the choice was kind of obvious and at the same time gave me a bit of sadness. On average I&amp;#39;ve been holding jobs for some 3-4 years before changing, and everytime its been because I wanted to, for personal growth. But family has to come first, even though it was short run (some 8 months). Still, it feels kind of odd, leaving a place I got fond of with great colleagues and very fun projects.
&lt;/p&gt;
&lt;p&gt;
I must take this time to thank Objectware for giving me the opportunity - I&amp;#39;ve had great personal growth and has had really fun challenges and projects. And the colleagues impresses me with their great knowledge and commitment to the job. Kudos!
&lt;/p&gt;
&lt;p&gt;
15th of June, I&amp;#39;ll be starting at &lt;a href="http://www.bouvet.no"&gt;Bouvet&lt;/a&gt; - looking forward for new challenges.
&lt;/p&gt;
&lt;p&gt;
Until then, I&amp;#39;ll be sunbathing in Spain, enjoying some time off with my kids and wife. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XmfJUTZaUXh_fysFAOvq78TzH4g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XmfJUTZaUXh_fysFAOvq78TzH4g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XmfJUTZaUXh_fysFAOvq78TzH4g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XmfJUTZaUXh_fysFAOvq78TzH4g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/einari?a=nOYFjrElsBA:hdpWZVzqEeI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=nOYFjrElsBA:hdpWZVzqEeI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=nOYFjrElsBA:hdpWZVzqEeI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=nOYFjrElsBA:hdpWZVzqEeI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=nOYFjrElsBA:hdpWZVzqEeI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=nOYFjrElsBA:hdpWZVzqEeI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=nOYFjrElsBA:hdpWZVzqEeI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=nOYFjrElsBA:hdpWZVzqEeI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=nOYFjrElsBA:hdpWZVzqEeI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=nOYFjrElsBA:hdpWZVzqEeI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/einari/~4/nOYFjrElsBA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/einari/~3/nOYFjrElsBA/post.aspx</link>
      <author>einar@dolittle.com (Einar Ingebrigtsen)</author>
      <comments>http://www.ingebrigtsen.info/post/2009/05/29/Another-chapter.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ingebrigtsen.info/post.aspx?id=8cad0fdb-8870-473b-920a-dc0d051edf5c</guid>
      <pubDate>Fri, 29 May 2009 18:49:00 -0300</pubDate>
      <category>Personal</category>
      <dc:publisher>einar</dc:publisher>
      <pingback:server>http://www.ingebrigtsen.info/pingback.axd</pingback:server>
      <pingback:target>http://www.ingebrigtsen.info/post.aspx?id=8cad0fdb-8870-473b-920a-dc0d051edf5c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ingebrigtsen.info/trackback.axd?id=8cad0fdb-8870-473b-920a-dc0d051edf5c</trackback:ping>
      <wfw:comment>http://www.ingebrigtsen.info/post/2009/05/29/Another-chapter.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ingebrigtsen.info/syndication.axd?post=8cad0fdb-8870-473b-920a-dc0d051edf5c</wfw:commentRss>
    <feedburner:origLink>http://www.ingebrigtsen.info/post.aspx?id=8cad0fdb-8870-473b-920a-dc0d051edf5c</feedburner:origLink></item>
    <item>
      <title>Balder gets its long awaited texture support</title>
      <description>&lt;p&gt;
&lt;strong&gt;UPDATE, July 5th 2009: read about Silverlight 3 optimizations &lt;a href="http://www.ingebrigtsen.info/post/2009/06/22/Balder-Silverlight-3-2b2b.aspx"&gt;here&lt;/a&gt; and the alpha release &lt;a href="http://www.ingebrigtsen.info/post/2009/06/27/Balder-reaches-alpha-release.aspx"&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
Ever since I started the Balder project back in 2007, the main goal has always been to get proper texturemapping support in the engine. At one point I had it all up and running by utilizing the Silverlight Matrix transformations for the brush used to make it scale and skew according to the given texture coordinates.
&lt;/p&gt;
&lt;p&gt;
The problem was speed. I never really figured out what the speed issue was, but I guess the architecture of Silverlight was never built with 3D graphics in mind.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
With the new &lt;a href="http://www.ingebrigtsen.info/post/2009/05/05/Software-rendering-in-Balder.aspx"&gt;software rendering technique&lt;/a&gt; in place, it is a lot easier to get different drawing techniques up and running. One drawback we ran into when doing everything with &amp;quot;software&amp;quot;, we can&amp;#39;t utilize the imaging support, such as the PNG decoder that Silverlight has built in, there is no way to get hold of the pixel data. So, the first thing we needed is to have a C# decoder og image data and we started off with PNG. Looking for an existing PNG decoder entirely written in managed code (C# preferably) turned out to be quite an interesting task. After some time googling, I finally came across a project called &lt;a href="http://sourceforge.net/projects/pr2/"&gt;PR2&lt;/a&gt; that has something called SharpPNG. After bending the code a bit, I got it running in a more generic way and put it in the Balder repository (with all credits intact - ofcourse).
&lt;/p&gt;
&lt;p&gt;
After getting the image loading in place, it was off to write the texturemapping support. With the generic implementation we have for doing triangle drawings at the moment, the task ended up being quite simple. &lt;br /&gt;
A snippet from the SimpleSpanRenderer as an illustration:
&lt;/p&gt;
&lt;p&gt;
&lt;div class="code"&gt;&lt;p&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Texture(&lt;span class="type"&gt;IBuffers&lt;/span&gt; buffer, &lt;span class="type"&gt;Span&lt;/span&gt; span, &lt;span class="type"&gt;Image&lt;/span&gt; image, &lt;span class="type"&gt;ImageContext&lt;/span&gt; texture)&lt;br /&gt;
        {&lt;br /&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; spreadCount = span.XEnd - span.XStart;&lt;br /&gt;
            &lt;span class="type"&gt;TextureInterpolator&lt;/span&gt;.SetPoint(0, span.ZStart, span.ZEnd);&lt;br /&gt;
            &lt;span class="type"&gt;TextureInterpolator&lt;/span&gt;.SetPoint(1, span.UStart, span.UEnd);&lt;br /&gt;
            &lt;span class="type"&gt;TextureInterpolator&lt;/span&gt;.SetPoint(2, span.VStart, span.VEnd);&lt;br /&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; yOffset = span.Y * buffer.&lt;span class="type"&gt;Display&lt;/span&gt;.Stride;&lt;br /&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; rOffset = buffer.&lt;span class="type"&gt;Display&lt;/span&gt;.RedPosition;&lt;br /&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; gOffset = buffer.&lt;span class="type"&gt;Display&lt;/span&gt;.GreenPosition;&lt;br /&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; bOffset = buffer.&lt;span class="type"&gt;Display&lt;/span&gt;.BluePosition;&lt;br /&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; aOffset = buffer.&lt;span class="type"&gt;Display&lt;/span&gt;.AlphaPosition;&lt;br /&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; bufferOffset = yOffset + (span.XStart * 4);&lt;br /&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; depthBufferOffset = (buffer.Width * span.Y) + span.XStart;&lt;br /&gt;
            &lt;span class="type"&gt;TextureInterpolator&lt;/span&gt;.Interpolate(spreadCount);&lt;br /&gt;
            &lt;br /&gt;
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; index = 0; index &amp;lt; spreadCount; index++)&lt;br /&gt;
            {&lt;br /&gt;
                &lt;span class="kwrd"&gt;var&lt;/span&gt; z = &lt;span class="type"&gt;TextureInterpolator&lt;/span&gt;.Points[0].InterpolatedValues[index];&lt;br /&gt;
                &lt;span class="kwrd"&gt;var&lt;/span&gt; bufferZ = (UInt32)(z * (&lt;span class="kwrd"&gt;float&lt;/span&gt;)&lt;span class="type"&gt;UInt32&lt;/span&gt;.MaxValue);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                &lt;span class="kwrd"&gt;var&lt;/span&gt; u = &lt;span class="type"&gt;TextureInterpolator&lt;/span&gt;.Points[1].InterpolatedValues[index];&lt;br /&gt;
                &lt;span class="kwrd"&gt;var&lt;/span&gt; v = &lt;span class="type"&gt;TextureInterpolator&lt;/span&gt;.Points[2].InterpolatedValues[index];&lt;br /&gt;
&lt;br /&gt;
                &lt;span class="kwrd"&gt;var&lt;/span&gt; intu = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)(u*image.Width)&amp;amp;(image.Width-1);&lt;br /&gt;
                &lt;span class="kwrd"&gt;var&lt;/span&gt; intv = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)(v*image.Height)&amp;amp;(image.Height-1);&lt;br /&gt;
&lt;br /&gt;
                &lt;span class="kwrd"&gt;var&lt;/span&gt; texel = ((intv*image.Width) + intu)*4;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (bufferZ &amp;lt; buffer.Depth[depth&lt;span class="type"&gt;BufferOffset&lt;/span&gt;] &amp;amp;&amp;amp;&lt;br /&gt;
                    z &amp;gt;= 0f &amp;amp;&amp;amp;&lt;br /&gt;
                    z &amp;lt; 1f&lt;br /&gt;
                    )&lt;br /&gt;
                {&lt;br /&gt;
                    buffer.Display[buffer&lt;span class="type"&gt;Offset&lt;/span&gt; + rOffset] = texture.Bytes[texel + 1];&lt;br /&gt;
                    buffer.Display[buffer&lt;span class="type"&gt;Offset&lt;/span&gt; + gOffset] = texture.Bytes[texel + 2];&lt;br /&gt;
                    buffer.Display[buffer&lt;span class="type"&gt;Offset&lt;/span&gt; + bOffset] = texture.Bytes[texel];&lt;br /&gt;
                    buffer.Display[buffer&lt;span class="type"&gt;Offset&lt;/span&gt; + aOffset] = texture.Bytes[texel + 3];&lt;br /&gt;
&lt;br /&gt;
                    buffer.Depth[depth&lt;span class="type"&gt;BufferOffset&lt;/span&gt;] = bufferZ;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                bufferOffset += 4;&lt;br /&gt;
                depthBufferOffset++;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;/p&gt;&lt;/div&gt; 
&lt;/p&gt;
&lt;p&gt;
Finally we had to add support for materials in the ASE file loader, I ended up spending too much time trying to figure out a good way to do it with regular expression, ending up with also adding a project by &lt;a href="http://flimflan.com/blog/default.aspx"&gt;Joshua Flanagan&lt;/a&gt; called &lt;a href="http://flimflan.com/blog/ReadableRegularExpressions.aspx"&gt;Readable Regular Expressions&lt;/a&gt; in combination with &lt;a href="http://weblogs.asp.net/rosherove/archive/2008/05/06/introducing-linq-to-regex.aspx"&gt;LINQ to RegEx&lt;/a&gt; by&lt;a href="http://weblogs.asp.net/rosherove/"&gt; Roy Osherove. &lt;/a&gt;Both projects are now part of the Balder repository as well. The reason for adding them to the repository is for maintenance purposes, seeing that we&amp;#39;re targeting Balder for multiple platforms. The better way would probably be to contribute to the projects so they had the modifications or support we need to have for Balder.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
With all this in place, it was texturemania going on:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;img src="/Silverlight/Balder/20090519/Screenshot.png" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
There is also experimental code in the Balder repository for doing spherical environment mapping. This will be part of the material system, so one does not have to think about it in the code.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;img src="/Silverlight/Balder/20090519_EnvMap/Screenshot.png" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
You can see both demos in realtime &lt;a href="http://www.ingebrigtsen.info/Silverlight/Balder/20090519/TestPage.html"&gt;here&lt;/a&gt; and &lt;a href="http://www.ingebrigtsen.info/Silverlight/Balder/20090519_EnvMap/TestPage.html"&gt;here&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qeyAvXNFb0Iu1Zb4dap4dems5lo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qeyAvXNFb0Iu1Zb4dap4dems5lo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qeyAvXNFb0Iu1Zb4dap4dems5lo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qeyAvXNFb0Iu1Zb4dap4dems5lo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/einari?a=4caOY-kDY4I:cm3-KjuPv_A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=4caOY-kDY4I:cm3-KjuPv_A:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=4caOY-kDY4I:cm3-KjuPv_A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=4caOY-kDY4I:cm3-KjuPv_A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=4caOY-kDY4I:cm3-KjuPv_A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=4caOY-kDY4I:cm3-KjuPv_A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=4caOY-kDY4I:cm3-KjuPv_A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=4caOY-kDY4I:cm3-KjuPv_A:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=4caOY-kDY4I:cm3-KjuPv_A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=4caOY-kDY4I:cm3-KjuPv_A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/einari/~4/4caOY-kDY4I" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/einari/~3/4caOY-kDY4I/post.aspx</link>
      <author>einar@dolittle.com (Einar Ingebrigtsen)</author>
      <comments>http://www.ingebrigtsen.info/post/2009/05/19/Balder-gets-its-long-awaited-texture-support.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ingebrigtsen.info/post.aspx?id=a6829bbe-4acc-4d25-93be-16bfbe78ae74</guid>
      <pubDate>Tue, 19 May 2009 06:51:00 -0300</pubDate>
      <category>C#</category>
      <category>Game Development</category>
      <category>Silverlight</category>
      <dc:publisher>einar</dc:publisher>
      <pingback:server>http://www.ingebrigtsen.info/pingback.axd</pingback:server>
      <pingback:target>http://www.ingebrigtsen.info/post.aspx?id=a6829bbe-4acc-4d25-93be-16bfbe78ae74</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.ingebrigtsen.info/trackback.axd?id=a6829bbe-4acc-4d25-93be-16bfbe78ae74</trackback:ping>
      <wfw:comment>http://www.ingebrigtsen.info/post/2009/05/19/Balder-gets-its-long-awaited-texture-support.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ingebrigtsen.info/syndication.axd?post=a6829bbe-4acc-4d25-93be-16bfbe78ae74</wfw:commentRss>
    <feedburner:origLink>http://www.ingebrigtsen.info/post.aspx?id=a6829bbe-4acc-4d25-93be-16bfbe78ae74</feedburner:origLink></item>
    <item>
      <title>Game Camp user group meeting</title>
      <description>We've had quite a few changes over the last six months in Game Camp, first off all &lt;a href="http://digierr.spaces.live.com/blog/"&gt;Petri Wilhelmsen &lt;/a&gt;has taken over as the chairman of the board for Game Camp as my successor. I've stepped down to become a regular boardmember. A new site is in the brewing with more focus on user group meetings, Game Camp has had its first talk in Denmark, thanks to &lt;a href="http://www.tkoc.dk/"&gt;Kenneth Jørgensen&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Another thing that has happened is that Game Camp is shifting focus, instead of having big events like we used to have before with 200 people coming (believe me, it is stressful organizing those), we're scaling down to become more of a regular user group with regular meetings. &lt;br /&gt;&lt;br /&gt;Next week, 13th of May 2009, we're having one in Oslo with, as always, great content. &lt;br /&gt;The agenda is:&lt;br /&gt;&lt;b&gt;&lt;br /&gt;18:00 - 18:30&lt;/b&gt;&lt;br /&gt;&amp;nbsp; Mingling&lt;br /&gt;&lt;b&gt;&lt;br /&gt;18:30 - 19:30&lt;/b&gt;&lt;br /&gt;&amp;nbsp; XNA Shader Programming - Petri Wilhelmsen&lt;br /&gt;&lt;b&gt;&lt;br /&gt;19:30 - 20:00&lt;/b&gt;&lt;br /&gt;&amp;nbsp; Pause&lt;br /&gt;&lt;b&gt;&lt;br /&gt;20:00 - 21:00&lt;/b&gt;&lt;br /&gt;&amp;nbsp; Game Design - Thomas Beswick ( Winner of best game concept, NGA 2009 )&lt;br /&gt;&lt;b&gt;&lt;br /&gt;21:00 - 21:30&lt;/b&gt;&lt;br /&gt;&amp;nbsp; Demo on Grill Simulator 360, a game for XBox 360 created using XNA by Dark Codex Studios&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Read more about it &lt;a href="http://gamecamp.no/blogs/news/archive/2009/05/07/new-game-camp-event-at-nith-oslo-13-05-2009.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There is no signing up, just show up and get all the juicy details about game programming.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=8fd966bf-3417-8773-82c7-707b042f013d" /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/z_bCO9J77GJMgXJg0_L805AZ1Pk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z_bCO9J77GJMgXJg0_L805AZ1Pk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/z_bCO9J77GJMgXJg0_L805AZ1Pk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z_bCO9J77GJMgXJg0_L805AZ1Pk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/einari?a=6IhoNebgEFM:S_-zf0l3V0c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=6IhoNebgEFM:S_-zf0l3V0c:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=6IhoNebgEFM:S_-zf0l3V0c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=6IhoNebgEFM:S_-zf0l3V0c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=6IhoNebgEFM:S_-zf0l3V0c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=6IhoNebgEFM:S_-zf0l3V0c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=6IhoNebgEFM:S_-zf0l3V0c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=6IhoNebgEFM:S_-zf0l3V0c:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=6IhoNebgEFM:S_-zf0l3V0c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=6IhoNebgEFM:S_-zf0l3V0c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/einari/~4/6IhoNebgEFM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/einari/~3/6IhoNebgEFM/post.aspx</link>
      <author>einar@dolittle.com (Einar Ingebrigtsen)</author>
      <comments>http://www.ingebrigtsen.info/post/2009/05/08/Game-Camp-user-group-meeting.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ingebrigtsen.info/post.aspx?id=e6f9c4cd-2a74-4364-965f-7760616abd2b</guid>
      <pubDate>Fri, 08 May 2009 04:20:11 -0300</pubDate>
      <dc:publisher>einar</dc:publisher>
      <pingback:server>http://www.ingebrigtsen.info/pingback.axd</pingback:server>
      <pingback:target>http://www.ingebrigtsen.info/post.aspx?id=e6f9c4cd-2a74-4364-965f-7760616abd2b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.ingebrigtsen.info/trackback.axd?id=e6f9c4cd-2a74-4364-965f-7760616abd2b</trackback:ping>
      <wfw:comment>http://www.ingebrigtsen.info/post/2009/05/08/Game-Camp-user-group-meeting.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ingebrigtsen.info/syndication.axd?post=e6f9c4cd-2a74-4364-965f-7760616abd2b</wfw:commentRss>
    <feedburner:origLink>http://www.ingebrigtsen.info/post.aspx?id=e6f9c4cd-2a74-4364-965f-7760616abd2b</feedburner:origLink></item>
    <item>
      <title>"Software" rendering in Balder</title>
      <description>&lt;p&gt;
&lt;strong&gt;UPDATE: 19th of may 2009 - Texture support is now added, read more &lt;a href="http://www.ingebrigtsen.info/post/2009/05/19/Balder-gets-its-long-awaited-texture-support.aspx"&gt;here&lt;/a&gt;.&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
We&amp;#39;ve been hard at work the last couple of weeks to bring Balder to a point where it can be useful, not only a proof of concept for prooving that 3D can be done in Silverlight. 
&lt;/p&gt;
&lt;p&gt;
Our main challenge is to get a proper framerate in Silverlight. The reason for this is due to the architecture of Silverlight, there is a big cost in marshalling data between the CLR and the rendering/Xaml engine, so one has to try to limit this. Our initial plan was to generate all the polygon data needed in a 3D scene during initialization and then just turn the visibility on and off and modify the coordinates and color/brush information dynamically. Since a polygon is a dependency object and the properties we needed to modify was dependency properties, this sounded like a good plan, and it was. 
My &lt;a href="http://www.ingebrigtsen.info/post/2009/04/23/Revitalizing-Balder.aspx"&gt;previous post&lt;/a&gt; showed a version using this technique, and we could get a decent framerate, but it was only flat shaded - no shading nor texturemapping. 
&lt;/p&gt;
&lt;p&gt;
Our next goal was then to include what is known as gouraud shading, here we ran in to a bunch of issues. First of all, how could one simulate the effect of gouraud shading in Silverlight 2, when there is no brush that has this implemented. The brushes available in Silverlight are SolidBrush, LinearGradientBrush and RadialGradientBrush. After some experiments, I ended up getting a solution working using the RadialGradientBrush. The technique I used was to have 3 polygons representing every triangle, all with different radial brushes. The brushes hotspot/origin was then set to be on the 3 points representing the triangle and then have some magical calculation for generating the correct color values and alpha values for the gradients. The result was kinda nice, allthough not entirely correct rendering.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="max-width: 800px" src="/Silverlight/Balder/20090505/ShadedTriangle.png" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I then started to implement it for the engine itself, but never finished it, the result before finishing it was this:
&lt;/p&gt;
&lt;p&gt;
&lt;img style="max-width: 800px" src="/Silverlight/Balder/20090505/ShadedTeapot.png" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
The reason for not finishing it was plain and simply speed. The FPS dropped from a solid 30 FPS to 5.
We decided then that in order for this project to survive, we needed to do something dramatic. I started then to look at how we could draw using &amp;quot;software&amp;quot; - pixeldrawing in C#. In Silverlight 3, this would be a walk in the park, seeing that there is an ImageSource called WritableBitmap, in Silverlight 2, which is still our main goal, it is not all that straight forward to do. I remembered that I had seen samples of water effects, mandelbrot and such for Silverlight 2, and the technique being used is to generate a RAW PNG file on the fly every frame and streaming this into the BitmapImage source. &lt;a href="http://blogs.msdn.com/jstegman/"&gt;Joe Stegman&lt;/a&gt; has an excellent implementation for this &lt;a href="http://blogs.msdn.com/jstegman/archive/2008/04/21/dynamic-image-generation-in-silverlight.aspx"&gt;here&lt;/a&gt;. But, being in a optimization mode, I found there was a couple of things in his solution that generated quite a bit of overhead. 
&lt;/p&gt;
&lt;p&gt;
First of all, there is an EditableImage class holding the buffer one can draw to, this is then encoded into a new buffer. Another thing I found to be an overhead, was the usage of two different memorystreams during the encoding. Long story short, during the weekend I decided to create what I called a RawPngStream. It is a somewhat highly optimized stream that holds a buffer one can write to. The listing of the source is to big for this post, and to much details to go into - but you&amp;#39;ll find it over at &lt;a href="http://www.codeplex.com/Balder"&gt;CodePlex&lt;/a&gt; in the &lt;a href="http://balder.codeplex.com/SourceControl/changeset/view/33679#412801"&gt;Balder.Silverlight project&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
What we have done now is to introduce a general software rendering component, that is not targetting specifically Silverlight - in fact, we created it for Windows Forms first - seeing that it was easier to get things up and running there first. The last thing we&amp;#39;ve done is to implement the Silverlight specifics, with the framebuffer handling and all. The result, with a few inaccuracies in the polygon routine for now, is as follows.
&lt;/p&gt;
&lt;p&gt;
A demo can be found &lt;a href="http://www.ingebrigtsen.info/Silverlight/Balder/20090505/TestPage.html"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="max-width: 800px" src="/Silverlight/Balder/20090505/Screenshot.png" alt="" width="579" height="432" /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;div class="zemanta-pixie"&gt;
&lt;img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=34bf492e-e025-833b-a722-f1fe7c80199b" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/34v4N_jFQ91YevUE_FdCPCAcJbY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/34v4N_jFQ91YevUE_FdCPCAcJbY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/34v4N_jFQ91YevUE_FdCPCAcJbY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/34v4N_jFQ91YevUE_FdCPCAcJbY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/einari?a=zbUhptDCpyo:NTnpmnP1Z5w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zbUhptDCpyo:NTnpmnP1Z5w:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zbUhptDCpyo:NTnpmnP1Z5w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zbUhptDCpyo:NTnpmnP1Z5w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=zbUhptDCpyo:NTnpmnP1Z5w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zbUhptDCpyo:NTnpmnP1Z5w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=zbUhptDCpyo:NTnpmnP1Z5w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zbUhptDCpyo:NTnpmnP1Z5w:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=zbUhptDCpyo:NTnpmnP1Z5w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=zbUhptDCpyo:NTnpmnP1Z5w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/einari/~4/zbUhptDCpyo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/einari/~3/zbUhptDCpyo/post.aspx</link>
      <author>einar@dolittle.com (Einar Ingebrigtsen)</author>
      <comments>http://www.ingebrigtsen.info/post/2009/05/05/Software-rendering-in-Balder.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ingebrigtsen.info/post.aspx?id=f1ae0ed8-7b51-4278-93e8-52cd309b015c</guid>
      <pubDate>Tue, 05 May 2009 03:25:00 -0300</pubDate>
      <category>.net</category>
      <category>C#</category>
      <category>Game Development</category>
      <category>Silverlight</category>
      <dc:publisher>einar</dc:publisher>
      <pingback:server>http://www.ingebrigtsen.info/pingback.axd</pingback:server>
      <pingback:target>http://www.ingebrigtsen.info/post.aspx?id=f1ae0ed8-7b51-4278-93e8-52cd309b015c</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.ingebrigtsen.info/trackback.axd?id=f1ae0ed8-7b51-4278-93e8-52cd309b015c</trackback:ping>
      <wfw:comment>http://www.ingebrigtsen.info/post/2009/05/05/Software-rendering-in-Balder.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ingebrigtsen.info/syndication.axd?post=f1ae0ed8-7b51-4278-93e8-52cd309b015c</wfw:commentRss>
    <feedburner:origLink>http://www.ingebrigtsen.info/post.aspx?id=f1ae0ed8-7b51-4278-93e8-52cd309b015c</feedburner:origLink></item>
    <item>
      <title>Silverlight Unit Test runners, new project -&gt; Odin</title>
      <description>I&amp;#39;ve been busy the last couple of nights doing a complete rewrite of my original SilverlightRunners project.&lt;br /&gt;
The reason for this was that the structure of the original project didn&amp;#39;t agree with me, hard to write unit tests, bad structure - had the feeling of being rushed. Also, having the implementational details it had, stability was really bad. Another point was that I wanted to rebrand the project.&lt;br /&gt;
&lt;br /&gt;
The new project has been called Odin (yes, I know - what is going on with all this Norse Mythology fetish I seem to have..) and is located on &lt;a href="http://odin.codeplex.com/"&gt;Codeplex. &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
For the time being there is a 0.4 release, with an MSI file for easier installation. The current version only has limited support for running the unit tests through commandline.&amp;nbsp; I am working hard these days to complete the 0.5 release to have a feature full execution engine for running tests and full commandline support. Then I&amp;#39;ll be moving on to recreating the resharper support, targetting R# 4.5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="zemanta-pixie"&gt;
&lt;img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=66c16d81-2f68-851a-a522-292c3d7202a5" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HFjeKO3Rs7J0Zsq4Im4wl4WE8AA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HFjeKO3Rs7J0Zsq4Im4wl4WE8AA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HFjeKO3Rs7J0Zsq4Im4wl4WE8AA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HFjeKO3Rs7J0Zsq4Im4wl4WE8AA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/einari?a=WFniQc8ATJA:awmGv_b7nKI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=WFniQc8ATJA:awmGv_b7nKI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=WFniQc8ATJA:awmGv_b7nKI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=WFniQc8ATJA:awmGv_b7nKI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=WFniQc8ATJA:awmGv_b7nKI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=WFniQc8ATJA:awmGv_b7nKI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=WFniQc8ATJA:awmGv_b7nKI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=WFniQc8ATJA:awmGv_b7nKI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/einari?a=WFniQc8ATJA:awmGv_b7nKI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/einari?i=WFniQc8ATJA:awmGv_b7nKI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/einari/~4/WFniQc8ATJA" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/einari/~3/WFniQc8ATJA/post.aspx</link>
      <author>einar@dolittle.com (Einar Ingebrigtsen)</author>
      <comments>http://www.ingebrigtsen.info/post/2009/05/01/Silverlight-Unit-Test-runners-new-project-3e-Odin.aspx#comment</comments>
      <guid isPermaLink="false">http://www.ingebrigtsen.info/post.aspx?id=77d2e0e0-bdbb-47a5-97ea-aa39e7b68325</guid>
      <pubDate>Fri, 01 May 2009 03:12:00 -0300</pubDate>
      <category>.net</category>
      <category>C#</category>
      <category>Silverlight</category>
      <dc:publisher>einar</dc:publisher>
      <pingback:server>http://www.ingebrigtsen.info/pingback.axd</pingback:server>
      <pingback:target>http://www.ingebrigtsen.info/post.aspx?id=77d2e0e0-bdbb-47a5-97ea-aa39e7b68325</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.ingebrigtsen.info/trackback.axd?id=77d2e0e0-bdbb-47a5-97ea-aa39e7b68325</trackback:ping>
      <wfw:comment>http://www.ingebrigtsen.info/post/2009/05/01/Silverlight-Unit-Test-runners-new-project-3e-Odin.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.ingebrigtsen.info/syndication.axd?post=77d2e0e0-bdbb-47a5-97ea-aa39e7b68325</wfw:commentRss>
    <feedburner:origLink>http://www.ingebrigtsen.info/post.aspx?id=77d2e0e0-bdbb-47a5-97ea-aa39e7b68325</feedburner:origLink></item>
  <copyright>(C)2009</copyright><media:credit role="author">Einar Ingebrigtsen</media:credit><media:rating>nonadult</media:rating><media:description type="plain">Einars Storytime</media:description></channel>
</rss>
