1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #ifndef VTKVIEWER_OPENGLHELPER_H
21 #define VTKVIEWER_OPENGLHELPER_H
23 #include <vtkObject.h>
24 #include <vtkMatrix4x4.h>
25 #include "VTKViewer.h"
30 #ifndef GL_ARB_shader_objects
31 typedef GLuint GLhandleARB;
38 #define APIENTRYP APIENTRY *
41 #ifndef GL_ARB_shader_objects
42 typedef char GLcharARB;
45 #ifndef GL_VERTEX_PROGRAM_POINT_SIZE_ARB
46 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
49 #ifndef GL_VERTEX_SHADER_ARB
50 #define GL_VERTEX_SHADER_ARB 0x8B31
53 #ifndef GL_FRAGMENT_SHADER_ARB
54 #define GL_FRAGMENT_SHADER_ARB 0x8B30
57 #ifndef GL_ARB_point_sprite
58 #define GL_POINT_SPRITE_ARB 0x8861
59 #define GL_COORD_REPLACE_ARB 0x8862
62 #ifndef GL_ARB_vertex_buffer_object
63 typedef ptrdiff_t GLsizeiptrARB;
65 #define GL_ARRAY_BUFFER_ARB 0x8892
66 #define GL_STATIC_DRAW_ARB 0x88E4
69 class VTKVIEWER_EXPORT VTKViewer_OpenGLHelper
72 VTKViewer_OpenGLHelper();
73 ~VTKViewer_OpenGLHelper();
77 bool IsInitialized() const { return mIsInitialized; }
80 bool CreateShaderProgram (const std::string& theFilePath,
81 GLhandleARB& theProgram,
82 GLhandleARB& theVertexShader,
83 GLhandleARB& theFragmentShader) const;
85 void DestroyShaderProgram (GLhandleARB theProgram,
86 GLhandleARB theVertexShader,
87 GLhandleARB theFragmentShader) const;
89 void SetUniformMatrix (const GLint theLocation,
90 const vtkMatrix4x4* theMatrix) const;
93 typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);
94 typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
95 typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
96 typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
97 typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
98 typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
99 typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
100 typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
101 typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
102 typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
103 typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
104 typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
105 typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
106 typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
107 typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
110 typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
111 typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
112 typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB program);
113 typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB program, const GLcharARB *name );
114 typedef void (APIENTRYP PFNGLGETSHADERIVARBPROC) (GLuint shader, GLenum pname, GLint *params);
115 typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLuint program, GLenum pname, GLint *params);
116 typedef void (APIENTRYP PFNGLGETSHADERINFOLOGARBPROC) (GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
117 typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
118 typedef void (APIENTRYP PFNGLGENVERTEXARRAYSARBPROC) (GLsizei n, GLuint *arrays);
119 typedef void (APIENTRYP PFNGLBINDVERTEXARRAYARBPROC) (GLuint array);
120 typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
124 PFNGLSHADERSOURCEARBPROC vglShaderSourceARB;
125 PFNGLCREATESHADEROBJECTARBPROC vglCreateShaderObjectARB;
126 PFNGLCOMPILESHADERARBPROC vglCompileShaderARB;
127 PFNGLCREATEPROGRAMOBJECTARBPROC vglCreateProgramObjectARB;
128 PFNGLATTACHOBJECTARBPROC vglAttachObjectARB;
129 PFNGLLINKPROGRAMARBPROC vglLinkProgramARB;
130 PFNGLUSEPROGRAMOBJECTARBPROC vglUseProgramObjectARB;
132 PFNGLGENBUFFERSARBPROC vglGenBuffersARB;
133 PFNGLBINDBUFFERARBPROC vglBindBufferARB;
134 PFNGLBUFFERDATAARBPROC vglBufferDataARB;
135 PFNGLDELETEBUFFERSARBPROC vglDeleteBuffersARB;
136 PFNGLGETATTRIBLOCATIONARBPROC vglGetAttribLocationARB;
137 PFNGLVERTEXATTRIBPOINTERARBPROC vglVertexAttribPointerARB;
138 PFNGLENABLEVERTEXATTRIBARRAYARBPROC vglEnableVertexAttribArrayARB;
139 PFNGLDISABLEVERTEXATTRIBARRAYARBPROC vglDisableVertexAttribArrayARB;
142 PFNGLDETACHOBJECTARBPROC vglDetachObjectARB;
143 PFNGLDELETEOBJECTARBPROC vglDeleteObjectARB;
144 PFNGLVALIDATEPROGRAMARBPROC vglValidateProgramARB;
145 PFNGLGETSHADERIVARBPROC vglGetShaderivARB;
146 PFNGLGETPROGRAMIVARBPROC vglGetProgramivARB;
147 PFNGLGETSHADERINFOLOGARBPROC vglGetShaderInfoLogARB;
149 PFNGLUNIFORMMATRIX4FVARBPROC vglUniformMatrix4fvARB;
150 PFNGLGENVERTEXARRAYSARBPROC vglGenVertexArraysARB;
151 PFNGLBINDVERTEXARRAYARBPROC vglBindVertexArrayARB;
152 PFNGLUNIFORM1IARBPROC vglUniform1iARB;
153 PFNGLGETUNIFORMLOCATIONARBPROC vglGetUniformLocationARB;