// @(#)root/base:$Id$
// Author: Valery Fine(fine@vxcern.cern.ch)   05/03/97

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TVirtualGL                                                           //
//                                                                      //
// The TVirtualGL class is an abstract base class defining the          //
// OpenGL interface protocol. All interactions with OpenGL should be    //
// done via the global pointer gVirtualGL. If the OpenGL library is     //
// available this pointer is pointing to an instance of the TGLKernel   //
// class which provides the actual interface to OpenGL. Using this      //
// scheme of ABC we can use OpenGL in other parts of the framework      //
// without having to link with the OpenGL library in case we don't      //
// use the classes using OpenGL.                                        //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TVirtualGL.h"
#include "TROOT.h"
#include "TGlobal.h"


ClassImp(TGLManager)

TGLManager * (*gPtr2GLManager)() = 0;

namespace {
static struct AddPseudoGlobals {
AddPseudoGlobals() {
  // User "gCling" as synonym for "libCore static initialization has happened".
   // This code here must not trigger it.
   TGlobalMappedFunction::Add(new TGlobalMappedFunction("gGLManager", "TVirtualGL*",
                                 (TGlobalMappedFunction::GlobalFunc_t)&gGLManager));
}
} gAddPseudoGlobals;
}

//____________________________________________________________________________
TGLManager::TGLManager() : TNamed("gGLManager", "")
{
}

//____________________________________________________________________________
TGLManager *&TGLManager::Instance()
{
   // Return the global GL Manager.

   static TGLManager *instance = 0;

   if(gPtr2GLManager) {
      instance = gPtr2GLManager();
   }

   return instance;
}

ClassImp(TVirtualGLPainter)


ClassImp(TVirtualGLManip)

ClassImp(TGLPaintDevice)
 TVirtualGL.cxx:1
 TVirtualGL.cxx:2
 TVirtualGL.cxx:3
 TVirtualGL.cxx:4
 TVirtualGL.cxx:5
 TVirtualGL.cxx:6
 TVirtualGL.cxx:7
 TVirtualGL.cxx:8
 TVirtualGL.cxx:9
 TVirtualGL.cxx:10
 TVirtualGL.cxx:11
 TVirtualGL.cxx:12
 TVirtualGL.cxx:13
 TVirtualGL.cxx:14
 TVirtualGL.cxx:15
 TVirtualGL.cxx:16
 TVirtualGL.cxx:17
 TVirtualGL.cxx:18
 TVirtualGL.cxx:19
 TVirtualGL.cxx:20
 TVirtualGL.cxx:21
 TVirtualGL.cxx:22
 TVirtualGL.cxx:23
 TVirtualGL.cxx:24
 TVirtualGL.cxx:25
 TVirtualGL.cxx:26
 TVirtualGL.cxx:27
 TVirtualGL.cxx:28
 TVirtualGL.cxx:29
 TVirtualGL.cxx:30
 TVirtualGL.cxx:31
 TVirtualGL.cxx:32
 TVirtualGL.cxx:33
 TVirtualGL.cxx:34
 TVirtualGL.cxx:35
 TVirtualGL.cxx:36
 TVirtualGL.cxx:37
 TVirtualGL.cxx:38
 TVirtualGL.cxx:39
 TVirtualGL.cxx:40
 TVirtualGL.cxx:41
 TVirtualGL.cxx:42
 TVirtualGL.cxx:43
 TVirtualGL.cxx:44
 TVirtualGL.cxx:45
 TVirtualGL.cxx:46
 TVirtualGL.cxx:47
 TVirtualGL.cxx:48
 TVirtualGL.cxx:49
 TVirtualGL.cxx:50
 TVirtualGL.cxx:51
 TVirtualGL.cxx:52
 TVirtualGL.cxx:53
 TVirtualGL.cxx:54
 TVirtualGL.cxx:55
 TVirtualGL.cxx:56
 TVirtualGL.cxx:57
 TVirtualGL.cxx:58
 TVirtualGL.cxx:59
 TVirtualGL.cxx:60
 TVirtualGL.cxx:61
 TVirtualGL.cxx:62
 TVirtualGL.cxx:63