The major new feature in this release is the addition of the OpenGLContextControl QML item to the HsQML.Canvas module. Previously, the OpenGL canvas support introduced in 0.3.2.0 left programs at the mercy of Qt to configure the context on their behalf and there was no way to influence this process. That was a problem if you want to use the latest OpenGL features because they require you to obtain a newfangled Core profile context whereas Qt appears to default to the Compatibility profile (or just plain OpenGL 2.x if that's all you have).
To use it, simply place an OpenGLContextControl item in your QML document inside the window you want to control and set the properties to the desired values. For example, the following snippet of code would request the system provide it with a context supporting at least the OpenGL 4.1 Core profile:
import HsQML.Canvas 1.0
...
OpenGLContextControl {
majorVersion: 4;
minorVersion: 1;
contextType: OpenGLContextControl.OpenGL;
contextProfile: OpenGLContextControl.CoreProfile;
}
...
OpenGLContextControl {
majorVersion: 4;
minorVersion: 1;
contextType: OpenGLContextControl.OpenGL;
contextProfile: OpenGLContextControl.CoreProfile;
}
The supported properties are all detailed in the Haddock documentation for the Canvas module. There's also a more sophisticated example in the corresponding new release of the hsqml-demo-samples package. This example, hsqml-opengl2, displays the current context settings and allows you to experiment with requesting different values.
This graphics chip-set has seen better days. |
Also new in this release, i) the defSignalNamedParams function allows you to give names to your signal parameters and ii) the EngineConfig record has been extended to allow setting additional search paths for QML modules and native plugins..
The first point is an interesting one because, harking back, my old blog post on the Connections item, doesn't actually demonstrate passing parameters to the signal handler and that's because you couldn't ordinarily. You could connect a function to the signal manually using the connect() method in QML code and access arguments positionally that way, or written the handler to index into the arguments array for it's parameters if you were willing to stoop that low. Now, you can give the parameters names and they will automatically be available in the handler's scope.
release-0.3.3.0 - 2015.01.20
* Added support for Cabal 1.22 API.
* Added facility for controlling the OpenGL context.
* Added defSignal variant with ability to set parameter names.
* Added option for setting the module and plugin search paths.
* Changed Setup script to set QT_SELECT (base >= 4.7).
* Fixed crash resizing canvas in Inline mode.
* Fixed leaking stable pointers when objects are collected.
* Fixed Canvas delegate marshaller to fail on invalid values.
* Fixed discrepancy between kinds of type conversion.