BlockLeftTop, PRELOAD BlockLeftBottom, PRELOAD BlockLeftStretch, PRELOAD BlockTop, PRELOAD BlockBottom, PRELOAD BlockStretch, PRELOAD BlockRightTop, PRELOAD BlockRightBottom, PRELOAD BlockRightStretch, PRELOAD
Latest Game

RUN FOREST RUN: OUT NOW!

by Leif Griga 20. May 2010 11:21

3 Mio FPS

by Benjamin Nitschke 23. April 2010 16:46

No, I am not kidding, after a week of optimizing I just reached almost 3 Mio FPS with our engine. I had to disable Clearing/Present and Input, but this is my log output (thanks to PerformanceCounters this is also pretty accurate):

 

FPS: 2703785

 

With Input enabled I can easily go above 200000 FPS, most time of each frame is in whatever platform Input GetState method does:

 

FPS: 202099

 

With Present (clear is not needed in my test as I draw a fullscreen quad) it goes down to ~13000 FPS, which is not shabby, but almost all time is lost in Present of XNA 4.0 CTP, which hasn't been optimized a lot yet by the XNA Team (the main module I use currently, but we support many different graphic frameworks as well, XNA is just the best for Windows IMO). Might sound crazy, but for performance checking I disable Present because then I immediately see whats slow in the render code.

 

FPS: 12680

 

Other platforms are much worse, but it is always waiting for the graphic card or some external library, so I would say our engine is quite fast as of now. I obviously did not have much enabled in my test (just a test screen drawing a big quad, and Time, Input, Graphic, SceneManager, MaterialManager and Profiling modules enabled), but even doing more stuff does not hurt FPS wise. A more complex 2D screen could still achieve 10000 FPS. Next up is 3D optimization, which is much harder obviously (we are still not fast enough, especially on other platforms).

iPhone Ray Tracer now working

by Benjamin Nitschke 1. April 2010 17:57

Hi everyone,

Sorry for not posting much about our current multi-platform engine (the Delta Engine), but we just got our Ray Tracer working on the iPhone with more than 50fps (in 480x320).Here is a quick screenshot, expect more to come in the next year at this exact date :)

 

 

Easter Eggs Out Now!

by Leif Griga 24. March 2010 13:36

Right Margin Line in Visual Studio 2008

by Benjamin Nitschke 25. February 2010 15:12
I might have blogged about this before, but I could not find my own blog post, so why not blog it again.
Since the recent CodeRush 10 beta, which works in VS2010 RC finally, there is no more Right Margin line that can be enabled under Options->Editors->Painting. I also tried to enable some modules, but I cannot see the margin line anymore (works fine with CodeRush 9).

Well, in Visual Studio you can also enable a margin line with a registry entry at:
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Text Editor]
"Guides"="RGB(64,64,192) 79"
This will produce a blue margin line right before the 80th column. It looks good on white and black backgrounds, but you can of course change it easily to any color and position. If you don't want to go into regedit, just execute this handy RightMarginLineVS2008.reg (280 bytes) file.

Seattle 2010 - MVP Summit - Day 5

by Benjamin Nitschke 17. February 2010 22:37
This day we MVPs will go deep into sessions about lots of cool new technology. Everything is under NDA, so we are not allowed to talk about it. Most of my picture will just show people and what happened over the day. There might be information out in the web, but we MVPs are not allowed to comment on that ^^

Seattle 2010 Day 5
First thing of the day is to get some breakfast, which was very good in my hotel.

Seattle 2010 Day 5
I tried to take the last bus at 08:30, which was not such a good idea because the bus was late 20 minutes, which leaded to getting a little late on the first meeting at 09:00. But at least I met another new nice MVP from Korea: Dong-Hoon Kim

Seattle 2010 Day 5
The bus ride to Microsoft Campus was pretty quick once the bus finally arrived.

Seattle 2010 Day 5
We are almost at building 92, where Studio A is just a walking distance away.

Seattle 2010 Day 5
While searching for Building Studio A we went through building 92 and saw the company store right there (must have moved, last time it was somewhere completely different).

Seattle 2010 Day 5
There were lots of guys and girls standing around helping us with directions.

Seattle 2010 Day 5
We finally reached Studio A, pretty colorful posters up here, but finding the actual conference room was not very easy, 5000 room numbers, wtf?

