25 #include "RConfigure.h"    62       gROOT->ProcessLineFast(
Form(
"((TGLContext *)0x%lx)->SetContext((TGLWidget *)0x%lx, (TGLContext *)0x%lx)",
    89       GLenum status = glewInit();
    90       if (status != GLEW_OK)
    91          Warning(
"TGLContext::GlewInit", 
"GLEW initalization failed.");
    93          Info(
"TGLContext::GlewInit", 
"GLEW initalization successful.");
   104    struct LayoutCompatible_t {
   108       unsigned char  fDummy2;
   110       unsigned short fDummy4;
   111       unsigned short fDummy5;
   126       Error(
"TGLContext::SetContext", 
"SetContext must be called only from ctor");
   131    LayoutCompatible_t *trick =
   132       reinterpret_cast<LayoutCompatible_t *
>(widget->
GetId());
   133    HWND hWND = *trick->fPHwnd;
   134    HDC  hDC  = GetWindowDC(hWND);
   137       Error(
"TGLContext::SetContext", 
"GetWindowDC failed");
   138       throw std::runtime_error(
"GetWindowDC failed");
   142    if (HGLRC glContext = wglCreateContext(hDC)) {
   143       if (shareList && !wglShareLists(shareList->
fPimpl->fGLContext, glContext)) {
   144          wglDeleteContext(glContext);
   145          Error(
"TGLContext::SetContext", 
"Context sharing failed!");
   146          throw std::runtime_error(
"Context sharing failed");
   150       fPimpl->fGLContext = glContext;
   152       Error(
"TGLContext::SetContext", 
"wglCreateContext failed");
   153       throw std::runtime_error(
"wglCreateContext failed");
   171       Error(
"TGLContext::MakeCurrent", 
"This context is invalid.");
   176       return Bool_t(
gROOT->ProcessLineFast(
Form(
"((TGLContext *)0x%lx)->MakeCurrent()", 
this)));
   196    return wglMakeCurrent(0, 0);
   206       Error(
"TGLContext::SwapBuffers", 
"This context is invalid.");
   211       gROOT->ProcessLineFast(
Form(
"((TGLContext *)0x%lx)->SwapBuffers()", 
this));
   217          wglSwapLayerBuffers(
fPimpl->fHDC, WGL_SWAP_MAIN_PLANE);
   230       gROOT->ProcessLineFast(
Form(
"((TGLContext *)0x%lx)->Release()", 
this));
   240    wglDeleteContext(
fPimpl->fGLContext);
   244 #elif defined(R__HAS_COCOA)   252       Error(
"TGLContext::SetContext", 
"SetContext must be called only from ctor");
   273       Error(
"TGLContext::MakeCurrent", 
"This context is invalid.");
   303       Error(
"TGLContext::SwapBuffers", 
"This context is invalid.");
   332       Error(
"TGLContext::SetContext", 
"SetContext must be called only from ctor");
   337    Display *dpy = 
static_cast<Display *
>(widget->
GetInnerData().first);
   338    XVisualInfo *visInfo = 
static_cast<XVisualInfo *
>(widget->
GetInnerData().second);
   340    GLXContext glCtx = shareList ? glXCreateContext(dpy, visInfo, shareList->
fPimpl->fGLContext, 
True)
   341                                 : glXCreateContext(dpy, visInfo, None, 
True);
   344       Error(
"TGLContext::SetContext", 
"glXCreateContext failed!");
   345       throw std::runtime_error(
"glXCreateContext failed!");
   349    fPimpl->fVisualInfo = visInfo;
   350    fPimpl->fGLContext = glCtx;
   365       Error(
"TGLContext::MakeCurrent", 
"This context is invalid.");
   369    if (
fPimpl->fWindowID != 0) {
   388    return glXMakeCurrent(
fPimpl->fDpy, None, 0);
   398       Error(
"TGLContext::SwapCurrent", 
"This context is invalid.");
   402    if (
fPimpl->fWindowID != 0)
   472 fFontManager(0), fCnt(0), fClientCnt(0)
   490    fCtxs.push_back(ctx);
   498    CtxList_t::iterator i = std::find(
fCtxs.begin(), 
fCtxs.end(), ctx);
   499    if (i != 
fCtxs.end())
   507       Error(
"TGLContextIdentity::Release", 
"unregistered context.");
   527          glDeleteLists(it->first, it->second);
 static TGLContext * GetDefaultContextAny()
Get the first GL context with the default identity. 
 
static void RegisterContext(TGLContext *ctx)
Register gl-context to find it later as current (GetCurrentContext) 
 
static void RemoveContext(TGLContext *ctx)
Un-register deleted context. 
 
static TGLContextIdentity * GetDefaultIdentity()
Get identity of a default Gl context. Static. 
 
TGLContextIdentity * GetIdentity() const
We can have several shared contexts, and gl-scene wants to know, if some context (defined by its iden...
 
std::pair< UInt_t, Int_t > DLRange_t
 
Identifier of a shared GL-context. 
 
R__EXTERN TVirtualMutex * gROOTMutex
 
DLTrash_t::const_iterator DLTrashIt_t
 
virtual void RemoveContext(TGLContext *ctx)=0
 
TGLContextIdentity * fIdentity
 
void CheckDestroy()
Private function called when reference count is reduced. 
 
void Release(TGLContext *ctx)
Remove context ctx from the list of references. 
 
virtual void AddContext(TGLContext *ctx)=0
 
Bool_t MakeCurrent()
If context is valid (TGLPaintDevice, for which context was created still exists), make it current...
 
void Info(const char *location, const char *msgfmt,...)
 
void Error(const char *location, const char *msgfmt,...)
 
virtual ~TGLContextIdentity()
Destructor. 
 
static TGLContextIdentity * GetCurrent()
Find identitfy of current context. Static. 
 
TGLContext(TGLWidget *glWidget, Bool_t shareDefault=kTRUE, const TGLContext *shareList=0)
TGLContext ctor "from" TGLWidget. 
 
TGLFontManager * fFontManager
 
TOneArgGuard< Func, Arg > make_guard(Func f, Arg a)
 
char * Form(const char *fmt,...)
 
void DeleteGLResources()
Delete GL resources registered for destruction. 
 
static TGLContext * GetCurrentContext()
Ask wgl what HGLRC is current and look up corresponding TGLContext. 
 
void Warning(const char *location, const char *msgfmt,...)
 
static void GlewInit()
Initialize GLEW - static private function. 
 
TGLFontManager * GetFontManager()
Get the free-type font-manager associated with this context-identity. 
 
void SetContext(TGLWidget *widget, const TGLContext *shareList)
X11 gl-context creation. 
 
void SwapBuffers()
If context is valid (TGLPaintDevice, for which context was created still exists), swap buffers (in ca...
 
This class encapsulates window-system specific information about a GL-context and alows their proper ...
 
Bool_t ClearCurrent()
Reset current context. 
 
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
 
#define R__LOCKGUARD(mutex)
 
void AddRef(TGLContext *ctx)
Add context ctx to the list of references. 
 
TGLContextIdentity()
Constructor. 
 
void Release()
Make the context invalid and (do thread switch, if needed) free resources. 
 
static TGLContext * GetCurrent()
Ask TGLContextPrivate to lookup context in its internal map. 
 
A FreeType GL font manager. 
 
static Bool_t fgGlewInitDone
 
static TGLContextIdentity * fgDefaultIdentity
 
void ClearFontTrash()
Delete FTFFont objects registered for destruction. 
 
void RegisterDLNameRangeToWipe(UInt_t base, Int_t size)
Remember dl range for deletion in next MakeCurrent or dtor execution. 
 
virtual ~TGLContext()
TGLContext dtor. 
 
std::unique_ptr< TGLContextPrivate > fPimpl