Click here to Skip to main content
15,881,600 members
Articles / Desktop Programming / WTL
Article

A WTL class for developping OpenGL programs using WTL

Rate me:
Please Sign up or sign in to vote.
4.85/5 (10 votes)
1 Oct 20012 min read 102.7K   3.3K   32   13
A class to develop OpenGL programs which can be easily plugged into your WTL programs

Sample Image

Overview

Recently, I studied up on how to write OpenGL programs. I have tried GLUT, a window system independent toolkit for writing OpenGL programs. But I don't like it since it is C-style and need an additional glut32.dll. I have played with WTL for a while, I really like this great framework for developing Win32 program, so I decided to write OpenGL programs using WTL.

Actually, WTL DOES provide OpenGL support in atlgdi.h. If you didn't define _ATL_NO_OPENGL, you should be able to use ChoosePixelFormat, wglCreateContext, etc. However, you have to do a lot of work every time to write an OpenGL program. For simplification, I developed a class COpenGL which can be easily plugged into your WTL programs.

Using COpenGL

COpenGL is a template class which implements most necessary work for OpenGL. It is defined in atlopengl.h. For using it in your program, you have to do the following steps: (assume your main program is Cube.cpp, your OpenGL window is CMainFrame.)

  • copy atlopengl.h to WTL\include.
  • add #include <atlopengl.h> in Cube.cpp file.
  • derive your OpenGL window CMainFrame from COpenGL<CMainFrame>.
  • chain message map to COpenGL by adding CHAIN_MSG_MAP(COpenGL<CMainFrame>) in CMainFrame's message map.
  • if you have implemented OnCreate function in CMainFrame, set bHandled = FALSE; before return 0;
  • implement three functions in CMainFrame: OnInit(), OnRender(), OnResize()
  • (optional) if you want to do animation, derive CMainFrame from CIdleHandler and implement OnIdle. In additional, change CMessageLoop to CGLMessageLoop in Cube.cpp. (you have to do this, otherwise, you cannot get animation).
Similarly you can use it in your view windows. Read atlopengl.h and the demo project for more details.

Conclusion

atlopengl.h is still very simple, but it is a good start for writing OpenGL programs using WTL.

Comment

Partial codes in demo project generated by "OpenGL AppWizard" developed by Ulf Öhlén. See here for details.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Questionwhat is the function of CGLMessageLoop? [modified] Pin
Hunt Chang29-Sep-09 18:40
Hunt Chang29-Sep-09 18:40 
Dear Zilin,

I just read your article and test the code recently, it still running very well under WTL8 and VS 2008 without any bit of problem. Laugh | :laugh:

Though I have noticed that you wrote this article in year 2001 which means a long long time has been passed away. But I am still curious what is the magic behind the class of CGLMessageLoop?

Inside that class, you have only wrote one instruction, return !CMessageLoop::OnIdle(nIdleCount); I have tried to replace the class with some other methods to run the drawing during idle time but they are all not so effective like yours. Could you please explain the code magics behind it?

Thanks in advance and best regards,

Hunt Chang Smile | :)

modified on Wednesday, September 30, 2009 9:22 PM

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.