Seattle 2010 Day 5
Lots of XNA MVPs here.

Seattle 2010 Day 5
And even more on the other side.

Seattle 2010 Day 5
And some guys from the XNA team.

Seattle 2010 Day 5
Dong-Hoon is also taking pictures. Funniest thing he told me yet was a joke from Korea: If someone asks you when the shuttle is coming, answer: You are not Protoss, there is no Shuttles for you.

Seattle 2010 Day 5
This is Nick Gravelyn, a former XNA, which now is part of the Borg, erm, Microsoft XNA team :)

Seattle 2010 Day 5
This is was happens to gramophone record here ..

Seattle 2010 Day 5
XNA guys running around, I am too lazy to tag them now ..

Seattle 2010 Day 5
Almost there at the new conference room location.

Seattle 2010 Day 5
A big room with lots of MVPs, big meeting ahead. Sorry, not allowed to disclose any more details .. at least it was interesting stuff.

Seattle 2010 Day 5
And finally walking back to the bus stop, the day is almost over. Time for a XNA party.

Seattle 2010 Day 5
Kathleen explains that we will go to the Big Picture bar and whats going on in general.

Seattle 2010 Day 5
On the bus ride everyone was checking and hacking on their phone. Most people have iPhones, which is kinda funny ..

Seattle 2010 Day 5
We had some extra time, so like last year we visted the Game Workshop board game shop, but I don't think anyone bought anything.

Seattle 2010 Day 5
The problem with the bar this time was that we were way to few people to fill it. Lots of room, but only a few guys in each. Last year this party was at this very same location, but we had some other teams here too and it was more crowded and party-like.

Seattle 2010 Day 5
XNA guys like Nick talking to XNA MVPs Andy and George.

Seattle 2010 Day 5
Everyone was taking pictures.

Seattle 2010 Day 5
After a while the UK and Irish MVPs were suggesting that we go to the Irish pub again because there is not much going on here (even though we had Pizza and free beer, yeah). This is a quick picture from the Big Picture ^^

Seattle 2010 Day 5
Some guys have their hotel right here, so they were quickly dropping of their stuff. I didn't want to go all the way to my hotel and back, so I just waited a bit here.

Seattle 2010 Day 5
Don't really know how this picture happend, but from the time stamp I can see this was taken BEFORE I was even drunk, which makes not much sense. I still think this is a cool photo.

Seattle 2010 Day 5
We stayed way too long in the pub, it was almost 1am when we finally left and I walked back to my hotel. At 7am my roommate got up, so there wasn't a long night sleep. Hopefully I won't be too exhausted the next day.

Seattle 2010 - MVP Summit - Day 4

by Benjamin Nitschke 16. February 2010 23:43
Today the MVP Summit actually started and I had to move from Seattle to Bellevue. Weather was pretty nice today, not really warm, but it was not raining, there was no fog and the sun was shining.

Seattle 2010 Day 4
Looking outside my Seattle hotel window for the last time. Weather is pretty good tdoay.

Seattle 2010 Day 4
I checked out from the Holiday Inn and took a cab to Bellevue to register for the MVP Summit and then go to my new hotel.

Seattle 2010 Day 4
One last look at Seattle, good bye. I will only see Bellevue from now on and finally depart on Saturday at Seattle Airport.

Seattle 2010 Day 4
Going to Bellevue means going over the big floating bridge, which is usually full of traffic. Luckily for me rush hour is over and the ride was pretty quick (otherwise it can take 30 minutes or more just to get over the bridge).

Seattle 2010 Day 4
The sky was looking pretty cool out here.

Seattle 2010 Day 4
The taxi driver kept talking about all kind of stuff (I better go not too much into details here, he was kinda crazy ^^). Here he was explaining to me how rich people are on average that live at this side of Bellevue.

Seattle 2010 Day 4
After about 25 minutes I reached the Hyatt Hotel, where I won't be staying, but here the MVP Summit registration took place. I got my conference badge, a nice shirt, a bag and a drinking bottle. Free swag is always cool, but I heard some MVPs complaining about having too much MVP logos on the free swag sometimes ^^

