I've been searching for examples of how to skin an OpenGL window but there doesn't appear to be any that I can find. Does anyone know of an example or tutorial on how to skin an OpenGL window?
Thanks
I've been searching for examples of how to skin an OpenGL window but there doesn't appear to be any that I can find. Does anyone know of an example or tutorial on how to skin an OpenGL window?
Thanks
What exactly do you mean by OpenGL window ? AFAIK there is no such concept as an OpenGL window as the window tied to the default framebuffer used by OpenGL is created and managed by the system, system being the OS. So I'm assuming you mean the application window. As far as window decoration goes, there isn't much to play with, unless someone else knows otherwise.
Like cgrant said, there's no such thing as an OpenGL window. What manages the windows are APIs like GLFW and GLUT, which usually only support the most commonly used features, such as setting a window's title, position and size.
Also, "skinning" is not very clear. What do you want to do to your window? Do you want to remove the system title bar and use one of your own? Do you want to have a custom shaped window?
Depending on the library you're using you may be able to do what you want. But it's very likely that you'll need to have different code for each OS.
GLFW and GLUT dosent manage anything rather than are pure wrappers (and helper tools). What manages the native window is the OS itselfe and on Linux related platforms also the Window Manager (GNU, KDE, Gnome ...). What you could do if you dont want to handle the whole outisde drawing yourselfe to just use a borderless window and do the things like move/resize by yourselfe.
In C# this is realy simple but in any other langueg you would need some API code to do so
By "skinning", do you mean one of these?
Those are all things one might think of when hearing "window skinning", but they're very different things, but each of them can be, and has been done (rather easily, too). The first three come with a noticeable performance degradation, mind you. I'm not sure that each works on every operating system and each version any more, haven't tried any of them for at least 5 (probably more like 10) years.
Irregular window clips have been working for pretty much forever, and certainly still work (X eyes and the Win7 Clock Gadget are two well-known exemplary proofs of concept, X eyes been around since the 1980s). Color keying worked fine with Windows XP although it was kinda slow -- no idea about X, and no idea how well it fares with current compositing window managers. Free standing objects (transparent background) works fine everywhere but requires rendering to an offscreen bitmap on recent systems (google for AeroGL for example).
Thanks for the input.
Yes, I said "OpenGL window" but I meant the OS window that OGL is running in. I was just thinking about how to decorate the window kind of like the way Winamp does. Or how you skin Media Player.
From what I'm reading from above it sounds like window decoration would be handled purely from the "C++, C or C#" side rather than from OGL. I know how to remove the title bar etc in OGL. Sorry for posting a non-OGL topic :)
easiest way to do this is make a window with no border or context (i.e. borderless-window-mode) and then draw your own UI... like winamp does. Winamp uses GDI to draw it's own UI from a skin image (I know this because I made one). The window for winamp is borderless with no context (no close, minimize, etc). Then you draw your own borders, minimize, close buttons, and all your own UI.
This is how skinning works, this is how it's always been done. This is how it continues to be done, and this is how you do it with opengl. Draw like you do in opengl, but draw to a borderless window and make up your own UI.
The "correct" way would be to handle WM_NCPAINT, but just using a borderless window and drawing three adjacent textured quads for the title bar (with the middle quad being elastic in size) is sooooooooo much easier.