[SailfishDevel] OpenGL Under Selica QML
David Greaves
david.greaves at jolla.com
Thu Jan 23 09:38:12 UTC 2014
On 23/01/14 09:28, Wim de Vries wrote:
> On 01/22/2014 05:34 PM, David Greaves wrote:
>> Fantastic - I just verified that it works here too.
>>
>> How are you getting the GL into the QML scene?
> From one of the GL examples (Squircle in c++):
> glViewport() determining the position (not yet QML) in Page.
>
> main c++:
> qmlRegisterType<Squircle>("OpenGLUnderQML", 1, 0, "Squircle");
>
> QML:
> import OpenGLUnderQML 1.0
> Squircle {
> SequentialAnimation on t {
> NumberAnimation { to: 1; duration: 2500; easing.type: Easing.InQuad }
> NumberAnimation { to: 0; duration: 2500; easing.type: Easing.OutQuad }
> loops: Animation.Infinite
> running: true
> }
Yep - I started there too :)
>> I created a GLItem which allows property connections and sizing so I know where
>> to draw in the window. I then inherit from this item and render into the
>> viewport it sets up.
> I will have a look at to.
This is how I map the viewport to the Item location:
class GLItem : public QQuickItem, protected QOpenGLFunctions
...
void GLItem::paint()
{
if (!m_program) {
m_program = new QOpenGLShaderProgram();
connect(window()->openglContext(), SIGNAL(aboutToBeDestroyed()),
this, SLOT(cleanup()), Qt::DirectConnection);
initializeOpenGLFunctions();
this->prep(); // Do any one-off setup that needs the glcontext to be
setup (eg the shader loading)
}
QRectF vpr = mapRectToScene(QRectF(0.0,0.0,width(),height()));
glViewport( vpr.x(), (window()->height() -( vpr.y() + vpr.height())),
vpr.width(), vpr.height());
...
David
More information about the Devel
mailing list