By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
425,625 Members | 1,283 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 425,625 IT Pros & Developers. It's quick & easy.

Error while compiling

P: 3
I have an error occurring when i try to compile the program and the error is:

Expand|Select|Wrap|Line Numbers
  1. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2653: 'CGLEnabledView' : is not a class or namespace name
  2. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2061: syntax error : identifier 'CGLEnabledView'
  3. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  4. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  5. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  6. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  7. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  8. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  9. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  10. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  11. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  12. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  13. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  14. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  15. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  16. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  17. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  18. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  19. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  20. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  21. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  22. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  23. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  24. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  25. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  26. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  27. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  28. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  29. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  30. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  31. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  32. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  33. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  34. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  35. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  36. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  37. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  38. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  39. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  40. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  41. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  42. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  43. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  44. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  45. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  46. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  47. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  48. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  49. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  50. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  51. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  52. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  53. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  54. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  55. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  56. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  57. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  58. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  59. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  60. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  61. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  62. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  63. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  64. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  65. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  66. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  67. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  68. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  69. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  70. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  71. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  72. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  73. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  74. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  75. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  76. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  77. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  78. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  79. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  80. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  81. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  82. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  83. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  84. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  85. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  86. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  87. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  88. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  89. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  90. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  91. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  92. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  93. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  94. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  95. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  96. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  97. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  98. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  99. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  100. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  101. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : error C2143: syntax error : missing ';' before '}'
  102. D:\Program Files\visual studio 6.0\MSDev98\MyProjects\GLEnabledView\GLNew.cpp(164) : fatal error C1003: error count exceeds 100; stopping compilation
  103. Error executing cl.exe.
  104.  
  105. GLNew.obj - 102 error(s), 0 warning(s)

can any one help me out in this!!!!!!
Apr 26 '10 #1
Share this Question
Share on Google+
5 Replies


P: 26
can you please post the source, it seems to be an error about 'CGLEnabledView' class/namespace when you try to use it GLNew class
Apr 26 '10 #2

P: 3
Thank you for the reply. The code is:

