aboutsummaryrefslogtreecommitdiffstats
path: root/libsgl/gl/SkGLDevice_SWLayer.cpp
blob: 4b75d4c3eff4e9b18cc2359920c166fe9adc1de5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include "SkGLDevice_SWLayer.h"
#include "SkRegion.h"

SkGLDevice_SWLayer::SkGLDevice_SWLayer(const SkBitmap& bitmap)
        : SkGLDevice(bitmap, true) {
    fTextureID = 0;

    SkASSERT(bitmap.getPixels());
}

SkGLDevice_SWLayer::~SkGLDevice_SWLayer() {
    if (fTextureID) {
        glDeleteTextures(1, &fTextureID);
    }
}

SkGLDevice::TexOrientation SkGLDevice_SWLayer::bindDeviceAsTexture() {
    const SkBitmap& bitmap = this->accessBitmap(false);

    if (0 == fTextureID) {
        fTextureID = SkGL::BindNewTexture(bitmap, NULL);
    }
    return kTopToBottom_TexOrientation;
}

///////////////////////////////////////////////////////////////////////////////

#include "SkDraw.h"

void SkGLDevice_SWLayer::drawPaint(const SkDraw& draw, const SkPaint& paint) {
    draw.drawPaint(paint);
}

void SkGLDevice_SWLayer::drawPoints(const SkDraw& draw, SkCanvas::PointMode mode, size_t count,
                          const SkPoint pts[], const SkPaint& paint) {
    draw.drawPoints(mode, count, pts, paint);
}

void SkGLDevice_SWLayer::drawRect(const SkDraw& draw, const SkRect& r,
                        const SkPaint& paint) {
    draw.drawRect(r, paint);
}

void SkGLDevice_SWLayer::drawPath(const SkDraw& draw, const SkPath& path,
                        const SkPaint& paint) {
    draw.drawPath(path, paint);
}

void SkGLDevice_SWLayer::drawBitmap(const SkDraw& draw, const SkBitmap& bitmap,
                          const SkMatrix& matrix, const SkPaint& paint) {
    draw.drawBitmap(bitmap, matrix, paint);
}

void SkGLDevice_SWLayer::drawSprite(const SkDraw& draw, const SkBitmap& bitmap,
                          int x, int y, const SkPaint& paint) {
    draw.drawSprite(bitmap, x, y, paint);
}

void SkGLDevice_SWLayer::drawText(const SkDraw& draw, const void* text, size_t len,
                        SkScalar x, SkScalar y, const SkPaint& paint) {
    draw.drawText((const char*)text, len, x, y, paint);
}

void SkGLDevice_SWLayer::drawPosText(const SkDraw& draw, const void* text, size_t len,
                           const SkScalar xpos[], SkScalar y,
                           int scalarsPerPos, const SkPaint& paint) {
    draw.drawPosText((const char*)text, len, xpos, y, scalarsPerPos, paint);
}

void SkGLDevice_SWLayer::drawTextOnPath(const SkDraw& draw, const void* text,
                              size_t len, const SkPath& path,
                              const SkMatrix* matrix,
                              const SkPaint& paint) {
    draw.drawTextOnPath((const char*)text, len, path, matrix, paint);
}

void SkGLDevice_SWLayer::drawVertices(const SkDraw& draw, SkCanvas::VertexMode vmode,
                            int vertexCount,
                            const SkPoint verts[], const SkPoint textures[],
                            const SkColor colors[], SkXfermode* xmode,
                            const uint16_t indices[], int indexCount,
                            const SkPaint& paint) {
    draw.drawVertices(vmode, vertexCount, verts, textures, colors, xmode,
                      indices, indexCount, paint);
}

void SkGLDevice_SWLayer::drawDevice(const SkDraw& draw, SkDevice* dev,
                                    int x, int y, const SkPaint& paint) {
    this->SkDevice::drawDevice(draw, dev, x, y, paint);
}