summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/opengl/qopengltexture.cpp87
-rw-r--r--src/gui/opengl/qopengltexture.h3
-rw-r--r--src/gui/opengl/qopengltexturehelper_p.h14
3 files changed, 53 insertions, 51 deletions
diff --git a/src/gui/opengl/qopengltexture.cpp b/src/gui/opengl/qopengltexture.cpp
index db4557d68d..d7d9d3dab6 100644
--- a/src/gui/opengl/qopengltexture.cpp
+++ b/src/gui/opengl/qopengltexture.cpp
@@ -1960,6 +1960,8 @@ QOpenGLTexture *QOpenGLTexturePrivate::createTextureView(QOpenGLTexture::Target
\value NPOTTextureRepeat Full support for non-power-of-two textures including texture
repeat modes
\value Texture1D Support for the 1 dimensional texture target
+ \value TextureComparisonOperators Support for texture comparison operators
+ \value TextureMipMapLevel Support for setting the base and maximum mipmap levels
*/
/*!
@@ -3262,6 +3264,10 @@ bool QOpenGLTexture::hasFeature(Feature feature)
&& ctx->hasExtension(QByteArrayLiteral("GL_EXT_shadow_funcs")));
break;
+ case TextureMipMapLevel:
+ supported = f.version() >= qMakePair(1, 2);
+ break;
+
case MaxFeatureFlag:
break;
}
@@ -3328,6 +3334,10 @@ bool QOpenGLTexture::hasFeature(Feature feature)
|| ctx->hasExtension(QByteArrayLiteral("GL_EXT_shadow_samplers"));
break;
+ case TextureMipMapLevel:
+ supported = f.version() >= qMakePair(3, 0);
+ break;
+
case MaxFeatureFlag:
break;
}
@@ -3344,21 +3354,17 @@ bool QOpenGLTexture::hasFeature(Feature feature)
*/
void QOpenGLTexture::setMipBaseLevel(int baseLevel)
{
-#if !defined(QT_OPENGL_ES_2)
- if (!QOpenGLContext::currentContext()->isOpenGLES()) {
- Q_D(QOpenGLTexture);
- d->create();
- Q_ASSERT(d->textureId);
- Q_ASSERT(d->texFuncs);
- Q_ASSERT(baseLevel <= d->maxLevel);
- d->baseLevel = baseLevel;
- d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_BASE_LEVEL, baseLevel);
+ Q_D(QOpenGLTexture);
+ d->create();
+ if (!d->features.testFlag(TextureMipMapLevel)) {
+ qWarning("QOpenGLTexture::setMipBaseLevel: requires OpenGL >= 1.2 or OpenGL ES >= 3.0");
return;
}
-#else
- Q_UNUSED(baseLevel);
-#endif
- qWarning("QOpenGLTexture: Mipmap base level is not supported");
+ Q_ASSERT(d->textureId);
+ Q_ASSERT(d->texFuncs);
+ Q_ASSERT(baseLevel <= d->maxLevel);
+ d->baseLevel = baseLevel;
+ d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_BASE_LEVEL, baseLevel);
}
/*!
@@ -3381,21 +3387,17 @@ int QOpenGLTexture::mipBaseLevel() const
*/
void QOpenGLTexture::setMipMaxLevel(int maxLevel)
{
-#if !defined(QT_OPENGL_ES_2)
- if (!QOpenGLContext::currentContext()->isOpenGLES()) {
- Q_D(QOpenGLTexture);
- d->create();
- Q_ASSERT(d->textureId);
- Q_ASSERT(d->texFuncs);
- Q_ASSERT(d->baseLevel <= maxLevel);
- d->maxLevel = maxLevel;
- d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MAX_LEVEL, maxLevel);
+ Q_D(QOpenGLTexture);
+ d->create();
+ if (!d->features.testFlag(TextureMipMapLevel)) {
+ qWarning("QOpenGLTexture::setMipMaxLevel: requires OpenGL >= 1.2 or OpenGL ES >= 3.0");
return;
}
-#else
- Q_UNUSED(maxLevel);
-#endif
- qWarning("QOpenGLTexture: Mipmap max level is not supported");
+ Q_ASSERT(d->textureId);
+ Q_ASSERT(d->texFuncs);
+ Q_ASSERT(d->baseLevel <= maxLevel);
+ d->maxLevel = maxLevel;
+ d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MAX_LEVEL, maxLevel);
}
/*!
@@ -3418,22 +3420,17 @@ int QOpenGLTexture::mipMaxLevel() const
*/
void QOpenGLTexture::setMipLevelRange(int baseLevel, int maxLevel)
{
-#if !defined(QT_OPENGL_ES_2)
- if (!QOpenGLContext::currentContext()->isOpenGLES()) {
- Q_D(QOpenGLTexture);
- d->create();
- Q_ASSERT(d->textureId);
- Q_ASSERT(d->texFuncs);
- Q_ASSERT(baseLevel <= maxLevel);
- d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_BASE_LEVEL, baseLevel);
- d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MAX_LEVEL, maxLevel);
+ Q_D(QOpenGLTexture);
+ d->create();
+ if (!d->features.testFlag(TextureMipMapLevel)) {
+ qWarning("QOpenGLTexture::setMipLevelRange: requires OpenGL >= 1.2 or OpenGL ES >= 3.0");
return;
}
-#else
- Q_UNUSED(baseLevel);
- Q_UNUSED(maxLevel);
-#endif
- qWarning("QOpenGLTexture: Mipmap level range is not supported");
+ Q_ASSERT(d->textureId);
+ Q_ASSERT(d->texFuncs);
+ Q_ASSERT(baseLevel <= maxLevel);
+ d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_BASE_LEVEL, baseLevel);
+ d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MAX_LEVEL, maxLevel);
}
/*!
@@ -3676,7 +3673,6 @@ QOpenGLTexture::DepthStencilMode QOpenGLTexture::depthStencilMode() const
*/
void QOpenGLTexture::setComparisonFunction(QOpenGLTexture::ComparisonFunction function)
{
-#if !defined(QT_OPENGL_ES_2)
Q_D(QOpenGLTexture);
d->create();
if (!d->features.testFlag(TextureComparisonOperators)) {
@@ -3685,10 +3681,6 @@ void QOpenGLTexture::setComparisonFunction(QOpenGLTexture::ComparisonFunction fu
}
d->comparisonFunction = function;
d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_COMPARE_FUNC, function);
-#else
- Q_UNUSED(function);
- qWarning("QOpenGLTexture: texture comparison functions are not supported");
-#endif
}
/*!
@@ -3724,7 +3716,6 @@ QOpenGLTexture::ComparisonFunction QOpenGLTexture::comparisonFunction() const
*/
void QOpenGLTexture::setComparisonMode(QOpenGLTexture::ComparisonMode mode)
{
-#if !defined(QT_OPENGL_ES_2)
Q_D(QOpenGLTexture);
d->create();
if (!d->features.testFlag(TextureComparisonOperators)) {
@@ -3733,10 +3724,6 @@ void QOpenGLTexture::setComparisonMode(QOpenGLTexture::ComparisonMode mode)
}
d->comparisonMode = mode;
d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_COMPARE_MODE, mode);
-#else
- Q_UNUSED(mode);
- qWarning("QOpenGLTexture: texture comparison modes are not supported");
-#endif
}
/*!
diff --git a/src/gui/opengl/qopengltexture.h b/src/gui/opengl/qopengltexture.h
index 56fdd07f2f..e0ad7f67e1 100644
--- a/src/gui/opengl/qopengltexture.h
+++ b/src/gui/opengl/qopengltexture.h
@@ -347,8 +347,9 @@ public:
NPOTTextureRepeat = 0x00001000,
Texture1D = 0x00002000,
TextureComparisonOperators = 0x00004000,
+ TextureMipMapLevel = 0x00008000,
#ifndef Q_QDOC
- MaxFeatureFlag = 0x00008000
+ MaxFeatureFlag = 0x00010000
#endif
};
Q_DECLARE_FLAGS(Features, Feature)
diff --git a/src/gui/opengl/qopengltexturehelper_p.h b/src/gui/opengl/qopengltexturehelper_p.h
index 7145f689ce..96a4d21266 100644
--- a/src/gui/opengl/qopengltexturehelper_p.h
+++ b/src/gui/opengl/qopengltexturehelper_p.h
@@ -55,6 +55,20 @@
QT_BEGIN_NAMESPACE
+// Constants for OpenGL and OpenGL ES 3.0+ which are not available with OpenGL ES 2.0.
+#ifndef GL_TEXTURE_BASE_LEVEL
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#endif
+#ifndef GL_TEXTURE_MAX_LEVEL
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#endif
+#ifndef GL_TEXTURE_COMPARE_MODE
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#endif
+#ifndef GL_TEXTURE_COMPARE_FUNC
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#endif
+
class QOpenGLContext;
class QOpenGLTextureHelper