diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2019-04-16 16:32:08 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2019-04-16 16:32:08 +0200 |
commit | 6630937e63ae5797487b86743a7733c8ae5cc42c (patch) | |
tree | 3d53dacf6430f9099e1fb20835881205de674961 /src/3rdparty/angle/src/libANGLE/queryconversions.h | |
parent | 37ed6dae00640f9cc980ffda05347c12a7eb5d7e (diff) | |
parent | c7af193d2e49e9f10b86262e63d8d13abf72b5cf (diff) |
Merge commit 'dev' into 'wip/cmake-merge'
Change-Id: I176c40d031be26a1dd1cf08843e448a660598783
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/queryconversions.h')
-rw-r--r-- | src/3rdparty/angle/src/libANGLE/queryconversions.h | 87 |
1 files changed, 84 insertions, 3 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/queryconversions.h b/src/3rdparty/angle/src/libANGLE/queryconversions.h index e0fdbe17e0..805f36cf02 100644 --- a/src/3rdparty/angle/src/libANGLE/queryconversions.h +++ b/src/3rdparty/angle/src/libANGLE/queryconversions.h @@ -18,19 +18,100 @@ 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 CastStateValue, where it eliminates duplicate parameters. +// We restrict our use to CastFromStateValue and CastQueryValueTo, where it eliminates +// duplicate parameters. template <typename GLType> struct GLTypeToGLenum { - static GLenum value; + // static constexpr GLenum value; }; -// The GL state query API types are: bool, int, uint, float, int64 +template <> +struct GLTypeToGLenum<GLint> +{ + static constexpr GLenum value = GL_INT; +}; +template <> +struct GLTypeToGLenum<GLuint> +{ + static constexpr GLenum value = GL_UNSIGNED_INT; +}; +template <> +struct GLTypeToGLenum<GLboolean> +{ + static constexpr GLenum value = GL_BOOL; +}; +template <> +struct GLTypeToGLenum<GLint64> +{ + static constexpr GLenum value = GL_INT_64_ANGLEX; +}; +template <> +struct GLTypeToGLenum<GLuint64> +{ + static constexpr GLenum value = GL_UINT_64_ANGLEX; +}; +template <> +struct GLTypeToGLenum<GLfloat> +{ + static constexpr GLenum value = GL_FLOAT; +}; + +GLint CastMaskValue(const Context *context, GLuint value); + +template <typename QueryT, typename InternalT> +QueryT CastFromGLintStateValue(GLenum pname, InternalT value); + +template <typename QueryT, typename NativeT> +QueryT CastFromStateValue(GLenum pname, NativeT value); + +template <typename NativeT, typename QueryT> +NativeT CastQueryValueTo(GLenum pname, QueryT value); + +template <typename ParamType> +GLenum ConvertToGLenum(GLenum pname, ParamType param) +{ + return static_cast<GLenum>(CastQueryValueTo<GLuint>(pname, param)); +} + +template <typename ParamType> +GLenum ConvertToGLenum(ParamType param) +{ + return ConvertToGLenum(GL_NONE, param); +} + +template <typename ParamType> +GLenum ConvertToGLint(ParamType param) +{ + return CastQueryValueTo<GLint>(GL_NONE, param); +} + +template <typename ParamType> +bool ConvertToBool(ParamType param) +{ + return param != GL_FALSE; +} + +template <typename ParamType> +GLboolean ConvertToGLBoolean(ParamType param) +{ + return param ? GL_TRUE : GL_FALSE; +} + +// The GL state query API types are: bool, int, uint, float, int64, uint64 template <typename QueryT> 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 <typename QueryT> +void CastIndexedStateValues(Context *context, + GLenum nativeType, + GLenum pname, + GLuint index, + unsigned int numParams, + QueryT *outParams); } #endif // LIBANGLE_QUERY_CONVERSIONS_H_ |