xref: /aosp_15_r20/external/skia/tools/window/WindowContext.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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