Expand|Select|Wrap|Line Numbers
  1. /*****************************************************
  2. Copyright Notice & Disclaimer
  3.  
  4. Copyright  Alessandro Falappa
  5.  
  6. Permission to use, copy, modify, and distribute this software
  7. and its documentation for any purpose is hereby granted without
  8. fee, provided that the above copyright notice, author statement
  9. appear in all copies of this software and related documentation.
  10.  
  11. If you make enhancement or you discover bugs, please let me
  12. know
  13.  
  14. THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
  15. ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT
  16. LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A
  17. PARTICULAR PURPOSE.
  18.  
  19. IN NO EVENT SHALL ALESSANDRO FALAPPA BE LIABLE FOR ANY
  20. SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
  21. KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
  22. OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE,
  23. AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION
  24. WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  25.  
  26. ///////////////////////////////////////////////
  27. History
  28.  
  29. v 1.0: first version
  30. v 1.1: added CGLDispList helper class
  31.        changed previous disp list service in StockDispList
  32. v 1.2: added CGLTesselator helper class
  33.        added GLCommands pair
  34.        added CGLQuadric wrapper class
  35.  
  36. ******************************************************/
  37. // CGLEnabledView.cpp : implementation file of version 1.2
  38. //
  39. //#include "windows.h"
  40. #include "stdafx.h"
  41. /*******************
  42.  NOTE ABOUT LIBRARIES INCLUSION:
  43.  - Remember to include the appropriate libraries in the link phase
  44.    (look at Project Settings under the Link tab)
  45.  - If you were lucky enough to get SGI's implementation (at present it's
  46.    not availabl nor supported) you can play with it also, just include
  47.    that libraries. SGI's version is faster if you have no GL acceleration
  48.    and if you own a MMX processor
  49.  - These includes below can be moved to stdafx.h to speed up compilation
  50. ********************/
  51. //* MS openGL libraries (link with OPENGL32.LIB and GLU32.LIB)
  52. #include "gl\gl.h"
  53. #include "gl\glu.h"
  54. //*/
  55. /* SGI openGL libraries (link with OPENGL.LIB and GLU.LIB)
  56. #include "[path-of-SGI-sdk]\include\gl\gl.h"
  57. #include "[path-of-SGI-sdk]\include\gl\glu.h"
  58. //*/
  59. //#include "afxtempl.h"
  60. #include "GLEnabledView.h"
  61.  
  62. #ifdef _DEBUG
  63. #define new DEBUG_NEW
  64. #undef THIS_FILE
  65. static char THIS_FILE[] = __FILE__;
  66. #endif
  67.  
  68.  
  69. #define MAX_LISTS 20
  70. // used to identify a MCD video driver (partial OGL acceleration)
  71. #define INSTALLABLE_DRIVER_TYPE_MASK  (PFD_GENERIC_ACCELERATED|PFD_GENERIC_FORMAT)
  72. using namespace std;
  73.  
  74. /////////////////////////////////////////////////////////////////////////////
  75. // Global Functions/variables
  76. // These functions are used by CGLTesselator class
  77.  
  78. struct GarbListItem{
  79.     GLdouble *pvert;
  80.     GarbListItem* next;};
  81.  
  82. GarbListItem* m_garbagelist=NULL;
  83.  
  84. void AddGarbage(GLdouble * ptr)
  85. {
  86.     ASSERT(ptr!=NULL);
  87. // allocate mem for new list item
  88.     GarbListItem* temp=new GarbListItem;
  89. // store pointer
  90.     temp->pvert=ptr;
  91. // add at head of list
  92.     temp->next=m_garbagelist;
  93.     m_garbagelist=temp;
  94. }
  95.  
  96. void DeleteGarbage()
  97. {
  98.     if(m_garbagelist!=NULL)
  99.     {
  100.         GarbListItem* punt=m_garbagelist;
  101.         GarbListItem* temp=m_garbagelist;
  102. // scan the list
  103.         while(punt!=NULL)
  104.         {
  105. // delete vertex
  106.             delete[] punt->pvert;
  107.             punt=punt->next;
  108. // delete list item
  109.             delete temp;
  110.             temp=punt;
  111.         };
  112.         m_garbagelist=NULL;
  113.     };
  114. }
  115.  
  116. void CALLBACK BeginCallback(GLenum type)
  117. {
  118. // issue corresponding GL call
  119.     glBegin(type);
  120. }
  121.  
  122. void CALLBACK ErrorCallback(GLenum errorCode)
  123. {
  124.     const GLubyte *estring;
  125.     CString mexstr;
  126. // get the error descritption from OGL
  127.     estring = gluErrorString(errorCode);
  128. // prepare and show a message box
  129.     mexstr.Format("Tessellation/Quadric Error: %s\n", estring);
  130.     AfxMessageBox(mexstr,MB_OK | MB_ICONEXCLAMATION);
  131. // replicate mex to debug trace
  132.     TRACE("Tessellation Error: %s\n", estring);
  133. }
  134.  
  135. void CALLBACK EndCallback()
  136. {
  137. // issue corresponding GL call
  138.     glEnd();
  139. }
  140.  
  141. void CALLBACK VertexCallback(GLvoid *vertex)
  142. {
  143. // issue corresponding GL call (double is used to get max precision)
  144.     glVertex3dv( (const double *)vertex );
  145. }
  146.  
  147. void CALLBACK CombineCallback(GLdouble coords[3], GLdouble *data[4], GLfloat weight[4], GLdouble **dataOut )
  148. {
  149. // allocate memory for a new vertex
  150.     GLdouble *vertex;
  151.     vertex = new GLdouble[3];
  152. // store reported vertex
  153.     vertex[0] = coords[0];
  154.     vertex[1] = coords[1];
  155.     vertex[2] = coords[2];
  156. // return vertex to OGL
  157.     *dataOut = vertex;
  158. // add vertex pointer to garbage collection routines
  159.     AddGarbage(vertex);
  160. }
  161.  
  162. /////////////////////////////////////////////////////////////////////////////
  163. // CGLEnabledView
  164. IMPLEMENT_DYNCREATE(CGLEnabledView, CView)
  165.  
  166. CGLEnabledView::CGLEnabledView():
  167.     m_dAspectRatio(1.0),
  168.     m_bInsideDispList(FALSE), m_bExternDispListCall(FALSE),
  169.     m_bExternGLCall(FALSE)
  170. {
  171. // define a default cursor
  172.     m_hMouseCursor=AfxGetApp()->LoadStandardCursor(IDC_SIZEALL);
  173. // set the disp list vector to all zeros
  174.     for (int c=0;c<MAX_LISTS;c++) m_DispListVector[c]=0;
  175. }
  176.  
  177. CGLEnabledView::~CGLEnabledView()
  178. {
  179. }
  180.  
  181.  
  182. BEGIN_MESSAGE_MAP(CGLEnabledView, CView)
  183.     //{{AFX_MSG_MAP(CGLEnabledView)
  184.     ON_WM_CREATE()
  185.     ON_WM_DESTROY()
  186.     ON_WM_ERASEBKGND()
  187.     ON_WM_SIZE()
  188.     ON_WM_SETCURSOR()
  189.     //}}AFX_MSG_MAP
  190. END_MESSAGE_MAP()
  191.  
  192. /////////////////////////////////////////////////////////////////////////////
  193. // CGLEnabledView drawing
  194.  
  195. void CGLEnabledView::OnDraw(CDC* pDC)
  196. {
  197. // prepare a semaphore
  198.     static BOOL     bBusy = FALSE;
  199. // use the semaphore to enter this critic section
  200.     if(bBusy) return;
  201.     bBusy = TRUE;
  202.  
  203. // specify the target DeviceContext of the subsequent OGL calls
  204.     wglMakeCurrent(m_pCDC->GetSafeHdc(), m_hRC);
  205.  
  206. // clear background
  207.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  208.  
  209. // call the virtual drawing procedure (to be overridden by user)
  210.     OnDrawGL();
  211.  
  212. // execute OGL commands (flush the OGL graphical pipeline)
  213.     glFinish();
  214.  
  215. // if double buffering is used it's time to swap the buffers
  216.     SwapBuffers(m_pCDC->GetSafeHdc());
  217.  
  218. // turn the semaphore "green"
  219.     bBusy = FALSE;
  220.  
  221. // free the target DeviceContext (window)
  222.     wglMakeCurrent(NULL,NULL);
  223. }
  224.  
  225. void CGLEnabledView::OnDrawGL()
  226. {
  227. // draw carthesian axes
  228.     glBegin(GL_LINES);
  229.         // red x axis
  230.         glColor3f(1.f,0.f,0.f);
  231.         glVertex3f(0.0f,0.0f,0.0f);
  232.         glVertex3f(1.0f,0.0f,0.0f);
  233.         glVertex3f(1.0f,0.0f,0.0f);
  234.         glVertex3f(0.9f,0.1f,0.0f);
  235.         glVertex3f(1.0f,0.0f,0.0f);
  236.         glVertex3f(0.9f,-0.1f,0.0f);
  237.         // green y axis
  238.         glColor3f(0.f,1.f,0.f);
  239.         glVertex3f(0.0f,0.0f,0.0f);
  240.         glVertex3f(0.0f,1.0f,0.0f);
  241.         glVertex3f(0.0f,1.0f,0.0f);
  242.         glVertex3f(0.1f,0.9f,0.0f);
  243.         glVertex3f(0.0f,1.0f,0.0f);
  244.         glVertex3f(-0.1f,0.9f,0.0f);
  245.         // blue z axis
  246.         glColor3f(0.f,0.f,1.f);
  247.         glVertex3f(0.0f,0.0f,0.0f);
  248.         glVertex3f(0.0f,0.0f,1.0f);
  249.         glVertex3f(0.0f,0.0f,1.0f);
  250.         glVertex3f(0.0f,0.1f,0.9f);
  251.         glVertex3f(0.0f,0.0f,1.0f);
  252.         glVertex3f(0.0f,-0.1f,0.9f);
  253.     glEnd();
  254. }
  255.  
  256. /////////////////////////////////////////////////////////////////////////////
  257. // CGLEnabledView diagnostics
  258.  
  259. #ifdef _DEBUG
  260. void CGLEnabledView::AssertValid() const
  261. {
  262.     CView::AssertValid();
  263. }
  264.  
  265. void CGLEnabledView::Dump(CDumpContext& dc) const
  266. {
  267.     CView::Dump(dc);
  268. // dump some infos
  269.     CString str;
  270.     GetWindowText(str);
  271.     afxDump<<"\nView Parameters\n\tClient Rectangle :"<<m_ClientRect<<"\n\tAspect Ratio :"<<m_dAspectRatio<<"\n";
  272.     afxDump<<"\nWindowTitle :"<<str<<"\n";
  273. }
  274. #endif //_DEBUG
  275.  
  276. /////////////////////////////////////////////////////////
  277. // CGLEnabledView Constants
  278.  
  279. // these are used to construct an equilibrated 256 color palette
  280. static unsigned char _threeto8[8] = 
  281. {
  282.     0, 0111>>1, 0222>>1, 0333>>1, 0444>>1, 0555>>1, 0666>>1, 0377
  283. };
  284.  
  285. static unsigned char _twoto8[4] = 
  286. {
  287.     0, 0x55, 0xaa, 0xff
  288. };
  289.  
  290. static unsigned char _oneto8[2] = 
  291. {
  292.     0, 255
  293. };
  294.  
  295. static int defaultOverride[13] = 
  296. {
  297.     0, 3, 24, 27, 64, 67, 88, 173, 181, 236, 247, 164, 91
  298. };
  299.  
  300. // Windows Default Palette
  301. static PALETTEENTRY defaultPalEntry[20] = 
  302. {
  303.     { 0,   0,   0,    0 },
  304.     { 0x80,0,   0,    0 },
  305.     { 0,   0x80,0,    0 },
  306.     { 0x80,0x80,0,    0 },
  307.     { 0,   0,   0x80, 0 },
  308.     { 0x80,0,   0x80, 0 },
  309.     { 0,   0x80,0x80, 0 },
  310.     { 0xC0,0xC0,0xC0, 0 },
  311.  
  312.     { 192, 220, 192,  0 },
  313.     { 166, 202, 240,  0 },
  314.     { 255, 251, 240,  0 },
  315.     { 160, 160, 164,  0 },
  316.  
  317.     { 0x80,0x80,0x80, 0 },
  318.     { 0xFF,0,   0,    0 },
  319.     { 0,   0xFF,0,    0 },
  320.     { 0xFF,0xFF,0,    0 },
  321.     { 0,   0,   0xFF, 0 },
  322.     { 0xFF,0,   0xFF, 0 },
  323.     { 0,   0xFF,0xFF, 0 },
  324.     { 0xFF,0xFF,0xFF, 0 }
  325. };
  326.  
  327. /////////////////////////////////////////////////////////////////////////////
  328. // CGLEnabledView initialization and palette helpers
  329.  
  330. BOOL CGLEnabledView::bSetupPixelFormat()
  331. {
  332. // define default desired video mode (pixel format)
  333.     static PIXELFORMATDESCRIPTOR pfd = 
  334.     {
  335.         sizeof(PIXELFORMATDESCRIPTOR),    // size of this pfd
  336.         1,                                // version number
  337.         PFD_DRAW_TO_WINDOW |            // support window
  338.         PFD_SUPPORT_OPENGL |            // support OpenGL
  339.         PFD_DOUBLEBUFFER,                // double buffered
  340.         PFD_TYPE_RGBA,                  // RGBA type
  341.         24,                             // 24-bit color depth
  342.         0, 0, 0, 0, 0, 0,               // color bits ignored
  343.         0,                              // no alpha buffer
  344.         0,                              // shift bit ignored
  345.         0,                              // no accumulation buffer
  346.         0, 0, 0, 0,                     // accum bits ignored
  347.         16,                             // 32-bit z-buffer
  348.         0,                              // no stencil buffer
  349.         0,                              // no auxiliary buffer
  350.         PFD_MAIN_PLANE,                 // main layer
  351.         0,                              // reserved
  352.         0, 0, 0                         // layer masks ignored
  353.     };
  354. // let the user change some parameters if he wants
  355.     BOOL bDoublBuf;
  356.     ColorsNumber cnum;
  357.     ZAccuracy zdepth;
  358.     VideoMode(cnum,zdepth,bDoublBuf);
  359. //set the changes
  360.     if(bDoublBuf) pfd.dwFlags=PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |PFD_DOUBLEBUFFER;
  361.     else pfd.dwFlags=PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
  362.     switch(cnum)
  363.     {
  364.     case INDEXED: pfd.cColorBits=8;
  365.     case THOUSANDS: pfd.cColorBits=16;
  366.     case MILLIONS: pfd.cColorBits=24;
  367.     case MILLIONS_WITH_TRANSPARENCY: pfd.cColorBits=32;
  368.     };
  369.     switch(zdepth)
  370.     {
  371.     case NORMAL: pfd.cDepthBits=16;
  372.     case ACCURATE: pfd.cDepthBits=32;
  373.     };
  374.  
  375. // ask the system for such video mode
  376.     ASSERT(m_pCDC != NULL);
  377.     int pixelformat;
  378.     if ( (pixelformat = ChoosePixelFormat(m_pCDC->GetSafeHdc(), &pfd)) == 0 )
  379.     {
  380.         AfxMessageBox("ChoosePixelFormat failed");
  381.         return FALSE;
  382.     }
  383.  
  384. // try to set this video mode    
  385.     if (SetPixelFormat(m_pCDC->GetSafeHdc(), pixelformat, &pfd) == FALSE)
  386.     {
  387. // the requested video mode is not available so get a default one
  388.         pixelformat = 1;    
  389.         if (DescribePixelFormat(m_pCDC->GetSafeHdc(), pixelformat, sizeof(PIXELFORMATDESCRIPTOR), &pfd)==0)
  390.         {
  391. // neither the requested nor the default are available: fail
  392.             AfxMessageBox("SetPixelFormat failed (no OpenGL compatible video mode)");
  393.             return FALSE;
  394.         }
  395.     }
  396.  
  397.     return TRUE;
  398. }
  399.  
  400. void CGLEnabledView::CreateRGBPalette()
  401. {
  402.     PIXELFORMATDESCRIPTOR pfd;
  403.     LOGPALETTE *pPal;
  404.     int n, i;
  405.  
  406. // get the initially choosen video mode
  407.     n = ::GetPixelFormat(m_pCDC->GetSafeHdc());
  408.     ::DescribePixelFormat(m_pCDC->GetSafeHdc(), n, sizeof(pfd), &pfd);
  409.  
  410. // if is an indexed one...
  411.     if (pfd.dwFlags & PFD_NEED_PALETTE)
  412.     {
  413. // ... construct an equilibrated palette (3 red bits, 3 green bits, 2 blue bits)
  414. // NOTE: this code is integrally taken from MFC example Cube
  415.         n = 1 << pfd.cColorBits;
  416.         pPal = (PLOGPALETTE) new char[sizeof(LOGPALETTE) + n * sizeof(PALETTEENTRY)];
  417.  
  418.         ASSERT(pPal != NULL);
  419.  
  420.         pPal->palVersion = 0x300;
  421.         pPal->palNumEntries = n;
  422.         for (i=0; i<n; i++)
  423.         {
  424.             pPal->palPalEntry[i].peRed=ComponentFromIndex(i, pfd.cRedBits, pfd.cRedShift);
  425.             pPal->palPalEntry[i].peGreen=ComponentFromIndex(i, pfd.cGreenBits, pfd.cGreenShift);
  426.             pPal->palPalEntry[i].peBlue=ComponentFromIndex(i, pfd.cBlueBits, pfd.cBlueShift);
  427.             pPal->palPalEntry[i].peFlags=0;
  428.         }
  429.  
  430. // fix up the palette to include the default Windows palette
  431.         if ((pfd.cColorBits == 8)                           &&
  432.             (pfd.cRedBits   == 3) && (pfd.cRedShift   == 0) &&
  433.             (pfd.cGreenBits == 3) && (pfd.cGreenShift == 3) &&
  434.             (pfd.cBlueBits  == 2) && (pfd.cBlueShift  == 6)
  435.            )
  436.         {
  437.             for (i = 1 ; i <= 12 ; i++)
  438.                 pPal->palPalEntry[defaultOverride[i]] = defaultPalEntry[i];
  439.         }
  440.  
  441.         m_CurrentPalette.CreatePalette(pPal);
  442.         delete pPal;
  443.  
  444. // set the palette
  445.         m_pOldPalette=m_pCDC->SelectPalette(&m_CurrentPalette, FALSE);
  446.         m_pCDC->RealizePalette();
  447.     }
  448. }
  449.  
  450. unsigned char CGLEnabledView::ComponentFromIndex(int i, UINT nbits, UINT shift)
  451. {
  452.     unsigned char val;
  453.  
  454.     val = (unsigned char) (i >> shift);
  455.     switch (nbits) 
  456.     {
  457.  
  458.     case 1:
  459.         val &= 0x1;
  460.         return _oneto8[val];
  461.     case 2:
  462.         val &= 0x3;
  463.         return _twoto8[val];
  464.     case 3:
  465.         val &= 0x7;
  466.         return _threeto8[val];
  467.  
  468.     default:
  469.         return 0;
  470.     }
  471. }
  472.  
  473. /////////////////////////////////////////////////////////////////////////////
  474. // CGLEnabledView message handlers and overridables
  475.  
  476. int CGLEnabledView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  477. {
  478.     if (CView::OnCreate(lpCreateStruct) == -1) return -1;
  479.  
  480. // OpenGL rendering context creation
  481.     PIXELFORMATDESCRIPTOR pfd;
  482.     int         n;
  483.  
  484. // initialize the private member
  485.     m_pCDC= new CClientDC(this);
  486.  
  487. // choose the requested video mode
  488.     if (!bSetupPixelFormat()) return 0;
  489.  
  490. // ask the system if the video mode is supported
  491.     n=::GetPixelFormat(m_pCDC->GetSafeHdc());
  492.     ::DescribePixelFormat(m_pCDC->GetSafeHdc(),n,sizeof(pfd),&pfd);
  493.  
  494. // create a palette if the requested video mode has 256 colors (indexed mode)
  495.     CreateRGBPalette();
  496.  
  497. // link the Win Device Context with the OGL Rendering Context
  498.     m_hRC = wglCreateContext(m_pCDC->GetSafeHdc());
  499.  
  500. // specify the target DeviceContext (window) of the subsequent OGL calls
  501.     wglMakeCurrent(m_pCDC->GetSafeHdc(), m_hRC);
  502.  
  503. // performs default setting of rendering mode,etc..
  504.     OnCreateGL();
  505.  
  506. // free the target DeviceContext (window)
  507.     wglMakeCurrent(NULL,NULL);
  508.  
  509.     return 0;
  510. }
  511.  
  512. void CGLEnabledView::OnCreateGL()
  513. {
  514. // perform hidden line/surface removal (enabling Z-Buffer)
  515.     glEnable(GL_DEPTH_TEST);
  516.  
  517. // set background color to black
  518.     glClearColor(0.f,0.f,0.f,1.0f );
  519.  
  520. // set clear Z-Buffer value
  521.     glClearDepth(1.0f);
  522. }
  523.  
  524. void CGLEnabledView::OnDestroy() 
  525. {
  526. // specify the target DeviceContext (window) of the subsequent OGL calls
  527.     wglMakeCurrent(m_pCDC->GetSafeHdc(), m_hRC);
  528.  
  529. // remove all display lists
  530.     for (int c=0;c<MAX_LISTS;c++) if(m_DispListVector[c]) glDeleteLists(m_DispListVector[c],1);
  531.  
  532. // release definitely OGL Rendering Context
  533.     if (m_hRC!=NULL) ::wglDeleteContext(m_hRC);
  534.  
  535. // Select our palette out of the dc
  536.     CPalette palDefault;
  537.     palDefault.CreateStockObject(DEFAULT_PALETTE);
  538.     m_pCDC->SelectPalette(&palDefault, FALSE);
  539.  
  540. // destroy Win Device Context
  541.     if(m_pCDC) delete m_pCDC;
  542.  
  543. // finally call the base function
  544.     CView::OnDestroy();    
  545. }
  546.  
  547. BOOL CGLEnabledView::PreCreateWindow(CREATESTRUCT& cs) 
  548. {
  549. // these styles are requested by OpenGL
  550.     cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
  551.  
  552. // these styles are meant for a use of this class in a MDI application
  553.     cs.lpszClass = AfxRegisterWndClass(CS_OWNDC | CS_HREDRAW | CS_VREDRAW);
  554.  
  555.     return CView::PreCreateWindow(cs);
  556. }
  557.  
  558.  
  559. BOOL CGLEnabledView::OnEraseBkgnd(CDC* pDC) 
  560. {
  561. // OGL has his own background erasing so tell Windows to skip
  562.     return TRUE;
  563. }
  564.  
  565. void CGLEnabledView::OnSize(UINT nType, int cx, int cy) 
  566. {
  567.     CView::OnSize(nType, cx, cy);
  568. // when called with a nonzero window:
  569.     if ( 0 < cx && 0 < cy )
  570.     {
  571. // update the rect and the aspect ratio
  572.         m_ClientRect.right = cx;
  573.         m_ClientRect.bottom = cy;
  574.         m_dAspectRatio=double(cx)/double(cy);
  575.  
  576. // specify the target DeviceContext of the subsequent OGL calls
  577.         wglMakeCurrent(m_pCDC->GetSafeHdc(), m_hRC);
  578.  
  579. // call the virtual sizing procedure (to be overridden by user)
  580.         OnSizeGL(cx,cy);
  581.  
  582. // free the target DeviceContext (window)
  583.         wglMakeCurrent(NULL,NULL);
  584.  
  585. // force redraw
  586.         Invalidate(TRUE);
  587.     };
  588. }
  589.  
  590. void CGLEnabledView::OnSizeGL(int cx, int cy)
  591. {
  592. // set correspondence between window and OGL viewport
  593.         glViewport(0,0,cx,cy);
  594.  
  595. // update the camera
  596.          glPushMatrix();
  597.             glMatrixMode(GL_PROJECTION);
  598.                 glLoadIdentity();
  599.                 gluPerspective(40.0,m_dAspectRatio,0.1f, 10.0f);
  600.                 glTranslatef(0.0f,0.0f,-4.f);
  601.             glMatrixMode(GL_MODELVIEW);
  602.         glPopMatrix();
  603. }
  604.  
  605. BOOL CGLEnabledView::OnSetCursor(CWnd* /*pWnd*/, UINT /*nHitTest*/, UINT /*message*/) 
  606. {
  607.     ASSERT(m_hMouseCursor!=NULL);
  608.     ::SetCursor(m_hMouseCursor);
  609.     return TRUE;
  610. }
  611.  
  612. /////////////////////////////////////////////////////////////////////////////
  613. // CGLEnabledView public members
  614.  
  615. void CGLEnabledView::VideoMode(ColorsNumber &c, ZAccuracy &z, BOOL &dbuf)
  616. {
  617. // set default videomode
  618.     c=MILLIONS;
  619.     z=NORMAL;
  620.     dbuf=TRUE;
  621. }
  622.  
  623. void CGLEnabledView::SetMouseCursor(HCURSOR mcursor)
  624. {
  625. // set the specified cursor (only if it is a valid one)
  626.     if(mcursor!=NULL) m_hMouseCursor=mcursor;
  627. }
  628.  
  629. const CString CGLEnabledView::GetInformation(InfoField type)
  630. {
  631.     PIXELFORMATDESCRIPTOR pfd;
  632.     CString str("Not Available");
  633.  
  634. // Get information about the DC's current pixel format 
  635.     ::DescribePixelFormat( m_pCDC->GetSafeHdc(), ::GetPixelFormat(m_pCDC->GetSafeHdc()),sizeof(PIXELFORMATDESCRIPTOR), &pfd ); 
  636.  
  637. // specify the target DeviceContext of the subsequent OGL calls
  638.     wglMakeCurrent(m_pCDC->GetSafeHdc(), m_hRC);
  639.  
  640.     switch(type)
  641.     {
  642. // Derive driver information
  643.     case ACCELERATION: if( 0==(INSTALLABLE_DRIVER_TYPE_MASK & pfd.dwFlags) ) str="Fully Accelerated (ICD)"; // fully in hardware (fastest)
  644.                         else if (INSTALLABLE_DRIVER_TYPE_MASK==(INSTALLABLE_DRIVER_TYPE_MASK & pfd.dwFlags) ) str="Partially Accelerated (MCD)"; // partially in hardware (pretty fast, maybe..)
  645.                              else str="Not Accelerated (Software)";    // software
  646.                         break;
  647. // get the company name responsible for this implementation
  648.     case VENDOR:str=(char*)::glGetString(GL_VENDOR);
  649.                 if ( ::glGetError()!=GL_NO_ERROR) str.Format("Not Available");// failed!
  650.                 break;
  651. // get the renderer name; this is specific of an hardware configuration
  652.     case RENDERER:str=(char*)::glGetString(GL_RENDERER);
  653.                     if ( ::glGetError()!=GL_NO_ERROR) str.Format("Not Available");// failed!
  654.                     break;
  655. // get the version
  656.     case VERSION:str=(char*)::glGetString(GL_VERSION);
  657.                 if ( ::glGetError()!=GL_NO_ERROR) str.Format("Not Available");// failed!
  658.                 break;
  659. // return a space separated list of extensions
  660.     case EXTENSIONS: str=(char*)::glGetString(GL_EXTENSIONS);
  661.                 if ( ::glGetError()!=GL_NO_ERROR) str.Format("Not Available");// failed!
  662.                 break;
  663.     };
  664.  
  665. // free the target DeviceContext (window) and return the result
  666.     wglMakeCurrent(NULL,NULL);
  667.     return str;
  668. }
  669.  
  670. void CGLEnabledView::DrawStockDispLists()
  671. {
  672. // check if we are already inside a drawing session
  673.     if(m_hRC==wglGetCurrentContext() && m_pCDC->GetSafeHdc()==wglGetCurrentDC() )
  674.     {
  675. // draw directly all display lists
  676.         for (int c=0;c<MAX_LISTS;c++) if(m_DispListVector[c]) glCallList(m_DispListVector[c]);
  677.     }
  678.     else
  679.     {
  680. // specify the target DeviceContext of the subsequent OGL calls
  681.         wglMakeCurrent(m_pCDC->GetSafeHdc(), m_hRC);
  682. // draw all display lists
  683.         for (int c=0;c<MAX_LISTS;c++) if(m_DispListVector[c]) glCallList(m_DispListVector[c]);
  684. // free the target DeviceContext (window)
  685.         wglMakeCurrent(NULL,NULL);
  686.     };
  687. }
  688.  
  689. void CGLEnabledView::StartStockDListDef()
  690. {
  691. // check if we aren't inside another couple begin/end
  692.     if(!m_bInsideDispList)
  693.     {
  694. // search a free slot
  695.         for (int c=0;m_DispListVector[c]!=0;c++);
  696. // check if we are inside a drawing session or not....
  697.         if(!( m_hRC==wglGetCurrentContext() && m_pCDC->GetSafeHdc()==wglGetCurrentDC() ))
  698.         {
  699. // ...if not specify the target DeviceContext of the subsequent OGL calls
  700.             wglMakeCurrent(m_pCDC->GetSafeHdc(), m_hRC);
  701. // set a warning for EndDispList
  702.             m_bExternDispListCall=TRUE;
  703.         };
  704. // create a handle to the disp list (actually an integer)
  705.         m_DispListVector[c]=glGenLists(1);
  706. // set a semaphore
  707.         m_bInsideDispList=TRUE;
  708. // start the disp list: all subsequent OGL calls will be redirected to the list
  709.         glNewList(m_DispListVector[c],GL_COMPILE);
  710.     };
  711. }
  712.  
  713. void CGLEnabledView::EndStockListDef()
  714. {
  715. // close the disp list
  716.     glEndList();
  717. // unset the semaphore
  718.     m_bInsideDispList=FALSE;
  719. // if beginDispList set the warn free the target DeviceContext
  720.     if(m_bExternDispListCall) wglMakeCurrent(NULL,NULL);
  721. }
  722.  
  723. void CGLEnabledView::ClearStockDispLists()
  724. {
  725. // check if we are referring to the right Rendering Context
  726.     if(m_hRC==wglGetCurrentContext() && m_pCDC->GetSafeHdc()==wglGetCurrentDC() )
  727.     {
  728. // delete active display lists
  729.         for (int c=0;c<MAX_LISTS;c++) if(m_DispListVector[c]) glDeleteLists(m_DispListVector[c],1);
  730.     }
  731.     else
  732.     {
  733. // specify the target Rendering Context of the subsequent OGL calls
  734.         wglMakeCurrent(m_pCDC->GetSafeHdc(), m_hRC);
  735. // delete active display lists
  736.         for (int c=0;c<MAX_LISTS;c++) if(m_DispListVector[c]) glDeleteLists(m_DispListVector[c],1);
  737. // free the target Rendering Context (window)
  738.         wglMakeCurrent(NULL,NULL);
  739.     };
  740. }
  741.  
  742. void CGLEnabledView::BeginGLCommands()
  743. {
  744. // check if we are inside a drawing session or not....
  745.     if(!( m_hRC==wglGetCurrentContext() && m_pCDC->GetSafeHdc()==wglGetCurrentDC() ))
  746.     {
  747. // ...if not specify the target DeviceContext of the subsequent OGL calls
  748.         wglMakeCurrent(m_pCDC->GetSafeHdc(), m_hRC);
  749. // set a warning for EndGLCommands
  750.         m_bExternGLCall=TRUE;
  751.     };
  752. }
  753.  
  754. void CGLEnabledView::EndGLCommands()
  755. {
  756. // if BeginGLCommands set the warn free the target DeviceContext
  757.     if(m_bExternGLCall) wglMakeCurrent(NULL,NULL);
  758. }
  759.  
  760. //////////////////////////////////////////////////////////////////////
  761. //
  762. // Implementation of CGLEnabledView::CGLDispList class.
  763. //
  764. /*** DESCRIPTION
  765.  
  766.   This is actually a helper class which wraps the
  767.   use of display list in OGL.
  768.   It must be used inside an GLEnabledView cause
  769.   a display list must refer to a Rendering Context.
  770.   At present there is no support for Disp. Lists
  771.   Sharing among multiple RCs (that is multiple MDI
  772.   child windows).
  773.  
  774. ****************************************/
  775.  
  776. //////////////////////////////////////////////////////////////////////
  777. // Construction/Destruction
  778.  
  779. CGLEnabledView::CGLDispList::CGLDispList():
  780.     m_glListId(0), m_bIsolated(FALSE)
  781. {
  782. }
  783.  
  784. CGLEnabledView::CGLDispList::~CGLDispList()
  785. {
  786. // remove display list
  787.     glDeleteLists(m_glListId,1); 
  788. }
  789.  
  790. //////////////////////////////////////////////////////////////////////
  791. // Member functions
  792.  
  793. void CGLEnabledView::CGLDispList::Draw()
  794. {
  795. // if the list is not empty...
  796.     if(m_glListId)
  797.     {
  798.         if(m_bIsolated)
  799.         {
  800. // save current transformation matrix
  801.             glPushMatrix();
  802. // save current OGL internal state (lighting, shading, and such)
  803.             glPushAttrib(GL_ALL_ATTRIB_BITS);
  804.         };
  805. // draw the list
  806.         glCallList(m_glListId);
  807.         if(m_bIsolated)
  808.         {
  809. // restore transformation matrix
  810.             glPopMatrix();
  811. // restore OGL internal state
  812.             glPopAttrib();
  813.         };
  814.     };
  815. }
  816.  
  817. void CGLEnabledView::CGLDispList::StartDef(BOOL bImmediateExec)
  818. {
  819. // set the context for GL calls (if needed)
  820. //    BeginGLCommands();
  821. // check if another list is under construction
  822.     int cur;
  823.     glGetIntegerv(GL_LIST_INDEX,&cur);
  824.     if(cur != 0) {TRACE("Error: Nested display list definition!");ASSERT(FALSE);};
  825. // if the list is empty firstly allocate one
  826.     if(!m_glListId) m_glListId=glGenLists(1);
  827.  
  828. // start or replace a list definition
  829.     if (bImmediateExec) glNewList(m_glListId,GL_COMPILE_AND_EXECUTE);
  830.     else  glNewList(m_glListId,GL_COMPILE);
  831. }
  832.  
  833. void CGLEnabledView::CGLDispList::EndDef()
  834. {
  835. // check the coupling with a preceding call to StartDef()
  836.     int cur;
  837.     glGetIntegerv(GL_LIST_INDEX,&cur);
  838.     if(cur != m_glListId) {TRACE("CGLDispList:Missing StartDef() before EndDef()\n");return;};
  839. // close list definition
  840.     glEndList();
  841. // free the context (if needed)
  842. //    EndGLCommands();
  843. }
  844.  
  845. //////////////////////////////////////////////////////////////////////
  846. //
  847. // Implementation of CGLEnabledView::CGLTesselator class.
  848. //
  849. /*** DESCRIPTION
  850.  
  851.   This is actually a helper class which wraps the
  852.   use of tessellation objects in OGL (see guide).
  853.   It must be used inside an GLEnabledView cause
  854.   a tesselator object must refer to a Rendering Context.
  855.  
  856. ****************************************/
  857.  
  858. //////////////////////////////////////////////////////////////////////
  859. // Construction/Destruction
  860.  
  861. CGLEnabledView::CGLTesselator::CGLTesselator()
  862. {
  863. // create tessellation object
  864.     m_tessObj=gluNewTess();
  865. // set callback functions
  866.     gluTessCallback(m_tessObj,GLU_TESS_BEGIN,(void (CALLBACK*)())&BeginCallback); 
  867.     gluTessCallback(m_tessObj,GLU_TESS_VERTEX,(void (CALLBACK*)())&VertexCallback); 
  868.     gluTessCallback(m_tessObj,GLU_TESS_END,(void (CALLBACK*)())&EndCallback);
  869.     gluTessCallback(m_tessObj,GLU_TESS_COMBINE,(void (CALLBACK*)())&CombineCallback);
  870.     gluTessCallback(m_tessObj,GLU_TESS_ERROR,(void (CALLBACK*)())&ErrorCallback);
  871. }
  872.  
  873. CGLEnabledView::CGLTesselator::~CGLTesselator()
  874. {
  875. // remove tessellation object
  876.     gluDeleteTess(m_tessObj);    
  877. }
  878.  
  879. //////////////////////////////////////////////////////////////////////
  880. // Member functions
  881.  
  882. void CGLEnabledView::CGLTesselator::SetWindingRule(GLdouble which)
  883. {
  884. // issue the equivalent GL call
  885.     gluTessProperty(m_tessObj,GLU_TESS_WINDING_RULE,which); 
  886. }
  887.  
  888. GLdouble CGLEnabledView::CGLTesselator::GetWindingRule()
  889. {
  890. //retrieve attribute
  891.     GLdouble temp;
  892.     gluTessProperty(m_tessObj,GLU_TESS_WINDING_RULE,temp);
  893. // return value
  894.     return temp;
  895. }
  896.  
  897. void CGLEnabledView::CGLTesselator::SetFilling(BOOL bFill)
  898. {
  899. // issue the equivalent GL calls
  900.     if(bFill) gluTessProperty(m_tessObj,GLU_TESS_BOUNDARY_ONLY,GL_FALSE);
  901.     else gluTessProperty(m_tessObj,GLU_TESS_BOUNDARY_ONLY,GL_TRUE);
  902. }
  903.  
  904. BOOL CGLEnabledView::CGLTesselator::GetFilling()
  905. {
  906. //retrieve attribute
  907.     GLdouble temp;
  908.     gluTessProperty(m_tessObj,GLU_TESS_BOUNDARY_ONLY,temp);
  909. // convert to a boolean
  910.     return (temp==GL_TRUE);
  911. }
  912.  
  913. void CGLEnabledView::CGLTesselator::StartDef()
  914. {
  915. // start a polygon definition
  916.     gluTessBeginPolygon(m_tessObj,NULL);
  917. // start a contour definition
  918.     gluTessBeginContour(m_tessObj);
  919. }
  920.  
  921. void CGLEnabledView::CGLTesselator::EndDef()
  922. {
  923. // end contour and polygon definition
  924.     gluTessEndContour(m_tessObj);
  925.     gluTessEndPolygon(m_tessObj);
  926. // free new vertices created by tessellation
  927.     ::DeleteGarbage();
  928. }
  929.  
  930. void CGLEnabledView::CGLTesselator::ContourSeparator()
  931. {
  932. // insert a contour separation
  933.     gluTessEndContour(m_tessObj);
  934.     gluTessBeginContour(m_tessObj);
  935. }
  936.  
  937. void CGLEnabledView::CGLTesselator::AddVertex(GLdouble vertData[3])
  938. {
  939. // IMPORTANT: the 3rd parameter must be given otherwise an access
  940. // violation will occur, moreover every vertex must have it's own memory
  941. // location till the closing of the polygon (that is you can't pass all
  942. // the vertices trough the same variable in a for loop).
  943.     gluTessVertex(m_tessObj,vertData,vertData); 
  944. }
  945.  
  946. void CGLEnabledView::CGLTesselator::AddVertexArray(GLdouble arr[][3], int size)
  947. {
  948.     ASSERT(arr!=NULL);
  949. // pass the vertices to the tessellation object
  950.     for(int ct=0;ct<size;ct++) gluTessVertex(m_tessObj,arr[ct],arr[ct]);
  951. }
  952.  
  953. //////////////////////////////////////////////////////////////////////
  954. //
  955. // Implementation of CGLEnabledView::CGLQuadric class.
  956. //
  957. /*** DESCRIPTION
  958.  
  959.   This is actually a helper class which wraps the
  960.   use of quadric objects in OGL (see guide).
  961.   It must be used inside an GLEnabledView cause
  962.   a quadric object must refer to a Rendering Context.
  963.  
  964. ****************************************/
  965.  
  966. //////////////////////////////////////////////////////////////////////
  967. // Construction/Destruction
  968.  
  969. CGLEnabledView::CGLQuadric::CGLQuadric(GLenum drwStyle,GLenum normals,GLenum side,BOOL bGenerateTxtrCoords)
  970. {
  971. // check validity of parameters
  972.     ASSERT(normals==GLU_NONE || normals==GLU_FLAT || normals==GLU_SMOOTH);
  973.     ASSERT(drwStyle==GLU_FILL || drwStyle==GLU_LINE || drwStyle==GLU_SILHOUETTE|| drwStyle==GLU_POINT);
  974.     ASSERT(side==GLU_INSIDE || side==GLU_OUTSIDE);
  975. // create quadric object
  976.     m_quadrObj=gluNewQuadric();
  977. // set error callback function (shared with tesselators)
  978.     gluQuadricCallback(m_quadrObj,GLU_ERROR,(void (CALLBACK*)())&ErrorCallback);
  979. // set normal generation
  980.     gluQuadricNormals(m_quadrObj,normals);
  981. // set Texture Coordinates generation
  982.     if(bGenerateTxtrCoords) gluQuadricTexture(m_quadrObj,GL_TRUE);
  983.     else gluQuadricTexture(m_quadrObj,GL_FALSE);
  984. // set how the qadric will be generated
  985.     gluQuadricDrawStyle(m_quadrObj,drwStyle);
  986. // set which side of the quadric is to be considered inside
  987.     gluQuadricOrientation(m_quadrObj,side);
  988. }
  989.  
  990. CGLEnabledView::CGLQuadric::~CGLQuadric()
  991. {
  992. // remove quadric object
  993.     gluDeleteQuadric(m_quadrObj);    
  994. }
  995.  
  996. //////////////////////////////////////////////////////////////////////
  997. // Member functions
  998.  
  999. void CGLEnabledView::CGLQuadric::SetNormals(GLenum type)
  1000. {
  1001. // check validity of type parameter it must be one of these:
  1002.     ASSERT(type==GLU_NONE || type==GLU_FLAT || type==GLU_SMOOTH);
  1003. // issue corresponding GL command
  1004.     gluQuadricNormals(m_quadrObj,type);
  1005. }
  1006.  
  1007. void CGLEnabledView::CGLQuadric::SetTextureCoordsGen(BOOL flag)
  1008. {
  1009. // issue corresponding GL commands
  1010.     if(flag) gluQuadricTexture(m_quadrObj,GL_TRUE);
  1011.     else gluQuadricTexture(m_quadrObj,GL_FALSE);
  1012. }
  1013.  
  1014. void CGLEnabledView::CGLQuadric::SetOrientation(GLenum type)
  1015. {
  1016. // check validity of type parameter it must be one of these:
  1017.     ASSERT(type==GLU_INSIDE || type==GLU_OUTSIDE);
  1018. // issue corresponding GL command
  1019.     gluQuadricOrientation(m_quadrObj,type);
  1020. }
  1021.  
  1022. void CGLEnabledView::CGLQuadric::SetDrawStyle(GLenum style)
  1023. {
  1024. // check validity of type parameter it must be one of these:
  1025.     ASSERT(style==GLU_FILL || style==GLU_LINE || style==GLU_SILHOUETTE|| style==GLU_POINT);
  1026. // issue corresponding GL command
  1027.     gluQuadricDrawStyle(m_quadrObj,style);
  1028. }
  1029.  
  1030. void CGLEnabledView::CGLQuadric::DrawSphere(GLdouble radius, int longitudeSubdiv, int latitudeSubdiv)
  1031. {
  1032. // issue corresponding GL command
  1033.     gluSphere(m_quadrObj,radius,longitudeSubdiv,latitudeSubdiv);
  1034. }
  1035.  
  1036. void CGLEnabledView::CGLQuadric::DrawCylinder(GLdouble baseRadius,GLdouble topRadius,GLdouble height,int slices,int stacks)
  1037. {
  1038. // issue corresponding GL command
  1039.     gluCylinder(m_quadrObj,baseRadius,topRadius,height,slices,stacks);
  1040. }
  1041.  
  1042. void CGLEnabledView::CGLQuadric::DrawDisk(GLdouble innerRadius,GLdouble outerRadius,int slices,int loops)
  1043. {
  1044. // issue corresponding GL command
  1045.     gluDisk(m_quadrObj,innerRadius,outerRadius,slices,loops);
  1046. }
  1047.  
  1048. void CGLEnabledView::CGLQuadric::DrawPartialDisk(GLdouble innerRadius,GLdouble outerRadius,int slices,int loops,GLdouble startAngle,GLdouble sweepAngle)
  1049. {
  1050. // issue corresponding GL command
  1051.     gluPartialDisk(m_quadrObj,innerRadius,outerRadius,slices,loops,startAngle,sweepAngle);
  1052. }
