1cb93a386Sopenharmony_ci
2cb93a386Sopenharmony_ci/*
3cb93a386Sopenharmony_ci * Copyright 2016 Google Inc.
4cb93a386Sopenharmony_ci *
5cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be
6cb93a386Sopenharmony_ci * found in the LICENSE file.
7cb93a386Sopenharmony_ci */
8cb93a386Sopenharmony_ci
9cb93a386Sopenharmony_ci#ifndef WindowContextFactory_unix_DEFINED
10cb93a386Sopenharmony_ci#define WindowContextFactory_unix_DEFINED
11cb93a386Sopenharmony_ci
12cb93a386Sopenharmony_ci// webgpu_cpp.h and X.h don't get along. Include this first, before X11 defines None, Success etc.
13cb93a386Sopenharmony_ci#ifdef SK_DAWN
14cb93a386Sopenharmony_ci#include "dawn/webgpu_cpp.h"
15cb93a386Sopenharmony_ci#endif
16cb93a386Sopenharmony_ci#include <X11/Xlib.h>
17cb93a386Sopenharmony_ci#include <GL/glx.h>
18cb93a386Sopenharmony_ci
19cb93a386Sopenharmony_ci#include <memory>
20cb93a386Sopenharmony_ci
21cb93a386Sopenharmony_citypedef Window XWindow;
22cb93a386Sopenharmony_ci
23cb93a386Sopenharmony_cinamespace sk_app {
24cb93a386Sopenharmony_ci
25cb93a386Sopenharmony_ciclass WindowContext;
26cb93a386Sopenharmony_cistruct DisplayParams;
27cb93a386Sopenharmony_ci
28cb93a386Sopenharmony_cinamespace window_context_factory {
29cb93a386Sopenharmony_ci
30cb93a386Sopenharmony_cistruct XlibWindowInfo {
31cb93a386Sopenharmony_ci    Display*     fDisplay;
32cb93a386Sopenharmony_ci    XWindow      fWindow;
33cb93a386Sopenharmony_ci    GLXFBConfig* fFBConfig;
34cb93a386Sopenharmony_ci    XVisualInfo* fVisualInfo;
35cb93a386Sopenharmony_ci    int          fWidth;
36cb93a386Sopenharmony_ci    int          fHeight;
37cb93a386Sopenharmony_ci};
38cb93a386Sopenharmony_ci
39cb93a386Sopenharmony_cistd::unique_ptr<WindowContext> MakeVulkanForXlib(const XlibWindowInfo&, const DisplayParams&);
40cb93a386Sopenharmony_ci
41cb93a386Sopenharmony_cistd::unique_ptr<WindowContext> MakeGLForXlib(const XlibWindowInfo&, const DisplayParams&);
42cb93a386Sopenharmony_ci
43cb93a386Sopenharmony_ci#ifdef SK_DAWN
44cb93a386Sopenharmony_cistd::unique_ptr<WindowContext> MakeDawnVulkanForXlib(const XlibWindowInfo&, const DisplayParams&);
45cb93a386Sopenharmony_ci#endif
46cb93a386Sopenharmony_ci
47cb93a386Sopenharmony_cistd::unique_ptr<WindowContext> MakeRasterForXlib(const XlibWindowInfo&, const DisplayParams&);
48cb93a386Sopenharmony_ci
49cb93a386Sopenharmony_ci}  // namespace window_context_factory
50cb93a386Sopenharmony_ci
51cb93a386Sopenharmony_ci}  // namespace sk_app
52cb93a386Sopenharmony_ci
53cb93a386Sopenharmony_ci#endif
54