| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2010 Google Inc. | 2 * Copyright 2010 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 GrDrawTarget_DEFINED | 8 #ifndef GrDrawTarget_DEFINED |
| 9 #define GrDrawTarget_DEFINED | 9 #define GrDrawTarget_DEFINED |
| 10 | 10 |
| 11 #include "GrClipData.h" | 11 #include "GrClipData.h" |
| 12 #include "GrDrawState.h" | 12 #include "GrDrawState.h" |
| 13 #include "GrIndexBuffer.h" | 13 #include "GrIndexBuffer.h" |
| 14 | 14 |
| 15 #include "SkClipStack.h" | 15 #include "SkClipStack.h" |
| 16 #include "SkMatrix.h" | 16 #include "SkMatrix.h" |
| 17 #include "SkPath.h" | 17 #include "SkPath.h" |
| 18 #include "SkTArray.h" | 18 #include "SkTArray.h" |
| 19 #include "SkTLazy.h" | 19 #include "SkTLazy.h" |
| 20 #include "SkTypes.h" |
| 20 #include "SkXfermode.h" | 21 #include "SkXfermode.h" |
| 21 | 22 |
| 22 class GrClipData; | 23 class GrClipData; |
| 23 class GrDrawTargetCaps; | 24 class GrDrawTargetCaps; |
| 24 class GrPath; | 25 class GrPath; |
| 25 class GrVertexBuffer; | 26 class GrVertexBuffer; |
| 26 class SkStrokeRec; | 27 class SkStrokeRec; |
| 27 | 28 |
| 28 class GrDrawTarget : public SkRefCnt { | 29 class GrDrawTarget : public SkRefCnt { |
| 29 protected: | 30 protected: |
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 * | 466 * |
| 466 * GrDrawState* state = target->drawState(); | 467 * GrDrawState* state = target->drawState(); |
| 467 * AutoStateRestore asr(target, GrDrawTarget::kReset_ASRInit). | 468 * AutoStateRestore asr(target, GrDrawTarget::kReset_ASRInit). |
| 468 * state->setRenderTarget(rt); // state refers to the GrDrawState set on | 469 * state->setRenderTarget(rt); // state refers to the GrDrawState set on |
| 469 * // target before asr was initialized. | 470 * // target before asr was initialized. |
| 470 * // Therefore, rt is set on the GrDrawState | 471 * // Therefore, rt is set on the GrDrawState |
| 471 * // that will be restored after asr's | 472 * // that will be restored after asr's |
| 472 * // destructor rather than target's current | 473 * // destructor rather than target's current |
| 473 * // GrDrawState. | 474 * // GrDrawState. |
| 474 */ | 475 */ |
| 475 class AutoStateRestore : ::GrNoncopyable { | 476 class AutoStateRestore : public ::SkNoncopyable { |
| 476 public: | 477 public: |
| 477 /** | 478 /** |
| 478 * Default ASR will have no effect unless set() is subsequently called. | 479 * Default ASR will have no effect unless set() is subsequently called. |
| 479 */ | 480 */ |
| 480 AutoStateRestore(); | 481 AutoStateRestore(); |
| 481 | 482 |
| 482 /** | 483 /** |
| 483 * Saves the state on target. The state will be restored when the ASR | 484 * Saves the state on target. The state will be restored when the ASR |
| 484 * is destroyed. If this constructor is used do not call set(). | 485 * is destroyed. If this constructor is used do not call set(). |
| 485 * | 486 * |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 bool setIdentity(GrDrawTarget* target, ASRInit init); | 519 bool setIdentity(GrDrawTarget* target, ASRInit init); |
| 519 | 520 |
| 520 private: | 521 private: |
| 521 GrDrawTarget* fDrawTarget; | 522 GrDrawTarget* fDrawTarget; |
| 522 SkTLazy<GrDrawState> fTempState; | 523 SkTLazy<GrDrawState> fTempState; |
| 523 GrDrawState* fSavedState; | 524 GrDrawState* fSavedState; |
| 524 }; | 525 }; |
| 525 | 526 |
| 526 //////////////////////////////////////////////////////////////////////////// | 527 //////////////////////////////////////////////////////////////////////////// |
| 527 | 528 |
| 528 class AutoReleaseGeometry : ::GrNoncopyable { | 529 class AutoReleaseGeometry : public ::SkNoncopyable { |
| 529 public: | 530 public: |
| 530 AutoReleaseGeometry(GrDrawTarget* target, | 531 AutoReleaseGeometry(GrDrawTarget* target, |
| 531 int vertexCount, | 532 int vertexCount, |
| 532 int indexCount); | 533 int indexCount); |
| 533 AutoReleaseGeometry(); | 534 AutoReleaseGeometry(); |
| 534 ~AutoReleaseGeometry(); | 535 ~AutoReleaseGeometry(); |
| 535 bool set(GrDrawTarget* target, | 536 bool set(GrDrawTarget* target, |
| 536 int vertexCount, | 537 int vertexCount, |
| 537 int indexCount); | 538 int indexCount); |
| 538 bool succeeded() const { return NULL != fTarget; } | 539 bool succeeded() const { return NULL != fTarget; } |
| 539 void* vertices() const { SkASSERT(this->succeeded()); return fVertices;
} | 540 void* vertices() const { SkASSERT(this->succeeded()); return fVertices;
} |
| 540 void* indices() const { SkASSERT(this->succeeded()); return fIndices; } | 541 void* indices() const { SkASSERT(this->succeeded()); return fIndices; } |
| 541 GrPoint* positions() const { | 542 GrPoint* positions() const { |
| 542 return static_cast<GrPoint*>(this->vertices()); | 543 return static_cast<GrPoint*>(this->vertices()); |
| 543 } | 544 } |
| 544 | 545 |
| 545 private: | 546 private: |
| 546 void reset(); | 547 void reset(); |
| 547 | 548 |
| 548 GrDrawTarget* fTarget; | 549 GrDrawTarget* fTarget; |
| 549 void* fVertices; | 550 void* fVertices; |
| 550 void* fIndices; | 551 void* fIndices; |
| 551 }; | 552 }; |
| 552 | 553 |
| 553 //////////////////////////////////////////////////////////////////////////// | 554 //////////////////////////////////////////////////////////////////////////// |
| 554 | 555 |
| 555 class AutoClipRestore : ::GrNoncopyable { | 556 class AutoClipRestore : public ::SkNoncopyable { |
| 556 public: | 557 public: |
| 557 AutoClipRestore(GrDrawTarget* target) { | 558 AutoClipRestore(GrDrawTarget* target) { |
| 558 fTarget = target; | 559 fTarget = target; |
| 559 fClip = fTarget->getClip(); | 560 fClip = fTarget->getClip(); |
| 560 } | 561 } |
| 561 | 562 |
| 562 AutoClipRestore(GrDrawTarget* target, const SkIRect& newClip); | 563 AutoClipRestore(GrDrawTarget* target, const SkIRect& newClip); |
| 563 | 564 |
| 564 ~AutoClipRestore() { | 565 ~AutoClipRestore() { |
| 565 fTarget->setClip(fClip); | 566 fTarget->setClip(fClip); |
| 566 } | 567 } |
| 567 private: | 568 private: |
| 568 GrDrawTarget* fTarget; | 569 GrDrawTarget* fTarget; |
| 569 const GrClipData* fClip; | 570 const GrClipData* fClip; |
| 570 SkTLazy<SkClipStack> fStack; | 571 SkTLazy<SkClipStack> fStack; |
| 571 GrClipData fReplacementClip; | 572 GrClipData fReplacementClip; |
| 572 }; | 573 }; |
| 573 | 574 |
| 574 //////////////////////////////////////////////////////////////////////////// | 575 //////////////////////////////////////////////////////////////////////////// |
| 575 | 576 |
| 576 /** | 577 /** |
| 577 * Saves the geometry src state at construction and restores in the destruct
or. It also saves | 578 * Saves the geometry src state at construction and restores in the destruct
or. It also saves |
| 578 * and then restores the vertex attrib state. | 579 * and then restores the vertex attrib state. |
| 579 */ | 580 */ |
| 580 class AutoGeometryPush : ::GrNoncopyable { | 581 class AutoGeometryPush : public ::SkNoncopyable { |
| 581 public: | 582 public: |
| 582 AutoGeometryPush(GrDrawTarget* target) | 583 AutoGeometryPush(GrDrawTarget* target) |
| 583 : fAttribRestore(target->drawState()) { | 584 : fAttribRestore(target->drawState()) { |
| 584 SkASSERT(NULL != target); | 585 SkASSERT(NULL != target); |
| 585 fTarget = target; | 586 fTarget = target; |
| 586 target->pushGeometrySource(); | 587 target->pushGeometrySource(); |
| 587 } | 588 } |
| 588 | 589 |
| 589 ~AutoGeometryPush() { fTarget->popGeometrySource(); } | 590 ~AutoGeometryPush() { fTarget->popGeometrySource(); } |
| 590 | 591 |
| 591 private: | 592 private: |
| 592 GrDrawTarget* fTarget; | 593 GrDrawTarget* fTarget; |
| 593 GrDrawState::AutoVertexAttribRestore fAttribRestore; | 594 GrDrawState::AutoVertexAttribRestore fAttribRestore; |
| 594 }; | 595 }; |
| 595 | 596 |
| 596 /** | 597 /** |
| 597 * Combination of AutoGeometryPush and AutoStateRestore. The vertex attribs
will be in default | 598 * Combination of AutoGeometryPush and AutoStateRestore. The vertex attribs
will be in default |
| 598 * state regardless of ASRInit value. | 599 * state regardless of ASRInit value. |
| 599 */ | 600 */ |
| 600 class AutoGeometryAndStatePush : ::GrNoncopyable { | 601 class AutoGeometryAndStatePush : public ::SkNoncopyable { |
| 601 public: | 602 public: |
| 602 AutoGeometryAndStatePush(GrDrawTarget* target, | 603 AutoGeometryAndStatePush(GrDrawTarget* target, |
| 603 ASRInit init, | 604 ASRInit init, |
| 604 const SkMatrix* viewMatrix = NULL) | 605 const SkMatrix* viewMatrix = NULL) |
| 605 : fState(target, init, viewMatrix) { | 606 : fState(target, init, viewMatrix) { |
| 606 SkASSERT(NULL != target); | 607 SkASSERT(NULL != target); |
| 607 fTarget = target; | 608 fTarget = target; |
| 608 target->pushGeometrySource(); | 609 target->pushGeometrySource(); |
| 609 if (kPreserve_ASRInit == init) { | 610 if (kPreserve_ASRInit == init) { |
| 610 target->drawState()->setDefaultVertexAttribs(); | 611 target->drawState()->setDefaultVertexAttribs(); |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 863 const GrClipData* fClip; | 864 const GrClipData* fClip; |
| 864 GrDrawState* fDrawState; | 865 GrDrawState* fDrawState; |
| 865 GrDrawState fDefaultDraw
State; | 866 GrDrawState fDefaultDraw
State; |
| 866 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar
get. | 867 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar
get. |
| 867 GrContext* fContext; | 868 GrContext* fContext; |
| 868 | 869 |
| 869 typedef SkRefCnt INHERITED; | 870 typedef SkRefCnt INHERITED; |
| 870 }; | 871 }; |
| 871 | 872 |
| 872 #endif | 873 #endif |
| OLD | NEW |