From 28136b308fe467da113983cfee332faea133cd8a Mon Sep 17 00:00:00 2001 From: "keyar@chromium.org" Date: Mon, 20 Aug 2012 15:04:15 +0000 Subject: [PATCH] flush() and glFinish() are now in the timed area of rendering. git-svn-id: http://skia.googlecode.com/svn/trunk@5187 2bbb7eff-a529-9590-31e7-b0007b416f81 --- tools/PictureRenderer.cpp | 45 ++++++++++++++++++++++++++++++++++----------- tools/PictureRenderer.h | 7 +++++-- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/tools/PictureRenderer.cpp b/tools/PictureRenderer.cpp index 0a6d0a8..bae8a4b 100644 --- a/tools/PictureRenderer.cpp +++ b/tools/PictureRenderer.cpp @@ -70,9 +70,18 @@ void PictureRenderer::end() { } void PictureRenderer::resetState() { +#if SK_SUPPORT_GPU + if (this->isUsingGpuDevice()) { + SkGLContext* glContext = fGrContextFactory.getGLContext( + GrContextFactory::kNative_GLContextType); + SK_GL(*glContext, Finish()); + } +#endif +} + +void PictureRenderer::finishDraw() { SkASSERT(fCanvas.get() != NULL); - SkASSERT(fPicture != NULL); - if (NULL == fCanvas.get() || NULL == fPicture) { + if (NULL == fCanvas.get()) { return; } @@ -82,8 +91,13 @@ void PictureRenderer::resetState() { if (this->isUsingGpuDevice()) { SkGLContext* glContext = fGrContextFactory.getGLContext( GrContextFactory::kNative_GLContextType); + + SkASSERT(glContext != NULL); + if (NULL == glContext) { + return; + } + SK_GL(*glContext, Finish()); - fGrContext->freeGpuResources(); } #endif } @@ -100,6 +114,7 @@ void PipePictureRenderer::render() { SkCanvas* pipeCanvas = writer.startRecording(&pipeController); pipeCanvas->drawPicture(*fPicture); writer.endRecording(); + this->finishDraw(); } void SimplePictureRenderer::render() { @@ -110,6 +125,7 @@ void SimplePictureRenderer::render() { } fCanvas->drawPicture(*fPicture); + this->finishDraw(); } TiledPictureRenderer::TiledPictureRenderer() @@ -144,6 +160,7 @@ void TiledPictureRenderer::render() { this->drawTiles(); this->copyTilesToCanvas(); + this->finishDraw(); } void TiledPictureRenderer::end() { @@ -193,18 +210,24 @@ void TiledPictureRenderer::drawTiles() { } } -void TiledPictureRenderer::resetState() { - SkASSERT(fCanvas.get() != NULL); - SkASSERT(fPicture != NULL); - if (NULL == fCanvas.get() || NULL == fPicture) { - return; - } - +void TiledPictureRenderer::finishDraw() { for (int i = 0; i < fTiles.count(); ++i) { fTiles[i].fCanvas->flush(); } - this->INHERITED::resetState(); +#if SK_SUPPORT_GPU + if (this->isUsingGpuDevice()) { + SkGLContext* glContext = fGrContextFactory.getGLContext( + GrContextFactory::kNative_GLContextType); + + SkASSERT(glContext != NULL); + if (NULL == glContext) { + return; + } + + SK_GL(*glContext, Finish()); + } +#endif } void TiledPictureRenderer::copyTilesToCanvas() { diff --git a/tools/PictureRenderer.h b/tools/PictureRenderer.h index ab0fb36..d1233da 100644 --- a/tools/PictureRenderer.h +++ b/tools/PictureRenderer.h @@ -35,7 +35,7 @@ public: virtual void init(SkPicture* pict); virtual void render() = 0; virtual void end(); - virtual void resetState(); + void resetState(); SkCanvas* getCanvas() { return fCanvas.get(); @@ -72,6 +72,7 @@ public: {} protected: + virtual void finishDraw(); SkCanvas* setupCanvas(); SkCanvas* setupCanvas(int width, int height); @@ -111,7 +112,6 @@ public: virtual void init(SkPicture* pict) SK_OVERRIDE; virtual void render() SK_OVERRIDE; virtual void end() SK_OVERRIDE; - virtual void resetState() SK_OVERRIDE; void drawTiles(); void setTileWidth(int width) { @@ -152,6 +152,9 @@ public: ~TiledPictureRenderer(); +protected: + virtual void finishDraw(); + private: struct TileInfo { SkBitmap* fBitmap; -- 2.7.4