| 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 "GrClipMaskManager.h" | 12 #include "GrClipMaskManager.h" |
| 13 #include "GrContext.h" | 13 #include "GrContext.h" |
| 14 #include "GrDrawState.h" | |
| 15 #include "GrIndexBuffer.h" | 14 #include "GrIndexBuffer.h" |
| 16 #include "GrPathRendering.h" | 15 #include "GrPathRendering.h" |
| 16 #include "GrPipelineBuilder.h" |
| 17 #include "GrTraceMarker.h" | 17 #include "GrTraceMarker.h" |
| 18 #include "GrVertexBuffer.h" | 18 #include "GrVertexBuffer.h" |
| 19 | 19 |
| 20 #include "SkClipStack.h" | 20 #include "SkClipStack.h" |
| 21 #include "SkMatrix.h" | 21 #include "SkMatrix.h" |
| 22 #include "SkPath.h" | 22 #include "SkPath.h" |
| 23 #include "SkStrokeRec.h" | 23 #include "SkStrokeRec.h" |
| 24 #include "SkTArray.h" | 24 #include "SkTArray.h" |
| 25 #include "SkTLazy.h" | 25 #include "SkTLazy.h" |
| 26 #include "SkTypes.h" | 26 #include "SkTypes.h" |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 * If the target cannot make space for the request then this function will | 118 * If the target cannot make space for the request then this function will |
| 119 * return false. If vertexCount was non-zero then upon failure the vertex | 119 * return false. If vertexCount was non-zero then upon failure the vertex |
| 120 * source is reset and likewise for indexCount. | 120 * source is reset and likewise for indexCount. |
| 121 * | 121 * |
| 122 * The pointers to the space allocated for vertices and indices remain valid | 122 * The pointers to the space allocated for vertices and indices remain valid |
| 123 * until a drawIndexed, drawNonIndexed, drawIndexedInstances, drawRect, | 123 * until a drawIndexed, drawNonIndexed, drawIndexedInstances, drawRect, |
| 124 * copySurface, or push/popGeomtrySource is called. At that point logically
a | 124 * copySurface, or push/popGeomtrySource is called. At that point logically
a |
| 125 * snapshot of the data is made and the pointers are invalid. | 125 * snapshot of the data is made and the pointers are invalid. |
| 126 * | 126 * |
| 127 * @param vertexCount the number of vertices to reserve space for. Can be | 127 * @param vertexCount the number of vertices to reserve space for. Can be |
| 128 * 0. Vertex size is queried from the current GrDrawStat
e. | 128 * 0. Vertex size is queried from the current GrPipeline
Builder. |
| 129 * @param indexCount the number of indices to reserve space for. Can be 0. | 129 * @param indexCount the number of indices to reserve space for. Can be 0. |
| 130 * @param vertices will point to reserved vertex space if vertexCount is | 130 * @param vertices will point to reserved vertex space if vertexCount is |
| 131 * non-zero. Illegal to pass NULL if vertexCount > 0. | 131 * non-zero. Illegal to pass NULL if vertexCount > 0. |
| 132 * @param indices will point to reserved index space if indexCount is | 132 * @param indices will point to reserved index space if indexCount is |
| 133 * non-zero. Illegal to pass NULL if indexCount > 0. | 133 * non-zero. Illegal to pass NULL if indexCount > 0. |
| 134 */ | 134 */ |
| 135 bool reserveVertexAndIndexSpace(int vertexCount, | 135 bool reserveVertexAndIndexSpace(int vertexCount, |
| 136 size_t vertexStride, | 136 size_t vertexStride, |
| 137 int indexCount, | 137 int indexCount, |
| 138 void** vertices, | 138 void** vertices, |
| 139 void** indices); | 139 void** indices); |
| 140 | 140 |
| 141 /** | 141 /** |
| 142 * Provides hints to caller about the number of vertices and indices | 142 * Provides hints to caller about the number of vertices and indices |
| 143 * that can be allocated cheaply. This can be useful if caller is reserving | 143 * that can be allocated cheaply. This can be useful if caller is reserving |
| 144 * space but doesn't know exactly how much geometry is needed. | 144 * space but doesn't know exactly how much geometry is needed. |
| 145 * | 145 * |
| 146 * Also may hint whether the draw target should be flushed first. This is | 146 * Also may hint whether the draw target should be flushed first. This is |
| 147 * useful for deferred targets. | 147 * useful for deferred targets. |
| 148 * | 148 * |
| 149 * @param vertexCount in: hint about how many vertices the caller would | 149 * @param vertexCount in: hint about how many vertices the caller would |
| 150 * like to allocate. Vertex size is queried from the | 150 * like to allocate. Vertex size is queried from the |
| 151 * current GrDrawState. | 151 * current GrPipelineBuilder. |
| 152 * out: a hint about the number of vertices that can be | 152 * out: a hint about the number of vertices that can be |
| 153 * allocated cheaply. Negative means no hint. | 153 * allocated cheaply. Negative means no hint. |
| 154 * Ignored if NULL. | 154 * Ignored if NULL. |
| 155 * @param indexCount in: hint about how many indices the caller would | 155 * @param indexCount in: hint about how many indices the caller would |
| 156 * like to allocate. | 156 * like to allocate. |
| 157 * out: a hint about the number of indices that can be | 157 * out: a hint about the number of indices that can be |
| 158 * allocated cheaply. Negative means no hint. | 158 * allocated cheaply. Negative means no hint. |
| 159 * Ignored if NULL. | 159 * Ignored if NULL. |
| 160 * | 160 * |
| 161 * @return true if target should be flushed based on the input values. | 161 * @return true if target should be flushed based on the input values. |
| 162 */ | 162 */ |
| 163 virtual bool geometryHints(size_t vertexStride, int* vertexCount, int* index
Count) const; | 163 virtual bool geometryHints(size_t vertexStride, int* vertexCount, int* index
Count) const; |
| 164 | 164 |
| 165 /** | 165 /** |
| 166 * Sets source of vertex data for the next draw. Data does not have to be | 166 * Sets source of vertex data for the next draw. Data does not have to be |
| 167 * in the buffer until drawIndexed, drawNonIndexed, or drawIndexedInstances. | 167 * in the buffer until drawIndexed, drawNonIndexed, or drawIndexedInstances. |
| 168 * | 168 * |
| 169 * @param buffer vertex buffer containing vertex data. Must be | 169 * @param buffer vertex buffer containing vertex data. Must be |
| 170 * unlocked before draw call. Vertex size is queried | 170 * unlocked before draw call. Vertex size is queried |
| 171 * from current GrDrawState. | 171 * from current GrPipelineBuilder. |
| 172 */ | 172 */ |
| 173 void setVertexSourceToBuffer(const GrVertexBuffer* buffer, size_t vertexStri
de); | 173 void setVertexSourceToBuffer(const GrVertexBuffer* buffer, size_t vertexStri
de); |
| 174 | 174 |
| 175 /** | 175 /** |
| 176 * Sets source of index data for the next indexed draw. Data does not have | 176 * Sets source of index data for the next indexed draw. Data does not have |
| 177 * to be in the buffer until drawIndexed. | 177 * to be in the buffer until drawIndexed. |
| 178 * | 178 * |
| 179 * @param buffer index buffer containing indices. Must be unlocked | 179 * @param buffer index buffer containing indices. Must be unlocked |
| 180 * before indexed draw call. | 180 * before indexed draw call. |
| 181 */ | 181 */ |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 * @param startVertex the vertex in the vertex array/buffer corresponding | 225 * @param startVertex the vertex in the vertex array/buffer corresponding |
| 226 * to index 0 | 226 * to index 0 |
| 227 * @param startIndex first index to read from index src. | 227 * @param startIndex first index to read from index src. |
| 228 * @param vertexCount one greater than the max index. | 228 * @param vertexCount one greater than the max index. |
| 229 * @param indexCount the number of index elements to read. The index count | 229 * @param indexCount the number of index elements to read. The index count |
| 230 * is effectively trimmed to the last completely | 230 * is effectively trimmed to the last completely |
| 231 * specified primitive. | 231 * specified primitive. |
| 232 * @param devBounds optional bounds hint. This is a promise from the call
er, | 232 * @param devBounds optional bounds hint. This is a promise from the call
er, |
| 233 * not a request for clipping. | 233 * not a request for clipping. |
| 234 */ | 234 */ |
| 235 void drawIndexed(GrDrawState*, | 235 void drawIndexed(GrPipelineBuilder*, |
| 236 const GrGeometryProcessor*, | 236 const GrGeometryProcessor*, |
| 237 GrPrimitiveType type, | 237 GrPrimitiveType type, |
| 238 int startVertex, | 238 int startVertex, |
| 239 int startIndex, | 239 int startIndex, |
| 240 int vertexCount, | 240 int vertexCount, |
| 241 int indexCount, | 241 int indexCount, |
| 242 const SkRect* devBounds = NULL); | 242 const SkRect* devBounds = NULL); |
| 243 | 243 |
| 244 /** | 244 /** |
| 245 * Draws non-indexed geometry using the current state and current vertex | 245 * Draws non-indexed geometry using the current state and current vertex |
| 246 * sources. | 246 * sources. |
| 247 * | 247 * |
| 248 * @param type The type of primitives to draw. | 248 * @param type The type of primitives to draw. |
| 249 * @param startVertex the vertex in the vertex array/buffer corresponding | 249 * @param startVertex the vertex in the vertex array/buffer corresponding |
| 250 * to index 0 | 250 * to index 0 |
| 251 * @param vertexCount one greater than the max index. | 251 * @param vertexCount one greater than the max index. |
| 252 * @param devBounds optional bounds hint. This is a promise from the call
er, | 252 * @param devBounds optional bounds hint. This is a promise from the call
er, |
| 253 * not a request for clipping. | 253 * not a request for clipping. |
| 254 */ | 254 */ |
| 255 void drawNonIndexed(GrDrawState*, | 255 void drawNonIndexed(GrPipelineBuilder*, |
| 256 const GrGeometryProcessor*, | 256 const GrGeometryProcessor*, |
| 257 GrPrimitiveType type, | 257 GrPrimitiveType type, |
| 258 int startVertex, | 258 int startVertex, |
| 259 int vertexCount, | 259 int vertexCount, |
| 260 const SkRect* devBounds = NULL); | 260 const SkRect* devBounds = NULL); |
| 261 | 261 |
| 262 /** | 262 /** |
| 263 * Draws path into the stencil buffer. The fill must be either even/odd or | 263 * Draws path into the stencil buffer. The fill must be either even/odd or |
| 264 * winding (not inverse or hairline). It will respect the HW antialias flag | 264 * winding (not inverse or hairline). It will respect the HW antialias flag |
| 265 * on the draw state (if possible in the 3D API). Note, we will never have
an inverse fill | 265 * on the GrPipelineBuilder (if possible in the 3D API). Note, we will neve
r have an inverse |
| 266 * with stencil path | 266 * fill with stencil path |
| 267 */ | 267 */ |
| 268 void stencilPath(GrDrawState*, const GrPathProcessor*, const GrPath*,GrPathR
endering::FillType); | 268 void stencilPath(GrPipelineBuilder*, const GrPathProcessor*, const GrPath*, |
| 269 GrPathRendering::FillType); |
| 269 | 270 |
| 270 /** | 271 /** |
| 271 * Draws a path. Fill must not be a hairline. It will respect the HW | 272 * Draws a path. Fill must not be a hairline. It will respect the HW |
| 272 * antialias flag on the draw state (if possible in the 3D API). | 273 * antialias flag on the GrPipelineBuilder (if possible in the 3D API). |
| 273 */ | 274 */ |
| 274 void drawPath(GrDrawState*, const GrPathProcessor*, const GrPath*, GrPathRen
dering::FillType); | 275 void drawPath(GrPipelineBuilder*, const GrPathProcessor*, const GrPath*, |
| 276 GrPathRendering::FillType); |
| 275 | 277 |
| 276 /** | 278 /** |
| 277 * Draws the aggregate path from combining multiple. Note that this will not | 279 * Draws the aggregate path from combining multiple. Note that this will not |
| 278 * always be equivalent to back-to-back calls to drawPath(). It will respect | 280 * always be equivalent to back-to-back calls to drawPath(). It will respect |
| 279 * the HW antialias flag on the draw state (if possible in the 3D API). | 281 * the HW antialias flag on the GrPipelineBuilder (if possible in the 3D API
). |
| 280 * | 282 * |
| 281 * @param pathRange Source paths to draw from | 283 * @param pathRange Source paths to draw from |
| 282 * @param indices Array of path indices to draw | 284 * @param indices Array of path indices to draw |
| 283 * @param indexType Data type of the array elements in indexBuffer | 285 * @param indexType Data type of the array elements in indexBuffer |
| 284 * @param transformValues Array of transforms for the individual paths | 286 * @param transformValues Array of transforms for the individual paths |
| 285 * @param transformType Type of transforms in transformBuffer | 287 * @param transformType Type of transforms in transformBuffer |
| 286 * @param count Number of paths to draw | 288 * @param count Number of paths to draw |
| 287 * @param fill Fill type for drawing all the paths | 289 * @param fill Fill type for drawing all the paths |
| 288 */ | 290 */ |
| 289 void drawPaths(GrDrawState*, | 291 void drawPaths(GrPipelineBuilder*, |
| 290 const GrPathProcessor*, | 292 const GrPathProcessor*, |
| 291 const GrPathRange* pathRange, | 293 const GrPathRange* pathRange, |
| 292 const void* indices, | 294 const void* indices, |
| 293 PathIndexType indexType, | 295 PathIndexType indexType, |
| 294 const float transformValues[], | 296 const float transformValues[], |
| 295 PathTransformType transformType, | 297 PathTransformType transformType, |
| 296 int count, | 298 int count, |
| 297 GrPathRendering::FillType fill); | 299 GrPathRendering::FillType fill); |
| 298 | 300 |
| 299 /** | 301 /** |
| 300 * Helper function for drawing rects. It performs a geometry src push and po
p | 302 * Helper function for drawing rects. It performs a geometry src push and po
p |
| 301 * and thus will finalize any reserved geometry. | 303 * and thus will finalize any reserved geometry. |
| 302 * | 304 * |
| 303 * @param rect the rect to draw | 305 * @param rect the rect to draw |
| 304 * @param localRect optional rect that specifies local coords to map onto | 306 * @param localRect optional rect that specifies local coords to map onto |
| 305 * rect. If NULL then rect serves as the local coords. | 307 * rect. If NULL then rect serves as the local coords. |
| 306 * @param localMatrix Optional local matrix. The local coordinates are speci
fied by localRect, | 308 * @param localMatrix Optional local matrix. The local coordinates are speci
fied by localRect, |
| 307 * or if it is NULL by rect. This matrix applies to the c
oordinate implied by | 309 * or if it is NULL by rect. This matrix applies to the c
oordinate implied by |
| 308 * that rectangle before it is input to GrCoordTransforms
that read local | 310 * that rectangle before it is input to GrCoordTransforms
that read local |
| 309 * coordinates | 311 * coordinates |
| 310 */ | 312 */ |
| 311 void drawRect(GrDrawState* ds, | 313 void drawRect(GrPipelineBuilder* ds, |
| 312 GrColor color, | 314 GrColor color, |
| 313 const SkMatrix& viewMatrix, | 315 const SkMatrix& viewMatrix, |
| 314 const SkRect& rect, | 316 const SkRect& rect, |
| 315 const SkRect* localRect, | 317 const SkRect* localRect, |
| 316 const SkMatrix* localMatrix) { | 318 const SkMatrix* localMatrix) { |
| 317 AutoGeometryPush agp(this); | 319 AutoGeometryPush agp(this); |
| 318 this->onDrawRect(ds, color, viewMatrix, rect, localRect, localMatrix); | 320 this->onDrawRect(ds, color, viewMatrix, rect, localRect, localMatrix); |
| 319 } | 321 } |
| 320 | 322 |
| 321 /** | 323 /** |
| 322 * Helper for drawRect when the caller doesn't need separate local rects or
matrices. | 324 * Helper for drawRect when the caller doesn't need separate local rects or
matrices. |
| 323 */ | 325 */ |
| 324 void drawSimpleRect(GrDrawState* ds, GrColor color, const SkMatrix& viewM, c
onst SkRect& rect) { | 326 void drawSimpleRect(GrPipelineBuilder* ds, GrColor color, const SkMatrix& vi
ewM, |
| 327 const SkRect& rect) { |
| 325 this->drawRect(ds, color, viewM, rect, NULL, NULL); | 328 this->drawRect(ds, color, viewM, rect, NULL, NULL); |
| 326 } | 329 } |
| 327 void drawSimpleRect(GrDrawState* ds, GrColor color, const SkMatrix& viewM, | 330 void drawSimpleRect(GrPipelineBuilder* ds, GrColor color, const SkMatrix& vi
ewM, |
| 328 const SkIRect& irect) { | 331 const SkIRect& irect) { |
| 329 SkRect rect = SkRect::Make(irect); | 332 SkRect rect = SkRect::Make(irect); |
| 330 this->drawRect(ds, color, viewM, rect, NULL, NULL); | 333 this->drawRect(ds, color, viewM, rect, NULL, NULL); |
| 331 } | 334 } |
| 332 | 335 |
| 333 /** | 336 /** |
| 334 * This call is used to draw multiple instances of some geometry with a | 337 * This call is used to draw multiple instances of some geometry with a |
| 335 * given number of vertices (V) and indices (I) per-instance. The indices in | 338 * given number of vertices (V) and indices (I) per-instance. The indices in |
| 336 * the index source must have the form i[k+I] == i[k] + V. Also, all indices | 339 * the index source must have the form i[k+I] == i[k] + V. Also, all indices |
| 337 * i[kI] ... i[(k+1)I-1] must be elements of the range kV ... (k+1)V-1. As a | 340 * i[kI] ... i[(k+1)I-1] must be elements of the range kV ... (k+1)V-1. As a |
| (...skipping 15 matching lines...) Expand all Loading... |
| 353 * consists of verticesPerInstance vertices indexed by | 356 * consists of verticesPerInstance vertices indexed by |
| 354 * indicesPerInstance indices drawn as the primitive | 357 * indicesPerInstance indices drawn as the primitive |
| 355 * type specified by type. | 358 * type specified by type. |
| 356 * @param verticesPerInstance The number of vertices in each instance (V | 359 * @param verticesPerInstance The number of vertices in each instance (V |
| 357 * in the above description). | 360 * in the above description). |
| 358 * @param indicesPerInstance The number of indices in each instance (I | 361 * @param indicesPerInstance The number of indices in each instance (I |
| 359 * in the above description). | 362 * in the above description). |
| 360 * @param devBounds optional bounds hint. This is a promise from the call
er, | 363 * @param devBounds optional bounds hint. This is a promise from the call
er, |
| 361 * not a request for clipping. | 364 * not a request for clipping. |
| 362 */ | 365 */ |
| 363 void drawIndexedInstances(GrDrawState*, | 366 void drawIndexedInstances(GrPipelineBuilder*, |
| 364 const GrGeometryProcessor*, | 367 const GrGeometryProcessor*, |
| 365 GrPrimitiveType type, | 368 GrPrimitiveType type, |
| 366 int instanceCount, | 369 int instanceCount, |
| 367 int verticesPerInstance, | 370 int verticesPerInstance, |
| 368 int indicesPerInstance, | 371 int indicesPerInstance, |
| 369 const SkRect* devBounds = NULL); | 372 const SkRect* devBounds = NULL); |
| 370 | 373 |
| 371 /** | 374 /** |
| 372 * Clear the passed in render target. Ignores the draw state and clip. Clear
s the whole thing if | 375 * Clear the passed in render target. Ignores the GrPipelineBuilder and clip
. Clears the whole |
| 373 * rect is NULL, otherwise just the rect. If canIgnoreRect is set then the e
ntire render target | 376 * thing if rect is NULL, otherwise just the rect. If canIgnoreRect is set t
hen the entire |
| 374 * can be optionally cleared. | 377 * render target can be optionally cleared. |
| 375 */ | 378 */ |
| 376 void clear(const SkIRect* rect, | 379 void clear(const SkIRect* rect, |
| 377 GrColor color, | 380 GrColor color, |
| 378 bool canIgnoreRect, | 381 bool canIgnoreRect, |
| 379 GrRenderTarget* renderTarget); | 382 GrRenderTarget* renderTarget); |
| 380 | 383 |
| 381 /** | 384 /** |
| 382 * Discards the contents render target. | 385 * Discards the contents render target. |
| 383 **/ | 386 **/ |
| 384 virtual void discard(GrRenderTarget*) = 0; | 387 virtual void discard(GrRenderTarget*) = 0; |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 } | 656 } |
| 654 | 657 |
| 655 // Subclass must initialize this in its constructor. | 658 // Subclass must initialize this in its constructor. |
| 656 SkAutoTUnref<const GrDrawTargetCaps> fCaps; | 659 SkAutoTUnref<const GrDrawTargetCaps> fCaps; |
| 657 | 660 |
| 658 const GrTraceMarkerSet& getActiveTraceMarkers() { return fActiveTraceMarkers
; } | 661 const GrTraceMarkerSet& getActiveTraceMarkers() { return fActiveTraceMarkers
; } |
| 659 | 662 |
| 660 // Makes a copy of the dst if it is necessary for the draw. Returns false if
a copy is required | 663 // Makes a copy of the dst if it is necessary for the draw. Returns false if
a copy is required |
| 661 // but couldn't be made. Otherwise, returns true. This method needs to be p
rotected because it | 664 // but couldn't be made. Otherwise, returns true. This method needs to be p
rotected because it |
| 662 // needs to be accessed by GLPrograms to setup a correct drawstate | 665 // needs to be accessed by GLPrograms to setup a correct drawstate |
| 663 bool setupDstReadIfNecessary(GrDrawState*, | 666 bool setupDstReadIfNecessary(GrPipelineBuilder*, |
| 664 GrDeviceCoordTexture* dstCopy, | 667 GrDeviceCoordTexture* dstCopy, |
| 665 const SkRect* drawBounds); | 668 const SkRect* drawBounds); |
| 666 | 669 |
| 667 private: | 670 private: |
| 668 /** | 671 /** |
| 669 * This will be called before allocating a texture as a dst for copySurface.
This function | 672 * This will be called before allocating a texture as a dst for copySurface.
This function |
| 670 * populates the dstDesc's config, flags, and origin so as to maximize effic
iency and guarantee | 673 * populates the dstDesc's config, flags, and origin so as to maximize effic
iency and guarantee |
| 671 * success of the copySurface call. | 674 * success of the copySurface call. |
| 672 */ | 675 */ |
| 673 void initCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* dstDesc) { | 676 void initCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* dstDesc) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 693 // implemented by subclass to allocate space for reserved geom | 696 // implemented by subclass to allocate space for reserved geom |
| 694 virtual bool onReserveVertexSpace(size_t vertexSize, int vertexCount, void**
vertices) = 0; | 697 virtual bool onReserveVertexSpace(size_t vertexSize, int vertexCount, void**
vertices) = 0; |
| 695 virtual bool onReserveIndexSpace(int indexCount, void** indices) = 0; | 698 virtual bool onReserveIndexSpace(int indexCount, void** indices) = 0; |
| 696 // implemented by subclass to handle release of reserved geom space | 699 // implemented by subclass to handle release of reserved geom space |
| 697 virtual void releaseReservedVertexSpace() = 0; | 700 virtual void releaseReservedVertexSpace() = 0; |
| 698 virtual void releaseReservedIndexSpace() = 0; | 701 virtual void releaseReservedIndexSpace() = 0; |
| 699 // subclass overrides to be notified just before geo src state is pushed/pop
ped. | 702 // subclass overrides to be notified just before geo src state is pushed/pop
ped. |
| 700 virtual void geometrySourceWillPush() = 0; | 703 virtual void geometrySourceWillPush() = 0; |
| 701 virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) =
0; | 704 virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) =
0; |
| 702 // subclass called to perform drawing | 705 // subclass called to perform drawing |
| 703 virtual void onDraw(const GrDrawState&, | 706 virtual void onDraw(const GrPipelineBuilder&, |
| 704 const GrGeometryProcessor*, | 707 const GrGeometryProcessor*, |
| 705 const DrawInfo&, | 708 const DrawInfo&, |
| 706 const GrScissorState&, | 709 const GrScissorState&, |
| 707 const GrDeviceCoordTexture* dstCopy) = 0; | 710 const GrDeviceCoordTexture* dstCopy) = 0; |
| 708 // TODO copy in order drawbuffer onDrawRect to here | 711 // TODO copy in order drawbuffer onDrawRect to here |
| 709 virtual void onDrawRect(GrDrawState*, | 712 virtual void onDrawRect(GrPipelineBuilder*, |
| 710 GrColor color, | 713 GrColor color, |
| 711 const SkMatrix& viewMatrix, | 714 const SkMatrix& viewMatrix, |
| 712 const SkRect& rect, | 715 const SkRect& rect, |
| 713 const SkRect* localRect, | 716 const SkRect* localRect, |
| 714 const SkMatrix* localMatrix) = 0; | 717 const SkMatrix* localMatrix) = 0; |
| 715 | 718 |
| 716 virtual void onStencilPath(const GrDrawState&, | 719 virtual void onStencilPath(const GrPipelineBuilder&, |
| 717 const GrPathProcessor*, | 720 const GrPathProcessor*, |
| 718 const GrPath*, | 721 const GrPath*, |
| 719 const GrScissorState&, | 722 const GrScissorState&, |
| 720 const GrStencilSettings&) = 0; | 723 const GrStencilSettings&) = 0; |
| 721 virtual void onDrawPath(const GrDrawState&, | 724 virtual void onDrawPath(const GrPipelineBuilder&, |
| 722 const GrPathProcessor*, | 725 const GrPathProcessor*, |
| 723 const GrPath*, | 726 const GrPath*, |
| 724 const GrScissorState&, | 727 const GrScissorState&, |
| 725 const GrStencilSettings&, | 728 const GrStencilSettings&, |
| 726 const GrDeviceCoordTexture* dstCopy) = 0; | 729 const GrDeviceCoordTexture* dstCopy) = 0; |
| 727 virtual void onDrawPaths(const GrDrawState&, | 730 virtual void onDrawPaths(const GrPipelineBuilder&, |
| 728 const GrPathProcessor*, | 731 const GrPathProcessor*, |
| 729 const GrPathRange*, | 732 const GrPathRange*, |
| 730 const void* indices, | 733 const void* indices, |
| 731 PathIndexType, | 734 PathIndexType, |
| 732 const float transformValues[], | 735 const float transformValues[], |
| 733 PathTransformType, | 736 PathTransformType, |
| 734 int count, | 737 int count, |
| 735 const GrScissorState&, | 738 const GrScissorState&, |
| 736 const GrStencilSettings&, | 739 const GrStencilSettings&, |
| 737 const GrDeviceCoordTexture*) = 0; | 740 const GrDeviceCoordTexture*) = 0; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 764 virtual bool onInitCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* d
stDesc) = 0; | 767 virtual bool onInitCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* d
stDesc) = 0; |
| 765 | 768 |
| 766 // helpers for reserving vertex and index space. | 769 // helpers for reserving vertex and index space. |
| 767 bool reserveVertexSpace(size_t vertexSize, | 770 bool reserveVertexSpace(size_t vertexSize, |
| 768 int vertexCount, | 771 int vertexCount, |
| 769 void** vertices); | 772 void** vertices); |
| 770 bool reserveIndexSpace(int indexCount, void** indices); | 773 bool reserveIndexSpace(int indexCount, void** indices); |
| 771 | 774 |
| 772 // called by drawIndexed and drawNonIndexed. Use a negative indexCount to | 775 // called by drawIndexed and drawNonIndexed. Use a negative indexCount to |
| 773 // indicate non-indexed drawing. | 776 // indicate non-indexed drawing. |
| 774 bool checkDraw(const GrDrawState&, | 777 bool checkDraw(const GrPipelineBuilder&, |
| 775 const GrGeometryProcessor*, | 778 const GrGeometryProcessor*, |
| 776 GrPrimitiveType type, | 779 GrPrimitiveType type, |
| 777 int startVertex, | 780 int startVertex, |
| 778 int startIndex, | 781 int startIndex, |
| 779 int vertexCount, | 782 int vertexCount, |
| 780 int indexCount) const; | 783 int indexCount) const; |
| 781 // called when setting a new vert/idx source to unref prev vb/ib | 784 // called when setting a new vert/idx source to unref prev vb/ib |
| 782 void releasePreviousVertexSource(); | 785 void releasePreviousVertexSource(); |
| 783 void releasePreviousIndexSource(); | 786 void releasePreviousIndexSource(); |
| 784 | 787 |
| 785 // Check to see if this set of draw commands has been sent out | 788 // Check to see if this set of draw commands has been sent out |
| 786 virtual bool isIssued(uint32_t drawID) { return true; } | 789 virtual bool isIssued(uint32_t drawID) { return true; } |
| 787 void getPathStencilSettingsForFilltype(GrPathRendering::FillType, | 790 void getPathStencilSettingsForFilltype(GrPathRendering::FillType, |
| 788 const GrStencilBuffer*, | 791 const GrStencilBuffer*, |
| 789 GrStencilSettings*); | 792 GrStencilSettings*); |
| 790 virtual GrClipMaskManager* clipMaskManager() = 0; | 793 virtual GrClipMaskManager* clipMaskManager() = 0; |
| 791 virtual bool setupClip(GrDrawState*, | 794 virtual bool setupClip(GrPipelineBuilder*, |
| 792 GrDrawState::AutoRestoreEffects* are, | 795 GrPipelineBuilder::AutoRestoreEffects* are, |
| 793 GrDrawState::AutoRestoreStencil* ars, | 796 GrPipelineBuilder::AutoRestoreStencil* ars, |
| 794 GrScissorState* scissorState, | 797 GrScissorState* scissorState, |
| 795 const SkRect* devBounds) = 0; | 798 const SkRect* devBounds) = 0; |
| 796 | 799 |
| 797 enum { | 800 enum { |
| 798 kPreallocGeoSrcStateStackCnt = 4, | 801 kPreallocGeoSrcStateStackCnt = 4, |
| 799 }; | 802 }; |
| 800 SkSTArray<kPreallocGeoSrcStateStackCnt, GeometrySrcState, true> fGeoSrcState
Stack; | 803 SkSTArray<kPreallocGeoSrcStateStackCnt, GeometrySrcState, true> fGeoSrcState
Stack; |
| 801 const GrClipData* fClip; | 804 const GrClipData* fClip; |
| 802 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar
get. | 805 // The context owns us, not vice-versa, so this ptr is not ref'ed by DrawTar
get. |
| 803 GrContext* fContext; | 806 GrContext* fContext; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 841 // get rid of them all. | 844 // get rid of them all. |
| 842 fClipMaskManager.purgeResources(); | 845 fClipMaskManager.purgeResources(); |
| 843 }; | 846 }; |
| 844 | 847 |
| 845 protected: | 848 protected: |
| 846 GrClipMaskManager fClipMaskManager; | 849 GrClipMaskManager fClipMaskManager; |
| 847 | 850 |
| 848 private: | 851 private: |
| 849 GrClipMaskManager* clipMaskManager() SK_OVERRIDE { return &fClipMaskManager;
} | 852 GrClipMaskManager* clipMaskManager() SK_OVERRIDE { return &fClipMaskManager;
} |
| 850 | 853 |
| 851 virtual bool setupClip(GrDrawState*, | 854 virtual bool setupClip(GrPipelineBuilder*, |
| 852 GrDrawState::AutoRestoreEffects* are, | 855 GrPipelineBuilder::AutoRestoreEffects* are, |
| 853 GrDrawState::AutoRestoreStencil* ars, | 856 GrPipelineBuilder::AutoRestoreStencil* ars, |
| 854 GrScissorState* scissorState, | 857 GrScissorState* scissorState, |
| 855 const SkRect* devBounds) SK_OVERRIDE; | 858 const SkRect* devBounds) SK_OVERRIDE; |
| 856 | 859 |
| 857 typedef GrDrawTarget INHERITED; | 860 typedef GrDrawTarget INHERITED; |
| 858 }; | 861 }; |
| 859 | 862 |
| 860 #endif | 863 #endif |
| OLD | NEW |