| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROMECAST_PUBLIC_CAST_EGL_PLATFORM_H_ |
| #define CHROMECAST_PUBLIC_CAST_EGL_PLATFORM_H_ |
| |
| namespace chromecast { |
| |
| struct Size; |
| |
| // Interface representing all the hardware-specific elements of an Ozone |
| // implementation for Cast. Supply an implementation of this interface |
| // to OzonePlatformCast to create a complete Ozone implementation. |
| class CastEglPlatform { |
| public: |
| typedef void* (*GLGetProcAddressProc)(const char* name); |
| typedef void* NativeDisplayType; |
| typedef void* NativeWindowType; |
| |
| virtual ~CastEglPlatform() {} |
| |
| // Returns an array of EGL properties, which can be used in any EGL function |
| // used to select a display configuration. Note that all properties should be |
| // immediately followed by the corresponding desired value and array should be |
| // terminated with EGL_NONE. Ownership of the array is not transferred to |
| // caller. desired_list contains list of desired EGL properties and values. |
| virtual const int* GetEGLSurfaceProperties(const int* desired_list) = 0; |
| |
| // Initialize/ShutdownHardware are called at most once each over the object's |
| // lifetime. Initialize will be called before creating display type or |
| // window. If Initialize fails, return false (Shutdown will still be called). |
| virtual bool InitializeHardware() = 0; |
| virtual void ShutdownHardware() = 0; |
| |
| // These three are called once after hardware is successfully initialized. |
| // The implementation must load the libraries containing EGL and GLES2 |
| // bindings (return the pointer obtained from dlopen). It must also supply |
| // a function pointer to eglGetProcAddress or equivalent. |
| virtual void* GetEglLibrary() = 0; |
| virtual void* GetGles2Library() = 0; |
| virtual GLGetProcAddressProc GetGLProcAddressProc() = 0; |
| |
| // Creates/destroys an EGLNativeDisplayType. These may be called multiple |
| // times over the object's lifetime, for example to release the display when |
| // switching to an external application. There will be at most one display |
| // type at a time. |
| virtual NativeDisplayType CreateDisplayType(const Size& size) = 0; |
| virtual void DestroyDisplayType(NativeDisplayType display_type) = 0; |
| |
| // Creates/destroys an EGLNativeWindow. There will be at most one window at a |
| // time, created within a valid display type. |
| virtual NativeWindowType CreateWindow(NativeDisplayType display_type, |
| const Size& size) = 0; |
| virtual void DestroyWindow(NativeWindowType window) = 0; |
| |
| // Specifies if creating multiple surfaces on a window is broken on this |
| // platform and a new window is required. This should return false on most |
| // implementations. |
| virtual bool MultipleSurfaceUnsupported() = 0; |
| }; |
| |
| } // namespace chromecast |
| |
| #endif // CHROMECAST_PUBLIC_CAST_EGL_PLATFORM_H_ |