Salome HOME
Updated copyright comment
[modules/gui.git] / src / VTKViewer / VTKViewer_OpenGLHelper.h
1 // Copyright (C) 2007-2024  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
105 class VTKVIEWER_EXPORT VTKViewer_OpenGLHelper
106 {
107 public:
108   VTKViewer_OpenGLHelper();
109   ~VTKViewer_OpenGLHelper();
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:
198   bool mIsInitialized;
199 };
200
201 #endif