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
70 namespace GUI_OPENGL {
71 char* readFromFile( std::string fileName );
74 class VTKVIEWER_EXPORT VTKViewer_OpenGLHelper
77 VTKViewer_OpenGLHelper();
78 ~VTKViewer_OpenGLHelper();
82 bool IsInitialized() const { return mIsInitialized; }
85 bool CreateShaderProgram (const std::string& theFilePath,
86 GLhandleARB& theProgram,
87 GLhandleARB& theVertexShader,
88 GLhandleARB& theFragmentShader) const;
90 void DestroyShaderProgram (GLhandleARB theProgram,
91 GLhandleARB theVertexShader,
92 GLhandleARB theFragmentShader) const;
94 void SetUniformMatrix (const GLint theLocation,
95 const vtkMatrix4x4* theMatrix) const;
99 typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);
100 typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
101 typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
102 typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
103 typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
104 typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
105 typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
106 typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
107 typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
108 typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
109 typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
110 typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
111 typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
112 typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
113 typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
116 typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
117 typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
118 typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB program);
119 typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB program, const GLcharARB *name );
120 typedef void (APIENTRYP PFNGLGETSHADERIVARBPROC) (GLuint shader, GLenum pname, GLint *params);
121 typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLuint program, GLenum pname, GLint *params);
122 typedef void (APIENTRYP PFNGLGETSHADERINFOLOGARBPROC) (GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
123 typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
124 typedef void (APIENTRYP PFNGLGENVERTEXARRAYSARBPROC) (GLsizei n, GLuint *arrays);
125 typedef void (APIENTRYP PFNGLBINDVERTEXARRAYARBPROC) (GLuint array);
126 typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
130 PFNGLSHADERSOURCEARBPROC vglShaderSourceARB;
131 PFNGLCREATESHADEROBJECTARBPROC vglCreateShaderObjectARB;
132 PFNGLCOMPILESHADERARBPROC vglCompileShaderARB;
133 PFNGLCREATEPROGRAMOBJECTARBPROC vglCreateProgramObjectARB;
134 PFNGLATTACHOBJECTARBPROC vglAttachObjectARB;
135 PFNGLLINKPROGRAMARBPROC vglLinkProgramARB;
136 PFNGLUSEPROGRAMOBJECTARBPROC vglUseProgramObjectARB;
138 PFNGLGENBUFFERSARBPROC vglGenBuffersARB;
139 PFNGLBINDBUFFERARBPROC vglBindBufferARB;
140 PFNGLBUFFERDATAARBPROC vglBufferDataARB;
141 PFNGLDELETEBUFFERSARBPROC vglDeleteBuffersARB;
142 PFNGLGETATTRIBLOCATIONARBPROC vglGetAttribLocationARB;
143 PFNGLVERTEXATTRIBPOINTERARBPROC vglVertexAttribPointerARB;
144 PFNGLENABLEVERTEXATTRIBARRAYARBPROC vglEnableVertexAttribArrayARB;
145 PFNGLDISABLEVERTEXATTRIBARRAYARBPROC vglDisableVertexAttribArrayARB;
148 PFNGLDETACHOBJECTARBPROC vglDetachObjectARB;
149 PFNGLDELETEOBJECTARBPROC vglDeleteObjectARB;
150 PFNGLVALIDATEPROGRAMARBPROC vglValidateProgramARB;
151 PFNGLGETSHADERIVARBPROC vglGetShaderivARB;
152 PFNGLGETPROGRAMIVARBPROC vglGetProgramivARB;
153 PFNGLGETSHADERINFOLOGARBPROC vglGetShaderInfoLogARB;
155 PFNGLUNIFORMMATRIX4FVARBPROC vglUniformMatrix4fvARB;
156 PFNGLGENVERTEXARRAYSARBPROC vglGenVertexArraysARB;
157 PFNGLBINDVERTEXARRAYARBPROC vglBindVertexArrayARB;
158 PFNGLUNIFORM1IARBPROC vglUniform1iARB;
159 PFNGLGETUNIFORMLOCATIONARBPROC vglGetUniformLocationARB;