Thanks for the suggestions so far!<br><br>About the surfaces: My latest thoughts on this are like this: There is one special surface, that is the framebuffer. That one can be either portrait or landscape, landscape on all ARM devices. In my latest plans, this surface can't be written to using drawing primitives, it can only be updated by a call to 'update' (or something similar).<br>All other surfaces can be protrait or landscape: If you choose to have them all landscaped, the app will run faster on ARM PPC's (since the 'update' doesn't require rotation); portrait surfaces work faster on MIPS and SH3. Currently EasyCE uses only portrait since the slowest devices handle this more efficiently; the idea was that this would guarantee a more equal performance on all devices. With the large market share of ARM devices, it now seems more logical to aim for ARM devices and have MIPS / SH3 support as a 'nice to have'.<br>Since you will still be able to use primitives and pixel operations on surfaces, this means that either the app supports landscape or portrait (note that you can use landscape to draw a portrait image, of course, it's just the orientation of the buffer), or perhaps an application programmer chooses to support both (wich means double code for some things, but faster performance on all devices).<br>So, the 'primary surface' (the framebuffer) doesn't accept lines, plots and so on. Other surfaces do however, so all the current EasyCE drawing primitives will be methods of the surface class.<br>A call to 'update' will thus detect wether or not the source and / or destination surface is rotated, and it will convert if neccessary.<br><br>So far for my ideas. About palettized surfaces: This is an excellent idea. It would be very cool to be able to load a palettized tga and keep it palettized in memory; this saves a lot of space. A palletized surface will of course have a different set of drawing primitives (also palettized), and I don't think it will be possible to copy (part of) a 16bit surface to a palettized surface, unless the target is the primary surface (on 8bit devices).<br><br>About excluding parts of the library to keep EasyCE small: I was thinking about having a 'core.lib', containing the surface stuff and some more generic things (probably also the tga loader / saver wich is rather generic IMO) and besides that a '3d.lib', 'audio.lib' and 'game.lib' (containing the actor stuff, a.o.). That way you can link whatever you need.<br><br>Besides the surface class I'll also need a 'core class' that handles the mouse stuff, buttons, timers and so on (I want multiple timers this time). I'm not yet sure how this class will be instantiated; I think it must be created by the 'winmain', and after that you can retrieve a pointer or reference to it by calling 'getcore' or whatever. This could have been avoided by making EasyCE an application framework that you extend; as I mentioned earlier I don't like that approach since it's too 'C++'.

<br><br>One more thing: I want sprites. Not like I did them in EasyCE 1.x, but I want to simulate a display that supports sprites natively. I think I'll attach them to the primary surface; when you call 'update', EasyCE will then first draw the sprites to the primary surface and then draw it. Pitfall: On some devices, modifications to the framebuffer are immediately visible, while on others, a call to 'GXEndDraw' is needed. So perhaps I should attach sprites to surfaces instead, but that would change the surface (you can't remove the sprites without refreshing the entire surface). A solution would be to have an internal backbuffer in the same format as the primary buffer, but that would slow down EasyCE. On the other hand, ARM devices don't need that, so performance would again be better on ARM than on MIPS and SH3... So the sprites still need some thought.<br><br>I would also like to add a C-Buffer to at least the primary surface. If you don't want to use it, you won't know it's there and it won't eat any performance. If you know how to use it, it can speed up some sprite operations (of simple sprites) and it is absolutely needed to speed up polygon rasterization.<br><br>Well enough babbling. I would really like some comments on the sprite issue. Perhaps I should forget about it and do it just like I did it in EasyCE 1.x.<br><br>Oh yeah one more thing: In ARM asm you can load multiple registers from memory with a single command. This could be used to get 24 pixels at once from the source surface and plot them on the primary surface. This trick could probably speed up the rotation significantly, and it is quite simple code to write.

Just an idea.<br><br>- Jacco.