advice on OpenGL widgets plz

This is an example of what my application currently looks like:

Unfortunately: this is the VRML version. I’ll spend the next few months porting it to OpenGL. I’m somewhat new to OpenGL, however, and am looking for a few pointers on how to get started.

I’ve gone through the redbook tutorials and have created simple OpenGL applications to load and display my earth-science data (like in the picture, above). So far I’m using just standard OpenGL and GLUT. I’m ready to start adding widgets, however, and am not sure how to go about it. I’ve read about and compiled some FLTK and PUI samples, but am thinking I might want to avoid those if possible… I’m not sure why.

My first question is: is it possible to create various types of widgets on my own without additional toolkits? If so, wouldn’t I have more control over their functionality and display properties, compared to using FLTK or QT, etc? Also, I would like the code to be portable so that I can compile it for Linux in addition to Windows; possibly MacOS, too. Finally I should point out: the projects aren’t commercial at the moment, but might be eventually.

One last thing: the interface file–the file that has all the widgets/buttons/sliders/etc information–for the image above is ~10,000 lines of VRML code. It doesn’t take long for me to create these files/code for various projects, however, because I’ve written an AWK program that generates the code for me automatically, based on an elaborate ASCII ‘spreadsheet’ I create w/info on datatypes, widgets, etc. I plan on doing the same thing for OpenGL: writing a program to write the source code. I bring this up because I think one of the advantages of using the toolkits is that it cuts down on the amount of code one must write. But given the way I intend to go about writing it: perhaps this isn’t an issue?

So, in a nutshell: i want to create buttons, slidebars, etc that enable the user to turn layers on/off, swap textures, adjust transparency, change vertical exaggeration, initiate fly-throughs, etc.

What do you recommend?

CEGUI .

Not the best GUI library on the planet, but it’s designed for this kind of thing. It seems pretty flexible.