// @(#)root/eve:$Id$
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TMath.h"

#include "TEveQuadSetGL.h"

#include "TGLRnrCtx.h"
#include "TGLIncludes.h"

//==============================================================================
// TEveQuadSetGL
//==============================================================================

//______________________________________________________________________________
//
// GL-renderer for TEveQuadSet class.

ClassImp(TEveQuadSetGL);

/******************************************************************************/

//______________________________________________________________________________
TEveQuadSetGL::TEveQuadSetGL() : TEveDigitSetGL(), fM(0)
{
   // Constructor.

   // fDLCache = false; // Disable DL.
   fMultiColor = kTRUE;
}

/******************************************************************************/

//______________________________________________________________________________
Bool_t TEveQuadSetGL::SetModel(TObject* obj, const Option_t* /*opt*/)
{
   // Set model object.

   fM = SetModelDynCast<TEveQuadSet>(obj);
   return kTRUE;
}

/******************************************************************************/

namespace
{
  inline void AntiFlick(Float_t x, Float_t y, Float_t z)
  {
     // Render anti-flickering point.
     glBegin(GL_POINTS);
     glVertex3f(x, y, z);
     glEnd();
  }
}

//______________________________________________________________________________
void TEveQuadSetGL::DirectDraw(TGLRnrCtx & rnrCtx) const
{
   // Draw quad-set with GL.

   static const TEveException eH("TEveQuadSetGL::DirectDraw ");

   // printf("QuadSetGLRenderer::DirectDraw Style %d, LOD %d\n", rnrCtx.Style(), rnrCtx.LOD());

   TEveQuadSet& mQ = * fM;

   if (mQ.fPlex.Size() > 0)
   {
      if (! mQ.fSingleColor && ! mQ.fValueIsColor && mQ.fPalette == 0)
      {
         mQ.AssertPalette();
      }

      glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
      glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
      glEnable(GL_COLOR_MATERIAL);
      glDisable(GL_CULL_FACE);

      if ( ! rnrCtx.IsDrawPassOutlineLine())
      {
         if (mQ.fRenderMode == TEveDigitSet::kRM_Fill)
            glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
         else if (mQ.fRenderMode == TEveDigitSet::kRM_Line)
            glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
      }

      if (mQ.fDisableLighting)  glDisable(GL_LIGHTING);

      if (mQ.fQuadType < TEveQuadSet::kQT_Rectangle_End)    RenderQuads(rnrCtx);
      else if (mQ.fQuadType < TEveQuadSet::kQT_Line_End)    RenderLines(rnrCtx);
      else if (mQ.fQuadType < TEveQuadSet::kQT_Hexagon_End) RenderHexagons(rnrCtx);

      glPopAttrib();
   }

   DrawFrameIfNeeded(rnrCtx);
}

