| Index: src/gpu/GrGpu.cpp
|
| diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp
|
| index 88adb20b6065e1b0b535c41bb1dae6b1c9be2487..2a1f5b6331d79327eb72b12be4b276b13dfe389f 100644
|
| --- a/src/gpu/GrGpu.cpp
|
| +++ b/src/gpu/GrGpu.cpp
|
| @@ -266,29 +266,6 @@ const GrIndexBuffer* GrGpu::getQuadIndexBuffer() const {
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
| -bool GrGpu::setupClipAndFlushState(DrawType type,
|
| - const GrDeviceCoordTexture* dstCopy,
|
| - const SkRect* devBounds,
|
| - GrDrawState::AutoRestoreEffects* are,
|
| - GrDrawState::AutoRestoreStencil* ars) {
|
| - GrClipMaskManager::ScissorState scissorState;
|
| - if (!fClipMaskManager.setupClipping(this->getClip(),
|
| - devBounds,
|
| - are,
|
| - ars,
|
| - &scissorState)) {
|
| - return false;
|
| - }
|
| -
|
| - if (!this->flushGraphicsState(type, scissorState, dstCopy)) {
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| void GrGpu::geometrySourceWillPush() {
|
| const GeometrySrcState& geoSrc = this->getGeomSrc();
|
| if (kReserved_GeometrySrcType == geoSrc.fVertexSrc) {
|
| @@ -314,109 +291,60 @@ void GrGpu::geometrySourceWillPop(const GeometrySrcState& restoredState) {
|
| fGeomPoolStateStack.pop_back();
|
| }
|
|
|
| -void GrGpu::onDraw(const DrawInfo& info) {
|
| +void GrGpu::onDraw(const DrawInfo& info, const GrClipMaskManager::ScissorState& scissorState) {
|
| this->handleDirtyContext();
|
| - GrDrawState::AutoRestoreEffects are;
|
| - GrDrawState::AutoRestoreStencil ars;
|
| - if (!this->setupClipAndFlushState(PrimTypeToDrawType(info.primitiveType()),
|
| - info.getDstCopy(),
|
| - info.getDevBounds(),
|
| - &are,
|
| - &ars)) {
|
| + if (!this->flushGraphicsState(PrimTypeToDrawType(info.primitiveType()),
|
| + scissorState,
|
| + info.getDstCopy())) {
|
| return;
|
| }
|
| this->onGpuDraw(info);
|
| }
|
|
|
| -
|
| -// TODO hack
|
| -static const GrStencilSettings& winding_path_stencil_settings() {
|
| - GR_STATIC_CONST_SAME_STENCIL_STRUCT(gSettings,
|
| - kIncClamp_StencilOp,
|
| - kIncClamp_StencilOp,
|
| - kAlwaysIfInClip_StencilFunc,
|
| - 0xFFFF, 0xFFFF, 0xFFFF);
|
| - return *GR_CONST_STENCIL_SETTINGS_PTR_FROM_STRUCT_PTR(&gSettings);
|
| -}
|
| -
|
| -static const GrStencilSettings& even_odd_path_stencil_settings() {
|
| - GR_STATIC_CONST_SAME_STENCIL_STRUCT(gSettings,
|
| - kInvert_StencilOp,
|
| - kInvert_StencilOp,
|
| - kAlwaysIfInClip_StencilFunc,
|
| - 0xFFFF, 0xFFFF, 0xFFFF);
|
| - return *GR_CONST_STENCIL_SETTINGS_PTR_FROM_STRUCT_PTR(&gSettings);
|
| -}
|
| -
|
| -static void get_path_stencil_settings_for_filltype(GrPathRendering::FillType fill,
|
| - GrStencilSettings* outStencilSettings) {
|
| -
|
| - switch (fill) {
|
| - default:
|
| - SkFAIL("Unexpected path fill.");
|
| - case GrPathRendering::kWinding_FillType:
|
| - *outStencilSettings = winding_path_stencil_settings();
|
| - break;
|
| - case GrPathRendering::kEvenOdd_FillType:
|
| - *outStencilSettings = even_odd_path_stencil_settings();
|
| - break;
|
| - }
|
| -}
|
| -
|
| -void GrGpu::onStencilPath(const GrPath* path, GrPathRendering::FillType fill) {
|
| +void GrGpu::onStencilPath(const GrPath* path,
|
| + const GrClipMaskManager::ScissorState& scissorState,
|
| + const GrStencilSettings& stencilSettings) {
|
| this->handleDirtyContext();
|
|
|
| - GrDrawState::AutoRestoreEffects are;
|
| - GrDrawState::AutoRestoreStencil ars;
|
| - if (!this->setupClipAndFlushState(kStencilPath_DrawType, NULL, NULL, &are, &ars)) {
|
| + if (!this->flushGraphicsState(kStencilPath_DrawType, scissorState, NULL)) {
|
| return;
|
| }
|
|
|
| - GrStencilSettings stencilSettings;
|
| - get_path_stencil_settings_for_filltype(fill, &stencilSettings);
|
| - fClipMaskManager.adjustPathStencilParams(&stencilSettings);
|
| -
|
| this->pathRendering()->stencilPath(path, stencilSettings);
|
| }
|
|
|
|
|
| -void GrGpu::onDrawPath(const GrPath* path, GrPathRendering::FillType fill,
|
| +void GrGpu::onDrawPath(const GrPath* path,
|
| + const GrClipMaskManager::ScissorState& scissorState,
|
| + const GrStencilSettings& stencilSettings,
|
| const GrDeviceCoordTexture* dstCopy) {
|
| this->handleDirtyContext();
|
|
|
| drawState()->setDefaultVertexAttribs();
|
|
|
| - GrDrawState::AutoRestoreEffects are;
|
| - GrDrawState::AutoRestoreStencil ars;
|
| - if (!this->setupClipAndFlushState(kDrawPath_DrawType, dstCopy, NULL, &are, &ars)) {
|
| + if (!this->flushGraphicsState(kDrawPath_DrawType, scissorState, dstCopy)) {
|
| return;
|
| }
|
|
|
| - GrStencilSettings stencilSettings;
|
| - get_path_stencil_settings_for_filltype(fill, &stencilSettings);
|
| - fClipMaskManager.adjustPathStencilParams(&stencilSettings);
|
| -
|
| this->pathRendering()->drawPath(path, stencilSettings);
|
| }
|
|
|
| void GrGpu::onDrawPaths(const GrPathRange* pathRange,
|
| - const uint32_t indices[], int count,
|
| - const float transforms[], PathTransformType transformsType,
|
| - GrPathRendering::FillType fill, const GrDeviceCoordTexture* dstCopy) {
|
| + const uint32_t indices[],
|
| + int count,
|
| + const float transforms[],
|
| + PathTransformType transformsType,
|
| + const GrClipMaskManager::ScissorState& scissorState,
|
| + const GrStencilSettings& stencilSettings,
|
| + const GrDeviceCoordTexture* dstCopy) {
|
| this->handleDirtyContext();
|
|
|
| drawState()->setDefaultVertexAttribs();
|
|
|
| - GrDrawState::AutoRestoreEffects are;
|
| - GrDrawState::AutoRestoreStencil ars;
|
| - if (!this->setupClipAndFlushState(kDrawPaths_DrawType, dstCopy, NULL, &are, &ars)) {
|
| + if (!this->flushGraphicsState(kDrawPaths_DrawType, scissorState, dstCopy)) {
|
| return;
|
| }
|
|
|
| - GrStencilSettings stencilSettings;
|
| - get_path_stencil_settings_for_filltype(fill, &stencilSettings);
|
| - fClipMaskManager.adjustPathStencilParams(&stencilSettings);
|
| -
|
| pathRange->willDrawPaths(indices, count);
|
| this->pathRendering()->drawPaths(pathRange, indices, count, transforms, transformsType,
|
| stencilSettings);
|
|
|