1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2023 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker #ifndef WindowContext_DEFINED 8*c8dee2aaSAndroid Build Coastguard Worker #define WindowContext_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSurfaceProps.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrTypes.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "tools/window/DisplayParams.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker class GrDirectContext; 16*c8dee2aaSAndroid Build Coastguard Worker class SkSurface; 17*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GRAPHITE) 18*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 19*c8dee2aaSAndroid Build Coastguard Worker class Context; 20*c8dee2aaSAndroid Build Coastguard Worker class Recorder; 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker #endif 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker namespace skwindow { 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker class WindowContext { 27*c8dee2aaSAndroid Build Coastguard Worker public: 28*c8dee2aaSAndroid Build Coastguard Worker WindowContext(std::unique_ptr<const DisplayParams>); 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker virtual ~WindowContext(); 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker virtual sk_sp<SkSurface> getBackbufferSurface() = 0; 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker void swapBuffers(); 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker virtual bool isValid() = 0; 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker virtual void resize(int w, int h) = 0; 39*c8dee2aaSAndroid Build Coastguard Worker activate(bool isActive)40*c8dee2aaSAndroid Build Coastguard Worker virtual void activate(bool isActive) {} 41*c8dee2aaSAndroid Build Coastguard Worker getDisplayParams()42*c8dee2aaSAndroid Build Coastguard Worker const DisplayParams* getDisplayParams() { return fDisplayParams.get(); } 43*c8dee2aaSAndroid Build Coastguard Worker virtual void setDisplayParams(std::unique_ptr<const DisplayParams>) = 0; 44*c8dee2aaSAndroid Build Coastguard Worker directContext()45*c8dee2aaSAndroid Build Coastguard Worker GrDirectContext* directContext() const { return fContext.get(); } 46*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GRAPHITE) graphiteContext()47*c8dee2aaSAndroid Build Coastguard Worker skgpu::graphite::Context* graphiteContext() const { return fGraphiteContext.get(); } graphiteRecorder()48*c8dee2aaSAndroid Build Coastguard Worker skgpu::graphite::Recorder* graphiteRecorder() const { return fGraphiteRecorder.get(); } 49*c8dee2aaSAndroid Build Coastguard Worker #endif 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker using GpuTimerCallback = std::function<void(uint64_t ns)>; 52*c8dee2aaSAndroid Build Coastguard Worker void submitToGpu(GpuTimerCallback = {}); 53*c8dee2aaSAndroid Build Coastguard Worker bool supportsGpuTimer() const; 54*c8dee2aaSAndroid Build Coastguard Worker width()55*c8dee2aaSAndroid Build Coastguard Worker int width() const { return fWidth; } height()56*c8dee2aaSAndroid Build Coastguard Worker int height() const { return fHeight; } dimensions()57*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions() const { return {fWidth, fHeight}; } sampleCount()58*c8dee2aaSAndroid Build Coastguard Worker int sampleCount() const { return fSampleCount; } stencilBits()59*c8dee2aaSAndroid Build Coastguard Worker int stencilBits() const { return fStencilBits; } 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker protected: isGpuContext()62*c8dee2aaSAndroid Build Coastguard Worker virtual bool isGpuContext() { return true; } 63*c8dee2aaSAndroid Build Coastguard Worker 64*c8dee2aaSAndroid Build Coastguard Worker virtual void onSwapBuffers() = 0; 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrDirectContext> fContext; 67*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GRAPHITE) 68*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<skgpu::graphite::Context> fGraphiteContext; 69*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<skgpu::graphite::Recorder> fGraphiteRecorder; 70*c8dee2aaSAndroid Build Coastguard Worker #endif 71*c8dee2aaSAndroid Build Coastguard Worker 72*c8dee2aaSAndroid Build Coastguard Worker int fWidth; 73*c8dee2aaSAndroid Build Coastguard Worker int fHeight; 74*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<const DisplayParams> fDisplayParams; 75*c8dee2aaSAndroid Build Coastguard Worker 76*c8dee2aaSAndroid Build Coastguard Worker // parameters obtained from the native window 77*c8dee2aaSAndroid Build Coastguard Worker // Note that the platform .cpp file is responsible for 78*c8dee2aaSAndroid Build Coastguard Worker // initializing fSampleCount and fStencilBits! 79*c8dee2aaSAndroid Build Coastguard Worker int fSampleCount = 1; 80*c8dee2aaSAndroid Build Coastguard Worker int fStencilBits = 0; 81*c8dee2aaSAndroid Build Coastguard Worker }; 82*c8dee2aaSAndroid Build Coastguard Worker 83*c8dee2aaSAndroid Build Coastguard Worker } // namespace skwindow 84*c8dee2aaSAndroid Build Coastguard Worker 85*c8dee2aaSAndroid Build Coastguard Worker #endif 86