xref: /aosp_15_r20/external/skia/tools/window/mac/MacWindowGLUtils.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2024 Google LLC
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef MacWindowGLUtils_DEFINED
9 #define MacWindowGLUtils_DEFINED
10 
11 #include "include/private/base/SkAssert.h"
12 
13 #include <Cocoa/Cocoa.h>
14 
15 namespace skwindow {
16 
GetGLPixelFormat(int sampleCount)17 static inline NSOpenGLPixelFormat* GetGLPixelFormat(int sampleCount) {
18     constexpr int kMaxAttributes = 19;
19     NSOpenGLPixelFormatAttribute attributes[kMaxAttributes];
20     int numAttributes = 0;
21     attributes[numAttributes++] = NSOpenGLPFAAccelerated;
22     attributes[numAttributes++] = NSOpenGLPFAClosestPolicy;
23     attributes[numAttributes++] = NSOpenGLPFADoubleBuffer;
24     attributes[numAttributes++] = NSOpenGLPFAOpenGLProfile;
25     attributes[numAttributes++] = NSOpenGLProfileVersion3_2Core;
26     attributes[numAttributes++] = NSOpenGLPFAColorSize;
27     attributes[numAttributes++] = 24;
28     attributes[numAttributes++] = NSOpenGLPFAAlphaSize;
29     attributes[numAttributes++] = 8;
30     attributes[numAttributes++] = NSOpenGLPFADepthSize;
31     attributes[numAttributes++] = 0;
32     attributes[numAttributes++] = NSOpenGLPFAStencilSize;
33     attributes[numAttributes++] = 8;
34     if (sampleCount > 1) {
35         attributes[numAttributes++] = NSOpenGLPFAMultisample;
36         attributes[numAttributes++] = NSOpenGLPFASampleBuffers;
37         attributes[numAttributes++] = 1;
38         attributes[numAttributes++] = NSOpenGLPFASamples;
39         attributes[numAttributes++] = sampleCount;
40     } else {
41         attributes[numAttributes++] = NSOpenGLPFASampleBuffers;
42         attributes[numAttributes++] = 0;
43     }
44     attributes[numAttributes++] = 0;
45     SkASSERT(numAttributes <= kMaxAttributes);
46     return [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];
47 }
48 
49 }  // namespace skwindow
50 
51 #endif
52