| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef GrDrawState_DEFINED | 8 #ifndef GrDrawState_DEFINED |
| 9 #define GrDrawState_DEFINED | 9 #define GrDrawState_DEFINED |
| 10 | 10 |
| 11 | 11 |
| 12 #include "GrBlend.h" | 12 #include "GrBlend.h" |
| 13 #include "GrDrawTargetCaps.h" | 13 #include "GrDrawTargetCaps.h" |
| 14 #include "GrGeometryProcessor.h" | 14 #include "GrGeometryProcessor.h" |
| 15 #include "GrGpuResourceRef.h" | 15 #include "GrGpuResourceRef.h" |
| 16 #include "GrProcessorStage.h" | 16 #include "GrFragmentStage.h" |
| 17 #include "GrProcOptInfo.h" | 17 #include "GrProcOptInfo.h" |
| 18 #include "GrRenderTarget.h" | 18 #include "GrRenderTarget.h" |
| 19 #include "GrStencil.h" | 19 #include "GrStencil.h" |
| 20 #include "SkMatrix.h" | 20 #include "SkMatrix.h" |
| 21 #include "effects/GrSimpleTextureEffect.h" | 21 #include "effects/GrSimpleTextureEffect.h" |
| 22 | 22 |
| 23 class GrDrawTargetCaps; | 23 class GrDrawTargetCaps; |
| 24 class GrOptDrawState; | 24 class GrOptDrawState; |
| 25 class GrPaint; | 25 class GrPaint; |
| 26 class GrTexture; | 26 class GrTexture; |
| (...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 * | 533 * |
| 534 * @return The currently set render target. | 534 * @return The currently set render target. |
| 535 */ | 535 */ |
| 536 GrRenderTarget* getRenderTarget() const { return fRenderTarget.get(); } | 536 GrRenderTarget* getRenderTarget() const { return fRenderTarget.get(); } |
| 537 | 537 |
| 538 /** | 538 /** |
| 539 * Sets the render-target used at the next drawing call | 539 * Sets the render-target used at the next drawing call |
| 540 * | 540 * |
| 541 * @param target The render target to set. | 541 * @param target The render target to set. |
| 542 */ | 542 */ |
| 543 void setRenderTarget(GrRenderTarget* target) { | 543 void setRenderTarget(GrRenderTarget* target) { fRenderTarget.reset(SkSafeRef
(target)); } |
| 544 fRenderTarget.set(SkSafeRef(target), kWrite_GrIOType); | |
| 545 } | |
| 546 | 544 |
| 547 /// @} | 545 /// @} |
| 548 | 546 |
| 549 /////////////////////////////////////////////////////////////////////////// | 547 /////////////////////////////////////////////////////////////////////////// |
| 550 /// @name Stencil | 548 /// @name Stencil |
| 551 //// | 549 //// |
| 552 | 550 |
| 553 const GrStencilSettings& getStencil() const { return fStencilSettings; } | 551 const GrStencilSettings& getStencil() const { return fStencilSettings; } |
| 554 | 552 |
| 555 /** | 553 /** |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 712 }; | 710 }; |
| 713 | 711 |
| 714 void setHint(Hints hint, bool value) { fHints = value ? (fHints | hint) : (f
Hints & ~hint); } | 712 void setHint(Hints hint, bool value) { fHints = value ? (fHints | hint) : (f
Hints & ~hint); } |
| 715 | 713 |
| 716 bool vertexColorsAreOpaque() const { return kVertexColorsAreOpaque_Hint & fH
ints; } | 714 bool vertexColorsAreOpaque() const { return kVertexColorsAreOpaque_Hint & fH
ints; } |
| 717 | 715 |
| 718 /// @} | 716 /// @} |
| 719 | 717 |
| 720 /////////////////////////////////////////////////////////////////////////// | 718 /////////////////////////////////////////////////////////////////////////// |
| 721 | 719 |
| 722 /** Return type for CombineIfPossible. */ | |
| 723 enum CombinedState { | |
| 724 /** The GrDrawStates cannot be combined. */ | |
| 725 kIncompatible_CombinedState, | |
| 726 /** Either draw state can be used in place of the other. */ | |
| 727 kAOrB_CombinedState, | |
| 728 /** Use the first draw state. */ | |
| 729 kA_CombinedState, | |
| 730 /** Use the second draw state. */ | |
| 731 kB_CombinedState, | |
| 732 }; | |
| 733 | |
| 734 /** This function determines whether the GrDrawStates used for two draws can
be combined into | |
| 735 a single GrDrawState. This is used to avoid storing redundant GrDrawStat
es and to determine | |
| 736 if draws can be batched. The return value indicates whether combining is
possible and, if | |
| 737 so, which of the two inputs should be used. */ | |
| 738 static CombinedState CombineIfPossible(const GrDrawState& a, const GrDrawSta
te& b, | |
| 739 const GrDrawTargetCaps& caps); | |
| 740 | |
| 741 GrDrawState& operator= (const GrDrawState& that); | 720 GrDrawState& operator= (const GrDrawState& that); |
| 742 | 721 |
| 743 private: | 722 private: |
| 744 /** | |
| 745 * Converts refs on GrGpuResources owned directly or indirectly by this GrDr
awState into | |
| 746 * pending reads and writes. This should be called when a GrDrawState is rec
orded into | |
| 747 * a GrDrawTarget for later execution. Subclasses of GrDrawState may add set
ters. However, | |
| 748 * once this call has been made the GrDrawState is immutable. It is also no
longer copyable. | |
| 749 * In the future this conversion will automatically happen when converting a
GrDrawState into | |
| 750 * an optimized draw state. | |
| 751 */ | |
| 752 void convertToPendingExec(); | |
| 753 | |
| 754 friend class GrDrawTarget; | |
| 755 | |
| 756 bool isEqual(const GrDrawState& that) const; | 723 bool isEqual(const GrDrawState& that) const; |
| 757 | 724 |
| 758 /** | 725 /** |
| 759 * Optimizations for blending / coverage to that can be applied based on the
current state. | 726 * Optimizations for blending / coverage to that can be applied based on the
current state. |
| 760 */ | 727 */ |
| 761 enum BlendOptFlags { | 728 enum BlendOptFlags { |
| 762 /** | 729 /** |
| 763 * No optimization | 730 * No optimization |
| 764 */ | 731 */ |
| 765 kNone_BlendOpt = 0, | 732 kNone_BlendOpt = 0, |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 void calcCoverageInvariantOutput() const; | 796 void calcCoverageInvariantOutput() const; |
| 830 | 797 |
| 831 void onReset(const SkMatrix* initialViewMatrix); | 798 void onReset(const SkMatrix* initialViewMatrix); |
| 832 | 799 |
| 833 // Some of the auto restore objects assume that no effects are removed durin
g their lifetime. | 800 // Some of the auto restore objects assume that no effects are removed durin
g their lifetime. |
| 834 // This is used to assert that this condition holds. | 801 // This is used to assert that this condition holds. |
| 835 SkDEBUGCODE(int fBlockEffectRemovalCnt;) | 802 SkDEBUGCODE(int fBlockEffectRemovalCnt;) |
| 836 | 803 |
| 837 void internalSetVertexAttribs(const GrVertexAttrib attribs[], int count, siz
e_t stride); | 804 void internalSetVertexAttribs(const GrVertexAttrib attribs[], int count, siz
e_t stride); |
| 838 | 805 |
| 839 typedef GrTGpuResourceRef<GrRenderTarget> ProgramRenderTarget; | 806 typedef SkSTArray<4, GrFragmentStage> FragmentStageArray; |
| 840 // These fields are roughly sorted by decreasing likelihood of being differe
nt in op== | |
| 841 ProgramRenderTarget fRenderTarget; | |
| 842 GrColor fColor; | |
| 843 SkMatrix fViewMatrix; | |
| 844 GrColor fBlendConstant; | |
| 845 uint32_t fFlagBits; | |
| 846 const GrVertexAttrib* fVAPtr; | |
| 847 int fVACount; | |
| 848 size_t fVAStride; | |
| 849 GrStencilSettings fStencilSettings; | |
| 850 uint8_t fCoverage; | |
| 851 DrawFace fDrawFace; | |
| 852 GrBlendCoeff fSrcBlend; | |
| 853 GrBlendCoeff fDstBlend; | |
| 854 | 807 |
| 855 typedef SkSTArray<4, GrFragmentStage> FragmentStageArray; | 808 SkAutoTUnref<GrRenderTarget> fRenderTarget; |
| 856 typedef GrProgramElementRef<const GrGeometryProcessor> ProgramGeometryProces
sor; | 809 GrColor fColor; |
| 857 ProgramGeometryProcessor fGeometryProcessor; | 810 SkMatrix fViewMatrix; |
| 858 FragmentStageArray fColorStages; | 811 GrColor fBlendConstant; |
| 859 FragmentStageArray fCoverageStages; | 812 uint32_t fFlagBits; |
| 860 | 813 const GrVertexAttrib* fVAPtr; |
| 861 uint32_t fHints; | 814 int fVACount; |
| 815 size_t fVAStride; |
| 816 GrStencilSettings fStencilSettings; |
| 817 uint8_t fCoverage; |
| 818 DrawFace fDrawFace; |
| 819 GrBlendCoeff fSrcBlend; |
| 820 GrBlendCoeff fDstBlend; |
| 821 SkAutoTUnref<const GrGeometryProcessor> fGeometryProcessor; |
| 822 FragmentStageArray fColorStages; |
| 823 FragmentStageArray fCoverageStages; |
| 824 uint32_t fHints; |
| 862 | 825 |
| 863 // This is simply a different representation of info in fVertexAttribs and t
hus does | 826 // This is simply a different representation of info in fVertexAttribs and t
hus does |
| 864 // not need to be compared in op==. | 827 // not need to be compared in op==. |
| 865 int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindingCnt
]; | 828 int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindingCnt
]; |
| 866 | 829 |
| 867 mutable GrProcOptInfo fColorProcInfo; | 830 mutable GrProcOptInfo fColorProcInfo; |
| 868 mutable GrProcOptInfo fCoverageProcInfo; | 831 mutable GrProcOptInfo fCoverageProcInfo; |
| 869 mutable bool fColorProcInfoValid; | 832 mutable bool fColorProcInfoValid; |
| 870 mutable bool fCoverageProcInfoValid; | 833 mutable bool fCoverageProcInfoValid; |
| 871 | 834 |
| 872 friend class GrOptDrawState; | 835 friend class GrOptDrawState; |
| 873 }; | 836 }; |
| 874 | 837 |
| 875 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags); | 838 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags); |
| 876 | 839 |
| 877 #endif | 840 #endif |
| OLD | NEW |