diff options
Diffstat (limited to 'src/opengl')
-rw-r--r-- | src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp | 14 | ||||
-rw-r--r-- | src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp | 15 | ||||
-rw-r--r-- | src/opengl/qgl.cpp | 29 | ||||
-rw-r--r-- | src/opengl/qglextensions_p.h | 277 | ||||
-rw-r--r-- | src/opengl/qglframebufferobject.cpp | 144 | ||||
-rw-r--r-- | src/opengl/qglpaintdevice.cpp | 6 | ||||
-rw-r--r-- | src/opengl/qglshaderprogram.cpp | 8 |
7 files changed, 149 insertions, 344 deletions
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index 1972035e4a..25f5c31d32 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -86,6 +86,12 @@ #include <QDebug> +// ####TODO Properly #ifdef this class to use #define symbols actually defined +// by OpenGL/ES includes +#ifndef GL_FRAMEBUFFER_SRGB +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#endif + QT_BEGIN_NAMESPACE @@ -177,6 +183,12 @@ void QGL2PaintEngineExPrivate::useSimpleShader() updateMatrix(); } +// ####TODO Properly #ifdef this class to use #define symbols actually defined +// by OpenGL/ES includes +#ifndef GL_MIRRORED_REPEAT_IBM +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#endif + void QGL2PaintEngineExPrivate::updateBrushTexture() { Q_Q(QGL2PaintEngineEx); @@ -1826,7 +1838,7 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp #endif if (srgbFrameBufferEnabled) - glDisable(FRAMEBUFFER_SRGB_EXT); + glDisable(GL_FRAMEBUFFER_SRGB); } diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp index ed613ab8ba..bf195f8cf3 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp @@ -170,7 +170,7 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height) // ### the QTextureGlyphCache API needs to be reworked to allow // ### resizeTextureData to fail - glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_textureResource->m_fbo); + glBindFramebuffer(GL_FRAMEBUFFER, m_textureResource->m_fbo); GLuint tmp_texture; glGenTextures(1, &tmp_texture); @@ -183,7 +183,7 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); m_filterMode = Nearest; glBindTexture(GL_TEXTURE_2D, 0); - glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tmp_texture, 0); glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); @@ -258,12 +258,12 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height) glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, oldWidth, oldHeight); - glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, - GL_RENDERBUFFER_EXT, 0); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, + GL_RENDERBUFFER, 0); glDeleteTextures(1, &tmp_texture); glDeleteTextures(1, &oldTexture); - glBindFramebuffer(GL_FRAMEBUFFER_EXT, ctx->d_ptr->current_fbo); + glBindFramebuffer(GL_FRAMEBUFFER, ctx->d_ptr->current_fbo); if (pex != 0) { glViewport(0, 0, pex->width, pex->height); @@ -321,7 +321,12 @@ void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph, QFixed sub glBindTexture(GL_TEXTURE_2D, m_textureResource->m_texture); if (mask.format() == QImage::Format_RGB32) { +#if defined(QT_OPENGL_ES_2) + // ###TODO Ensure extension is actually present on ES2 + glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y, maskWidth, maskHeight, GL_BGRA_EXT, GL_UNSIGNED_BYTE, mask.bits()); +#else glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y, maskWidth, maskHeight, GL_BGRA, GL_UNSIGNED_BYTE, mask.bits()); +#endif } else { // glTexSubImage2D() might cause some garbage to appear in the texture if the mask width is // not a multiple of four bytes. The bug appeared on a computer with 32-bit Windows Vista diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index c55be6189c..2bd10de389 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1760,11 +1760,22 @@ struct DDSFormat { #define FOURCC_DXT4 0x34545844 #define FOURCC_DXT5 0x35545844 +// ####TODO Properly #ifdef this class to use #define symbols actually defined +// by system GL includes #ifndef GL_COMPRESSED_RGB_S3TC_DXT1_EXT #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#endif + +#ifndef GL_COMPRESSED_RGBA_S3TC_DXT1_EXT #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#endif + +#ifndef GL_COMPRESSED_RGBA_S3TC_DXT3_EXT +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#endif + +#ifndef GL_COMPRESSED_RGBA_S3TC_DXT5_EXT +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #endif #ifndef GL_GENERATE_MIPMAP_SGIS @@ -2146,6 +2157,12 @@ QGLTexture *QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G // #define QGL_BIND_TEXTURE_DEBUG +// ####TODO Properly #ifdef this file to use #define symbols actually defined +// by OpenGL/ES includes +#ifndef GL_UNSIGNED_INT_8_8_8_8_REV +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#endif + // map from Qt's ARGB endianness-dependent format to GL's big-endian RGBA layout static inline void qgl_byteSwapImage(QImage &img, GLenum pixel_type) { @@ -4729,6 +4746,12 @@ void QGLExtensionMatcher::init(const char *str) } } +// ####TODO Properly #ifdef this class to use #define symbols actually defined +// by OpenGL/ES includes +#ifndef GL_FRAMEBUFFER_SRGB_CAPABLE_EXT +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#endif + /* Returns the GL extensions for the current context. */ @@ -4805,7 +4828,7 @@ QGLExtensions::Extensions QGLExtensions::currentContextExtensions() { GLboolean srgbCapableFramebuffers; - glGetBooleanv(FRAMEBUFFER_SRGB_CAPABLE_EXT, &srgbCapableFramebuffers); + glGetBooleanv(GL_FRAMEBUFFER_SRGB_CAPABLE_EXT, &srgbCapableFramebuffers); if (srgbCapableFramebuffers) glExtensions |= SRGBFrameBuffer; } diff --git a/src/opengl/qglextensions_p.h b/src/opengl/qglextensions_p.h index f866e0b7ef..d095da6587 100644 --- a/src/opengl/qglextensions_p.h +++ b/src/opengl/qglextensions_p.h @@ -444,283 +444,6 @@ struct QGLExtensionFuncs }; -// OpenGL constants - -#ifndef FRAMEBUFFER_SRGB_CAPABLE_EXT -#define FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA -#endif - -#ifndef FRAMEBUFFER_SRGB_EXT -#define FRAMEBUFFER_SRGB_EXT 0x8DB9 -#endif - -#ifndef GL_ARRAY_BUFFER -#define GL_ARRAY_BUFFER 0x8892 -#endif - -#ifndef GL_STATIC_DRAW -#define GL_STATIC_DRAW 0x88E4 -#endif - -/* NV_texture_rectangle */ -#ifndef GL_NV_texture_rectangle -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 -#endif - -#ifndef GL_BGRA -#define GL_BGRA 0x80E1 -#endif - -#ifndef GL_RGB16 -#define GL_RGB16 0x8054 -#endif - -#ifndef GL_UNSIGNED_SHORT_5_6_5 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#endif - -#ifndef GL_UNSIGNED_INT_8_8_8_8_REV -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#endif - -#ifndef GL_MULTISAMPLE -#define GL_MULTISAMPLE 0x809D -#endif - -#ifndef GL_CLAMP_TO_EDGE -#define GL_CLAMP_TO_EDGE 0x812F -#endif - -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif - -// ARB_fragment_program extension protos -#ifndef GL_FRAGMENT_PROGRAM_ARB -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#endif - -#ifndef GL_PIXEL_UNPACK_BUFFER_ARB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#endif - -#ifndef GL_WRITE_ONLY_ARB -#define GL_WRITE_ONLY_ARB 0x88B9 -#endif - -#ifndef GL_STREAM_DRAW_ARB -#define GL_STREAM_DRAW_ARB 0x88E0 -#endif - -// Stencil wrap and two-side defines -#ifndef GL_STENCIL_TEST_TWO_SIDE_EXT -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#endif -#ifndef GL_INCR_WRAP_EXT -#define GL_INCR_WRAP_EXT 0x8507 -#endif -#ifndef GL_DECR_WRAP_EXT -#define GL_DECR_WRAP_EXT 0x8508 -#endif - -#ifndef GL_TEXTURE0 -#define GL_TEXTURE0 0x84C0 -#endif - -#ifndef GL_TEXTURE1 -#define GL_TEXTURE1 0x84C1 -#endif - -#ifndef GL_DEPTH_COMPONENT16 -#define GL_DEPTH_COMPONENT16 0x81A5 -#endif - -#ifndef GL_DEPTH_COMPONENT24_OES -#define GL_DEPTH_COMPONENT24_OES 0x81A6 -#endif - -#ifndef GL_EXT_framebuffer_object -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT 0x8CD8 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX_EXT 0x8D45 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -#endif - -// GL_EXT_framebuffer_blit -#ifndef GL_READ_FRAMEBUFFER_EXT -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#endif - -// GL_EXT_framebuffer_multisample -#ifndef GL_RENDERBUFFER_SAMPLES_EXT -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#endif - -#ifndef GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#endif - -#ifndef GL_MAX_SAMPLES_EXT -#define GL_MAX_SAMPLES_EXT 0x8D57 -#endif - -#ifndef GL_DRAW_FRAMEBUFFER_EXT -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#endif - -#ifndef GL_EXT_packed_depth_stencil -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 -#endif - -// ### hm. should be part of the GL 1.2 spec.. -#ifndef GL_CLAMP_TO_EDGE -#define GL_CLAMP_TO_EDGE 0x812F -#endif - -#ifndef GL_VERSION_1_2 -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#endif - -#ifndef GL_VERSION_1_4 -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#endif - -#ifndef GL_VERSION_1_5 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#endif - -#ifndef GL_VERSION_2_0 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#endif - -// Geometry shader defines -#ifndef GL_GEOMETRY_SHADER_EXT -# define GL_GEOMETRY_SHADER_EXT 0x8DD9 -# define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA -# define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB -# define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC -# define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -# define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -# define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -# define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -# define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF -# define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 -# define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 -# define GL_LINES_ADJACENCY_EXT 0xA -# define GL_LINE_STRIP_ADJACENCY_EXT 0xB -# define GL_TRIANGLES_ADJACENCY_EXT 0xC -# define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD -# define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 -# define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 -# define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 -# define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -# define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -#endif - #if !defined(QT_OPENGL_ES_2) #define glProgramStringARB QGLContextPrivate::extensionFuncs(ctx).qt_glProgramStringARB #define glBindProgramARB QGLContextPrivate::extensionFuncs(ctx).qt_glBindProgramARB diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp index 680df29f8b..0359de8fa9 100644 --- a/src/opengl/qglframebufferobject.cpp +++ b/src/opengl/qglframebufferobject.cpp @@ -76,6 +76,32 @@ extern QImage qt_gl_read_framebuffer(const QSize&, bool, bool); #define QT_CHECK_GLERROR() {} #endif +// ####TODO Properly #ifdef this class to use #define symbols actually defined +// by OpenGL/ES includes +#ifndef GL_MAX_SAMPLES +#define GL_MAX_SAMPLES 0x8D57 +#endif + +#ifndef GL_RENDERBUFFER_SAMPLES +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#endif + +#ifndef GL_DEPTH24_STENCIL8 +#define GL_DEPTH24_STENCIL8 0x88F0 +#endif + +#ifndef GL_DEPTH_COMPONENT24 +#define GL_DEPTH_COMPONENT24 0x81A6 +#endif + +#ifndef GL_READ_FRAMEBUFFER +#define GL_READ_FRAMEBUFFER 0x8CA8 +#endif + +#ifndef GL_DRAW_FRAMEBUFFER +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#endif + /*! \class QGLFramebufferObjectFormat \brief The QGLFramebufferObjectFormat class specifies the format of an OpenGL @@ -359,41 +385,51 @@ bool QGLFramebufferObjectPrivate::checkFramebufferStatus() const QGL_FUNCP_CONTEXT; if (!ctx) return false; // Context no longer exists. - GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT); + GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); switch(status) { case GL_NO_ERROR: - case GL_FRAMEBUFFER_COMPLETE_EXT: + case GL_FRAMEBUFFER_COMPLETE: return true; break; - case GL_FRAMEBUFFER_UNSUPPORTED_EXT: + case GL_FRAMEBUFFER_UNSUPPORTED: qDebug("QGLFramebufferObject: Unsupported framebuffer format."); break; - case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: + case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: qDebug("QGLFramebufferObject: Framebuffer incomplete attachment."); break; - case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: + case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: qDebug("QGLFramebufferObject: Framebuffer incomplete, missing attachment."); break; -#ifdef GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT - case GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT: +#ifdef GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT + case GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT: qDebug("QGLFramebufferObject: Framebuffer incomplete, duplicate attachment."); break; #endif - case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: +#ifdef GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS + case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS: qDebug("QGLFramebufferObject: Framebuffer incomplete, attached images must have same dimensions."); break; - case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: +#endif +#ifdef GL_FRAMEBUFFER_INCOMPLETE_FORMATS + case GL_FRAMEBUFFER_INCOMPLETE_FORMATS: qDebug("QGLFramebufferObject: Framebuffer incomplete, attached images must have same format."); break; - case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: +#endif +#ifdef GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER + case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: qDebug("QGLFramebufferObject: Framebuffer incomplete, missing draw buffer."); break; - case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: +#endif +#ifdef GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER + case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: qDebug("QGLFramebufferObject: Framebuffer incomplete, missing read buffer."); break; - case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT: +#endif +#ifdef GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE + case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: qDebug("QGLFramebufferObject: Framebuffer incomplete, attachments must have same number of samples per pixel."); break; +#endif default: qDebug() <<"QGLFramebufferObject: An undefined error has occurred: "<< status; break; @@ -440,7 +476,7 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz, QT_RESET_GLERROR(); // reset error state GLuint fbo = 0; glGenFramebuffers(1, &fbo); - glBindFramebuffer(GL_FRAMEBUFFER_EXT, fbo); + glBindFramebuffer(GL_FRAMEBUFFER, fbo); GLuint texture = 0; GLuint color_buffer = 0; @@ -470,7 +506,7 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz, glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, target, texture, 0); QT_CHECK_GLERROR(); @@ -481,29 +517,29 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz, } else { mipmap = false; GLint maxSamples; - glGetIntegerv(GL_MAX_SAMPLES_EXT, &maxSamples); + glGetIntegerv(GL_MAX_SAMPLES, &maxSamples); samples = qBound(0, int(samples), int(maxSamples)); glGenRenderbuffers(1, &color_buffer); - glBindRenderbuffer(GL_RENDERBUFFER_EXT, color_buffer); + glBindRenderbuffer(GL_RENDERBUFFER, color_buffer); if (glRenderbufferStorageMultisampleEXT && samples > 0) { - glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, + glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, samples, internal_format, size.width(), size.height()); } else { samples = 0; - glRenderbufferStorage(GL_RENDERBUFFER_EXT, internal_format, + glRenderbufferStorage(GL_RENDERBUFFER, internal_format, size.width(), size.height()); } - glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, - GL_RENDERBUFFER_EXT, color_buffer); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, + GL_RENDERBUFFER, color_buffer); QT_CHECK_GLERROR(); valid = checkFramebufferStatus(); if (valid) - glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_SAMPLES_EXT, &samples); + glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_SAMPLES, &samples); } // In practice, a combined depth-stencil buffer is supported by all desktop platforms, while a @@ -515,20 +551,20 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz, // depth and stencil buffer needs another extension glGenRenderbuffers(1, &depth_buffer); Q_ASSERT(!glIsRenderbuffer(depth_buffer)); - glBindRenderbuffer(GL_RENDERBUFFER_EXT, depth_buffer); + glBindRenderbuffer(GL_RENDERBUFFER, depth_buffer); Q_ASSERT(glIsRenderbuffer(depth_buffer)); if (samples != 0 && glRenderbufferStorageMultisampleEXT) - glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, - GL_DEPTH24_STENCIL8_EXT, size.width(), size.height()); + glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, samples, + GL_DEPTH24_STENCIL8, size.width(), size.height()); else - glRenderbufferStorage(GL_RENDERBUFFER_EXT, - GL_DEPTH24_STENCIL8_EXT, size.width(), size.height()); + glRenderbufferStorage(GL_RENDERBUFFER, + GL_DEPTH24_STENCIL8, size.width(), size.height()); stencil_buffer = depth_buffer; - glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, - GL_RENDERBUFFER_EXT, depth_buffer); - glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, - GL_RENDERBUFFER_EXT, stencil_buffer); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, + GL_RENDERBUFFER, depth_buffer); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, + GL_RENDERBUFFER, stencil_buffer); valid = checkFramebufferStatus(); if (!valid) { @@ -542,36 +578,36 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz, { glGenRenderbuffers(1, &depth_buffer); Q_ASSERT(!glIsRenderbuffer(depth_buffer)); - glBindRenderbuffer(GL_RENDERBUFFER_EXT, depth_buffer); + glBindRenderbuffer(GL_RENDERBUFFER, depth_buffer); Q_ASSERT(glIsRenderbuffer(depth_buffer)); if (samples != 0 && glRenderbufferStorageMultisampleEXT) { #ifdef QT_OPENGL_ES if (QGLExtensions::glExtensions() & QGLExtensions::Depth24) { - glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, + glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, samples, GL_DEPTH_COMPONENT24_OES, size.width(), size.height()); } else { - glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, + glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, samples, GL_DEPTH_COMPONENT16, size.width(), size.height()); } #else - glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, + glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, samples, GL_DEPTH_COMPONENT, size.width(), size.height()); #endif } else { #ifdef QT_OPENGL_ES if (QGLExtensions::glExtensions() & QGLExtensions::Depth24) { - glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24_OES, + glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24_OES, size.width(), size.height()); } else { - glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16, + glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, size.width(), size.height()); } #else - glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, size.width(), size.height()); + glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, size.width(), size.height()); #endif } - glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, - GL_RENDERBUFFER_EXT, depth_buffer); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, + GL_RENDERBUFFER, depth_buffer); valid = checkFramebufferStatus(); if (!valid) { glDeleteRenderbuffers(1, &depth_buffer); @@ -582,27 +618,27 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz, if (stencil_buffer == 0 && (attachment == QGLFramebufferObject::CombinedDepthStencil)) { glGenRenderbuffers(1, &stencil_buffer); Q_ASSERT(!glIsRenderbuffer(stencil_buffer)); - glBindRenderbuffer(GL_RENDERBUFFER_EXT, stencil_buffer); + glBindRenderbuffer(GL_RENDERBUFFER, stencil_buffer); Q_ASSERT(glIsRenderbuffer(stencil_buffer)); if (samples != 0 && glRenderbufferStorageMultisampleEXT) { #ifdef QT_OPENGL_ES - glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, - GL_STENCIL_INDEX8_EXT, size.width(), size.height()); + glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, samples, + GL_STENCIL_INDEX8, size.width(), size.height()); #else - glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, + glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, samples, GL_STENCIL_INDEX, size.width(), size.height()); #endif } else { #ifdef QT_OPENGL_ES - glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX8_EXT, + glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, size.width(), size.height()); #else - glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX, + glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX, size.width(), size.height()); #endif } - glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, - GL_RENDERBUFFER_EXT, stencil_buffer); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, + GL_RENDERBUFFER, stencil_buffer); valid = checkFramebufferStatus(); if (!valid) { glDeleteRenderbuffers(1, &stencil_buffer); @@ -621,7 +657,7 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz, fbo_attachment = QGLFramebufferObject::NoAttachment; } - glBindFramebuffer(GL_FRAMEBUFFER_EXT, ctx->d_ptr->current_fbo); + glBindFramebuffer(GL_FRAMEBUFFER, ctx->d_ptr->current_fbo); if (valid) { fbo_guard = createSharedResourceGuard(ctx, fbo, freeFramebufferFunc); if (color_buffer) @@ -947,7 +983,7 @@ bool QGLFramebufferObject::bind() qWarning("QGLFramebufferObject::bind() called from incompatible context"); } #endif - glBindFramebuffer(GL_FRAMEBUFFER_EXT, d->fbo()); + glBindFramebuffer(GL_FRAMEBUFFER, d->fbo()); d->valid = d->checkFramebufferStatus(); if (d->valid && current) current->d_ptr->current_fbo = d->fbo(); @@ -983,7 +1019,7 @@ bool QGLFramebufferObject::release() if (current) { current->d_ptr->current_fbo = current->d_ptr->default_fbo; - glBindFramebuffer(GL_FRAMEBUFFER_EXT, current->d_ptr->default_fbo); + glBindFramebuffer(GL_FRAMEBUFFER, current->d_ptr->default_fbo); } return true; @@ -1094,7 +1130,7 @@ bool QGLFramebufferObject::bindDefault() return false; ctx->d_ptr->current_fbo = ctx->d_ptr->default_fbo; - glBindFramebuffer(GL_FRAMEBUFFER_EXT, ctx->d_ptr->default_fbo); + glBindFramebuffer(GL_FRAMEBUFFER, ctx->d_ptr->default_fbo); #ifdef QT_DEBUG } else { qWarning("QGLFramebufferObject::bindDefault() called without current context."); @@ -1316,14 +1352,14 @@ void QGLFramebufferObject::blitFramebuffer(QGLFramebufferObject *target, const Q const int ty0 = th - (targetRect.top() + targetRect.height()); const int ty1 = th - targetRect.top(); - glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, source ? source->handle() : 0); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER_EXT, target ? target->handle() : 0); + glBindFramebuffer(GL_READ_FRAMEBUFFER, source ? source->handle() : 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, target ? target->handle() : 0); glBlitFramebufferEXT(sx0, sy0, sx1, sy1, tx0, ty0, tx1, ty1, buffers, filter); - glBindFramebuffer(GL_FRAMEBUFFER_EXT, ctx->d_ptr->current_fbo); + glBindFramebuffer(GL_FRAMEBUFFER, ctx->d_ptr->current_fbo); } QT_END_NAMESPACE diff --git a/src/opengl/qglpaintdevice.cpp b/src/opengl/qglpaintdevice.cpp index dc77c0fbbb..4fcb891c12 100644 --- a/src/opengl/qglpaintdevice.cpp +++ b/src/opengl/qglpaintdevice.cpp @@ -90,7 +90,7 @@ void QGLPaintDevice::beginPaint() if (m_previousFBO != m_thisFBO) { ctx->d_ptr->current_fbo = m_thisFBO; - glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_thisFBO); + glBindFramebuffer(GL_FRAMEBUFFER, m_thisFBO); } // Set the default fbo for the context to m_thisFBO so that @@ -108,7 +108,7 @@ void QGLPaintDevice::ensureActiveTarget() if (ctx->d_ptr->current_fbo != m_thisFBO) { ctx->d_ptr->current_fbo = m_thisFBO; - glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_thisFBO); + glBindFramebuffer(GL_FRAMEBUFFER, m_thisFBO); } ctx->d_ptr->default_fbo = m_thisFBO; @@ -120,7 +120,7 @@ void QGLPaintDevice::endPaint() QGLContext *ctx = context(); if (m_previousFBO != ctx->d_func()->current_fbo) { ctx->d_ptr->current_fbo = m_previousFBO; - glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_previousFBO); + glBindFramebuffer(GL_FRAMEBUFFER, m_previousFBO); } ctx->d_ptr->default_fbo = 0; diff --git a/src/opengl/qglshaderprogram.cpp b/src/opengl/qglshaderprogram.cpp index 1d87f57c44..4680131e1d 100644 --- a/src/opengl/qglshaderprogram.cpp +++ b/src/opengl/qglshaderprogram.cpp @@ -232,8 +232,10 @@ bool QGLShaderPrivate::create() GLuint shader; if (shaderType == QGLShader::Vertex) shader = glCreateShader(GL_VERTEX_SHADER); +#if !defined(QT_OPENGL_ES_2) else if (shaderType == QGLShader::Geometry) shader = glCreateShader(GL_GEOMETRY_SHADER_EXT); +#endif else shader = glCreateShader(GL_FRAGMENT_SHADER); if (!shader) { @@ -880,6 +882,7 @@ bool QGLShaderProgram::link() return true; } +#if !defined(QT_OPENGL_ES_2) // Set up the geometry shader parameters if (glProgramParameteriEXT) { foreach (QGLShader *shader, d->shaders) { @@ -894,6 +897,7 @@ bool QGLShaderProgram::link() } } } +#endif glLinkProgram(program); value = 0; @@ -3114,8 +3118,10 @@ void QGLShaderProgram::setUniformValueArray(const char *name, const QMatrix4x4 * */ int QGLShaderProgram::maxGeometryOutputVertices() const { - GLint n; + GLint n = 0; +#if !defined(QT_OPENGL_ES_2) glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT, &n); +#endif return n; } |