Ideas

From CEGUI Wiki - Crazy Eddie's GUI System (Open Source)
Jump to: navigation, search

Some ideas that might be cool in CEGUI. Feel free to add more or ++ some of these so we know what is sought after the most.

Fully 3D UI

Since we moved to templated Vectors and Sizes we can use UDims for Vector3 as well. This opens up possibilities for fully 3D UI which might be sought for in modern games. The idea is that widgets will have 3D position and orientation but only 2D size so they will be flat. I think (and I hope I am not the only one) that a non-flat widget would be super hard to interface with.

The biggest challenge of this project is that clipping gets really really complex. Exactly as complex as when we rotate widgets (we sort clipping of this using RTT). This would definitely require a stencil based clipping because otherwise if it is used there would be a lot of render textures which would seriously hinder performance.

Another challenge is sorting out projection of mouse position to the widgets.

DataStream (performance)

Currently we use RawDataContainer to load everything (XMLs, images, ...) which is a simple class that holds data (it has a buffer and knows the length of it). It is simple to subclass this and make implementation that hooks directly into your engine. The problem is that this is really inefficient. CEGUI's parsing is designed around SAX (which is a fast sequential way of reading a XML document) so why aren't we taking the advantage of this fact?

I think we should change this and make a new interface called DataStream that would be able to read sequentially. This way loading images and XMLs is faster (less IO bound) and uses less memory (it doesn't have to be loaded all at once and then processed).

This task isn't difficult but can't go into current stable, it would need to be implement in the default branch (unstable).

Binary XML (performance)

To vastly speed up loading times, we could avoid the parsing costs of plain text XML parsing and use one of the Binary XML formats. This project would require you to create a compiler that would turn plain text XMLs to binary XMLs as serialisation in CEGUI isn't implemented using the XMLParsers so all output from editors will be in plain XML.

The idea is that you develop with plain XML and then switch parsers and compile all your assets to speed things up before release.