blob: 2fafe0f994b82c0229e802f55fb7f266f1593934 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#include "flutter/fml/unique_object.h"
#include "flutter/impeller/toolkit/egl/egl.h"
namespace impeller {
// Simple holder of an EGLImage and the owning EGLDisplay.
struct EGLImageWithDisplay {
EGLImage image = EGL_NO_IMAGE;
EGLDisplay display = EGL_NO_DISPLAY;
constexpr bool operator==(const EGLImageWithDisplay& other) const {
return image == other.image && display == other.display;
}
constexpr bool operator!=(const EGLImageWithDisplay& other) const {
return !(*this == other);
}
};
struct EGLImageWithDisplayTraits {
static EGLImageWithDisplay InvalidValue() {
return {EGL_NO_IMAGE, EGL_NO_DISPLAY};
}
static bool IsValid(const EGLImageWithDisplay& value) {
return value != InvalidValue();
}
static void Free(EGLImageWithDisplay image) {
eglDestroyImage(image.display, image.image);
}
};
using UniqueEGLImage =
fml::UniqueObject<EGLImageWithDisplay, EGLImageWithDisplayTraits>;
// Simple holder of an EGLImageKHR and the owning EGLDisplay.
struct EGLImageKHRWithDisplay {
EGLImageKHR image = EGL_NO_IMAGE_KHR;
EGLDisplay display = EGL_NO_DISPLAY;
constexpr bool operator==(const EGLImageKHRWithDisplay& other) const {
return image == other.image && display == other.display;
}
constexpr bool operator!=(const EGLImageKHRWithDisplay& other) const {
return !(*this == other);
}
};
struct EGLImageKHRWithDisplayTraits {
static EGLImageKHRWithDisplay InvalidValue() {
return {EGL_NO_IMAGE_KHR, EGL_NO_DISPLAY};
}
static bool IsValid(const EGLImageKHRWithDisplay& value) {
return value != InvalidValue();
}
static void Free(EGLImageKHRWithDisplay image) {
eglDestroyImageKHR(image.display, image.image);
}
};
using UniqueEGLImageKHR =
fml::UniqueObject<EGLImageKHRWithDisplay, EGLImageKHRWithDisplayTraits>;
} // namespace impeller