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