0025442: Visualization, TKOpenGl - prevent inclusion of system header glxext.h
[occt.git] / src / OpenGl / OpenGl_Structure.hxx
index 6b142a9..24ce516 100644 (file)
@@ -27,6 +27,8 @@
 #include <OpenGl_Group.hxx>
 #include <OpenGl_Matrix.hxx>
 #include <OpenGl_NamedStatus.hxx>
+#include <OpenGl_Vec.hxx>
+#include <OpenGl_Workspace.hxx>
 
 #include <NCollection_List.hxx>
 #include <InterfaceGraphic_Graphic3d.hxx>
@@ -137,8 +139,42 @@ public:
   //! Get z layer ID
   Standard_EXPORT Standard_Integer GetZLayer() const;
 
+  //! Renders groups of structure without applying any attributes (i.e. transform, material etc).
+  virtual void RenderGeometry  (const Handle(OpenGl_Workspace)& theWorkspace) const;
+
+  //! Renders the structure.
   virtual void Render  (const Handle(OpenGl_Workspace)& theWorkspace) const;
-  virtual void Release (const Handle(OpenGl_Context)&   theGlCtx);
+
+  //! Releases structure resources.
+  virtual void Release (const Handle(OpenGl_Context)& theGlCtx);
+
+  //! Marks structure as not overlapping view volume (as it is by default).
+  void ResetCullingStatus() const
+  {
+    if (!IsAlwaysRendered())
+    {
+      myIsCulled = Standard_True;
+    }
+  }
+
+  //! Marks structure as overlapping the current view volume one.
+  //! The method is called during traverse of BVH tree.
+  void MarkAsNotCulled() const { myIsCulled = Standard_False; }
+
+  //! Returns Standard_False if the structure hits the current view volume, otherwise
+  //! returns Standard_True. The default value for all structures before each traverse
+  //! of BVH tree is Standard_True.
+  Standard_Boolean IsCulled() const { return myIsCulled; }
+
+  //! Checks if the structure should be included into BVH tree or not.
+  const Standard_Boolean IsAlwaysRendered() const
+  {
+    return IsInfinite
+        || IsForHighlight
+        || IsMutable
+        || Is2dText
+        || TransformPersistence.Flag != 0;
+  }
 
   //! This method releases GL resources without actual elements destruction.
   //! As result structure could be correctly destroyed layer without GL context
@@ -160,8 +196,6 @@ public:
   //! Returns OpenGL persistent translation.
   const TEL_TRANSFORM_PERSISTENCE* PersistentTranslation() const { return myTransPers; }
 
-#ifdef HAVE_OPENCL
-
   //! Returns structure modification state (for ray-tracing).
   Standard_Size ModificationState() const { return myModificationState; }
 
@@ -171,14 +205,10 @@ public:
   //! Is the structure ray-tracable (contains ray-tracable elements)?
   Standard_Boolean IsRaytracable() const { return myIsRaytracable; }
 
-#endif
-
 protected:
 
   Standard_EXPORT virtual ~OpenGl_Structure();
 
-#ifdef HAVE_OPENCL
-
   //! Registers ancestor connected structure (for updating ray-tracing state).
   void RegisterAncestorStructure (const OpenGl_Structure* theStructure) const;
 
@@ -197,8 +227,6 @@ protected:
   //! Sets ray-tracable status for structure and its parents.
   void SetRaytracableWithAncestorStructures() const;
 
-#endif
-
 protected:
 
   OpenGl_Matrix*             myTransformation;
@@ -216,11 +244,13 @@ protected:
 
   OpenGl_ListOfStructure           myConnected;
 
-#ifdef HAVE_OPENCL
   mutable OpenGl_ListOfStructure   myAncestorStructures;
   mutable Standard_Boolean         myIsRaytracable;
   mutable Standard_Size            myModificationState;
-#endif
+
+  mutable Standard_Boolean         myIsCulled; //!< A status specifying is structure needs to be rendered after BVH tree traverse.
+
+  Standard_Boolean                 myIsMirrored; //!< Used to tell OpenGl to interpret polygons in clockwise order.
 
 public: