0025442: Visualization, TKOpenGl - prevent inclusion of system header glxext.h
[occt.git] / src / OpenGl / OpenGl_GraphicDriver.hxx
index 32ac3ac..3895f64 100644 (file)
@@ -84,7 +84,7 @@ public:
   Standard_Size Increment() { return ++myCounter; }
 
 private:
-  
+
   Standard_Size myCounter;
 };
 
@@ -93,8 +93,30 @@ class OpenGl_GraphicDriver : public Graphic3d_GraphicDriver
 {
 public:
 
-  //! Constructor
-  Standard_EXPORT OpenGl_GraphicDriver (const Handle(Aspect_DisplayConnection)& theDisp);
+  //! Constructor.
+  //! @param theDisp connection to display, required on Linux but optional on other systems
+  //! @param theToInitialize perform initialization of default OpenGL context on construction
+  Standard_EXPORT OpenGl_GraphicDriver (const Handle(Aspect_DisplayConnection)& theDisp,
+                                        const Standard_Boolean                  theToInitialize = Standard_True);
+
+  //! Destructor.
+  Standard_EXPORT virtual ~OpenGl_GraphicDriver();
+
+  //! Release default context.
+  Standard_EXPORT void ReleaseContext();
+
+  //! Perform initialization of default OpenGL context.
+  Standard_EXPORT Standard_Boolean InitContext();
+
+#if defined(HAVE_EGL) || defined(__ANDROID__)
+  //! Initialize default OpenGL context using existing one.
+  //! @param theEglDisplay EGL connection to the Display
+  //! @param theEglContext EGL rendering context
+  //! @param theEglConfig  EGL configuration
+  Standard_EXPORT Standard_Boolean InitEglContext (Aspect_Display          theEglDisplay,
+                                                   Aspect_RenderingContext theEglContext,
+                                                   void*                   theEglConfig);
+#endif
 
   Standard_EXPORT Standard_Integer InquireLightLimit ();
   Standard_EXPORT Standard_Integer InquireViewLimit ();
@@ -319,12 +341,25 @@ public:
   //! marks primitive set for rebuild.
   Standard_EXPORT void InvalidateBVHData (Graphic3d_CView& theCView, const Standard_Integer theLayerId);
 
+#if defined(HAVE_EGL) || defined(__ANDROID__)
+  Aspect_Display          getRawGlDisplay() const { return myEglDisplay; }
+  Aspect_RenderingContext getRawGlContext() const { return myEglContext;  }
+  void*                   getRawGlConfig()  const { return myEglConfig; }
+#endif
+
 public:
 
   DEFINE_STANDARD_RTTI(OpenGl_GraphicDriver)
 
 private:
 
+  Standard_Boolean        myIsOwnContext; //!< indicates that shared context has been created within OpenGl_GraphicDriver
+#if defined(HAVE_EGL) || defined(__ANDROID__)
+  Aspect_Display          myEglDisplay;   //!< EGL connection to the Display : EGLDisplay
+  Aspect_RenderingContext myEglContext;   //!< EGL rendering context         : EGLContext
+  void*                   myEglConfig;    //!< EGL configuration             : EGLConfig
+#endif
+
   Handle(OpenGl_Caps)                                             myCaps;
   NCollection_DataMap<Standard_Integer, Handle(OpenGl_View)>      myMapOfView;
   NCollection_DataMap<Standard_Integer, Handle(OpenGl_Workspace)> myMapOfWS;
@@ -335,11 +370,16 @@ private:
 
 public:
 
+  //! State counter for OpenGl structures.
   OpenGl_StateCounter* GetStateCounter() const { return &myStateCounter; }
 
+  //! Returns unique ID for primitive arrays.
+  const Standard_Size GetNextPrimitiveArrayUID() const { return myUIDGenerator.Increment(); }
+
 private:
 
-  mutable OpenGl_StateCounter myStateCounter;
+  mutable OpenGl_StateCounter myStateCounter; //!< State counter for OpenGl structures.
+  mutable OpenGl_StateCounter myUIDGenerator; //!< Unique ID counter for primitive arrays.
 
 };