]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Extensions/Visualization/OpenGLMeshMapper.hxx
...
[cpPlugins.git] / lib / cpPlugins / Extensions / Visualization / OpenGLMeshMapper.hxx
index 524f4e8af40cddff8d9430dff0546e65e330f9a7..3ad1bc7a1c2fc21f50e056b41951070571eba44d 100644 (file)
 #define GL_GLEXT_PROTOTYPES
 #include <GL/glext.h>
 
+#ifdef _WIN32
+
+PFNGLGENBUFFERSARBPROC           pglGenBuffers = 0;
+PFNGLBINDBUFFERARBPROC           pglBindBuffer = 0;
+PFNGLBUFFERDATAARBPROC           pglBufferData = 0;
+PFNGLBUFFERSUBDATAARBPROC        pglBufferSubData = 0;
+PFNGLDELETEBUFFERSARBPROC        pglDeleteBuffers = 0;
+PFNGLGETBUFFERPARAMETERIVARBPROC pglGetBufferParameteriv = 0;
+PFNGLMAPBUFFERARBPROC            pglMapBuffer = 0;
+PFNGLUNMAPBUFFERARBPROC          pglUnmapBuffer = 0;
+
+#define glGenBuffers           pglGenBuffers
+#define glBindBuffer           pglBindBuffer
+#define glBufferData           pglBufferData
+#define glBufferSubData        pglBufferSubData
+#define glDeleteBuffers        pglDeleteBuffers
+#define glGetBufferParameteriv pglGetBufferParameteriv
+#define glMapBuffer            pglMapBuffer
+#define glUnmapBuffer          pglUnmapBuffer
+
+#endif // _WIN32
+
 // some definitions for what the polydata has in it
 #define CPPLUGINS_VTK_PDM_NORMALS            0x0001
 #define CPPLUGINS_VTK_PDM_COLORS             0x0002
@@ -130,7 +152,7 @@ RenderPiece( vtkRenderer* aren, vtkActor* act )
   renderNeeded     &= !this->GetGlobalImmediateModeRendering( );
 
   // Something has changed in the pipeline?
-  if( 
+  if(
     this->GetMTime( ) > this->BuildTime ||
     in->GetMTime( ) > this->BuildTime ||
     act->GetProperty( )->GetMTime( ) > this->BuildTime ||
@@ -279,8 +301,8 @@ Draw( vtkRenderer* aren, vtkActor* act )
   if( this->Colors )
   {
     c = this->Colors;
-    if( 
-      ( 
+    if(
+      (
         this->ScalarMode == VTK_SCALAR_MODE_USE_CELL_DATA ||
         this->ScalarMode == VTK_SCALAR_MODE_USE_CELL_FIELD_DATA ||
         this->ScalarMode == VTK_SCALAR_MODE_USE_FIELD_DATA ||
@@ -438,7 +460,7 @@ Draw( vtkRenderer* aren, vtkActor* act )
       if( nPoints == 2 && zResolve )
         glDepthRange( zRes, 1. );
 
-      glDrawElements( 
+      glDrawElements(
         mode, nPoints, this->IndexElementType, ( GLuint* )( 0 ) + accum
         );
       accum += nPoints;
@@ -530,10 +552,46 @@ _ConfigureOpenGL( )
   if( input == NULL )
     return( false );
 
+#ifdef _WIN32
+  // Get pointers to GL functions
+  glGenBuffers = reinterpret_cast< PFNGLGENBUFFERSARBPROC >
+    ( wglGetProcAddress( "glGenBuffers" ) );
+  glBindBuffer = reinterpret_cast< PFNGLBINDBUFFERARBPROC >
+    ( wglGetProcAddress( "glBindBuffer" ) );
+  glBufferData = reinterpret_cast< PFNGLBUFFERDATAARBPROC >
+    ( wglGetProcAddress( "glBufferData" ) );
+  glBufferSubData = reinterpret_cast< PFNGLBUFFERSUBDATAARBPROC >
+    ( wglGetProcAddress( "glBufferSubData" ) );
+  glDeleteBuffers = reinterpret_cast< PFNGLDELETEBUFFERSARBPROC >
+    ( wglGetProcAddress( "glDeleteBuffers" ) );
+  glGetBufferParameteriv =
+    reinterpret_cast< PFNGLGETBUFFERPARAMETERIVARBPROC >
+    ( wglGetProcAddress( "glGetBufferParameteriv" ) );
+  glMapBuffer = reinterpret_cast< PFNGLMAPBUFFERARBPROC >
+    ( wglGetProcAddress( "glMapBuffer" ) );
+  glUnmapBuffer = reinterpret_cast< PFNGLUNMAPBUFFERARBPROC >
+    ( wglGetProcAddress( "glUnmapBuffer" ) );
+
+  // Check once again VBO extension
+  if(
+    glGenBuffers != NULL &&
+    glBindBuffer != NULL &&
+    glBufferData != NULL &&
+    glBufferSubData != NULL &&
+    glMapBuffer != NULL &&
+    glUnmapBuffer != NULL &&
+    glDeleteBuffers != NULL &&
+    glGetBufferParameteriv != NULL
+    )
+    this->VBOSupported = true;
+  else
+    this->VBOSupported = false;
+#else // _WIN32
   // Check if VBO ( Vertex Buffer Object ) is supported
   std::string str = ( const char* )( glGetString( GL_EXTENSIONS ) );
   this->VBOSupported =
     ( str.find( "GL_ARB_vertex_buffer_object" ) != std::string::npos );
+#endif // _WIN32 
 
   if( this->VBOSupported )
   {