Hello Georg, happy new year everyone!

On Wed, Jan 07, 2015 at 01:13:15AM +0100, Georg Zotti wrote:
> 1) QtDeclarative has been deprecated a while ago and documentation links
> are (deliberately I suppose) getting sparse. QGL... classes are
> deprecated. We are still using them, but replacements have been made
> available for most, if not all, functionality. Not having much experience
> with these Qt window/widget classes does not help in finding correct
> replacements.

Currently we still need QtDeclarative as it is the only way -that I am
aware of- to embed QWidgets into an opengl view.  Last time I checked,
it was impossible to do it using a QQuickView.

> 2) Classes which need to draw with OpenGL gl... calls should be derived
> from QOpenGLFunctions. The current situation is this #define nightmare in
> StelOpenGL.hpp. What was the specific reason to do that and not follow the
> documented and recommended path?

The reason is because QOpenGLFunctions methods are not const, which
makes it impossible to call them from any const method when inheriting
from it (see https://bugreports.qt.io/browse/QTBUG-39095).  That's why
we use the more verbose
QOpenGLContext::currentContext()->functions()->glXXX way on Windows.  I
put the macro so that we don't have to type the whole thing for each
opengl call.

> 3) Qt5.4 brings a change to allow building binaries for the most widely
> used platform that can locate and bind either native OpenGL, or OpenGL ES
> (ANGLE) or fallback to software OpenGL (MESA) libraries on startup. This
> however requires cleaning up issue (2) in the Qt way.

Yes, I just committed a small fix to allow compilation on Windows with
Qt 5.4.  Basically the problem is that since Qt 5.4 do not link with any
opengl implementation, the only way to call opengl function is through
QOpenGLFunctions.  Qt also now make it simpler by having all the OpenGL
functions accessible as methods of QOpenGLFunctions, previously they had
this annoying idea of only reimplementing the problematic functions.  So
at least with Qt 5.4 there is a clear unique way of doing opengl: all
the calls should be made from QOpenGLFunctions.

Also when downloading Qt 5.4, I only consider the 'normal' version, not
the one with 'opengl' prefix.  The normal Qt 5.4 windows version is
better since it includes both OpenGL and ANGLE libraries.

> I tried my luck over the holidays but am stuck and had to see that I
> cannot complete this by tonight. Is there anyone more fluent in /
> knowledgeable about the current Qt GUI (i.e. QtQuick2,
> QtOpenGLWidget/-Window, ...) classes able to do these necessary steps?  I
> leave my branch open as qt54-qtify, where I already replaced QtDeclarative
> with QtQuick+QtQuickwidgets+QtQml, but got stuck with various class
> changes, and I am of course not sure if my decisions of replacement
> classes were the best. So maybe either start from here or anew from trunk.
> I must currently cease work on this.

I had a very quick look at your branch, but it failed to compile.  I
still think currently it is not possible to get ride of QtDeclarative
because that is the only way Qt allows to put QWidgets on top of an
opengl view.  Of course one solution would be to rewrite the whole GUI
in qml (is that what you try to do in your branch?), but this would be a
massive work, so I am not sure if it is the right thing to do.

Then, maybe I am wrong and there is a way to embed QWidgets into an
OpenGL windows without using QtDeclarative (for example by putting a
qwidget inside qml view?)  If we find a way to do that we could simplify
the code a lot without having to rewrite any of the UI code.

> One further note on any possible replacement classes:
> My Raspberry experiment indicated that Stellarium can be compiled on this
> OpenGL ES2 embedded Linux system, but fails with a startup message:
> 
> EGLFS: OpenGL windows cannot be mixed with others.

Unfortunately I am not familiar with the Raspberry.  Do simple Qt
+ OpenGL ES 2 examples work on it?

Best regards,
Guillaume

------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
vanity: www.gigenet.com
_______________________________________________
Stellarium-pubdevel mailing list
Stellarium-pubdevel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stellarium-pubdevel

Reply via email to