[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