glextensions.h Example File | Qt Widgets 5.12.8

- Qt 5.12
- Qt Widgets
- Boxes
- glextensions.h Example File
- Qt 5.12.8 Reference Documentation

# glextensions.h Example File

graphicsview/boxes/glextensions.h

     /****************************************************************************
     **
     ** Copyright (C) 2016 The Qt Company Ltd.
     ** Contact: https://www.qt.io/licensing/
     **
     ** This file is part of the demonstration applications of the Qt Toolkit.
     **
     ** $QT_BEGIN_LICENSE:BSD$
     ** Commercial License Usage
     ** Licensees holding valid commercial Qt licenses may use this file in
     ** accordance with the commercial license agreement provided with the
     ** Software or, alternatively, in accordance with the terms contained in
     ** a written agreement between you and The Qt Company. For licensing terms
     ** and conditions see https://www.qt.io/terms-conditions. For further
     ** information use the contact form at https://www.qt.io/contact-us.
     **
     ** BSD License Usage
     ** Alternatively, you may use this file under the terms of the BSD license
     ** as follows:
     **
     ** "Redistribution and use in source and binary forms, with or without
     ** modification, are permitted provided that the following conditions are
     ** met:
     **   * Redistributions of source code must retain the above copyright
     **     notice, this list of conditions and the following disclaimer.
     **   * Redistributions in binary form must reproduce the above copyright
     **     notice, this list of conditions and the following disclaimer in
     **     the documentation and/or other materials provided with the
     **     distribution.
     **   * Neither the name of The Qt Company Ltd nor the names of its
     **     contributors may be used to endorse or promote products derived
     **     from this software without specific prior written permission.
     **
     **
     ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
     **
     ** $QT_END_LICENSE$
     **
     ****************************************************************************/

     #ifndef GLEXTENSIONS_H
     #define GLEXTENSIONS_H

     #include <QtOpenGL>

     /*
     Functions resolved:

     glGenFramebuffersEXT
     glGenRenderbuffersEXT
     glBindRenderbufferEXT
     glRenderbufferStorageEXT
     glDeleteFramebuffersEXT
     glDeleteRenderbuffersEXT
     glBindFramebufferEXT
     glFramebufferTexture2DEXT
     glFramebufferRenderbufferEXT
     glCheckFramebufferStatusEXT

     glActiveTexture
     glTexImage3D

     glGenBuffers
     glBindBuffer
     glBufferData
     glDeleteBuffers
     glMapBuffer
     glUnmapBuffer
     */

     #ifndef APIENTRY
     # define APIENTRY
     #endif
     #ifndef APIENTRYP
     # define APIENTRYP APIENTRY *
     #endif

     #ifndef GL_VERSION_1_2
     #define GL_TEXTURE_3D 0x806F
     #define GL_TEXTURE_WRAP_R 0x8072
     #define GL_CLAMP_TO_EDGE 0x812F
     #define GL_BGRA 0x80E1
     #endif

     #ifndef GL_VERSION_1_3
     #define GL_TEXTURE0 0x84C0
     #define GL_TEXTURE1 0x84C1
     #define GL_TEXTURE2 0x84C2
     #define GL_TEXTURE_CUBE_MAP 0x8513
     #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
     //#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
     //#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
     //#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
     //#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
     //#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
     #endif

     #ifndef GL_ARB_vertex_buffer_object
     typedef ptrdiff_t GLsizeiptrARB;
     #endif

     #ifndef GL_VERSION_1_5
     #define GL_ARRAY_BUFFER 0x8892
     #define GL_ELEMENT_ARRAY_BUFFER 0x8893
     #define GL_READ_WRITE 0x88BA
     #define GL_STATIC_DRAW 0x88E4
     #endif

     #ifndef GL_EXT_framebuffer_object
     #define GL_RENDERBUFFER_EXT 0x8D41
     #define GL_FRAMEBUFFER_EXT 0x8D40
     #define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5
     #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
     #define GL_DEPTH_ATTACHMENT_EXT 0x8D00
     #endif

     typedef void (APIENTRY *_glGenFramebuffersEXT) (GLsizei, GLuint *);
     typedef void (APIENTRY *_glGenRenderbuffersEXT) (GLsizei, GLuint *);
     typedef void (APIENTRY *_glBindRenderbufferEXT) (GLenum, GLuint);
     typedef void (APIENTRY *_glRenderbufferStorageEXT) (GLenum, GLenum, GLsizei, GLsizei);
     typedef void (APIENTRY *_glDeleteFramebuffersEXT) (GLsizei, const GLuint*);
     typedef void (APIENTRY *_glDeleteRenderbuffersEXT) (GLsizei, const GLuint*);
     typedef void (APIENTRY *_glBindFramebufferEXT) (GLenum, GLuint);
     typedef void (APIENTRY *_glFramebufferTexture2DEXT) (GLenum, GLenum, GLenum, GLuint, GLint);
     typedef void (APIENTRY *_glFramebufferRenderbufferEXT) (GLenum, GLenum, GLenum, GLuint);
     typedef GLenum (APIENTRY *_glCheckFramebufferStatusEXT) (GLenum);

     typedef void (APIENTRY *_glActiveTexture) (GLenum);
     typedef void (APIENTRY *_glTexImage3D) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);

     typedef void (APIENTRY *_glGenBuffers) (GLsizei, GLuint *);
     typedef void (APIENTRY *_glBindBuffer) (GLenum, GLuint);
     typedef void (APIENTRY *_glBufferData) (GLenum, GLsizeiptrARB, const GLvoid *, GLenum);
     typedef void (APIENTRY *_glDeleteBuffers) (GLsizei, const GLuint *);
     typedef void *(APIENTRY *_glMapBuffer) (GLenum, GLenum);
     typedef GLboolean (APIENTRY *_glUnmapBuffer) (GLenum);

     struct GLExtensionFunctions
     {
         bool resolve(const QGLContext *context);

         bool fboSupported();
         bool openGL15Supported(); // the rest: multi-texture, 3D-texture, vertex buffer objects

         _glGenFramebuffersEXT GenFramebuffersEXT;
         _glGenRenderbuffersEXT GenRenderbuffersEXT;
         _glBindRenderbufferEXT BindRenderbufferEXT;
         _glRenderbufferStorageEXT RenderbufferStorageEXT;
         _glDeleteFramebuffersEXT DeleteFramebuffersEXT;
         _glDeleteRenderbuffersEXT DeleteRenderbuffersEXT;
         _glBindFramebufferEXT BindFramebufferEXT;
         _glFramebufferTexture2DEXT FramebufferTexture2DEXT;
         _glFramebufferRenderbufferEXT FramebufferRenderbufferEXT;
         _glCheckFramebufferStatusEXT CheckFramebufferStatusEXT;

         _glActiveTexture ActiveTexture;
         _glTexImage3D TexImage3D;

         _glGenBuffers GenBuffers;
         _glBindBuffer BindBuffer;
         _glBufferData BufferData;
         _glDeleteBuffers DeleteBuffers;
         _glMapBuffer MapBuffer;
         _glUnmapBuffer UnmapBuffer;
     };

     inline GLExtensionFunctions &getGLExtensionFunctions()
     {
         static GLExtensionFunctions funcs;
         return funcs;
     }

     #define glGenFramebuffersEXT getGLExtensionFunctions().GenFramebuffersEXT
     #define glGenRenderbuffersEXT getGLExtensionFunctions().GenRenderbuffersEXT
     #define glBindRenderbufferEXT getGLExtensionFunctions().BindRenderbufferEXT
     #define glRenderbufferStorageEXT getGLExtensionFunctions().RenderbufferStorageEXT
     #define glDeleteFramebuffersEXT getGLExtensionFunctions().DeleteFramebuffersEXT
     #define glDeleteRenderbuffersEXT getGLExtensionFunctions().DeleteRenderbuffersEXT
     #define glBindFramebufferEXT getGLExtensionFunctions().BindFramebufferEXT
     #define glFramebufferTexture2DEXT getGLExtensionFunctions().FramebufferTexture2DEXT
     #define glFramebufferRenderbufferEXT getGLExtensionFunctions().FramebufferRenderbufferEXT
     #define glCheckFramebufferStatusEXT getGLExtensionFunctions().CheckFramebufferStatusEXT

     #define glActiveTexture getGLExtensionFunctions().ActiveTexture
     #define glTexImage3D getGLExtensionFunctions().TexImage3D

     #define glGenBuffers getGLExtensionFunctions().GenBuffers
     #define glBindBuffer getGLExtensionFunctions().BindBuffer
     #define glBufferData getGLExtensionFunctions().BufferData
     #define glDeleteBuffers getGLExtensionFunctions().DeleteBuffers
     #define glMapBuffer getGLExtensionFunctions().MapBuffer
     #define glUnmapBuffer getGLExtensionFunctions().UnmapBuffer

     #endif