rhi: gl: Have a way to state GL_TEXTURE_RECTANGLE is wanted

Added specifically to support the deprecated CVOpenGLTextureCache on
macOS, because Qt Multimedia still needs a way to use that when the
applications requests using OpenGL instead of Metal.

Follow what we did for GL_TEXTURE_EXTERNAL_OES, and add a flag that
simply makes all our glBindTexture calls use the
GL_TEXTURE_RECTANGLE[_ARB] target.

Pick-to: 6.2
Change-Id: If818b13a9f520cdb8bdc16de84a3ca0e18ad6c33
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
Laszlo Agocs 2021-09-16 13:07:20 +02:00
parent 10eedd175e
commit d55a6891d1
3 changed files with 15 additions and 1 deletions

View File

@ -2444,6 +2444,13 @@ bool QRhiRenderBuffer::createFrom(NativeRenderBuffer src)
render target's color attachment refers to a slice in range [0..depth-1].
The underlying graphics API may not support 3D textures at run time.
Support is indicated by the QRhi::ThreeDimensionalTextures feature.
\value TextureRectangleGL The texture should use the GL_TEXTURE_RECTANGLE
target with OpenGL. This flag is ignored with other graphics APIs. Just
like ExternalOES, this flag is useful when working with platform APIs where
native OpenGL texture objects received from the platform are wrapped in a
QRhiTexture, and the platform can only provide textures for a non-2D
texture target.
*/
/*!

View File

@ -778,7 +778,8 @@ public:
UsedWithLoadStore = 1 << 7,
UsedAsCompressedAtlas = 1 << 8,
ExternalOES = 1 << 9,
ThreeDimensional = 1 << 10
ThreeDimensional = 1 << 10,
TextureRectangleGL = 1 << 11
};
Q_DECLARE_FLAGS(Flags, Flag)

View File

@ -361,6 +361,10 @@ QT_BEGIN_NAMESPACE
#define GL_TEXTURE_WRAP_R 0x8072
#endif
#ifndef GL_TEXTURE_RECTANGLE
#define GL_TEXTURE_RECTANGLE 0x84F5
#endif
/*!
Constructs a new QRhiGles2InitParams.
@ -4579,6 +4583,8 @@ bool QGles2Texture::prepareCreate(QSize *adjustedSize)
: m_sampleCount > 1 ? GL_TEXTURE_2D_MULTISAMPLE : (is3D ? GL_TEXTURE_3D : GL_TEXTURE_2D);
if (m_flags.testFlag(ExternalOES))
target = GL_TEXTURE_EXTERNAL_OES;
else if (m_flags.testFlag(TextureRectangleGL))
target = GL_TEXTURE_RECTANGLE;
mipLevelCount = hasMipMaps ? rhiD->q->mipLevelsForSize(size) : 1;
gltype = GL_UNSIGNED_BYTE;