Apr 26 '10 #3

P: 26
The error should be in your GLNew class.. I think the code you send is for CGLEnabledView and if you are able to compile CGLEnabledView.cpp without error, then we should have a look at GLNew.h and GLNew .cpp files
Apr 26 '10 #4

P: 3
Actually the code i have posted is from GLNew.cpp , GLEnabledView is of different one i will post it also. GLEnabledView code is :


Expand|Select|Wrap|Line Numbers
  1. // GLEnabledView.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "GLEnabledView.h"
  6.  
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12.  
  13. /////////////////////////////////////////////////////////////////////////////
  14. // The one and only application object
  15.  
  16. CWinApp theApp;
  17.  
  18. using namespace std;
  19.  
  20. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
  21. {
  22.     int nRetCode = 0;
  23.  
  24.     // initialize MFC and print and error on failure
  25.     if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
  26.     {
  27.         // TODO: change error code to suit your needs
  28.         cerr << _T("Fatal Error: MFC initialization failed") << endl;
  29.         nRetCode = 1;
  30.     }
  31.     else
  32.     {
  33.         // TODO: code your application's behavior here.
  34.         CString strHello;
  35.         strHello.LoadString(IDS_HELLO);
  36.         cout << (LPCTSTR)strHello << endl;
  37.     }
  38.  
  39.     return nRetCode;
  40. }
Apr 26 '10 #5

P: 26
you should check the macro expansion at line 164

Expand|Select|Wrap|Line Numbers
  1. IMPLEMENT_DYNCREATE(CGLEnabledView, CView) 
besides it is not a good practice to implement more than one class in one cpp, try splitting into different files one for each class..
Apr 26 '10 #6

Post your reply

Sign in to post your reply or Sign up for a free account.