source: trunk/src/opengl/qglframebufferobject_p.h@ 1023

Last change on this file since 1023 was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

  • Property svn:eol-style set to native
File size: 4.9 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtOpenGL module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef QGLFRAMEBUFFEROBJECT_P_H
43#define QGLFRAMEBUFFEROBJECT_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
56QT_BEGIN_NAMESPACE
57
58QT_BEGIN_INCLUDE_NAMESPACE
59
60#include <qglframebufferobject.h>
61#include <private/qglpaintdevice_p.h>
62#include <private/qgl_p.h>
63
64QT_END_INCLUDE_NAMESPACE
65
66#ifndef QT_OPENGL_ES
67#define DEFAULT_FORMAT GL_RGBA8
68#else
69#define DEFAULT_FORMAT GL_RGBA
70#endif
71
72class QGLFramebufferObjectFormatPrivate
73{
74public:
75 QGLFramebufferObjectFormatPrivate()
76 : ref(1),
77 samples(0),
78 attachment(QGLFramebufferObject::NoAttachment),
79 target(GL_TEXTURE_2D),
80 internal_format(DEFAULT_FORMAT)
81 {
82 }
83 QGLFramebufferObjectFormatPrivate
84 (const QGLFramebufferObjectFormatPrivate *other)
85 : ref(1),
86 samples(other->samples),
87 attachment(other->attachment),
88 target(other->target),
89 internal_format(other->internal_format)
90 {
91 }
92 bool equals(const QGLFramebufferObjectFormatPrivate *other)
93 {
94 return samples == other->samples &&
95 attachment == other->attachment &&
96 target == other->target &&
97 internal_format == other->internal_format;
98 }
99
100 QAtomicInt ref;
101 int samples;
102 QGLFramebufferObject::Attachment attachment;
103 GLenum target;
104 GLenum internal_format;
105};
106
107class QGLFBOGLPaintDevice : public QGLPaintDevice
108{
109public:
110 virtual QPaintEngine* paintEngine() const {return fbo->paintEngine();}
111 virtual QSize size() const {return fbo->size();}
112 virtual QGLContext* context() const;
113 virtual QGLFormat format() const {return fboFormat;}
114 virtual bool alphaRequested() const { return reqAlpha; }
115
116 void setFBO(QGLFramebufferObject* f,
117 QGLFramebufferObject::Attachment attachment);
118
119private:
120 QGLFramebufferObject* fbo;
121 QGLFormat fboFormat;
122 bool wasBound;
123 bool reqAlpha;
124};
125
126class QGLFramebufferObjectPrivate
127{
128public:
129 QGLFramebufferObjectPrivate() : fbo_guard(0), texture(0), depth_buffer(0), stencil_buffer(0)
130 , color_buffer(0), valid(false), engine(0) {}
131 ~QGLFramebufferObjectPrivate() {}
132
133 void init(QGLFramebufferObject *q, const QSize& sz,
134 QGLFramebufferObject::Attachment attachment,
135 GLenum internal_format, GLenum texture_target, GLint samples = 0);
136 bool checkFramebufferStatus() const;
137 QGLSharedResourceGuard fbo_guard;
138 GLuint texture;
139 GLuint depth_buffer;
140 GLuint stencil_buffer;
141 GLuint color_buffer;
142 GLenum target;
143 QSize size;
144 QGLFramebufferObjectFormat format;
145 uint valid : 1;
146 QGLFramebufferObject::Attachment fbo_attachment;
147 mutable QPaintEngine *engine;
148 QGLFBOGLPaintDevice glDevice;
149
150 inline GLuint fbo() const { return fbo_guard.id(); }
151};
152
153
154QT_END_NAMESPACE
155
156#endif // QGLFRAMEBUFFEROBJECT_P_H
Note: See TracBrowser for help on using the repository browser.