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

Side by Side Diff: src/gpu/GrDrawTarget.cpp

Issue 715903002: Push creation of default GP to the caller (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: added comment Created 6 years, 1 month 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
« no previous file with comments | « src/gpu/GrDrawTarget.h ('k') | src/gpu/GrInOrderDrawBuffer.cpp » ('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 /* 2 /*
3 * Copyright 2010 Google Inc. 3 * Copyright 2010 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 10
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 int popCnt = fGeoSrcStateStack.count() - 1; 119 int popCnt = fGeoSrcStateStack.count() - 1;
120 while (popCnt) { 120 while (popCnt) {
121 this->popGeometrySource(); 121 this->popGeometrySource();
122 --popCnt; 122 --popCnt;
123 } 123 }
124 this->resetVertexSource(); 124 this->resetVertexSource();
125 this->resetIndexSource(); 125 this->resetIndexSource();
126 } 126 }
127 127
128 void GrDrawTarget::setClip(const GrClipData* clip) { 128 void GrDrawTarget::setClip(const GrClipData* clip) {
129 clipWillBeSet(clip);
130 fClip = clip; 129 fClip = clip;
131 } 130 }
132 131
133 const GrClipData* GrDrawTarget::getClip() const { 132 const GrClipData* GrDrawTarget::getClip() const {
134 return fClip; 133 return fClip;
135 } 134 }
136 135
137 void GrDrawTarget::setDrawState(GrDrawState* drawState) { 136 void GrDrawTarget::setDrawState(GrDrawState* drawState) {
138 SkASSERT(fDrawState); 137 SkASSERT(fDrawState);
139 if (NULL == drawState) { 138 if (NULL == drawState) {
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 info.fIndexCount)) { 750 info.fIndexCount)) {
752 this->onDraw(info, scissorState); 751 this->onDraw(info, scissorState);
753 } 752 }
754 info.fStartVertex += info.fVertexCount; 753 info.fStartVertex += info.fVertexCount;
755 instanceCount -= info.fInstanceCount; 754 instanceCount -= info.fInstanceCount;
756 } 755 }
757 } 756 }
758 757
759 //////////////////////////////////////////////////////////////////////////////// 758 ////////////////////////////////////////////////////////////////////////////////
760 759
761 namespace {
762
763 // position + (optional) texture coord
764 extern const GrVertexAttrib gBWRectPosUVAttribs[] = {
765 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding },
766 {kVec2f_GrVertexAttribType, sizeof(SkPoint), kLocalCoord_GrVertexAttribBindi ng}
767 };
768
769 void set_vertex_attributes(GrDrawState* drawState, bool hasUVs) {
770 if (hasUVs) {
771 drawState->setVertexAttribs<gBWRectPosUVAttribs>(2, 2 * sizeof(SkPoint)) ;
772 } else {
773 drawState->setVertexAttribs<gBWRectPosUVAttribs>(1, sizeof(SkPoint));
774 }
775 }
776
777 };
778
779 void GrDrawTarget::onDrawRect(const SkRect& rect,
780 const SkRect* localRect,
781 const SkMatrix* localMatrix) {
782
783 set_vertex_attributes(this->drawState(), SkToBool(localRect));
784
785 AutoReleaseGeometry geo(this, 4, 0);
786 if (!geo.succeeded()) {
787 SkDebugf("Failed to get space for vertices!\n");
788 return;
789 }
790
791 size_t vstride = this->drawState()->getVertexStride();
792 geo.positions()->setRectFan(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom , vstride);
793 if (localRect) {
794 SkPoint* coords = GrTCast<SkPoint*>(GrTCast<intptr_t>(geo.vertices()) +
795 sizeof(SkPoint));
796 coords->setRectFan(localRect->fLeft, localRect->fTop,
797 localRect->fRight, localRect->fBottom,
798 vstride);
799 if (localMatrix) {
800 localMatrix->mapPointsWithStride(coords, vstride, 4);
801 }
802 }
803 SkRect bounds;
804 this->getDrawState().getViewMatrix().mapRect(&bounds, rect);
805
806 this->drawNonIndexed(kTriangleFan_GrPrimitiveType, 0, 4, &bounds);
807 }
808
809 void GrDrawTarget::clipWillBeSet(const GrClipData* clipData) {
810 }
811
812 ////////////////////////////////////////////////////////////////////////////////
813
814 GrDrawTarget::AutoStateRestore::AutoStateRestore() { 760 GrDrawTarget::AutoStateRestore::AutoStateRestore() {
815 fDrawTarget = NULL; 761 fDrawTarget = NULL;
816 } 762 }
817 763
818 GrDrawTarget::AutoStateRestore::AutoStateRestore(GrDrawTarget* target, 764 GrDrawTarget::AutoStateRestore::AutoStateRestore(GrDrawTarget* target,
819 ASRInit init, 765 ASRInit init,
820 const SkMatrix* vm) { 766 const SkMatrix* vm) {
821 fDrawTarget = NULL; 767 fDrawTarget = NULL;
822 this->set(target, init, vm); 768 this->set(target, init, vm);
823 } 769 }
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
1241 bool GrClipTarget::setupClip(const SkRect* devBounds, 1187 bool GrClipTarget::setupClip(const SkRect* devBounds,
1242 GrDrawState::AutoRestoreEffects* are, 1188 GrDrawState::AutoRestoreEffects* are,
1243 GrDrawState::AutoRestoreStencil* ars, 1189 GrDrawState::AutoRestoreStencil* ars,
1244 GrClipMaskManager::ScissorState* scissorState) { 1190 GrClipMaskManager::ScissorState* scissorState) {
1245 return fClipMaskManager.setupClipping(this->getClip(), 1191 return fClipMaskManager.setupClipping(this->getClip(),
1246 devBounds, 1192 devBounds,
1247 are, 1193 are,
1248 ars, 1194 ars,
1249 scissorState); 1195 scissorState);
1250 } 1196 }
OLDNEW
« no previous file with comments | « src/gpu/GrDrawTarget.h ('k') | src/gpu/GrInOrderDrawBuffer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698