Jump to content
  • Advertisement
Sign in to follow this  
therand

OpenGL Skinning an OpenGL window

This topic is 817 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

Share this post


Link to post
Share on other sites
Advertisement

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

By "skinning", do you mean one of these?

  • a window which is clipped to an irregular shape (maybe a circle, or a ragged geometry with holes?)
  • the 3D objects that you draw appear to be in no window at all, but are "just there on the screen" (i.e. the background is transparent)
  • everything that has a certain color produces a visible "hole" in the window (color keying)
  • an ordinary window with OpenGL drawing inside, except the title bar has a fancy color and some extra elements

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).

Share this post


Link to post
Share on other sites

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 :)

Edited by therand

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!