#ifndef SkGLState_DEFINED #define SkGLState_DEFINED #include "SkGL.h" #include "SkSize.h" class SkGLState { public: static SkGLState& GlobalState() { return gState; } SkGLState(); void reset(); // internally, these are bit_shifts, so they must be 0, 1, ... enum Caps { kDITHER, kTEXTURE_2D, }; void enable(Caps); void disable(Caps); // internally, these are bit_shifts, so they must be 0, 1, ... enum ClientState { kTEXTURE_COORD_ARRAY, kCOLOR_ARRAY, }; void enableClientState(ClientState); void disableClientState(ClientState); // we use -1 for unknown, so the enum must be >= 0 enum ShadeModel { kFLAT, kSMOOTH, }; void shadeModel(ShadeModel); void scissor(int x, int y, int w, int h); void color(SkColor c) { this->pmColor(SkPreMultiplyColor(c)); } void alpha(U8CPU a) { this->pmColor((a << 24) | (a << 16) | (a << 8) | a); } void pmColor(SkPMColor); void blendFunc(GLenum src, GLenum dst); void pointSize(float); void lineWidth(float); private: void init(); unsigned fCapBits; unsigned fClientStateBits; int fShadeModel; SkIPoint fScissorLoc; SkISize fScissorSize; SkPMColor fPMColor; GLenum fSrcBlend, fDstBlend; float fPointSize; float fLineWidth; const GLenum* fCapsPtr; const GLenum* fClientPtr; const GLenum* fShadePtr; static SkGLState gState; }; #endif