14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 2eff3a1272e72ef04e66d1aaf22d934a59627c781shannonwoods@chromium.org// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved. 34f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file. 54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 74f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Display.h: Defines the egl::Display class, representing the abstract 84f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// display on which graphics are drawn. Implements EGLDisplay. 94f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// [EGL 1.4] section 2.1.2 page 3. 104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 113cfd7225a0d278a629237fd5644df513de3a67deapatrick@chromium.org#ifndef LIBEGL_DISPLAY_H_ 123cfd7225a0d278a629237fd5644df513de3a67deapatrick@chromium.org#define LIBEGL_DISPLAY_H_ 134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 14e6842296d00cda4d731782f1e7f22006ea277c4fdaniel@transgaming.com#include <set> 15f289ee8d52d090a5f9ff94034b6e3f510187991aapatrick@chromium.org#include <vector> 16e6842296d00cda4d731782f1e7f22006ea277c4fdaniel@transgaming.com 17e6842296d00cda4d731782f1e7f22006ea277c4fdaniel@transgaming.com#include "libEGL/Config.h" 18486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com 19486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comnamespace gl 20486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com{ 21486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comclass Context; 22486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com} 234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comnamespace egl 254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 26486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comclass Surface; 27486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com 284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass Display 294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com public: 314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com ~Display(); 324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool initialize(); 344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com void terminate(); 354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 36591e6afe5a73c9ced13dfef2c2e18fd5531e1d8eGeoff Lang static egl::Display *getDisplay(EGLNativeDisplayType displayId, EGLint displayType); 3784d7cbc3b1cf664ef9340ad28755f2851f5040dcjbauman@chromium.org 382b5f3b3653d8cb82d6f1ab60ee79b6e5284fc53aGeoff Lang static const char *getExtensionString(egl::Display *display); 392b5f3b3653d8cb82d6f1ab60ee79b6e5284fc53aGeoff Lang 40591e6afe5a73c9ced13dfef2c2e18fd5531e1d8eGeoff Lang static bool supportsPlatformD3D(); 41591e6afe5a73c9ced13dfef2c2e18fd5531e1d8eGeoff Lang static bool supportsPlatformOpenGL(); 42591e6afe5a73c9ced13dfef2c2e18fd5531e1d8eGeoff Lang 434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool getConfigs(EGLConfig *configs, const EGLint *attribList, EGLint configSize, EGLint *numConfig); 444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool getConfigAttrib(EGLConfig config, EGLint attribute, EGLint *value); 454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 4606d7a7559b3c284bf568ac1aa0881209a61e7582jbauman@chromium.org EGLSurface createWindowSurface(HWND window, EGLConfig config, const EGLint *attribList); 474e29770792184805ad0b9e50ec6355e940fd22c4jbauman@chromium.org EGLSurface createOffscreenSurface(EGLConfig config, HANDLE shareHandle, const EGLint *attribList); 48daea4b4584cdbd8c82dd9946eb07a32ab2f278b7shannon.woods%transgaming.com@gtempaccount.com EGLContext createContext(EGLConfig configHandle, EGLint clientVersion, const gl::Context *shareContext, bool notifyResets, bool robustAccess); 494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com void destroySurface(egl::Surface *surface); 514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com void destroyContext(gl::Context *context); 524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 533b1703f42cc94a1b28a5a6b5f9653084c0bc455bdaniel@transgaming.com bool isInitialized() const; 544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool isValidConfig(EGLConfig config); 554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool isValidContext(gl::Context *context); 564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool isValidSurface(egl::Surface *surface); 574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com bool hasExistingWindowSurface(HWND window); 584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 5976d3e6e07b87d95baf43a0c40ec6f3df883fbf71daniel@transgaming.com rx::Renderer *getRenderer() { return mRenderer; }; 604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 618bce3f59f55ebbef64e2a7b0f024644afbebd5b0shannon.woods%transgaming.com@gtempaccount.com // exported methods must be virtual 6209fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com virtual void notifyDeviceLost(); 638bce3f59f55ebbef64e2a7b0f024644afbebd5b0shannon.woods%transgaming.com@gtempaccount.com virtual void recreateSwapChains(); 6409fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com 65721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com const char *getExtensionString() const; 666e4f2a6b70e12750a1e79c3dcee6c6dd5cfb67feshannonwoods@chromium.org const char *getVendorString() const; 67721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com 684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com private: 694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com DISALLOW_COPY_AND_ASSIGN(Display); 70d36c6a0a2674ded25b28b92f4b9fc22191d8ab61daniel@transgaming.com 71591e6afe5a73c9ced13dfef2c2e18fd5531e1d8eGeoff Lang Display(EGLNativeDisplayType displayId, EGLint displayType); 7284d7cbc3b1cf664ef9340ad28755f2851f5040dcjbauman@chromium.org 738c9c4521e253c36ace0bc95d52deda7c0d55887fvangelis@google.com bool restoreLostDevice(); 748c9c4521e253c36ace0bc95d52deda7c0d55887fvangelis@google.com 7584d7cbc3b1cf664ef9340ad28755f2851f5040dcjbauman@chromium.org EGLNativeDisplayType mDisplayId; 76591e6afe5a73c9ced13dfef2c2e18fd5531e1d8eGeoff Lang EGLint mRequestedDisplayType; 774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com typedef std::set<Surface*> SurfaceSet; 794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com SurfaceSet mSurfaceSet; 804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com ConfigSet mConfigSet; 824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com typedef std::set<gl::Context*> ContextSet; 844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com ContextSet mContextSet; 85da6e263cede2f850a62f6b4e250fc5b13518da24daniel@transgaming.com 8676d3e6e07b87d95baf43a0c40ec6f3df883fbf71daniel@transgaming.com rx::Renderer *mRenderer; 87721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com 882b5f3b3653d8cb82d6f1ab60ee79b6e5284fc53aGeoff Lang static std::string generateClientExtensionString(); 892b5f3b3653d8cb82d6f1ab60ee79b6e5284fc53aGeoff Lang 902b5f3b3653d8cb82d6f1ab60ee79b6e5284fc53aGeoff Lang void initDisplayExtensionString(); 912b5f3b3653d8cb82d6f1ab60ee79b6e5284fc53aGeoff Lang std::string mDisplayExtensionString; 922b5f3b3653d8cb82d6f1ab60ee79b6e5284fc53aGeoff Lang 936e4f2a6b70e12750a1e79c3dcee6c6dd5cfb67feshannonwoods@chromium.org void initVendorString(); 946e4f2a6b70e12750a1e79c3dcee6c6dd5cfb67feshannonwoods@chromium.org std::string mVendorString; 954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}; 964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 983cfd7225a0d278a629237fd5644df513de3a67deapatrick@chromium.org#endif // LIBEGL_DISPLAY_H_ 99