// // Copyright 2016 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. // // Color.h : Defines the Color type used throughout the ANGLE libraries #ifndef COMMON_COLOR_H_ #define COMMON_COLOR_H_ #include namespace angle { template struct Color { Color(); constexpr Color(T r, T g, T b, T a); const T *data() const { return &red; } T *ptr() { return &red; } static Color fromData(const T *data) { return Color(data[0], data[1], data[2], data[3]); } void writeData(T *data) const { data[0] = red; data[1] = green; data[2] = blue; data[3] = alpha; } T red; T green; T blue; T alpha; }; template bool operator==(const Color &a, const Color &b); template bool operator!=(const Color &a, const Color &b); typedef Color ColorF; typedef Color ColorI; typedef Color ColorUI; struct ColorGeneric { inline ColorGeneric(); inline ColorGeneric(const ColorF &color); inline ColorGeneric(const ColorI &color); inline ColorGeneric(const ColorUI &color); enum class Type : uint8_t { Float = 0, Int = 1, UInt = 2 }; union { ColorF colorF; ColorI colorI; ColorUI colorUI; }; Type type; }; inline bool operator==(const ColorGeneric &a, const ColorGeneric &b); inline bool operator!=(const ColorGeneric &a, const ColorGeneric &b); struct DepthStencil { DepthStencil() : depth(0), stencil(0) {} // Double is needed to represent the 32-bit integer range of GL_DEPTH_COMPONENT32. double depth; uint32_t stencil; }; } // namespace angle // TODO: Move this fully into the angle namespace namespace gl { template using Color = angle::Color; using ColorF = angle::ColorF; using ColorI = angle::ColorI; using ColorUI = angle::ColorUI; using ColorGeneric = angle::ColorGeneric; } // namespace gl #include "Color.inc" #endif // COMMON_COLOR_H_