15 : QtWayland::ServerBuffer(qimage.size(),format)
16 , m_integration(integration)
17 , m_width(qimage.width())
18 , m_height(qimage.height())
19 , m_bpl(qimage.bytesPerLine())
24 m_shm_format = QtWaylandServer::qt_shm_emulation_server_buffer::format_RGBA32;
27 m_shm_format = QtWaylandServer::qt_shm_emulation_server_buffer::format_A8;
30 qWarning(
"ShmServerBuffer: unsupported format");
31 m_shm_format = QtWaylandServer::qt_shm_emulation_server_buffer::format_RGBA32;
35 QString key =
"qt_shm_emulation_" + QString::number(qimage.cacheKey());
37 QT_IGNORE_DEPRECATIONS(m_shm =
new QSharedMemory(key);)
38 qsizetype shm_size = qimage.sizeInBytes();
39 bool ok = m_shm->create(shm_size) && m_shm->lock();
41 memcpy(m_shm->data(), qimage.constBits(), shm_size);
44 qWarning() <<
"Could not create shared memory" << key << shm_size;
53struct ::wl_resource *
ShmServerBuffer::resourceForClient(
struct ::wl_client *client)
55 auto *bufferResource = resourceMap().value(client);
56 if (!bufferResource) {
57 auto integrationResource = m_integration->resourceMap().value(client);
58 if (!integrationResource) {
59 qWarning(
"ShmServerBuffer::resourceForClient: Trying to get resource for ServerBuffer. But client is not bound to the shm_emulation interface");
62 struct ::wl_resource *shm_integration_resource = integrationResource->handle;
63 Resource *resource = add(client, 1);
64 QT_IGNORE_DEPRECATIONS(
const QString shmKey = m_shm->key();)
65 m_integration->send_server_buffer_created(shm_integration_resource, resource->handle, shmKey, m_width, m_height, m_bpl, m_shm_format);
66 return resource->handle;
68 return bufferResource->handle;