Seattle 2010 Day 4
I had some free time to visit some of the side sessions, but apart from a Codeplex talk there wasn't much interesting things going on. I read my emails, watched some VODs and played a little Fallout 3 on my netbook (which runs great by the way, many other games are not so good).

Seattle 2010 Day 4
A quick look outside the window. Time to get to my new hotel and get some lunch ..

Seattle 2010 Day 4
The weather outside was still great and I eat a baguette from Subway and ran around in Bellevue a bit.

Seattle 2010 Day 4
Pretty nice area to live here, a little loud, but everything looks so new.

Seattle 2010 Day 4
The buildings here and the whole downtown of Bellevue are quite new. Pretty amazing skyscrapers if you ask me:


Seattle 2010 Day 4
Some shops in a fancy building.

Seattle 2010 Day 4
This is still the same building ..

Seattle 2010 Day 4
Okay, enough walking around. Time to go to my new hotel and meet my new roommate.

Seattle 2010 Day 4
A quick view outside the window of my new room. The highway across the parking space looks really loud, but I did not hear it, neither at the day time nor at night, which was pretty cool.

Seattle 2010 Day 4
And this is my new roommate Otto from Hungary. Pretty nice guy. Sorry for the bad picture.

Seattle 2010 Day 4
After some relaxing and surfing via the incredible slow internet at the hotel it was time to go to the Hyatt hotel again for the MVP Summit keynote.

Seattle 2010 Day 4
This is were I meet several other XNA MVPs. You can see Richard, Catalin, Andy (Z-Man) and George in this picture from back to front. I probably should have met with all the German MVPs too, but I stayed with the XNA guys all evening.

Seattle 2010 Day 4
The keynote was about to start. Sorry, I cannot take any pictures from any content of this MVP Summit, everything is highly confidential and under NDA.

Seattle 2010 Day 4
The keynote was kinda boring, not because of the content, but more because the speakers were a little slow and IMO there wasn't enough jokes and fun stuff sprinkeled in like in past years. After the keynotes and welcome speeches it was time to move over to the welcome area.

Seattle 2010 Day 4
Lots of free beer, let the evening begin. There was also food, but I wasn't very hungry and only ate a small hamburger and some cake.

Seattle 2010 Day 4
More XNA MVPs found us and the group became bigger.

Seattle 2010 Day 4
Andy was telling stories as usual, but it was also great to meet up with the rest of the guys again and exchange stories and what happened over the year.

Seattle 2010 Day 4
More pictures from the XNA group.

Seattle 2010 Day 4
The bar was being disassembled, which isn't a good sign. Time to move to a new location. Especially the UK and Irish MVPs were suggesting going to the Irish pub on the other side of the street, which we of course did.

Seattle 2010 Day 4
A quick picture from our long walk across the street.

Seattle 2010 Day 4
Here you can see the UK XNA guys ready to cross the street.

Seattle 2010 Day 4
We finally reached the Irish Pub and are enjoying our first beer here (additionally to the beers we had already of course).

Seattle 2010 Day 4
Lots of different beers here. We tried of course several different ones.

Seattle 2010 Day 4
Looking at my glass. Not a good sign ^^

Seattle 2010 Day 4
An hour or two later some more XNA MVPs came by and joined us. More beer and I was already pretty drunk (I am not as trained as those other guys).

Seattle 2010 Day 4
Time to go home now, it is pretty late, 8am on my europe clock, which is 11pm here.

Seattle 2010 Day 4
One last look at Bellevue, I just fell into my bed once I reached the hotel. The next day my head was brumming a little, but I guess I still had a good night sleep, which was very much required.

The last thing I recorded this day was this police car at night:

How to keep the Intellisense info box short and tidy

by Benjamin Nitschke 15. January 2010 08:39

If you ever have wondered why you need all these Object class method in your class intellisense list, this is the right article for you. I recently wrote an Assert class for our own unit testing system (as reported yesterday we were pretty unhappy with TestDriven.net+xunit in our engine). Even though I have only written 10 methods in the Assert class, which I think are the most essential ones for unit testing, whenever I write Assert. Intellisense pops up with 15 Items instead of 10. In my case (statically accessing Assert) the following 5 Items were displayed without my consens:

  • The Contains method appears 2 times because one is using strings, the other overload is using generics
  • object.Equals appears because every class is derived from object!
  • Same for object.ReferenceEquals
  • The sub class Tests appears to, but I only need it for unit testing (but it needs to be public for xunit)
  • And finally there is a delegate ThrowsDelegate, which is needed for the Throws method.

