diff -r 000000000000 -r 1918ee327afb src/opengl/qglpixelbuffer_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/opengl/qglpixelbuffer_p.h Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,208 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGLPIXELBUFFER_P_H +#define QGLPIXELBUFFER_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the QLibrary class. This header file may change from +// version to version without notice, or even be removed. +// +// We mean it. +// + +QT_BEGIN_NAMESPACE + +QT_BEGIN_INCLUDE_NAMESPACE +#include "QtOpenGL/qglpixelbuffer.h" +#include +#include + +#if defined(Q_WS_X11) && !defined(QT_OPENGL_ES) +#include + +// The below is needed to for compilation on HPUX, due to broken GLX +// headers. Some of the systems define GLX_VERSION_1_3 without +// defining the GLXFBConfig structure, which is wrong. +#if defined (Q_OS_HPUX) && defined(QT_DEFINE_GLXFBCONFIG_STRUCT) +typedef unsigned long GLXPbuffer; + +struct GLXFBConfig { + int visualType; + int transparentType; + /* colors are floats scaled to ints */ + int transparentRed, transparentGreen, transparentBlue, transparentAlpha; + int transparentIndex; + + int visualCaveat; + + int associatedVisualId; + int screen; + + int drawableType; + int renderType; + + int maxPbufferWidth, maxPbufferHeight, maxPbufferPixels; + int optimalPbufferWidth, optimalPbufferHeight; /* for SGIX_pbuffer */ + + int visualSelectGroup; /* visuals grouped by select priority */ + + unsigned int id; + + GLboolean rgbMode; + GLboolean colorIndexMode; + GLboolean doubleBufferMode; + GLboolean stereoMode; + GLboolean haveAccumBuffer; + GLboolean haveDepthBuffer; + GLboolean haveStencilBuffer; + + /* The number of bits present in various buffers */ + GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits; + GLint depthBits; + GLint stencilBits; + GLint indexBits; + GLint redBits, greenBits, blueBits, alphaBits; + GLuint redMask, greenMask, blueMask, alphaMask; + + GLuint multiSampleSize; /* Number of samples per pixel (0 if no ms) */ + + GLuint nMultiSampleBuffers; /* Number of available ms buffers */ + GLint maxAuxBuffers; + + /* frame buffer level */ + GLint level; + + /* color ranges (for SGI_color_range) */ + GLboolean extendedRange; + GLdouble minRed, maxRed; + GLdouble minGreen, maxGreen; + GLdouble minBlue, maxBlue; + GLdouble minAlpha, maxAlpha; +}; + +#endif // Q_OS_HPUX + +#elif defined(Q_WS_WIN) +DECLARE_HANDLE(HPBUFFERARB); +#elif defined(QT_OPENGL_ES_2) +#include +#elif defined(QT_OPENGL_ES) +#include +#endif +QT_END_INCLUDE_NAMESPACE + +class QEglContext; + + +class QGLPBufferGLPaintDevice : public QGLPaintDevice +{ +public: + virtual QPaintEngine* paintEngine() const {return pbuf->paintEngine();} + virtual QSize size() const {return pbuf->size();} + virtual QGLContext* context() const; + virtual void endPaint(); + void setPBuffer(QGLPixelBuffer* pb); +private: + QGLPixelBuffer* pbuf; +}; + +class QGLPixelBufferPrivate { + Q_DECLARE_PUBLIC(QGLPixelBuffer) +public: + QGLPixelBufferPrivate(QGLPixelBuffer *q) : q_ptr(q), invalid(true), qctx(0), pbuf(0), ctx(0) + { + QGLExtensions::init(); +#ifdef Q_WS_WIN + dc = 0; +#elif defined(Q_WS_MACX) + share_ctx = 0; +#endif + } + bool init(const QSize &size, const QGLFormat &f, QGLWidget *shareWidget); + void common_init(const QSize &size, const QGLFormat &f, QGLWidget *shareWidget); + bool cleanup(); + + QGLPixelBuffer *q_ptr; + bool invalid; + QGLContext *qctx; + QGLPBufferGLPaintDevice glDevice; + QGLFormat format; + + QGLFormat req_format; + QPointer req_shareWidget; + QSize req_size; + +#if defined(Q_WS_X11) && !defined(QT_OPENGL_ES) + GLXPbuffer pbuf; + GLXContext ctx; +#elif defined(Q_WS_WIN) + HDC dc; + bool has_render_texture :1; +#if !defined(QT_OPENGL_ES) + HPBUFFERARB pbuf; + HGLRC ctx; +#endif +#elif defined(Q_WS_MACX) +# ifdef QT_MAC_USE_COCOA + void *pbuf; + void *ctx; + void *share_ctx; +# else + AGLPbuffer pbuf; + AGLContext ctx; + AGLContext share_ctx; +# endif +#endif +#if defined(QT_OPENGL_ES) + EGLSurface pbuf; + QEglContext *ctx; + int textureFormat; +#endif +}; + +QT_END_NAMESPACE + +#endif // QGLPIXELBUFFER_P_H