blob: 04782fe70765239a27f405a6c0b5603f908df73c [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "fuchsia_egl.h"
#include "fuchsia_egl_backend.h"
#include <zircon/assert.h>
#include <zircon/syscalls.h>
#include <stdlib.h>
#define FUCHSIA_EGL_WINDOW_MAGIC 0x80738870 // "FXIP"
struct fuchsia_egl_window
{
uint32_t magic;
zx_handle_t image_pipe_handle;
int32_t width;
int32_t height;
};
fuchsia_egl_window *fuchsia_egl_window_create(zx_handle_t image_pipe_handle,
int32_t width,
int32_t height)
{
if (width <= 0 || height <= 0)
return NULL;
fuchsia_egl_window *egl_window = malloc(sizeof(*egl_window));
egl_window->magic = FUCHSIA_EGL_WINDOW_MAGIC;
egl_window->image_pipe_handle = image_pipe_handle;
egl_window->width = width;
egl_window->height = height;
return egl_window;
}
void fuchsia_egl_window_destroy(fuchsia_egl_window *egl_window)
{
ZX_ASSERT(egl_window->magic == FUCHSIA_EGL_WINDOW_MAGIC);
if (egl_window->image_pipe_handle != ZX_HANDLE_INVALID)
{
zx_handle_close(egl_window->image_pipe_handle);
egl_window->image_pipe_handle = ZX_HANDLE_INVALID;
}
egl_window->magic = -1U;
free(egl_window);
}
void fuchsia_egl_window_resize(fuchsia_egl_window *egl_window, int32_t width, int32_t height)
{
ZX_ASSERT(egl_window->magic == FUCHSIA_EGL_WINDOW_MAGIC);
if (width <= 0 || height <= 0)
return;
egl_window->width = width;
egl_window->height = height;
}
int32_t fuchsia_egl_window_get_width(fuchsia_egl_window *egl_window)
{
ZX_ASSERT(egl_window->magic == FUCHSIA_EGL_WINDOW_MAGIC);
return egl_window->width;
}
int32_t fuchsia_egl_window_get_height(fuchsia_egl_window *egl_window)
{
ZX_ASSERT(egl_window->magic == FUCHSIA_EGL_WINDOW_MAGIC);
return egl_window->height;
}
zx_handle_t fuchsia_egl_window_release_image_pipe(fuchsia_egl_window *egl_window)
{
ZX_ASSERT(egl_window->magic == FUCHSIA_EGL_WINDOW_MAGIC);
zx_handle_t image_pipe_handle = egl_window->image_pipe_handle;
egl_window->image_pipe_handle = ZX_HANDLE_INVALID;
return image_pipe_handle;
}