• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
9 #ifndef WindowContextFactory_mac_DEFINED
10 #define WindowContextFactory_mac_DEFINED
11 
12 #include "tools/window/WindowContext.h"
13 
14 #include <Cocoa/Cocoa.h>
15 
16 #include <memory>
17 
18 namespace skwindow {
19 
20 struct DisplayParams;
21 
GetBackingScaleFactor(NSView * view)22 static inline CGFloat GetBackingScaleFactor(NSView* view) {
23     #ifdef SK_BUILD_FOR_IOS
24     UIScreen* screen = view.window.screen ?: [UIScreen mainScreen];
25     return screen.nativeScale;
26     #else
27     NSScreen* screen = view.window.screen ?: [NSScreen mainScreen];
28     return screen.backingScaleFactor;
29     #endif
30 }
31 
32 struct MacWindowInfo {
33     NSView*   fMainView;
34 };
35 
36 #if defined(SK_GL) || defined(SK_ANGLE)
GetGLPixelFormat(int sampleCount)37 static inline NSOpenGLPixelFormat* GetGLPixelFormat(int sampleCount) {
38     constexpr int kMaxAttributes = 19;
39     NSOpenGLPixelFormatAttribute attributes[kMaxAttributes];
40     int numAttributes = 0;
41     attributes[numAttributes++] = NSOpenGLPFAAccelerated;
42     attributes[numAttributes++] = NSOpenGLPFAClosestPolicy;
43     attributes[numAttributes++] = NSOpenGLPFADoubleBuffer;
44     attributes[numAttributes++] = NSOpenGLPFAOpenGLProfile;
45     attributes[numAttributes++] = NSOpenGLProfileVersion3_2Core;
46     attributes[numAttributes++] = NSOpenGLPFAColorSize;
47     attributes[numAttributes++] = 24;
48     attributes[numAttributes++] = NSOpenGLPFAAlphaSize;
49     attributes[numAttributes++] = 8;
50     attributes[numAttributes++] = NSOpenGLPFADepthSize;
51     attributes[numAttributes++] = 0;
52     attributes[numAttributes++] = NSOpenGLPFAStencilSize;
53     attributes[numAttributes++] = 8;
54     if (sampleCount > 1) {
55         attributes[numAttributes++] = NSOpenGLPFAMultisample;
56         attributes[numAttributes++] = NSOpenGLPFASampleBuffers;
57         attributes[numAttributes++] = 1;
58         attributes[numAttributes++] = NSOpenGLPFASamples;
59         attributes[numAttributes++] = sampleCount;
60     } else {
61         attributes[numAttributes++] = NSOpenGLPFASampleBuffers;
62         attributes[numAttributes++] = 0;
63     }
64     attributes[numAttributes++] = 0;
65     SkASSERT(numAttributes <= kMaxAttributes);
66     return [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];
67 }
68 #endif  // defined(SK_GL) || defined(SK_ANGLE)
69 
70 #ifdef SK_VULKAN
MakeVulkanForMac(const MacWindowInfo &,const DisplayParams &)71 inline std::unique_ptr<WindowContext> MakeVulkanForMac(const MacWindowInfo&, const DisplayParams&) {
72     // No Vulkan support on Mac.
73     return nullptr;
74 }
75 #endif
76 
77 #ifdef SK_GL
78 std::unique_ptr<WindowContext> MakeRasterForMac(const MacWindowInfo&, const DisplayParams&);
79 std::unique_ptr<WindowContext> MakeGLForMac(const MacWindowInfo&, const DisplayParams&);
80 #endif
81 
82 #ifdef SK_ANGLE
83 std::unique_ptr<WindowContext> MakeANGLEForMac(const MacWindowInfo&, const DisplayParams&);
84 #endif
85 
86 #ifdef SK_DAWN
87 #if defined(SK_GRAPHITE)
88 std::unique_ptr<WindowContext> MakeGraphiteDawnMetalForMac(const MacWindowInfo&, const DisplayParams&);
89 #endif
90 #endif
91 
92 #ifdef SK_METAL
93 std::unique_ptr<WindowContext> MakeMetalForMac(const MacWindowInfo&, const DisplayParams&);
94 #if defined(SK_GRAPHITE)
95 std::unique_ptr<WindowContext> MakeGraphiteMetalForMac(const MacWindowInfo&, const DisplayParams&);
96 #endif
97 #endif
98 
99 }  // namespace skwindow
100 
101 #endif
102