}
}
+static GLenum
+_mesa_generic_type_for_internal_format(GLenum internalFormat)
+{
+ if (_mesa_is_enum_format_unsigned_int(internalFormat))
+ return GL_UNSIGNED_BYTE;
+ else if (_mesa_is_enum_format_signed_int(internalFormat))
+ return GL_BYTE;
+ else
+ return GL_FLOAT;
+}
+
/* default implementation of QueryInternalFormat driverfunc, for
* drivers not implementing ARB_internalformat_query2.
*/
GLenum internalFormat, GLenum pname,
GLint *params)
{
- (void) ctx;
(void) target;
- (void) internalFormat;
switch (pname) {
case GL_SAMPLES:
params[0] = internalFormat;
break;
+ case GL_READ_PIXELS_FORMAT: {
+ GLenum base_format = _mesa_base_tex_format(ctx, internalFormat);
+ switch (base_format) {
+ case GL_STENCIL_INDEX:
+ case GL_DEPTH_COMPONENT:
+ case GL_DEPTH_STENCIL:
+ case GL_RED:
+ case GL_RGB:
+ case GL_BGR:
+ case GL_RGBA:
+ case GL_BGRA:
+ params[0] = base_format;
+ break;
+ default:
+ params[0] = GL_NONE;
+ break;
+ }
+ break;
+ }
+
+ case GL_READ_PIXELS_TYPE:
+ case GL_TEXTURE_IMAGE_TYPE:
+ case GL_GET_TEXTURE_IMAGE_TYPE: {
+ GLenum base_format = _mesa_base_tex_format(ctx, internalFormat);
+ if (base_format > 0)
+ params[0] = _mesa_generic_type_for_internal_format(internalFormat);
+ else
+ params[0] = GL_NONE;
+ break;
+ }
+
+ case GL_TEXTURE_IMAGE_FORMAT:
+ case GL_GET_TEXTURE_IMAGE_FORMAT: {
+ GLenum format = GL_NONE;
+ GLenum base_format = _mesa_base_tex_format(ctx, internalFormat);
+ if (base_format > 0) {
+ if (_mesa_is_enum_format_integer(internalFormat))
+ format = _mesa_base_format_to_integer_format(base_format);
+ else
+ format = base_format;
+ }
+
+ params[0] = format;
+ break;
+ }
+
case GL_MANUAL_GENERATE_MIPMAP:
case GL_AUTO_GENERATE_MIPMAP:
case GL_SRGB_READ:
break;
case GL_READ_PIXELS:
- ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname,
- buffer);
- break;
-
case GL_READ_PIXELS_FORMAT:
- /* @TODO */
- break;
-
case GL_READ_PIXELS_TYPE:
- /* @TODO */
+ ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname,
+ buffer);
break;
case GL_TEXTURE_IMAGE_FORMAT:
- /* @TODO */
- break;
-
- case GL_TEXTURE_IMAGE_TYPE:
- /* @TODO */
- break;
-
case GL_GET_TEXTURE_IMAGE_FORMAT:
- /* @TODO */
- break;
-
+ case GL_TEXTURE_IMAGE_TYPE:
case GL_GET_TEXTURE_IMAGE_TYPE:
- /* @TODO */
+ ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname,
+ buffer);
break;
case GL_MIPMAP: