0025442: Visualization, TKOpenGl - prevent inclusion of system header glxext.h
[occt.git] / src / OpenGl / OpenGl_GraphicDriver.hxx
index a82d358..3895f64 100644 (file)
@@ -84,7 +84,7 @@ public:
   Standard_Size Increment() { return ++myCounter; }
 
 private:
-  
+
   Standard_Size myCounter;
 };
 
@@ -93,13 +93,30 @@ class OpenGl_GraphicDriver : public Graphic3d_GraphicDriver
 {
 public:
 
-  //! Constructor
-  Standard_EXPORT OpenGl_GraphicDriver (const Handle(Aspect_DisplayConnection)& theDisplayConnection);
+  //! 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();
 
-  //! Constructor
-  Standard_EXPORT OpenGl_GraphicDriver (const Standard_CString theShrName = "TKOpenGl");
-  Standard_EXPORT Standard_Boolean Begin (const Handle(Aspect_DisplayConnection)& theDisplayConnection);
-  Standard_EXPORT void End ();
+  //! 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 ();
@@ -279,6 +296,11 @@ public:
                                           const Standard_Integer theLayerId,
                                           const Graphic3d_ZLayerSettings& theSettings);
 
+  //! Changes priority of a structure within its Z layer for the specified view.
+  Standard_EXPORT void ChangePriority (const Graphic3d_CStructure& theCStructure,
+                                       const Graphic3d_CView& theCView,
+                                       const Standard_Integer theNewPriority);
+
 public:
 
   //! @return the visualization options
@@ -315,12 +337,29 @@ public:
   //! Could return NULL-handle if no window created by this driver.
   Standard_EXPORT const Handle(OpenGl_Context)& GetSharedContext() const;
 
+  //! Marks BVH tree for given priority list as dirty and
+  //! 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;
@@ -331,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.
 
 };