#include <NCollection_AlignedAllocator.hxx>
IMPLEMENT_STANDARD_RTTIEXT(OpenGl_Workspace,Standard_Transient)
-IMPLEMENT_STANDARD_RTTIEXT(OpenGl_RaytraceFilter,OpenGl_RenderFilter)
namespace
{
myUseZBuffer (Standard_True),
myUseDepthWrite (Standard_True),
//
+ myNbSkippedTranspElems (0),
+ myRenderFilter (OpenGl_RenderFilter_Empty),
+ //
myAspectLineSet (&myDefaultAspectLine),
myAspectFaceSet (&myDefaultAspectFace),
myAspectMarkerSet (&myDefaultAspectMarker),
#endif
}
- myDefaultCappingAlgoFilter = new OpenGl_CappingAlgoFilter();
-
myFontFaceAspect.Aspect()->SetAlphaMode (Graphic3d_AlphaMode_Mask, 0.285f);
myFontFaceAspect.Aspect()->SetShadingModel (Graphic3d_TOSM_UNLIT);
// function : ShouldRender
// purpose :
// =======================================================================
-Standard_Boolean OpenGl_RaytraceFilter::ShouldRender (const Handle(OpenGl_Workspace)& theWorkspace,
- const OpenGl_Element* theElement)
+bool OpenGl_Workspace::ShouldRender (const OpenGl_Element* theElement)
{
- Standard_Boolean aPrevFilterResult = Standard_True;
- if (!myPrevRenderFilter.IsNull())
+ // render only non-raytracable elements when RayTracing is enabled
+ if ((myRenderFilter & OpenGl_RenderFilter_NonRaytraceableOnly) != 0)
+ {
+ if (OpenGl_Raytrace::IsRaytracedElement (theElement))
+ {
+ return false;
+ }
+ }
+ else if ((myRenderFilter & OpenGl_RenderFilter_FillModeOnly) != 0)
+ {
+ if (!theElement->IsFillDrawMode())
+ {
+ return false;
+ }
+ }
+
+ // handle opaque/transparency render passes
+ if ((myRenderFilter & OpenGl_RenderFilter_OpaqueOnly) != 0)
+ {
+ if (!theElement->IsFillDrawMode())
+ {
+ return true;
+ }
+
+ if (OpenGl_Context::CheckIsTransparent (myAspectFaceSet, myHighlightStyle))
+ {
+ ++myNbSkippedTranspElems;
+ return false;
+ }
+ }
+ else if ((myRenderFilter & OpenGl_RenderFilter_TransparentOnly) != 0)
{
- aPrevFilterResult = myPrevRenderFilter->ShouldRender (theWorkspace, theElement);
+ if (!theElement->IsFillDrawMode())
+ {
+ if (dynamic_cast<const OpenGl_AspectFace*> (theElement) == NULL)
+ {
+ return false;
+ }
+ }
+ else if (!OpenGl_Context::CheckIsTransparent (myAspectFaceSet, myHighlightStyle))
+ {
+ return false;
+ }
}
- return aPrevFilterResult &&
- !OpenGl_Raytrace::IsRaytracedElement (theElement);
+ return true;
}