// 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"

#if SB_API_VERSION >= 11

#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  // SB_API_VERSION >= 11

#endif  // STARBOARD_EGL_H_
