1 // 2 // Copyright 2016 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 // Color.h : Defines the Color type used throughout the ANGLE libraries 8 9 #ifndef COMMON_COLOR_H_ 10 #define COMMON_COLOR_H_ 11 12 #include <cstdint> 13 14 namespace angle 15 { 16 17 template <typename T> 18 struct Color 19 { 20 Color(); 21 constexpr Color(T r, T g, T b, T a); 22 dataColor23 const T *data() const { return &red; } ptrColor24 T *ptr() { return &red; } 25 fromDataColor26 static Color fromData(const T *data) { return Color(data[0], data[1], data[2], data[3]); } writeDataColor27 void writeData(T *data) const 28 { 29 data[0] = red; 30 data[1] = green; 31 data[2] = blue; 32 data[3] = alpha; 33 } 34 35 T red; 36 T green; 37 T blue; 38 T alpha; 39 }; 40 41 template <typename T> 42 bool operator==(const Color<T> &a, const Color<T> &b); 43 44 template <typename T> 45 bool operator!=(const Color<T> &a, const Color<T> &b); 46 47 typedef Color<float> ColorF; 48 typedef Color<int> ColorI; 49 typedef Color<unsigned int> ColorUI; 50 51 struct ColorGeneric 52 { 53 inline ColorGeneric(); 54 inline ColorGeneric(const ColorF &color); 55 inline ColorGeneric(const ColorI &color); 56 inline ColorGeneric(const ColorUI &color); 57 58 enum class Type : uint8_t 59 { 60 Float = 0, 61 Int = 1, 62 UInt = 2 63 }; 64 65 union 66 { 67 ColorF colorF; 68 ColorI colorI; 69 ColorUI colorUI; 70 }; 71 72 Type type; 73 }; 74 75 inline bool operator==(const ColorGeneric &a, const ColorGeneric &b); 76 77 inline bool operator!=(const ColorGeneric &a, const ColorGeneric &b); 78 79 struct DepthStencil 80 { DepthStencilDepthStencil81 DepthStencil() : depth(0), stencil(0) {} 82 83 // Double is needed to represent the 32-bit integer range of GL_DEPTH_COMPONENT32. 84 double depth; 85 uint32_t stencil; 86 }; 87 } // namespace angle 88 89 // TODO: Move this fully into the angle namespace 90 namespace gl 91 { 92 93 template <typename T> 94 using Color = angle::Color<T>; 95 using ColorF = angle::ColorF; 96 using ColorI = angle::ColorI; 97 using ColorUI = angle::ColorUI; 98 using ColorGeneric = angle::ColorGeneric; 99 100 } // namespace gl 101 102 #include "Color.inc" 103 104 #endif // COMMON_COLOR_H_ 105