| /* |
| * Copyright 2015 The Cobalt Authors. All Rights Reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef GLIMP_EGL_DISPLAY_IMPL_H_ |
| #define GLIMP_EGL_DISPLAY_IMPL_H_ |
| |
| #include <EGL/egl.h> |
| |
| #include <set> |
| |
| #include "glimp/egl/attrib_map.h" |
| #include "glimp/egl/config.h" |
| #include "glimp/egl/surface.h" |
| #include "glimp/gles/context_impl.h" |
| #include "nb/scoped_ptr.h" |
| |
| namespace glimp { |
| namespace egl { |
| |
| // All platform-specific aspects of a EGL Display are implemented within |
| // subclasses of DisplayImpl. Platforms must also implement |
| // DisplayImpl::Create(), declared below, in order to define how |
| // platform-specific DisplayImpls are to be created. |
| class DisplayImpl { |
| public: |
| // Return value type for the method GetVersionInfo(). |
| struct VersionInfo { |
| int major; |
| int minor; |
| }; |
| |
| typedef std::set<Config*> ConfigSet; |
| |
| virtual ~DisplayImpl() {} |
| |
| // Returns true if the given |native_display| is a valid display ID that can |
| // be subsequently passed into Create(). |
| // To be implemented by each implementing platform. |
| static bool IsValidNativeDisplayType(EGLNativeDisplayType display_id); |
| // Creates and returns a new DisplayImpl object. |
| // To be implemented by each implementing platform. |
| static nb::scoped_ptr<DisplayImpl> Create(EGLNativeDisplayType display_id); |
| // Submit done call. |
| static void CallSubmitDone(); |
| |
| // Returns the EGL major and minor versions, if they are not NULL. |
| // Called by eglInitialize(): |
| // https://www.khronos.org/registry/egl/sdk/docs/man/html/eglInitialize.xhtml |
| virtual VersionInfo GetVersionInfo() = 0; |
| |
| // Returns *all* configs for this display that may be chosen via a call to |
| // eglChooseConfig(). |
| // https://www.khronos.org/registry/egl/sdk/docs/man/html/eglChooseConfig.xhtml |
| virtual const ConfigSet& GetSupportedConfigs() const = 0; |
| |
| // Creates and returns a SurfaceImpl object that represents the surface of a |
| // window and is compatible with this DisplayImpl object. This will be called |
| // when eglCreateWindowSurface() is called. |
| // https://www.khronos.org/registry/egl/sdk/docs/man/html/eglCreateWindowSurface.xhtml |
| virtual nb::scoped_ptr<SurfaceImpl> CreateWindowSurface( |
| const Config* config, |
| EGLNativeWindowType win, |
| const AttribMap& attributes) = 0; |
| |
| // Creates and returns a SurfaceImpl object that represents the surface of a |
| // Pbuffer and is compatible with this DisplayImpl object. This will be |
| // called when eglCreatePbufferSurface() is called. |
| // https://www.khronos.org/registry/egl/sdk/docs/man/html/eglCreatePbufferSurface.xhtml |
| virtual nb::scoped_ptr<SurfaceImpl> CreatePbufferSurface( |
| const Config* config, |
| const AttribMap& attributes) = 0; |
| |
| // Creates and returns a gles::ContextImpl object that contains the platform |
| // specific implementation of a GL ES Context, of the specified version that |
| // is compatible with the specified config. |
| virtual nb::scoped_ptr<gles::ContextImpl> CreateContext(const Config* config, |
| int gles_version) = 0; |
| |
| // Sets the swap behavior for this display. This will be called when |
| // eglSwapInterval() is called. Returns true on success and false on failure. |
| // https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglSwapInterval.xhtml |
| virtual bool SetSwapInterval(int interval) = 0; |
| |
| private: |
| }; |
| |
| } // namespace egl |
| } // namespace glimp |
| |
| #endif // GLIMP_EGL_DISPLAY_IMPL_H_ |