Chromium Code Reviews| Index: src/gpu/GrInOrderDrawBuffer.cpp |
| diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp |
| index 2f90373c339f581f0b1adf81e4dc251ec04f522a..e9d55eea60bfbc664edb1daceb88a98b5b13cbfe 100644 |
| --- a/src/gpu/GrInOrderDrawBuffer.cpp |
| +++ b/src/gpu/GrInOrderDrawBuffer.cpp |
| @@ -435,7 +435,7 @@ void GrInOrderDrawBuffer::reset() { |
| this->resetIndexSource(); |
| fCmdBuffer.reset(); |
| - fLastState.reset(NULL); |
| + fLastState = NULL; |
| fVertexPool.reset(); |
| fIndexPool.reset(); |
| reset_data_buffer(&fPathIndexBuffer, kPathIdxBufferMinReserve); |
| @@ -470,7 +470,7 @@ void GrInOrderDrawBuffer::flush() { |
| // Updated every time we find a set state cmd to reflect the current state in the playback |
| // stream. |
| - SkAutoTUnref<const GrOptDrawState> currentOptState; |
| + const GrOptDrawState* currentOptState = NULL; |
| while (iter.next()) { |
| GrGpuTraceMarker newMarker("", -1); |
| @@ -484,9 +484,9 @@ void GrInOrderDrawBuffer::flush() { |
| if (kSetState_Cmd == strip_trace_bit(iter->fType)) { |
| SetState* ss = reinterpret_cast<SetState*>(iter.get()); |
| - currentOptState.reset(SkRef(ss->fState.get())); |
| + currentOptState = &ss->fState; |
| } else { |
| - iter->execute(this, currentOptState.get()); |
| + iter->execute(this, currentOptState); |
| } |
| if (cmd_has_trace_marker(iter->fType)) { |
| @@ -502,29 +502,32 @@ void GrInOrderDrawBuffer::flush() { |
| } |
| void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf, const GrOptDrawState* optState) { |
| + SkASSERT(optState); |
| buf->fDstGpu->draw(*optState, fInfo); |
| } |
| void GrInOrderDrawBuffer::StencilPath::execute(GrInOrderDrawBuffer* buf, |
| const GrOptDrawState* optState) { |
| + SkASSERT(optState); |
| buf->fDstGpu->stencilPath(*optState, this->path(), fStencilSettings); |
| } |
| void GrInOrderDrawBuffer::DrawPath::execute(GrInOrderDrawBuffer* buf, |
| const GrOptDrawState* optState) { |
| + SkASSERT(optState); |
| buf->fDstGpu->drawPath(*optState, this->path(), fStencilSettings); |
| } |
| void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf, |
| const GrOptDrawState* optState) { |
| + SkASSERT(optState); |
| buf->fDstGpu->drawPaths(*optState, this->pathRange(), |
| &buf->fPathIndexBuffer[fIndicesLocation], fCount, |
| &buf->fPathTransformBuffer[fTransformsLocation], fTransformsType, |
| fStencilSettings); |
| } |
| -void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, const GrOptDrawState*) { |
| -} |
| +void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, const GrOptDrawState*) { } |
|
egdaniel
2014/11/21 22:26:24
extra space in { }
bsalomon
2014/11/24 14:36:57
Done.
|
| void GrInOrderDrawBuffer::Clear::execute(GrInOrderDrawBuffer* buf, const GrOptDrawState*) { |
| if (GrColor_ILLEGAL == fColor) { |
| @@ -727,15 +730,16 @@ bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrDrawState& ds, |
| GrGpu::DrawType drawType, |
| const GrClipMaskManager::ScissorState& scissor, |
| const GrDeviceCoordTexture* dstCopy) { |
| - SkAutoTUnref<GrOptDrawState> optState( |
| - SkNEW_ARGS(GrOptDrawState, (ds, fDstGpu, scissor, dstCopy, drawType))); |
| - if (optState->mustSkip()) { |
| + SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, |
| + (ds, fDstGpu, scissor, dstCopy, drawType)); |
| + if (ss->fState.mustSkip()) { |
| + fCmdBuffer.pop_back(); |
| return false; |
| } |
| - if (!fLastState || *optState != *fLastState) { |
| - SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, (optState)); |
| - fLastState.reset(SkRef(optState.get())); |
| - ss->fDrawType = drawType; |
| + if (fLastState && *fLastState == ss->fState) { |
| + fCmdBuffer.pop_back(); |
| + } else { |
| + fLastState = &ss->fState; |
| this->recordTraceMarkersIfNecessary(); |
| } |
| return true; |