#include <OpenGl_IndexBuffer.hxx>
-#include <InterfaceGraphic_Graphic3d.hxx>
#include <Aspect_InteriorStyle.hxx>
#include <Aspect_TypeOfMarker.hxx>
#include <Graphic3d_TypeOfPrimitiveArray.hxx>
#include <OpenGl_Element.hxx>
class OpenGl_GraphicDriver;
-class Handle(OpenGl_ShaderProgram);
//! Class for rendering of arbitrary primitive array.
class OpenGl_PrimitiveArray : public OpenGl_Element
{
public:
- // OpenGL does not provide a constant for "none" draw mode.
- // So we define our own one that does not conflict with GL constants
- // and utilizes common GL invalid value
+ //! OpenGL does not provide a constant for "none" draw mode.
+ //! So we define our own one that does not conflict with GL constants and utilizes common GL invalid value.
enum
{
DRAW_MODE_NONE = -1
Standard_EXPORT virtual ~OpenGl_PrimitiveArray();
//! Render primitives to the window
- Standard_EXPORT virtual void Render (const Handle(OpenGl_Workspace)& theWorkspace) const;
+ Standard_EXPORT virtual void Render (const Handle(OpenGl_Workspace)& theWorkspace) const Standard_OVERRIDE;
//! Release OpenGL resources (VBOs)
- Standard_EXPORT virtual void Release (OpenGl_Context* theContext);
+ 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;
//! Return true if VBOs initialization has been performed.
//! VBO initialization is performed during first Render() call.
//! @return primitive type (GL_LINES, GL_TRIANGLES and others)
GLint DrawMode() const { return myDrawMode; }
+ //! Return TRUE if primitive type generates shaded triangulation.
+ virtual Standard_Boolean IsFillDrawMode() const Standard_OVERRIDE { return myIsFillType; }
+
//! @return indices array
const Handle(Graphic3d_IndexBuffer)& Indices() const { return myIndices; }
const Handle(Graphic3d_BoundBuffer)& Bounds() const { return myBounds; }
//! Returns unique ID of primitive array.
- const Standard_Size GetUID() const { return myUID; }
+ Standard_Size GetUID() const { return myUID; }
//! Initialize indices, attributes and bounds with new data.
Standard_EXPORT void InitBuffers (const Handle(OpenGl_Context)& theContext,
const Handle(Graphic3d_Buffer)& theAttribs,
const Handle(Graphic3d_BoundBuffer)& theBounds);
+public:
+
+ //! Returns index VBO.
+ const Handle(OpenGl_VertexBuffer)& IndexVbo() const { return myVboIndices; }
+
+ //! Returns attributes VBO.
+ const Handle(OpenGl_VertexBuffer)& AttributesVbo() const { return myVboAttribs; }
+
+ //! Dumps the content of me into the stream
+ Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth = -1) const Standard_OVERRIDE;
+
protected:
//! VBO initialization procedures
Standard_EXPORT Standard_Boolean buildVBO (const Handle(OpenGl_Context)& theCtx,
const Standard_Boolean theToKeepData) const;
+ //! Patch VBO sub-date within invalidated range.
+ Standard_EXPORT void updateVBO (const Handle(OpenGl_Context)& theCtx) const;
+
+ //! Release GL memory.
Standard_EXPORT void clearMemoryGL (const Handle(OpenGl_Context)& theGlCtx) const;
private:
const Standard_Boolean theHasVertColor) const;
//! Auxiliary procedures
- void drawEdges (const TEL_COLOUR* theEdgeColour,
- const Handle(OpenGl_Workspace)& theWorkspace) const;
+ void drawEdges (const Handle(OpenGl_Workspace)& theWorkspace) const;
void drawMarkers (const Handle(OpenGl_Workspace)& theWorkspace) const;
//! @param theType type of primitive array.
void setDrawMode (const Graphic3d_TypeOfPrimitiveArray theType);
+ //! Rebuilds the array of vertex attributes so that it can be drawn without indices.
+ Standard_Boolean processIndices (const Handle(OpenGl_Context)& theContext) const;
+
protected:
mutable Handle(OpenGl_VertexBuffer) myVboIndices;
mutable Handle(Graphic3d_IndexBuffer) myIndices;
mutable Handle(Graphic3d_Buffer) myAttribs;
mutable Handle(Graphic3d_BoundBuffer) myBounds;
- GLint myDrawMode;
+ GLshort myDrawMode;
+ mutable Standard_Boolean myIsFillType;
mutable Standard_Boolean myIsVboInit;
Standard_Size myUID; //!< Unique ID of primitive array.