OLD | NEW |
---|---|
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 #ifndef GrDrawTarget_DEFINED | 10 #ifndef GrDrawTarget_DEFINED |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
132 * GrVertexLayout. The data in the array is consumed at the time that | 132 * GrVertexLayout. The data in the array is consumed at the time that |
133 * set*SourceToArray is called and subsequent edits to the array will not | 133 * set*SourceToArray is called and subsequent edits to the array will not |
134 * be reflected in draws. | 134 * be reflected in draws. |
135 * | 135 * |
136 * 2. Reserve. This is most useful when the caller has data it must | 136 * 2. Reserve. This is most useful when the caller has data it must |
137 * transform before drawing and is not long-lived. The caller requests | 137 * transform before drawing and is not long-lived. The caller requests |
138 * that the draw target make room for some amount of vertex and/or index | 138 * that the draw target make room for some amount of vertex and/or index |
139 * data. The target provides ptrs to hold the vertex and/or index data. | 139 * data. The target provides ptrs to hold the vertex and/or index data. |
140 * | 140 * |
141 * The data is writable up until the next drawIndexed, drawNonIndexed, | 141 * The data is writable up until the next drawIndexed, drawNonIndexed, |
142 * drawIndexedInstances, or pushGeometrySource. At this point the data is | 142 * drawIndexedInstances, drawRect, copySurface, or pushGeometrySource. At |
143 * frozen and the ptrs are no longer valid. | 143 * this point the data is frozen and the ptrs are no longer valid. |
144 * | 144 * |
145 * Where the space is allocated and how it is uploaded to the GPU is | 145 * Where the space is allocated and how it is uploaded to the GPU is |
146 * subclass-dependent. | 146 * subclass-dependent. |
147 * | 147 * |
148 * 3. Vertex and Index Buffers. This is most useful for geometry that will | 148 * 3. Vertex and Index Buffers. This is most useful for geometry that will |
149 * is long-lived. When the data in the buffer is consumed depends on the | 149 * is long-lived. When the data in the buffer is consumed depends on the |
150 * GrDrawTarget subclass. For deferred subclasses the caller has to | 150 * GrDrawTarget subclass. For deferred subclasses the caller has to |
151 * guarantee that the data is still available in the buffers at playback. | 151 * guarantee that the data is still available in the buffers at playback. |
152 * (TODO: Make this more automatic as we have done for read/write pixels) | 152 * (TODO: Make this more automatic as we have done for read/write pixels) |
153 * | 153 * |
154 * The size of each vertex is determined by querying the current GrDrawState . | 154 * The size of each vertex is determined by querying the current GrDrawState . |
155 */ | 155 */ |
156 | 156 |
157 /** | 157 /** |
158 * Reserves space for vertices and/or indices. Zero can be specifed as | 158 * Reserves space for vertices and/or indices. Zero can be specifed as |
159 * either the vertex or index count if the caller desires to only reserve | 159 * either the vertex or index count if the caller desires to only reserve |
160 * space for only indices or only vertices. If zero is specifed for | 160 * space for only indices or only vertices. If zero is specifed for |
161 * vertexCount then the vertex source will be unmodified and likewise for | 161 * vertexCount then the vertex source will be unmodified and likewise for |
162 * indexCount. | 162 * indexCount. |
163 * | 163 * |
164 * If the function returns true then the reserve suceeded and the vertices | 164 * If the function returns true then the reserve suceeded and the vertices |
165 * and indices pointers will point to the space created. | 165 * and indices pointers will point to the space created. |
166 * | 166 * |
167 * If the target cannot make space for the request then this function will | 167 * If the target cannot make space for the request then this function will |
168 * return false. If vertexCount was non-zero then upon failure the vertex | 168 * return false. If vertexCount was non-zero then upon failure the vertex |
169 * source is reset and likewise for indexCount. | 169 * source is reset and likewise for indexCount. |
170 * | 170 * |
171 * The pointers to the space allocated for vertices and indices remain valid | 171 * The pointers to the space allocated for vertices and indices remain valid |
172 * until a drawIndexed, drawNonIndexed, drawIndexedInstances, or push/ | 172 * until a drawIndexed, drawNonIndexed, drawIndexedInstances, drawRect, |
173 * popGeomtrySource is called. At that point logically a snapshot of the | 173 * copySurface, or push/popGeomtrySource is called. At that point logically a |
174 * data is made and the pointers are invalid. | 174 * snapshot of the data is made and the pointers are invalid. |
175 * | 175 * |
176 * @param vertexCount the number of vertices to reserve space for. Can be | 176 * @param vertexCount the number of vertices to reserve space for. Can be |
177 * 0. Vertex size is queried from the current GrDrawStat e. | 177 * 0. Vertex size is queried from the current GrDrawStat e. |
178 * @param indexCount the number of indices to reserve space for. Can be 0. | 178 * @param indexCount the number of indices to reserve space for. Can be 0. |
179 * @param vertices will point to reserved vertex space if vertexCount is | 179 * @param vertices will point to reserved vertex space if vertexCount is |
180 * non-zero. Illegal to pass NULL if vertexCount > 0. | 180 * non-zero. Illegal to pass NULL if vertexCount > 0. |
181 * @param indices will point to reserved index space if indexCount is | 181 * @param indices will point to reserved index space if indexCount is |
182 * non-zero. Illegal to pass NULL if indexCount > 0. | 182 * non-zero. Illegal to pass NULL if indexCount > 0. |
183 */ | 183 */ |
184 bool reserveVertexAndIndexSpace(int vertexCount, | 184 bool reserveVertexAndIndexSpace(int vertexCount, |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
399 const SkRect* devBounds = NULL); | 399 const SkRect* devBounds = NULL); |
400 | 400 |
401 /** | 401 /** |
402 * Clear the current render target if one isn't passed in. Ignores the | 402 * Clear the current render target if one isn't passed in. Ignores the |
403 * clip and all other draw state (blend mode, stages, etc). Clears the | 403 * clip and all other draw state (blend mode, stages, etc). Clears the |
404 * whole thing if rect is NULL, otherwise just the rect. | 404 * whole thing if rect is NULL, otherwise just the rect. |
405 */ | 405 */ |
406 virtual void clear(const GrIRect* rect, | 406 virtual void clear(const GrIRect* rect, |
407 GrColor color, | 407 GrColor color, |
408 GrRenderTarget* renderTarget = NULL) = 0; | 408 GrRenderTarget* renderTarget = NULL) = 0; |
409 | |
410 /** | |
411 * Copies a pixel rectangle from one surface to another. This call may final ize | |
412 * reserved vertex/index data (as though a draw call was made). The src pixe ls | |
413 * copied are specified by srcRect. They are copied to a rect of the same | |
414 * size in dst with top left at dstPoint. If the src rect is clipped by the | |
415 * src bounds then pixel values in the dst rect corresponding to area clipp ed | |
416 * by the src rect are not overwritten. This method can fail and return fals e | |
417 * depending on the type of surface, configs, etc, and the backend-specific | |
418 * limitations. If rect is clipped out entirely by the src or dst bounds the n | |
419 * true is returned since there is no actual copy necessary to succeed. | |
420 */ | |
robertphillips
2013/04/03 12:21:27
can src be "const GrSurface& src"?
bsalomon
2013/04/03 12:51:53
As for const, you can't do much with const GrResou
robertphillips
2013/04/03 13:01:29
That's what I thought but I figured it wouldn't hu
| |
421 bool copySurface(GrSurface* dst, | |
422 GrSurface* src, | |
423 const SkIRect& srcRect, | |
424 const SkIPoint& dstPoint); | |
409 | 425 |
410 /** | 426 /** |
411 * Release any resources that are cached but not currently in use. This | 427 * Release any resources that are cached but not currently in use. This |
412 * is intended to give an application some recourse when resources are low. | 428 * is intended to give an application some recourse when resources are low. |
413 */ | 429 */ |
414 virtual void purgeResources() {}; | 430 virtual void purgeResources() {}; |
415 | 431 |
416 /** | 432 /** |
417 * For subclass internal use to invoke a call to onDraw(). See DrawInfo belo w. | 433 * For subclass internal use to invoke a call to onDraw(). See DrawInfo belo w. |
418 */ | 434 */ |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
609 case kArray_GeometrySrcType: | 625 case kArray_GeometrySrcType: |
610 return src.fIndexCount; | 626 return src.fIndexCount; |
611 case kBuffer_GeometrySrcType: | 627 case kBuffer_GeometrySrcType: |
612 return src.fIndexBuffer->sizeInBytes() / sizeof(uint16_t); | 628 return src.fIndexBuffer->sizeInBytes() / sizeof(uint16_t); |
613 default: | 629 default: |
614 GrCrash("Unexpected Index Source."); | 630 GrCrash("Unexpected Index Source."); |
615 return 0; | 631 return 0; |
616 } | 632 } |
617 } | 633 } |
618 | 634 |
635 // This method is called by copySurface The srcRect is guaranteed to be ent irely within the | |
636 // src bounds. Likewise, the dst rect implied by dstPoint and srcRect's widt h and height falls | |
637 // entirely within the dst. The default implementation will draw a rect from the src to the | |
638 // dst if the src is a texture and the dst is a render target and fail other wise. | |
639 virtual bool onCopySurface(GrSurface* dst, | |
640 GrSurface* src, | |
641 const SkIRect& srcRect, | |
642 const SkIPoint& dstPoint); | |
643 | |
644 // Called to determine whether an onCopySurface call would succeed or not. T his is useful for | |
645 // proxy subclasses to test whether the copy would succeed without executing it yet. Derived | |
646 // classes must keep this consistent with their implementation of onCopySurf ace(). The inputs | |
647 // are the same as onCopySurface(), i.e. srcRect and dstPoint are clipped to be inside the src | |
648 // and dst bounds. | |
649 virtual bool canCopySurface(GrSurface* dst, | |
650 GrSurface* src, | |
651 const SkIRect& srcRect, | |
652 const SkIPoint& dstPoint); | |
653 | |
619 GrContext* getContext() { return fContext; } | 654 GrContext* getContext() { return fContext; } |
620 const GrContext* getContext() const { return fContext; } | 655 const GrContext* getContext() const { return fContext; } |
621 | 656 |
622 // A subclass may override this function if it wishes to be notified when th e clip is changed. | 657 // A subclass may override this function if it wishes to be notified when th e clip is changed. |
623 // The override should call INHERITED::clipWillBeSet(). | 658 // The override should call INHERITED::clipWillBeSet(). |
624 virtual void clipWillBeSet(const GrClipData* clipData); | 659 virtual void clipWillBeSet(const GrClipData* clipData); |
625 | 660 |
626 // subclasses must call this in their destructors to ensure all vertex | 661 // subclasses must call this in their destructors to ensure all vertex |
627 // and index sources have been released (including those held by | 662 // and index sources have been released (including those held by |
628 // pushGeometrySource()) | 663 // pushGeometrySource()) |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
777 const GrClipData* fClip; | 812 const GrClipData* fClip; |
778 GrDrawState* fDrawState; | 813 GrDrawState* fDrawState; |
779 GrDrawState fDefaultDraw State; | 814 GrDrawState fDefaultDraw State; |
780 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar get. | 815 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar get. |
781 GrContext* fContext; | 816 GrContext* fContext; |
782 | 817 |
783 typedef GrRefCnt INHERITED; | 818 typedef GrRefCnt INHERITED; |
784 }; | 819 }; |
785 | 820 |
786 #endif | 821 #endif |
OLD | NEW |