Observing move_to probably is not the right idea. The important thing is that a pixel format can change in theory on any frame. And the right answer is to check on every frame. The name is not great but we provide you that flag in Renderable:
virtual bool shaped() const = 0; // meaning the pixel format has alpha
Although I keep thinking this approach is insufficient. We fail to distinguish between a surface having an alpha channel on purpose, and having one by accident (e.g. bug 1667577).
In the spirit of glEnable(GL_BLEND), I think we need an extra flag that clients must set in order for them to get blended. That way the case of clients getting an alpha channel unwittingly and failing to initialize it correctly is solved. Although you could argue that's just an app or toolkit bug.
Observing move_to probably is not the right idea. The important thing is that a pixel format can change in theory on any frame. And the right answer is to check on every frame. The name is not great but we provide you that flag in Renderable:
virtual bool shaped() const = 0; // meaning the pixel format has alpha
Although I keep thinking this approach is insufficient. We fail to distinguish between a surface having an alpha channel on purpose, and having one by accident (e.g. bug 1667577).
In the spirit of glEnable(GL_BLEND), I think we need an extra flag that clients must set in order for them to get blended. That way the case of clients getting an alpha channel unwittingly and failing to initialize it correctly is solved. Although you could argue that's just an app or toolkit bug.