This is to see if the source texture provider actually
provides a texture, and especially useful if it is
important to know when the texture would be available.
One particular use case for this is with static effects,
such that it makes it possible to apply the effect once
the source provider starts providing the texture.
`Image` as texture provider has `Image.Ready` status,
but it seems that it is not really the best reflection
for whether the texture is ready or not. My understanding
is that it is rather for when the image is loaded, and
not necessarily the texture.
As the name suggests, this makes it possible to introspect
whether the source texture has an alpha channel or not.
This is mostly relevant for non-layer textures, as it seems
that layers always have an alpha channel.
Instead of event based approach, it now uses sampling based
approach, like we have done in high precision timer widget
before (389a1999).
I also started using `std::atomic` instead of `QMutex`.
This is comparable to `textureSize()` in GLSL, it provides the
native texture size as opposed to the scene graph texture size
which returns the sub-texture size, be it an arbitrary sub-
texture or atlas texture.