SHARE
TWEET

EglContext.hpp

a guest Jan 10th, 2019 316 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ////////////////////////////////////////////////////////////
  2. //
  3. // SFML - Simple and Fast Multimedia Library
  4. // Copyright (C) 2013 Jonathan De Wachter (dewachter.jonathan@gmail.com)
  5. //
  6. // This software is provided 'as-is', without any express or implied warranty.
  7. // In no event will the authors be held liable for any damages arising from the use of this software.
  8. //
  9. // Permission is granted to anyone to use this software for any purpose,
  10. // including commercial applications, and to alter it and redistribute it freely,
  11. // subject to the following restrictions:
  12. //
  13. // 1. The origin of this software must not be misrepresented;
  14. //    you must not claim that you wrote the original software.
  15. //    If you use this software in a product, an acknowledgment
  16. //    in the product documentation would be appreciated but is not required.
  17. //
  18. // 2. Altered source versions must be plainly marked as such,
  19. //    and must not be misrepresented as being the original software.
  20. //
  21. // 3. This notice may not be removed or altered from any source distribution.
  22. //
  23. ////////////////////////////////////////////////////////////
  24.  
  25. #ifndef SFML_EGLCONTEXT_HPP
  26. #define SFML_EGLCONTEXT_HPP
  27.  
  28. ////////////////////////////////////////////////////////////
  29. // Headers
  30. ////////////////////////////////////////////////////////////
  31. #include <SFML/Window/VideoMode.hpp>
  32. #include <SFML/Window/ContextSettings.hpp>
  33. #include <SFML/Window/EGLCheck.hpp>
  34. #include <SFML/Window/GlContext.hpp>
  35. #include <SFML/OpenGL.hpp>
  36.  
  37.  
  38. namespace sf
  39. {
  40. namespace priv
  41. {
  42. class EglContext : public GlContext
  43. {
  44. public:
  45.  
  46.     ////////////////////////////////////////////////////////////
  47.     /// \brief Create a new context, not associated to a window
  48.     ///
  49.     /// \param shared Context to share the new one with (can be NULL)
  50.     ///
  51.     ////////////////////////////////////////////////////////////
  52.     EglContext(EglContext* shared);
  53.  
  54.     ////////////////////////////////////////////////////////////
  55.     /// \brief Create a new context attached to a window
  56.     ///
  57.     /// \param shared       Context to share the new one with
  58.     /// \param settings     Creation parameters
  59.     /// \param owner        Pointer to the owner window
  60.     /// \param bitsPerPixel Pixel depth, in bits per pixel
  61.     ///
  62.     ////////////////////////////////////////////////////////////
  63.     EglContext(EglContext* shared, const ContextSettings& settings, const WindowImpl* owner, unsigned int bitsPerPixel);
  64.  
  65.     ////////////////////////////////////////////////////////////
  66.     /// \brief Create a new context that embeds its own rendering target
  67.     ///
  68.     /// \param shared   Context to share the new one with
  69.     /// \param settings Creation parameters
  70.     /// \param width    Back buffer width, in pixels
  71.     /// \param height   Back buffer height, in pixels
  72.     ///
  73.     ////////////////////////////////////////////////////////////
  74.     EglContext(EglContext* shared, const ContextSettings& settings, unsigned int width, unsigned int height);
  75.  
  76.     ////////////////////////////////////////////////////////////
  77.     /// \brief Destructor
  78.     ///
  79.     ////////////////////////////////////////////////////////////
  80.     ~EglContext();
  81.  
  82.     ////////////////////////////////////////////////////////////
  83.     /// \brief Activate the context as the current target
  84.     ///        for rendering
  85.     ///
  86.     /// \param current Whether to make the context current or no longer current
  87.     ///
  88.     /// \return True on success, false if any error happened
  89.     ///
  90.     ////////////////////////////////////////////////////////////
  91.     virtual bool makeCurrent(bool current);
  92.  
  93.     ////////////////////////////////////////////////////////////
  94.     /// \brief Display what has been rendered to the context so far
  95.     ///
  96.     ////////////////////////////////////////////////////////////
  97.     virtual void display();
  98.  
  99.     ////////////////////////////////////////////////////////////
  100.     /// \brief Enable or disable vertical synchronization
  101.     ///
  102.     /// Activating vertical synchronization will limit the number
  103.     /// of frames displayed to the refresh rate of the monitor.
  104.     /// This can avoid some visual artifacts, and limit the framerate
  105.     /// to a good value (but not constant across different computers).
  106.     ///
  107.     /// \param enabled: True to enable v-sync, false to deactivate
  108.     ///
  109.     ////////////////////////////////////////////////////////////
  110.     virtual void setVerticalSyncEnabled(bool enabled);
  111.  
  112.     ////////////////////////////////////////////////////////////
  113.     /// \brief Create the context
  114.     ///
  115.     /// \param shared       Context to share the new one with (can be NULL)
  116.     /// \param bitsPerPixel Pixel depth, in bits per pixel
  117.     /// \param settings     Creation parameters
  118.     ///
  119.     ////////////////////////////////////////////////////////////
  120.     void createContext(EglContext* shared);
  121.  
  122.     ////////////////////////////////////////////////////////////
  123.     /// \brief Create the EGL surface
  124.     ///
  125.     /// This function must be called when the activity (re)start, or
  126.     /// when the orientation change.
  127.     ///
  128.     /// \param window: The native window type
  129.     ///
  130.     ////////////////////////////////////////////////////////////
  131.     void createSurface(EGLNativeWindowType window);
  132.  
  133.     ////////////////////////////////////////////////////////////
  134.     /// \brief Destroy the EGL surface
  135.     ///
  136.     /// This function must be called when the activity is stopped, or
  137.     /// when the orientation change.
  138.     ///
  139.     ////////////////////////////////////////////////////////////
  140.     void destroySurface();
  141.  
  142.     ////////////////////////////////////////////////////////////
  143.     /// \brief Get the best EGL visual for a given set of video settings
  144.     ///
  145.     /// \param display      EGL display
  146.     /// \param bitsPerPixel Pixel depth, in bits per pixel
  147.     /// \param settings     Requested context settings
  148.     ///
  149.     /// \return The best EGL config
  150.     ///
  151.     ////////////////////////////////////////////////////////////
  152.     static EGLConfig getBestConfig(EGLDisplay display, unsigned int bitsPerPixel, const ContextSettings& settings);
  153.  
  154. #ifdef SFML_SYSTEM_LINUX
  155.     ////////////////////////////////////////////////////////////
  156.     /// \brief Select the best EGL visual for a given set of settings
  157.     ///
  158.     /// \param display      X display
  159.     /// \param bitsPerPixel Pixel depth, in bits per pixel
  160.     /// \param settings     Requested context settings
  161.     ///
  162.     /// \return The best visual
  163.     ///
  164.     ////////////////////////////////////////////////////////////
  165. //    static XVisualInfo selectBestVisual(::Display* display, unsigned int bitsPerPixel, const ContextSettings& settings);
  166. #endif
  167.  
  168. private:
  169.  
  170.     ////////////////////////////////////////////////////////////
  171.     /// \brief Helper to copy the picked EGL configuration
  172.     ////////////////////////////////////////////////////////////
  173.     void updateSettings();
  174.  
  175.     ////////////////////////////////////////////////////////////
  176.     // Member data
  177.     ////////////////////////////////////////////////////////////
  178.     EGLDisplay  m_display; ///< The internal EGL display
  179.     EGLContext  m_context; ///< The internal EGL context
  180.     EGLSurface  m_surface; ///< The internal EGL surface
  181.     EGLConfig   m_config;  ///< The internal EGL config
  182.  
  183. };
  184.  
  185. } // namespace priv
  186.  
  187. } // namespace sf
  188.  
  189.  
  190. #endif // SFML_EGLCONTEXT_HPP
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top