Qt 4.8
qglpixelbuffer_p.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtOpenGL module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #ifndef QGLPIXELBUFFER_P_H
43 #define QGLPIXELBUFFER_P_H
44 
45 //
46 // W A R N I N G
47 // -------------
48 //
49 // This file is not part of the Qt API. It exists for the convenience
50 // of the QLibrary class. This header file may change from
51 // version to version without notice, or even be removed.
52 //
53 // We mean it.
54 //
55 
57 
59 #include "QtOpenGL/qglpixelbuffer.h"
60 #include <private/qgl_p.h>
61 #include <private/qglpaintdevice_p.h>
62 
63 #if defined(Q_WS_X11) && defined(QT_NO_EGL)
64 #include <GL/glx.h>
65 
66 // The below is needed to for compilation on HPUX, due to broken GLX
67 // headers. Some of the systems define GLX_VERSION_1_3 without
68 // defining the GLXFBConfig structure, which is wrong.
69 #if defined (Q_OS_HPUX) && defined(QT_DEFINE_GLXFBCONFIG_STRUCT)
70 typedef unsigned long GLXPbuffer;
71 
72 struct GLXFBConfig {
73  int visualType;
74  int transparentType;
75  /* colors are floats scaled to ints */
76  int transparentRed, transparentGreen, transparentBlue, transparentAlpha;
77  int transparentIndex;
78 
79  int visualCaveat;
80 
81  int associatedVisualId;
82  int screen;
83 
84  int drawableType;
85  int renderType;
86 
87  int maxPbufferWidth, maxPbufferHeight, maxPbufferPixels;
88  int optimalPbufferWidth, optimalPbufferHeight; /* for SGIX_pbuffer */
89 
90  int visualSelectGroup; /* visuals grouped by select priority */
91 
92  unsigned int id;
93 
94  GLboolean rgbMode;
95  GLboolean colorIndexMode;
96  GLboolean doubleBufferMode;
97  GLboolean stereoMode;
98  GLboolean haveAccumBuffer;
99  GLboolean haveDepthBuffer;
100  GLboolean haveStencilBuffer;
101 
102  /* The number of bits present in various buffers */
103  GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
106  GLint indexBits;
107  GLint redBits, greenBits, blueBits, alphaBits;
108  GLuint redMask, greenMask, blueMask, alphaMask;
109 
110  GLuint multiSampleSize; /* Number of samples per pixel (0 if no ms) */
111 
112  GLuint nMultiSampleBuffers; /* Number of available ms buffers */
113  GLint maxAuxBuffers;
114 
115  /* frame buffer level */
116  GLint level;
117 
118  /* color ranges (for SGI_color_range) */
119  GLboolean extendedRange;
120  GLdouble minRed, maxRed;
121  GLdouble minGreen, maxGreen;
122  GLdouble minBlue, maxBlue;
123  GLdouble minAlpha, maxAlpha;
124 };
125 
126 #endif // Q_OS_HPUX
127 
128 #elif defined(Q_WS_WIN)
129 DECLARE_HANDLE(HPBUFFERARB);
130 #elif !defined(QT_NO_EGL)
131 #include <QtGui/private/qegl_p.h>
132 #endif
134 
135 class QEglContext;
136 
137 
139 {
140 public:
141  virtual QPaintEngine* paintEngine() const {return pbuf->paintEngine();}
142  virtual QSize size() const {return pbuf->size();}
143  virtual QGLContext* context() const;
144  virtual void endPaint();
145  void setPBuffer(QGLPixelBuffer* pb);
146 private:
148 };
149 
152 public:
153  QGLPixelBufferPrivate(QGLPixelBuffer *q) : q_ptr(q), invalid(true), qctx(0), pbuf(0), ctx(0)
154  {
155 #ifdef Q_WS_WIN
156  dc = 0;
157 #elif defined(Q_WS_MACX)
158  share_ctx = 0;
159 #endif
160  }
161  bool init(const QSize &size, const QGLFormat &f, QGLWidget *shareWidget);
162  void common_init(const QSize &size, const QGLFormat &f, QGLWidget *shareWidget);
163  bool cleanup();
164 
166  bool invalid;
170 
174 
175 #if defined(Q_WS_X11) && defined(QT_NO_EGL)
176  GLXPbuffer pbuf;
177  GLXContext ctx;
178 #elif defined(Q_WS_WIN)
179  HDC dc;
181 #if !defined(QT_OPENGL_ES)
182  HPBUFFERARB pbuf;
183  HGLRC ctx;
184 #endif
185 #elif defined(Q_WS_MACX)
186 # ifdef QT_MAC_USE_COCOA
187  void *pbuf;
188  void *ctx;
189  void *share_ctx;
190 # else
191  AGLPbuffer pbuf;
192  AGLContext ctx;
193  AGLContext share_ctx;
194 # endif
195 #endif
196 #ifndef QT_NO_EGL
197  EGLSurface pbuf;
200 #elif defined(Q_WS_QPA)
201  //stubs
202  void *pbuf;
203  void *ctx;
204 #endif
205 };
206 
208 
209 #endif // QGLPIXELBUFFER_P_H
virtual QSize size() const
virtual QPaintEngine * paintEngine() const
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
QPointer< QGLWidget > req_shareWidget
#define QT_END_INCLUDE_NAMESPACE
This macro is equivalent to QT_BEGIN_NAMESPACE.
Definition: qglobal.h:92
static GLint stencilBits()
Definition: quikitwindow.mm:56
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
The QGLFormat class specifies the display format of an OpenGL rendering context.
Definition: qgl.h:175
The QGLContext class encapsulates an OpenGL rendering context.
Definition: qgl.h:310
static bool init
The QGLPixelBuffer class encapsulates an OpenGL pbuffer.
The QPaintEngine class provides an abstract definition of how QPainter draws to a given device on a g...
Definition: qpaintengine.h:90
QGLPixelBufferPrivate(QGLPixelBuffer *q)
The QGLWidget class is a widget for rendering OpenGL graphics.
Definition: qgl.h:474
QGLPixelBuffer * q_ptr
#define Q_DECLARE_PUBLIC(Class)
Definition: qglobal.h:2477
#define ctx
Definition: qgl.cpp:6094
static void cleanup()
Definition: qpicture.cpp:1508
typedef GLint
Definition: glfunctions.h:67
#define QT_BEGIN_INCLUDE_NAMESPACE
This macro is equivalent to QT_END_NAMESPACE.
Definition: qglobal.h:91
The QSize class defines the size of a two-dimensional object using integer point precision.
Definition: qsize.h:53
QGLPBufferGLPaintDevice glDevice
typedef GLboolean
Definition: glfunctions.h:67
DECLARE_HANDLE(HPBUFFERARB)
static GLint depthBits()
Definition: quikitwindow.mm:67