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 "common/system.h"
15
16#include <set>
17#include <vector>
18
19#include "libEGL/Config.h"
20
21namespace gl
22{
23class Context;
24}
25
26namespace egl
27{
28class Surface;
29
30class Display
31{
32  public:
33    ~Display();
34
35    bool initialize();
36    void terminate();
37
38    static egl::Display *getDisplay(EGLNativeDisplayType displayId);
39
40    bool getConfigs(EGLConfig *configs, const EGLint *attribList, EGLint configSize, EGLint *numConfig);
41    bool getConfigAttrib(EGLConfig config, EGLint attribute, EGLint *value);
42
43    EGLSurface createWindowSurface(HWND window, EGLConfig config, const EGLint *attribList);
44    EGLSurface createOffscreenSurface(EGLConfig config, HANDLE shareHandle, const EGLint *attribList);
45    EGLContext createContext(EGLConfig configHandle, const gl::Context *shareContext, bool notifyResets, bool robustAccess);
46
47    void destroySurface(egl::Surface *surface);
48    void destroyContext(gl::Context *context);
49
50    bool isInitialized() const;
51    bool isValidConfig(EGLConfig config);
52    bool isValidContext(gl::Context *context);
53    bool isValidSurface(egl::Surface *surface);
54    bool hasExistingWindowSurface(HWND window);
55
56    rx::Renderer *getRenderer() { return mRenderer; };
57
58    // exported methods must be virtual
59    virtual void notifyDeviceLost();
60    virtual void recreateSwapChains();
61
62    const char *getExtensionString() const;
63    const char *getVendorString() const;
64
65  private:
66    DISALLOW_COPY_AND_ASSIGN(Display);
67
68    Display(EGLNativeDisplayType displayId, HDC deviceContext);
69
70    bool restoreLostDevice();
71
72    EGLNativeDisplayType mDisplayId;
73    const HDC mDc;
74
75    bool mSoftwareDevice;
76
77    typedef std::set<Surface*> SurfaceSet;
78    SurfaceSet mSurfaceSet;
79
80    ConfigSet mConfigSet;
81
82    typedef std::set<gl::Context*> ContextSet;
83    ContextSet mContextSet;
84
85    rx::Renderer *mRenderer;
86
87    void initExtensionString();
88    void initVendorString();
89    std::string mExtensionString;
90    std::string mVendorString;
91};
92}
93
94#endif   // LIBEGL_DISPLAY_H_
95