Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qopenvgcontext.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include <qpa/qplatformnativeinterface.h>
5#include <QtGui/QGuiApplication>
6#include <QtCore/QVector>
7#include <QtCore/QDebug>
8
9#include "qopenvgcontext_p.h"
10
12
14 : m_window(window)
15{
17 m_display = reinterpret_cast<EGLDisplay>(nativeInterface->nativeResourceForWindow("EglDisplay", window));
18 m_surface = reinterpret_cast<EGLSurface>(nativeInterface->nativeResourceForWindow("EglSurface", window));
19
20 if (m_display == 0)
21 qFatal("QOpenVGContext: failed to get EGLDisplay");
22 if (m_surface == 0)
23 qFatal("QOpenVGContext: failed to get EGLSurface");
24
25 EGLint configID = 0;
26 if (eglQuerySurface(m_display, m_surface, EGL_CONFIG_ID, &configID)) {
27 EGLint numConfigs;
28 const EGLint configAttribs[] = {
29 EGL_CONFIG_ID, configID,
30 EGL_NONE
31 };
32 eglChooseConfig(m_display, configAttribs, &m_config, 1, &numConfigs);
33 } else {
34 qFatal("QOpenVGContext: failed to get surface config");
35 }
36
37 // Create an EGL Context
38 eglBindAPI(EGL_OPENVG_API);
39 m_context = eglCreateContext(m_display, m_config, EGL_NO_CONTEXT, 0);
40 if (!m_context)
41 qFatal("QOpenVGContext: eglCreateContext failed");
42}
43
45{
47 eglDestroyContext(m_display, m_context);
48}
49
51{
52 makeCurrent(m_surface);
53}
54
56{
57 eglMakeCurrent(m_display, surface, surface, m_context);
58}
59
61{
62 eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
63}
64
66{
67 swapBuffers(m_surface);
68}
69
71{
72 eglSwapBuffers(m_display, surface);
73}
74
76{
77 return m_window;
78}
79
81{
82 QImage framebufferImage(size, QImage::Format_RGB32);
83 vgReadPixels(framebufferImage.bits(), framebufferImage.bytesPerLine(), VG_sXRGB_8888, 0, 0, size.width(), size.height());
84 return framebufferImage.mirrored(false, true);
85}
86
88{
89 EGLint configsAvailable = 0;
90 eglGetConfigs(m_display, 0, 0, &configsAvailable);
91
92 QVector<EGLConfig> configs(configsAvailable);
93 eglGetConfigs(m_display, configs.data(), configs.size(), &configsAvailable);
94
95 for (EGLConfig config : configs) {
96 EGLint value;
97 eglGetConfigAttrib(m_display, config, EGL_CONFIG_ID, &value);
98 qDebug() << "#################\n" << "EGL_CONFIG_ID:" << value;
99 eglGetConfigAttrib(m_display, config, EGL_BUFFER_SIZE, &value);
100 qDebug() << "EGL_BUFFER_SIZE:" << value;
101 eglGetConfigAttrib(m_display, config, EGL_ALPHA_SIZE, &value);
102 qDebug() << "EGL_ALPHA_SIZE:" << value;
103 eglGetConfigAttrib(m_display, config, EGL_RED_SIZE, &value);
104 qDebug() << "EGL_RED_SIZE:" << value;
105 eglGetConfigAttrib(m_display, config, EGL_GREEN_SIZE, &value);
106 qDebug() << "EGL_GREEN_SIZE:" << value;
107 eglGetConfigAttrib(m_display, config, EGL_BLUE_SIZE, &value);
108 qDebug() << "EGL_BLUE_SIZE:" << value;
109 eglGetConfigAttrib(m_display, config, EGL_DEPTH_SIZE, &value);
110 qDebug() << "EGL_DEPTH_SIZE:" << value;
111 eglGetConfigAttrib(m_display, config, EGL_STENCIL_SIZE, &value);
112 qDebug() << "EGL_STENCIL_SIZE:" << value;
113
114 eglGetConfigAttrib(m_display, config, EGL_ALPHA_MASK_SIZE, &value);
115 qDebug() << "EGL_ALPHA_MASK_SIZE:" << value;
116 eglGetConfigAttrib(m_display, config, EGL_BIND_TO_TEXTURE_RGB, &value);
117 qDebug() << "EGL_BIND_TO_TEXTURE_RGB:" << value;
118 eglGetConfigAttrib(m_display, config, EGL_BIND_TO_TEXTURE_RGBA, &value);
119 qDebug() << "EGL_BIND_TO_TEXTURE_RGBA:" << value;
120
121
122 eglGetConfigAttrib(m_display, config, EGL_COLOR_BUFFER_TYPE, &value);
123 qDebug() << "EGL_COLOR_BUFFER_TYPE:" << value;
124 eglGetConfigAttrib(m_display, config, EGL_CONFIG_CAVEAT, &value);
125 qDebug() << "EGL_CONFIG_CAVEAT:" << value;
126 eglGetConfigAttrib(m_display, config, EGL_CONFORMANT, &value);
127 qDebug() << "EGL_CONFORMANT:" << value;
128
129
130 eglGetConfigAttrib(m_display, config, EGL_LEVEL, &value);
131 qDebug() << "EGL_LEVEL:" << value;
132 eglGetConfigAttrib(m_display, config, EGL_LUMINANCE_SIZE, &value);
133 qDebug() << "EGL_LUMINANCE_SIZE:" << value;
134 eglGetConfigAttrib(m_display, config, EGL_MAX_PBUFFER_WIDTH, &value);
135 qDebug() << "EGL_MAX_PBUFFER_WIDTH:" << value;
136 eglGetConfigAttrib(m_display, config, EGL_MAX_PBUFFER_HEIGHT, &value);
137 qDebug() << "EGL_MAX_PBUFFER_HEIGHT:" << value;
138 eglGetConfigAttrib(m_display, config, EGL_MAX_PBUFFER_PIXELS, &value);
139 qDebug() << "EGL_MAX_PBUFFER_PIXELS:" << value;
140 eglGetConfigAttrib(m_display, config, EGL_MAX_SWAP_INTERVAL, &value);
141 qDebug() << "EGL_MAX_SWAP_INTERVAL:" << value;
142 eglGetConfigAttrib(m_display, config, EGL_MIN_SWAP_INTERVAL, &value);
143 qDebug() << "EGL_MIN_SWAP_INTERVAL:" << value;
144 eglGetConfigAttrib(m_display, config, EGL_NATIVE_RENDERABLE, &value);
145 qDebug() << "EGL_NATIVE_RENDERABLE:" << value;
146 eglGetConfigAttrib(m_display, config, EGL_NATIVE_VISUAL_ID, &value);
147 qDebug() << "EGL_NATIVE_VISUAL_ID:" << value;
148 eglGetConfigAttrib(m_display, config, EGL_NATIVE_VISUAL_TYPE, &value);
149 qDebug() << "EGL_NATIVE_VISUAL_TYPE:" << value;
150 eglGetConfigAttrib(m_display, config, EGL_RENDERABLE_TYPE, &value);
151 qDebug() << "EGL_RENDERABLE_TYPE:" << value;
152 eglGetConfigAttrib(m_display, config, EGL_SAMPLE_BUFFERS, &value);
153 qDebug() << "EGL_SAMPLE_BUFFERS:" << value;
154 eglGetConfigAttrib(m_display, config, EGL_SAMPLES, &value);
155 qDebug() << "EGL_SAMPLES:" << value;
156
157 eglGetConfigAttrib(m_display, config, EGL_SURFACE_TYPE, &value);
158 qDebug() << "EGL_SURFACE_TYPE:" << value;
159 eglGetConfigAttrib(m_display, config, EGL_TRANSPARENT_TYPE, &value);
160 qDebug() << "EGL_TRANSPARENT_TYPE:" << value;
161 eglGetConfigAttrib(m_display, config, EGL_TRANSPARENT_RED_VALUE, &value);
162 qDebug() << "EGL_TRANSPARENT_RED_VALUE:" << value;
163 eglGetConfigAttrib(m_display, config, EGL_TRANSPARENT_GREEN_VALUE, &value);
164 qDebug() << "EGL_TRANSPARENT_GREEN_VALUE:" << value;
165 eglGetConfigAttrib(m_display, config, EGL_TRANSPARENT_BLUE_VALUE, &value);
166 qDebug() << "EGL_TRANSPARENT_BLUE_VALUE:" << value;
167 }
168}
169
171{
172 VGErrorCode error;
173 EGLint eglError;
174 do {
175 error = vgGetError();
176 eglError = eglGetError();
177 qDebug() << "error: " << QString::number(error, 16);
178 qDebug() << "eglError: " << QString::number(eglError, 16);
179 } while (error != VG_NO_ERROR && eglError != EGL_SUCCESS);
180}
181
static QPlatformNativeInterface * platformNativeInterface()
\inmodule QtGui
Definition qimage.h:37
@ Format_RGB32
Definition qimage.h:46
QWindow * window() const
static void checkErrors()
QImage readFramebuffer(const QSize &size)
QOpenVGContext(QWindow *window)
The QPlatformNativeInterface class provides an abstraction for retrieving native resource handles.
virtual void * nativeResourceForWindow(const QByteArray &resource, QWindow *window)
\inmodule QtCore
Definition qsize.h:25
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:8084
\inmodule QtGui
Definition qwindow.h:63
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
EGLConfig config
typedef EGLSurface(EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)(EGLDisplay dpy
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
typedef EGLDisplay(EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC)(EGLenum platform
#define qDebug
[1]
Definition qlogging.h:164
#define qFatal
Definition qlogging.h:168
GLenum GLuint GLintptr GLsizeiptr size
[1]
aWidget window() -> setWindowTitle("New Window Title")
[2]