Files
godot-angle-static/util/linux/x11/X11Pixmap.cpp
Antonio Caggiano e0dd196a0e Re-land: "Vulkan: Support Wayland"
Implement DisplayVkWayland and WindowSurfaceVkWayland. Get window size
from native window and check egl config is just empty. An EGL wayland
test is added for testing rendering and buffers swapping.

Re-land fixes link failure in systems with no libwayland installed.

Bug: angleproject:6902
Change-Id: I4f091d4f479a537d0390caedce88a5d39f8b356f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3608088
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
2022-05-02 14:34:11 +00:00

58 lines
1.3 KiB
C++

//
// Copyright 2015 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// X11Pixmap.cpp: Implementation of OSPixmap for X11
#include "util/linux/x11/X11Pixmap.h"
X11Pixmap::X11Pixmap() : mPixmap(0), mDisplay(nullptr) {}
X11Pixmap::~X11Pixmap()
{
if (mPixmap)
{
XFreePixmap(mDisplay, mPixmap);
}
}
bool X11Pixmap::initialize(EGLNativeDisplayType display,
size_t width,
size_t height,
int nativeVisual)
{
mDisplay = reinterpret_cast<Display *>(display);
int screen = DefaultScreen(mDisplay);
Window root = RootWindow(mDisplay, screen);
int depth = 0;
XVisualInfo visualTemplate;
visualTemplate.visualid = nativeVisual;
int numVisuals = 0;
XVisualInfo *info = XGetVisualInfo(mDisplay, VisualIDMask, &visualTemplate, &numVisuals);
if (numVisuals == 1)
{
depth = info->depth;
}
XFree(info);
mPixmap = XCreatePixmap(mDisplay, root, static_cast<unsigned int>(width),
static_cast<unsigned int>(height), depth);
return mPixmap != 0;
}
EGLNativePixmapType X11Pixmap::getNativePixmap() const
{
return mPixmap;
}
OSPixmap *CreateOSPixmap()
{
return new X11Pixmap();
}