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 #ifdef G4DEBUG_VIS_OGL
80 printf(
"G4OpenGLImmediateQtViewer::Initialise \n");
82 fQGLWidgetInitialiseCompleted =
false;
83 CreateMainWindow (
this,QString(GetName()));
86 fQGLWidgetInitialiseCompleted =
true;
89 void G4OpenGLImmediateQtViewer::initializeGL () {
91 #ifndef G4OPENGL_VERSION_2
94 QGLShaderProgram *aQGLShaderProgram =
new QGLShaderProgram (context());
95 fShaderProgram = aQGLShaderProgram->programId ();
97 aQGLShaderProgram->addShaderFromSourceCode(QGLShader::Vertex,
98 fVboDrawer->getVertexShaderSrc());
100 aQGLShaderProgram->addShaderFromSourceCode(QGLShader::Fragment,
101 fVboDrawer->getFragmentShaderSrc());
103 aQGLShaderProgram->link();
104 aQGLShaderProgram->bind();
106 fVertexPositionAttribute = glGetAttribLocation(fShaderProgram,
"aVertexPosition");
107 fcMatrixUniform = glGetUniformLocation(fShaderProgram,
"uCMatrix");
108 fpMatrixUniform = glGetUniformLocation(fShaderProgram,
"uPMatrix");
109 ftMatrixUniform = glGetUniformLocation(fShaderProgram,
"uTMatrix");
110 fmvMatrixUniform = glGetUniformLocation(fShaderProgram,
"uMVMatrix");
113 float identity[16] = {
119 glUniformMatrix4fv (fcMatrixUniform, 1, 0, identity);
120 glUniformMatrix4fv (fpMatrixUniform, 1, 0, identity);
121 glUniformMatrix4fv (ftMatrixUniform, 1, 0, identity);
122 glUniformMatrix4fv(fmvMatrixUniform, 1, 0, identity);
124 glUseProgram(fShaderProgram);
134 if (fSceneHandler.GetScene() == 0) {
135 fHasToRepaint =
false;
144 QCoreApplication::sendPostedEvents () ;
148 void G4OpenGLImmediateQtViewer::DrawView() {
149 #ifdef G4MULTITHREADED
159 void G4OpenGLImmediateQtViewer::ComputeView () {
161 #ifdef G4DEBUG_VIS_OGL
162 printf(
"G4OpenGLImmediateQtViewer::ComputeView %d %d VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n",getWinWidth(), getWinHeight());
178 #ifdef G4DEBUG_VIS_OGL
179 printf(
"G4OpenGLImmediateQtViewer::ComputeView First ProcessView ok\n");
181 HaloingSecondPass ();
192 #ifdef G4DEBUG_VIS_OGL
193 printf(
"G4OpenGLImmediateQtViewer::ComputeView %d %d ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n",getWinWidth(), getWinHeight());
195 fHasToRepaint =
true;
201 void G4OpenGLImmediateQtViewer::resizeGL(
205 if ((aWidth > 0) && (aHeight > 0)) {
206 ResizeWindow(aWidth,aHeight);
207 fHasToRepaint = sizeHasChanged();
212 void G4OpenGLImmediateQtViewer::paintGL()
214 updateToolbarAndMouseContextMenu();
216 if (fPaintEventLock) {
219 if (!fQGLWidgetInitialiseCompleted) {
220 fQGLWidgetInitialiseCompleted=
true;
223 if ((getWinWidth() == 0) && (getWinHeight() == 0)) {
228 if ( !fHasToRepaint) {
233 if (!isMaximized() && !isFullScreen()) {
234 sw = normalGeometry().width();
235 sh = normalGeometry().height();
237 sw = frameGeometry().width();
238 sh = frameGeometry().height();
240 if ((getWinWidth() == (
unsigned int)sw) &&(getWinHeight() == (
unsigned int)sh)) {
243 }
else if ((sw == 0) && (sh == 0)) {
244 if (((getWinWidth() == (
unsigned int)
width())) &&(getWinHeight() == (
unsigned int) height())) {
249 #ifdef G4DEBUG_VIS_OGL
250 printf(
"G4OpenGLImmediateQtViewer::paintGL VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ready %d\n",fReadyToPaint);
258 fHasToRepaint =
false;
260 #ifdef G4DEBUG_VIS_OGL
261 printf(
"G4OpenGLImmediateQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ready %d\n\n\n",fReadyToPaint);
263 fPaintEventLock =
false;
266 void G4OpenGLImmediateQtViewer::mousePressEvent(QMouseEvent *event)
268 G4MousePressEvent(event);
271 void G4OpenGLImmediateQtViewer::keyPressEvent (QKeyEvent * event)
273 G4keyPressEvent(event);
276 void G4OpenGLImmediateQtViewer::keyReleaseEvent (QKeyEvent * event)
278 G4keyReleaseEvent(event);
281 void G4OpenGLImmediateQtViewer::wheelEvent (QWheelEvent * event)
286 void G4OpenGLImmediateQtViewer::showEvent (QShowEvent *)
288 fHasToRepaint =
true;
296 void G4OpenGLImmediateQtViewer::mouseDoubleClickEvent(QMouseEvent *)
298 G4MouseDoubleClickEvent();
301 void G4OpenGLImmediateQtViewer::mouseReleaseEvent(QMouseEvent *event)
303 G4MouseReleaseEvent(event);
306 void G4OpenGLImmediateQtViewer::mouseMoveEvent(QMouseEvent *event)
308 G4MouseMoveEvent(event);
312 void G4OpenGLImmediateQtViewer::contextMenuEvent(QContextMenuEvent *e)
314 G4manageContextMenuEvent(e);
317 void G4OpenGLImmediateQtViewer::paintEvent(QPaintEvent *) {
318 if ( fHasToRepaint) {
324 void G4OpenGLImmediateQtViewer::updateQWidget() {
327 updateSceneTreeComponentTreeWidgetInfos();
329 fHasToRepaint=
false;
333 void G4OpenGLImmediateQtViewer::ShowView (
338 fHasToRepaint =
true;