blob: 922053e92cca3fa66b015cdd67e900940f689272 [file] [log] [blame]
//
// Copyright (c) 2012-2013 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.
//
// angletypes.h : Defines a variety of structures and enum types that are used throughout libGLESv2
#ifndef LIBGLESV2_ANGLETYPES_H_
#define LIBGLESV2_ANGLETYPES_H_
#include "libGLESv2/constants.h"
#include "common/RefCountObject.h"
namespace gl
{
class Buffer;
class ProgramBinary;
struct VertexAttribute;
struct VertexAttribCurrentValueData;
enum SamplerType
{
SAMPLER_PIXEL,
SAMPLER_VERTEX
};
template <typename T>
struct Color
{
T red;
T green;
T blue;
T alpha;
Color() : red(0), green(0), blue(0), alpha(0) { }
Color(T r, T g, T b, T a) : red(r), green(g), blue(b), alpha(a) { }
};
typedef Color<float> ColorF;
typedef Color<int> ColorI;
typedef Color<unsigned int> ColorUI;
struct Rectangle
{
int x;
int y;
int width;
int height;
Rectangle() : x(0), y(0), width(0), height(0) { }
Rectangle(int x_in, int y_in, int width_in, int height_in) : x(x_in), y(y_in), width(width_in), height(height_in) { }
};
bool ClipRectangle(const Rectangle &source, const Rectangle &clip, Rectangle *intersection);
struct Box
{
int x;
int y;
int z;
int width;
int height;
int depth;
Box() : x(0), y(0), z(0), width(0), height(0), depth(0) { }
Box(int x_in, int y_in, int z_in, int width_in, int height_in, int depth_in) : x(x_in), y(y_in), z(z_in), width(width_in), height(height_in), depth(depth_in) { }
};
struct Extents
{
int width;
int height;
int depth;
Extents() : width(0), height(0), depth(0) { }
Extents(int width_, int height_, int depth_) : width(width_), height(height_), depth(depth_) { }
};
struct RasterizerState
{
bool cullFace;
GLenum cullMode;
GLenum frontFace;
bool polygonOffsetFill;
GLfloat polygonOffsetFactor;
GLfloat polygonOffsetUnits;
bool pointDrawMode;
bool multiSample;
bool rasterizerDiscard;
};
struct BlendState
{
bool blend;
GLenum sourceBlendRGB;
GLenum destBlendRGB;
GLenum sourceBlendAlpha;
GLenum destBlendAlpha;
GLenum blendEquationRGB;
GLenum blendEquationAlpha;
bool colorMaskRed;
bool colorMaskGreen;
bool colorMaskBlue;
bool colorMaskAlpha;
bool sampleAlphaToCoverage;
bool dither;
};
struct DepthStencilState
{
bool depthTest;
GLenum depthFunc;
bool depthMask;
bool stencilTest;
GLenum stencilFunc;
GLuint stencilMask;
GLenum stencilFail;
GLenum stencilPassDepthFail;
GLenum stencilPassDepthPass;
GLuint stencilWritemask;
GLenum stencilBackFunc;
GLuint stencilBackMask;
GLenum stencilBackFail;
GLenum stencilBackPassDepthFail;
GLenum stencilBackPassDepthPass;
GLuint stencilBackWritemask;
};
struct SamplerState
{
SamplerState();
GLenum minFilter;
GLenum magFilter;
GLenum wrapS;
GLenum wrapT;
GLenum wrapR;
float maxAnisotropy;
GLint baseLevel;
GLint maxLevel;
GLfloat minLod;
GLfloat maxLod;
GLenum compareMode;
GLenum compareFunc;
GLenum swizzleRed;
GLenum swizzleGreen;
GLenum swizzleBlue;
GLenum swizzleAlpha;
bool swizzleRequired() const;
};
struct ClearParameters
{
bool clearColor[gl::IMPLEMENTATION_MAX_DRAW_BUFFERS];
ColorF colorFClearValue;
ColorI colorIClearValue;
ColorUI colorUIClearValue;
GLenum colorClearType;
bool colorMaskRed;
bool colorMaskGreen;
bool colorMaskBlue;
bool colorMaskAlpha;
bool clearDepth;
float depthClearValue;
bool clearStencil;
GLint stencilClearValue;
GLuint stencilWriteMask;
bool scissorEnabled;
Rectangle scissor;
};
struct PixelUnpackState
{
BindingPointer<Buffer> pixelBuffer;
GLint alignment;
PixelUnpackState()
: alignment(4)
{}
explicit PixelUnpackState(GLint alignmentIn)
: alignment(alignmentIn)
{}
};
struct PixelPackState
{
BindingPointer<Buffer> pixelBuffer;
GLint alignment;
bool reverseRowOrder;
PixelPackState()
: alignment(4),
reverseRowOrder(false)
{}
explicit PixelPackState(GLint alignmentIn, bool reverseRowOrderIn)
: alignment(alignmentIn),
reverseRowOrder(reverseRowOrderIn)
{}
};
struct VertexFormat
{
GLenum mType;
GLboolean mNormalized;
GLuint mComponents;
bool mPureInteger;
VertexFormat();
VertexFormat(GLenum type, GLboolean normalized, GLuint components, bool pureInteger);
explicit VertexFormat(const VertexAttribute &attribute);
VertexFormat(const VertexAttribute &attribute, GLenum currentValueType);
static void GetInputLayout(VertexFormat *inputLayout,
ProgramBinary *programBinary,
const VertexAttribute *attributes,
const gl::VertexAttribCurrentValueData *currentValues);
bool operator==(const VertexFormat &other) const;
bool operator!=(const VertexFormat &other) const;
bool operator<(const VertexFormat& other) const;
};
}
namespace rx
{
enum VertexConversionType
{
VERTEX_CONVERT_NONE = 0,
VERTEX_CONVERT_CPU = 1,
VERTEX_CONVERT_GPU = 2,
VERTEX_CONVERT_BOTH = 3
};
enum D3DWorkaroundType
{
ANGLE_D3D_WORKAROUND_NONE,
ANGLE_D3D_WORKAROUND_SKIP_OPTIMIZATION,
ANGLE_D3D_WORKAROUND_MAX_OPTIMIZATION
};
}
#endif // LIBGLESV2_ANGLETYPES_H_