Chromium Code Reviews| Index: src/gpu/GrDrawState.h |
| diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h |
| index cc1df05ec31b03bc6fd14766857ee07addea950c..5af17a5e719a2d0332076f7842db9c8442959cb6 100644 |
| --- a/src/gpu/GrDrawState.h |
| +++ b/src/gpu/GrDrawState.h |
| @@ -8,20 +8,18 @@ |
| #ifndef GrDrawState_DEFINED |
| #define GrDrawState_DEFINED |
| +#include "GrRODrawState.h" |
| + |
| #include "GrBlend.h" |
| -#include "GrColor.h" |
| -#include "GrEffectStage.h" |
| -#include "GrStencil.h" |
| #include "effects/GrSimpleTextureEffect.h" |
| -#include "SkMatrix.h" |
| - |
| -class GrDrawTargetCaps; |
| -class GrPaint; |
| -class GrRenderTarget; |
| -class GrTexture; |
| - |
| -class GrDrawState : public SkRefCnt { |
| +/** |
| + * Modifiable subclass derived from GrRODrawState. The majority of the data that represents a draw |
| + * state is stored in the parent class. GrDrawState contains methods for setting, adding to, etc. |
| + * various data members of the draw state. This class is used to configure the state used when |
| + * issuing draws via GrDrawTarget. |
| + */ |
| +class GrDrawState : public GrRODrawState { |
| public: |
| SK_DECLARE_INST_COUNT(GrDrawState) |
| @@ -69,10 +67,6 @@ public: |
| /// @name Vertex Attributes |
| //// |
| - enum { |
| - kMaxVertexAttribCnt = kLast_GrVertexAttribBinding + 4, |
| - }; |
| - |
| /** |
| * The format of vertices is represented as an array of GrVertexAttribs, with each representing |
| * the type of the attribute, its offset, and semantic binding (see GrVertexAttrib in |
| @@ -90,11 +84,6 @@ public: |
| this->setVertexAttribs(A, count); |
| } |
| - const GrVertexAttrib* getVertexAttribs() const { return fVAPtr; } |
| - int getVertexAttribCount() const { return fVACount; } |
| - |
| - size_t getVertexSize() const; |
| - |
| /** |
| * Sets default vertex attributes for next draw. The default is a single attribute: |
| * {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribType} |
| @@ -102,37 +91,6 @@ public: |
| void setDefaultVertexAttribs(); |
| /** |
| - * Getters for index into getVertexAttribs() for particular bindings. -1 is returned if the |
| - * binding does not appear in the current attribs. These bindings should appear only once in |
| - * the attrib array. |
| - */ |
| - |
| - int positionAttributeIndex() const { |
| - return fFixedFunctionVertexAttribIndices[kPosition_GrVertexAttribBinding]; |
| - } |
| - int localCoordAttributeIndex() const { |
| - return fFixedFunctionVertexAttribIndices[kLocalCoord_GrVertexAttribBinding]; |
| - } |
| - int colorVertexAttributeIndex() const { |
| - return fFixedFunctionVertexAttribIndices[kColor_GrVertexAttribBinding]; |
| - } |
| - int coverageVertexAttributeIndex() const { |
| - return fFixedFunctionVertexAttribIndices[kCoverage_GrVertexAttribBinding]; |
| - } |
| - |
| - bool hasLocalCoordAttribute() const { |
| - return -1 != fFixedFunctionVertexAttribIndices[kLocalCoord_GrVertexAttribBinding]; |
| - } |
| - bool hasColorVertexAttribute() const { |
| - return -1 != fFixedFunctionVertexAttribIndices[kColor_GrVertexAttribBinding]; |
| - } |
| - bool hasCoverageVertexAttribute() const { |
| - return -1 != fFixedFunctionVertexAttribIndices[kCoverage_GrVertexAttribBinding]; |
| - } |
| - |
| - bool validateVertexAttribs() const; |
| - |
| - /** |
| * Helper to save/restore vertex attribs |
| */ |
| class AutoVertexAttribRestore { |
| @@ -150,16 +108,6 @@ public: |
| /// @} |
| /** |
| - * Determines whether src alpha is guaranteed to be one for all src pixels |
| - */ |
| - bool srcAlphaWillBeOne() const; |
| - |
| - /** |
| - * Determines whether the output coverage is guaranteed to be one for all pixels hit by a draw. |
| - */ |
| - bool hasSolidCoverage() const; |
| - |
| - /** |
| * Depending on features available in the underlying 3D API and the color blend mode requested |
| * it may or may not be possible to correctly blend with fractional pixel coverage generated by |
| * the fragment shader. |
| @@ -187,8 +135,6 @@ public: |
| this->invalidateBlendOptFlags(); |
| } |
| - GrColor getColor() const { return fColor; } |
| - |
| /** |
| * Sets the color to be used for the next draw to be |
| * (r,g,b,a) = (alpha, alpha, alpha, alpha). |
| @@ -213,12 +159,6 @@ public: |
| this->invalidateBlendOptFlags(); |
| } |
| - uint8_t getCoverage() const { return fCoverage; } |
| - |
| - GrColor getCoverageColor() const { |
| - return GrColorPackRGBA(fCoverage, fCoverage, fCoverage, fCoverage); |
| - } |
| - |
| /// @} |
| /////////////////////////////////////////////////////////////////////////// |
| @@ -302,18 +242,6 @@ public: |
| int fCoverageEffectCnt; |
| }; |
| - int numColorStages() const { return fColorStages.count(); } |
| - int numCoverageStages() const { return fCoverageStages.count(); } |
| - int numTotalStages() const { return this->numColorStages() + this->numCoverageStages(); } |
| - |
| - const GrEffectStage& getColorStage(int stageIdx) const { return fColorStages[stageIdx]; } |
| - const GrEffectStage& getCoverageStage(int stageIdx) const { return fCoverageStages[stageIdx]; } |
| - |
| - /** |
| - * Checks whether any of the effects will read the dst pixel color. |
| - */ |
| - bool willEffectReadDstColor() const; |
| - |
| /// @} |
| /////////////////////////////////////////////////////////////////////////// |
| @@ -347,15 +275,6 @@ public: |
| #endif |
| } |
| - GrBlendCoeff getSrcBlendCoeff() const { return fSrcBlend; } |
| - GrBlendCoeff getDstBlendCoeff() const { return fDstBlend; } |
| - |
| - void getDstBlendCoeff(GrBlendCoeff* srcBlendCoeff, |
| - GrBlendCoeff* dstBlendCoeff) const { |
| - *srcBlendCoeff = fSrcBlend; |
| - *dstBlendCoeff = fDstBlend; |
| - } |
| - |
| /** |
| * Sets the blending function constant referenced by the following blending |
| * coefficients: |
| @@ -372,63 +291,6 @@ public: |
| } |
| /** |
| - * Retrieves the last value set by setBlendConstant() |
| - * @return the blending constant value |
| - */ |
| - GrColor getBlendConstant() const { return fBlendConstant; } |
| - |
| - /** |
| - * Determines whether multiplying the computed per-pixel color by the pixel's fractional |
| - * coverage before the blend will give the correct final destination color. In general it |
| - * will not as coverage is applied after blending. |
| - */ |
| - bool canTweakAlphaForCoverage() const; |
| - |
| - /** |
| - * Optimizations for blending / coverage to that can be applied based on the current state. |
| - */ |
| - enum BlendOptFlags { |
| - /** |
| - * No optimization |
| - */ |
| - kNone_BlendOpt = 0, |
| - /** |
| - * Don't draw at all |
| - */ |
| - kSkipDraw_BlendOptFlag = 0x1, |
| - /** |
| - * The coverage value does not have to be computed separately from alpha, the the output |
| - * color can be the modulation of the two. |
| - */ |
| - kCoverageAsAlpha_BlendOptFlag = 0x2, |
| - /** |
| - * Instead of emitting a src color, emit coverage in the alpha channel and r,g,b are |
| - * "don't cares". |
| - */ |
| - kEmitCoverage_BlendOptFlag = 0x4, |
| - /** |
| - * Emit transparent black instead of the src color, no need to compute coverage. |
| - */ |
| - kEmitTransBlack_BlendOptFlag = 0x8, |
| - /** |
| - * Flag used to invalidate the cached BlendOptFlags, OptSrcCoeff, and OptDstCoeff cached by |
| - * the get BlendOpts function. |
| - */ |
| - kInvalid_BlendOptFlag = 1 << 31, |
| - }; |
| - GR_DECL_BITFIELD_OPS_FRIENDS(BlendOptFlags); |
| - |
| - void invalidateBlendOptFlags() { |
| - fBlendOptFlags = kInvalid_BlendOptFlag; |
| - } |
| - |
| - /** |
| - * We don't use suplied vertex color attributes if our blend mode is EmitCoverage or |
| - * EmitTransBlack |
| - */ |
| - bool canIgnoreColorAttribute() const; |
| - |
| - /** |
| * Determines what optimizations can be applied based on the blend. The coefficients may have |
| * to be tweaked in order for the optimization to work. srcCoeff and dstCoeff are optional |
| * params that receive the tweaked coefficients. Normally the function looks at the current |
| @@ -445,6 +307,13 @@ public: |
| GrBlendCoeff* srcCoeff = NULL, |
| GrBlendCoeff* dstCoeff = NULL) const; |
| + /** |
| + * We don't use suplied vertex color attributes if our blend mode is EmitCoverage or |
| + * EmitTransBlack |
| + */ |
| + bool canIgnoreColorAttribute() const; |
| + |
| + |
| /// @} |
| /////////////////////////////////////////////////////////////////////////// |
| @@ -457,34 +326,6 @@ public: |
| */ |
| bool setIdentityViewMatrix(); |
| - /** |
| - * Retrieves the current view matrix |
| - * @return the current view matrix. |
| - */ |
| - const SkMatrix& getViewMatrix() const { return fViewMatrix; } |
| - |
| - /** |
| - * Retrieves the inverse of the current view matrix. |
| - * |
| - * If the current view matrix is invertible, return true, and if matrix |
| - * is non-null, copy the inverse into it. If the current view matrix is |
| - * non-invertible, return false and ignore the matrix parameter. |
| - * |
| - * @param matrix if not null, will receive a copy of the current inverse. |
| - */ |
| - bool getViewInverse(SkMatrix* matrix) const { |
| - // TODO: determine whether we really need to leave matrix unmodified |
| - // at call sites when inversion fails. |
| - SkMatrix inverse; |
| - if (fViewMatrix.invert(&inverse)) { |
| - if (matrix) { |
| - *matrix = inverse; |
| - } |
| - return true; |
| - } |
| - return false; |
| - } |
| - |
| //////////////////////////////////////////////////////////////////////////// |
| /** |
| @@ -535,14 +376,6 @@ public: |
| */ |
| void setRenderTarget(GrRenderTarget* target) { fRenderTarget.reset(SkSafeRef(target)); } |
| - /** |
| - * Retrieves the currently set render-target. |
| - * |
| - * @return The currently set render target. |
| - */ |
| - const GrRenderTarget* getRenderTarget() const { return fRenderTarget.get(); } |
| - GrRenderTarget* getRenderTarget() { return fRenderTarget.get(); } |
| - |
| class AutoRenderTargetRestore : public ::SkNoncopyable { |
| public: |
| AutoRenderTargetRestore() : fDrawState(NULL), fSavedTarget(NULL) {} |
| @@ -603,8 +436,6 @@ public: |
| this->invalidateBlendOptFlags(); |
| } |
| - const GrStencilSettings& getStencil() const { return fStencilSettings; } |
| - |
| GrStencilSettings* stencil() { return &fStencilSettings; } |
| /// @} |
| @@ -613,46 +444,6 @@ public: |
| /// @name State Flags |
| //// |
| - /** |
| - * Flags that affect rendering. Controlled using enable/disableState(). All |
| - * default to disabled. |
| - */ |
| - enum StateBits { |
| - /** |
| - * Perform dithering. TODO: Re-evaluate whether we need this bit |
| - */ |
| - kDither_StateBit = 0x01, |
| - /** |
| - * Perform HW anti-aliasing. This means either HW FSAA, if supported by the render target, |
| - * or smooth-line rendering if a line primitive is drawn and line smoothing is supported by |
| - * the 3D API. |
| - */ |
| - kHWAntialias_StateBit = 0x02, |
| - /** |
| - * Draws will respect the clip, otherwise the clip is ignored. |
| - */ |
| - kClip_StateBit = 0x04, |
| - /** |
| - * Disables writing to the color buffer. Useful when performing stencil |
| - * operations. |
| - */ |
| - kNoColorWrites_StateBit = 0x08, |
| - |
| - /** |
| - * Usually coverage is applied after color blending. The color is blended using the coeffs |
| - * specified by setBlendFunc(). The blended color is then combined with dst using coeffs |
| - * of src_coverage, 1-src_coverage. Sometimes we are explicitly drawing a coverage mask. In |
| - * this case there is no distinction between coverage and color and the caller needs direct |
| - * control over the blend coeffs. When set, there will be a single blend step controlled by |
| - * setBlendFunc() which will use coverage*color as the src color. |
| - */ |
| - kCoverageDrawing_StateBit = 0x10, |
| - |
| - // Users of the class may add additional bits to the vector |
| - kDummyStateBit, |
| - kLastPublicStateBit = kDummyStateBit-1, |
| - }; |
| - |
| void resetStateFlags() { |
| fFlagBits = 0; |
| this->invalidateBlendOptFlags(); |
| @@ -692,28 +483,12 @@ public: |
| } |
| } |
| - bool isStateFlagEnabled(uint32_t stateBit) const { return 0 != (stateBit & fFlagBits); } |
| - |
| - bool isDitherState() const { return 0 != (fFlagBits & kDither_StateBit); } |
| - bool isHWAntialiasState() const { return 0 != (fFlagBits & kHWAntialias_StateBit); } |
| - bool isClipState() const { return 0 != (fFlagBits & kClip_StateBit); } |
| - bool isColorWriteDisabled() const { return 0 != (fFlagBits & kNoColorWrites_StateBit); } |
| - bool isCoverageDrawing() const { return 0 != (fFlagBits & kCoverageDrawing_StateBit); } |
| - |
| /// @} |
| /////////////////////////////////////////////////////////////////////////// |
| /// @name Face Culling |
| //// |
| - enum DrawFace { |
| - kInvalid_DrawFace = -1, |
| - |
| - kBoth_DrawFace, |
| - kCCW_DrawFace, |
| - kCW_DrawFace, |
| - }; |
| - |
| /** |
| * Controls whether clockwise, counterclockwise, or both faces are drawn. |
| * @param face the face(s) to draw. |
| @@ -723,13 +498,6 @@ public: |
| fDrawFace = face; |
| } |
| - /** |
| - * Gets whether the target is drawing clockwise, counterclockwise, |
| - * or both faces. |
| - * @return the current draw face(s). |
| - */ |
| - DrawFace getDrawFace() const { return fDrawFace; } |
| - |
| /// @} |
| /////////////////////////////////////////////////////////////////////////// |
| @@ -769,38 +537,25 @@ public: |
| private: |
| void onReset(const SkMatrix* initialViewMatrix); |
| + /** |
| + * Determines whether src alpha is guaranteed to be one for all src pixels |
| + */ |
| + bool srcAlphaWillBeOne() const; |
| + |
| + /** |
| + * Helper function for getBlendOpts. |
| + */ |
| BlendOptFlags calcBlendOpts(bool forceCoverage = false, |
| GrBlendCoeff* srcCoeff = NULL, |
| GrBlendCoeff* dstCoeff = NULL) const; |
| - // These fields are roughly sorted by decreasing likelihood of being different in op== |
| - SkAutoTUnref<GrRenderTarget> fRenderTarget; |
| - GrColor fColor; |
| - SkMatrix fViewMatrix; |
| - GrBlendCoeff fSrcBlend; |
| - GrBlendCoeff fDstBlend; |
| - GrColor fBlendConstant; |
| - uint32_t fFlagBits; |
| - const GrVertexAttrib* fVAPtr; |
| - int fVACount; |
| - size_t fVertexSize; |
| - GrStencilSettings fStencilSettings; |
| - uint8_t fCoverage; |
| - DrawFace fDrawFace; |
| - |
| - typedef SkSTArray<4, GrEffectStage> EffectStageArray; |
| - EffectStageArray fColorStages; |
| - EffectStageArray fCoverageStages; |
| + void invalidateBlendOptFlags() { |
| + fBlendOptFlags = kInvalid_BlendOptFlag; |
| + } |
| + |
|
bsalomon
2014/08/26 18:51:52
some extra newlines here
|
| - uint32_t fHints; |
| - |
| - mutable GrBlendCoeff fOptSrcBlend; |
| - mutable GrBlendCoeff fOptDstBlend; |
| - mutable BlendOptFlags fBlendOptFlags; |
| - // This is simply a different representation of info in fVertexAttribs and thus does |
| - // not need to be compared in op==. |
| - int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindingCnt]; |
| + uint32_t fHints; |
| // Some of the auto restore objects assume that no effects are removed during their lifetime. |
| // This is used to assert that this condition holds. |
| @@ -814,9 +569,7 @@ private: |
| */ |
| void setVertexAttribs(const GrVertexAttrib attribs[], int count); |
| - typedef SkRefCnt INHERITED; |
| + typedef GrRODrawState INHERITED; |
| }; |
| -GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags); |
| - |
| #endif |