On May 5, 2013, at 11:47 AM, Sean Harmer <sean.har...@kdab.com> wrote:
> On 04/05/2013 19:30, Preet wrote: >> Hi, ... >> >> 2. >> I'd like to use ShaderEffects to apply a somewhat trivial shader to most of >> the images in my application. The images are black and white icons, and I'd >> like to use shaders to change the black and white output fragments to >> different colors (ie maybe blue and green, red and yellow, etc). >> >> The shader itself is super simple and probably adds negligable cost to the >> pipeline, but I'm concerned about how overall performance would be affected >> compared to the default method QtQuick uses to render a bunch of images. >> >> Would QtQuick still intelligently batch the images and draw them using only >> a few calls? Or would it individually bind the same shader and issue a >> separate draw call for each image? > > Using a ShaderEffect item implies rendering the source to a texture via an > FBO and then applying the effect's shaders to the resulting texture. > Therefore using many ShaderEffects will produce a performance impact at some > point. If you really have many of these items to show it would be better to > implement a custom item using the scene graph api. Take the existing > QSGSimpleTextureNode or image item as starting points and provide a custom > material that renders using your colourisation shader. > > This way you avoid the FBO pass for each item. This is not quite correct :) Using ShaderEffectSource or "Item.layer: true" does mean going through an FBO. Using ShaderEffect alone or with a plain Image element can be almost the same as using a plain Image element. I say "can" as the content of the shader greatly impacts the resulting performance. If you do: Image { id: theIcon source: "myIcon.png" visible: false } ShaderEffect { propery variant source: theIcon width: theIcon.width height: theIcon.height fragmentShader: "...." } There is no FBO involved and the performance will be close to that of rendering a normal Image. Image elements can be used directly as texture sources, you see. In fact any, QQuickItem that implements the QSGTextureProvider interface can be used directly as a texture in a shader effect. It is also possible to use ShaderEffect without textures, for instance to render a gradient. As for batching, our current defualt renderer does not do that, it only reorders rendering commands to minimise state changes and to use the depth buffer to cull elements behind opaque elements. cheers, Gunnar > > Hope this helps, > > Sean > >> >> >> Preet >> >> -- >> This message has been scanned for viruses and >> dangerous content by MailScanner, and is >> believed to be clean. >> >> _______________________________________________ >> Interest mailing list >> >> Interest@qt-project.org >> http://lists.qt-project.org/mailman/listinfo/interest > > > -- > Dr Sean Harmer | > sean.har...@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 > > _______________________________________________ > Interest mailing list > Interest@qt-project.org > http://lists.qt-project.org/mailman/listinfo/interest _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest