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