OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 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 #include "GrInOrderDrawBuffer.h" | 10 #include "GrInOrderDrawBuffer.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 GrIndexBufferAllocPool* indexPool) | 22 GrIndexBufferAllocPool* indexPool) |
23 : GrDrawTarget(gpu->getContext()) | 23 : GrDrawTarget(gpu->getContext()) |
24 , fDstGpu(gpu) | 24 , fDstGpu(gpu) |
25 , fClipSet(true) | 25 , fClipSet(true) |
26 , fClipProxyState(kUnknown_ClipProxyState) | 26 , fClipProxyState(kUnknown_ClipProxyState) |
27 , fVertexPool(*vertexPool) | 27 , fVertexPool(*vertexPool) |
28 , fIndexPool(*indexPool) | 28 , fIndexPool(*indexPool) |
29 , fFlushing(false) { | 29 , fFlushing(false) { |
30 | 30 |
31 fDstGpu->ref(); | 31 fDstGpu->ref(); |
32 fCaps = fDstGpu->getCaps(); | 32 fCaps.reset(SkRef(fDstGpu->caps())); |
33 | 33 |
34 GrAssert(NULL != vertexPool); | 34 GrAssert(NULL != vertexPool); |
35 GrAssert(NULL != indexPool); | 35 GrAssert(NULL != indexPool); |
36 | 36 |
37 GeometryPoolState& poolState = fGeoPoolStateStack.push_back(); | 37 GeometryPoolState& poolState = fGeoPoolStateStack.push_back(); |
38 poolState.fUsedPoolVertexBytes = 0; | 38 poolState.fUsedPoolVertexBytes = 0; |
39 poolState.fUsedPoolIndexBytes = 0; | 39 poolState.fUsedPoolIndexBytes = 0; |
40 #if GR_DEBUG | 40 #if GR_DEBUG |
41 poolState.fPoolVertexBuffer = (GrVertexBuffer*)~0; | 41 poolState.fPoolVertexBuffer = (GrVertexBuffer*)~0; |
42 poolState.fPoolStartVertex = ~0; | 42 poolState.fPoolStartVertex = ~0; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 GrVertexAttrib currAttrib = {kVec2f_GrVertexAttribType, currentOffset}; | 92 GrVertexAttrib currAttrib = {kVec2f_GrVertexAttribType, currentOffset}; |
93 attribs.push_back(currAttrib); | 93 attribs.push_back(currAttrib); |
94 currentOffset += sizeof(GrPoint); | 94 currentOffset += sizeof(GrPoint); |
95 | 95 |
96 // Using per-vertex colors allows batching across colors. (A lot of rects in
a row differing | 96 // Using per-vertex colors allows batching across colors. (A lot of rects in
a row differing |
97 // only in color is a common occurrence in tables). However, having per-vert
ex colors disables | 97 // only in color is a common occurrence in tables). However, having per-vert
ex colors disables |
98 // blending optimizations because we don't know if the color will be solid o
r not. These | 98 // blending optimizations because we don't know if the color will be solid o
r not. These |
99 // optimizations help determine whether coverage and color can be blended co
rrectly when | 99 // optimizations help determine whether coverage and color can be blended co
rrectly when |
100 // dual-source blending isn't available. This comes into play when there is
coverage. If colors | 100 // dual-source blending isn't available. This comes into play when there is
coverage. If colors |
101 // were a stage it could take a hint that every vertex's color will be opaqu
e. | 101 // were a stage it could take a hint that every vertex's color will be opaqu
e. |
102 if (this->getCaps().dualSourceBlendingSupport() || | 102 if (this->caps()->dualSourceBlendingSupport() || |
103 drawState->hasSolidCoverage(drawState->getAttribBindings())) { | 103 drawState->hasSolidCoverage(drawState->getAttribBindings())) { |
104 bindings |= GrDrawState::kColor_AttribBindingsBit; | 104 bindings |= GrDrawState::kColor_AttribBindingsBit; |
105 drawState->setAttribIndex(GrDrawState::kColor_AttribIndex, attribs.count
()); | 105 drawState->setAttribIndex(GrDrawState::kColor_AttribIndex, attribs.count
()); |
106 currAttrib.set(kVec4ub_GrVertexAttribType, currentOffset); | 106 currAttrib.set(kVec4ub_GrVertexAttribType, currentOffset); |
107 attribs.push_back(currAttrib); | 107 attribs.push_back(currAttrib); |
108 colorOffset = currentOffset; | 108 colorOffset = currentOffset; |
109 currentOffset += sizeof(GrColor); | 109 currentOffset += sizeof(GrColor); |
110 // We set the draw state's color to white here. This is done so that any
batching performed | 110 // We set the draw state's color to white here. This is done so that any
batching performed |
111 // in our subclass's onDraw() won't get a false from GrDrawState::op== d
ue to a color | 111 // in our subclass's onDraw() won't get a false from GrDrawState::op== d
ue to a color |
112 // mismatch. TODO: Once vertex layout is owned by GrDrawState it should
skip comparing the | 112 // mismatch. TODO: Once vertex layout is owned by GrDrawState it should
skip comparing the |
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
758 GrInOrderDrawBuffer::Clear* GrInOrderDrawBuffer::recordClear() { | 758 GrInOrderDrawBuffer::Clear* GrInOrderDrawBuffer::recordClear() { |
759 fCmds.push_back(kClear_Cmd); | 759 fCmds.push_back(kClear_Cmd); |
760 return &fClears.push_back(); | 760 return &fClears.push_back(); |
761 } | 761 } |
762 | 762 |
763 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) { | 763 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) { |
764 INHERITED::clipWillBeSet(newClipData); | 764 INHERITED::clipWillBeSet(newClipData); |
765 fClipSet = true; | 765 fClipSet = true; |
766 fClipProxyState = kUnknown_ClipProxyState; | 766 fClipProxyState = kUnknown_ClipProxyState; |
767 } | 767 } |
OLD | NEW |