Tint i,n;
Tint transp = 0;
- GLint renderMode;
// Following pointers have been provided for performance improvement
tel_colour pfc = myPArray->fcolours;
Tint* pvc = myPArray->vcolours;
else
glEnable (GL_LIGHTING);
- glGetIntegerv (GL_RENDER_MODE, &renderMode);
-
if (myPArray->num_vertexs > 0
&& myPArray->flagBufferVBO != VBO_OK
- && renderMode != GL_FEEDBACK)
+ && !aGlContext->IsFeedback())
{
if (myPArray->vertices != NULL)
{
for (i = n = 0; i < myPArray->num_bounds; ++i)
{
if (pfc != NULL) glColor3fv (pfc[i].rgb);
- DrawElements (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawElements (theWorkspace, myPArray, aGlContext->IsFeedback(), myDrawMode,
myPArray->bounds[i], (GLenum* )&myPArray->edges[n]);
n += myPArray->bounds[i];
}
{
glColor3fv (pfc[i].rgb);
}
- DrawArrays (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawArrays (theWorkspace, myPArray, aGlContext->IsFeedback(), myDrawMode,
n, myPArray->bounds[i]);
n += myPArray->bounds[i];
}
}
else if (myPArray->num_edges > 0)
{
- DrawElements (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawElements (theWorkspace, myPArray, aGlContext->IsFeedback(), myDrawMode,
myPArray->num_edges, (GLenum* )myPArray->edges);
}
else
{
- DrawArrays (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawArrays (theWorkspace, myPArray, aGlContext->IsFeedback(), myDrawMode,
0, myPArray->num_vertexs);
}
}
}
Tint i, j, n;
- GLint renderMode;
// OCC22236 NOTE: draw edges for all situations:
// 1) draw elements with GL_LINE style as edges from myPArray->bufferVBO[VBOEdges] indicies array
{
glEnableClientState (GL_VERTEX_ARRAY);
glVertexPointer (3, GL_FLOAT, 0, myPArray->vertices); // array of vertices
- glGetIntegerv (GL_RENDER_MODE, &renderMode);
glColor3fv (theEdgeColour->rgb);
if (myPArray->num_bounds > 0)
}
else
{
- DrawElements (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawElements (theWorkspace, myPArray, aGlContext->IsFeedback(), myDrawMode,
myPArray->bounds[i], (GLenum* )&myPArray->edges[n]);
}
n += myPArray->bounds[i];
{
for (i = n = 0 ; i < myPArray->num_bounds; ++i)
{
- DrawArrays (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawArrays (theWorkspace, myPArray, aGlContext->IsFeedback(), myDrawMode,
n, myPArray->bounds[i]);
n += myPArray->bounds[i];
}
}
else
{
- DrawElements (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawElements (theWorkspace, myPArray, aGlContext->IsFeedback(), myDrawMode,
myPArray->num_edges, (GLenum* )myPArray->edges);
}
}
else
{
- DrawArrays (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawArrays (theWorkspace, myPArray, aGlContext->IsFeedback(), myDrawMode,
0, myPArray->num_vertexs);
}
}
else
{
int i,n;
+ Standard_Boolean isFeedback = theWorkspace->GetGlContext()->IsFeedback();
glPushAttrib (GL_POLYGON_BIT);
glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
glVertexPointer (3, GL_FLOAT, 0, myPArray->vertices); // array of vertices
- GLint renderMode;
- glGetIntegerv (GL_RENDER_MODE, &renderMode);
-
if (myPArray->num_bounds > 0)
{
if (myPArray->num_edges > 0)
{
for (i = n = 0; i < myPArray->num_bounds; ++i)
{
- DrawElements (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawElements (theWorkspace, myPArray, isFeedback, myDrawMode,
myPArray->bounds[i], (GLenum* )&myPArray->edges[n]);
n += myPArray->bounds[i];
}
{
for (i = n = 0; i < myPArray->num_bounds; ++i)
{
- DrawArrays (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawArrays (theWorkspace, myPArray, isFeedback, myDrawMode,
n, myPArray->bounds[i]);
n += myPArray->bounds[i];
}
}
else if (myPArray->num_edges > 0)
{
- DrawElements (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawElements (theWorkspace, myPArray, isFeedback, myDrawMode,
myPArray->num_edges, (GLenum* )myPArray->edges);
}
else
{
- DrawArrays (theWorkspace, myPArray, (renderMode == GL_FEEDBACK), myDrawMode,
+ DrawArrays (theWorkspace, myPArray, isFeedback, myDrawMode,
0, myPArray->num_vertexs);
}
return;
// release pending GL resources
- OpenGl_ResourceCleaner::GetInstance()->Cleanup (GetGlContext());
+ Handle(OpenGl_Context) aGlCtx = GetGlContext();
+ OpenGl_ResourceCleaner::GetInstance()->Cleanup (aGlCtx);
- Tint toSwap = 1; // swap buffers
+ // cache render mode state
+ GLint aRendMode = GL_RENDER;
+ glGetIntegerv (GL_RENDER_MODE, &aRendMode);
+ aGlCtx->SetFeedback (aRendMode == GL_FEEDBACK);
+
+ Tint toSwap = (aRendMode == GL_RENDER); // swap buffers
GLint aViewPortBack[4];
OpenGl_FrameBuffer* aFrameBuffer = (OpenGl_FrameBuffer* )theCView.ptrFBO;
if (aFrameBuffer != NULL)
{
glGetIntegerv (GL_VIEWPORT, aViewPortBack);
aFrameBuffer->SetupViewport();
- aFrameBuffer->BindBuffer (GetGlContext());
+ aFrameBuffer->BindBuffer (aGlCtx);
toSwap = 0; // no need to swap buffers
}
if (aFrameBuffer != NULL)
{
- aFrameBuffer->UnbindBuffer (GetGlContext());
+ aFrameBuffer->UnbindBuffer (aGlCtx);
// move back original viewport
glViewport (aViewPortBack[0], aViewPortBack[1], aViewPortBack[2], aViewPortBack[3]);
}
delete[] aDumpData;
}
#endif
+
+ // reset render mode state
+ aGlCtx->SetFeedback (Standard_False);
}