QOpenGLTextureHelper: fix the DSA emulation

The DSA emulator functions query which texture is currently bound
to a given target, then bind the new one, perform an operation,
and bind the old one back.

The problem is that in order to query what's currently bound to the
GL_TEXTURE_<X> target one needs to call glGetIntegerv passing
GL_BINDING_TEXTURE_<X>. Since both GL_TEXTURE_X and GL_BINDING_TEXTURE_X
values are completely arbitrary (not contiguous nor related in any way)
we need to pass *both* them to the functions.

The right GL_BINDING_TEXTURE_X was getting already chosen (and stored)
at texture creation time by QOpenGLTexture, so it's just a matter
of passing it around.

For the "real" DSA functions, the binding target is ignored.

Change-Id: Ida823abbfb142d4a22bf9f9a762b160b7e281c6d
Reviewed-by: James Turner <james.turner@kdab.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
bb10
Giuseppe D'Angelo 2014-01-31 18:39:10 +01:00 committed by The Qt Project
parent bc8cf62797
commit 95435a8c90
2 changed files with 241 additions and 217 deletions

View File

@ -320,7 +320,7 @@ void QOpenGLTexturePrivate::allocateMutableStorage()
case QOpenGLTexture::Target1D:
for (int level = 0; level < mipLevels; ++level)
texFuncs->glTextureImage1D(textureId, target, level, format,
texFuncs->glTextureImage1D(textureId, target, bindingTarget, level, format,
mipLevelSize(level, dimensions[0]),
0,
QOpenGLTexture::RGBA, QOpenGLTexture::UInt8, 0);
@ -329,7 +329,7 @@ void QOpenGLTexturePrivate::allocateMutableStorage()
case QOpenGLTexture::Target1DArray:
if (features.testFlag(QOpenGLTexture::TextureArrays)) {
for (int level = 0; level < mipLevels; ++level)
texFuncs->glTextureImage2D(textureId, target, level, format,
texFuncs->glTextureImage2D(textureId, target, bindingTarget, level, format,
mipLevelSize(level, dimensions[0]),
layers,
0,
@ -344,7 +344,7 @@ void QOpenGLTexturePrivate::allocateMutableStorage()
case QOpenGLTexture::TargetCubeMap:
case QOpenGLTexture::TargetRectangle:
for (int level = 0; level < mipLevels; ++level)
texFuncs->glTextureImage2D(textureId, target, level, format,
texFuncs->glTextureImage2D(textureId, target, bindingTarget, level, format,
mipLevelSize(level, dimensions[0]),
mipLevelSize(level, dimensions[1]),
0,
@ -354,7 +354,7 @@ void QOpenGLTexturePrivate::allocateMutableStorage()
case QOpenGLTexture::Target2DArray:
if (features.testFlag(QOpenGLTexture::TextureArrays)) {
for (int level = 0; level < mipLevels; ++level)
texFuncs->glTextureImage3D(textureId, target, level, format,
texFuncs->glTextureImage3D(textureId, target, bindingTarget, level, format,
mipLevelSize(level, dimensions[0]),
mipLevelSize(level, dimensions[1]),
layers,
@ -370,7 +370,7 @@ void QOpenGLTexturePrivate::allocateMutableStorage()
// Cubemap arrays must specify number of layer-faces (6 * layers) as depth parameter
if (features.testFlag(QOpenGLTexture::TextureCubeMapArrays)) {
for (int level = 0; level < mipLevels; ++level)
texFuncs->glTextureImage3D(textureId, target, level, format,
texFuncs->glTextureImage3D(textureId, target, bindingTarget, level, format,
mipLevelSize(level, dimensions[0]),
mipLevelSize(level, dimensions[1]),
6 * layers,
@ -385,7 +385,7 @@ void QOpenGLTexturePrivate::allocateMutableStorage()
case QOpenGLTexture::Target3D:
if (features.testFlag(QOpenGLTexture::Texture3D)) {
for (int level = 0; level < mipLevels; ++level)
texFuncs->glTextureImage3D(textureId, target, level, format,
texFuncs->glTextureImage3D(textureId, target, bindingTarget, level, format,
mipLevelSize(level, dimensions[0]),
mipLevelSize(level, dimensions[1]),
mipLevelSize(level, dimensions[2]),
@ -399,7 +399,7 @@ void QOpenGLTexturePrivate::allocateMutableStorage()
case QOpenGLTexture::Target2DMultisample:
if (features.testFlag(QOpenGLTexture::TextureMultisample)) {
texFuncs->glTextureImage2DMultisample(textureId, target, samples, format,
texFuncs->glTextureImage2DMultisample(textureId, target, bindingTarget, samples, format,
dimensions[0], dimensions[1],
fixedSamplePositions);
} else {
@ -411,7 +411,7 @@ void QOpenGLTexturePrivate::allocateMutableStorage()
case QOpenGLTexture::Target2DMultisampleArray:
if (features.testFlag(QOpenGLTexture::TextureMultisample)
&& features.testFlag(QOpenGLTexture::TextureArrays)) {
texFuncs->glTextureImage3DMultisample(textureId, target, samples, format,
texFuncs->glTextureImage3DMultisample(textureId, target, bindingTarget, samples, format,
dimensions[0], dimensions[1], layers,
fixedSamplePositions);
} else {
@ -433,13 +433,13 @@ void QOpenGLTexturePrivate::allocateImmutableStorage()
return;
case QOpenGLTexture::Target1D:
texFuncs->glTextureStorage1D(textureId, target, mipLevels, format,
texFuncs->glTextureStorage1D(textureId, target, bindingTarget, mipLevels, format,
dimensions[0]);
break;
case QOpenGLTexture::Target1DArray:
if (features.testFlag(QOpenGLTexture::TextureArrays)) {
texFuncs->glTextureStorage2D(textureId, target, mipLevels, format,
texFuncs->glTextureStorage2D(textureId, target, bindingTarget, mipLevels, format,
dimensions[0], layers);
} else {
qWarning("Array textures are not supported");
@ -450,13 +450,13 @@ void QOpenGLTexturePrivate::allocateImmutableStorage()
case QOpenGLTexture::Target2D:
case QOpenGLTexture::TargetCubeMap:
case QOpenGLTexture::TargetRectangle:
texFuncs->glTextureStorage2D(textureId, target, mipLevels, format,
texFuncs->glTextureStorage2D(textureId, target, bindingTarget, mipLevels, format,
dimensions[0], dimensions[1]);
break;
case QOpenGLTexture::Target2DArray:
if (features.testFlag(QOpenGLTexture::TextureArrays)) {
texFuncs->glTextureStorage3D(textureId, target, mipLevels, format,
texFuncs->glTextureStorage3D(textureId, target, bindingTarget, mipLevels, format,
dimensions[0], dimensions[1], layers);
} else {
qWarning("Array textures are not supported");
@ -467,7 +467,7 @@ void QOpenGLTexturePrivate::allocateImmutableStorage()
case QOpenGLTexture::TargetCubeMapArray:
// Cubemap arrays must specify number of layer-faces (6 * layers) as depth parameter
if (features.testFlag(QOpenGLTexture::TextureCubeMapArrays)) {
texFuncs->glTextureStorage3D(textureId, target, mipLevels, format,
texFuncs->glTextureStorage3D(textureId, target, bindingTarget, mipLevels, format,
dimensions[0], dimensions[1], 6 * layers);
} else {
qWarning("Cubemap Array textures are not supported");
@ -477,7 +477,7 @@ void QOpenGLTexturePrivate::allocateImmutableStorage()
case QOpenGLTexture::Target3D:
if (features.testFlag(QOpenGLTexture::Texture3D)) {
texFuncs->glTextureStorage3D(textureId, target, mipLevels, format,
texFuncs->glTextureStorage3D(textureId, target, bindingTarget, mipLevels, format,
dimensions[0], dimensions[1], dimensions[2]);
} else {
qWarning("3D textures are not supported");
@ -487,7 +487,7 @@ void QOpenGLTexturePrivate::allocateImmutableStorage()
case QOpenGLTexture::Target2DMultisample:
if (features.testFlag(QOpenGLTexture::TextureMultisample)) {
texFuncs->glTextureStorage2DMultisample(textureId, target, samples, format,
texFuncs->glTextureStorage2DMultisample(textureId, target, bindingTarget, samples, format,
dimensions[0], dimensions[1],
fixedSamplePositions);
} else {
@ -499,7 +499,7 @@ void QOpenGLTexturePrivate::allocateImmutableStorage()
case QOpenGLTexture::Target2DMultisampleArray:
if (features.testFlag(QOpenGLTexture::TextureMultisample)
&& features.testFlag(QOpenGLTexture::TextureArrays)) {
texFuncs->glTextureStorage3DMultisample(textureId, target, samples, format,
texFuncs->glTextureStorage3DMultisample(textureId, target, bindingTarget, samples, format,
dimensions[0], dimensions[1], layers,
fixedSamplePositions);
} else {
@ -520,14 +520,14 @@ void QOpenGLTexturePrivate::setData(int mipLevel, int layer, QOpenGLTexture::Cub
case QOpenGLTexture::Target1D:
Q_UNUSED(layer);
Q_UNUSED(cubeFace);
texFuncs->glTextureSubImage1D(textureId, target, mipLevel,
texFuncs->glTextureSubImage1D(textureId, target, bindingTarget, mipLevel,
0, mipLevelSize( mipLevel, dimensions[0] ),
sourceFormat, sourceType, data, options);
break;
case QOpenGLTexture::Target1DArray:
Q_UNUSED(cubeFace);
texFuncs->glTextureSubImage2D(textureId, target, mipLevel,
texFuncs->glTextureSubImage2D(textureId, target, bindingTarget, mipLevel,
0, layer,
mipLevelSize(mipLevel, dimensions[0]),
1,
@ -536,7 +536,7 @@ void QOpenGLTexturePrivate::setData(int mipLevel, int layer, QOpenGLTexture::Cub
case QOpenGLTexture::Target2D:
Q_UNUSED(layer);
Q_UNUSED(cubeFace);
texFuncs->glTextureSubImage2D(textureId, target, mipLevel,
texFuncs->glTextureSubImage2D(textureId, target, bindingTarget, mipLevel,
0, 0,
mipLevelSize(mipLevel, dimensions[0]),
mipLevelSize(mipLevel, dimensions[1]),
@ -545,7 +545,7 @@ void QOpenGLTexturePrivate::setData(int mipLevel, int layer, QOpenGLTexture::Cub
case QOpenGLTexture::Target2DArray:
Q_UNUSED(cubeFace);
texFuncs->glTextureSubImage3D(textureId, target, mipLevel,
texFuncs->glTextureSubImage3D(textureId, target, bindingTarget, mipLevel,
0, 0, layer,
mipLevelSize(mipLevel, dimensions[0]),
mipLevelSize(mipLevel, dimensions[1]),
@ -555,7 +555,7 @@ void QOpenGLTexturePrivate::setData(int mipLevel, int layer, QOpenGLTexture::Cub
case QOpenGLTexture::Target3D:
Q_UNUSED(cubeFace);
texFuncs->glTextureSubImage3D(textureId, target, mipLevel,
texFuncs->glTextureSubImage3D(textureId, target, bindingTarget, mipLevel,
0, 0, layer,
mipLevelSize(mipLevel, dimensions[0]),
mipLevelSize(mipLevel, dimensions[1]),
@ -565,7 +565,7 @@ void QOpenGLTexturePrivate::setData(int mipLevel, int layer, QOpenGLTexture::Cub
case QOpenGLTexture::TargetCubeMap:
Q_UNUSED(layer);
texFuncs->glTextureSubImage2D(textureId, cubeFace, mipLevel,
texFuncs->glTextureSubImage2D(textureId, cubeFace, bindingTarget, mipLevel,
0, 0,
mipLevelSize(mipLevel, dimensions[0]),
mipLevelSize(mipLevel, dimensions[1]),
@ -575,7 +575,7 @@ void QOpenGLTexturePrivate::setData(int mipLevel, int layer, QOpenGLTexture::Cub
case QOpenGLTexture::TargetCubeMapArray: {
int faceIndex = cubeFace - QOpenGLTexture::CubeMapPositiveX;
int layerFace = 6 * layer + faceIndex;
texFuncs->glTextureSubImage3D(textureId, target, mipLevel,
texFuncs->glTextureSubImage3D(textureId, target, bindingTarget, mipLevel,
0, 0, layerFace,
mipLevelSize(mipLevel, dimensions[0]),
mipLevelSize(mipLevel, dimensions[1]),
@ -588,7 +588,7 @@ void QOpenGLTexturePrivate::setData(int mipLevel, int layer, QOpenGLTexture::Cub
Q_UNUSED(mipLevel);
Q_UNUSED(layer);
Q_UNUSED(cubeFace);
texFuncs->glTextureSubImage2D(textureId, target, 0,
texFuncs->glTextureSubImage2D(textureId, target, bindingTarget, 0,
0, 0,
dimensions[0],
dimensions[1],
@ -618,14 +618,14 @@ void QOpenGLTexturePrivate::setCompressedData(int mipLevel, int layer, QOpenGLTe
case QOpenGLTexture::Target1D:
Q_UNUSED(layer);
Q_UNUSED(cubeFace);
texFuncs->glCompressedTextureSubImage1D(textureId, target, mipLevel,
texFuncs->glCompressedTextureSubImage1D(textureId, target, bindingTarget, mipLevel,
0, mipLevelSize( mipLevel, dimensions[0] ),
format, dataSize, data, options);
break;
case QOpenGLTexture::Target1DArray:
Q_UNUSED(cubeFace);
texFuncs->glCompressedTextureSubImage2D(textureId, target, mipLevel,
texFuncs->glCompressedTextureSubImage2D(textureId, target, bindingTarget, mipLevel,
0, layer,
mipLevelSize(mipLevel, dimensions[0]),
1,
@ -634,7 +634,7 @@ void QOpenGLTexturePrivate::setCompressedData(int mipLevel, int layer, QOpenGLTe
case QOpenGLTexture::Target2D:
Q_UNUSED(layer);
Q_UNUSED(cubeFace);
texFuncs->glCompressedTextureSubImage2D(textureId, target, mipLevel,
texFuncs->glCompressedTextureSubImage2D(textureId, target, bindingTarget, mipLevel,
0, 0,
mipLevelSize(mipLevel, dimensions[0]),
mipLevelSize(mipLevel, dimensions[1]),
@ -643,7 +643,7 @@ void QOpenGLTexturePrivate::setCompressedData(int mipLevel, int layer, QOpenGLTe
case QOpenGLTexture::Target2DArray:
Q_UNUSED(cubeFace);
texFuncs->glCompressedTextureSubImage3D(textureId, target, mipLevel,
texFuncs->glCompressedTextureSubImage3D(textureId, target, bindingTarget, mipLevel,
0, 0, layer,
mipLevelSize(mipLevel, dimensions[0]),
mipLevelSize(mipLevel, dimensions[1]),
@ -653,7 +653,7 @@ void QOpenGLTexturePrivate::setCompressedData(int mipLevel, int layer, QOpenGLTe
case QOpenGLTexture::Target3D:
Q_UNUSED(cubeFace);
texFuncs->glCompressedTextureSubImage3D(textureId, target, mipLevel,
texFuncs->glCompressedTextureSubImage3D(textureId, target, bindingTarget, mipLevel,
0, 0, layer,
mipLevelSize(mipLevel, dimensions[0]),
mipLevelSize(mipLevel, dimensions[1]),
@ -663,7 +663,7 @@ void QOpenGLTexturePrivate::setCompressedData(int mipLevel, int layer, QOpenGLTe
case QOpenGLTexture::TargetCubeMap:
Q_UNUSED(layer);
texFuncs->glCompressedTextureSubImage2D(textureId, cubeFace, mipLevel,
texFuncs->glCompressedTextureSubImage2D(textureId, cubeFace, bindingTarget, mipLevel,
0, 0,
mipLevelSize(mipLevel, dimensions[0]),
mipLevelSize(mipLevel, dimensions[1]),
@ -673,7 +673,7 @@ void QOpenGLTexturePrivate::setCompressedData(int mipLevel, int layer, QOpenGLTe
case QOpenGLTexture::TargetCubeMapArray: {
int faceIndex = cubeFace - QOpenGLTexture::CubeMapPositiveX;
int layerFace = 6 * layer + faceIndex;
texFuncs->glCompressedTextureSubImage3D(textureId, target, mipLevel,
texFuncs->glCompressedTextureSubImage3D(textureId, target, bindingTarget, mipLevel,
0, 0, layerFace,
mipLevelSize(mipLevel, dimensions[0]),
mipLevelSize(mipLevel, dimensions[1]),
@ -686,7 +686,7 @@ void QOpenGLTexturePrivate::setCompressedData(int mipLevel, int layer, QOpenGLTe
Q_UNUSED(mipLevel);
Q_UNUSED(layer);
Q_UNUSED(cubeFace);
texFuncs->glCompressedTextureSubImage2D(textureId, target, 0,
texFuncs->glCompressedTextureSubImage2D(textureId, target, bindingTarget, 0,
0, 0,
dimensions[0],
dimensions[1],
@ -715,7 +715,7 @@ void QOpenGLTexturePrivate::setWrapMode(QOpenGLTexture::WrapMode mode)
case QOpenGLTexture::Target1DArray:
case QOpenGLTexture::TargetBuffer:
wrapModes[0] = mode;
texFuncs->glTextureParameteri(textureId, target, GL_TEXTURE_WRAP_S, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, GL_TEXTURE_WRAP_S, mode);
break;
case QOpenGLTexture::Target2D:
@ -726,15 +726,15 @@ void QOpenGLTexturePrivate::setWrapMode(QOpenGLTexture::WrapMode mode)
case QOpenGLTexture::Target2DMultisampleArray:
case QOpenGLTexture::TargetRectangle:
wrapModes[0] = wrapModes[1] = mode;
texFuncs->glTextureParameteri(textureId, target, GL_TEXTURE_WRAP_S, mode);
texFuncs->glTextureParameteri(textureId, target, GL_TEXTURE_WRAP_T, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, GL_TEXTURE_WRAP_S, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, GL_TEXTURE_WRAP_T, mode);
break;
case QOpenGLTexture::Target3D:
wrapModes[0] = wrapModes[1] = wrapModes[2] = mode;
texFuncs->glTextureParameteri(textureId, target, GL_TEXTURE_WRAP_S, mode);
texFuncs->glTextureParameteri(textureId, target, GL_TEXTURE_WRAP_T, mode);
texFuncs->glTextureParameteri(textureId, target, GL_TEXTURE_WRAP_R, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, GL_TEXTURE_WRAP_S, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, GL_TEXTURE_WRAP_T, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, GL_TEXTURE_WRAP_R, mode);
break;
}
}
@ -748,7 +748,7 @@ void QOpenGLTexturePrivate::setWrapMode(QOpenGLTexture::CoordinateDirection dire
switch (direction) {
case QOpenGLTexture::DirectionS:
wrapModes[0] = mode;
texFuncs->glTextureParameteri(textureId, target, GL_TEXTURE_WRAP_S, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, GL_TEXTURE_WRAP_S, mode);
break;
case QOpenGLTexture::DirectionT:
@ -768,12 +768,12 @@ void QOpenGLTexturePrivate::setWrapMode(QOpenGLTexture::CoordinateDirection dire
switch (direction) {
case QOpenGLTexture::DirectionS:
wrapModes[0] = mode;
texFuncs->glTextureParameteri(textureId, target, GL_TEXTURE_WRAP_S, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, GL_TEXTURE_WRAP_S, mode);
break;
case QOpenGLTexture::DirectionT:
wrapModes[1] = mode;
texFuncs->glTextureParameteri(textureId, target, GL_TEXTURE_WRAP_T, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, GL_TEXTURE_WRAP_T, mode);
break;
case QOpenGLTexture::DirectionR:
@ -786,17 +786,17 @@ void QOpenGLTexturePrivate::setWrapMode(QOpenGLTexture::CoordinateDirection dire
switch (direction) {
case QOpenGLTexture::DirectionS:
wrapModes[0] = mode;
texFuncs->glTextureParameteri(textureId, target, direction, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, direction, mode);
break;
case QOpenGLTexture::DirectionT:
wrapModes[1] = mode;
texFuncs->glTextureParameteri(textureId, target, direction, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, direction, mode);
break;
case QOpenGLTexture::DirectionR:
wrapModes[2] = mode;
texFuncs->glTextureParameteri(textureId, target, direction, mode);
texFuncs->glTextureParameteri(textureId, target, bindingTarget, direction, mode);
break;
}
break;
@ -2469,7 +2469,7 @@ void QOpenGLTexture::setMipBaseLevel(int baseLevel)
Q_ASSERT(d->texFuncs);
Q_ASSERT(baseLevel <= d->maxLevel);
d->baseLevel = baseLevel;
d->texFuncs->glTextureParameteri(d->textureId, d->target, GL_TEXTURE_BASE_LEVEL, baseLevel);
d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_BASE_LEVEL, baseLevel);
#else
Q_UNUSED(baseLevel);
qWarning("QOpenGLTexture: Mipmap base level is not supported");
@ -2503,7 +2503,7 @@ void QOpenGLTexture::setMipMaxLevel(int maxLevel)
Q_ASSERT(d->texFuncs);
Q_ASSERT(d->baseLevel <= maxLevel);
d->maxLevel = maxLevel;
d->texFuncs->glTextureParameteri(d->textureId, d->target, GL_TEXTURE_MAX_LEVEL, maxLevel);
d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MAX_LEVEL, maxLevel);
#else
Q_UNUSED(maxLevel);
qWarning("QOpenGLTexture: Mipmap max level is not supported");
@ -2536,8 +2536,8 @@ void QOpenGLTexture::setMipLevelRange(int baseLevel, int maxLevel)
Q_ASSERT(d->textureId);
Q_ASSERT(d->texFuncs);
Q_ASSERT(baseLevel <= maxLevel);
d->texFuncs->glTextureParameteri(d->textureId, d->target, GL_TEXTURE_BASE_LEVEL, baseLevel);
d->texFuncs->glTextureParameteri(d->textureId, d->target, GL_TEXTURE_MAX_LEVEL, 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);
#else
Q_UNUSED(baseLevel);
Q_UNUSED(maxLevel);
@ -2594,7 +2594,7 @@ void QOpenGLTexture::generateMipMaps()
Q_D(QOpenGLTexture);
Q_ASSERT(d->texFuncs);
Q_ASSERT(d->textureId);
d->texFuncs->glGenerateTextureMipmap(d->textureId, d->target);
d->texFuncs->glGenerateTextureMipmap(d->textureId, d->target, d->bindingTarget);
}
/*!
@ -2618,7 +2618,7 @@ void QOpenGLTexture::generateMipMaps(int baseLevel, bool resetBaseLevel)
if (resetBaseLevel)
oldBaseLevel = mipBaseLevel();
setMipBaseLevel(baseLevel);
d->texFuncs->glGenerateTextureMipmap(d->textureId, d->target);
d->texFuncs->glGenerateTextureMipmap(d->textureId, d->target, d->bindingTarget);
if (resetBaseLevel)
setMipBaseLevel(oldBaseLevel);
}
@ -2647,7 +2647,7 @@ void QOpenGLTexture::setSwizzleMask(SwizzleComponent component, SwizzleValue val
return;
}
d->swizzleMask[component - SwizzleRed] = value;
d->texFuncs->glTextureParameteri(d->textureId, d->target, component, value);
d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, component, value);
#else
Q_UNUSED(component);
Q_UNUSED(value);
@ -2675,7 +2675,7 @@ void QOpenGLTexture::setSwizzleMask(SwizzleValue r, SwizzleValue g,
d->swizzleMask[1] = g;
d->swizzleMask[2] = b;
d->swizzleMask[3] = a;
d->texFuncs->glTextureParameteriv(d->textureId, d->target, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
d->texFuncs->glTextureParameteriv(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask);
#else
Q_UNUSED(r);
Q_UNUSED(g);
@ -2717,7 +2717,7 @@ void QOpenGLTexture::setDepthStencilMode(QOpenGLTexture::DepthStencilMode mode)
return;
}
d->depthStencilMode = mode;
d->texFuncs->glTextureParameteri(d->textureId, d->target, GL_DEPTH_STENCIL_TEXTURE_MODE, mode);
d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_DEPTH_STENCIL_TEXTURE_MODE, mode);
#else
Q_UNUSED(mode);
qWarning("QOpenGLTexture: DepthStencil Mode is not supported");
@ -2747,7 +2747,7 @@ void QOpenGLTexture::setMinificationFilter(QOpenGLTexture::Filter filter)
Q_ASSERT(d->texFuncs);
Q_ASSERT(d->textureId);
d->minFilter = filter;
d->texFuncs->glTextureParameteri(d->textureId, d->target, GL_TEXTURE_MIN_FILTER, filter);
d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MIN_FILTER, filter);
}
/*!
@ -2773,7 +2773,7 @@ void QOpenGLTexture::setMagnificationFilter(QOpenGLTexture::Filter filter)
Q_ASSERT(d->texFuncs);
Q_ASSERT(d->textureId);
d->magFilter = filter;
d->texFuncs->glTextureParameteri(d->textureId, d->target, GL_TEXTURE_MAG_FILTER, filter);
d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MAG_FILTER, filter);
}
/*!
@ -2802,8 +2802,8 @@ void QOpenGLTexture::setMinMagFilters(QOpenGLTexture::Filter minificationFilter,
Q_ASSERT(d->textureId);
d->minFilter = minificationFilter;
d->magFilter = magnificationFilter;
d->texFuncs->glTextureParameteri(d->textureId, d->target, GL_TEXTURE_MIN_FILTER, minificationFilter);
d->texFuncs->glTextureParameteri(d->textureId, d->target, GL_TEXTURE_MAG_FILTER, magnificationFilter);
d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MIN_FILTER, minificationFilter);
d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MAG_FILTER, magnificationFilter);
}
/*!
@ -2834,7 +2834,7 @@ void QOpenGLTexture::setMaximumAnisotropy(float anisotropy)
return;
}
d->maxAnisotropy = anisotropy;
d->texFuncs->glTextureParameteri(d->textureId, d->target, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropy);
d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropy);
}
/*!
@ -2907,7 +2907,7 @@ void QOpenGLTexture::setBorderColor(QColor color)
d->borderColor.clear();
for (int i = 0; i < 4; ++i)
d->borderColor.append(QVariant(values[i]));
d->texFuncs->glTextureParameterfv(d->textureId, d->target, GL_TEXTURE_BORDER_COLOR, values);
d->texFuncs->glTextureParameterfv(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_BORDER_COLOR, values);
#else
Q_UNUSED(color);
qWarning("QOpenGLTexture: Border color is not supported");
@ -2932,7 +2932,7 @@ void QOpenGLTexture::setBorderColor(float r, float g, float b, float a)
d->borderColor.clear();
for (int i = 0; i < 4; ++i)
d->borderColor.append(QVariant(values[i]));
d->texFuncs->glTextureParameterfv(d->textureId, d->target, GL_TEXTURE_BORDER_COLOR, values);
d->texFuncs->glTextureParameterfv(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_BORDER_COLOR, values);
#else
Q_UNUSED(r);
Q_UNUSED(g);
@ -2960,7 +2960,7 @@ void QOpenGLTexture::setBorderColor(int r, int g, int b, int a)
d->borderColor.clear();
for (int i = 0; i < 4; ++i)
d->borderColor.append(QVariant(values[i]));
d->texFuncs->glTextureParameteriv(d->textureId, d->target, GL_TEXTURE_BORDER_COLOR, values);
d->texFuncs->glTextureParameteriv(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_BORDER_COLOR, values);
#else
Q_UNUSED(r);
Q_UNUSED(g);
@ -2990,7 +2990,7 @@ void QOpenGLTexture::setBorderColor(uint r, uint g, uint b, uint a)
d->borderColor.clear();
for (int i = 0; i < 4; ++i)
d->borderColor.append(QVariant(values[i]));
d->texFuncs->glTextureParameteriv(d->textureId, d->target, GL_TEXTURE_BORDER_COLOR, values);
d->texFuncs->glTextureParameteriv(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_BORDER_COLOR, values);
#else
Q_UNUSED(r);
Q_UNUSED(g);
@ -3087,7 +3087,7 @@ void QOpenGLTexture::setMinimumLevelOfDetail(float value)
Q_ASSERT(d->textureId);
Q_ASSERT(value < d->maxLevelOfDetail);
d->minLevelOfDetail = value;
d->texFuncs->glTextureParameterf(d->textureId, d->target, GL_TEXTURE_MIN_LOD, value);
d->texFuncs->glTextureParameterf(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MIN_LOD, value);
#else
Q_UNUSED(value);
qWarning("QOpenGLTexture: Detail level is not supported");
@ -3121,7 +3121,7 @@ void QOpenGLTexture::setMaximumLevelOfDetail(float value)
Q_ASSERT(d->textureId);
Q_ASSERT(value > d->minLevelOfDetail);
d->maxLevelOfDetail = value;
d->texFuncs->glTextureParameterf(d->textureId, d->target, GL_TEXTURE_MAX_LOD, value);
d->texFuncs->glTextureParameterf(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MAX_LOD, value);
#else
Q_UNUSED(value);
qWarning("QOpenGLTexture: Detail level is not supported");
@ -3155,8 +3155,8 @@ void QOpenGLTexture::setLevelOfDetailRange(float min, float max)
Q_ASSERT(min < max);
d->minLevelOfDetail = min;
d->maxLevelOfDetail = max;
d->texFuncs->glTextureParameterf(d->textureId, d->target, GL_TEXTURE_MIN_LOD, min);
d->texFuncs->glTextureParameterf(d->textureId, d->target, GL_TEXTURE_MAX_LOD, max);
d->texFuncs->glTextureParameterf(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MIN_LOD, min);
d->texFuncs->glTextureParameterf(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_MAX_LOD, max);
#else
Q_UNUSED(min);
Q_UNUSED(max);
@ -3189,7 +3189,7 @@ void QOpenGLTexture::setLevelofDetailBias(float bias)
Q_ASSERT(d->texFuncs);
Q_ASSERT(d->textureId);
d->levelOfDetailBias = bias;
d->texFuncs->glTextureParameterf(d->textureId, d->target, GL_TEXTURE_LOD_BIAS, bias);
d->texFuncs->glTextureParameterf(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_LOD_BIAS, bias);
#else
Q_UNUSED(bias);
qWarning("QOpenGLTexture: Detail level is not supported");

View File

@ -60,134 +60,134 @@ public:
QOpenGLTextureHelper(QOpenGLContext *context);
// DSA API
inline void glTextureParameteri(GLuint texture, GLenum target, GLenum pname, GLint param)
inline void glTextureParameteri(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLint param)
{
(this->*TextureParameteri)(texture, target, pname, param);
(this->*TextureParameteri)(texture, target, bindingTarget, pname, param);
}
inline void glTextureParameteriv(GLuint texture, GLenum target, GLenum pname, const GLint *params)
inline void glTextureParameteriv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLint *params)
{
(this->*TextureParameteriv)(texture, target, pname, params);
(this->*TextureParameteriv)(texture, target, bindingTarget, pname, params);
}
inline void glTextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param)
inline void glTextureParameterf(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLfloat param)
{
(this->*TextureParameterf)(texture, target, pname, param);
(this->*TextureParameterf)(texture, target, bindingTarget, pname, param);
}
inline void glTextureParameterfv(GLuint texture, GLenum target, GLenum pname, const GLfloat *params)
inline void glTextureParameterfv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLfloat *params)
{
(this->*TextureParameterfv)(texture, target, pname, params);
(this->*TextureParameterfv)(texture, target, bindingTarget, pname, params);
}
inline void glGenerateTextureMipmap(GLuint texture, GLenum target)
inline void glGenerateTextureMipmap(GLuint texture, GLenum target, GLenum bindingTarget)
{
(this->*GenerateTextureMipmap)(texture, target);
(this->*GenerateTextureMipmap)(texture, target, bindingTarget);
}
inline void glTextureStorage3D(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat,
inline void glTextureStorage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth)
{
(this->*TextureStorage3D)(texture, target, levels, internalFormat, width, height, depth);
(this->*TextureStorage3D)(texture, target, bindingTarget, levels, internalFormat, width, height, depth);
}
inline void glTextureStorage2D(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat,
inline void glTextureStorage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
GLsizei width, GLsizei height)
{
(this->*TextureStorage2D)(texture, target, levels, internalFormat, width, height);
(this->*TextureStorage2D)(texture, target, bindingTarget, levels, internalFormat, width, height);
}
inline void glTextureStorage1D(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat,
inline void glTextureStorage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
GLsizei width)
{
(this->*TextureStorage1D)(texture, target, levels, internalFormat, width);
(this->*TextureStorage1D)(texture, target, bindingTarget, levels, internalFormat, width);
}
inline void glTextureStorage3DMultisample(GLuint texture, GLenum target, GLsizei samples, GLenum internalFormat,
inline void glTextureStorage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations)
{
(this->*TextureStorage3DMultisample)(texture, target, samples, internalFormat, width, height, depth, fixedSampleLocations);
(this->*TextureStorage3DMultisample)(texture, target, bindingTarget, samples, internalFormat, width, height, depth, fixedSampleLocations);
}
inline void glTextureStorage2DMultisample(GLuint texture, GLenum target, GLsizei samples, GLenum internalFormat,
inline void glTextureStorage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat,
GLsizei width, GLsizei height, GLboolean fixedSampleLocations)
{
(this->*TextureStorage2DMultisample)(texture, target, samples, internalFormat, width, height, fixedSampleLocations);
(this->*TextureStorage2DMultisample)(texture, target, bindingTarget, samples, internalFormat, width, height, fixedSampleLocations);
}
inline void glTextureImage3D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void glTextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
{
(this->*TextureImage3D)(texture, target, level, internalFormat, width, height, depth, border, format, type, pixels);
(this->*TextureImage3D)(texture, target, bindingTarget, level, internalFormat, width, height, depth, border, format, type, pixels);
}
inline void glTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void glTextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
{
(this->*TextureImage2D)(texture, target, level, internalFormat, width, height, border, format, type, pixels);
(this->*TextureImage2D)(texture, target, bindingTarget, level, internalFormat, width, height, border, format, type, pixels);
}
inline void glTextureImage1D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void glTextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
{
(this->*TextureImage1D)(texture, target, level, internalFormat, width, border, format, type, pixels);
(this->*TextureImage1D)(texture, target, bindingTarget, level, internalFormat, width, border, format, type, pixels);
}
inline void glTextureSubImage3D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
inline void glTextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
const GLvoid *pixels, const QOpenGLPixelTransferOptions * const options = 0)
{
if (options) {
QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
setPixelUploadOptions(*options);
(this->*TextureSubImage3D)(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
(this->*TextureSubImage3D)(texture, target, bindingTarget, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
setPixelUploadOptions(oldOptions);
} else {
(this->*TextureSubImage3D)(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
(this->*TextureSubImage3D)(texture, target, bindingTarget, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
}
}
inline void glTextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
inline void glTextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type,
const GLvoid *pixels, const QOpenGLPixelTransferOptions * const options = 0)
{
if (options) {
QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
setPixelUploadOptions(*options);
(this->*TextureSubImage2D)(texture, target, level, xoffset, yoffset, width, height, format, type, pixels);
(this->*TextureSubImage2D)(texture, target, bindingTarget, level, xoffset, yoffset, width, height, format, type, pixels);
setPixelUploadOptions(oldOptions);
} else {
(this->*TextureSubImage2D)(texture, target, level, xoffset, yoffset, width, height, format, type, pixels);
(this->*TextureSubImage2D)(texture, target, bindingTarget, level, xoffset, yoffset, width, height, format, type, pixels);
}
}
inline void glTextureSubImage1D(GLuint texture, GLenum target, GLint level, GLint xoffset,
inline void glTextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset,
GLsizei width, GLenum format, GLenum type,
const GLvoid *pixels, const QOpenGLPixelTransferOptions * const options = 0)
{
if (options) {
QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
setPixelUploadOptions(*options);
(this->*TextureSubImage1D)(texture, target, level, xoffset, width, format, type, pixels);
(this->*TextureSubImage1D)(texture, target, bindingTarget, level, xoffset, width, format, type, pixels);
setPixelUploadOptions(oldOptions);
} else {
(this->*TextureSubImage1D)(texture, target, level, xoffset, width, format, type, pixels);
(this->*TextureSubImage1D)(texture, target, bindingTarget, level, xoffset, width, format, type, pixels);
}
}
inline void glTextureImage3DMultisample(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat,
inline void glTextureImage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat,
GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations)
{
(this->*TextureImage3DMultisample)(texture, target, samples, internalFormat, width, height, depth, fixedSampleLocations);
(this->*TextureImage3DMultisample)(texture, target, bindingTarget, samples, internalFormat, width, height, depth, fixedSampleLocations);
}
inline void glTextureImage2DMultisample(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat,
inline void glTextureImage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat,
GLsizei width, GLsizei height, GLboolean fixedSampleLocations)
{
(this->*TextureImage2DMultisample)(texture, target, samples, internalFormat, width, height, fixedSampleLocations);
(this->*TextureImage2DMultisample)(texture, target, bindingTarget, samples, internalFormat, width, height, fixedSampleLocations);
}
inline void glCompressedTextureSubImage1D(GLuint texture, GLenum target, GLint level,
inline void glCompressedTextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLsizei width,
GLenum format, GLsizei imageSize, const GLvoid *bits,
const QOpenGLPixelTransferOptions * const options = 0)
@ -195,14 +195,14 @@ public:
if (options) {
QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
setPixelUploadOptions(*options);
(this->*CompressedTextureSubImage1D)(texture, target, level, xoffset, width, format, imageSize, bits);
(this->*CompressedTextureSubImage1D)(texture, target, bindingTarget, level, xoffset, width, format, imageSize, bits);
setPixelUploadOptions(oldOptions);
} else {
(this->*CompressedTextureSubImage1D)(texture, target, level, xoffset, width, format, imageSize, bits);
(this->*CompressedTextureSubImage1D)(texture, target, bindingTarget, level, xoffset, width, format, imageSize, bits);
}
}
inline void glCompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level,
inline void glCompressedTextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height,
GLenum format, GLsizei imageSize, const GLvoid *bits,
@ -211,14 +211,14 @@ public:
if (options) {
QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
setPixelUploadOptions(*options);
(this->*CompressedTextureSubImage2D)(texture, target, level, xoffset, yoffset, width, height, format, imageSize, bits);
(this->*CompressedTextureSubImage2D)(texture, target, bindingTarget, level, xoffset, yoffset, width, height, format, imageSize, bits);
setPixelUploadOptions(oldOptions);
} else {
(this->*CompressedTextureSubImage2D)(texture, target, level, xoffset, yoffset, width, height, format, imageSize, bits);
(this->*CompressedTextureSubImage2D)(texture, target, bindingTarget, level, xoffset, yoffset, width, height, format, imageSize, bits);
}
}
inline void glCompressedTextureSubImage3D(GLuint texture, GLenum target, GLint level,
inline void glCompressedTextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth,
GLenum format, GLsizei imageSize, const GLvoid *bits,
@ -227,439 +227,463 @@ public:
if (options) {
QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
setPixelUploadOptions(*options);
(this->*CompressedTextureSubImage3D)(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);
(this->*CompressedTextureSubImage3D)(texture, target, bindingTarget, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);
setPixelUploadOptions(oldOptions);
} else {
(this->*CompressedTextureSubImage3D)(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);
(this->*CompressedTextureSubImage3D)(texture, target, bindingTarget, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);
}
}
inline void glCompressedTextureImage1D(GLuint texture, GLenum target, GLint level,
inline void glCompressedTextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLenum internalFormat, GLsizei width,
GLint border, GLsizei imageSize, const GLvoid *bits)
{
(this->*CompressedTextureImage1D)(texture, target, level, internalFormat, width, border, imageSize, bits);
(this->*CompressedTextureImage1D)(texture, target, bindingTarget, level, internalFormat, width, border, imageSize, bits);
}
inline void glCompressedTextureImage2D(GLuint texture, GLenum target, GLint level,
inline void glCompressedTextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLenum internalFormat, GLsizei width, GLsizei height,
GLint border, GLsizei imageSize, const GLvoid *bits)
{
(this->*CompressedTextureImage2D)(texture, target, level, internalFormat, width, height, border, imageSize, bits);
(this->*CompressedTextureImage2D)(texture, target, bindingTarget, level, internalFormat, width, height, border, imageSize, bits);
}
inline void glCompressedTextureImage3D(GLuint texture, GLenum target, GLint level,
inline void glCompressedTextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth,
GLint border, GLsizei imageSize, const GLvoid *bits)
{
(this->*CompressedTextureImage3D)(texture, target, level, internalFormat, width, height, depth, border, imageSize, bits);
(this->*CompressedTextureImage3D)(texture, target, bindingTarget, level, internalFormat, width, height, depth, border, imageSize, bits);
}
private:
#if !defined(QT_OPENGL_ES_2)
// DSA wrapper (so we can use pointer to member function as switch)
inline void dsa_TextureParameteri(GLuint texture, GLenum target, GLenum pname, GLint param)
inline void dsa_TextureParameteri(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLint param)
{
Q_UNUSED(bindingTarget);
TextureParameteriEXT(texture, target, pname, param);
}
inline void dsa_TextureParameteriv(GLuint texture, GLenum target, GLenum pname, const GLint *params)
inline void dsa_TextureParameteriv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLint *params)
{
Q_UNUSED(bindingTarget);
TextureParameterivEXT(texture, target, pname, params);
}
inline void dsa_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param)
inline void dsa_TextureParameterf(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLfloat param)
{
Q_UNUSED(bindingTarget);
TextureParameterfEXT(texture, target, pname, param);
}
inline void dsa_TextureParameterfv(GLuint texture, GLenum target, GLenum pname, const GLfloat *params)
inline void dsa_TextureParameterfv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLfloat *params)
{
Q_UNUSED(bindingTarget);
TextureParameterfvEXT(texture, target, pname, params);
}
inline void dsa_GenerateTextureMipmap(GLuint texture, GLenum target)
inline void dsa_GenerateTextureMipmap(GLuint texture, GLenum target, GLenum bindingTarget)
{
Q_UNUSED(bindingTarget);
GenerateTextureMipmapEXT(texture, target);
}
inline void dsa_TextureStorage3D(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat,
inline void dsa_TextureStorage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth)
{
Q_UNUSED(bindingTarget);
TextureStorage3DEXT(texture, target, levels, internalFormat, width, height, depth);
}
inline void dsa_TextureStorage2D(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat,
inline void dsa_TextureStorage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
GLsizei width, GLsizei height)
{
Q_UNUSED(bindingTarget);
TextureStorage2DEXT(texture, target, levels, internalFormat, width, height);
}
inline void dsa_TextureStorage1D(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat,
inline void dsa_TextureStorage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
GLsizei width)
{
Q_UNUSED(bindingTarget);
TextureStorage1DEXT(texture, target, levels, internalFormat, width);
}
inline void dsa_TextureStorage3DMultisample(GLuint texture, GLenum target, GLsizei samples, GLenum internalFormat,
inline void dsa_TextureStorage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations)
{
Q_UNUSED(bindingTarget);
TextureStorage3DMultisampleEXT(texture, target, samples, internalFormat, width, height, depth, fixedSampleLocations);
}
inline void dsa_TextureStorage2DMultisample(GLuint texture, GLenum target, GLsizei samples, GLenum internalFormat,
inline void dsa_TextureStorage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat,
GLsizei width, GLsizei height, GLboolean fixedSampleLocations)
{
Q_UNUSED(bindingTarget);
TextureStorage2DMultisampleEXT(texture, target, samples, internalFormat, width, height, fixedSampleLocations);
}
inline void dsa_TextureImage3D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void dsa_TextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
{
Q_UNUSED(bindingTarget);
TextureImage3DEXT(texture, target, level, internalFormat, width, height, depth, border, format, type, pixels);
}
inline void dsa_TextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void dsa_TextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
{
Q_UNUSED(bindingTarget);
TextureImage2DEXT(texture, target, level, internalFormat, width, height, border, format, type, pixels);
}
inline void dsa_TextureImage1D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void dsa_TextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
{
Q_UNUSED(bindingTarget);
TextureImage1DEXT(texture, target, level, internalFormat, width, border, format, type, pixels);
}
inline void dsa_TextureSubImage3D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
inline void dsa_TextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels)
{
Q_UNUSED(bindingTarget);
TextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
}
inline void dsa_TextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset,
inline void dsa_TextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
{
Q_UNUSED(bindingTarget);
TextureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, type, pixels);
}
inline void dsa_TextureSubImage1D(GLuint texture, GLenum target, GLint level, GLint xoffset,
inline void dsa_TextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset,
GLsizei width, GLenum format, GLenum type, const GLvoid *pixels)
{
Q_UNUSED(bindingTarget);
TextureSubImage1DEXT(texture, target, level, xoffset, width, format, type, pixels);
}
inline void dsa_TextureImage3DMultisample(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat,
inline void dsa_TextureImage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat,
GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations)
{
Q_UNUSED(bindingTarget);
TextureImage3DMultisampleNV(texture, target, samples, internalFormat, width, height, depth, fixedSampleLocations);
}
inline void dsa_TextureImage2DMultisample(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat,
inline void dsa_TextureImage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat,
GLsizei width, GLsizei height, GLboolean fixedSampleLocations)
{
Q_UNUSED(bindingTarget);
TextureImage2DMultisampleNV(texture, target, samples, internalFormat, width, height, fixedSampleLocations);
}
inline void dsa_CompressedTextureSubImage1D(GLuint texture, GLenum target, GLint level,
inline void dsa_CompressedTextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLsizei width,
GLenum format, GLsizei imageSize, const GLvoid *bits)
{
Q_UNUSED(bindingTarget);
CompressedTextureSubImage1DEXT(texture, target, level, xoffset, width, format, imageSize, bits);
}
inline void dsa_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level,
inline void dsa_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height,
GLenum format, GLsizei imageSize, const GLvoid *bits)
{
Q_UNUSED(bindingTarget);
CompressedTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, imageSize, bits);
}
inline void dsa_CompressedTextureSubImage3D(GLuint texture, GLenum target, GLint level,
inline void dsa_CompressedTextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth,
GLenum format, GLsizei imageSize, const GLvoid *bits)
{
Q_UNUSED(bindingTarget);
CompressedTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);
}
inline void dsa_CompressedTextureImage1D(GLuint texture, GLenum target, GLint level,
inline void dsa_CompressedTextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLenum internalFormat, GLsizei width,
GLint border, GLsizei imageSize, const GLvoid *bits)
{
Q_UNUSED(bindingTarget);
CompressedTextureImage1DEXT(texture, target, level, internalFormat, width, border, imageSize, bits);
}
inline void dsa_CompressedTextureImage2D(GLuint texture, GLenum target, GLint level,
inline void dsa_CompressedTextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLenum internalFormat, GLsizei width, GLsizei height,
GLint border, GLsizei imageSize, const GLvoid *bits)
{
Q_UNUSED(bindingTarget);
CompressedTextureImage2DEXT(texture, target, level, internalFormat, width, height, border, imageSize, bits);
}
inline void dsa_CompressedTextureImage3D(GLuint texture, GLenum target, GLint level,
inline void dsa_CompressedTextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth,
GLint border, GLsizei imageSize, const GLvoid *bits)
{
Q_UNUSED(bindingTarget);
CompressedTextureImage3DEXT(texture, target, level, internalFormat, width, height, depth, border, imageSize, bits);
}
#endif
// DSA-like API
inline void qt_TextureParameteri(GLuint texture, GLenum target, GLenum pname, GLint param)
inline void qt_TextureParameteri(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLint param)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexParameteri(target, pname, param);
glBindTexture(target, oldTexture);
}
inline void qt_TextureParameteriv(GLuint texture, GLenum target, GLenum pname, const GLint *params)
inline void qt_TextureParameteriv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLint *params)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexParameteriv(target, pname, params);
glBindTexture(target, oldTexture);
}
inline void qt_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param)
inline void qt_TextureParameterf(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLfloat param)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexParameterf(target, pname, param);
glBindTexture(target, oldTexture);
}
inline void qt_TextureParameterfv(GLuint texture, GLenum target, GLenum pname, const GLfloat *params)
inline void qt_TextureParameterfv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLfloat *params)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexParameterfv(target, pname, params);
glBindTexture(target, oldTexture);
}
inline void qt_GenerateTextureMipmap(GLuint texture, GLenum target)
inline void qt_GenerateTextureMipmap(GLuint texture, GLenum target, GLenum bindingTarget)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glGenerateMipmap(target);
glBindTexture(target, oldTexture);
}
inline void qt_TextureStorage3D(GLuint texture, GLenum target, GLsizei levels,
inline void qt_TextureStorage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels,
GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexStorage3D(target, levels, internalFormat, width, height, depth);
glBindTexture(target, oldTexture);
}
inline void qt_TextureStorage2D(GLuint texture, GLenum target, GLsizei levels,
inline void qt_TextureStorage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels,
GLenum internalFormat, GLsizei width, GLsizei height)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexStorage2D(target, levels, internalFormat, width, height);
glBindTexture(target, oldTexture);
}
inline void qt_TextureStorage1D(GLuint texture, GLenum target, GLsizei levels,
inline void qt_TextureStorage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels,
GLenum internalFormat, GLsizei width)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexStorage1D(target, levels, internalFormat, width);
glBindTexture(target, oldTexture);
}
inline void qt_TextureStorage3DMultisample(GLuint texture, GLenum target, GLsizei samples,
inline void qt_TextureStorage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples,
GLenum internalFormat, GLsizei width, GLsizei height,
GLsizei depth, GLboolean fixedSampleLocations)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexStorage3DMultisample(target, samples, internalFormat, width, height, depth, fixedSampleLocations);
glBindTexture(target, oldTexture);
}
inline void qt_TextureStorage2DMultisample(GLuint texture, GLenum target, GLsizei samples,
inline void qt_TextureStorage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples,
GLenum internalFormat, GLsizei width, GLsizei height,
GLboolean fixedSampleLocations)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexStorage2DMultisample(target, samples, internalFormat, width, height, fixedSampleLocations);
glBindTexture(target, oldTexture);
}
inline void qt_TextureImage3D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void qt_TextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth,
GLint border, GLenum format, GLenum type,
const GLvoid *pixels)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexImage3D(target, level, internalFormat, width, height, depth, border, format, type, pixels);
glBindTexture(target, oldTexture);
}
inline void qt_TextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void qt_TextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height,
GLint border, GLenum format, GLenum type,
const GLvoid *pixels)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexImage2D(target, level, internalFormat, width, height, border, format, type, pixels);
glBindTexture(target, oldTexture);
}
inline void qt_TextureImage1D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void qt_TextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLint border, GLenum format, GLenum type,
const GLvoid *pixels)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexImage1D(target, level, internalFormat, width, border, format, type, pixels);
glBindTexture(target, oldTexture);
}
inline void qt_TextureSubImage3D(GLuint texture, GLenum target, GLint level,
inline void qt_TextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth,
GLenum format, GLenum type, const GLvoid *pixels)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
glBindTexture(target, oldTexture);
}
inline void qt_TextureSubImage2D(GLuint texture, GLenum target, GLint level,
inline void qt_TextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height,
GLenum format, GLenum type, const GLvoid *pixels)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
glBindTexture(target, oldTexture);
}
inline void qt_TextureSubImage1D(GLuint texture, GLenum target, GLint level,
inline void qt_TextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLsizei width,
GLenum format, GLenum type, const GLvoid *pixels)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexSubImage1D(target, level, xoffset, width, format, type, pixels);
glBindTexture(target, oldTexture);
}
inline void qt_TextureImage3DMultisample(GLuint texture, GLenum target, GLsizei samples,
inline void qt_TextureImage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples,
GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth,
GLboolean fixedSampleLocations)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedSampleLocations);
glBindTexture(target, oldTexture);
}
inline void qt_TextureImage2DMultisample(GLuint texture, GLenum target, GLsizei samples,
inline void qt_TextureImage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples,
GLint internalFormat, GLsizei width, GLsizei height,
GLboolean fixedSampleLocations)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedSampleLocations);
glBindTexture(target, oldTexture);
}
inline void qt_CompressedTextureSubImage1D(GLuint texture, GLenum target, GLint level,
inline void qt_CompressedTextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLsizei width, GLenum format,
GLsizei imageSize, const GLvoid *bits)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, bits);
glBindTexture(target, oldTexture);
}
inline void qt_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level,
inline void qt_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLint yoffset,
GLsizei width, GLsizei height,
GLenum format, GLsizei imageSize, const GLvoid *bits)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, bits);
glBindTexture(target, oldTexture);
}
inline void qt_CompressedTextureSubImage3D(GLuint texture, GLenum target, GLint level,
inline void qt_CompressedTextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
GLsizei width, GLsizei height, GLsizei depth,
GLenum format, GLsizei imageSize, const GLvoid *bits)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);
glBindTexture(target, oldTexture);
}
inline void qt_CompressedTextureImage1D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void qt_CompressedTextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLint border,
GLsizei imageSize, const GLvoid *bits)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, bits);
glBindTexture(target, oldTexture);
}
inline void qt_CompressedTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void qt_CompressedTextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLint border,
GLsizei imageSize, const GLvoid *bits)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, bits);
glBindTexture(target, oldTexture);
}
inline void qt_CompressedTextureImage3D(GLuint texture, GLenum target, GLint level, GLenum internalFormat,
inline void qt_CompressedTextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth, GLint border,
GLsizei imageSize, const GLvoid *bits)
{
GLint oldTexture;
glGetIntegerv(target, &oldTexture);
glGetIntegerv(bindingTarget, &oldTexture);
glBindTexture(target, texture);
glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, bits);
glBindTexture(target, oldTexture);
@ -937,30 +961,30 @@ public:
private:
// Typedefs and pointers to member functions used to switch between EXT_direct_state_access and our own emulated DSA
typedef void (QOpenGLTextureHelper::*TextureParameteriMemberFunc)(GLuint texture, GLenum target, GLenum pname, GLint param);
typedef void (QOpenGLTextureHelper::*TextureParameterivMemberFunc)(GLuint texture, GLenum target, GLenum pname, const GLint *params);
typedef void (QOpenGLTextureHelper::*TextureParameterfMemberFunc)(GLuint texture, GLenum target, GLenum pname, GLfloat param);
typedef void (QOpenGLTextureHelper::*TextureParameterfvMemberFunc)(GLuint texture, GLenum target, GLenum pname, const GLfloat *params);
typedef void (QOpenGLTextureHelper::*GenerateTextureMipmapMemberFunc)(GLuint texture, GLenum target);
typedef void (QOpenGLTextureHelper::*TextureStorage3DMemberFunc)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth);
typedef void (QOpenGLTextureHelper::*TextureStorage2DMemberFunc)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height);
typedef void (QOpenGLTextureHelper::*TextureStorage1DMemberFunc)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width);
typedef void (QOpenGLTextureHelper::*TextureStorage3DMultisampleMemberFunc)(GLuint texture, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
typedef void (QOpenGLTextureHelper::*TextureStorage2DMultisampleMemberFunc)(GLuint texture, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
typedef void (QOpenGLTextureHelper::*TextureImage3DMemberFunc)(GLuint texture, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureImage2DMemberFunc)(GLuint texture, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureImage1DMemberFunc)(GLuint texture, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureSubImage3DMemberFunc)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureSubImage2DMemberFunc)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureSubImage1DMemberFunc)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureImage3DMultisampleMemberFunc)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
typedef void (QOpenGLTextureHelper::*TextureImage2DMultisampleMemberFunc)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
typedef void (QOpenGLTextureHelper::*CompressedTextureSubImage1DMemberFunc)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);
typedef void (QOpenGLTextureHelper::*CompressedTextureSubImage2DMemberFunc)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);
typedef void (QOpenGLTextureHelper::*CompressedTextureSubImage3DMemberFunc)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);
typedef void (QOpenGLTextureHelper::*CompressedTextureImage1DMemberFunc)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);
typedef void (QOpenGLTextureHelper::*CompressedTextureImage2DMemberFunc)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);
typedef void (QOpenGLTextureHelper::*CompressedTextureImage3DMemberFunc)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);
typedef void (QOpenGLTextureHelper::*TextureParameteriMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLint param);
typedef void (QOpenGLTextureHelper::*TextureParameterivMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLint *params);
typedef void (QOpenGLTextureHelper::*TextureParameterfMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLfloat param);
typedef void (QOpenGLTextureHelper::*TextureParameterfvMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLfloat *params);
typedef void (QOpenGLTextureHelper::*GenerateTextureMipmapMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget);
typedef void (QOpenGLTextureHelper::*TextureStorage3DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth);
typedef void (QOpenGLTextureHelper::*TextureStorage2DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height);
typedef void (QOpenGLTextureHelper::*TextureStorage1DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width);
typedef void (QOpenGLTextureHelper::*TextureStorage3DMultisampleMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
typedef void (QOpenGLTextureHelper::*TextureStorage2DMultisampleMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
typedef void (QOpenGLTextureHelper::*TextureImage3DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureImage2DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureImage1DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureSubImage3DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureSubImage2DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureSubImage1DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (QOpenGLTextureHelper::*TextureImage3DMultisampleMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
typedef void (QOpenGLTextureHelper::*TextureImage2DMultisampleMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
typedef void (QOpenGLTextureHelper::*CompressedTextureSubImage1DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);
typedef void (QOpenGLTextureHelper::*CompressedTextureSubImage2DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);
typedef void (QOpenGLTextureHelper::*CompressedTextureSubImage3DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);
typedef void (QOpenGLTextureHelper::*CompressedTextureImage1DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);
typedef void (QOpenGLTextureHelper::*CompressedTextureImage2DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);
typedef void (QOpenGLTextureHelper::*CompressedTextureImage3DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);
TextureParameteriMemberFunc TextureParameteri;