//______________________________________________________________________________
void TEveQuadSetGL::RenderQuads(TGLRnrCtx& rnrCtx) const
{
   // GL rendering for free-quads and rectangles.

   static const TEveException eH("TEveQuadSetGL::RenderQuads ");

   TEveQuadSet& mQ = * fM;

   GLenum primitiveType;
   if (mQ.fRenderMode != TEveDigitSet::kRM_Line)
   {
      primitiveType = GL_QUADS;
      if (mQ.fQuadType == TEveQuadSet::kQT_FreeQuad)
         glEnable(GL_NORMALIZE);
      else
         glNormal3f(0, 0, 1);
   } else {
      primitiveType = GL_LINE_LOOP;
   }

   TEveChunkManager::iterator qi(mQ.fPlex);
   if (rnrCtx.Highlight() && fHighlightSet)
      qi.fSelection = fHighlightSet;

   if (rnrCtx.SecSelection()) glPushName(0);

   switch (mQ.fQuadType)
   {
      case TEveQuadSet::kQT_FreeQuad:
      {
         Float_t e1[3], e2[3], normal[3];
         while (qi.next()) {
            TEveQuadSet::QFreeQuad_t& q = * (TEveQuadSet::QFreeQuad_t*) qi();
            if (SetupColor(q))
            {
               Float_t* p = q.fVertices;
               e1[0] = p[3] - p[0]; e1[1] = p[4] - p[1]; e1[2] = p[5] - p[2];
               e2[0] = p[6] - p[0]; e2[1] = p[7] - p[1]; e2[2] = p[8] - p[2];
               TMath::Cross(e1, e2, normal);
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitiveType);
               glNormal3fv(normal);
               glVertex3fv(p);
               glVertex3fv(p + 3);
               glVertex3fv(p + 6);
               glVertex3fv(p + 9);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(0.5f*(p[0]+p[6]), 0.5f*(p[1]+p[7]), 0.5f*(p[2]+p[8]));
            }
         }
         break;
      }

      case TEveQuadSet::kQT_RectangleXY:
      {
         while (qi.next()) {
            TEveQuadSet::QRect_t& q = * (TEveQuadSet::QRect_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitiveType);
               glVertex3f(q.fA,        q.fB,        q.fC);
               glVertex3f(q.fA + q.fW, q.fB,        q.fC);
               glVertex3f(q.fA + q.fW, q.fB + q.fH, q.fC);
               glVertex3f(q.fA,        q.fB + q.fH, q.fC);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(q.fA + 0.5f*q.fW, q.fB + 0.5f*q.fH, q.fC);
            }
         }
         break;
      }

      case TEveQuadSet::kQT_RectangleXZ:
      {
         while (qi.next()) {
            TEveQuadSet::QRect_t& q = * (TEveQuadSet::QRect_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitiveType);
               glVertex3f(q.fA,        q.fC, q.fB);
               glVertex3f(q.fA + q.fW, q.fC, q.fB);
               glVertex3f(q.fA + q.fW, q.fC, q.fB + q.fH);
               glVertex3f(q.fA,        q.fC, q.fB + q.fH);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(q.fA + 0.5f*q.fW, q.fC, q.fB + 0.5f*q.fH);
            }
         }
         break;
      }

      case TEveQuadSet::kQT_RectangleYZ:
      {
         while (qi.next()) {
            TEveQuadSet::QRect_t& q = * (TEveQuadSet::QRect_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitiveType);
               glVertex3f(q.fC, q.fA,        q.fB);
               glVertex3f(q.fC, q.fA + q.fW, q.fB);
               glVertex3f(q.fC, q.fA + q.fW, q.fB + q.fH);
               glVertex3f(q.fC, q.fA,        q.fB + q.fH);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(q.fC, q.fA + 0.5f*q.fW, q.fB + 0.5f*q.fH);
            }
         }
         break;
      }

      case TEveQuadSet::kQT_RectangleXYFixedDim:
      {
         const Float_t& w = mQ.fDefWidth;
         const Float_t& h = mQ.fDefHeight;
         while (qi.next()) {
            TEveQuadSet::QRectFixDim_t& q = * (TEveQuadSet::QRectFixDim_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitiveType);
               glVertex3f(q.fA,     q.fB,     q.fC);
               glVertex3f(q.fA + w, q.fB,     q.fC);
               glVertex3f(q.fA + w, q.fB + h, q.fC);
               glVertex3f(q.fA,     q.fB + h, q.fC);
               glEnd();
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(q.fA + 0.5f*w, q.fB + 0.5f*h, q.fC);
            }
         }
         break;
      }

      case TEveQuadSet::kQT_RectangleXYFixedZ:
      {
         const Float_t& z = mQ.fDefCoord;
         while (qi.next()) {
            TEveQuadSet::QRectFixC_t& q = * (TEveQuadSet::QRectFixC_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitiveType);
               glVertex3f(q.fA,        q.fB,        z);
               glVertex3f(q.fA + q.fW, q.fB,        z);
               glVertex3f(q.fA + q.fW, q.fB + q.fH, z);
               glVertex3f(q.fA,        q.fB + q.fH, z);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(q.fA + 0.5f*q.fW, q.fB + 0.5f*q.fH, z);
            }
         }
         break;
      }

      case TEveQuadSet::kQT_RectangleXZFixedY:
      {
         const Float_t& y = mQ.fDefCoord;
         while (qi.next()) {
            TEveQuadSet::QRectFixC_t& q = * (TEveQuadSet::QRectFixC_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitiveType);
               glVertex3f(q.fA,        y, q.fB);
               glVertex3f(q.fA + q.fW, y, q.fB);
               glVertex3f(q.fA + q.fW, y, q.fB + q.fH);
               glVertex3f(q.fA,        y, q.fB + q.fH);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(q.fA + 0.5f*q.fW, y, q.fB + 0.5f*q.fH);
            }
         }
         break;
      }

      case TEveQuadSet::kQT_RectangleYZFixedX:
      {
         const Float_t& x = mQ.fDefCoord;
         while (qi.next()) {
            TEveQuadSet::QRectFixC_t& q = * (TEveQuadSet::QRectFixC_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitiveType);
               glVertex3f(x, q.fA,        q.fB);
               glVertex3f(x, q.fA + q.fW, q.fB);
               glVertex3f(x, q.fA + q.fW, q.fB + q.fH);
               glVertex3f(x, q.fA,        q.fB + q.fH);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(x, q.fA + 0.5f*q.fW, q.fB + 0.5f*q.fH);
            }
         }
         break;
      }

      case TEveQuadSet::kQT_RectangleXYFixedDimZ:
      {
         const Float_t& z = mQ.fDefCoord;
         const Float_t& w = mQ.fDefWidth;
         const Float_t& h = mQ.fDefHeight;
         while (qi.next()) {
            TEveQuadSet::QRectFixDimC_t& q = * (TEveQuadSet::QRectFixDimC_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitiveType);
               glVertex3f(q.fA,     q.fB,     z);
               glVertex3f(q.fA + w, q.fB,     z);
               glVertex3f(q.fA + w, q.fB + h, z);
               glVertex3f(q.fA,     q.fB + h, z);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(q.fA + 0.5f*w, q.fB + 0.5f*h, z);
            }
         }
         break;
      }

      case TEveQuadSet::kQT_RectangleXZFixedDimY:
      {
         const Float_t& y = mQ.fDefCoord;
         const Float_t& w = mQ.fDefWidth;
         const Float_t& h = mQ.fDefHeight;
         while (qi.next()) {
            TEveQuadSet::QRectFixDimC_t& q = * (TEveQuadSet::QRectFixDimC_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitiveType);
               glVertex3f(q.fA,     y, q.fB);
               glVertex3f(q.fA + w, y, q.fB);
               glVertex3f(q.fA + w, y, q.fB + h);
               glVertex3f(q.fA,     y, q.fB + h);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(q.fA + 0.5f*w, y, q.fB + 0.5f*h);
            }
         }
         break;
      }

      case TEveQuadSet::kQT_RectangleYZFixedDimX:
      {
         const Float_t& x = mQ.fDefCoord;
         const Float_t& w = mQ.fDefWidth;
         const Float_t& h = mQ.fDefHeight;
         while (qi.next()) {
            TEveQuadSet::QRectFixDimC_t& q = * (TEveQuadSet::QRectFixDimC_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitiveType);
               glVertex3f(x, q.fA,     q.fB);
               glVertex3f(x, q.fA + w, q.fB);
               glVertex3f(x, q.fA + w, q.fB + h);
               glVertex3f(x, q.fA,     q.fB + h);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(x, q.fA + 0.5f*w, q.fB + 0.5f*h);
            }
         }
         break;
      }

      default:
         throw(eH + "unsupported quad-type.");

   } // end switch quad-type

   if (rnrCtx.SecSelection()) glPopName();
}

