forked from youtube/cobalt_sandbox
-
Notifications
You must be signed in to change notification settings - Fork 0
/
egl.h
369 lines (352 loc) · 14.9 KB
/
egl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
// Copyright 2019 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Module Overview: Starboard EGL API
//
// The EGL API provides an interface with accompanying type declarations and
// defines that together provide a single consistent method of EGL usage across
// platforms.
//
// This API is designed to abstract the differences between EGL implementations
// and versions on different systems, and to remove the requirement for any
// other code to directly pull in and use these system libraries.
//
// # EGL Version
//
// This API has the ability to support EGL 1.5, however it is not required to
// support anything beyond EGL 1.4. The user is responsible for ensuring that
// the functions from EGL 1.5 they are calling from the interface are valid.
#ifndef STARBOARD_EGL_H_
#define STARBOARD_EGL_H_
#include "starboard/configuration.h"
#include "starboard/export.h"
#include "starboard/log.h"
#include "starboard/types.h"
#ifdef __cplusplus
extern "C" {
#endif
// The following type definitions were adapted from the types declared in
// https://www.khronos.org/registry/EGL/api/EGL/eglplatform.h.
typedef int32_t SbEglInt32;
typedef intptr_t SbEglNativeDisplayType;
typedef intptr_t SbEglNativePixmapType;
typedef intptr_t SbEglNativeWindowType;
// The following type definitions were adapted from the types declared in
// https://www.khronos.org/registry/EGL/api/EGL/egl.h.
typedef void (*SbEglCastsToProperFunctionPointerType)(void);
typedef int64_t SbEglAttrib;
typedef uint32_t SbEglBoolean;
typedef void* SbEglClientBuffer;
typedef void* SbEglConfig;
typedef void* SbEglContext;
typedef void* SbEglDisplay;
typedef uint32_t SbEglEnum;
typedef void* SbEglImage;
typedef void* SbEglSurface;
typedef void* SbEglSync;
typedef uint64_t SbEglTime;
typedef struct SbEglInterface {
SbEglBoolean (*eglChooseConfig)(SbEglDisplay dpy,
const SbEglInt32* attrib_list,
SbEglConfig* configs,
SbEglInt32 config_size,
SbEglInt32* num_config);
SbEglBoolean (*eglCopyBuffers)(SbEglDisplay dpy,
SbEglSurface surface,
SbEglNativePixmapType target);
SbEglContext (*eglCreateContext)(SbEglDisplay dpy,
SbEglConfig config,
SbEglContext share_context,
const SbEglInt32* attrib_list);
SbEglSurface (*eglCreatePbufferSurface)(SbEglDisplay dpy,
SbEglConfig config,
const SbEglInt32* attrib_list);
SbEglSurface (*eglCreatePixmapSurface)(SbEglDisplay dpy,
SbEglConfig config,
SbEglNativePixmapType pixmap,
const SbEglInt32* attrib_list);
SbEglSurface (*eglCreateWindowSurface)(SbEglDisplay dpy,
SbEglConfig config,
SbEglNativeWindowType win,
const SbEglInt32* attrib_list);
SbEglBoolean (*eglDestroyContext)(SbEglDisplay dpy, SbEglContext ctx);
SbEglBoolean (*eglDestroySurface)(SbEglDisplay dpy, SbEglSurface surface);
SbEglBoolean (*eglGetConfigAttrib)(SbEglDisplay dpy,
SbEglConfig config,
SbEglInt32 attribute,
SbEglInt32* value);
SbEglBoolean (*eglGetConfigs)(SbEglDisplay dpy,
SbEglConfig* configs,
SbEglInt32 config_size,
SbEglInt32* num_config);
SbEglDisplay (*eglGetCurrentDisplay)(void);
SbEglSurface (*eglGetCurrentSurface)(SbEglInt32 readdraw);
SbEglDisplay (*eglGetDisplay)(SbEglNativeDisplayType display_id);
SbEglInt32 (*eglGetError)(void);
SbEglCastsToProperFunctionPointerType (*eglGetProcAddress)(
const char* procname);
SbEglBoolean (*eglInitialize)(SbEglDisplay dpy,
SbEglInt32* major,
SbEglInt32* minor);
SbEglBoolean (*eglMakeCurrent)(SbEglDisplay dpy,
SbEglSurface draw,
SbEglSurface read,
SbEglContext ctx);
SbEglBoolean (*eglQueryContext)(SbEglDisplay dpy,
SbEglContext ctx,
SbEglInt32 attribute,
SbEglInt32* value);
const char* (*eglQueryString)(SbEglDisplay dpy, SbEglInt32 name);
SbEglBoolean (*eglQuerySurface)(SbEglDisplay dpy,
SbEglSurface surface,
SbEglInt32 attribute,
SbEglInt32* value);
SbEglBoolean (*eglSwapBuffers)(SbEglDisplay dpy, SbEglSurface surface);
SbEglBoolean (*eglTerminate)(SbEglDisplay dpy);
SbEglBoolean (*eglWaitGL)(void);
SbEglBoolean (*eglWaitNative)(SbEglInt32 engine);
SbEglBoolean (*eglBindTexImage)(SbEglDisplay dpy,
SbEglSurface surface,
SbEglInt32 buffer);
SbEglBoolean (*eglReleaseTexImage)(SbEglDisplay dpy,
SbEglSurface surface,
SbEglInt32 buffer);
SbEglBoolean (*eglSurfaceAttrib)(SbEglDisplay dpy,
SbEglSurface surface,
SbEglInt32 attribute,
SbEglInt32 value);
SbEglBoolean (*eglSwapInterval)(SbEglDisplay dpy, SbEglInt32 interval);
SbEglBoolean (*eglBindAPI)(SbEglEnum api);
SbEglEnum (*eglQueryAPI)(void);
SbEglSurface (*eglCreatePbufferFromClientBuffer)(
SbEglDisplay dpy,
SbEglEnum buftype,
SbEglClientBuffer buffer,
SbEglConfig config,
const SbEglInt32* attrib_list);
SbEglBoolean (*eglReleaseThread)(void);
SbEglBoolean (*eglWaitClient)(void);
SbEglContext (*eglGetCurrentContext)(void);
SbEglSync (*eglCreateSync)(SbEglDisplay dpy,
SbEglEnum type,
const SbEglAttrib* attrib_list);
SbEglBoolean (*eglDestroySync)(SbEglDisplay dpy, SbEglSync sync);
SbEglInt32 (*eglClientWaitSync)(SbEglDisplay dpy,
SbEglSync sync,
SbEglInt32 flags,
SbEglTime timeout);
SbEglBoolean (*eglGetSyncAttrib)(SbEglDisplay dpy,
SbEglSync sync,
SbEglInt32 attribute,
SbEglAttrib* value);
SbEglImage (*eglCreateImage)(SbEglDisplay dpy,
SbEglContext ctx,
SbEglEnum target,
SbEglClientBuffer buffer,
const SbEglAttrib* attrib_list);
SbEglBoolean (*eglDestroyImage)(SbEglDisplay dpy, SbEglImage image);
SbEglDisplay (*eglGetPlatformDisplay)(SbEglEnum platform,
void* native_display,
const SbEglAttrib* attrib_list);
SbEglSurface (*eglCreatePlatformWindowSurface)(
SbEglDisplay dpy,
SbEglConfig config,
void* native_window,
const SbEglAttrib* attrib_list);
SbEglSurface (*eglCreatePlatformPixmapSurface)(
SbEglDisplay dpy,
SbEglConfig config,
void* native_pixmap,
const SbEglAttrib* attrib_list);
SbEglBoolean (*eglWaitSync)(SbEglDisplay dpy,
SbEglSync sync,
SbEglInt32 flags);
} SbEglInterface;
SB_EXPORT const SbEglInterface* SbGetEglInterface();
// All of the following were previously defined in
// https://www.khronos.org/registry/EGL/api/EGL/egl.h.
// EGL_VERSION_1_0
#define SB_EGL_ALPHA_SIZE 0x3021
#define SB_EGL_BAD_ACCESS 0x3002
#define SB_EGL_BAD_ALLOC 0x3003
#define SB_EGL_BAD_ATTRIBUTE 0x3004
#define SB_EGL_BAD_CONFIG 0x3005
#define SB_EGL_BAD_CONTEXT 0x3006
#define SB_EGL_BAD_CURRENT_SURFACE 0x3007
#define SB_EGL_BAD_DISPLAY 0x3008
#define SB_EGL_BAD_MATCH 0x3009
#define SB_EGL_BAD_NATIVE_PIXMAP 0x300A
#define SB_EGL_BAD_NATIVE_WINDOW 0x300B
#define SB_EGL_BAD_PARAMETER 0x300C
#define SB_EGL_BAD_SURFACE 0x300D
#define SB_EGL_BLUE_SIZE 0x3022
#define SB_EGL_BUFFER_SIZE 0x3020
#define SB_EGL_CONFIG_CAVEAT 0x3027
#define SB_EGL_CONFIG_ID 0x3028
#define SB_EGL_CORE_NATIVE_ENGINE 0x305B
#define SB_EGL_DEPTH_SIZE 0x3025
#define SB_EGL_DONT_CARE (SbEglInt32)(-1)
#define SB_EGL_DRAW 0x3059
#define SB_EGL_EXTENSIONS 0x3055
#define SB_EGL_FALSE 0
#define SB_EGL_GREEN_SIZE 0x3023
#define SB_EGL_HEIGHT 0x3056
#define SB_EGL_LARGEST_PBUFFER 0x3058
#define SB_EGL_LEVEL 0x3029
#define SB_EGL_MAX_PBUFFER_HEIGHT 0x302A
#define SB_EGL_MAX_PBUFFER_PIXELS 0x302B
#define SB_EGL_MAX_PBUFFER_WIDTH 0x302C
#define SB_EGL_NATIVE_RENDERABLE 0x302D
#define SB_EGL_NATIVE_VISUAL_ID 0x302E
#define SB_EGL_NATIVE_VISUAL_TYPE 0x302F
#define SB_EGL_NONE 0x3038
#define SB_EGL_NON_CONFORMANT_CONFIG 0x3051
#define SB_EGL_NOT_INITIALIZED 0x3001
#define SB_EGL_NO_CONTEXT (SbEglContext)(0)
#define SB_EGL_NO_DISPLAY (SbEglDisplay)(0)
#define SB_EGL_NO_SURFACE (SbEglSurface)(0)
#define SB_EGL_PBUFFER_BIT 0x0001
#define SB_EGL_PIXMAP_BIT 0x0002
#define SB_EGL_READ 0x305A
#define SB_EGL_RED_SIZE 0x3024
#define SB_EGL_SAMPLES 0x3031
#define SB_EGL_SAMPLE_BUFFERS 0x3032
#define SB_EGL_SLOW_CONFIG 0x3050
#define SB_EGL_STENCIL_SIZE 0x3026
#define SB_EGL_SUCCESS 0x3000
#define SB_EGL_SURFACE_TYPE 0x3033
#define SB_EGL_TRANSPARENT_BLUE_VALUE 0x3035
#define SB_EGL_TRANSPARENT_GREEN_VALUE 0x3036
#define SB_EGL_TRANSPARENT_RED_VALUE 0x3037
#define SB_EGL_TRANSPARENT_RGB 0x3052
#define SB_EGL_TRANSPARENT_TYPE 0x3034
#define SB_EGL_TRUE 1
#define SB_EGL_VENDOR 0x3053
#define SB_EGL_VERSION 0x3054
#define SB_EGL_WIDTH 0x3057
#define SB_EGL_WINDOW_BIT 0x0004
// EGL_VERSION_1_1
#define SB_EGL_BACK_BUFFER 0x3084
#define SB_EGL_BIND_TO_TEXTURE_RGB 0x3039
#define SB_EGL_BIND_TO_TEXTURE_RGBA 0x303A
#define SB_EGL_CONTEXT_LOST 0x300E
#define SB_EGL_MIN_SWAP_INTERVAL 0x303B
#define SB_EGL_MAX_SWAP_INTERVAL 0x303C
#define SB_EGL_MIPMAP_TEXTURE 0x3082
#define SB_EGL_MIPMAP_LEVEL 0x3083
#define SB_EGL_NO_TEXTURE 0x305C
#define SB_EGL_TEXTURE_2D 0x305F
#define SB_EGL_TEXTURE_FORMAT 0x3080
#define SB_EGL_TEXTURE_RGB 0x305D
#define SB_EGL_TEXTURE_RGBA 0x305E
#define SB_EGL_TEXTURE_TARGET 0x3081
// EGL_VERSION_1_2
#define SB_EGL_ALPHA_FORMAT 0x3088
#define SB_EGL_ALPHA_FORMAT_NONPRE 0x308B
#define SB_EGL_ALPHA_FORMAT_PRE 0x308C
#define SB_EGL_ALPHA_MASK_SIZE 0x303E
#define SB_EGL_BUFFER_PRESERVED 0x3094
#define SB_EGL_BUFFER_DESTROYED 0x3095
#define SB_EGL_CLIENT_APIS 0x308D
#define SB_EGL_COLORSPACE 0x3087
#define SB_EGL_COLORSPACE_sRGB 0x3089
#define SB_EGL_COLORSPACE_LINEAR 0x308A
#define SB_EGL_COLOR_BUFFER_TYPE 0x303F
#define SB_EGL_CONTEXT_CLIENT_TYPE 0x3097
#define SB_EGL_DISPLAY_SCALING 10000
#define SB_EGL_HORIZONTAL_RESOLUTION 0x3090
#define SB_EGL_LUMINANCE_BUFFER 0x308F
#define SB_EGL_LUMINANCE_SIZE 0x303D
#define SB_EGL_OPENGL_ES_BIT 0x0001
#define SB_EGL_OPENVG_BIT 0x0002
#define SB_EGL_OPENGL_ES_API 0x30A0
#define SB_EGL_OPENVG_API 0x30A1
#define SB_EGL_OPENVG_IMAGE 0x3096
#define SB_EGL_PIXEL_ASPECT_RATIO 0x3092
#define SB_EGL_RENDERABLE_TYPE 0x3040
#define SB_EGL_RENDER_BUFFER 0x3086
#define SB_EGL_RGB_BUFFER 0x308E
#define SB_EGL_SINGLE_BUFFER 0x3085
#define SB_EGL_SWAP_BEHAVIOR 0x3093
#define SB_EGL_UNKNOWN (SbEglInt) - 1
#define SB_EGL_VERTICAL_RESOLUTION 0x3091
// EGL_VERSION_1_3
#define SB_EGL_CONFORMANT 0x3042
#define SB_EGL_CONTEXT_CLIENT_VERSION 0x3098
#define SB_EGL_MATCH_NATIVE_PIXMAP 0x3041
#define SB_EGL_OPENGL_ES2_BIT 0x0004
#define SB_EGL_VG_ALPHA_FORMAT 0x3088
#define SB_EGL_VG_ALPHA_FORMAT_NONPRE 0x308B
#define SB_EGL_VG_ALPHA_FORMAT_PRE 0x308C
#define SB_EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040
#define SB_EGL_VG_COLORSPACE 0x3087
#define SB_EGL_VG_COLORSPACE_sRGB 0x3089
#define SB_EGL_VG_COLORSPACE_LINEAR 0x308A
#define SB_EGL_VG_COLORSPACE_LINEAR_BIT 0x0020
// EGL_VERSION_1_4
#define SB_EGL_DEFAULT_DISPLAY (SbEglNativeDisplayType)(0)
#define SB_EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200
#define SB_EGL_MULTISAMPLE_RESOLVE 0x3099
#define SB_EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A
#define SB_EGL_MULTISAMPLE_RESOLVE_BOX 0x309B
#define SB_EGL_OPENGL_API 0x30A2
#define SB_EGL_OPENGL_BIT 0x0008
#define SB_EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400
// EGL_VERSION_1_5
#define SB_EGL_CONTEXT_MAJOR_VERSION 0x3098
#define SB_EGL_CONTEXT_MINOR_VERSION 0x30FB
#define SB_EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD
#define SB_EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD
#define SB_EGL_NO_RESET_NOTIFICATION 0x31BE
#define SB_EGL_LOSE_CONTEXT_ON_RESET 0x31BF
#define SB_EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001
#define SB_EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002
#define SB_EGL_CONTEXT_OPENGL_DEBUG 0x31B0
#define SB_EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1
#define SB_EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2
#define SB_EGL_OPENGL_ES3_BIT 0x00000040
#define SB_EGL_CL_EVENT_HANDLE 0x309C
#define SB_EGL_SYNC_CL_EVENT 0x30FE
#define SB_EGL_SYNC_CL_EVENT_COMPLETE 0x30FF
#define SB_EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0
#define SB_EGL_SYNC_TYPE 0x30F7
#define SB_EGL_SYNC_STATUS 0x30F1
#define SB_EGL_SYNC_CONDITION 0x30F8
#define SB_EGL_SIGNALED 0x30F2
#define SB_EGL_UNSIGNALED 0x30F3
#define SB_EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001
#define SB_EGL_FOREVER 0xFFFFFFFFFFFFFFFFull
#define SB_EGL_TIMEOUT_EXPIRED 0x30F5
#define SB_EGL_CONDITION_SATISFIED 0x30F6
#define SB_EGL_NO_SYNC (SbEglSync)(0)
#define SB_EGL_SYNC_FENCE 0x30F9
#define SB_EGL_GL_COLORSPACE 0x309D
#define SB_EGL_GL_COLORSPACE_SRGB 0x3089
#define SB_EGL_GL_COLORSPACE_LINEAR 0x308A
#define SB_EGL_GL_RENDERBUFFER 0x30B9
#define SB_EGL_GL_TEXTURE_2D 0x30B1
#define SB_EGL_GL_TEXTURE_LEVEL 0x30BC
#define SB_EGL_GL_TEXTURE_3D 0x30B2
#define SB_EGL_GL_TEXTURE_ZOFFSET 0x30BD
#define SB_EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3
#define SB_EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4
#define SB_EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5
#define SB_EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6
#define SB_EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7
#define SB_EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8
#define SB_EGL_IMAGE_PRESERVED 0x30D2
#define SB_EGL_NO_IMAGE (SbEglImage)(0)
#ifdef __cplusplus
} // extern "C"
#endif
#endif // STARBOARD_EGL_H_