const Graphic3d_StereoMode aStereoMode = myRenderParams.StereoMode;
Graphic3d_Camera::Projection aProjectType = myCamera->ProjectionType();
Handle(OpenGl_Context) aCtx = myWorkspace->GetGlContext();
- aCtx->FrameStats()->FrameStart (myWorkspace);
+ aCtx->FrameStats()->FrameStart (myWorkspace->View(), false);
// release pending GL resources
aCtx->ReleaseDelayed();
&& !aCtx->caps->buffersNoSwap
&& aFrameBuffer == NULL;
- Standard_Integer aSizeX = aFrameBuffer != NULL ? aFrameBuffer->GetVPSizeX() : myWindow->Width();
- Standard_Integer aSizeY = aFrameBuffer != NULL ? aFrameBuffer->GetVPSizeY() : myWindow->Height();
- Standard_Integer aRendSizeX = Standard_Integer(myRenderParams.RenderResolutionScale * aSizeX + 0.5f);
- Standard_Integer aRendSizeY = Standard_Integer(myRenderParams.RenderResolutionScale * aSizeY + 0.5f);
+ const Standard_Integer aSizeX = aFrameBuffer != NULL ? aFrameBuffer->GetVPSizeX() : myWindow->Width();
+ const Standard_Integer aSizeY = aFrameBuffer != NULL ? aFrameBuffer->GetVPSizeY() : myWindow->Height();
+ const Standard_Integer aRendSizeX = Standard_Integer(myRenderParams.RenderResolutionScale * aSizeX + 0.5f);
+ const Standard_Integer aRendSizeY = Standard_Integer(myRenderParams.RenderResolutionScale * aSizeY + 0.5f);
+ if (aSizeX < 1
+ || aSizeY < 1
+ || aRendSizeX < 1
+ || aRendSizeY < 1)
+ {
+ myBackBufferRestored = Standard_False;
+ myIsImmediateDrawn = Standard_False;
+ return;
+ }
// determine multisampling parameters
Standard_Integer aNbSamples = !myToDisableMSAA && aSizeX == aRendSizeX
// reset render mode state
aCtx->FetchState();
- aCtx->FrameStats()->FrameEnd (myWorkspace);
+ aCtx->FrameStats()->FrameEnd (myWorkspace->View(), false);
myWasRedrawnGL = Standard_True;
}
const Graphic3d_StereoMode aStereoMode = myRenderParams.StereoMode;
Graphic3d_Camera::Projection aProjectType = myCamera->ProjectionType();
OpenGl_FrameBuffer* aFrameBuffer = myFBO.operator->();
- aCtx->FrameStats()->FrameStart (myWorkspace);
+ aCtx->FrameStats()->FrameStart (myWorkspace->View(), true);
if ( aFrameBuffer == NULL
&& !aCtx->DefaultFrameBuffer().IsNull()
{
aCtx->core11fwd->glFlush();
}
- aCtx->FrameStats()->FrameEnd (myWorkspace);
+ aCtx->FrameStats()->FrameEnd (myWorkspace->View(), true);
myWasRedrawnGL = Standard_True;
}
OpenGl_FrameBuffer* theOitAccumFbo,
const Standard_Boolean theToDrawImmediate)
{
+ myZLayers.UpdateCulling (myWorkspace, theToDrawImmediate);
if ( myZLayers.NbStructures() <= 0 )
return;
myRaytraceInitStatus == OpenGl_RT_FAIL ||
aCtx->IsFeedback();
- myZLayers.UpdateCulling (myWorkspace, theToDrawImmediate);
-
if (!toRenderGL)
{
- toRenderGL = !initRaytraceResources (aCtx) ||
- !updateRaytraceGeometry (OpenGl_GUM_CHECK, myId, aCtx);
+ const Standard_Integer aSizeX = theReadDrawFbo != NULL ? theReadDrawFbo->GetVPSizeX() : myWindow->Width();
+ const Standard_Integer aSizeY = theReadDrawFbo != NULL ? theReadDrawFbo->GetVPSizeY() : myWindow->Height();
+
+ toRenderGL = !initRaytraceResources (aSizeX, aSizeY, aCtx)
+ || !updateRaytraceGeometry (OpenGl_GUM_CHECK, myId, aCtx);
toRenderGL |= !myIsRaytraceDataValid; // if no ray-trace data use OpenGL
if (!toRenderGL)
{
- const Standard_Integer aSizeX = theReadDrawFbo != NULL ? theReadDrawFbo->GetVPSizeX() : myWindow->Width();
- const Standard_Integer aSizeY = theReadDrawFbo != NULL ? theReadDrawFbo->GetVPSizeY() : myWindow->Height();
myOpenGlFBO ->InitLazy (aCtx, aSizeX, aSizeY, myFboColorFormat, myFboDepthFormat, 0);
- if (myRaytraceFilter.IsNull())
- myRaytraceFilter = new OpenGl_RaytraceFilter;
-
- myRaytraceFilter->SetPrevRenderFilter (myWorkspace->GetRenderFilter());
-
if (theReadDrawFbo != NULL)
theReadDrawFbo->UnbindBuffer (aCtx);
// Render bottom OSD layer
myZLayers.Render (myWorkspace, theToDrawImmediate, OpenGl_LF_Bottom, theReadDrawFbo, theOitAccumFbo);
- myWorkspace->SetRenderFilter (myRaytraceFilter);
+ const Standard_Integer aPrevFilter = myWorkspace->RenderFilter() & ~(Standard_Integer )(OpenGl_RenderFilter_NonRaytraceableOnly);
+ myWorkspace->SetRenderFilter (aPrevFilter | OpenGl_RenderFilter_NonRaytraceableOnly);
{
if (theReadDrawFbo != NULL)
{
// Render non-polygonal elements in default layer
myZLayers.Render (myWorkspace, theToDrawImmediate, OpenGl_LF_Default, theReadDrawFbo, theOitAccumFbo);
}
- myWorkspace->SetRenderFilter (myRaytraceFilter->PrevRenderFilter());
+ myWorkspace->SetRenderFilter (aPrevFilter);
}
if (theReadDrawFbo != NULL)