|
As you know, the samples from DirectX SDK use DXUT to display widget controls on top of the 3D viewport. Here are the problems I see with DXUT:
- DXUT is fine when you need only a few controls. If you need more, the viewport to your application can become cluttered very quickly.
- Unless you design a placement system above DXUT, you have to position every widget on screen manually. And adding new widgets later on can force you to rethink your widgets layout.
- In DXUT you have widgets such as comboBox, buttons, sliders and EditBox. But if you are a 3D programmer or a graphics designer you need color widgets, curves controls, histograms, filters, textures, shaders and much more. DXUT is very limited in that regard.
- DXUT is inappropriate. If you want to implement a color widget, you have to use 3 independent sliders to simulate the red, green and blue components. And unless you do something for it you have no visual feedback of the color you are choosing.
- No separation between the application and the control interface. You must always be close to the computer on which the program is running in order to control it. While in today multi-platform and networked environment, you should be able to control a program running on a machine located anywhere in your studio or beyond.
These problems are not specifics to DXUT. I have seen many custom implementations of on-screen widgets suffering from the same issues. And if you are using OpenGL, it doesn't even offer something close to DXUT to begin with.
With DevTool you can solve all the problems I have mentioned above. You don't need to organize your widgets on the screen since they are represented in DevTool's client interface. And every widget represented in a way that gives you the feedback you need to design your programs. Also, the tree structure of the client interface let you organize your widgets to reflects the structure of your programs.
Here is what a sample using DXUT looks like:
DirectX "Local Deformable PRT" sample with DXUT.
You can clearly see that the sliders used for the color components offer no visualization of the selected color and no numerical representation of their values. Now, here is the same sample modified to support DevTool and the accompanying client user interface:
DirectX "Local Deformable PRT" sample with DevTool integration.
DirectX "Local Deformable PRT" sample with DevTool integration.
Now to the demo. It has two executables:
- A DirectX sample program modified to integrate DevTool's server interface.
- DevTool's client interface executable used to control the sample program.
Lets go over DevTool client interface user elements.
DevTool user interface.
- 1. Connect to the program located at the IP address provided in (5) and listening to the port provided in (6). When you start theclient interface, it is configured to connect to a program running on your local IP and with port 2001. So (5) and (6) will be automatically filled with correct values.
- 2. Disconnect from the program.
- 3. Synchronize the widgets with the program. This also reload all the widgets.
- 4. Delete the widgets. You can reload them if you sync with the program.
- 5. Your program IP address. By default, it is set to your local IP.
- 6. Your program listening port. By default it is set to 2001 but you may change it in DevToolServer.xml which is located in the program sample directory.
- 7. A spinning wheel. When the wheel is spinning, the client is connected to the program.
This demo has been tested successfully on the following configurations. Please report any trouble you may encounter.
- XP + Geforce 5600 FX
- XP + Geforce 6600
- XP + Radeon X1300
- Vista 64 + Geforce 8800 GTX
- Vista 64 + Radeon HD 4670
Note about the color control in the interface: if you hold the CTRL key and click on one of the color component, the other components value will be set to the one you clicked. This is a fast way to set all the component to the same value.
Here is the Demo. You will need the latest version of DirectX End-User Runtime.
 |
i thinks that its the best GUI that i ever seen...
did u share your code?