#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
+
+#ifdef _WIN32
+
+typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
+typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
+PFNWGLSWAPINTERVALEXTPROC pwglSwapIntervalEXT = 0;
+PFNWGLGETSWAPINTERVALEXTPROC pwglGetSwapIntervalEXT = 0;
+#define wglSwapIntervalEXT pwglSwapIntervalEXT
+#define wglGetSwapIntervalEXT pwglGetSwapIntervalEXT
+
+#endif // _WIN32
+
// some definitions for what the polydata has in it
#define CPPLUGINS_VTK_PDM_NORMALS 0x0001
#define CPPLUGINS_VTK_PDM_COLORS 0x0002
renderNeeded &= !this->GetGlobalImmediateModeRendering( );
// Something has changed in the pipeline?
- if(
+ if(
this->GetMTime( ) > this->BuildTime ||
in->GetMTime( ) > this->BuildTime ||
act->GetProperty( )->GetMTime( ) > this->BuildTime ||
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 ||
if( nPoints == 2 && zResolve )
glDepthRange( zRes, 1. );
- glDrawElements(
+ glDrawElements(
mode, nPoints, this->IndexElementType, ( GLuint* )( 0 ) + accum
);
accum += nPoints;
if( input == NULL )
return( false );
+#ifdef _WIN32
+ // get pointers to GL functions
+ glGenBuffers =
+ ( PFNGLGENBUFFERSARBPROC )wglGetProcAddress( "glGenBuffers" );
+ glBindBuffer =
+ ( PFNGLBINDBUFFERARBPROC )wglGetProcAddress( "glBindBuffer" );
+ glBufferData =
+ ( PFNGLBUFFERDATAARBPROC )wglGetProcAddress( "glBufferData" );
+ glBufferSubData =
+ ( PFNGLBUFFERSUBDATAARBPROC )wglGetProcAddress( "glBufferSubData" );
+ glDeleteBuffers =
+ ( PFNGLDELETEBUFFERSARBPROC )wglGetProcAddress( "glDeleteBuffers" );
+ glGetBufferParameteriv =
+ ( PFNGLGETBUFFERPARAMETERIVARBPROC )wglGetProcAddress(
+ "glGetBufferParameteriv"
+ );
+ glMapBuffer =
+ ( PFNGLMAPBUFFERARBPROC )wglGetProcAddress( "glMapBuffer" );
+ glUnmapBuffer =
+ ( 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;
+
+ // check EXT_swap_control is supported
+ /* TODO: really needed?
+ wglSwapIntervalEXT =
+ ( PFNWGLSWAPINTERVALEXTPROC )wglGetProcAddress( "wglSwapIntervalEXT" );
+ wglGetSwapIntervalEXT =
+ ( PFNWGLGETSWAPINTERVALEXTPROC )wglGetProcAddress(
+ "wglGetSwapIntervalEXT"
+ );
+ if( wglSwapIntervalEXT != NULL && wglGetSwapIntervalEXT != NULL )
+ wglSwapIntervalEXT( 0 );
+ */
+#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 )
{