1 // Copyright 2014 Emil Velikov
3 // All rights reserved.
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
8 // - Redistributions of source code must retain the above copyright notice, this
9 // list of conditions and the following disclaimer.
11 // - Redistributions in binary form must reproduce the above copyright notice,
12 // this list of conditions and the following disclaimer in the documentation
13 // and/or other materials provided with the distribution.
15 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #include "wcore_platform.h"
31 #include "wcore_util.h"
33 struct wegl_platform
{
34 struct wcore_platform wcore
;
36 // EGL function pointers
39 EGLBoolean (*eglMakeCurrent
)(EGLDisplay dpy
, EGLSurface draw
,
40 EGLSurface read
, EGLContext ctx
);
41 __eglMustCastToProperFunctionPointerType
42 (*eglGetProcAddress
)(const char *procname
);
45 EGLDisplay (*eglGetDisplay
)(EGLNativeDisplayType display_id
);
46 EGLBoolean (*eglInitialize
)(EGLDisplay dpy
, EGLint
*major
, EGLint
*minor
);
47 const char * (*eglQueryString
)(EGLDisplay dpy
, EGLint name
);
48 EGLint (*eglGetError
)(void);
49 EGLBoolean (*eglTerminate
)(EGLDisplay dpy
);
52 EGLBoolean (*eglChooseConfig
)(EGLDisplay dpy
, const EGLint
*attrib_list
,
53 EGLConfig
*configs
, EGLint config_size
,
57 EGLBoolean (*eglBindAPI
)(EGLenum api
);
58 EGLContext (*eglCreateContext
)(EGLDisplay dpy
, EGLConfig config
,
59 EGLContext share_context
,
60 const EGLint
*attrib_list
);
61 EGLBoolean (*eglDestroyContext
)(EGLDisplay dpy
, EGLContext ctx
);
64 EGLBoolean (*eglGetConfigAttrib
)(EGLDisplay dpy
, EGLConfig config
,
65 EGLint attribute
, EGLint
*value
);
66 EGLSurface (*eglCreateWindowSurface
)(EGLDisplay dpy
, EGLConfig config
,
67 EGLNativeWindowType win
,
68 const EGLint
*attrib_list
);
69 EGLBoolean (*eglDestroySurface
)(EGLDisplay dpy
, EGLSurface surface
);
70 EGLBoolean (*eglSwapBuffers
)(EGLDisplay dpy
, EGLSurface surface
);
73 DEFINE_CONTAINER_CAST_FUNC(wegl_platform
,
75 struct wcore_platform
,
79 wegl_platform_teardown(struct wegl_platform
*self
);
82 wegl_platform_init(struct wegl_platform
*self
);