| Index: src/gpu/GrGpu.cpp
|
| diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp
|
| index 64ee29bde54bfb8206201f71b50af4d7baecf0e5..4c7450cbd2cf8ae5f78a74ef9aa62b0dd36d566a 100644
|
| --- a/src/gpu/GrGpu.cpp
|
| +++ b/src/gpu/GrGpu.cpp
|
| @@ -26,14 +26,10 @@ GrGpu::GrGpu(GrContext* context)
|
| , fResetBits(kAll_GrBackendState)
|
| , fQuadIndexBuffer(NULL)
|
| , fContext(context) {
|
| - fDrawState = &fDefaultDrawState;
|
| - // We assume that fDrawState always owns a ref to the object it points at.
|
| - fDefaultDrawState.ref();
|
| }
|
|
|
| GrGpu::~GrGpu() {
|
| SkSafeSetNull(fQuadIndexBuffer);
|
| - SkSafeUnref(fDrawState);
|
| SkSafeUnref(fGeoSrcState.fVertexBuffer);
|
| SkSafeUnref(fGeoSrcState.fIndexBuffer);
|
| }
|
| @@ -190,13 +186,7 @@ void GrGpu::clear(const SkIRect* rect,
|
| void GrGpu::clearStencilClip(const SkIRect& rect,
|
| bool insideClip,
|
| GrRenderTarget* renderTarget) {
|
| - if (NULL == renderTarget) {
|
| - renderTarget = this->getDrawState().getRenderTarget();
|
| - }
|
| - if (NULL == renderTarget) {
|
| - SkASSERT(0);
|
| - return;
|
| - }
|
| + SkASSERT(renderTarget);
|
| this->handleDirtyContext();
|
| this->onClearStencilClip(renderTarget, rect, insideClip);
|
| }
|
| @@ -273,11 +263,11 @@ void GrGpu::removeGpuTraceMarker(const GrGpuTraceMarker* marker) {
|
| }
|
| }
|
|
|
| -void GrGpu::setVertexSourceToBuffer(const GrVertexBuffer* buffer) {
|
| +void GrGpu::setVertexSourceToBuffer(const GrVertexBuffer* buffer, size_t vertexStride) {
|
| SkSafeUnref(fGeoSrcState.fVertexBuffer);
|
| fGeoSrcState.fVertexBuffer = buffer;
|
| buffer->ref();
|
| - fGeoSrcState.fVertexSize = this->drawState()->getVertexStride();
|
| + fGeoSrcState.fVertexSize = vertexStride;
|
| }
|
|
|
| void GrGpu::setIndexSourceToBuffer(const GrIndexBuffer* buffer) {
|
| @@ -286,18 +276,6 @@ void GrGpu::setIndexSourceToBuffer(const GrIndexBuffer* buffer) {
|
| buffer->ref();
|
| }
|
|
|
| -void GrGpu::setDrawState(GrDrawState* drawState) {
|
| - SkASSERT(fDrawState);
|
| - if (NULL == drawState) {
|
| - drawState = &fDefaultDrawState;
|
| - }
|
| - if (fDrawState != drawState) {
|
| - fDrawState->unref();
|
| - drawState->ref();
|
| - fDrawState = drawState;
|
| - }
|
| -}
|
| -
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
| static const int MAX_QUADS = 1 << 12; // max possible: (1 << 14) - 1;
|
| @@ -323,23 +301,26 @@ const GrIndexBuffer* GrGpu::getQuadIndexBuffer() const {
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
| -void GrGpu::draw(const GrDrawTarget::DrawInfo& info,
|
| - const GrClipMaskManager::ScissorState& scissorState) {
|
| +void GrGpu::draw(const GrOptDrawState& ds,
|
| + const GrDrawTarget::DrawInfo& info,
|
| + const GrClipMaskManager::ScissorState& scissorState) {
|
| this->handleDirtyContext();
|
| - if (!this->flushGraphicsState(PrimTypeToDrawType(info.primitiveType()),
|
| + if (!this->flushGraphicsState(ds,
|
| + PrimTypeToDrawType(info.primitiveType()),
|
| scissorState,
|
| info.getDstCopy())) {
|
| return;
|
| }
|
| - this->onDraw(info);
|
| + this->onDraw(ds, info);
|
| }
|
|
|
| -void GrGpu::stencilPath(const GrPath* path,
|
| - const GrClipMaskManager::ScissorState& scissorState,
|
| - const GrStencilSettings& stencilSettings) {
|
| +void GrGpu::stencilPath(const GrOptDrawState& ds,
|
| + const GrPath* path,
|
| + const GrClipMaskManager::ScissorState& scissorState,
|
| + const GrStencilSettings& stencilSettings) {
|
| this->handleDirtyContext();
|
|
|
| - if (!this->flushGraphicsState(kStencilPath_DrawType, scissorState, NULL)) {
|
| + if (!this->flushGraphicsState(ds, kStencilPath_DrawType, scissorState, NULL)) {
|
| return;
|
| }
|
|
|
| @@ -347,30 +328,32 @@ void GrGpu::stencilPath(const GrPath* path,
|
| }
|
|
|
|
|
| -void GrGpu::drawPath(const GrPath* path,
|
| - const GrClipMaskManager::ScissorState& scissorState,
|
| - const GrStencilSettings& stencilSettings,
|
| - const GrDeviceCoordTexture* dstCopy) {
|
| +void GrGpu::drawPath(const GrOptDrawState& ds,
|
| + const GrPath* path,
|
| + const GrClipMaskManager::ScissorState& scissorState,
|
| + const GrStencilSettings& stencilSettings,
|
| + const GrDeviceCoordTexture* dstCopy) {
|
| this->handleDirtyContext();
|
|
|
| - if (!this->flushGraphicsState(kDrawPath_DrawType, scissorState, dstCopy)) {
|
| + if (!this->flushGraphicsState(ds, kDrawPath_DrawType, scissorState, dstCopy)) {
|
| return;
|
| }
|
|
|
| this->pathRendering()->drawPath(path, stencilSettings);
|
| }
|
|
|
| -void GrGpu::drawPaths(const GrPathRange* pathRange,
|
| - const uint32_t indices[],
|
| - int count,
|
| - const float transforms[],
|
| - GrDrawTarget::PathTransformType transformsType,
|
| - const GrClipMaskManager::ScissorState& scissorState,
|
| - const GrStencilSettings& stencilSettings,
|
| - const GrDeviceCoordTexture* dstCopy) {
|
| +void GrGpu::drawPaths(const GrOptDrawState& ds,
|
| + const GrPathRange* pathRange,
|
| + const uint32_t indices[],
|
| + int count,
|
| + const float transforms[],
|
| + GrDrawTarget::PathTransformType transformsType,
|
| + const GrClipMaskManager::ScissorState& scissorState,
|
| + const GrStencilSettings& stencilSettings,
|
| + const GrDeviceCoordTexture* dstCopy) {
|
| this->handleDirtyContext();
|
|
|
| - if (!this->flushGraphicsState(kDrawPaths_DrawType, scissorState, dstCopy)) {
|
| + if (!this->flushGraphicsState(ds, kDrawPaths_DrawType, scissorState, dstCopy)) {
|
| return;
|
| }
|
|
|
|
|