Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(461)

Side by Side Diff: src/gpu/GrDrawState.h

Issue 227603006: hack Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: yet more hackage Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/GrLayerCache.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 /////////////////////////////////////////////////////////////////////////// 625 ///////////////////////////////////////////////////////////////////////////
626 /// @name Render Target 626 /// @name Render Target
627 //// 627 ////
628 628
629 /** 629 /**
630 * Sets the render-target used at the next drawing call 630 * Sets the render-target used at the next drawing call
631 * 631 *
632 * @param target The render target to set. 632 * @param target The render target to set.
633 */ 633 */
634 void setRenderTarget(GrRenderTarget* target) { 634 void setRenderTarget(GrRenderTarget* target) {
635 fRenderTarget.reset(SkSafeRef(target)); 635 //SkDebugf("GrDrawState::setRenderTarget\n");
636 fRenderTarget1.reset(SkSafeRef(target));
636 } 637 }
637 638
638 /** 639 /**
639 * Retrieves the currently set render-target. 640 * Retrieves the currently set render-target.
640 * 641 *
641 * @return The currently set render target. 642 * @return The currently set render target.
642 */ 643 */
643 const GrRenderTarget* getRenderTarget() const { return fRenderTarget.get(); } 644 const GrRenderTarget* getRenderTarget() const { return fRenderTarget1.get(); }
644 GrRenderTarget* getRenderTarget() { return fRenderTarget.get(); } 645 GrRenderTarget* getRenderTarget() { return fRenderTarget1.get(); }
645 646
646 class AutoRenderTargetRestore : public ::SkNoncopyable { 647 class AutoRenderTargetRestore : public ::SkNoncopyable {
647 public: 648 public:
648 AutoRenderTargetRestore() : fDrawState(NULL), fSavedTarget(NULL) {} 649 AutoRenderTargetRestore() : fDrawState(NULL), fSavedTarget(NULL) {}
649 AutoRenderTargetRestore(GrDrawState* ds, GrRenderTarget* newTarget) { 650 AutoRenderTargetRestore(GrDrawState* ds, GrRenderTarget* newTarget) {
650 fDrawState = NULL; 651 fDrawState = NULL;
651 fSavedTarget = NULL; 652 fSavedTarget = NULL;
652 this->set(ds, newTarget); 653 this->set(ds, newTarget);
653 } 654 }
654 ~AutoRenderTargetRestore() { this->restore(); } 655 ~AutoRenderTargetRestore() { this->restore(); }
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 * or both faces. 840 * or both faces.
840 * @return the current draw face(s). 841 * @return the current draw face(s).
841 */ 842 */
842 DrawFace getDrawFace() const { return fCommon.fDrawFace; } 843 DrawFace getDrawFace() const { return fCommon.fDrawFace; }
843 844
844 /// @} 845 /// @}
845 846
846 /////////////////////////////////////////////////////////////////////////// 847 ///////////////////////////////////////////////////////////////////////////
847 848
848 bool operator ==(const GrDrawState& s) const { 849 bool operator ==(const GrDrawState& s) const {
849 if (fRenderTarget.get() != s.fRenderTarget.get() || 850 if (fRenderTarget1.get() != s.fRenderTarget1.get() ||
850 fColorStages.count() != s.fColorStages.count() || 851 fColorStages.count() != s.fColorStages.count() ||
851 fCoverageStages.count() != s.fCoverageStages.count() || 852 fCoverageStages.count() != s.fCoverageStages.count() ||
852 fCommon != s.fCommon) { 853 fCommon != s.fCommon) {
853 return false; 854 return false;
854 } 855 }
855 for (int i = 0; i < fColorStages.count(); i++) { 856 for (int i = 0; i < fColorStages.count(); i++) {
856 if (fColorStages[i] != s.fColorStages[i]) { 857 if (fColorStages[i] != s.fColorStages[i]) {
857 return false; 858 return false;
858 } 859 }
859 } 860 }
860 for (int i = 0; i < fCoverageStages.count(); i++) { 861 for (int i = 0; i < fCoverageStages.count(); i++) {
861 if (fCoverageStages[i] != s.fCoverageStages[i]) { 862 if (fCoverageStages[i] != s.fCoverageStages[i]) {
862 return false; 863 return false;
863 } 864 }
864 } 865 }
865 return true; 866 return true;
866 } 867 }
867 bool operator !=(const GrDrawState& s) const { return !(*this == s); } 868 bool operator !=(const GrDrawState& s) const { return !(*this == s); }
868 869
869 GrDrawState& operator= (const GrDrawState& s) { 870 GrDrawState& operator= (const GrDrawState& s) {
870 SkASSERT(0 == fBlockEffectRemovalCnt || 0 == this->numTotalStages()); 871 SkASSERT(0 == fBlockEffectRemovalCnt || 0 == this->numTotalStages());
871 this->setRenderTarget(s.fRenderTarget.get()); 872 this->setRenderTarget(s.fRenderTarget1.get());
872 fCommon = s.fCommon; 873 fCommon = s.fCommon;
873 fColorStages = s.fColorStages; 874 fColorStages = s.fColorStages;
874 fCoverageStages = s.fCoverageStages; 875 fCoverageStages = s.fCoverageStages;
875 return *this; 876 return *this;
876 } 877 }
877 878
878 private: 879 private:
879 880
880 void onReset(const SkMatrix* initialViewMatrix) { 881 void onReset(const SkMatrix* initialViewMatrix) {
881 SkASSERT(0 == fBlockEffectRemovalCnt || 0 == this->numTotalStages()); 882 SkASSERT(0 == fBlockEffectRemovalCnt || 0 == this->numTotalStages());
882 fColorStages.reset(); 883 fColorStages.reset();
883 fCoverageStages.reset(); 884 fCoverageStages.reset();
884 885
885 fRenderTarget.reset(NULL); 886 fRenderTarget1.reset(NULL);
886 887
887 this->setDefaultVertexAttribs(); 888 this->setDefaultVertexAttribs();
888 889
889 fCommon.fColor = 0xffffffff; 890 fCommon.fColor = 0xffffffff;
890 if (NULL == initialViewMatrix) { 891 if (NULL == initialViewMatrix) {
891 fCommon.fViewMatrix.reset(); 892 fCommon.fViewMatrix.reset();
892 } else { 893 } else {
893 fCommon.fViewMatrix = *initialViewMatrix; 894 fCommon.fViewMatrix = *initialViewMatrix;
894 } 895 }
895 fCommon.fSrcBlend = kOne_GrBlendCoeff; 896 fCommon.fSrcBlend = kOne_GrBlendCoeff;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
950 951
951 public: 952 public:
952 /** 953 /**
953 * DeferredState contains all of the data of a GrDrawState but does not hold refs on GrResource 954 * DeferredState contains all of the data of a GrDrawState but does not hold refs on GrResource
954 * objects. Resources are allowed to hit zero ref count while in DeferredSta tes. Their internal 955 * objects. Resources are allowed to hit zero ref count while in DeferredSta tes. Their internal
955 * dispose mechanism returns them to the cache. This allows recycling resour ces through the 956 * dispose mechanism returns them to the cache. This allows recycling resour ces through the
956 * the cache while they are in a deferred draw queue. 957 * the cache while they are in a deferred draw queue.
957 */ 958 */
958 class DeferredState { 959 class DeferredState {
959 public: 960 public:
960 DeferredState() : fRenderTarget(NULL) { 961 DeferredState() : fRenderTarget1(NULL) {
961 SkDEBUGCODE(fInitialized = false;) 962 SkDEBUGCODE(fInitialized = false;)
962 } 963 }
963 // TODO: Remove this when DeferredState no longer holds a ref to the RT 964 // TODO: Remove this when DeferredState no longer holds a ref to the RT
964 ~DeferredState() { SkSafeUnref(fRenderTarget); } 965 ~DeferredState() { SkSafeUnref(fRenderTarget1); }
965 966
966 void saveFrom(const GrDrawState& drawState) { 967 void saveFrom(const GrDrawState& drawState) {
967 fCommon = drawState.fCommon; 968 fCommon = drawState.fCommon;
968 // TODO: Here we will copy the GrRenderTarget pointer without taking a ref. 969 // TODO: Here we will copy the GrRenderTarget pointer without taking a ref.
969 fRenderTarget = drawState.fRenderTarget.get(); 970 // SkDebugf("DeferredState::render target change\n");
970 SkSafeRef(fRenderTarget); 971 fRenderTarget1 = drawState.fRenderTarget1.get();
972 SkSafeRef(fRenderTarget1);
971 // Here we ref the effects directly rather than the effect-refs. TOD O: When the effect- 973 // Here we ref the effects directly rather than the effect-refs. TOD O: When the effect-
972 // ref gets fully unref'ed it will cause the underlying effect to un ref its resources 974 // ref gets fully unref'ed it will cause the underlying effect to un ref its resources
973 // and recycle them to the cache (if no one else is holding a ref to the resources). 975 // and recycle them to the cache (if no one else is holding a ref to the resources).
974 fStages.reset(drawState.fColorStages.count() + drawState.fCoverageSt ages.count()); 976 fStages.reset(drawState.fColorStages.count() + drawState.fCoverageSt ages.count());
975 fColorStageCnt = drawState.fColorStages.count(); 977 fColorStageCnt = drawState.fColorStages.count();
976 for (int i = 0; i < fColorStageCnt; ++i) { 978 for (int i = 0; i < fColorStageCnt; ++i) {
977 fStages[i].saveFrom(drawState.fColorStages[i]); 979 fStages[i].saveFrom(drawState.fColorStages[i]);
978 } 980 }
979 for (int i = 0; i < drawState.fCoverageStages.count(); ++i) { 981 for (int i = 0; i < drawState.fCoverageStages.count(); ++i) {
980 fStages[i + fColorStageCnt].saveFrom(drawState.fCoverageStages[i ]); 982 fStages[i + fColorStageCnt].saveFrom(drawState.fCoverageStages[i ]);
981 } 983 }
982 SkDEBUGCODE(fInitialized = true;) 984 SkDEBUGCODE(fInitialized = true;)
983 } 985 }
984 986
985 void restoreTo(GrDrawState* drawState) { 987 void restoreTo(GrDrawState* drawState) {
986 SkASSERT(fInitialized); 988 SkASSERT(fInitialized);
987 drawState->fCommon = fCommon; 989 drawState->fCommon = fCommon;
988 drawState->setRenderTarget(fRenderTarget); 990 drawState->setRenderTarget(fRenderTarget1);
989 // reinflate color/cov stage arrays. 991 // reinflate color/cov stage arrays.
990 drawState->fColorStages.reset(); 992 drawState->fColorStages.reset();
991 for (int i = 0; i < fColorStageCnt; ++i) { 993 for (int i = 0; i < fColorStageCnt; ++i) {
992 SkNEW_APPEND_TO_TARRAY(&drawState->fColorStages, GrEffectStage, (fStages[i])); 994 SkNEW_APPEND_TO_TARRAY(&drawState->fColorStages, GrEffectStage, (fStages[i]));
993 } 995 }
994 int coverageStageCnt = fStages.count() - fColorStageCnt; 996 int coverageStageCnt = fStages.count() - fColorStageCnt;
995 drawState->fCoverageStages.reset(); 997 drawState->fCoverageStages.reset();
996 for (int i = 0; i < coverageStageCnt; ++i) { 998 for (int i = 0; i < coverageStageCnt; ++i) {
997 SkNEW_APPEND_TO_TARRAY(&drawState->fCoverageStages, 999 SkNEW_APPEND_TO_TARRAY(&drawState->fCoverageStages,
998 GrEffectStage, (fStages[i + fColorStageC nt])); 1000 GrEffectStage, (fStages[i + fColorStageC nt]));
999 } 1001 }
1000 } 1002 }
1001 1003
1002 bool isEqual(const GrDrawState& state) const { 1004 bool isEqual(const GrDrawState& state) const {
1003 int numCoverageStages = fStages.count() - fColorStageCnt; 1005 int numCoverageStages = fStages.count() - fColorStageCnt;
1004 if (fRenderTarget != state.fRenderTarget.get() || 1006 if (fRenderTarget1 != state.fRenderTarget1.get() ||
1005 fColorStageCnt != state.fColorStages.count() || 1007 fColorStageCnt != state.fColorStages.count() ||
1006 numCoverageStages != state.fCoverageStages.count() || 1008 numCoverageStages != state.fCoverageStages.count() ||
1007 fCommon != state.fCommon) { 1009 fCommon != state.fCommon) {
1008 return false; 1010 return false;
1009 } 1011 }
1010 bool explicitLocalCoords = state.hasLocalCoordAttribute(); 1012 bool explicitLocalCoords = state.hasLocalCoordAttribute();
1011 for (int i = 0; i < fColorStageCnt; ++i) { 1013 for (int i = 0; i < fColorStageCnt; ++i) {
1012 if (!fStages[i].isEqual(state.fColorStages[i], explicitLocalCoor ds)) { 1014 if (!fStages[i].isEqual(state.fColorStages[i], explicitLocalCoor ds)) {
1013 return false; 1015 return false;
1014 } 1016 }
1015 } 1017 }
1016 for (int i = 0; i < numCoverageStages; ++i) { 1018 for (int i = 0; i < numCoverageStages; ++i) {
1017 int s = fColorStageCnt + i; 1019 int s = fColorStageCnt + i;
1018 if (!fStages[s].isEqual(state.fCoverageStages[i], explicitLocalC oords)) { 1020 if (!fStages[s].isEqual(state.fCoverageStages[i], explicitLocalC oords)) {
1019 return false; 1021 return false;
1020 } 1022 }
1021 } 1023 }
1022 return true; 1024 return true;
1023 } 1025 }
1024 1026
1025 private: 1027 private:
1026 typedef SkAutoSTArray<8, GrEffectStage::DeferredStage> DeferredStageArra y; 1028 typedef SkAutoSTArray<8, GrEffectStage::DeferredStage> DeferredStageArra y;
1027 1029
1028 GrRenderTarget* fRenderTarget; 1030 GrRenderTarget* fRenderTarget1;
1029 CommonState fCommon; 1031 CommonState fCommon;
1030 int fColorStageCnt; 1032 int fColorStageCnt;
1031 DeferredStageArray fStages; 1033 DeferredStageArray fStages;
1032 1034
1033 SkDEBUGCODE(bool fInitialized;) 1035 SkDEBUGCODE(bool fInitialized;)
1034 }; 1036 };
1035 1037
1036 private: 1038 private:
1037 1039
1038 SkAutoTUnref<GrRenderTarget> fRenderTarget; 1040 SkAutoTUnref<GrRenderTarget> fRenderTarget1;
1039 CommonState fCommon; 1041 CommonState fCommon;
1040 1042
1041 typedef SkSTArray<4, GrEffectStage> EffectStageArray; 1043 typedef SkSTArray<4, GrEffectStage> EffectStageArray;
1042 EffectStageArray fColorStages; 1044 EffectStageArray fColorStages;
1043 EffectStageArray fCoverageStages; 1045 EffectStageArray fCoverageStages;
1044 1046
1045 // Some of the auto restore objects assume that no effects are removed durin g their lifetime. 1047 // Some of the auto restore objects assume that no effects are removed durin g their lifetime.
1046 // This is used to assert that this condition holds. 1048 // This is used to assert that this condition holds.
1047 SkDEBUGCODE(int fBlockEffectRemovalCnt;) 1049 SkDEBUGCODE(int fBlockEffectRemovalCnt;)
1048 1050
1049 /** 1051 /**
1050 * Sets vertex attributes for next draw. 1052 * Sets vertex attributes for next draw.
1051 * 1053 *
1052 * @param attribs the array of vertex attributes to set. 1054 * @param attribs the array of vertex attributes to set.
1053 * @param count the number of attributes being set, limited to kMaxVer texAttribCnt. 1055 * @param count the number of attributes being set, limited to kMaxVer texAttribCnt.
1054 */ 1056 */
1055 void setVertexAttribs(const GrVertexAttrib attribs[], int count); 1057 void setVertexAttribs(const GrVertexAttrib attribs[], int count);
1056 1058
1057 typedef SkRefCnt INHERITED; 1059 typedef SkRefCnt INHERITED;
1058 }; 1060 };
1059 1061
1060 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags); 1062 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags);
1061 1063
1062 #endif 1064 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/GrLayerCache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698