Home | History | Annotate | Download | only in libEGL
      1 //
      2 // Copyright (c) 2002-2010 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 INCLUDE_DISPLAY_H_
     12 #define INCLUDE_DISPLAY_H_
     13 
     14 #ifndef WIN32_LEAN_AND_MEAN
     15 #define WIN32_LEAN_AND_MEAN
     16 #endif
     17 #include <windows.h>
     18 #include <d3d9.h>
     19 
     20 #include <set>
     21 
     22 #include "libGLESv2/Context.h"
     23 
     24 #include "libEGL/Config.h"
     25 #include "libEGL/Surface.h"
     26 
     27 namespace egl
     28 {
     29 class Display
     30 {
     31   public:
     32     Display(HDC deviceContext);
     33 
     34     ~Display();
     35 
     36     bool initialize();
     37     void terminate();
     38 
     39     virtual void startScene();
     40     virtual void endScene();
     41 
     42     bool getConfigs(EGLConfig *configs, const EGLint *attribList, EGLint configSize, EGLint *numConfig);
     43     bool getConfigAttrib(EGLConfig config, EGLint attribute, EGLint *value);
     44 
     45     egl::Surface *createWindowSurface(HWND window, EGLConfig config);
     46     EGLContext createContext(EGLConfig configHandle, const gl::Context *shareContext);
     47 
     48     void destroySurface(egl::Surface *surface);
     49     void destroyContext(gl::Context *context);
     50 
     51     bool isInitialized();
     52     bool isValidConfig(EGLConfig config);
     53     bool isValidContext(gl::Context *context);
     54     bool isValidSurface(egl::Surface *surface);
     55     bool hasExistingWindowSurface(HWND window);
     56 
     57     EGLint getMinSwapInterval();
     58     EGLint getMaxSwapInterval();
     59 
     60     virtual IDirect3DDevice9 *getDevice();
     61     virtual D3DCAPS9 getDeviceCaps();
     62     virtual void getMultiSampleSupport(D3DFORMAT format, bool *multiSampleArray);
     63     virtual bool getCompressedTextureSupport();
     64     virtual bool getEventQuerySupport();
     65     virtual bool getFloatTextureSupport(bool *filtering, bool *renderable);
     66     virtual bool getHalfFloatTextureSupport(bool *filtering, bool *renderable);
     67     virtual bool getLuminanceTextureSupport();
     68     virtual bool getLuminanceAlphaTextureSupport();
     69     virtual D3DPOOL getBufferPool(DWORD usage) const;
     70 
     71   private:
     72     DISALLOW_COPY_AND_ASSIGN(Display);
     73 
     74     D3DPRESENT_PARAMETERS getDefaultPresentParameters();
     75 
     76     const HDC mDc;
     77 
     78     HMODULE mD3d9Module;
     79 
     80     UINT mAdapter;
     81     D3DDEVTYPE mDeviceType;
     82     IDirect3D9 *mD3d9;  // Always valid after successful initialization.
     83     IDirect3D9Ex *mD3d9ex;  // Might be null if D3D9Ex is not supported.
     84     IDirect3DDevice9 *mDevice;
     85     D3DCAPS9 mDeviceCaps;
     86     HWND mDeviceWindow;
     87 
     88     bool mSceneStarted;
     89     EGLint mMaxSwapInterval;
     90     EGLint mMinSwapInterval;
     91 
     92     typedef std::set<Surface*> SurfaceSet;
     93     SurfaceSet mSurfaceSet;
     94 
     95     ConfigSet mConfigSet;
     96 
     97     typedef std::set<gl::Context*> ContextSet;
     98     ContextSet mContextSet;
     99 
    100     bool createDevice();
    101     bool resetDevice();
    102 };
    103 }
    104 
    105 #endif   // INCLUDE_DISPLAY_H_
    106