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