| 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 |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 | 214 |
| 215 /** | 215 /** |
| 216 * The geometry processor is the sole element of the skia pipeline which can
use the vertex, | 216 * The geometry processor is the sole element of the skia pipeline which can
use the vertex, |
| 217 * geometry, and tesselation shaders. The GP may also compute a coverage in
its fragment shader | 217 * geometry, and tesselation shaders. The GP may also compute a coverage in
its fragment shader |
| 218 * but is never put in the color processing pipeline. | 218 * but is never put in the color processing pipeline. |
| 219 */ | 219 */ |
| 220 | 220 |
| 221 const GrGeometryProcessor* setGeometryProcessor(const GrGeometryProcessor* g
eometryProcessor) { | 221 const GrGeometryProcessor* setGeometryProcessor(const GrGeometryProcessor* g
eometryProcessor) { |
| 222 SkASSERT(geometryProcessor); | 222 SkASSERT(geometryProcessor); |
| 223 SkASSERT(!this->hasGeometryProcessor()); | 223 SkASSERT(!this->hasGeometryProcessor()); |
| 224 fGeometryProcessor.reset(SkRef(geometryProcessor)); | 224 fGeometryProcessor.reset(new GrGeometryStage(geometryProcessor)); |
| 225 this->invalidateOptState(); | 225 this->invalidateOptState(); |
| 226 return geometryProcessor; | 226 return geometryProcessor; |
| 227 } | 227 } |
| 228 | 228 |
| 229 /////////////////////////////////////////////////////////////////////////// | 229 /////////////////////////////////////////////////////////////////////////// |
| 230 /// @name Effect Stages | 230 /// @name Effect Stages |
| 231 /// Each stage hosts a GrProcessor. The effect produces an output color or c
overage in the | 231 /// Each stage hosts a GrProcessor. The effect produces an output color or c
overage in the |
| 232 /// fragment shader. Its inputs are the output from the previous stage as we
ll as some variables | 232 /// fragment shader. Its inputs are the output from the previous stage as we
ll as some variables |
| 233 /// available to it in the fragment and vertex shader (e.g. the vertex posit
ion, the dst color, | 233 /// available to it in the fragment and vertex shader (e.g. the vertex posit
ion, the dst color, |
| 234 /// the fragment position, local coordinates). | 234 /// the fragment position, local coordinates). |
| (...skipping 12 matching lines...) Expand all Loading... |
| 247 //// | 247 //// |
| 248 | 248 |
| 249 int numColorStages() const { return fColorStages.count(); } | 249 int numColorStages() const { return fColorStages.count(); } |
| 250 int numCoverageStages() const { return fCoverageStages.count(); } | 250 int numCoverageStages() const { return fCoverageStages.count(); } |
| 251 int numTotalStages() const { | 251 int numTotalStages() const { |
| 252 return this->numColorStages() + this->numCoverageStages() + | 252 return this->numColorStages() + this->numCoverageStages() + |
| 253 (this->hasGeometryProcessor() ? 1 : 0); | 253 (this->hasGeometryProcessor() ? 1 : 0); |
| 254 } | 254 } |
| 255 | 255 |
| 256 bool hasGeometryProcessor() const { return SkToBool(fGeometryProcessor.get()
); } | 256 bool hasGeometryProcessor() const { return SkToBool(fGeometryProcessor.get()
); } |
| 257 const GrGeometryProcessor* getGeometryProcessor() const { return fGeometryPr
ocessor.get(); } | 257 const GrGeometryStage* getGeometryProcessor() const { return fGeometryProces
sor.get(); } |
| 258 const GrFragmentStage& getColorStage(int idx) const { return fColorStages[id
x]; } | 258 const GrFragmentStage& getColorStage(int idx) const { return fColorStages[id
x]; } |
| 259 const GrFragmentStage& getCoverageStage(int idx) const { return fCoverageSta
ges[idx]; } | 259 const GrFragmentStage& getCoverageStage(int idx) const { return fCoverageSta
ges[idx]; } |
| 260 | 260 |
| 261 /** | 261 /** |
| 262 * Checks whether any of the effects will read the dst pixel color. | 262 * Checks whether any of the effects will read the dst pixel color. |
| 263 */ | 263 */ |
| 264 bool willEffectReadDstColor() const; | 264 bool willEffectReadDstColor() const; |
| 265 | 265 |
| 266 const GrFragmentProcessor* addColorProcessor(const GrFragmentProcessor* effe
ct) { | 266 const GrFragmentProcessor* addColorProcessor(const GrFragmentProcessor* effe
ct) { |
| 267 SkASSERT(effect); | 267 SkASSERT(effect); |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 /** Sets the draw state's matrix to identity. This can fail because the
current view matrix | 478 /** Sets the draw state's matrix to identity. This can fail because the
current view matrix |
| 479 is not invertible. */ | 479 is not invertible. */ |
| 480 bool setIdentity(GrDrawState* drawState); | 480 bool setIdentity(GrDrawState* drawState); |
| 481 | 481 |
| 482 private: | 482 private: |
| 483 void doEffectCoordChanges(const SkMatrix& coordChangeMatrix); | 483 void doEffectCoordChanges(const SkMatrix& coordChangeMatrix); |
| 484 | 484 |
| 485 GrDrawState* fDrawState; | 485 GrDrawState* fDrawState; |
| 486 SkMatrix fViewMatrix; | 486 SkMatrix fViewMatrix; |
| 487 int fNumColorStages; | 487 int fNumColorStages; |
| 488 SkAutoSTArray<8, GrFragmentStage::SavedCoordChange> fSavedCoordChange
s; | 488 bool fHasGeometryProce
ssor; |
| 489 SkAutoSTArray<8, GrProcessorStage::SavedCoordChange> fSavedCoordChange
s; |
| 489 }; | 490 }; |
| 490 | 491 |
| 491 /// @} | 492 /// @} |
| 492 | 493 |
| 493 /////////////////////////////////////////////////////////////////////////// | 494 /////////////////////////////////////////////////////////////////////////// |
| 494 /// @name Render Target | 495 /// @name Render Target |
| 495 //// | 496 //// |
| 496 | 497 |
| 497 /** | 498 /** |
| 498 * Retrieves the currently set render-target. | 499 * Retrieves the currently set render-target. |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 802 uint32_t fFlagBits; | 803 uint32_t fFlagBits; |
| 803 const GrVertexAttrib* fVAPtr; | 804 const GrVertexAttrib* fVAPtr; |
| 804 int fVACount; | 805 int fVACount; |
| 805 size_t fVAStride; | 806 size_t fVAStride; |
| 806 GrStencilSettings fStencilSettings; | 807 GrStencilSettings fStencilSettings; |
| 807 uint8_t fCoverage; | 808 uint8_t fCoverage; |
| 808 DrawFace fDrawFace; | 809 DrawFace fDrawFace; |
| 809 GrBlendCoeff fSrcBlend; | 810 GrBlendCoeff fSrcBlend; |
| 810 GrBlendCoeff fDstBlend; | 811 GrBlendCoeff fDstBlend; |
| 811 | 812 |
| 812 typedef SkSTArray<4, GrFragmentStage> FragmentStageArray; | 813 typedef SkSTArray<4, GrFragmentStage> FragmentStageArray; |
| 813 typedef GrProgramElementRef<const GrGeometryProcessor> ProgramGeometryProces
sor; | 814 SkAutoTDelete<GrGeometryStage> fGeometryProcessor; |
| 814 ProgramGeometryProcessor fGeometryProcessor; | 815 FragmentStageArray fColorStages; |
| 815 FragmentStageArray fColorStages; | 816 FragmentStageArray fCoverageStages; |
| 816 FragmentStageArray fCoverageStages; | |
| 817 | 817 |
| 818 uint32_t fHints; | 818 uint32_t fHints; |
| 819 | 819 |
| 820 // This is simply a different representation of info in fVertexAttribs and t
hus does | 820 // This is simply a different representation of info in fVertexAttribs and t
hus does |
| 821 // not need to be compared in op==. | 821 // not need to be compared in op==. |
| 822 int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindingCnt
]; | 822 int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindingCnt
]; |
| 823 | 823 |
| 824 mutable GrOptDrawState* fCachedOptState; | 824 mutable GrOptDrawState* fCachedOptState; |
| 825 mutable uint32_t fCachedCapsID; | 825 mutable uint32_t fCachedCapsID; |
| 826 | 826 |
| 827 friend class GrOptDrawState; | 827 friend class GrOptDrawState; |
| 828 | 828 |
| 829 typedef SkRefCnt INHERITED; | 829 typedef SkRefCnt INHERITED; |
| 830 }; | 830 }; |
| 831 | 831 |
| 832 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags); | 832 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags); |
| 833 | 833 |
| 834 #endif | 834 #endif |
| OLD | NEW |