Refix invalid glTexImage2D operation in FramebufferObject

A recent change fixed the texture format parameter to be RGB instead
of RGBA for opaque internal formats. However, this broke the RGB10
case, since the pixel type is then GL_UNSIGNED_INT_2_10_10_10_REV. The
doc says:

"GL_INVALID_OPERATION is generated if type is [...]
GL_UNSIGNED_INT_2_10_10_10_REV [...] and format is neither GL_RGBA nor
GL_BGRA."
https://registry.khronos.org/OpenGL-Refpages/gl4/html/glTexImage2D.xhtml

This modifies ba9e57d65f15c935632b0ad22db0bead9a7d5f90.

Pick-to: 6.6 6.5
Change-Id: I9a004331513179a3f840a007af0418d14e7f5dff
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
(cherry picked from commit b0056f052d842150305d59a3ced280e1885a8619)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Eirik Aavitsland 2024-02-07 11:28:27 +01:00 committed by Qt Cherry-pick Bot
parent 15c4509018
commit 6ae9a8441e

View File

@ -553,12 +553,14 @@ void QOpenGLFramebufferObjectPrivate::initTexture(int idx)
bool isOpaque = false;
switch (color.internalFormat) {
case GL_RGB8:
case GL_RGB10:
case GL_RGB16:
case GL_RGB16F:
case GL_RGB32F:
isOpaque = true;
break;
case GL_RGB10:
// opaque but the pixel type (INT_2_10_10_10) has alpha and so requires RGBA texture format
break;
}
const GLuint textureFormat = isOpaque ? GL_RGB : GL_RGBA;