tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

queryconversions.h (3504B)


      1 //
      2 // Copyright 2014 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 // queryconversions.h: Declaration of state query cast conversions
      8 
      9 #ifndef LIBANGLE_QUERY_CONVERSIONS_H_
     10 #define LIBANGLE_QUERY_CONVERSIONS_H_
     11 
     12 #include "angle_gl.h"
     13 #include "common/angleutils.h"
     14 
     15 namespace gl
     16 {
     17 class Context;
     18 
     19 // Helper class for converting a GL type to a GLenum:
     20 // We can't use CastStateValueEnum generally, because of GLboolean + GLubyte overlap.
     21 // We restrict our use to CastFromStateValue and CastQueryValueTo, where it eliminates
     22 // duplicate parameters.
     23 
     24 template <typename GLType>
     25 struct GLTypeToGLenum
     26 {
     27    // static constexpr GLenum value;
     28 };
     29 
     30 template <>
     31 struct GLTypeToGLenum<GLint>
     32 {
     33    static constexpr GLenum value = GL_INT;
     34 };
     35 template <>
     36 struct GLTypeToGLenum<GLuint>
     37 {
     38    static constexpr GLenum value = GL_UNSIGNED_INT;
     39 };
     40 template <>
     41 struct GLTypeToGLenum<GLboolean>
     42 {
     43    static constexpr GLenum value = GL_BOOL;
     44 };
     45 template <>
     46 struct GLTypeToGLenum<GLint64>
     47 {
     48    static constexpr GLenum value = GL_INT_64_ANGLEX;
     49 };
     50 template <>
     51 struct GLTypeToGLenum<GLuint64>
     52 {
     53    static constexpr GLenum value = GL_UINT_64_ANGLEX;
     54 };
     55 template <>
     56 struct GLTypeToGLenum<GLfloat>
     57 {
     58    static constexpr GLenum value = GL_FLOAT;
     59 };
     60 
     61 GLint CastMaskValue(GLuint value);
     62 
     63 template <typename QueryT, typename InternalT>
     64 QueryT CastFromGLintStateValue(GLenum pname, InternalT value);
     65 
     66 template <typename QueryT, typename NativeT>
     67 QueryT CastFromStateValue(GLenum pname, NativeT value);
     68 
     69 template <typename NativeT, typename QueryT>
     70 NativeT CastQueryValueTo(GLenum pname, QueryT value);
     71 
     72 template <typename ParamType>
     73 GLenum ConvertToGLenum(GLenum pname, ParamType param)
     74 {
     75    return static_cast<GLenum>(CastQueryValueTo<GLuint>(pname, param));
     76 }
     77 
     78 template <typename ParamType>
     79 GLenum ConvertToGLenum(ParamType param)
     80 {
     81    return ConvertToGLenum(GL_NONE, param);
     82 }
     83 
     84 template <typename OutType>
     85 OutType ConvertGLenum(GLenum param)
     86 {
     87    return static_cast<OutType>(param);
     88 }
     89 
     90 template <typename InType, typename OutType>
     91 void ConvertGLenumValue(InType param, OutType *out)
     92 {
     93    *out = ConvertGLenum<OutType>(static_cast<GLenum>(param));
     94 }
     95 
     96 template <typename PackedEnumType, typename OutType>
     97 void ConvertPackedEnum(PackedEnumType param, OutType *out)
     98 {
     99    *out = static_cast<OutType>(ToGLenum(param));
    100 }
    101 
    102 template <typename ParamType>
    103 GLint ConvertToGLint(ParamType param)
    104 {
    105    return CastQueryValueTo<GLint>(GL_NONE, param);
    106 }
    107 
    108 template <typename ParamType>
    109 bool ConvertToBool(ParamType param)
    110 {
    111    return param != GL_FALSE;
    112 }
    113 
    114 template <typename ParamType>
    115 GLboolean ConvertToGLBoolean(ParamType param)
    116 {
    117    return param ? GL_TRUE : GL_FALSE;
    118 }
    119 
    120 // The GL state query API types are: bool, int, uint, float, int64, uint64
    121 template <typename QueryT>
    122 void CastStateValues(const Context *context,
    123                     GLenum nativeType,
    124                     GLenum pname,
    125                     unsigned int numParams,
    126                     QueryT *outParams);
    127 
    128 // The GL state query API types are: bool, int, uint, float, int64, uint64
    129 template <typename QueryT>
    130 void CastIndexedStateValues(Context *context,
    131                            GLenum nativeType,
    132                            GLenum pname,
    133                            GLuint index,
    134                            unsigned int numParams,
    135                            QueryT *outParams);
    136 }  // namespace gl
    137 
    138 #endif  // LIBANGLE_QUERY_CONVERSIONS_H_