0031505: Point Cloud Rendering - fix on-screen statistics about number of visible...
[occt.git] / src / OpenGl / OpenGl_Text.hxx
index aa15e1e..5d8ac6f 100755 (executable)
 
 #include <OpenGl_Element.hxx>
 
-#include <OpenGl_AspectText.hxx>
-#include <OpenGl_TextParam.hxx>
+#include <OpenGl_Aspects.hxx>
 #include <OpenGl_TextBuilder.hxx>
 
 #include <TCollection_ExtendedString.hxx>
 #include <Graphic3d_Vertex.hxx>
 #include <Graphic3d_HorizontalTextAlignment.hxx>
+#include <Graphic3d_RenderingParams.hxx>
+#include <Graphic3d_Text.hxx>
 #include <Graphic3d_VerticalTextAlignment.hxx>
 
 #include <gp_Ax2.hxx>
 
-class OpenGl_PrinterContext;
-
 //! Text rendering
 class OpenGl_Text : public OpenGl_Element
 {
 
 public:
 
-  //! Main constructor
-  Standard_EXPORT OpenGl_Text (const Standard_Utf8Char* theText,
-                               const OpenGl_Vec3&       thePoint,
-                               const OpenGl_TextParam&  theParams);
-
   //! Creates new text in 3D space.
-  Standard_EXPORT OpenGl_Text (const Standard_Utf8Char* theText,
-                               const gp_Ax2&            theOrientation,
-                               const OpenGl_TextParam&  theParams);
+  Standard_EXPORT OpenGl_Text (const Handle(Graphic3d_Text)& theTextParams);
 
-  //! Setup new string and position
-  Standard_EXPORT void Init (const Handle(OpenGl_Context)& theCtx,
-                             const Standard_Utf8Char*      theText,
-                             const OpenGl_Vec3&            thePoint);
+  //! Destructor
+  Standard_EXPORT virtual ~OpenGl_Text();
 
-  //! Setup new string and parameters
-  Standard_EXPORT void Init (const Handle(OpenGl_Context)& theCtx,
-                             const Standard_Utf8Char*      theText,
-                             const OpenGl_Vec3&            thePoint,
-                             const OpenGl_TextParam&       theParams);
+  //! Release cached VBO resources and the previous font if height changed.
+  //! Cached structures will be refilled by the next render.
+  //! Call Reset after modifying text parameters.
+  Standard_EXPORT void Reset (const Handle(OpenGl_Context)& theCtx);
 
-  //! Setup new position
-  Standard_EXPORT void SetPosition (const OpenGl_Vec3& thePoint);
+  //! Returns text parameters
+  //! @sa Reset()
+  const Handle(Graphic3d_Text)& Text() const { return myText; }
+
+  //! Sets text parameters
+  //! @sa Reset()
+  void SetText (const Handle(Graphic3d_Text)& theText) { myText = theText; }
+
+  //! Return true if text is 2D
+  Standard_Boolean Is2D() const { return myIs2d; }
+
+  //! Set true if text is 2D
+  void Set2D (const Standard_Boolean theEnable) { myIs2d = theEnable; }
 
   //! Setup new font size
   Standard_EXPORT void SetFontSize (const Handle(OpenGl_Context)& theContext,
                                     const Standard_Integer        theFontSize);
 
-  Standard_EXPORT virtual void Render  (const Handle(OpenGl_Workspace)& theWorkspace) const;
-  Standard_EXPORT virtual void Release (OpenGl_Context* theContext);
+  Standard_EXPORT virtual void Render  (const Handle(OpenGl_Workspace)& theWorkspace) const Standard_OVERRIDE;
+  Standard_EXPORT virtual void Release (OpenGl_Context* theContext) Standard_OVERRIDE;
+
+  //! Returns estimated GPU memory usage for holding data without considering overheads and allocation alignment rules.
+  Standard_EXPORT virtual Standard_Size EstimatedDataSize() const Standard_OVERRIDE;
+
+  //! Increment draw calls statistics.
+  Standard_EXPORT virtual void UpdateDrawStats (Graphic3d_FrameStatsDataTmp& theStats,
+                                                bool theIsDetailed) const Standard_OVERRIDE;
 
 public: //! @name methods for compatibility with layers
 
@@ -74,95 +81,100 @@ public: //! @name methods for compatibility with layers
   Standard_EXPORT OpenGl_Text();
 
   //! Create key for shared resource
-  Standard_EXPORT static TCollection_AsciiString FontKey (const OpenGl_AspectText& theAspect,
-                                                          const Standard_Integer   theHeight);
+  Standard_EXPORT static TCollection_AsciiString FontKey (const OpenGl_Aspects& theAspect,
+                                                          Standard_Integer theHeight,
+                                                          unsigned int theResolution);
 
   //! Find shared resource for specified font or initialize new one
   Standard_EXPORT static Handle(OpenGl_Font) FindFont (const Handle(OpenGl_Context)& theCtx,
-                                                       const OpenGl_AspectText&      theAspect,
-                                                       const Standard_Integer        theHeight,
-                                                       const TCollection_AsciiString theKey);
+                                                       const OpenGl_Aspects& theAspect,
+                                                       Standard_Integer theHeight,
+                                                       unsigned int theResolution,
+                                                       const TCollection_AsciiString& theKey);
 
   //! Compute text width
   Standard_EXPORT static void StringSize (const Handle(OpenGl_Context)& theCtx,
                                           const NCollection_String&     theText,
-                                          const OpenGl_AspectText&      theTextAspect,
-                                          const OpenGl_TextParam&       theParams,
+                                          const OpenGl_Aspects&         theTextAspect,
+                                          const Standard_ShortReal      theHeight,
+                                          const unsigned int            theResolution,
                                           Standard_ShortReal&           theWidth,
                                           Standard_ShortReal&           theAscent,
                                           Standard_ShortReal&           theDescent);
 
