#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
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