| Index: src/gpu/GrOptDrawState.h
|
| diff --git a/src/gpu/GrOptDrawState.h b/src/gpu/GrOptDrawState.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a4edc01c8a465cdf3a510dc10af7b2811fddb8c7
|
| --- /dev/null
|
| +++ b/src/gpu/GrOptDrawState.h
|
| @@ -0,0 +1,67 @@
|
| +/*
|
| + * Copyright 2014 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef GrOptDrawState_DEFINED
|
| +#define GrOptDrawState_DEFINED
|
| +
|
| +#include "GrRODrawState.h"
|
| +
|
| +class GrDrawState;
|
| +
|
| +/**
|
| + * Subclass of GrRODrawState that holds an optimized version of a GrDrawState. Like it's parent
|
| + * it is meant to be an immutable class, and simply adds a few helpful data members not in the
|
| + * base class.
|
| + */
|
| +class GrOptDrawState : public GrRODrawState {
|
| +public:
|
| + /**
|
| + * Constructs and optimized drawState out of a GrRODrawState.
|
| + */
|
| + explicit GrOptDrawState(const GrDrawState& drawState);
|
| +
|
| + bool operator== (const GrOptDrawState& that) const;
|
| +
|
| +private:
|
| + /*
|
| + * Loops through all the color stage effects to check if the stage will ignore color input or
|
| + * always output a constant color. In the ignore color input case we can ignore all previous
|
| + * stages. In the constant color case, we can ignore all previous stages and
|
| + * the current one and set the state color to the constant color. Once we determine the so
|
| + * called first effective stage, we copy all the effective stages into our optimized
|
| + * state.
|
| + */
|
| + void copyEffectiveColorStages(const GrDrawState& ds);
|
| +
|
| + /*
|
| + * Loops through all the coverage stage effects to check if the stage will ignore color input.
|
| + * If a coverage stage will ignore input, then we can ignore all coverage stages before it. We
|
| + * loop to determine the first effective coverage stage, and then copy all of our effective
|
| + * coverage stages into our optimized state.
|
| + */
|
| + void copyEffectiveCoverageStages(const GrDrawState& ds);
|
| +
|
| + /*
|
| + * This function takes in a flag and removes the corresponding fixed function vertex attributes.
|
| + * The flags are in the same order as GrVertexAttribBinding array. If bit i of removeVAFlags is
|
| + * set, then vertex attributes with binding (GrVertexAttribute)i will be removed.
|
| + */
|
| + void removeFixedFunctionVertexAttribs(uint8_t removeVAFlags);
|
| +
|
| + void removeColorVertexAttrib();
|
| +
|
| + // These flags are needed to protect the code from creating an unused uniform color/coverage
|
| + // which will cause shader compiler errors.
|
| + bool fInputColorIsUsed;
|
| + bool fInputCoverageIsUsed;
|
| +
|
| + SkAutoSTArray<4, GrVertexAttrib> fOptVA;
|
| +
|
| + typedef GrRODrawState INHERITED;
|
| +};
|
| +
|
| +#endif
|
|
|