//______________________________________________________________________________
void TEveQuadSetGL::RenderLines(TGLRnrCtx & rnrCtx) const
{
   // GL rendering for line-types.

   static const TEveException eH("TEveQuadSetGL::RenderLines ");

   TEveQuadSet& mQ = * fM;

   TEveChunkManager::iterator qi(mQ.fPlex);
   if (rnrCtx.Highlight() && fHighlightSet)
      qi.fSelection = fHighlightSet;

   if (rnrCtx.SecSelection()) glPushName(0);

   switch (mQ.fQuadType)
   {

      case TEveQuadSet::kQT_LineXYFixedZ:
      {
         const Float_t& z = mQ.fDefCoord;
         while (qi.next()) {
            TEveQuadSet::QLineFixC_t& q = * (TEveQuadSet::QLineFixC_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(GL_LINES);
               glVertex3f(q.fA,         q.fB,         z);
               glVertex3f(q.fA + q.fDx, q.fB + q.fDy, z);
               glEnd();
            }
         }
         break;
      }

      case TEveQuadSet::kQT_LineXZFixedY:
      {
         const Float_t& z = mQ.fDefCoord;
         while (qi.next()) {
            TEveQuadSet::QLineFixC_t& q = * (TEveQuadSet::QLineFixC_t*) qi();
            if (SetupColor(q))
            {
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(GL_LINES);
               glVertex3f(q.fA,         z, q.fB);
               glVertex3f(q.fA + q.fDx, z, q.fB + q.fDy);
               glEnd();
            }
         }
         break;
      }

      default:
         throw(eH + "unsupported quad-type.");

   }

   if (rnrCtx.SecSelection()) glPopName();
}

