33 #ifndef G4OpenGLVboDrawer_HH
34 #define G4OpenGLVboDrawer_HH
38 #ifdef G4OPENGL_VERSION_2
40 #define G4DEBUG_VIS_OGL 1
43 #define GL2PS_TEXT_B 4
44 #define GL2PS_TEXT_BL 5
45 #define GL2PS_TEXT_BR 6
52 #define glEdgeFlag(a) fVboDrawer->empty()
53 #define glRenderMode(a) fVboDrawer->returnNULL()
54 #define glClipPlane(a,b) fVboDrawer->empty()
55 #define glGetIntegerv(a,b) fVboDrawer->empty()
56 #define glGetFloatv(a,b) fVboDrawer->empty()
57 #define glGetDoublev(a,b) fVboDrawer->empty()
58 #define glPassThrough fVboDrawer->empty()
59 #define glGetBooleanv fVboDrawer->empty()
60 #define glLoadName(a) fVboDrawer->empty()
61 #define glPushMatrix() fVboDrawer->empty()
62 #define glLoadIdentity() fVboDrawer->empty()
63 #define glPopMatrix() fVboDrawer->empty()
64 #define glCallList(a) fVboDrawer->empty()
65 #define glGenLists(a) fVboDrawer->returnNULL()
66 #define glVertex3d fVboDrawer->empty()
67 #define glBegin fVboDrawer->empty()
68 #define glEnd fVboDrawer->empty()
69 #define glNewList(a,b) fVboDrawer->empty()
70 #define glEndList() fVboDrawer->empty()
71 #define glPolygonMode(a,b) fVboDrawer->empty()
72 #define glDrawBuffer(a) fVboDrawer->empty()
73 #define glDeleteLists(a,b) fVboDrawer->empty()
74 #define glStencilFunc(a,b,c) fVboDrawer->empty()
75 #define glStencilOp(a,b,c) fVboDrawer->empty()
76 #define glColorMaterial(a,b) fVboDrawer->empty()
77 #define glLightfv(a,b,c) fVboDrawer->empty()
78 #define glScaled(a,b,c) fVboDrawer->empty()
79 #define gluLookAt fVboDrawer->empty()
80 #define gluPickMatrix fVboDrawer->empty()
81 #define glSelectBuffer(a,b) fVboDrawer->empty()
82 #define glInitNames() fVboDrawer->empty()
83 #define glPushNames(a) fVboDrawer->empty()
84 #define glPushName(a) fVboDrawer->empty()
85 #define glPixelStorei(a,b) fVboDrawer->empty()
86 #define glRasterPos3d(a,b,c) fVboDrawer->empty()
87 #define Geant4_gl2psTextOpt(a,b,c,d,e) fVboDrawer->empty()
88 #define glMaterialfv(a,b,c) fVboDrawer->empty()
89 #define glCullFace(a) fVboDrawer->empty()
90 #define glReadBuffer(a) fVboDrawer->empty()
91 #define glReadPixels(a,b,c,d,e,f,g) fVboDrawer->empty()
92 #define glTranslatef(a,b,c) fVboDrawer->empty() // TO BE FIXED
98 #ifdef G4VIS_BUILD_OPENGLWT_DRIVER
100 class G4OpenGLImmediateWtViewer;
105 #define glGetError() Wt::WGLWidget::NONE
107 #define glOrtho fVboDrawer->vboGlOrtho
108 #define glFrustum fVboDrawer->vboGlFrustum
109 #define glViewport fVboDrawer->vboGlViewport
110 #define glEnable fVboDrawer->vboGlEnable
111 #define glDisable fVboDrawer->vboGlDisable
112 #define glBlendFunc fVboDrawer->vboGlBlendFunc
113 #define glClear fVboDrawer->vboGlClear
114 #define glClearColor fVboDrawer->vboGlClearColor
115 #define glClearDepth fVboDrawer->vboGlClearDepth
116 #define glDepthFunc fVboDrawer->vboGlDepthFunc
117 #define glDepthMask fVboDrawer->vboGlDepthMask
118 #define glFlush fVboDrawer->vboGlFlush
119 #define glColorMask fVboDrawer->vboGlColorMask
120 #define glLineWidth fVboDrawer->vboGlLineWidth
121 #define glUniformMatrix4 fVboDrawer->vboGlUniformMatrix4
122 #define glDrawArrays fVboDrawer->vboGlDrawArrays
123 #define glCreateBuffer fVboDrawer->vboGlCreateBuffer
124 #define glVertexPointer fVboDrawer->vboGlVertexPointer
125 #define glBindBuffer fVboDrawer->vboGlBindBuffer
126 #define glDeleteBuffer fVboDrawer->vboGlDeleteBuffer
127 #define glBufferDatafv fVboDrawer->vboGlBufferDatafv
128 #define glBufferDataiv fVboDrawer->vboGlBufferDataiv
129 #define glGetAttribLocation fVboDrawer->vboGlGetAttribLocation
130 #define glEnableVertexAttribArray fVboDrawer->vboGlEnableVertexAttribArray
131 #define glDisableVertexAttribArray fVboDrawer->vboGlDisableVertexAttribArray
132 #define glShaderSource fVboDrawer->vboGlShaderSource
133 #define glCompileShader fVboDrawer->vboGlCompileShader
134 #define glCreateShader fVboDrawer->vboGlCreateShader
135 #define glCreateProgram fVboDrawer->vboGlCreateProgram
136 #define glAttachShader fVboDrawer->vboGlAttachShader
137 #define glLinkProgram fVboDrawer->vboGlLinkProgram
138 #define glUseProgram fVboDrawer->vboGlUseProgram
139 #define glDrawElements fVboDrawer->vboGlDrawElements
140 #define glVertexAttribPointer fVboDrawer->vboGlVertexAttribPointer
141 #define glGetUniformLocation fVboDrawer->vboGlGetUniformLocation
142 #define glPointSize fVboDrawer->vboGlPointSize
143 #define glColor3d fVboDrawer->vboGlColor3d
144 #define glColor4d fVboDrawer->vboGlColor4d
145 #define glColor4fv fVboDrawer->vboGlColor4fv
146 #define glMultMatrixd fVboDrawer->vboGlMultMatrixd
147 #define glMultMatrixf fVboDrawer->vboGlMultMatrixf
148 #define glGetUniformLocation fVboDrawer->vboGlGetUniformLocation
149 #define glGetAttribLocation fVboDrawer->vboGlGetAttribLocation
150 #define glMatrixMode fVboDrawer->vboGlMatrixMode
154 #define glUniform1f fVboViewer->uniform1f
155 #define glUniform4fv fVboViewer->uniform4fv
156 #define glUniformMatrix4dv fVboDrawer->vboGlUniformMatrix4;
157 #define glUniformMatrix4fv fVboDrawer->vboGlUniformMatrix4fv;
161 #define GL_VIEWPORT Wt::WGLWidget::VIEWPORT
162 #define GL_RGBA Wt::WGLWidget::RGBA
163 #define GL_ONE_MINUS_SRC_ALPHA Wt::WGLWidget::ONE_MINUS_SRC_ALPHA
164 #define GL_BLEND Wt::WGLWidget::BLEND
165 #define GL_SRC_ALPHA Wt::WGLWidget::SRC_ALPHA
166 #define GL_LEQUAL Wt::WGLWidget::LEQUAL
167 #define GL_FALSE false
168 #define GL_LESS Wt::WGLWidget::LESS
169 #define GL_SELECT Wt::WGLWidget::SELECT
171 #define GL_RGB Wt::WGLWidget::RGB
172 #define GL_CURRENT_RASTER_POSITION_VALID Wt::WGLWidget::CURRENT_RASTER_POSITION_VALID
173 #define GL_ONE Wt::WGLWidget::ONE
174 #define GL_ZERO Wt::WGLWidget::ZERO
175 #define GL_COLOR_INDEX Wt::WGLWidget::COLOR_INDEX
176 #define GL_LINE_TOKEN Wt::WGLWidget::LINE_TOKEN
177 #define GL_LINE_RESET_TOKEN Wt::WGLWidget::LINE_RESET_TOKEN
178 #define GL_POLYGON_TOKEN Wt::WGLWidget::POLYGON_TOKEN
179 #define GL_FEEDBACK Wt::WGLWidget::FEEDBACK
180 #define GL_COLOR_CLEAR_VALUE Wt::WGLWidget::COLOR_CLEAR_VALUE
181 #define GL_BITMAP_TOKEN Wt::WGLWidget::BITMAP_TOKEN
182 #define GL_DRAW_PIXEL_TOKEN Wt::WGLWidget::DRAW_PIXEL_TOKEN
183 #define GL_COPY_PIXEL_TOKEN Wt::WGLWidget::COPY_PIXEL_TOKEN
184 #define GL_PASS_THROUGH_TOKEN Wt::WGLWidget::PASS_THROUGH_TOKEN
185 #define GL_3D_COLOR Wt::WGLWidget::3D_COLOR
186 #define GL_DEPTH_TEST Wt::WGLWidget::DEPTH_TEST
187 #define GL_FRONT Wt::WGLWidget::FRONT
188 #define GL_BACK Wt::WGLWidget::BACK
189 #define GL_FRONT_AND_BACK Wt::WGLWidget::FRONT_AND_BACK
190 #define GL_OUT_OF_MEMORY Wt::WGLWidget::OUT_OF_MEMORY
191 #define GL_LINE_STRIP Wt::WGLWidget::LINE_STRIP
192 #define GL_QUADS Wt::WGLWidget::QUADS
193 #define GL_LINE_LOOP Wt::WGLWidget::LINE_LOOP
194 #define GL_LINES Wt::WGLWidget::LINES
195 #define GL_POINTS Wt::WGLWidget::POINTS
196 #define GL_TRIANGLES Wt::WGLWidget::TRIANGLES
197 #define GL_TRIANGLE_STRIP Wt::WGLWidget::TRIANGLE_STRIP
198 #define GL_TRIANGLE_FAN Wt::WGLWidget::TRIANGLE_FAN
199 #define GL_FLOAT Wt::WGLWidget::FLOAT
200 #define GL_STENCIL_TEST Wt::WGLWidget::STENCIL_TEST
201 #define GL_ALWAYS Wt::WGLWidget::ALWAYS
202 #define GL_INVERT Wt::WGLWidget::INVERT
203 #define GL_COMPILE_AND_EXECUTE Wt::WGLWidget::COMPILE_AND_EXECUTE
204 #define GL_COMPILE Wt::WGLWidget::COMPILE
205 #define GL_COLOR_BUFFER_BIT Wt::WGLWidget::COLOR_BUFFER_BIT
206 #define GL_DEPTH_BUFFER_BIT Wt::WGLWidget::DEPTH_BUFFER_BIT
207 #define GL_STENCIL_BUFFER_BIT Wt::WGLWidget::STENCIL_BUFFER_BIT
208 #define GL_UNSIGNED_BYTE Wt::WGLWidget::UNSIGNED_BYTE
209 #define GL_ARRAY_BUFFER Wt::WGLWidget::ARRAY_BUFFER
210 #define GL_ELEMENT_ARRAY_BUFFER Wt::WGLWidget::ELEMENT_ARRAY_BUFFER
211 #define GL_RENDER Wt::WGLWidget::RENDER
212 #define GL_LUMINANCE Wt::WGLWidget::LUMINANCE
213 #define GL_STATIC_DRAW Wt::WGLWidget::STATIC_DRAW
214 #define GL_FRAGMENT_SHADER Wt::WGLWidget::FRAGMENT_SHADER
215 #define GL_VERTEX_SHADER Wt::WGLWidget::VERTEX_SHADER
216 #define GL_UNSIGNED_INT Wt::WGLWidget::UNSIGNED_INT
217 #define GL_UNSIGNED_SHORT Wt::WGLWidget::UNSIGNED_SHORT
218 #define GL_CULL_FACE Wt::WGLWidget::CULL_FACE
219 #define GL_MAX_VIEWPORT_DIMS Wt::WGLWidget::MAX_VIEWPORT_DIMS
220 #define GL_PROJECTION Wt::WGLWidget::FRAGMENT_SHADER // Not the good value, but should be ok, work together with GL_MODELVIEW
221 #define GL_MODELVIEW Wt::WGLWidget::VERTEX_SHADER // Not the good value, but should be ok, work together with GL_PROJECTION
226 #define GL_PROJECTION_MATRIX 0
227 #define GL_UNPACK_SWAP_BYTES 0
228 #define GL_UNPACK_LSB_FIRST 0
229 #define GL_UNPACK_SKIP_ROWS 0
230 #define GL_UNPACK_LOW_LENGHT 0
231 #define GL_UNPACK_SKIP_PIXELS 0
232 #define GL_UNPACK_ALIGNMENT 0
233 #define GL_UNPACK_ROW_LENGTH 0
234 #define GL_CLIP_PLANE0 Wt::WGLWidget::NONE
235 #define GL_CLIP_PLANE1 Wt::WGLWidget::NONE
236 #define GL_CLIP_PLANE2 Wt::WGLWidget::NONE
237 #define GL_CLIP_PLANE3 Wt::WGLWidget::NONE
238 #define GL_CLIP_PLANE4 Wt::WGLWidget::NONE
239 #define GL_COLOR_MATERIAL Wt::WGLWidget::NONE
240 #define GL_AMBIENT_AND_DIFFUSE Wt::WGLWidget::NONE
242 #define GL_LIGHTING Wt::WGLWidget::NONE
243 #define GL_POINT_SMOOTH Wt::WGLWidget::NONE
244 #define GL_LINE_SMOOTH Wt::WGLWidget::NONE
245 #define GL_POLYGON_SMOOTH Wt::WGLWidget::NONE
246 #define GL_LIGHT0 Wt::WGLWidget::NONE
247 #define GL_AMBIENT Wt::WGLWidget::NONE
248 #define GL_DIFFUSE Wt::WGLWidget::NONE
249 #define GL_POSITION Wt::WGLWidget::NONE
251 #define GLenum Wt::WGLWidget::GLenum
253 typedef unsigned char GLboolean;
254 typedef unsigned int GLbitfield;
257 typedef short GLshort;
259 typedef unsigned char GLubyte;
260 typedef unsigned short GLushort;
261 typedef unsigned int GLuint;
263 typedef float GLfloat;
264 typedef float GLclampf;
265 typedef double GLdouble;
266 typedef double GLclampd;
275 class G4OpenGLImmediateQtViewer;
277 #define glOrtho fVboDrawer->vboGlOrtho
278 #define glFrustum fVboDrawer->vboGlFrustum
279 #define glMultMatrixf fVboDrawer->vboGlMultMatrixf
280 #define glMultMatrixd fVboDrawer->vboGlMultMatrixd
281 #define glMatrixMode fVboDrawer->vboGlMatrixMode
282 #define glPointSize fVboDrawer->vboGlPointSize
283 #define glColor3d fVboDrawer->vboGlColor3d
284 #define glColor4d fVboDrawer->vboGlColor4d
285 #define glColor4fv fVboDrawer->vboGlColor4fv
288 #endif // G4VIS_BUILD_OPENGLQT_DRIVER
291 class G4OpenGLViewer;
293 class G4OpenGLVboDrawer {
295 G4OpenGLVboDrawer (G4OpenGLViewer*, std::string type);
299 virtual ~G4OpenGLVboDrawer ();
302 #ifdef G4VIS_BUILD_OPENGLWT_DRIVER
303 void vboGlClear(Wt::WFlags< GLenum >
mask);
304 void vboGlUniformMatrix4(
const Wt::WGLWidget::UniformLocation &location,
const Wt::WMatrix4x4 &mat);
305 void vboGlUniformMatrix4(
const Wt::WGLWidget::UniformLocation &location,
const double* matrix);
306 void vboGlUniformMatrix4fv(
const Wt::WGLWidget::UniformLocation &location,
const float* matrix);
307 void vboGlUniformMatrix4(
const Wt::WGLWidget::UniformLocation &location,
const Wt::WGLWidget::JavaScriptMatrix4x4 &mat);
308 Wt::WGLWidget::Buffer vboGlCreateBuffer();
309 void vboGlBindBuffer(GLenum target, Wt::WGLWidget::Buffer
buffer);
310 void vboGlDeleteBuffer(Wt::WGLWidget::Buffer
buffer);
311 void vboGlVertexAttribPointer(Wt::WGLWidget::AttribLocation location,
int size, GLenum type,
bool normalized,
unsigned stride,
unsigned offset);
312 void vboGlShaderSource(Wt::WGLWidget::Shader shader, GLsizei ,
const GLchar **src,
const GLint *);
313 void vboGlCompileShader(Wt::WGLWidget::Shader shader);
314 Wt::WGLWidget::Shader vboGlCreateShader(GLenum shader);
315 Wt::WGLWidget::Program vboGlCreateProgram();
316 void vboGlAttachShader(Wt::WGLWidget::Program program, Wt::WGLWidget::Shader shader);
317 void vboGlLinkProgram(Wt::WGLWidget::Program program);
318 void vboGlUseProgram(Wt::WGLWidget::Program program);
319 void vboGlEnableVertexAttribArray(Wt::WGLWidget::AttribLocation pointer);
320 void vboGlDisableVertexAttribArray(Wt::WGLWidget::AttribLocation pointer);
321 Wt::WGLWidget::UniformLocation vboGlGetUniformLocation(Wt::WGLWidget::Program programm,
const std::string &src);
322 Wt::WGLWidget::AttribLocation vboGlGetAttribLocation(Wt::WGLWidget::Program shader,
const std::string &src);
324 void vboGlClearColor (
double r,
double g,
double b,
double a);
325 void vboGlClearDepth(
double depth);
326 void vboGlViewport(
int x,
int y,
unsigned width,
unsigned height);
327 void vboGlEnable(GLenum cap);
328 void vboGlDisable(GLenum cap);
329 void vboGlBlendFunc (GLenum sfactor, GLenum dfactor);
330 void vboGlDepthFunc (GLenum func);
331 void vboGlDepthMask(
bool flag);
332 void vboGlColorMask (
bool red,
bool green,
bool blue,
bool alpha);
333 void vboGlLineWidth(
double width);
334 void vboGlDrawArrays(GLenum mode,
int first,
unsigned count);
335 void vboGlBufferDatafv(GLenum target,
const std::vector<double>::iterator begin,
const std::vector<double>::iterator end, GLenum
usage);
336 void vboGlBufferDataiv(GLenum target,
const std::vector<unsigned short>::iterator begin,
const std::vector<unsigned short>::iterator end, GLenum
usage, GLenum type);
337 void vboGlDrawElements(GLenum mode,
unsigned count, GLenum type,
unsigned offset);
338 void vboGlMultMatrixf(
const GLfloat *
m );
339 void vboGlMultMatrixd(
const GLdouble *
m );
341 void vboGlMultMatrixf(
const GLfloat *
m );
342 void vboGlMultMatrixd(
const GLdouble *
m );
346 void vboGlOrtho(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble);
347 void vboGlFrustum(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble);
348 void vboGlMatrixMode(GLenum);
349 void vboGlPointSize(
float size);
350 inline void vboGlColor3d(
int red,
int green,
int blue) {
351 vboGlColor4d(red,green, blue, 1.0);
353 void vboGlColor4d(
int red,
int green,
int blue,
int alpha);
354 void vboGlColor4fv(
const GLfloat*);
355 inline const char * getFragmentShaderSrc() {
356 return fFragmentShaderSrc;
358 inline const char * getVertexShaderSrc() {
359 return fVertexShaderSrc;
361 inline bool isVBO() {
362 if ((fOGLType ==
"OGL-ES") || (fOGLType ==
"OGL-VBO")) {
367 inline void empty() {}
368 inline GLuint returnNULL() {
373 const char *fFragmentShaderSrc;
374 const char *fVertexShaderSrc;
375 std::string fOGLType;
378 #ifdef G4VIS_BUILD_OPENGLWT_DRIVER
379 G4OpenGLImmediateWtViewer* fVboViewer;
381 G4OpenGLImmediateQtViewer* fVboViewer;
382 #endif // G4VIS_BUILD_OPENGLWT_DRIVER
385 #endif // G4OPENGL_VERSION_2
387 #endif // G4OpenGLVboDrawer_HH
static const G4double alpha