Hi everyone, I have started getting all my equipment together to build my screen, so far I have cut and sanded the perspex sheet, wired up some test LEDs and built a pine frame for the screen. Well thats where I am on the construction side of things, but now to the interesting stuff, Software!
I am going to be focusing on Windows Vista as my OS, this is because Vista uses a radically different method to render the desktop. Let me explain…
All the programs in Windows XP and below use GDI to draw what you see on the screen, Windows uses messages to ask each application to redraw areas that need to be redrawn and the application draws straight to the screen. Vista manages the drawing slightly differently by asking each application to draw to an off screen surface, then the desktop is composed by the DWM (desktop window manager) in directx, this allows for the glass effect and the other cool effects used in vista.
Basically what I’m going to try and to is create my own shell and DWM that will be a zooming user interface for windows vista.
Here is how its going to work…
The project will be split into 3 parts, Input, Shell Management and Output
The Shell Management will handle all of the Windows API stuff, it will keep track of all the open windows, their sizes and their shared resource handles. This will be the executable of the project that may or may not run as a service. This exe will load 2 dlls at runtime that will handle the input and the output. The idea behind splitting it this way is to allow 3rd parties to develop new input librarys for different types of projects, and allow directx programmers to develop new desktop renderers without needing to worry about any windows API or input stuff. The Shell manager will initially handle basic gesture recognition, but I may make this a separate plugin at a later date.
The input library will send input events to the Shell Manager, the first plugin I will write will be for multi touch screens, but I may make a multi mouse plugin too as it should be relatively easy. The multitouch plugin will handle the Web Cam image acquisition and processing and send events to the Shell Manager.
The Output library will do all of the rendering using Direct3D 10. The Shell manager will provide a collection of windows and trigger events for new and closed windows that the plugin will have to handle. The first Output plugin I will create will allow you to move windows applications around like flash examples on the home page.
I have created a managed shell for windows xp before so I’m confident I can create the Shell Manager without too many problems, however there are still quite a few programming elements here that I have never used before. I will keep this thread updated on my progress.
There are a few hurdles in this project, here they are…
DONE 1. the DWM is a private API used by Microsoft and is not supposed to be used by the public (DWMAXX!)
UNNECESSARY 2. I will be creating this project using only managed code, and currently there is no managed version of directx 10 or 9L
DONE 3. My current graphics card doesnt support DX10 (Bought one, however now its not necessary)
DONE 4. There are no Vista drivers for my Web cam yet (Phillips SPC900-NC) (Now available)
UNNECESSARY 5. I dont have any experience in directx programming (Not using DirectX at the moment so this can wait.)
Stages of Development
UNNECESSARY 1. Create a proof of concept application to draw a shared texture from the DWM in DirectX10 (DWMAXX!)
DONE 2. Create a basic plugin system
DONE 3. Add Shell handling to the plugin system
UNNECESSARY 4. Create a proof of concept direct draw image processing app to convert web cam input to coordinates (tBeta!)
DONE 5. Create the first basic Input Plugin
6. Create the first Basic Output Plugin
7. Release an alpha version for people to test and give feedback
8. Implement the ideas from the feedback
9. Create a SDK for others to create plugins
Well thats it so far, sorry for the lengthy post, this has been cooking for quite some time and I only just feel all the pieces coming together that will make this project work.
*EDIT*
Iv’e recently had more time to work on this and have made some decent progress and with the help of DWMAXX I should be able to get some videos of what Iv’e been working on uploaded soon
*/EDIT*
Thanks for reading
Pleh
