//! Returns current polygon offsets settings.
const Graphic3d_PolygonOffset& PolygonOffset() const { return myPolygonOffset; }
+ //! Sets polygon offsets settings.
+ void SetPolygonOffset (const Graphic3d_PolygonOffset& theOffset) { myPolygonOffset = theOffset; }
+
//! Returns current polygon offsets settings.
void PolygonOffsets (Standard_Integer& theMode,
Standard_ShortReal& theFactor,
const OpenGl_GlobalLayerSettings& theDefaultSettings) const
{
const Handle(OpenGl_Context)& aCtx = theWorkspace->GetGlContext();
- const Graphic3d_PolygonOffset anAppliedOffsetParams = aCtx->PolygonOffset();
// myLayerSettings.ToClearDepth() is handled outside
// handle depth test
}
// handle depth offset
- aCtx->SetPolygonOffset (myLayerSettings.PolygonOffset());
+ const Graphic3d_PolygonOffset anAppliedOffsetParams = theWorkspace->SetDefaultPolygonOffset (myLayerSettings.PolygonOffset());
// handle depth write
theWorkspace->UseDepthWrite() = myLayerSettings.ToEnableDepthWrite() && theDefaultSettings.DepthMask == GL_TRUE;
}
// always restore polygon offset between layers rendering
- aCtx->SetPolygonOffset (anAppliedOffsetParams);
+ theWorkspace->SetDefaultPolygonOffset (anAppliedOffsetParams);
// restore environment texture
if (!myLayerSettings.UseEnvironmentTexture())
static const OpenGl_Vec4 THE_WHITE_COLOR (1.0f, 1.0f, 1.0f, 1.0f);
static const OpenGl_Vec4 THE_BLACK_COLOR (0.0f, 0.0f, 0.0f, 1.0f);
- static const OpenGl_AspectLine myDefaultAspectLine;
- static const OpenGl_AspectFace myDefaultAspectFace;
- static const OpenGl_AspectMarker myDefaultAspectMarker;
- static const OpenGl_AspectText myDefaultAspectText;
-
static const OpenGl_Matrix myDefaultMatrix =
{
{{ 1.0F, 0.0F, 0.0F, 0.0F },
myGlContext->SetLineWidth (myDefaultAspectLine.Aspect()->Width());
}
+// =======================================================================
+// function : SetDefaultPolygonOffset
+// purpose :
+// =======================================================================
+Graphic3d_PolygonOffset OpenGl_Workspace::SetDefaultPolygonOffset (const Graphic3d_PolygonOffset& theOffset)
+{
+ Graphic3d_PolygonOffset aPrev = myDefaultAspectFace.Aspect()->PolygonOffset();
+ myDefaultAspectFace.Aspect()->SetPolygonOffset (theOffset);
+ if (myAspectFaceApplied == myDefaultAspectFace.Aspect()
+ || myAspectFaceApplied.IsNull()
+ || (myAspectFaceApplied->PolygonOffset().Mode & Aspect_POM_None) == Aspect_POM_None)
+ {
+ myGlContext->SetPolygonOffset (theOffset);
+ }
+ return aPrev;
+}
+
// =======================================================================
// function : SetAspectLine
// purpose :
//! @return true if frustum culling algorithm is enabled
Standard_EXPORT Standard_Boolean IsCullingEnabled() const;
+ //! Configure default polygon offset parameters.
+ //! Return previous settings.
+ Standard_EXPORT Graphic3d_PolygonOffset SetDefaultPolygonOffset (const Graphic3d_PolygonOffset& theOffset);
+
//// RELATED TO STATUS ////
//! Return true if active group might activate face culling (e.g. primitives are closed).
Standard_Integer myNbSkippedTranspElems; //!< counter of skipped transparent elements for OpenGl_LayerList two rendering passes method
Standard_Integer myRenderFilter; //!< active filter for skipping rendering of elements by some criteria (multiple render passes)
+ OpenGl_AspectLine myDefaultAspectLine;
+ OpenGl_AspectFace myDefaultAspectFace;
+ OpenGl_AspectMarker myDefaultAspectMarker;
+ OpenGl_AspectText myDefaultAspectText;
+
const OpenGl_AspectLine* myAspectLineSet;
const OpenGl_AspectFace* myAspectFaceSet;
Handle(Graphic3d_AspectFillArea3d) myAspectFaceApplied;