mirror of
https://github.com/glfw/glfw.git
synced 2026-02-17 13:02:33 +01:00
152 lines
5.8 KiB
C
152 lines
5.8 KiB
C
//========================================================================
|
|
// GLFW 3.3 EGLDevice - www.glfw.org
|
|
//------------------------------------------------------------------------
|
|
// Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would
|
|
// be appreciated but is not required.
|
|
//
|
|
// 2. Altered source versions must be plainly marked as such, and must not
|
|
// be misrepresented as being the original software.
|
|
//
|
|
// 3. This notice may not be removed or altered from any source
|
|
// distribution.
|
|
//
|
|
//========================================================================
|
|
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/time.h>
|
|
#include <sys/select.h>
|
|
#include <sys/mman.h>
|
|
|
|
#include <fcntl.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <ctype.h>
|
|
#include <assert.h>
|
|
#include <math.h>
|
|
#include <stdbool.h>
|
|
|
|
#include <dlfcn.h>
|
|
#include <xf86drm.h>
|
|
#include <xf86drmMode.h>
|
|
#include <drm_fourcc.h>
|
|
|
|
#include "posix_time.h"
|
|
#include "linux_joystick.h"
|
|
#include "posix_thread.h"
|
|
#include "egl_context.h"
|
|
#include "osmesa_context.h"
|
|
|
|
#define EGL_NO_DEVICE_EXT ((EGLDeviceEXT) 0)
|
|
#define EGL_DRM_DEVICE_FILE_EXT 0x3233
|
|
#define EGL_PLATFORM_DEVICE_EXT 0x313f
|
|
#define EGL_DRM_MASTER_FD_EXT 0x333c
|
|
#define EGL_STREAM_FIFO_LENGTH_KHR 0x31fc
|
|
#define EGL_DRM_CRTC_EXT 0x3234
|
|
#define EGL_NO_STREAM_KHR ((EGLStreamKHR) 0)
|
|
#define EGL_STREAM_BIT_KHR 0x0800
|
|
|
|
typedef void* EGLOutputLayerEXT;
|
|
typedef void* EGLStreamKHR;
|
|
typedef void* EGLDeviceEXT;
|
|
|
|
typedef EGLBoolean (EGLAPIENTRY * PFNEGLQUERYDEVICESEXTPROC)(EGLint,EGLDeviceEXT*,EGLint*);
|
|
typedef const char *(EGLAPIENTRY * PFNEGLQUERYDEVICESTRINGEXTPROC)(EGLDeviceEXT,EGLint);
|
|
typedef EGLDisplay (EGLAPIENTRY * PFNEGLGETPLATFORMDISPLAYEXTPROC)(EGLenum,void*,const EGLint*);
|
|
typedef EGLBoolean (EGLAPIENTRY * PFNEGLGETOUTPUTLAYERSEXTPROC)(EGLDisplay,const EGLAttrib*,EGLOutputLayerEXT*,EGLint,EGLint*);
|
|
typedef EGLStreamKHR (EGLAPIENTRY * PFNEGLCREATESTREAMKHRPROC)(EGLDisplay,const EGLint*);
|
|
typedef EGLBoolean (EGLAPIENTRY * PFNEGLDESTROYSTREAMKHRPROC)(EGLDisplay,EGLStreamKHR);
|
|
typedef EGLBoolean (EGLAPIENTRY * PFNEGLSTREAMCONSUMEROUTPUTEXTPROC)(EGLDisplay,EGLStreamKHR,EGLOutputLayerEXT);
|
|
typedef EGLSurface (EGLAPIENTRY * PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)(EGLDisplay,EGLConfig,EGLStreamKHR,const EGLint*);
|
|
typedef EGLBoolean (EGLAPIENTRY * PFNEGLSTREAMATTRIBKHRPROC)(EGLDisplay,EGLStreamKHR,EGLenum,EGLint);
|
|
typedef EGLBoolean (EGLAPIENTRY * PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC)(EGLDisplay,EGLStreamKHR,const EGLAttrib*);
|
|
#define eglQueryDevicesEXT _glfw.egldevice.QueryDevicesEXT
|
|
#define eglQueryDeviceStringEXT _glfw.egldevice.QueryDeviceStringEXT
|
|
#define eglGetPlatformDisplayEXT _glfw.egldevice.GetPlatformDisplayEXT
|
|
#define eglGetOutputLayersEXT _glfw.egldevice.GetOutputLayersEXT
|
|
#define eglCreateStreamKHR _glfw.egldevice.CreateStreamKHR
|
|
#define eglDestroyStreamKHR _glfw.egldevice.DestroyStreamKHR
|
|
#define eglStreamConsumerOutputEXT _glfw.egldevice.StreamConsumerOutputEXT
|
|
#define eglCreateStreamProducerSurfaceKHR _glfw.egldevice.CreateStreamProducerSurfaceKHR
|
|
#define eglStreamAttribKHR _glfw.egldevice.StreamAttribKHR
|
|
#define eglStreamConsumerAcquireAttribKHR _glfw.egldevice.StreamConsumerAcquireAttribKHR
|
|
|
|
#define _glfw_dlopen(name) dlopen(name, RTLD_LAZY | RTLD_LOCAL)
|
|
#define _glfw_dlclose(handle) dlclose(handle)
|
|
#define _glfw_dlsym(handle, name) dlsym(handle, name)
|
|
|
|
#define _GLFW_EGL_NATIVE_DISPLAY EGL_DEFAULT_DISPLAY
|
|
#define _GLFW_EGL_NATIVE_WINDOW ((EGLNativeWindowType)window->egldevice.handle)
|
|
|
|
#define _GLFW_PLATFORM_WINDOW_STATE _GLFWwindowEGLDevice egldevice
|
|
#define _GLFW_PLATFORM_LIBRARY_WINDOW_STATE _GLFWlibraryEGLDevice egldevice
|
|
#define _GLFW_PLATFORM_MONITOR_STATE _GLFWmonitorEGLDevice egldevice
|
|
#define _GLFW_PLATFORM_CURSOR_STATE _GLFWcursorEGLDevice egldevice
|
|
|
|
#define _GLFW_PLATFORM_CONTEXT_STATE
|
|
#define _GLFW_PLATFORM_LIBRARY_CONTEXT_STATE
|
|
|
|
// EGLDevice-specific per-window data
|
|
//
|
|
typedef struct _GLFWwindowEGLDevice
|
|
{
|
|
int xsurfsize, ysurfsize;
|
|
int xoffset, yoffset;
|
|
int fifo;
|
|
|
|
uint32_t planeId;
|
|
|
|
EGLDisplay handle;
|
|
EGLOutputLayerEXT eglLayer;
|
|
EGLStreamKHR eglStream;
|
|
} _GLFWwindowEGLDevice;
|
|
|
|
// EGLDevice-specific global data
|
|
//
|
|
typedef struct _GLFWlibraryEGLDevice
|
|
{
|
|
int drmFd;
|
|
|
|
PFNEGLQUERYDEVICESEXTPROC QueryDevicesEXT;
|
|
PFNEGLQUERYDEVICESTRINGEXTPROC QueryDeviceStringEXT;
|
|
PFNEGLGETPLATFORMDISPLAYEXTPROC GetPlatformDisplayEXT;
|
|
PFNEGLGETOUTPUTLAYERSEXTPROC GetOutputLayersEXT;
|
|
PFNEGLCREATESTREAMKHRPROC CreateStreamKHR;
|
|
PFNEGLDESTROYSTREAMKHRPROC DestroyStreamKHR;
|
|
PFNEGLSTREAMCONSUMEROUTPUTEXTPROC StreamConsumerOutputEXT;
|
|
PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC CreateStreamProducerSurfaceKHR;
|
|
PFNEGLSTREAMATTRIBKHRPROC StreamAttribKHR;
|
|
PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC StreamConsumerAcquireAttribKHR;
|
|
} _GLFWlibraryEGLDevice;
|
|
|
|
// EGLDevice-specific per-monitor data
|
|
//
|
|
typedef struct _GLFWmonitorEGLDevice
|
|
{
|
|
int crtcIndex;
|
|
uint32_t connId, encId, crtcId;
|
|
} _GLFWmonitorEGLDevice;
|
|
|
|
// EGLDevice-specific per-cursor data
|
|
//
|
|
typedef struct _GLFWcursorEGLDevice
|
|
{
|
|
} _GLFWcursorEGLDevice;
|
|
|
|
void _glfwPollMonitorsEGLDevice(void);
|
|
|