33 #ifdef G4VIS_BUILD_OPENGLQT_DRIVER    39 #ifdef G4MULTITHREADED    42 #include <qapplication.h>    45 #ifdef G4OPENGL_VERSION_2    46 #include <qglshaderprogram.h>    50 G4OpenGLImmediateQtViewer::G4OpenGLImmediateQtViewer
    51 (G4OpenGLImmediateSceneHandler& sceneHandler,
    53   G4VViewer (sceneHandler, sceneHandler.IncrementViewCount (), name),
    54   G4OpenGLViewer (sceneHandler),
    55   G4OpenGLQtViewer (sceneHandler),
    56   G4OpenGLImmediateViewer (sceneHandler)
    59   setFocusPolicy(Qt::StrongFocus); 
    60   fHasToRepaint = 
false;
    61   fPaintEventLock = 
false;
    65 #ifdef G4OPENGL_VERSION_2    66   setVboDrawer(
new G4OpenGLVboDrawer(
this,
"OGL-VBO"));
    69   resize(fVP.GetWindowSizeHintX(),fVP.GetWindowSizeHintY());
    71   if (fViewId < 0) 
return;  
    74 G4OpenGLImmediateQtViewer::~G4OpenGLImmediateQtViewer() {
    78 void G4OpenGLImmediateQtViewer::Initialise() {
    79   fQGLWidgetInitialiseCompleted = 
false;
    80   CreateMainWindow (
this,QString(
GetName()));
    83   fQGLWidgetInitialiseCompleted = 
true;
    86 void G4OpenGLImmediateQtViewer::initializeGL () {
    88 #ifndef G4OPENGL_VERSION_2    91     QGLShaderProgram *aQGLShaderProgram = 
new QGLShaderProgram (context());
    92     fShaderProgram = aQGLShaderProgram->programId ();
    94     aQGLShaderProgram->addShaderFromSourceCode(QGLShader::Vertex,
    95                                                fVboDrawer->getVertexShaderSrc());
    97     aQGLShaderProgram->addShaderFromSourceCode(QGLShader::Fragment,
    98                                                fVboDrawer->getFragmentShaderSrc());
   100     aQGLShaderProgram->link();
   101     aQGLShaderProgram->bind();
   103     fVertexPositionAttribute =  glGetAttribLocation(fShaderProgram, 
"aVertexPosition");
   104     fcMatrixUniform =  glGetUniformLocation(fShaderProgram, 
"uCMatrix");
   105     fpMatrixUniform =  glGetUniformLocation(fShaderProgram, 
"uPMatrix");
   106     ftMatrixUniform =  glGetUniformLocation(fShaderProgram, 
"uTMatrix");
   107     fmvMatrixUniform = glGetUniformLocation(fShaderProgram, 
"uMVMatrix");
   110   float identity[16] = {
   116   glUniformMatrix4fv (fcMatrixUniform, 1, 0, identity);
   117   glUniformMatrix4fv (fpMatrixUniform, 1, 0, identity);
   118   glUniformMatrix4fv (ftMatrixUniform, 1, 0, identity);
   119   glUniformMatrix4fv(fmvMatrixUniform, 1, 0, identity);
   121   glUseProgram(fShaderProgram);
   131   if (fSceneHandler.GetScene() == 0) {
   132     fHasToRepaint =
false;
   145 void  G4OpenGLImmediateQtViewer::DrawView() {
   146 #ifdef G4MULTITHREADED   156 void G4OpenGLImmediateQtViewer::ComputeView () {
   172     HaloingSecondPass ();
   183   fHasToRepaint = 
true;
   189 void G4OpenGLImmediateQtViewer::resizeGL(
   193   if ((aWidth > 0) && (aHeight > 0)) {
   194     ResizeWindow(aWidth,aHeight);
   195     fHasToRepaint = sizeHasChanged();
   200 void G4OpenGLImmediateQtViewer::paintGL()
   202   updateToolbarAndMouseContextMenu();
   204   if (fPaintEventLock) {
   207   if (!fQGLWidgetInitialiseCompleted) {
   208     fQGLWidgetInitialiseCompleted= 
true;
   211   if ((getWinWidth() == 0) && (getWinHeight() == 0)) {
   216   if ( !fHasToRepaint) {
   221     if (!isMaximized() && !isFullScreen()) {
   222       sw = normalGeometry().width();
   223       sh = normalGeometry().height();
   225       sw = frameGeometry().width();
   226       sh = frameGeometry().height();
   228     if ((getWinWidth() == (
unsigned int)sw) &&(getWinHeight() == (
unsigned int)sh)) {
   231     } 
else if ((sw == 0) && (sh == 0)) { 
   232       if (((getWinWidth() == (
unsigned int)
width())) &&(getWinHeight() == (
unsigned int) height())) { 
   243   fHasToRepaint = 
false; 
   245   fPaintEventLock = 
false;
   248 void G4OpenGLImmediateQtViewer::mousePressEvent(QMouseEvent *event)
   250   G4MousePressEvent(event);
   253 void G4OpenGLImmediateQtViewer::keyPressEvent (QKeyEvent * event) 
   255   G4keyPressEvent(event);
   258 void G4OpenGLImmediateQtViewer::keyReleaseEvent (QKeyEvent * event)
   260   G4keyReleaseEvent(event);
   263 void G4OpenGLImmediateQtViewer::wheelEvent (QWheelEvent * event)
   268 void G4OpenGLImmediateQtViewer::showEvent (QShowEvent *) 
   270   fHasToRepaint = 
true;
   278 void G4OpenGLImmediateQtViewer::mouseDoubleClickEvent(QMouseEvent *)
   280   G4MouseDoubleClickEvent();
   283 void G4OpenGLImmediateQtViewer::mouseReleaseEvent(QMouseEvent *event)
   285   G4MouseReleaseEvent(event);
   288 void G4OpenGLImmediateQtViewer::mouseMoveEvent(QMouseEvent *event)
   290   G4MouseMoveEvent(event);
   294 void G4OpenGLImmediateQtViewer::contextMenuEvent(QContextMenuEvent *
e)
   296   G4manageContextMenuEvent(e);
   299 void G4OpenGLImmediateQtViewer::paintEvent(QPaintEvent *) {
   300   if ( fHasToRepaint) {
   306 void G4OpenGLImmediateQtViewer::updateQWidget() {
   309   updateSceneTreeComponentTreeWidgetInfos();
   311   fHasToRepaint= 
false;
   315 void G4OpenGLImmediateQtViewer::ShowView (
   320   fHasToRepaint = 
true;
 
const G4String & GetName() const