• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // Display.h: Defines the egl::Display class, representing the abstract
8 // display on which graphics are drawn. Implements EGLDisplay.
9 // [EGL 1.4] section 2.1.2 page 3.
10 
11 #ifndef LIBEGL_DISPLAY_H_
12 #define LIBEGL_DISPLAY_H_
13 
14 #include <set>
15 #include <vector>
16 
17 #include "libEGL/Config.h"
18 
19 namespace gl
20 {
21 class Context;
22 }
23 
24 namespace egl
25 {
26 class Surface;
27 
28 class Display
29 {
30   public:
31     ~Display();
32 
33     bool initialize();
34     void terminate();
35 
36     static egl::Display *getDisplay(EGLNativeDisplayType displayId);
37 
38     bool getConfigs(EGLConfig *configs, const EGLint *attribList, EGLint configSize, EGLint *numConfig);
39     bool getConfigAttrib(EGLConfig config, EGLint attribute, EGLint *value);
40 
41     EGLSurface createWindowSurface(HWND window, EGLConfig config, const EGLint *attribList);
42     EGLSurface createOffscreenSurface(EGLConfig config, HANDLE shareHandle, const EGLint *attribList);
43     EGLContext createContext(EGLConfig configHandle, EGLint clientVersion, const gl::Context *shareContext, bool notifyResets, bool robustAccess);
44 
45     void destroySurface(egl::Surface *surface);
46     void destroyContext(gl::Context *context);
47 
48     bool isInitialized() const;
49     bool isValidConfig(EGLConfig config);
50     bool isValidContext(gl::Context *context);
51     bool isValidSurface(egl::Surface *surface);
52     bool hasExistingWindowSurface(HWND window);
53 
getRenderer()54     rx::Renderer *getRenderer() { return mRenderer; };
55 
56     // exported methods must be virtual
57     virtual void notifyDeviceLost();
58     virtual void recreateSwapChains();
59 
60     const char *getExtensionString() const;
61     const char *getVendorString() const;
62 
63   private:
64     DISALLOW_COPY_AND_ASSIGN(Display);
65 
66     Display(EGLNativeDisplayType displayId, HDC deviceContext);
67 
68     bool restoreLostDevice();
69 
70     EGLNativeDisplayType mDisplayId;
71     const HDC mDc;
72 
73     bool mSoftwareDevice;
74 
75     typedef std::set<Surface*> SurfaceSet;
76     SurfaceSet mSurfaceSet;
77 
78     ConfigSet mConfigSet;
79 
80     typedef std::set<gl::Context*> ContextSet;
81     ContextSet mContextSet;
82 
83     rx::Renderer *mRenderer;
84 
85     void initExtensionString();
86     void initVendorString();
87     std::string mExtensionString;
88     std::string mVendorString;
89 };
90 }
91 
92 #endif   // LIBEGL_DISPLAY_H_
93