// // Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // queryconversions.h: Declaration of state query cast conversions #ifndef LIBANGLE_QUERY_CONVERSIONS_H_ #define LIBANGLE_QUERY_CONVERSIONS_H_ #include "angle_gl.h" #include "common/angleutils.h" namespace gl { class Context; // Helper class for converting a GL type to a GLenum: // We can't use CastStateValueEnum generally, because of GLboolean + GLubyte overlap. // We restrict our use to CastFromStateValue and CastQueryValueTo, where it eliminates // duplicate parameters. template struct GLTypeToGLenum { // static constexpr GLenum value; }; template <> struct GLTypeToGLenum { static constexpr GLenum value = GL_INT; }; template <> struct GLTypeToGLenum { static constexpr GLenum value = GL_UNSIGNED_INT; }; template <> struct GLTypeToGLenum { static constexpr GLenum value = GL_BOOL; }; template <> struct GLTypeToGLenum { static constexpr GLenum value = GL_INT_64_ANGLEX; }; template <> struct GLTypeToGLenum { static constexpr GLenum value = GL_UINT_64_ANGLEX; }; template <> struct GLTypeToGLenum { static constexpr GLenum value = GL_FLOAT; }; GLint CastMaskValue(GLuint value); template QueryT CastFromGLintStateValue(GLenum pname, InternalT value); template QueryT CastFromStateValue(GLenum pname, NativeT value); template NativeT CastQueryValueTo(GLenum pname, QueryT value); template GLenum ConvertToGLenum(GLenum pname, ParamType param) { return static_cast(CastQueryValueTo(pname, param)); } template GLenum ConvertToGLenum(ParamType param) { return ConvertToGLenum(GL_NONE, param); } template OutType ConvertGLenum(GLenum param) { return static_cast(param); } template void ConvertGLenumValue(InType param, OutType *out) { *out = ConvertGLenum(static_cast(param)); } template void ConvertPackedEnum(PackedEnumType param, OutType *out) { *out = static_cast(ToGLenum(param)); } template GLint ConvertToGLint(ParamType param) { return CastQueryValueTo(GL_NONE, param); } template bool ConvertToBool(ParamType param) { return param != GL_FALSE; } template GLboolean ConvertToGLBoolean(ParamType param) { return param ? GL_TRUE : GL_FALSE; } // The GL state query API types are: bool, int, uint, float, int64, uint64 template void CastStateValues(Context *context, GLenum nativeType, GLenum pname, unsigned int numParams, QueryT *outParams); // The GL state query API types are: bool, int, uint, float, int64, uint64 template void CastIndexedStateValues(Context *context, GLenum nativeType, GLenum pname, GLuint index, unsigned int numParams, QueryT *outParams); } // namespace gl #endif // LIBANGLE_QUERY_CONVERSIONS_H_