26#include "RConfigure.h"
27#include "TGLIncludes.h"
62 gROOT->ProcessLineFast(
Form(
"((TGLContext *)0x%zx)->SetContext((TGLWidget *)0x%zx, (TGLContext *)0x%zx)",
91 Warning(
"TGLContext::GlewInit",
"GLEW initalization failed.");
93 Info(
"TGLContext::GlewInit",
"GLEW initalization successful.");
126 Error(
"TGLContext::SetContext",
"SetContext must be called only from ctor");
137 Error(
"TGLContext::SetContext",
"GetWindowDC failed");
138 throw std::runtime_error(
"GetWindowDC failed");
145 Error(
"TGLContext::SetContext",
"Context sharing failed!");
146 throw std::runtime_error(
"Context sharing failed");
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%zx)->MakeCurrent()", (
size_t)
this)));
206 Error(
"TGLContext::SwapBuffers",
"This context is invalid.");
211 gROOT->ProcessLineFast(
Form(
"((TGLContext *)0x%zx)->SwapBuffers()", (
size_t)
this));
230 gROOT->ProcessLineFast(
Form(
"((TGLContext *)0x%zx)->Release()", (
size_t)
this));
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");
336 fPimpl = std::make_unique<TGLContextPrivate>();
337 Display *
dpy =
static_cast<Display *
>(
widget->GetInnerData().first);
344 Error(
"TGLContext::SetContext",
"glXCreateContext failed!");
345 throw std::runtime_error(
"glXCreateContext failed!");
365 Error(
"TGLContext::MakeCurrent",
"This context is invalid.");
369 if (
fPimpl->fWindowID != 0) {
398 Error(
"TGLContext::SwapCurrent",
"This context is invalid.");
402 if (
fPimpl->fWindowID != 0)
471fFontManager(nullptr), fCnt(0), fClientCnt(0)
489 fCtxs.push_back(ctx);
497 CtxList_t::iterator i = std::find(
fCtxs.begin(),
fCtxs.end(), ctx);
498 if (i !=
fCtxs.end())
506 Error(
"TGLContextIdentity::Release",
"unregistered context.");
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
bool Bool_t
Boolean (0=false, 1=true) (bool)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize wid
Int_t gDebug
Global variable setting the debug level. Set to 0 to disable, increase it in steps of 1 to increase t...
R__EXTERN TVirtualMutex * gROOTMutex
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
#define R__LOCKGUARD(mutex)
Identifier of a shared GL-context.
virtual ~TGLContextIdentity()
Destructor.
static TGLContextIdentity * GetDefaultIdentity()
Get identity of a default Gl context. Static.
void CheckDestroy()
Private function called when reference count is reduced.
TGLContextIdentity()
Constructor.
std::pair< UInt_t, Int_t > DLRange_t
TGLFontManager * fFontManager
static TGLContextIdentity * fgDefaultIdentity
void DeleteGLResources()
Delete GL resources registered for destruction.
void Release(TGLContext *ctx)
Remove context ctx from the list of references.
DLTrash_t::const_iterator DLTrashIt_t
static TGLContextIdentity * GetCurrent()
Find identitfy of current context. Static.
TGLFontManager * GetFontManager()
Get the free-type font-manager associated with this context-identity.
void AddRef(TGLContext *ctx)
Add context ctx to the list of references.
void RegisterDLNameRangeToWipe(UInt_t base, Int_t size)
Remember dl range for deletion in next MakeCurrent or dtor execution.
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 TGLContext * GetCurrentContext()
Ask wgl what HGLRC is current and look up corresponding TGLContext.
This class encapsulates window-system specific information about a GL-context and alows their proper ...
void Release()
Make the context invalid and (do thread switch, if needed) free resources.
void SwapBuffers()
If context is valid (TGLPaintDevice, for which context was created still exists), swap buffers (in ca...
TGLContextIdentity * GetIdentity() const
We can have several shared contexts, and gl-scene wants to know, if some context (defined by its iden...
static Bool_t fgGlewInitDone
std::unique_ptr< TGLContextPrivate > fPimpl
TGLContext(TGLWidget *glWidget, Bool_t shareDefault=kTRUE, const TGLContext *shareList=nullptr)
TGLContext ctor "from" TGLWidget.
virtual ~TGLContext()
TGLContext dtor.
Bool_t MakeCurrent()
If context is valid (TGLPaintDevice, for which context was created still exists), make it current.
void SetContext(TGLWidget *widget, const TGLContext *shareList)
X11 gl-context creation.
static void GlewInit()
Initialize GLEW - static private function.
Bool_t ClearCurrent()
Reset current context.
TGLContextIdentity * fIdentity
static TGLContext * GetCurrent()
Ask TGLContextPrivate to lookup context in its internal map.
A FreeType GL font manager.
void ClearFontTrash()
Delete FTFFont objects registered for destruction.
virtual void AddContext(TGLContext *ctx)=0
virtual void RemoveContext(TGLContext *ctx)=0
TOneArgGuard< Func, Arg > make_guard(Func f, Arg a)