![krita update history krita update history](https://krita.org/wp-content/uploads/2018/03/bundles.png)
And the OpenGL QPainter engine never was able to render a complex application completely correctly. However, the Qt developers apparently saw the OpenGL QPainter engine more as a way to speed up the drawing of QWidgets than something that application developers would use.
![krita update history krita update history](https://i.ytimg.com/vi/jJE5iqE8Q7c/maxresdefault.jpg)
The Qt documentation even came with a nice example showing how this was to be done. The image would be drawn with pure OpenGL on a QGLWidget or with QPainter on a QWidget, and the canvas decorations and tool decorations would be drawn with QPainter on either canvas. This was ideal we could split up our canvas code. Qt4 came with an OpenGL based QPainter engine. Obviously, implementing all of that twice, once in OpenGL, once with QPainter isn’t ideal. Then we draw the tool decorations: that’s the outline cursor, the line for the straight line or ruler tool and so on. Then we draw the canvas decorations: that’s the selection outline, the guides, the assistants, the reference images and so on. There’s the image projection, that is, the result of combining all the layers, which is drawn first.
Krita update history code#
Krita’s canvas code executes in three phases. OpenGL was fairly simple back then, but we had to duplicate all our canvas handling code, once implemented in OpenGL, once implemented with QPainter. Adrian Page first coded an OpenGL-based canvas implementation for Krita in 2005.