[Interest] Issue with drawing an Qml Item with raw OpenGL calls
Paweł Pietraszko
pawel.jan.pietraszko at gmail.com
Mon Jan 26 11:04:07 CET 2015
Hi!
I want to draw a single item in QtQuick scene using raw OpenGL calls. It 's
important for me to do raw OpenGL calls because I want to integrate to
external library which will be drawing on my Item.
I have decided to take approach suggested in this stackoverflow question
<http://stackoverflow.com/questions/27948211/comparison-of-two-approaches-to-rendering-raw-opengl-into-a-qml-ui-in-qt>
.
I have created a Qt Quick item deriving from QQuickFramebufferObject and
exposed it to QML as Renderer (code is based on Qt example: Scene Graph -
Rendering FBOs
<http://doc.qt.io/qt-5/qtquick-scenegraph-textureinsgnode-example.html>):
class FboInSGRenderer : public QQuickFramebufferObject {
Q_OBJECTpublic:
Renderer *createRenderer() const;};
source file:
class LogoInFboRenderer : public QQuickFramebufferObject::Renderer {
public:
LogoInFboRenderer() { }
void render() {
int width = 1, height = 1;
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(0.0, 1.0, 0.0, 0.8);
glBegin(GL_QUADS);
glVertex2f(0, 0);
glVertex2f(width, 0);
glVertex2f(width, height);
glVertex2f(0, height);
glEnd();
glLineWidth(2.5);
glColor4f(0.0, 0.0, 0.0, 1.0);
glBegin(GL_LINES);
glVertex2f(0, 0);
glVertex2f(width, height);
glVertex2f(width, 0);
glVertex2f(0, height);
glEnd();
update();
}
QOpenGLFramebufferObject *createFramebufferObject(const QSize &size) {
QOpenGLFramebufferObjectFormat format;
format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
format.setSamples(4);
return new QOpenGLFramebufferObject(size, format);
}};
QQuickFramebufferObject::Renderer *FboInSGRenderer::createRenderer() const {
return new LogoInFboRenderer();}
In Qml I use it as follows:
import QtQuick 2.4import SceneGraphRendering 1.0
Rectangle {
width: 400
height: 400
color: "purple"
Renderer {
id: renderer
anchors.fill: parent
}}
I was expecting to see that rendered "X" will fill entire scene, but
instead I get the result I included in attachment.
Other experiments seem to confirm that drew shape has always it's size
(width/height) divided by 2. I also checked that size parameter in
createFramebufferObject has correct value. Looking into docs led me to
property textureFollowsItemSize
<http://doc.qt.io/qt-5/qquickframebufferobject.html#textureFollowsItemSize-prop>
in QQuickFramebufferObjectclass but it is by default set to true.
Am I doing something wrong or should I consider this behavior as Qt bug?
(I have also post this question on stackoverflow
<http://stackoverflow.com/questions/28070778/issue-with-drawing-an-qml-item-with-raw-opengl-calls>
)
Best regards,
Paweł
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20150126/be2b8d26/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: screenshot.png
Type: image/png
Size: 4244 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20150126/be2b8d26/attachment.png>
More information about the Interest
mailing list