Additionally if you access a class via an instance (not statically) you will get the following object methods displayed in your intellisense too:

  • Equals (there is one static method with 2 arguments and a non static one with 1 argument)
  • GetType
  • GetHashCode
  • And finally ToString

 

I cannot remember the last time I really needed those object methods in any classes intellisense. Luckily there is an easy solution to fix this, but you need to be aware that it does not work in every situation. But as you can see I managed to reduce my Assert class intellisense list down to the 10 items I really wanted:

 

Basically you just add the following attribute to any method, sub class or property that you do not want to appear in the intellisense list:

[EditorBrowsable(EditorBrowsableState.Never)]

This works fine and dandy with your own methods (like in my example the ThrowsDelegate and the Tests sub class, but what about those nasty object methods? Well, static methods you can just re-implement with the new keyword (overwriting the original methods) and just specify the EditorBrowsable attribute there:

#region Hide object.Equals and object.ReferenceEquals
/// 
/// Equals
/// 
[EditorBrowsable(EditorBrowsableState.Never)]
public new static bool Equals(object objA, object objB)
{
	return object.Equals(objA, objB);
} // Equals(objA, objB)

/// 
/// Reference equals
/// 
[EditorBrowsable(EditorBrowsableState.Never)]
public new static bool ReferenceEquals(object objA, object objB)
{
	return object.ReferenceEquals(objA, objB);
} // ReferenceEquals(objA, objB)
#endregion

For the non-static methods we can even use a simpler trick by deriving your class from the following IHideObjectMembers interface, which already adds the required attributes to the 4 annoying object methods.

/// 
/// Helper interface used to hide the base  members from
/// your classes to make intellisense much cleaner. Note: This ONLY works
/// from other assemblies AND you MUST NOT have the project using this
/// interface in your solution (else VS will still show them).
/// 
[EditorBrowsable(EditorBrowsableState.Never)]
public interface IHideObjectMembers
{
	[EditorBrowsable(EditorBrowsableState.Never)]
	Type GetType();

	[EditorBrowsable(EditorBrowsableState.Never)]
	int GetHashCode();

	[EditorBrowsable(EditorBrowsableState.Never)]
	string ToString();

	[EditorBrowsable(EditorBrowsableState.Never)]
	bool Equals(object obj);
} // interface IHideObjectMembers

One final thing I had to do to get rid of my two Contains methods was to rewrite the string one to a generic one, so it appears together with the other generic one (using lists) in the Intellisense list, but that was no biggy.


When you try this out you might wonder why the hell it is not working for you and sadly the answer is: Yes, it does not work all of the time. As already mentioned in the IHideObjectMembers implementation the hiding only works if you DO NOT HAVE the assembly from the class you are intellisensing in your solution. You need to reference it as an dll (a local file or from the GAC). Even then you might want to create a new solution for testing this out. The strange thing is that after a while VS seems to learn and will use your reduced intellisense even if you have the project in the solution, but I have no idea why this sometimes works (when writing this blog entry it almost always worked inside my Assert assembly even). Anyway, it is still a very useful trick IMO.

How to use your Android Phone as an Internet Router

by Benjamin Nitschke 14. January 2010 07:50

There is a nice little article at livehacker.com how to "Tether Your Android Phone", which means you can turn it into a Wi-Fi hotspot. The catch is that you either have to hack around with root access or you have to pay $30 for an easy to use app. We have an Android Phone at the office (since our engine is currently ported to support that device too), but we just have a pre-paid sim card in there with currently no money on it (so using the internet works the other way around).

 

In related news:

 

I also just saw that Microsoft is bringing Kudu (a kids developer game tool) to the PC (was previously Xbox 360 only). I am not really sure about the success of that thing, but it seems to catch on and is helpful for raising millions of game programmers. What the hell is microsoft planing? do they want to destroy all our jobs? Just kidding ...

Collapsing Projects in Visual Studio Solutions

by Benjamin Nitschke 13. January 2010 11:09

DeltaEngine VS Collapse

If you have 50+ projects in a single solution it can be annoying that you cannot collapse them all with a single click or keystroke. Expanding everything can be simply done with Numpad * at any node in the solution explorer. Having so many projects in a solution and compiling them all everytime you F5 something is not such a good idea because compile time goes through the roof (even though each single project is compiled really quickly, usually in much less than a second). Please note that our projects are mostly very simple and having so many projects is by design because they only implement certain features and can be easily replaced (or there are several modules for the same feature, just doing differently or for different platforms). We should blog about that too, I think it is a pretty good idea and makes refactoring and multiplatform development much easier than big projects and lots of ugly defines (we have almost no defines right now and are pretty happy with it).

 

To solve this we have a little helper tool that recursively selects the projects you need for any given project you want to work on, then you end up with 3-4 projects instead of 50+ (we have like 10-20 new projects every month, so this will probably increase for a while). An alternate solution is to fiddle with the build settings in the Configuration Manager to just compile some projects, but not the rest. But this is very error prone and can cause many headaches because you forgot to compile some project you changed some little thing and then your code will still execute the old .dll with the old code missing your newly implemented functionality.

 

But the problem with so many projects, and usually in any kind of Visual Studio solution, is that you cannot easily collapse all projects at once. Instead you have to collapse them one by one, which can be fun with 5 projects, but it is certainly not funny with 50+ projects anymore and you practically have to do it every day to keep the solution explorer short and tidy. Luckily some clever people solved this problem many years ago with macros or extensions and I like the simple macro version. There is a great tutorial with all required steps available, which you can use to set it up for your Visual Studio. We use a slightly modified macro that works better with our sub folders that have projects too:

 

Imports System
Imports EnvDTE
Imports System.Diagnostics

Public Module Collapse
    Sub CollapseAll()
        ' Get the the Solution Explorer tree
        Dim UIHSolutionExplorer As UIHierarchy
        UIHSolutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()
        ' Check if there is any open solution
        If (UIHSolutionExplorer.UIHierarchyItems.Count = 0) Then
            ' MsgBox("Nothing to collapse. You must have an open solution.")
            Return
        End If
        ' Get the top node (the name of the solution)
        Dim UIHSolutionRootNode As UIHierarchyItem
        UIHSolutionRootNode = UIHSolutionExplorer.UIHierarchyItems.Item(1)
        UIHSolutionRootNode.DTE.SuppressUI = True
        ' Collapse each project node
        Dim UIHItem As UIHierarchyItem
        For Each UIHItem In UIHSolutionRootNode.UIHierarchyItems
            'UIHItem.UIHierarchyItems.Expanded = False
            If UIHItem.UIHierarchyItems.Expanded Then
                Collapse(UIHItem)
            End If
        Next
        ' Select the solution node, or else when you click 
        ' on the solution window
        ' scrollbar, it will synchronize the open document 
        ' with the tree and pop
        ' out the corresponding node which is probably not what you want.
        UIHSolutionRootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
        UIHSolutionRootNode.DTE.SuppressUI = False
    End Sub

    Private Sub Collapse(ByVal item As UIHierarchyItem)
        ' Recursively collapse
        For Each eitem As UIHierarchyItem In item.UIHierarchyItems
            If eitem.UIHierarchyItems.Expanded AndAlso eitem.UIHierarchyItems.Count > 0 Then
                Collapse(eitem)
            End If
        Next

        ' First try to collapse
        item.UIHierarchyItems.Expanded = False

        ' Check if it failed, if yes, then do it manually
        If item.UIHierarchyItems.Expanded = True Then
            item.Select(vsUISelectionType.vsUISelectionTypeSelect)
            DTE.ToolWindows.SolutionExplorer.DoDefaultAction()
        End If
    End Sub
End Module
Disclaimer: The opinions expressed in this blog are own personal opinions and do not represent the companies view.
© 2000-2010 exDream GmbH & MobileBits GmbH. All rights reserved. Legal/Impressum

Recent Games

Fireburst

ArenaWars Reloaded

Jobs @ exDream

Current Poll

Do you know what the Delta Engine is?



Show Results Poll Archive

Calendar

<<  September 2010  >>
MoTuWeThFrSaSu
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

Blogs

Download OPML file OPML