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