Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(723)

Unified Diff: src/image/SkSurface_Gpu.cpp

Issue 933043006: Implement SkBaseDevice snapshot support Base URL: https://skia.googlesource.com/skia.git@skimage-filters-04-snapshot-devices
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/image/SkSurface_Gpu.h ('k') | src/image/SkSurface_Raster.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/image/SkSurface_Gpu.cpp
diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp
index b94e4e30bd07f7a097a94a151a06b9558329476b..ea6e0899eebabd2e87c934babb500e7b3ac11d11 100644
--- a/src/image/SkSurface_Gpu.cpp
+++ b/src/image/SkSurface_Gpu.cpp
@@ -20,12 +20,23 @@
SkSurface_Gpu::SkSurface_Gpu(SkGpuDevice* device)
: INHERITED(device->width(), device->height(), &device->surfaceProps())
, fDevice(SkRef(device)) {
+ fDevice->setSurface(this);
+ fGenerationID = 0;
}
SkSurface_Gpu::~SkSurface_Gpu() {
+ // In case the device outlives this instance, make sure device does not try to access this.
+ fDevice->setSurface(NULL);
fDevice->unref();
}
+uint32_t SkSurface_Gpu::generationID() {
+ if (0 == fGenerationID) {
+ fGenerationID = this->newGenerationID();
+ }
+ return fGenerationID;
+}
+
SkCanvas* SkSurface_Gpu::onNewCanvas() {
SkCanvas::InitFlags flags = SkCanvas::kDefault_InitFlags;
// When we think this works...
@@ -35,8 +46,7 @@ SkCanvas* SkSurface_Gpu::onNewCanvas() {
}
SkSurface* SkSurface_Gpu::onNewSurface(const SkImageInfo& info) {
- GrRenderTarget* rt = fDevice->accessRenderTarget();
- int sampleCount = rt->numSamples();
+ int sampleCount = fDevice->getBackendSampleCnt();
// TODO: Make caller specify this (change virtual signature of onNewSurface).
static const Budgeted kBudgeted = kNo_Budgeted;
return SkSurface::NewRenderTarget(fDevice->context(), kBudgeted, info, sampleCount,
@@ -44,39 +54,11 @@ SkSurface* SkSurface_Gpu::onNewSurface(const SkImageInfo& info) {
}
SkImage* SkSurface_Gpu::onNewImageSnapshot(Budgeted budgeted) {
- const int sampleCount = fDevice->accessRenderTarget()->numSamples();
- SkImage* image = SkNewImageFromBitmapTexture(fDevice->accessBitmap(false), sampleCount,
- budgeted);
- if (image) {
- as_IB(image)->initWithProps(this->props());
- }
- return image;
-}
-
-void SkSurface_Gpu::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y,
- const SkPaint* paint) {
- canvas->drawBitmap(fDevice->accessBitmap(false), x, y, paint);
-}
-
-// Create a new render target and, if necessary, copy the contents of the old
-// render target into it. Note that this flushes the SkGpuDevice but
-// doesn't force an OpenGL flush.
-void SkSurface_Gpu::onCopyOnWrite(ContentChangeMode mode) {
- GrRenderTarget* rt = fDevice->accessRenderTarget();
- // are we sharing our render target with the image? Note this call should never create a new
- // image because onCopyOnWrite is only called when there is a cached image.
- SkImage* image = this->getCachedImage(kNo_Budgeted);
- SkASSERT(image);
- if (rt->asTexture() == SkTextureImageGetTexture(image)) {
- this->fDevice->replaceRenderTarget(SkSurface::kRetain_ContentChangeMode == mode);
- SkTextureImageApplyBudgetedDecision(image);
- } else if (kDiscard_ContentChangeMode == mode) {
- this->SkSurface_Gpu::onDiscard();
- }
+ return fDevice->newImageSnapshot(&this->props(), budgeted);
}
-void SkSurface_Gpu::onDiscard() {
- fDevice->accessRenderTarget()->discard();
+bool SkSurface_Gpu::isBackendBudgeted() const {
+ return fDevice->isBackendBudgeted();
}
///////////////////////////////////////////////////////////////////////////////
« no previous file with comments | « src/image/SkSurface_Gpu.h ('k') | src/image/SkSurface_Raster.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698