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 19 class GrContext; 20 21 namespace sk_app { 22 23 class GLWindowContext : public WindowContext { 24 public: 25 sk_sp<SkSurface> getBackbufferSurface() override; 26 isValid()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 protected: 35 GLWindowContext(const DisplayParams&); 36 // This should be called by subclass constructor. It is also called when window/display 37 // parameters change. This will in turn call onInitializeContext(). 38 void initializeContext(); 39 virtual sk_sp<const GrGLInterface> onInitializeContext() = 0; 40 41 // This should be called by subclass destructor. It is also called when window/display 42 // parameters change prior to initializing a new GL context. This will in turn call 43 // onDestroyContext(). 44 void destroyContext(); 45 virtual void onDestroyContext() = 0; 46 47 virtual void onSwapBuffers() = 0; 48 49 sk_sp<const GrGLInterface> fBackendContext; 50 sk_sp<SkSurface> fSurface; 51 }; 52 53 } // namespace sk_app 54 55 #endif 56