//______________________________________________________________________________
void TEveQuadSetGL::RenderHexagons(TGLRnrCtx & rnrCtx) const
{
   // GL rendering for hexagons.

   static const TEveException eH("TEveQuadSetGL::RenderHexagons ");

   const Float_t sqr3hf = 0.5*TMath::Sqrt(3);

   TEveQuadSet& mQ = * fM;

   GLenum primitveType = (mQ.fRenderMode != TEveDigitSet::kRM_Line) ?
      GL_POLYGON : GL_LINE_LOOP;

   glNormal3f(0, 0, 1);

   TEveChunkManager::iterator qi(mQ.fPlex);
   if (rnrCtx.Highlight() && fHighlightSet)
      qi.fSelection = fHighlightSet;

   if (rnrCtx.SecSelection()) glPushName(0);

   switch (mQ.fQuadType)
   {
      case TEveQuadSet::kQT_HexagonXY:
      {
         while (qi.next()) {
            TEveQuadSet::QHex_t& q = * (TEveQuadSet::QHex_t*) qi();
            if (SetupColor(q))
            {
               const Float_t rh = q.fR * 0.5;
               const Float_t rs = q.fR * sqr3hf;
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitveType);
               glVertex3f( q.fR + q.fA,       q.fB, q.fC);
               glVertex3f(   rh + q.fA,  rs + q.fB, q.fC);
               glVertex3f(  -rh + q.fA,  rs + q.fB, q.fC);
               glVertex3f(-q.fR + q.fA,       q.fB, q.fC);
               glVertex3f(  -rh + q.fA, -rs + q.fB, q.fC);
               glVertex3f(   rh + q.fA, -rs + q.fB, q.fC);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(q.fA, q.fB, q.fC);
            }
         }
         break;
      }

      case TEveQuadSet::kQT_HexagonYX:
      {
         while (qi.next()) {
            TEveQuadSet::QHex_t& q = * (TEveQuadSet::QHex_t*) qi();
            if (SetupColor(q))
            {
               const Float_t rh = q.fR * 0.5;
               const Float_t rs = q.fR * sqr3hf;
               if (rnrCtx.SecSelection()) glLoadName(qi.index());
               glBegin(primitveType);
               glVertex3f( rs + q.fA,    rh + q.fB, q.fC);
               glVertex3f(      q.fA,  q.fR + q.fB, q.fC);
               glVertex3f(-rs + q.fA,    rh + q.fB, q.fC);
               glVertex3f(-rs + q.fA,   -rh + q.fB, q.fC);
               glVertex3f(      q.fA, -q.fR + q.fB, q.fC);
               glVertex3f( rs + q.fA,   -rh + q.fB, q.fC);
               glEnd();
               if (mQ.fAntiFlick)
                  AntiFlick(q.fA, q.fB, q.fC);
            }
         }
         break;
      }

      default:
         throw(eH + "unsupported quad-type.");

   } // end switch quad-type

   if (rnrCtx.SecSelection()) glPopName();
}
 TEveQuadSetGL.cxx:1
 TEveQuadSetGL.cxx:2
 TEveQuadSetGL.cxx:3
 TEveQuadSetGL.cxx:4
 TEveQuadSetGL.cxx:5
 TEveQuadSetGL.cxx:6
 TEveQuadSetGL.cxx:7
 TEveQuadSetGL.cxx:8
 TEveQuadSetGL.cxx:9
 TEveQuadSetGL.cxx:10
 TEveQuadSetGL.cxx:11
 TEveQuadSetGL.cxx:12
 TEveQuadSetGL.cxx:13
 TEveQuadSetGL.cxx:14
 TEveQuadSetGL.cxx:15
 TEveQuadSetGL.cxx:16
 TEveQuadSetGL.cxx:17
 TEveQuadSetGL.cxx:18
 TEveQuadSetGL.cxx:19
 TEveQuadSetGL.cxx:20
 TEveQuadSetGL.cxx:21
 TEveQuadSetGL.cxx:22
 TEveQuadSetGL.cxx:23
 TEveQuadSetGL.cxx:24
 TEveQuadSetGL.cxx:25
 TEveQuadSetGL.cxx:26
 TEveQuadSetGL.cxx:27
 TEveQuadSetGL.cxx:28
 TEveQuadSetGL.cxx:29
 TEveQuadSetGL.cxx:30
 TEveQuadSetGL.cxx:31
 TEveQuadSetGL.cxx:32
 TEveQuadSetGL.cxx:33
 TEveQuadSetGL.cxx:34
 TEveQuadSetGL.cxx:35
 TEveQuadSetGL.cxx:36
 TEveQuadSetGL.cxx:37
 TEveQuadSetGL.cxx:38
 TEveQuadSetGL.cxx:39
 TEveQuadSetGL.cxx:40
 TEveQuadSetGL.cxx:41
 TEveQuadSetGL.cxx:42
 TEveQuadSetGL.cxx:43
 TEveQuadSetGL.cxx:44
 TEveQuadSetGL.cxx:45
 TEveQuadSetGL.cxx:46
 TEveQuadSetGL.cxx:47
 TEveQuadSetGL.cxx:48
 TEveQuadSetGL.cxx:49
 TEveQuadSetGL.cxx:50
 TEveQuadSetGL.cxx:51
 TEveQuadSetGL.cxx:52
 TEveQuadSetGL.cxx:53
 TEveQuadSetGL.cxx:54
 TEveQuadSetGL.cxx:55
 TEveQuadSetGL.cxx:56
 TEveQuadSetGL.cxx:57
 TEveQuadSetGL.cxx:58
 TEveQuadSetGL.cxx:59
 TEveQuadSetGL.cxx:60
 TEveQuadSetGL.cxx:61
 TEveQuadSetGL.cxx:62
 TEveQuadSetGL.cxx:63
 TEveQuadSetGL.cxx:64
 TEveQuadSetGL.cxx:65
 TEveQuadSetGL.cxx:66
 TEveQuadSetGL.cxx:67
 TEveQuadSetGL.cxx:68
 TEveQuadSetGL.cxx:69
 TEveQuadSetGL.cxx:70
 TEveQuadSetGL.cxx:71
 TEveQuadSetGL.cxx:72
 TEveQuadSetGL.cxx:73
 TEveQuadSetGL.cxx:74
 TEveQuadSetGL.cxx:75
 TEveQuadSetGL.cxx:76
 TEveQuadSetGL.cxx:77
 TEveQuadSetGL.cxx:78
 TEveQuadSetGL.cxx:79
 TEveQuadSetGL.cxx:80
 TEveQuadSetGL.cxx:81
 TEveQuadSetGL.cxx:82
 TEveQuadSetGL.cxx:83
 TEveQuadSetGL.cxx:84
 TEveQuadSetGL.cxx:85
 TEveQuadSetGL.cxx:86
 TEveQuadSetGL.cxx:87
 TEveQuadSetGL.cxx:88
 TEveQuadSetGL.cxx:89
 TEveQuadSetGL.cxx:90
 TEveQuadSetGL.cxx:91
 TEveQuadSetGL.cxx:92
 TEveQuadSetGL.cxx:93
 TEveQuadSetGL.cxx:94
 TEveQuadSetGL.cxx:95
 TEveQuadSetGL.cxx:96
 TEveQuadSetGL.cxx:97
 TEveQuadSetGL.cxx:98
 TEveQuadSetGL.cxx:99
 TEveQuadSetGL.cxx:100
 TEveQuadSetGL.cxx:101
 TEveQuadSetGL.cxx:102
 TEveQuadSetGL.cxx:103
 TEveQuadSetGL.cxx:104
 TEveQuadSetGL.cxx:105
 TEveQuadSetGL.cxx:106
 TEveQuadSetGL.cxx:107
 TEveQuadSetGL.cxx:108
 TEveQuadSetGL.cxx:109
 TEveQuadSetGL.cxx:110
 TEveQuadSetGL.cxx:111
 TEveQuadSetGL.cxx:112
 TEveQuadSetGL.cxx:113
 TEveQuadSetGL.cxx:114
 TEveQuadSetGL.cxx:115
 TEveQuadSetGL.cxx:116
 TEveQuadSetGL.cxx:117
 TEveQuadSetGL.cxx:118
 TEveQuadSetGL.cxx:119
 TEveQuadSetGL.cxx:120
 TEveQuadSetGL.cxx:121
 TEveQuadSetGL.cxx:122
 TEveQuadSetGL.cxx:123
 TEveQuadSetGL.cxx:124
 TEveQuadSetGL.cxx:125
 TEveQuadSetGL.cxx:126
 TEveQuadSetGL.cxx:127
 TEveQuadSetGL.cxx:128
 TEveQuadSetGL.cxx:129
 TEveQuadSetGL.cxx:130
 TEveQuadSetGL.cxx:131
 TEveQuadSetGL.cxx:132
 TEveQuadSetGL.cxx:133
 TEveQuadSetGL.cxx:134
 TEveQuadSetGL.cxx:135
 TEveQuadSetGL.cxx:136
 TEveQuadSetGL.cxx:137
 TEveQuadSetGL.cxx:138
 TEveQuadSetGL.cxx:139
 TEveQuadSetGL.cxx:140
 TEveQuadSetGL.cxx:141
 TEveQuadSetGL.cxx:142
 TEveQuadSetGL.cxx:143
 TEveQuadSetGL.cxx:144
 TEveQuadSetGL.cxx:145
 TEveQuadSetGL.cxx:146
 TEveQuadSetGL.cxx:147
 TEveQuadSetGL.cxx:148
 TEveQuadSetGL.cxx:149
 TEveQuadSetGL.cxx:150
 TEveQuadSetGL.cxx:151
 TEveQuadSetGL.cxx:152
 TEveQuadSetGL.cxx:153
 TEveQuadSetGL.cxx:154
 TEveQuadSetGL.cxx:155
 TEveQuadSetGL.cxx:156
 TEveQuadSetGL.cxx:157
 TEveQuadSetGL.cxx:158
 TEveQuadSetGL.cxx:159
 TEveQuadSetGL.cxx:160
 TEveQuadSetGL.cxx:161
 TEveQuadSetGL.cxx:162
 TEveQuadSetGL.cxx:163
 TEveQuadSetGL.cxx:164
 TEveQuadSetGL.cxx:165
 TEveQuadSetGL.cxx:166
 TEveQuadSetGL.cxx:167
 TEveQuadSetGL.cxx:168
 TEveQuadSetGL.cxx:169
 TEveQuadSetGL.cxx:170
 TEveQuadSetGL.cxx:171
 TEveQuadSetGL.cxx:172
 TEveQuadSetGL.cxx:173
 TEveQuadSetGL.cxx:174
 TEveQuadSetGL.cxx:175
 TEveQuadSetGL.cxx:176
 TEveQuadSetGL.cxx:177
 TEveQuadSetGL.cxx:178
 TEveQuadSetGL.cxx:179
 TEveQuadSetGL.cxx:180
 TEveQuadSetGL.cxx:181
 TEveQuadSetGL.cxx:182
 TEveQuadSetGL.cxx:183
 TEveQuadSetGL.cxx:184
 TEveQuadSetGL.cxx:185
 TEveQuadSetGL.cxx:186
 TEveQuadSetGL.cxx:187
 TEveQuadSetGL.cxx:188
 TEveQuadSetGL.cxx:189
 TEveQuadSetGL.cxx:190
 TEveQuadSetGL.cxx:191
 TEveQuadSetGL.cxx:192
 TEveQuadSetGL.cxx:193
 TEveQuadSetGL.cxx:194
 TEveQuadSetGL.cxx:195
 TEveQuadSetGL.cxx:196
 TEveQuadSetGL.cxx:197
 TEveQuadSetGL.cxx:198
 TEveQuadSetGL.cxx:199
 TEveQuadSetGL.cxx:200
 TEveQuadSetGL.cxx:201
 TEveQuadSetGL.cxx:202
 TEveQuadSetGL.cxx:203
 TEveQuadSetGL.cxx:204
 TEveQuadSetGL.cxx:205
 TEveQuadSetGL.cxx:206
 TEveQuadSetGL.cxx:207
 TEveQuadSetGL.cxx:208
 TEveQuadSetGL.cxx:209
 TEveQuadSetGL.cxx:210
 TEveQuadSetGL.cxx:211
 TEveQuadSetGL.cxx:212
 TEveQuadSetGL.cxx:213
 TEveQuadSetGL.cxx:214
 TEveQuadSetGL.cxx:215
 TEveQuadSetGL.cxx:216
 TEveQuadSetGL.cxx:217
 TEveQuadSetGL.cxx:218
 TEveQuadSetGL.cxx:219
 TEveQuadSetGL.cxx:220
 TEveQuadSetGL.cxx:221
 TEveQuadSetGL.cxx:222
 TEveQuadSetGL.cxx:223
 TEveQuadSetGL.cxx:224
 TEveQuadSetGL.cxx:225
 TEveQuadSetGL.cxx:226
 TEveQuadSetGL.cxx:227
 TEveQuadSetGL.cxx:228
 TEveQuadSetGL.cxx:229
 TEveQuadSetGL.cxx:230
 TEveQuadSetGL.cxx:231
 TEveQuadSetGL.cxx:232
 TEveQuadSetGL.cxx:233
 TEveQuadSetGL.cxx:234
 TEveQuadSetGL.cxx:235
 TEveQuadSetGL.cxx:236
 TEveQuadSetGL.cxx:237
 TEveQuadSetGL.cxx:238
 TEveQuadSetGL.cxx:239
 TEveQuadSetGL.cxx:240
 TEveQuadSetGL.cxx:241
 TEveQuadSetGL.cxx:242
 TEveQuadSetGL.cxx:243
 TEveQuadSetGL.cxx:244
 TEveQuadSetGL.cxx:245
 TEveQuadSetGL.cxx:246
 TEveQuadSetGL.cxx:247
 TEveQuadSetGL.cxx:248
 TEveQuadSetGL.cxx:249
 TEveQuadSetGL.cxx:250
 TEveQuadSetGL.cxx:251
 TEveQuadSetGL.cxx:252
 TEveQuadSetGL.cxx:253
 TEveQuadSetGL.cxx:254
 TEveQuadSetGL.cxx:255
 TEveQuadSetGL.cxx:256
 TEveQuadSetGL.cxx:257
 TEveQuadSetGL.cxx:258
 TEveQuadSetGL.cxx:259
 TEveQuadSetGL.cxx:260
 TEveQuadSetGL.cxx:261
 TEveQuadSetGL.cxx:262
 TEveQuadSetGL.cxx:263
 TEveQuadSetGL.cxx:264
 TEveQuadSetGL.cxx:265
 TEveQuadSetGL.cxx:266
 TEveQuadSetGL.cxx:267
 TEveQuadSetGL.cxx:268
 TEveQuadSetGL.cxx:269
 TEveQuadSetGL.cxx:270
 TEveQuadSetGL.cxx:271
 TEveQuadSetGL.cxx:272
 TEveQuadSetGL.cxx:273
 TEveQuadSetGL.cxx:274
 TEveQuadSetGL.cxx:275
 TEveQuadSetGL.cxx:276
 TEveQuadSetGL.cxx:277
 TEveQuadSetGL.cxx:278
 TEveQuadSetGL.cxx:279
 TEveQuadSetGL.cxx:280
 TEveQuadSetGL.cxx:281
 TEveQuadSetGL.cxx:282
 TEveQuadSetGL.cxx:283
 TEveQuadSetGL.cxx:284
 TEveQuadSetGL.cxx:285
 TEveQuadSetGL.cxx:286
 TEveQuadSetGL.cxx:287
 TEveQuadSetGL.cxx:288
 TEveQuadSetGL.cxx:289
 TEveQuadSetGL.cxx:290
 TEveQuadSetGL.cxx:291
 TEveQuadSetGL.cxx:292
 TEveQuadSetGL.cxx:293
 TEveQuadSetGL.cxx:294
 TEveQuadSetGL.cxx:295
 TEveQuadSetGL.cxx:296
 TEveQuadSetGL.cxx:297
 TEveQuadSetGL.cxx:298
 TEveQuadSetGL.cxx:299
 TEveQuadSetGL.cxx:300
 TEveQuadSetGL.cxx:301
 TEveQuadSetGL.cxx:302
 TEveQuadSetGL.cxx:303
 TEveQuadSetGL.cxx:304
 TEveQuadSetGL.cxx:305
 TEveQuadSetGL.cxx:306
 TEveQuadSetGL.cxx:307
 TEveQuadSetGL.cxx:308
 TEveQuadSetGL.cxx:309
 TEveQuadSetGL.cxx:310
 TEveQuadSetGL.cxx:311
 TEveQuadSetGL.cxx:312
 TEveQuadSetGL.cxx:313
 TEveQuadSetGL.cxx:314
 TEveQuadSetGL.cxx:315
 TEveQuadSetGL.cxx:316
 TEveQuadSetGL.cxx:317
 TEveQuadSetGL.cxx:318
 TEveQuadSetGL.cxx:319
 TEveQuadSetGL.cxx:320
 TEveQuadSetGL.cxx:321
 TEveQuadSetGL.cxx:322
 TEveQuadSetGL.cxx:323
 TEveQuadSetGL.cxx:324
 TEveQuadSetGL.cxx:325
 TEveQuadSetGL.cxx:326
 TEveQuadSetGL.cxx:327
 TEveQuadSetGL.cxx:328
 TEveQuadSetGL.cxx:329
 TEveQuadSetGL.cxx:330
 TEveQuadSetGL.cxx:331
 TEveQuadSetGL.cxx:332
 TEveQuadSetGL.cxx:333
 TEveQuadSetGL.cxx:334
 TEveQuadSetGL.cxx:335
 TEveQuadSetGL.cxx:336
 TEveQuadSetGL.cxx:337
 TEveQuadSetGL.cxx:338
 TEveQuadSetGL.cxx:339
 TEveQuadSetGL.cxx:340
 TEveQuadSetGL.cxx:341
 TEveQuadSetGL.cxx:342
 TEveQuadSetGL.cxx:343
 TEveQuadSetGL.cxx:344
 TEveQuadSetGL.cxx:345
 TEveQuadSetGL.cxx:346
 TEveQuadSetGL.cxx:347
 TEveQuadSetGL.cxx:348
 TEveQuadSetGL.cxx:349
 TEveQuadSetGL.cxx:350
 TEveQuadSetGL.cxx:351
 TEveQuadSetGL.cxx:352
 TEveQuadSetGL.cxx:353
 TEveQuadSetGL.cxx:354
 TEveQuadSetGL.cxx:355
 TEveQuadSetGL.cxx:356
 TEveQuadSetGL.cxx:357
 TEveQuadSetGL.cxx:358
 TEveQuadSetGL.cxx:359
 TEveQuadSetGL.cxx:360
 TEveQuadSetGL.cxx:361
 TEveQuadSetGL.cxx:362
 TEveQuadSetGL.cxx:363
 TEveQuadSetGL.cxx:364
 TEveQuadSetGL.cxx:365
 TEveQuadSetGL.cxx:366
 TEveQuadSetGL.cxx:367
 TEveQuadSetGL.cxx:368
 TEveQuadSetGL.cxx:369
 TEveQuadSetGL.cxx:370
 TEveQuadSetGL.cxx:371
 TEveQuadSetGL.cxx:372
 TEveQuadSetGL.cxx:373
 TEveQuadSetGL.cxx:374
 TEveQuadSetGL.cxx:375
 TEveQuadSetGL.cxx:376
 TEveQuadSetGL.cxx:377
 TEveQuadSetGL.cxx:378
 TEveQuadSetGL.cxx:379
 TEveQuadSetGL.cxx:380
 TEveQuadSetGL.cxx:381
 TEveQuadSetGL.cxx:382
 TEveQuadSetGL.cxx:383
 TEveQuadSetGL.cxx:384
 TEveQuadSetGL.cxx:385
 TEveQuadSetGL.cxx:386
 TEveQuadSetGL.cxx:387
 TEveQuadSetGL.cxx:388
 TEveQuadSetGL.cxx:389
 TEveQuadSetGL.cxx:390
 TEveQuadSetGL.cxx:391
 TEveQuadSetGL.cxx:392
 TEveQuadSetGL.cxx:393
 TEveQuadSetGL.cxx:394
 TEveQuadSetGL.cxx:395
 TEveQuadSetGL.cxx:396
 TEveQuadSetGL.cxx:397
 TEveQuadSetGL.cxx:398
 TEveQuadSetGL.cxx:399
 TEveQuadSetGL.cxx:400
 TEveQuadSetGL.cxx:401
 TEveQuadSetGL.cxx:402
 TEveQuadSetGL.cxx:403
 TEveQuadSetGL.cxx:404
 TEveQuadSetGL.cxx:405
 TEveQuadSetGL.cxx:406
 TEveQuadSetGL.cxx:407
 TEveQuadSetGL.cxx:408
 TEveQuadSetGL.cxx:409
 TEveQuadSetGL.cxx:410
 TEveQuadSetGL.cxx:411
 TEveQuadSetGL.cxx:412
 TEveQuadSetGL.cxx:413
 TEveQuadSetGL.cxx:414
 TEveQuadSetGL.cxx:415
 TEveQuadSetGL.cxx:416
 TEveQuadSetGL.cxx:417
 TEveQuadSetGL.cxx:418
 TEveQuadSetGL.cxx:419
 TEveQuadSetGL.cxx:420
 TEveQuadSetGL.cxx:421
 TEveQuadSetGL.cxx:422
 TEveQuadSetGL.cxx:423
 TEveQuadSetGL.cxx:424
 TEveQuadSetGL.cxx:425
 TEveQuadSetGL.cxx:426
 TEveQuadSetGL.cxx:427
 TEveQuadSetGL.cxx:428
 TEveQuadSetGL.cxx:429
 TEveQuadSetGL.cxx:430
 TEveQuadSetGL.cxx:431
 TEveQuadSetGL.cxx:432
 TEveQuadSetGL.cxx:433
 TEveQuadSetGL.cxx:434
 TEveQuadSetGL.cxx:435
 TEveQuadSetGL.cxx:436
 TEveQuadSetGL.cxx:437
 TEveQuadSetGL.cxx:438
 TEveQuadSetGL.cxx:439
 TEveQuadSetGL.cxx:440
 TEveQuadSetGL.cxx:441
 TEveQuadSetGL.cxx:442
 TEveQuadSetGL.cxx:443
 TEveQuadSetGL.cxx:444
 TEveQuadSetGL.cxx:445
 TEveQuadSetGL.cxx:446
 TEveQuadSetGL.cxx:447
 TEveQuadSetGL.cxx:448
 TEveQuadSetGL.cxx:449
 TEveQuadSetGL.cxx:450
 TEveQuadSetGL.cxx:451
 TEveQuadSetGL.cxx:452
 TEveQuadSetGL.cxx:453
 TEveQuadSetGL.cxx:454
 TEveQuadSetGL.cxx:455
 TEveQuadSetGL.cxx:456
 TEveQuadSetGL.cxx:457
 TEveQuadSetGL.cxx:458
 TEveQuadSetGL.cxx:459
 TEveQuadSetGL.cxx:460
 TEveQuadSetGL.cxx:461
 TEveQuadSetGL.cxx:462
 TEveQuadSetGL.cxx:463
 TEveQuadSetGL.cxx:464
 TEveQuadSetGL.cxx:465
 TEveQuadSetGL.cxx:466
 TEveQuadSetGL.cxx:467
 TEveQuadSetGL.cxx:468
 TEveQuadSetGL.cxx:469
 TEveQuadSetGL.cxx:470
 TEveQuadSetGL.cxx:471
 TEveQuadSetGL.cxx:472
 TEveQuadSetGL.cxx:473
 TEveQuadSetGL.cxx:474
 TEveQuadSetGL.cxx:475
 TEveQuadSetGL.cxx:476
 TEveQuadSetGL.cxx:477
 TEveQuadSetGL.cxx:478
 TEveQuadSetGL.cxx:479
 TEveQuadSetGL.cxx:480
 TEveQuadSetGL.cxx:481
 TEveQuadSetGL.cxx:482
 TEveQuadSetGL.cxx:483
 TEveQuadSetGL.cxx:484
 TEveQuadSetGL.cxx:485
 TEveQuadSetGL.cxx:486
 TEveQuadSetGL.cxx:487
 TEveQuadSetGL.cxx:488
 TEveQuadSetGL.cxx:489
 TEveQuadSetGL.cxx:490
 TEveQuadSetGL.cxx:491
 TEveQuadSetGL.cxx:492
 TEveQuadSetGL.cxx:493
 TEveQuadSetGL.cxx:494
 TEveQuadSetGL.cxx:495
 TEveQuadSetGL.cxx:496
 TEveQuadSetGL.cxx:497
 TEveQuadSetGL.cxx:498
 TEveQuadSetGL.cxx:499
 TEveQuadSetGL.cxx:500
 TEveQuadSetGL.cxx:501
 TEveQuadSetGL.cxx:502
 TEveQuadSetGL.cxx:503
 TEveQuadSetGL.cxx:504
 TEveQuadSetGL.cxx:505
 TEveQuadSetGL.cxx:506
 TEveQuadSetGL.cxx:507
 TEveQuadSetGL.cxx:508
 TEveQuadSetGL.cxx:509
 TEveQuadSetGL.cxx:510
 TEveQuadSetGL.cxx:511
 TEveQuadSetGL.cxx:512
 TEveQuadSetGL.cxx:513
 TEveQuadSetGL.cxx:514
 TEveQuadSetGL.cxx:515
 TEveQuadSetGL.cxx:516
 TEveQuadSetGL.cxx:517
 TEveQuadSetGL.cxx:518
 TEveQuadSetGL.cxx:519
 TEveQuadSetGL.cxx:520
 TEveQuadSetGL.cxx:521
 TEveQuadSetGL.cxx:522
 TEveQuadSetGL.cxx:523