1
2/*
3 * Copyright 2016 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8#ifndef GLWindowContext_DEFINED
9#define GLWindowContext_DEFINED
10
11
12#include "gl/GrGLInterface.h"
13
14#include "SkRefCnt.h"
15#include "SkSurface.h"
16
17#include "WindowContext.h"
18
19class GrContext;
20
21namespace sk_app {
22
23class GLWindowContext : public WindowContext {
24public:
25    sk_sp<SkSurface> getBackbufferSurface() override;
26
27    bool isValid() override { return SkToBool(fBackendContext.get()); }
28
29    void resize(int w, int h) override;
30    void swapBuffers() override;
31
32    void setDisplayParams(const DisplayParams& params) override;
33
34    GrBackendContext getBackendContext() override {
35        return (GrBackendContext) fBackendContext.get();
36    }
37
38protected:
39    GLWindowContext(const DisplayParams&);
40    // This should be called by subclass constructor. It is also called when window/display
41    // parameters change. This will in turn call onInitializeContext().
42    void initializeContext();
43    virtual sk_sp<const GrGLInterface> onInitializeContext() = 0;
44
45    // This should be called by subclass destructor. It is also called when window/display
46    // parameters change prior to initializing a new GL context. This will in turn call
47    // onDestroyContext().
48    void destroyContext();
49    virtual void onDestroyContext() = 0;
50
51    virtual void onSwapBuffers() = 0;
52
53    sk_sp<const GrGLInterface> fBackendContext;
54    sk_sp<SkSurface>           fSurface;
55};
56
57}   // namespace sk_app
58
59#endif
60