[Interest] Antialiasing possible on QSGGeometry?
Sean Harmer
sean.harmer at kdab.com
Sat Jun 8 10:41:43 CEST 2013
On 07/06/2013 07:12, Sletta Gunnar wrote:
> You need to set the surface format of your QQuickView.
>
> QQuickView view;
> QSurfaceFormat format = view.format();
> format.setSamples(16);
> view.setFormat(format);
> view.show();
>
> If your graphics hardware supports multisample antialiasing, you will now have antialiased geometry.
>
> As the scene graph might require depth/stencil buffer for its renderer, it is a bit important that you inherit the original surface format from the view instead of creating a new one from scratch.
>
> qmlscene supports this out of the box by passing --multisample as a command line option.
Another, but more complex, option is to do like the Rectangle does and
to implement antialiasing via the vertex shader used in the material for
that item type. That provides edge antialiasing. If you need
antialiasing of the contents of the item then using MSAA as Gunnar
suggested is easiest but be aware that it comes at a cost. 16xMSAA
should be fine on modern desktop cards but will likely be prohibitively
expensive on embedded at the moment. Lower the MSAA factor to say 4x
will give you some AA for lower cost. Play around with it and see what
works for you.
Cheers,
Sean
>
> cheers,
> Gunnar
>
> On Jun 7, 2013, at 12:12 AM, Mark <markg85 at gmail.com> wrote:
>
>> Hi,
>>
>> Another day, another question :)
>> Don't worry, i plan on making a big blog about everything. This
>> information won't get lost.
>>
>> So today i'm trying to draw a custom shape by setting vertices. More
>> specifically a GL_QUAD_STRIP.
>>
>> It looks like this (obviously just testing data)
>> QSGGeometry *geometry = new
>> QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 8);
>> geometry->setDrawingMode(GL_QUAD_STRIP);
>> geometry->vertexDataAsPoint2D()[0].set(0, 100);
>> geometry->vertexDataAsPoint2D()[1].set(0, height());
>> geometry->vertexDataAsPoint2D()[2].set(width() / 4, 80);
>> geometry->vertexDataAsPoint2D()[3].set(width() / 4, height());
>> geometry->vertexDataAsPoint2D()[4].set(width() / 2, 110);
>> geometry->vertexDataAsPoint2D()[5].set(width() / 2, height());
>> geometry->vertexDataAsPoint2D()[6].set(width(), 150);
>> geometry->vertexDataAsPoint2D()[7].set(width(), height());
>>
>> QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
>> material->setColor(QColor(255, 0, 0, 128));
>>
>> QSGGeometryNode *n = new QSGGeometryNode;
>> n->setGeometry(geometry);
>> n->setFlag(QSGNode::OwnsGeometry);
>> n->setMaterial(material);
>> n->setFlag(QSGNode::OwnsMaterial);
>>
>> So roughly the same as the example [1] only with a quad strip.
>> However, this ends up looking a bit aliased.. So the question is: How
>> do i get this anti-aliased?
>>
>> I did read something about multisampling and setting the number of
>> samples, but i can't find such a function in any of the used classes..
>>
>> Kind regards,
>> Mark
>>
>> [1] http://qt-project.org/doc/qt-5.0/qtquick/qsggeometrynode.html
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
--
Dr Sean Harmer | sean.harmer at kdab.com | Senior Software Engineer
Klarälvdalens Datakonsult AB, a KDAB Group company
Tel. Sweden (HQ) +46-563-540090, USA +1-866-777-KDAB(5322)
KDAB - Qt Experts - Platform-independent software solutions
More information about the Interest
mailing list