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