home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / devc / _SETUP.6 / Group21 / OpenGL_cpp.txt < prev    next >
Text File  |  2000-07-08  |  3KB  |  162 lines

  1. // Includes
  2.  
  3. #include <windows.h>
  4. #include <gl/gl.h>
  5.  
  6. // Function Declarations
  7.  
  8. LRESULT CALLBACK 
  9. WndProc( HWND hWnd, UINT message,
  10. WPARAM wParam, LPARAM lParam );
  11. VOID EnableOpenGL( HWND hWnd, HDC * hDC, HGLRC * hRC );
  12. VOID DisableOpenGL( HWND hWnd, HDC hDC, HGLRC hRC );
  13.  
  14. // WinMain
  15.  
  16. int WINAPI 
  17. WinMain( HINSTANCE hInstance,
  18. HINSTANCE hPrevInstance,
  19. LPSTR lpCmdLine,
  20. int iCmdShow )
  21. {
  22. WNDCLASS wc;
  23. HWND hWnd;
  24. HDC hDC;
  25. HGLRC hRC;
  26. MSG msg;
  27. BOOL bQuit = FALSE;
  28. float theta = 0.0f;
  29.  
  30. // register window class
  31. wc.style = CS_OWNDC;
  32. wc.lpfnWndProc = WndProc;
  33. wc.cbClsExtra = 0;
  34. wc.cbWndExtra = 0;
  35. wc.hInstance = hInstance;
  36. wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
  37. wc.hCursor = LoadCursor( NULL, IDC_ARROW );
  38. wc.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH );
  39. wc.lpszMenuName = NULL;
  40. wc.lpszClassName = "GLSample";
  41. RegisterClass( &wc );
  42.  
  43. // create main window
  44. hWnd = CreateWindow( 
  45. "GLSample", "OpenGL Sample", 
  46. WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
  47. 0, 0, 256, 256,
  48. NULL, NULL, hInstance, NULL );
  49.  
  50. // enable OpenGL for the window
  51. EnableOpenGL( hWnd, &hDC, &hRC );
  52.  
  53. // program main loop
  54. while ( !bQuit ) {
  55.  
  56. // check for messages
  57. if ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) {
  58.  
  59. // handle or dispatch messages
  60. if ( msg.message == WM_QUIT ) {
  61. bQuit = TRUE;
  62. } else {
  63. TranslateMessage( &msg );
  64. DispatchMessage( &msg );
  65. }
  66.  
  67. } else {
  68.  
  69. // OpenGL animation code goes here
  70.  
  71.  
  72.  
  73. }
  74.  
  75. }
  76.  
  77. // shutdown OpenGL
  78. DisableOpenGL( hWnd, hDC, hRC );
  79.  
  80. // destroy the window explicitly
  81. DestroyWindow( hWnd );
  82.  
  83. return msg.wParam;
  84.  
  85. }
  86.  
  87. // Window Procedure
  88.  
  89. LRESULT CALLBACK 
  90. WndProc( HWND hWnd, UINT message,
  91. WPARAM wParam, LPARAM lParam )
  92. {
  93.  
  94. switch ( message ) {
  95.  
  96. case WM_CREATE:
  97. return 0;
  98.  
  99. case WM_CLOSE:
  100. PostQuitMessage( 0 );
  101. return 0;
  102.  
  103. case WM_DESTROY:
  104. return 0;
  105.  
  106. case WM_KEYDOWN:
  107. switch ( wParam ) {
  108.  
  109. case VK_ESCAPE:
  110. PostQuitMessage( 0 );
  111. return 0;
  112.  
  113. }
  114. return 0;
  115.  
  116. default:
  117. return DefWindowProc( hWnd, 
  118. message, wParam, lParam );
  119.  
  120. }
  121.  
  122. }
  123.  
  124. // Enable OpenGL
  125.  
  126. VOID EnableOpenGL( HWND hWnd, HDC * hDC, HGLRC * hRC )
  127. {
  128. PIXELFORMATDESCRIPTOR pfd;
  129. int iFormat;
  130.  
  131. // get the device context (DC)
  132. *hDC = GetDC( hWnd );
  133.  
  134. // set the pixel format for the DC
  135. ZeroMemory( &pfd, sizeof( pfd ) );
  136. pfd.nSize = sizeof( pfd );
  137. pfd.nVersion = 1;
  138. pfd.dwFlags = PFD_DRAW_TO_WINDOW | 
  139. PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
  140. pfd.iPixelType = PFD_TYPE_RGBA;
  141. pfd.cColorBits = 24;
  142. pfd.cDepthBits = 16;
  143. pfd.iLayerType = PFD_MAIN_PLANE;
  144. iFormat = ChoosePixelFormat( *hDC, &pfd );
  145. SetPixelFormat( *hDC, iFormat, &pfd );
  146.  
  147. // create and enable the render context (RC)
  148. *hRC = wglCreateContext( *hDC );
  149. wglMakeCurrent( *hDC, *hRC );
  150.  
  151. }
  152.  
  153. // Disable OpenGL
  154.  
  155. VOID DisableOpenGL( HWND hWnd, HDC hDC, HGLRC hRC )
  156. {
  157. wglMakeCurrent( NULL, NULL );
  158. wglDeleteContext( hRC );
  159. ReleaseDC( hWnd, hDC );
  160.  
  161.