blob: 597ab9d278a04b71a505240cd0c6ea6def1c9019 [file] [log] [blame]
Jorge Betancourtb7508e22023-02-14 12:49:32 -05001/*
2 * Copyright 2023 Google LLC
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
Florin Malita28f5db52023-05-02 10:34:11 -04007#ifndef GLWindowContext_DEFINED
8#define GLWindowContext_DEFINED
Jorge Betancourtb7508e22023-02-14 12:49:32 -05009
10
11#include "include/gpu/gl/GrGLInterface.h"
12
13#include "include/core/SkRefCnt.h"
14#include "include/core/SkSurface.h"
15
Florin Malita28f5db52023-05-02 10:34:11 -040016#include "tools/window/WindowContext.h"
Jorge Betancourtb7508e22023-02-14 12:49:32 -050017
Florin Malita28f5db52023-05-02 10:34:11 -040018namespace skwindow::internal {
19
20class GLWindowContext : public WindowContext {
Jorge Betancourtb7508e22023-02-14 12:49:32 -050021public:
22 sk_sp<SkSurface> getBackbufferSurface() override;
23
24 bool isValid() override { return SkToBool(fBackendContext.get()); }
25
26 void resize(int w, int h) override;
Jorge Betancourtb7508e22023-02-14 12:49:32 -050027
Florin Malita28f5db52023-05-02 10:34:11 -040028 void setDisplayParams(const DisplayParams& params) override;
Jorge Betancourtb7508e22023-02-14 12:49:32 -050029
30protected:
Florin Malita28f5db52023-05-02 10:34:11 -040031 GLWindowContext(const DisplayParams&);
Jorge Betancourtb7508e22023-02-14 12:49:32 -050032 // This should be called by subclass constructor. It is also called when window/display
33 // parameters change. This will in turn call onInitializeContext().
34 void initializeContext();
35 virtual sk_sp<const GrGLInterface> onInitializeContext() = 0;
36
37 // This should be called by subclass destructor. It is also called when window/display
38 // parameters change prior to initializing a new GL context. This will in turn call
39 // onDestroyContext().
40 void destroyContext();
41 virtual void onDestroyContext() = 0;
42
Jorge Betancourtb7508e22023-02-14 12:49:32 -050043 sk_sp<const GrGLInterface> fBackendContext;
44 sk_sp<SkSurface> fSurface;
45};
46
Florin Malita28f5db52023-05-02 10:34:11 -040047} // namespace skwindow::internal
48
Jorge Betancourtb7508e22023-02-14 12:49:32 -050049#endif