Version: 9.15.0
VTKViewer_OpenGLHelper.h
Go to the documentation of this file.
1 // Copyright (C) 2007-2025 CEA, EDF, OPEN CASCADE
2 //
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.
7 //
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.
12 //
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
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19 
20 #ifndef VTKVIEWER_OPENGLHELPER_H
21 #define VTKVIEWER_OPENGLHELPER_H
22 
23 #include <vtkObject.h>
24 #include <vtkMatrix4x4.h>
25 #include "VTKViewer.h"
26 
27 #ifdef WIN32
28 #include <windows.h>
29 #endif
30 
31 #include <GL/gl.h>
32 
33 
34 #ifndef GL_ARB_shader_objects
35 typedef GLuint GLhandleARB;
36 #endif
37 
38 #ifndef APIENTRY
39 #define APIENTRY
40 #endif
41 #ifndef APIENTRYP
42 #define APIENTRYP APIENTRY *
43 #endif
44 
45 #ifndef GL_ARB_shader_objects
46 typedef char GLcharARB;
47 #endif
48 
49 #ifndef GL_VERTEX_PROGRAM_POINT_SIZE_ARB
50 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
51 #endif
52 
53 #ifndef GL_VERTEX_SHADER_ARB
54 #define GL_VERTEX_SHADER_ARB 0x8B31
55 #endif
56 
57 #ifndef GL_FRAGMENT_SHADER_ARB
58 #define GL_FRAGMENT_SHADER_ARB 0x8B30
59 #endif
60 
61 #ifndef GL_ARB_point_sprite
62 #define GL_POINT_SPRITE_ARB 0x8861
63 #define GL_COORD_REPLACE_ARB 0x8862
64 #endif
65 
66 #ifndef GL_ARB_vertex_buffer_object
67 typedef ptrdiff_t GLsizeiptrARB;
68 
69 #define GL_ARRAY_BUFFER_ARB 0x8892
70 #define GL_STATIC_DRAW_ARB 0x88E4
71 #endif
72 
73 #ifndef GL_COMPILE_STATUS
74 #define GL_COMPILE_STATUS 0x8B81
75 #endif
76 
77 #ifndef GL_CURRENT_PROGRAM
78 #define GL_CURRENT_PROGRAM 0x8B8D
79 #endif
80 
81 #ifndef GL_DEBUG_TYPE_ERROR
82 #define GL_DEBUG_TYPE_ERROR 0x824C
83 #endif
84 
85 #ifndef GL_LINK_STATUS
86 #define GL_LINK_STATUS 0x8B82
87 #endif
88 
89 #ifndef GL_TEXTURE0
90 #define GL_TEXTURE0 0x84C0
91 #endif
92 
93 #ifndef GL_VALIDATE_STATUS
94 #define GL_VALIDATE_STATUS 0x8B83
95 #endif
96 
97 #ifndef GL_NUM_EXTENSIONS
98 #define GL_NUM_EXTENSIONS 0x821D
99 #endif
100 
101 namespace GUI_OPENGL {
102 char* readFromFile( std::string fileName );
103 }
104 
106 {
107 public:
110 
111  void Init();
112 
113  bool IsInitialized() const { return mIsInitialized; }
114 
115 public:
116  bool CreateShaderProgram (const std::string& theFilePath,
117  GLhandleARB& theProgram,
118  GLhandleARB& theVertexShader,
119  GLhandleARB& theFragmentShader) const;
120 
121  void DestroyShaderProgram (GLhandleARB theProgram,
122  GLhandleARB theVertexShader,
123  GLhandleARB theFragmentShader) const;
124 #ifdef VTK_OPENGL2
125  void SetUniformMatrix (const GLint theLocation,
126  const vtkMatrix4x4* theMatrix) const;
127 #endif
128 
129 protected:
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);
145 
146 #ifdef VTK_OPENGL2
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);
160 #endif
161 
162 public:
163  PFNGLSHADERSOURCEARBPROC vglShaderSourceARB;
164  PFNGLCREATESHADEROBJECTARBPROC vglCreateShaderObjectARB;
165  PFNGLCOMPILESHADERARBPROC vglCompileShaderARB;
166  PFNGLCREATEPROGRAMOBJECTARBPROC vglCreateProgramObjectARB;
167  PFNGLATTACHOBJECTARBPROC vglAttachObjectARB;
168  PFNGLLINKPROGRAMARBPROC vglLinkProgramARB;
169  PFNGLUSEPROGRAMOBJECTARBPROC vglUseProgramObjectARB;
170 
171  PFNGLGENBUFFERSARBPROC vglGenBuffersARB;
172  PFNGLBINDBUFFERARBPROC vglBindBufferARB;
173  PFNGLBUFFERDATAARBPROC vglBufferDataARB;
174  PFNGLDELETEBUFFERSARBPROC vglDeleteBuffersARB;
175  PFNGLGETATTRIBLOCATIONARBPROC vglGetAttribLocationARB;
176  PFNGLVERTEXATTRIBPOINTERARBPROC vglVertexAttribPointerARB;
177  PFNGLENABLEVERTEXATTRIBARRAYARBPROC vglEnableVertexAttribArrayARB;
178  PFNGLDISABLEVERTEXATTRIBARRAYARBPROC vglDisableVertexAttribArrayARB;
179 
180 #ifdef VTK_OPENGL2
181  PFNGLDETACHOBJECTARBPROC vglDetachObjectARB;
182  PFNGLDELETEOBJECTARBPROC vglDeleteObjectARB;
183  PFNGLVALIDATEPROGRAMARBPROC vglValidateProgramARB;
184  PFNGLGETSHADERIVARBPROC vglGetShaderivARB;
185  PFNGLGETPROGRAMIVARBPROC vglGetProgramivARB;
186  PFNGLGETSHADERINFOLOGARBPROC vglGetShaderInfoLogARB;
187 
188  PFNGLUNIFORMMATRIX4FVARBPROC vglUniformMatrix4fvARB;
189  PFNGLGENVERTEXARRAYSARBPROC vglGenVertexArraysARB;
190  PFNGLBINDVERTEXARRAYARBPROC vglBindVertexArrayARB;
191  PFNGLUNIFORM1IARBPROC vglUniform1iARB;
192  PFNGLGETUNIFORMLOCATIONARBPROC vglGetUniformLocationARB;
193  PFNGLACTIVETEXTUREARBPROC vglActiveTextureARB;
194  PFNGLGETSTRINGIPROC vglGetStringiARB;
195 #endif
196 
197 protected:
199 };
200 
201 #endif
#define VTKVIEWER_EXPORT
Definition: VTKViewer.h:33
ptrdiff_t GLsizeiptrARB
Definition: VTKViewer_OpenGLHelper.h:67
GLuint GLhandleARB
Definition: VTKViewer_OpenGLHelper.h:35
char GLcharARB
Definition: VTKViewer_OpenGLHelper.h:46
#define APIENTRYP
Definition: VTKViewer_OpenGLHelper.h:42
Definition: VTKViewer_OpenGLHelper.h:106
PFNGLENABLEVERTEXATTRIBARRAYARBPROC vglEnableVertexAttribArrayARB
Definition: VTKViewer_OpenGLHelper.h:177
PFNGLDELETEBUFFERSARBPROC vglDeleteBuffersARB
Definition: VTKViewer_OpenGLHelper.h:174
PFNGLCOMPILESHADERARBPROC vglCompileShaderARB
Definition: VTKViewer_OpenGLHelper.h:165
bool mIsInitialized
Definition: VTKViewer_OpenGLHelper.h:198
PFNGLDISABLEVERTEXATTRIBARRAYARBPROC vglDisableVertexAttribArrayARB
Definition: VTKViewer_OpenGLHelper.h:178
PFNGLCREATEPROGRAMOBJECTARBPROC vglCreateProgramObjectARB
Definition: VTKViewer_OpenGLHelper.h:166
PFNGLCREATESHADEROBJECTARBPROC vglCreateShaderObjectARB
Definition: VTKViewer_OpenGLHelper.h:164
PFNGLBUFFERDATAARBPROC vglBufferDataARB
Definition: VTKViewer_OpenGLHelper.h:173
PFNGLBINDBUFFERARBPROC vglBindBufferARB
Definition: VTKViewer_OpenGLHelper.h:172
PFNGLGETATTRIBLOCATIONARBPROC vglGetAttribLocationARB
Definition: VTKViewer_OpenGLHelper.h:175
PFNGLUSEPROGRAMOBJECTARBPROC vglUseProgramObjectARB
Definition: VTKViewer_OpenGLHelper.h:169
PFNGLLINKPROGRAMARBPROC vglLinkProgramARB
Definition: VTKViewer_OpenGLHelper.h:168
PFNGLGENBUFFERSARBPROC vglGenBuffersARB
Definition: VTKViewer_OpenGLHelper.h:171
PFNGLVERTEXATTRIBPOINTERARBPROC vglVertexAttribPointerARB
Definition: VTKViewer_OpenGLHelper.h:176
PFNGLATTACHOBJECTARBPROC vglAttachObjectARB
Definition: VTKViewer_OpenGLHelper.h:167
bool IsInitialized() const
Definition: VTKViewer_OpenGLHelper.h:113
PFNGLSHADERSOURCEARBPROC vglShaderSourceARB
Definition: VTKViewer_OpenGLHelper.h:163
Definition: VTKViewer_OpenGLHelper.cxx:220
char * readFromFile(std::string fileName)
Definition: VTKViewer_OpenGLHelper.cxx:221