En primer lugar, revisar el proceso actual
osgViewer :: viewBase :: marco ()
{
viewerInit (); [
// crear una serie de eventos y robots de marco y eventos y las ventanas gráficas asociadas
-> Visor osgViewer :: :: ViewerInit ()
-> Ver osgViewer :: :: Init ();
-> (1) osgGA :: :: EventQueue createEvent ();
(2) osgGA :: MatrixManipulator :: Init ();
-> (2.1) de varios robots :: init ()
]
isRealized ();
darse cuenta de();
adelantado (simulationTime);
eventTraversal ();
updateTraversal ();
renderingTraversals ();
}
Esto debería ser isRealized () a, viewerBase :: isRealized () es una función virtual pura
/ ** Obtiene si al menos de uno de estos espectadores se realizan las ventanas * /.
Bool virtual isRealized () const = 0;
Un comentario breve mirada es determinar si al menos una ventana de visualización listo
A continuación, echar un vistazo a la forma en la ventanilla única clase derivada y ventanas de composición para lograr.
ventanilla única
bool Visor :: isRealized () const
{
Contextos contextos;
const_cast <Visor *> (este) -> getContexts (contextos);
int numRealizedWindows sin signo = 0;
// borrar todas las operaciones previamente asignados
para (Contextos :: iterador braza = contexts.begin ();
! Braza = contexts.end ();
++ braza)
{
if ((* braza) -> isRealized ()) + + numRealizedWindows;
}
NumRealizedWindows de retorno> 0;
}
compuesto ventana:
bool CompositeViewer :: isRealized () const
{
Contextos contextos;
const_cast <CompositeViewer *> (este) -> getContexts (contextos);
int numRealizedWindows sin signo = 0;
// borrar todas las operaciones previamente asignados
para (Contextos :: iterador braza = contexts.begin ();
! Braza = contexts.end ();
++ braza)
{
if ((* braza) -> isRealized ()) + + numRealizedWindows;
}
NumRealizedWindows de retorno> 0;
}
Sustancialmente el mismo, sólo diferentes tipos de conversión de vista.
¿Qué es conseguir t Graphics Array contexto. Entonces atravesar el contexto de una matriz, siempre que hay una lista para Ok
Esta función es necesaria puede verse en el análisis actual
1, contextos,
2, osgViewer :: :: Visor getContexts ().
3, osg :: GraphicContext :: isRealized ()
1, en el viewerBase, define una matriz
typedef std :: vector <osg :: GraphicsContext *> Contextos;
Que los contextos son osg :: gama GraphicsContext contexto gráfico en el artículo también se analizó, esto no es sólo un parámetro de contexto gráficos de la ventana, pero hay una cola de operaciones, vistazo a estas variables miembro, es de ningún modo saben tan sencillo
OpenThreads :: Tema * _threadOfLastMakeCurrent;
OpenThreads :: mutex _operationsMutex;
osg :: ref_ptr <osg :: RefBlock> _operationsBlock;
_Operations OperationQueue;
osg :: ref_ptr <Funcionamiento> _currentOperation;
ref_ptr <GraphicsThread> _graphicsThread;
ref_ptr <ResizedCallback> _resizedCallback;
Pero por el momento yo no entendía, el primero en dejar una pregunta
Este isRealized () se usa en tres lugares
marco (), ejecutar () y establecer el modelo de subprocesamiento setThreadingModel ()
Ahora pueden anotar el proceso, o para una sola ventana, por ejemplo,
osgViewer :: viewBase :: marco ()
{
viewerInit (); [
// crear una serie de eventos y robots de marco y eventos y las ventanas gráficas asociadas
-> Visor osgViewer :: :: ViewerInit ()
-> Ver osgViewer :: :: Init ();
-> (1) osgGA :: :: EventQueue createEvent ();
(2) osgGA :: MatrixManipulator :: Init ();
-> (2.1) de varios robots :: init ()
]
isRealized (); [
// obtener la matriz contexto gráfico. Entonces atravesar el contexto de una matriz, siempre que hay una lista para Ok
-> Visor osgViewer :: :: isRealized ();
-> (1) osgViewer :: :: Viewer getContexts ().
-> (2) osg :: :: GraphicContext isRealized ()
]
darse cuenta de();
adelantado (simulationTime);
eventTraversal ();
updateTraversal ();
renderingTraversals ();
}