-  //! Setup new string and parameters
-  Standard_EXPORT void Init (const Handle(OpenGl_Context)&     theCtx,
-                             const TCollection_ExtendedString& theText,
-                             const OpenGl_Vec2&                thePoint,
-                             const OpenGl_TextParam&           theParams);
-
   //! Perform rendering
-  Standard_EXPORT void Render (const Handle(OpenGl_PrinterContext)& thePrintCtx,
-                               const Handle(OpenGl_Context)&        theCtx,
-                               const OpenGl_AspectText&             theTextAspect) const;
+  Standard_EXPORT void Render (const Handle(OpenGl_Context)& theCtx,
+                               const OpenGl_Aspects& theTextAspect,
+                               unsigned int theResolution = Graphic3d_RenderingParams::THE_DEFAULT_RESOLUTION) const;
 
-protected:
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
 
-  //! Destructor
-  Standard_EXPORT virtual ~OpenGl_Text();
+//! @name obsolete methods
+public:
+
+  //! Setup new string and position
+  Standard_DEPRECATED("Deprecated method Init() with obsolete arguments, use Init() and Text() instead of it")
+  Standard_EXPORT void Init (const Handle(OpenGl_Context)& theCtx,
+                             const Standard_Utf8Char*      theText,
+                             const OpenGl_Vec3&            thePoint);
+
+  //! Setup new position
+  Standard_DEPRECATED("Deprecated method SetPosition(), use Graphic3d_Text for it")
+  Standard_EXPORT void SetPosition (const OpenGl_Vec3& thePoint);
+
+protected:
 
   friend class OpenGl_Trihedron;
   friend class OpenGl_GraduatedTrihedron;
 
-private:
-
   //! Release cached VBO resources
-  void releaseVbos (OpenGl_Context* theCtx);
+  Standard_EXPORT void releaseVbos (OpenGl_Context* theCtx);
+
+private:
 
   //! Setup matrix.
-  void setupMatrix (const Handle(OpenGl_PrinterContext)& thePrintCtx,
-                    const Handle(OpenGl_Context)&        theCtx,
-                    const OpenGl_AspectText&             theTextAspect,
-                    const OpenGl_Vec3                    theDVec) const;
+  void setupMatrix (const Handle(OpenGl_Context)& theCtx,
+                    const OpenGl_Aspects& theTextAspect,
+                    const OpenGl_Vec3& theDVec) const;
 
   //! Draw arrays of vertices.
-  void drawText (const Handle(OpenGl_PrinterContext)& thePrintCtx,
-                 const Handle(OpenGl_Context)&        theCtx,
-                 const OpenGl_AspectText&             theTextAspect) const;
+  void drawText (const Handle(OpenGl_Context)& theCtx,
+                 const OpenGl_Aspects& theTextAspect) const;
+
+  //! Draw rectangle from bounding text box.
+  void drawRect (const Handle(OpenGl_Context)& theCtx,
+                 const OpenGl_Aspects& theTextAspect,
+                 const OpenGl_Vec4& theColorSubs) const;
 
   //! Main rendering code
-  void render (const Handle(OpenGl_PrinterContext)& thePrintCtx,
-               const Handle(OpenGl_Context)&        theCtx,
-               const OpenGl_AspectText&             theTextAspect,
-               const TEL_COLOUR&                    theColorText,
-               const TEL_COLOUR&                    theColorSubs) const;
+  void render (const Handle(OpenGl_Context)& theCtx,
+               const OpenGl_Aspects& theTextAspect,
+               const OpenGl_Vec4& theColorText,
+               const OpenGl_Vec4& theColorSubs,
+               unsigned int theResolution) const;
 
 protected:
 
+  Handle(Graphic3d_Text)                                  myText;     //!< text parameters
   mutable Handle(OpenGl_Font)                             myFont;
   mutable NCollection_Vector<GLuint>                      myTextures;   //!< textures' IDs
   mutable NCollection_Vector<Handle(OpenGl_VertexBuffer)> myVertsVbo;   //!< VBOs of vertices
   mutable NCollection_Vector<Handle(OpenGl_VertexBuffer)> myTCrdsVbo;   //!< VBOs of texture coordinates
-  mutable Font_FTFont::Rect                               myBndBox;
+  mutable Handle(OpenGl_VertexBuffer)                     myBndVertsVbo;//!< VBOs of vertices for bounding box
+  mutable Font_Rect                                       myBndBox;
 
 protected:
 
   mutable OpenGl_Mat4d myProjMatrix;
   mutable OpenGl_Mat4d myModelMatrix;
   mutable OpenGl_Mat4d myOrientationMatrix;
-  mutable GLint    myViewport[4];
-  mutable GLdouble myWinX;
-  mutable GLdouble myWinY;
-  mutable GLdouble myWinZ;
+  mutable OpenGl_Vec3d myWinXYZ;
   mutable GLdouble myScaleHeight;
-  mutable GLdouble myExportHeight;
 
 protected:
 
-  OpenGl_TextParam   myParams;
-  NCollection_String myString;
-  OpenGl_Vec3        myPoint;
-  bool               myIs2d;
-  gp_Ax2             myOrientation; //!< Text orientation in 3D space.
-  bool               myHasPlane;    //!< Check if text have orientation in 3D space.
-
+  Standard_Boolean myIs2d;
 public:
 
   DEFINE_STANDARD_ALLOC