Qt 5.11 | Qt Widgets | Boxes | glextensions.h Example File

Qt 5.11.3 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 Q_OS_MAC
      # ifndef APIENTRYP
      #   ifdef APIENTRY
      #     define APIENTRYP APIENTRY *
      #   else
      #     define APIENTRY
      #     define APIENTRYP *
      #   endif
      # endif
      #else
      # define APIENTRY
      # define APIENTRYP *
      #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