Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-21 10:11:22

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 
0004 #ifndef QOPENGLFRAMEBUFFEROBJECT_H
0005 #define QOPENGLFRAMEBUFFEROBJECT_H
0006 
0007 #include <QtOpenGL/qtopenglglobal.h>
0008 
0009 #include <QtGui/qopengl.h>
0010 #include <QtGui/qpaintdevice.h>
0011 
0012 #include <QtCore/qscopedpointer.h>
0013 
0014 #if defined(Q_QDOC)
0015 #undef GLuint
0016 typedef unsigned int GLuint;
0017 #undef GLenum
0018 typedef unsigned int GLenum;
0019 #undef GL_TEXTURE_2D
0020 #define GL_TEXTURE_2D 0x0DE1
0021 #undef GLbitfield
0022 typedef unsigned int GLbitfield;
0023 #endif
0024 
0025 QT_BEGIN_NAMESPACE
0026 
0027 class QOpenGLFramebufferObjectPrivate;
0028 class QOpenGLFramebufferObjectFormat;
0029 
0030 class Q_OPENGL_EXPORT QOpenGLFramebufferObject
0031 {
0032     Q_DECLARE_PRIVATE(QOpenGLFramebufferObject)
0033 public:
0034     enum Attachment {
0035         NoAttachment,
0036         CombinedDepthStencil,
0037         Depth
0038     };
0039 
0040     explicit QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D);
0041     QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D);
0042 
0043     QOpenGLFramebufferObject(const QSize &size, Attachment attachment,
0044                          GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0);
0045     QOpenGLFramebufferObject(int width, int height, Attachment attachment,
0046                          GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0);
0047 
0048     QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format);
0049     QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format);
0050 
0051     virtual ~QOpenGLFramebufferObject();
0052 
0053     void addColorAttachment(const QSize &size, GLenum internalFormat = 0);
0054     void addColorAttachment(int width, int height, GLenum internalFormat = 0);
0055 
0056     QOpenGLFramebufferObjectFormat format() const;
0057 
0058     bool isValid() const;
0059     bool isBound() const;
0060     bool bind();
0061     bool release();
0062 
0063     int width() const { return size().width(); }
0064     int height() const { return size().height(); }
0065 
0066     GLuint texture() const;
0067     QList<GLuint> textures() const;
0068 
0069     GLuint takeTexture();
0070     GLuint takeTexture(int colorAttachmentIndex);
0071 
0072     QSize size() const;
0073     QList<QSize> sizes() const;
0074 
0075     QImage toImage(bool flipped = true) const;
0076     QImage toImage(bool flipped, int colorAttachmentIndex) const;
0077 
0078     Attachment attachment() const;
0079     void setAttachment(Attachment attachment);
0080 
0081     GLuint handle() const;
0082 
0083     static bool bindDefault();
0084 
0085     static bool hasOpenGLFramebufferObjects();
0086 
0087     static bool hasOpenGLFramebufferBlit();
0088 
0089     enum FramebufferRestorePolicy {
0090         DontRestoreFramebufferBinding,
0091         RestoreFramebufferBindingToDefault,
0092         RestoreFrameBufferBinding
0093     };
0094 
0095     static void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect,
0096                                 QOpenGLFramebufferObject *source, const QRect &sourceRect,
0097                                 GLbitfield buffers,
0098                                 GLenum filter,
0099                                 int readColorAttachmentIndex,
0100                                 int drawColorAttachmentIndex,
0101                                 FramebufferRestorePolicy restorePolicy);
0102     static void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect,
0103                                 QOpenGLFramebufferObject *source, const QRect &sourceRect,
0104                                 GLbitfield buffers,
0105                                 GLenum filter,
0106                                 int readColorAttachmentIndex,
0107                                 int drawColorAttachmentIndex);
0108     static void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect,
0109                                 QOpenGLFramebufferObject *source, const QRect &sourceRect,
0110                                 GLbitfield buffers = GL_COLOR_BUFFER_BIT,
0111                                 GLenum filter = GL_NEAREST);
0112     static void blitFramebuffer(QOpenGLFramebufferObject *target,
0113                                 QOpenGLFramebufferObject *source,
0114                                 GLbitfield buffers = GL_COLOR_BUFFER_BIT,
0115                                 GLenum filter = GL_NEAREST);
0116 
0117 private:
0118     Q_DISABLE_COPY(QOpenGLFramebufferObject)
0119     QScopedPointer<QOpenGLFramebufferObjectPrivate> d_ptr;
0120     friend class QOpenGLPaintDevice;
0121     friend class QOpenGLFBOGLPaintDevice;
0122 };
0123 
0124 class QOpenGLFramebufferObjectFormatPrivate;
0125 class Q_OPENGL_EXPORT QOpenGLFramebufferObjectFormat
0126 {
0127 public:
0128     QOpenGLFramebufferObjectFormat();
0129     QOpenGLFramebufferObjectFormat(const QOpenGLFramebufferObjectFormat &other);
0130     QOpenGLFramebufferObjectFormat &operator=(const QOpenGLFramebufferObjectFormat &other);
0131     ~QOpenGLFramebufferObjectFormat();
0132 
0133     void setSamples(int samples);
0134     int samples() const;
0135 
0136     void setMipmap(bool enabled);
0137     bool mipmap() const;
0138 
0139     void setAttachment(QOpenGLFramebufferObject::Attachment attachment);
0140     QOpenGLFramebufferObject::Attachment attachment() const;
0141 
0142     void setTextureTarget(GLenum target);
0143     GLenum textureTarget() const;
0144 
0145     void setInternalTextureFormat(GLenum internalTextureFormat);
0146     GLenum internalTextureFormat() const;
0147 
0148     bool operator==(const QOpenGLFramebufferObjectFormat& other) const;
0149     bool operator!=(const QOpenGLFramebufferObjectFormat& other) const;
0150 
0151 private:
0152     QOpenGLFramebufferObjectFormatPrivate *d;
0153 
0154     void detach();
0155 };
0156 
0157 QT_END_NAMESPACE
0158 
0159 #endif // QOPENGLFRAMEBUFFEROBJECT_H