1 // Copyright (C) 2007-2023 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"
34 #ifndef GL_ARB_shader_objects
35 typedef GLuint GLhandleARB;
42 #define APIENTRYP APIENTRY *
45 #ifndef GL_ARB_shader_objects
46 typedef char GLcharARB;
49 #ifndef GL_VERTEX_PROGRAM_POINT_SIZE_ARB
50 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
53 #ifndef GL_VERTEX_SHADER_ARB
54 #define GL_VERTEX_SHADER_ARB 0x8B31
57 #ifndef GL_FRAGMENT_SHADER_ARB
58 #define GL_FRAGMENT_SHADER_ARB 0x8B30
61 #ifndef GL_ARB_point_sprite
62 #define GL_POINT_SPRITE_ARB 0x8861
63 #define GL_COORD_REPLACE_ARB 0x8862
66 #ifndef GL_ARB_vertex_buffer_object
67 typedef ptrdiff_t GLsizeiptrARB;
69 #define GL_ARRAY_BUFFER_ARB 0x8892
70 #define GL_STATIC_DRAW_ARB 0x88E4
73 #ifndef GL_COMPILE_STATUS
74 #define GL_COMPILE_STATUS 0x8B81
77 #ifndef GL_CURRENT_PROGRAM
78 #define GL_CURRENT_PROGRAM 0x8B8D
81 #ifndef GL_DEBUG_TYPE_ERROR
82 #define GL_DEBUG_TYPE_ERROR 0x824C
85 #ifndef GL_LINK_STATUS
86 #define GL_LINK_STATUS 0x8B82
90 #define GL_TEXTURE0 0x84C0
93 #ifndef GL_VALIDATE_STATUS
94 #define GL_VALIDATE_STATUS 0x8B83
97 #ifndef GL_NUM_EXTENSIONS
98 #define GL_NUM_EXTENSIONS 0x821D
101 namespace GUI_OPENGL {
102 char* readFromFile( std::string fileName );
105 class VTKVIEWER_EXPORT VTKViewer_OpenGLHelper
108 VTKViewer_OpenGLHelper();
109 ~VTKViewer_OpenGLHelper();
113 bool IsInitialized() const { return mIsInitialized; }
116 bool CreateShaderProgram (const std::string& theFilePath,
117 GLhandleARB& theProgram,
118 GLhandleARB& theVertexShader,
119 GLhandleARB& theFragmentShader) const;
121 void DestroyShaderProgram (GLhandleARB theProgram,
122 GLhandleARB theVertexShader,
123 GLhandleARB theFragmentShader) const;
125 void SetUniformMatrix (const GLint theLocation,
126 const vtkMatrix4x4* theMatrix) const;
130 typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);
131 typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
132 typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
133 typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
134 typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
135 typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
136 typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
137 typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
138 typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
139 typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
140 typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
141 typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
142 typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
143 typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
144 typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
147 typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
148 typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
149 typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
150 typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB program);
151 typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB program, const GLcharARB *name );
152 typedef void (APIENTRYP PFNGLGETSHADERIVARBPROC) (GLuint shader, GLenum pname, GLint *params);
153 typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
154 typedef void (APIENTRYP PFNGLGETSHADERINFOLOGARBPROC) (GLuint shader, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
155 typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
156 typedef void (APIENTRYP PFNGLGENVERTEXARRAYSARBPROC) (GLsizei n, GLuint *arrays);
157 typedef void (APIENTRYP PFNGLBINDVERTEXARRAYARBPROC) (GLuint array);
158 typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
159 typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
163 PFNGLSHADERSOURCEARBPROC vglShaderSourceARB;
164 PFNGLCREATESHADEROBJECTARBPROC vglCreateShaderObjectARB;
165 PFNGLCOMPILESHADERARBPROC vglCompileShaderARB;
166 PFNGLCREATEPROGRAMOBJECTARBPROC vglCreateProgramObjectARB;
167 PFNGLATTACHOBJECTARBPROC vglAttachObjectARB;
168 PFNGLLINKPROGRAMARBPROC vglLinkProgramARB;
169 PFNGLUSEPROGRAMOBJECTARBPROC vglUseProgramObjectARB;
171 PFNGLGENBUFFERSARBPROC vglGenBuffersARB;
172 PFNGLBINDBUFFERARBPROC vglBindBufferARB;
173 PFNGLBUFFERDATAARBPROC vglBufferDataARB;
174 PFNGLDELETEBUFFERSARBPROC vglDeleteBuffersARB;
175 PFNGLGETATTRIBLOCATIONARBPROC vglGetAttribLocationARB;
176 PFNGLVERTEXATTRIBPOINTERARBPROC vglVertexAttribPointerARB;
177 PFNGLENABLEVERTEXATTRIBARRAYARBPROC vglEnableVertexAttribArrayARB;
178 PFNGLDISABLEVERTEXATTRIBARRAYARBPROC vglDisableVertexAttribArrayARB;
181 PFNGLDETACHOBJECTARBPROC vglDetachObjectARB;
182 PFNGLDELETEOBJECTARBPROC vglDeleteObjectARB;
183 PFNGLVALIDATEPROGRAMARBPROC vglValidateProgramARB;
184 PFNGLGETSHADERIVARBPROC vglGetShaderivARB;
185 PFNGLGETPROGRAMIVARBPROC vglGetProgramivARB;
186 PFNGLGETSHADERINFOLOGARBPROC vglGetShaderInfoLogARB;
188 PFNGLUNIFORMMATRIX4FVARBPROC vglUniformMatrix4fvARB;
189 PFNGLGENVERTEXARRAYSARBPROC vglGenVertexArraysARB;
190 PFNGLBINDVERTEXARRAYARBPROC vglBindVertexArrayARB;
191 PFNGLUNIFORM1IARBPROC vglUniform1iARB;
192 PFNGLGETUNIFORMLOCATIONARBPROC vglGetUniformLocationARB;
193 PFNGLACTIVETEXTUREARBPROC vglActiveTextureARB;
194 PFNGLGETSTRINGIPROC vglGetStringiARB;