• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2012 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "GrSurface.h"
9 
10 #include "SkBitmap.h"
11 #include "SkGr.h"
12 #include "SkImageEncoder.h"
13 #include <stdio.h>
14 
info() const15 SkImageInfo GrSurface::info() const {
16     SkColorType colorType;
17     if (!GrPixelConfig2ColorType(this->config(), &colorType)) {
18         sk_throw();
19     }
20     return SkImageInfo::Make(this->width(), this->height(), colorType, kPremul_SkAlphaType);
21 }
22 
savePixels(const char * filename)23 bool GrSurface::savePixels(const char* filename) {
24     SkBitmap bm;
25     if (!bm.tryAllocPixels(SkImageInfo::MakeN32Premul(this->width(), this->height()))) {
26         return false;
27     }
28 
29     bool result = readPixels(0, 0, this->width(), this->height(), kSkia8888_GrPixelConfig,
30                              bm.getPixels());
31     if (!result) {
32         SkDebugf("------ failed to read pixels for %s\n", filename);
33         return false;
34     }
35 
36     // remove any previous version of this file
37     remove(filename);
38 
39     if (!SkImageEncoder::EncodeFile(filename, bm, SkImageEncoder::kPNG_Type, 100)) {
40         SkDebugf("------ failed to encode %s\n", filename);
41         remove(filename);   // remove any partial file
42         return false;
43     }
44 
45     return true;
46 }
47 
hasPendingRead() const48 bool GrSurface::hasPendingRead() const {
49     const GrTexture* thisTex = this->asTexture();
50     if (thisTex && thisTex->internalHasPendingRead()) {
51         return true;
52     }
53     const GrRenderTarget* thisRT = this->asRenderTarget();
54     if (thisRT && thisRT->internalHasPendingRead()) {
55         return true;
56     }
57     return false;
58 }
59 
hasPendingWrite() const60 bool GrSurface::hasPendingWrite() const {
61     const GrTexture* thisTex = this->asTexture();
62     if (thisTex && thisTex->internalHasPendingWrite()) {
63         return true;
64     }
65     const GrRenderTarget* thisRT = this->asRenderTarget();
66     if (thisRT && thisRT->internalHasPendingWrite()) {
67         return true;
68     }
69     return false;
70 }
71 
hasPendingIO() const72 bool GrSurface::hasPendingIO() const {
73     const GrTexture* thisTex = this->asTexture();
74     if (thisTex && thisTex->internalHasPendingIO()) {
75         return true;
76     }
77     const GrRenderTarget* thisRT = this->asRenderTarget();
78     if (thisRT && thisRT->internalHasPendingIO()) {
79         return true;
80     }
81     return false;
82 }
83