1 #ifndef __eglplatform_h_ 2 #define __eglplatform_h_ 3 4 /* 5 ** Copyright 2007-2020 The Khronos Group Inc. 6 ** SPDX-License-Identifier: Apache-2.0 7 */ 8 9 /* Platform-specific types and definitions for egl.h 10 * 11 * Adopters may modify khrplatform.h and this file to suit their platform. 12 * You are encouraged to submit all modifications to the Khronos group so that 13 * they can be included in future versions of this file. Please submit changes 14 * by filing an issue or pull request on the public Khronos EGL Registry, at 15 * https://www.github.com/KhronosGroup/EGL-Registry/ 16 */ 17 18 #include <KHR/khrplatform.h> 19 20 /* Macros used in EGL function prototype declarations. 21 * 22 * EGL functions should be prototyped as: 23 * 24 * EGLAPI return-type EGLAPIENTRY eglFunction(arguments); 25 * typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments); 26 * 27 * KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h 28 */ 29 30 #ifndef EGLAPI 31 #define EGLAPI KHRONOS_APICALL 32 #endif 33 34 #ifndef EGLAPIENTRY 35 #define EGLAPIENTRY KHRONOS_APIENTRY 36 #endif 37 #define EGLAPIENTRYP EGLAPIENTRY* 38 39 /* The types NativeDisplayType, NativeWindowType, and NativePixmapType 40 * are aliases of window-system-dependent types, such as X Display * or 41 * Windows Device Context. They must be defined in platform-specific 42 * code below. The EGL-prefixed versions of Native*Type are the same 43 * types, renamed in EGL 1.3 so all types in the API start with "EGL". 44 * 45 * Khronos STRONGLY RECOMMENDS that you use the default definitions 46 * provided below, since these changes affect both binary and source 47 * portability of applications using EGL running on different EGL 48 * implementations. 49 */ 50 51 #if defined(EGL_NO_PLATFORM_SPECIFIC_TYPES) 52 53 typedef void *EGLNativeDisplayType; 54 typedef void *EGLNativePixmapType; 55 typedef void *EGLNativeWindowType; 56 57 #elif defined(OHOS_PLATFORM) 58 59 struct NativeWindow; 60 61 typedef void* EGLNativeDisplayType; 62 typedef void* EGLNativePixmapType; 63 typedef struct NativeWindow* EGLNativeWindowType; 64 65 #elif defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */ 66 #ifndef WIN32_LEAN_AND_MEAN 67 #define WIN32_LEAN_AND_MEAN 1 68 #endif 69 #include <windows.h> 70 71 typedef HDC EGLNativeDisplayType; 72 typedef HBITMAP EGLNativePixmapType; 73 typedef HWND EGLNativeWindowType; 74 75 #elif defined(__EMSCRIPTEN__) 76 77 typedef int EGLNativeDisplayType; 78 typedef int EGLNativePixmapType; 79 typedef int EGLNativeWindowType; 80 81 #elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */ 82 83 typedef int EGLNativeDisplayType; 84 typedef void *EGLNativePixmapType; 85 typedef void *EGLNativeWindowType; 86 87 #elif defined(WL_EGL_PLATFORM) 88 89 typedef struct wl_display *EGLNativeDisplayType; 90 typedef struct wl_egl_pixmap *EGLNativePixmapType; 91 typedef struct wl_egl_window *EGLNativeWindowType; 92 93 #elif defined(__GBM__) 94 95 typedef struct gbm_device *EGLNativeDisplayType; 96 typedef struct gbm_bo *EGLNativePixmapType; 97 typedef void *EGLNativeWindowType; 98 99 #elif defined(__ANDROID__) || defined(ANDROID) 100 101 struct ANativeWindow; 102 struct egl_native_pixmap_t; 103 104 typedef void* EGLNativeDisplayType; 105 typedef struct egl_native_pixmap_t* EGLNativePixmapType; 106 typedef struct ANativeWindow* EGLNativeWindowType; 107 108 #elif defined(USE_OZONE) 109 110 typedef intptr_t EGLNativeDisplayType; 111 typedef intptr_t EGLNativePixmapType; 112 typedef intptr_t EGLNativeWindowType; 113 114 #elif defined(USE_X11) 115 116 /* X11 (tentative) */ 117 #include <X11/Xlib.h> 118 #include <X11/Xutil.h> 119 120 typedef Display *EGLNativeDisplayType; 121 typedef Pixmap EGLNativePixmapType; 122 typedef Window EGLNativeWindowType; 123 124 #elif defined(__unix__) 125 126 typedef void *EGLNativeDisplayType; 127 typedef khronos_uintptr_t EGLNativePixmapType; 128 typedef khronos_uintptr_t EGLNativeWindowType; 129 130 #elif defined(__APPLE__) 131 132 typedef int EGLNativeDisplayType; 133 typedef void *EGLNativePixmapType; 134 typedef void *EGLNativeWindowType; 135 136 #elif defined(__HAIKU__) 137 138 #include <kernel/image.h> 139 140 typedef void *EGLNativeDisplayType; 141 typedef khronos_uintptr_t EGLNativePixmapType; 142 typedef khronos_uintptr_t EGLNativeWindowType; 143 144 #elif defined(__Fuchsia__) 145 146 typedef void *EGLNativeDisplayType; 147 typedef khronos_uintptr_t EGLNativePixmapType; 148 typedef khronos_uintptr_t EGLNativeWindowType; 149 150 #else 151 #error "Platform not recognized" 152 #endif 153 154 /* EGL 1.2 types, renamed for consistency in EGL 1.3 */ 155 typedef EGLNativeDisplayType NativeDisplayType; 156 typedef EGLNativePixmapType NativePixmapType; 157 typedef EGLNativeWindowType NativeWindowType; 158 159 160 /* Define EGLint. This must be a signed integral type large enough to contain 161 * all legal attribute names and values passed into and out of EGL, whether 162 * their type is boolean, bitmask, enumerant (symbolic constant), integer, 163 * handle, or other. While in general a 32-bit integer will suffice, if 164 * handles are 64 bit types, then EGLint should be defined as a signed 64-bit 165 * integer type. 166 */ 167 typedef khronos_int32_t EGLint; 168 169 170 /* C++ / C typecast macros for special EGL handle values */ 171 #if defined(__cplusplus) 172 #define EGL_CAST(type, value) (static_cast<type>(value)) 173 #else 174 #define EGL_CAST(type, value) ((type) (value)) 175 #endif 176 177 #endif /* __eglplatform_h */ 178