0023428: Extend OpenGl_Context to use Geometry Shaders extension
[occt.git] / src / OpenGl / OpenGl_Structure.hxx
index 1c76d4b..11d6985 100644 (file)
@@ -1,7 +1,22 @@
-// File:      OpenGl_Structure.hxx
-// Created:   1 August 2011
-// Author:    Sergey ZERCHANINOV
-// Copyright: OPEN CASCADE 2011
+// Created on: 2011-08-01
+// Created by: Sergey ZERCHANINOV
+// Copyright (c) 2011-2012 OPEN CASCADE SAS
+//
+// The content of this file is subject to the Open CASCADE Technology Public
+// License Version 6.5 (the "License"). You may not use the content of this file
+// except in compliance with the License. Please obtain a copy of the License
+// at http://www.opencascade.org and read it completely before using this file.
+//
+// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
+// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+//
+// The Original Code and all software distributed under the License is
+// distributed on an "AS IS" basis, without warranty of any kind, and the
+// Initial Developer hereby disclaims all such warranties, including without
+// limitation, any warranties of merchantability, fitness for a particular
+// purpose or non-infringement. Please see the License for the specific terms
+// and conditions governing the rights and limitations under the License.
+
 
 #ifndef OpenGl_Structure_Header
 #define OpenGl_Structure_Header
@@ -22,9 +37,10 @@ typedef NCollection_List<const OpenGl_Group *> OpenGl_ListOfGroup;
 
 class OpenGl_Structure : public OpenGl_Element
 {
- public:
-  OpenGl_Structure ();
-  virtual ~OpenGl_Structure ();
+
+public:
+
+  OpenGl_Structure();
 
   void SetTransformation (const float *AMatrix);
 
@@ -37,46 +53,66 @@ class OpenGl_Structure : public OpenGl_Element
   void SetAspectMarker (const CALL_DEF_CONTEXTMARKER &AContext);
   void SetAspectText (const CALL_DEF_CONTEXTTEXT &AContext);
 
-  void SetHighlightBox (const CALL_DEF_BOUNDBOX &ABoundBox);
-  void ClearHighlightBox ();
+  void SetHighlightBox (const Handle(OpenGl_Context)& theGlCtx,
+                        const CALL_DEF_BOUNDBOX&      theBoundBox);
+
+  void ClearHighlightBox (const Handle(OpenGl_Context)& theGlCtx);
+
+  void SetHighlightColor (const Handle(OpenGl_Context)& theGlCtx,
+                          const Standard_ShortReal R,
+                          const Standard_ShortReal G,
+                          const Standard_ShortReal B);
 
-  void SetHighlightColor (const Standard_ShortReal R, const Standard_ShortReal G, const Standard_ShortReal B);
-  void ClearHighlightColor ();
+  void ClearHighlightColor (const Handle(OpenGl_Context)& theGlCtx);
 
   void SetNamedStatus (const Standard_Integer aStatus) { myNamedStatus = aStatus; }
 
   void Connect (const OpenGl_Structure *astructure);
   void Disconnect (const OpenGl_Structure *astructure);
 
-  OpenGl_Group * AddGroup ();
-  void RemoveGroup (const OpenGl_Group *);
-  void Clear ();
+  OpenGl_Group* AddGroup();
+  void RemoveGroup (const Handle(OpenGl_Context)& theGlCtx,
+                    const OpenGl_Group*           theGroup);
+  void Clear (const Handle(OpenGl_Context)& theGlCtx);
 
-  virtual void Render (const Handle(OpenGl_Workspace) &AWorkspace) const;
+  //! Set z layer ID to display the structure in specified layer
+  void SetZLayer (const Standard_Integer theLayerIndex);
 
- protected:
+  //! Get z layer ID
+  Standard_Integer GetZLayer () const;
+
+  virtual void Render  (const Handle(OpenGl_Workspace)& theWorkspace) const;
+  virtual void Release (const Handle(OpenGl_Context)&   theGlCtx);
+
+protected:
+
+  virtual ~OpenGl_Structure();
+
+protected:
 
   //Structure_LABBegin
-  OpenGl_Matrix *myTransformation;
-  TEL_TRANSFORM_PERSISTENCE *myTransPers;
-  DEGENERATION *myDegenerateModel;
-  OpenGl_AspectLine *myAspectLine;
-  OpenGl_AspectFace *myAspectFace;
-  OpenGl_AspectMarker *myAspectMarker;
-  OpenGl_AspectText *myAspectText;
+  OpenGl_Matrix*             myTransformation;
+  TEL_TRANSFORM_PERSISTENCE* myTransPers;
+  DEGENERATION*              myDegenerateModel;
+  OpenGl_AspectLine*         myAspectLine;
+  OpenGl_AspectFace*         myAspectFace;
+  OpenGl_AspectMarker*       myAspectMarker;
+  OpenGl_AspectText*         myAspectText;
   //Structure_LABHighlight
-  OpenGl_Group *myHighlightBox;
-  TEL_COLOUR *myHighlightColor;
+  OpenGl_Group*              myHighlightBox;
+  TEL_COLOUR*                myHighlightColor;
   //Structure_LABVisibility
   //Structure_LABPick
-  int myNamedStatus; //Structure_LABNameSet
+  int                        myNamedStatus; //Structure_LABNameSet
+  int                        myZLayer;
+
+  OpenGl_ListOfStructure     myConnected;
+  OpenGl_ListOfGroup         myGroups;
 
-  OpenGl_ListOfStructure myConnected;
+public:
 
-  OpenGl_ListOfGroup myGroups;
+  DEFINE_STANDARD_ALLOC
 
- public:
-  IMPLEMENT_MEMORY_OPERATORS
 };
 
 #endif //OpenGl_Structure_Header