blob: b228d8e8c5d60752a608602ebc8de9b44edc284c [file] [log] [blame]
//
// 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 <cstdint>
namespace angle
{
template <typename T>
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 <typename T>
bool operator==(const Color<T> &a, const Color<T> &b);
template <typename T>
bool operator!=(const Color<T> &a, const Color<T> &b);
typedef Color<float> ColorF;
typedef Color<int> ColorI;
typedef Color<unsigned int> 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 <typename T>
using Color = angle::Color<T>;
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_