123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 | // Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#ifndef QOPENGLFRAMEBUFFEROBJECT_H#define QOPENGLFRAMEBUFFEROBJECT_H#include <QtOpenGL/qtopenglglobal.h>#include <QtGui/qopengl.h>#include <QtGui/qpaintdevice.h>#include <QtCore/qscopedpointer.h>#if defined(Q_QDOC)#undef GLuinttypedefunsigned int GLuint;#undef GLenumtypedefunsigned int GLenum;#undef GL_TEXTURE_2D#define GL_TEXTURE_2D 0x0DE1#undef GLbitfieldtypedefunsigned int GLbitfield;#endif QT_BEGIN_NAMESPACE class QOpenGLFramebufferObjectPrivate;class QOpenGLFramebufferObjectFormat;class Q_OPENGL_EXPORT QOpenGLFramebufferObject {Q_DECLARE_PRIVATE(QOpenGLFramebufferObject)public:enum Attachment { NoAttachment, CombinedDepthStencil, Depth };explicitQOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D);QOpenGLFramebufferObject(int width,int height, GLenum target = GL_TEXTURE_2D);QOpenGLFramebufferObject(const QSize &size, Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat =0);QOpenGLFramebufferObject(int width,int height, Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat =0);QOpenGLFramebufferObject(const QSize &size,const QOpenGLFramebufferObjectFormat &format);QOpenGLFramebufferObject(int width,int height,const QOpenGLFramebufferObjectFormat &format);virtual~QOpenGLFramebufferObject();voidaddColorAttachment(const QSize &size, GLenum internalFormat =0);voidaddColorAttachment(int width,int height, GLenum internalFormat =0); QOpenGLFramebufferObjectFormat format()const;boolisValid()const;boolisBound()const;boolbind();boolrelease();intwidth()const{returnsize().width(); }intheight()const{returnsize().height(); } GLuint texture()const; QList<GLuint>textures()const; GLuint takeTexture(); GLuint takeTexture(int colorAttachmentIndex); QSize size()const; QList<QSize>sizes()const; QImage toImage(bool flipped =true)const; QImage toImage(bool flipped,int colorAttachmentIndex)const; Attachment attachment()const;voidsetAttachment(Attachment attachment); GLuint handle()const;static boolbindDefault();static boolhasOpenGLFramebufferObjects();static boolhasOpenGLFramebufferBlit();enum FramebufferRestorePolicy { DontRestoreFramebufferBinding, RestoreFramebufferBindingToDefault, RestoreFrameBufferBinding };static voidblitFramebuffer(QOpenGLFramebufferObject *target,const QRect &targetRect, QOpenGLFramebufferObject *source,const QRect &sourceRect, GLbitfield buffers, GLenum filter,int readColorAttachmentIndex,int drawColorAttachmentIndex, FramebufferRestorePolicy restorePolicy);static voidblitFramebuffer(QOpenGLFramebufferObject *target,const QRect &targetRect, QOpenGLFramebufferObject *source,const QRect &sourceRect, GLbitfield buffers, GLenum filter,int readColorAttachmentIndex,int drawColorAttachmentIndex);static voidblitFramebuffer(QOpenGLFramebufferObject *target,const QRect &targetRect, QOpenGLFramebufferObject *source,const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST);static voidblitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST);private:Q_DISABLE_COPY(QOpenGLFramebufferObject) QScopedPointer<QOpenGLFramebufferObjectPrivate> d_ptr;friend class QOpenGLPaintDevice;friend class QOpenGLFBOGLPaintDevice;};class QOpenGLFramebufferObjectFormatPrivate;class Q_OPENGL_EXPORT QOpenGLFramebufferObjectFormat {public:QOpenGLFramebufferObjectFormat();QOpenGLFramebufferObjectFormat(const QOpenGLFramebufferObjectFormat &other); QOpenGLFramebufferObjectFormat &operator=(const QOpenGLFramebufferObjectFormat &other);~QOpenGLFramebufferObjectFormat();voidsetSamples(int samples);intsamples()const;voidsetMipmap(bool enabled);boolmipmap()const;voidsetAttachment(QOpenGLFramebufferObject::Attachment attachment);QOpenGLFramebufferObject::Attachment attachment()const;voidsetTextureTarget(GLenum target); GLenum textureTarget()const;voidsetInternalTextureFormat(GLenum internalTextureFormat); GLenum internalTextureFormat()const;booloperator==(const QOpenGLFramebufferObjectFormat& other)const;booloperator!=(const QOpenGLFramebufferObjectFormat& other)const;private: QOpenGLFramebufferObjectFormatPrivate *d;voiddetach();}; QT_END_NAMESPACE #endif// QOPENGLFRAMEBUFFEROBJECT_H
|