1 // File: OpenGl_Context.cxx
2 // Created: 26 January 2012
3 // Author: Kirill GAVRILOV
4 // Copyright: OPEN CASCADE 2012
6 #include <OpenGl_Context.hxx>
8 IMPLEMENT_STANDARD_HANDLE (OpenGl_Context, Standard_Transient)
9 IMPLEMENT_STANDARD_RTTIEXT(OpenGl_Context, Standard_Transient)
11 #if (!defined(_WIN32) && !defined(__WIN32__))
15 // =======================================================================
16 // function : OpenGl_Context
18 // =======================================================================
19 OpenGl_Context::OpenGl_Context()
26 // =======================================================================
27 // function : ~OpenGl_Context
29 // =======================================================================
30 OpenGl_Context::~OpenGl_Context()
35 // =======================================================================
36 // function : CheckExtension
38 // =======================================================================
39 Standard_Boolean OpenGl_Context::CheckExtension (const char* theExtName,
40 const char* theExtString)
42 if (theExtName == NULL
43 || theExtString == NULL) {
44 std::cerr << "CheckExtension called with NULL string! No GL context?\n";
45 return Standard_False;
48 // Search for theExtName in the extensions string.
49 // Use of strstr() is not sufficient because extension names can be prefixes of other extension names.
50 char* aPtrIter = (char* )theExtString;
51 int anExtNameLen = strlen(theExtName);
52 const char* aPtrEnd = aPtrIter + strlen(theExtString);
54 while (aPtrIter < aPtrEnd)
56 int n = strcspn (aPtrIter, " ");
57 if ((n == anExtNameLen) && (strncmp (theExtName, aPtrIter, n) == 0))
62 return Standard_False;
65 // =======================================================================
68 // =======================================================================
69 void OpenGl_Context::Init()
71 const char* anExtString = (const char* )glGetString (GL_EXTENSIONS);
72 if (CheckExtension ("GL_ARB_vertex_buffer_object", anExtString))
74 arbVBO = new OpenGl_ArbVBO();
75 memset(arbVBO, 0, sizeof(OpenGl_ArbVBO)); // nullify whole structure for safety
76 if (!FindProc ("glGenBuffersARB", arbVBO->glGenBuffersARB)
77 || !FindProc ("glBindBufferARB", arbVBO->glBindBufferARB)
78 || !FindProc ("glBufferDataARB", arbVBO->glBufferDataARB)
79 || !FindProc ("glDeleteBuffersARB", arbVBO->glDeleteBuffersARB))
86 if (CheckExtension ("GL_EXT_framebuffer_object", anExtString))
88 extFBO = new OpenGl_ExtFBO();
89 memset(extFBO, 0, sizeof(OpenGl_ExtFBO)); // nullify whole structure for safety
90 if (!FindProc ("glGenFramebuffersEXT", extFBO->glGenFramebuffersEXT)
91 || !FindProc ("glDeleteFramebuffersEXT", extFBO->glDeleteFramebuffersEXT)
92 || !FindProc ("glBindFramebufferEXT", extFBO->glBindFramebufferEXT)
93 || !FindProc ("glFramebufferTexture2DEXT", extFBO->glFramebufferTexture2DEXT)
94 || !FindProc ("glCheckFramebufferStatusEXT", extFBO->glCheckFramebufferStatusEXT)
95 || !FindProc ("glGenRenderbuffersEXT", extFBO->glGenRenderbuffersEXT)
96 || !FindProc ("glDeleteRenderbuffersEXT", extFBO->glDeleteRenderbuffersEXT)
97 || !FindProc ("glBindRenderbufferEXT", extFBO->glBindRenderbufferEXT)
98 || !FindProc ("glRenderbufferStorageEXT", extFBO->glRenderbufferStorageEXT)
99 || !FindProc ("glFramebufferRenderbufferEXT", extFBO->glFramebufferRenderbufferEXT))