forked from root-project/root
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TX11GL.h
101 lines (79 loc) · 3.61 KB
/
TX11GL.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// @(#)root/gl:$Id$
// Author: Timur Pocheptsov 09/08/2004
/*************************************************************************
* Copyright (C) 1995-2004, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TX11GL
#define ROOT_TX11GL
//////////////////////////////////////////////////////////////////////////
// //
// TX11GL //
// //
// The TX11GL is X11 implementation of TVirtualGLImp class. //
// //
//////////////////////////////////////////////////////////////////////////
#include "TVirtualGL.h"
#if !defined(__CLING__)
#include <GL/glx.h>
#else
typedef struct _XDisplay Display;
struct XVisualInfo;
#endif
class TX11GLManager : public TGLManager {
private:
class TX11GLImpl;
TX11GLImpl *fPimpl;
public:
TX11GLManager();
~TX11GLManager();
//All public functions are TGLManager's final-overriders
//index returned can be used as a result of gVirtualX->InitWindow
Int_t InitGLWindow(Window_t winID);
//winInd is the index, returned by InitGLWindow
Int_t CreateGLContext(Int_t winInd);
//[ Off-screen rendering part
//create pixmap to read GL buffer into it,
//ctxInd is the index, returned by CreateGLContext
Bool_t AttachOffScreenDevice(Int_t ctxInd, Int_t x, Int_t y, UInt_t w, UInt_t h);
Bool_t ResizeOffScreenDevice(Int_t devInd, Int_t x, Int_t y, UInt_t w, UInt_t h);
//analog of gVirtualX->SelectWindow(fPixmapID) => gVirtualGL->SelectOffScreenDevice(fPixmapID)
void SelectOffScreenDevice(Int_t devInd);
//Index of pixmap, valid for gVirtualX
Int_t GetVirtualXInd(Int_t devInd);
//copy pixmap into window directly/by pad
void MarkForDirectCopy(Int_t devInd, Bool_t);
//Off-screen device holds sizes for glViewport
void ExtractViewport(Int_t devInd, Int_t *vp);
//Read GL buffer into pixmap
void ReadGLBuffer(Int_t devInd);
//]
//Make the gl context current
Bool_t MakeCurrent(Int_t devInd);
//Sswap buffers or copies pixmap (XCopyArea)
void Flush(Int_t ctxInd);
//Generic function for gl context and off-screen device deletion
void DeleteGLContext(Int_t devInd);
//used by viewer
Bool_t SelectManip(TVirtualGLManip *manip, const TGLCamera *camera, const TGLRect *rect, const TGLBoundingBox *sceneBox);
//
Bool_t PlotSelected(TVirtualGLPainter *plot, Int_t px, Int_t py);
char *GetPlotInfo(TVirtualGLPainter *plot, Int_t px, Int_t py);
//
void PaintSingleObject(TVirtualGLPainter *);
void PanObject(TVirtualGLPainter *o, Int_t x, Int_t y);
void PrintViewer(TVirtualViewer3D *vv);
Bool_t HighColorFormat(Int_t /*ctxInd*/){return kFALSE;}
struct TGLContext_t;
private:
Bool_t CreateGLPixmap(TGLContext_t &);
//implicit copy-ctor/assignment generation
// was already disabled by base class, but to be explicit ...
TX11GLManager(const TX11GLManager &);
TX11GLManager &operator = (const TX11GLManager &);
ClassDef(TX11GLManager, 0) //X11-specific version of TGLManager
};
#endif