Files
godot-angle-static/util/OSWindow.h
Michael Spang 991d1cfb5e Vulkan: Port renderer to Fuchsia
Add DisplayVk and WindowSurfaceVk subclasses for Fuchsia to the vulkan
renderer, as well as an implementation of OSWindow that renders
fullscreen for the test suite.

Disallow use of the vulkan loader from third_party as Fuchsia uses a fork
of the loader and has not sent those changes upstream yet.

Add a small wayland-inspired library libfuchsia-egl to provide a type
"struct fuchsia_egl_window" to use as EGLNativeWindowType. This type
combines a zx_handle_t to an image pipe channel and a surface size.

Image pipes can only be used once to create a VkSurfaceKHR. This means we
have to recreate the pipe in tests that call eglCreateWindowSurface more
than once with a single OSWindow, or the second call will fail. Add a
resetNativeWindow() method to accomplish this.

BUG=angleproject:2475
TEST=angle_end2end_tests on Fuchsia

Change-Id: I71a613a362dd1c8aada49a3c02ae461e064457bf
Reviewed-on: https://chromium-review.googlesource.com/c/1446496
Commit-Queue: Michael Spang <spang@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
2019-02-11 22:51:25 +00:00

80 lines
2.3 KiB
C++

//
// Copyright (c) 2014 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.
//
// OSWindow:
// Operating system window integration base class.
#ifndef UTIL_OSWINDOW_H_
#define UTIL_OSWINDOW_H_
#include <stdint.h>
#include <list>
#include <string>
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include "util/Event.h"
#include "util/util_export.h"
class ANGLE_UTIL_EXPORT OSWindow
{
public:
static OSWindow *New();
static void Delete(OSWindow **osWindow);
virtual bool initialize(const std::string &name, size_t width, size_t height) = 0;
virtual void destroy() = 0;
int getX() const;
int getY() const;
int getWidth() const;
int getHeight() const;
// Takes a screenshot of the window, returning the result as a mWidth * mHeight * 4
// normalized unsigned byte BGRA array. Note that it will be used to test the window
// manager's behavior so it needs to take an actual screenshot of the screen and not
// just grab the pixels of the window. Returns if it was successful.
virtual bool takeScreenshot(uint8_t *pixelData);
// Re-initializes the native window. This is used on platforms which do not
// have a reusable EGLNativeWindowType in order to recreate it, and is
// needed by the test suite because it re-uses the same OSWindow for
// multiple EGLSurfaces.
virtual void resetNativeWindow() = 0;
virtual EGLNativeWindowType getNativeWindow() const = 0;
virtual EGLNativeDisplayType getNativeDisplay() const = 0;
virtual void messageLoop() = 0;
bool popEvent(Event *event);
virtual void pushEvent(Event event);
virtual void setMousePosition(int x, int y) = 0;
virtual bool setPosition(int x, int y) = 0;
virtual bool resize(int width, int height) = 0;
virtual void setVisible(bool isVisible) = 0;
virtual void signalTestEvent() = 0;
// Pops events look for the test event
bool didTestEventFire();
protected:
OSWindow();
virtual ~OSWindow();
friend ANGLE_UTIL_EXPORT void FreeOSWindow(OSWindow *window);
int mX;
int mY;
int mWidth;
int mHeight;
std::list<Event> mEvents;
};
#endif // UTIL_OSWINDOW_H_