2
* Copyright © 2012 Canonical Ltd.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU General Public License version 3,
6
* as published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
* Authored by: Thomas Voss <thomas.voss@canonical.com>
19
#ifndef MIR_TEST_DOUBLES_MOCK_EGL_H_
20
#define MIR_TEST_DOUBLES_MOCK_EGL_H_
22
#include <gmock/gmock.h>
24
#define GL_GLEXT_PROTOTYPES
25
#define EGL_EGLEXT_PROTOTYPES
27
#include <EGL/eglext.h>
29
#include <GLES2/gl2.h>
30
#include <GLES2/gl2ext.h>
39
MATCHER_P(AttrMatches, val, std::string("matches"))
42
while ((val[i] != EGL_NONE) && (arg[i] != EGL_NONE))
49
if ((val[i] == EGL_NONE) && (arg[i] == EGL_NONE))
56
MATCHER_P2(EGLConfigContainsAttrib, attrib, value, "")
58
bool attrib_position = true;
59
bool attrib_found = false;
61
while (!attrib_position || *arg != EGL_NONE)
63
if (attrib_position && *arg == attrib)
67
else if (!attrib_position)
69
if (attrib_found && *arg == value)
76
attrib_position = !attrib_position;
89
void provide_egl_extensions();
91
typedef void (*generic_function_pointer_t)(void);
93
MOCK_METHOD1(eglGetDisplay, EGLDisplay(NativeDisplayType));
94
MOCK_METHOD3(eglInitialize, EGLBoolean(EGLDisplay,EGLint*,EGLint*));
95
MOCK_METHOD1(eglTerminate, EGLBoolean(EGLDisplay));
96
MOCK_METHOD2(eglQueryString,const char*(EGLDisplay, EGLint));
97
MOCK_METHOD1(eglBindApi, EGLBoolean(EGLenum));
98
MOCK_METHOD1(eglGetProcAddress,generic_function_pointer_t(const char*));
101
MOCK_METHOD4(eglGetConfigs, EGLBoolean(EGLDisplay,EGLConfig*,EGLint,EGLint*));
102
MOCK_METHOD5(eglChooseConfig, EGLBoolean(EGLDisplay, const EGLint*,EGLConfig*,EGLint,EGLint*));
103
MOCK_METHOD4(eglGetConfigAttrib, EGLBoolean(EGLDisplay,EGLConfig,EGLint,EGLint*));
105
// Surface management
106
MOCK_METHOD4(eglCreateWindowSurface, EGLSurface(EGLDisplay,EGLConfig,NativeWindowType,const EGLint*));
107
MOCK_METHOD4(eglCreatePixmapSurface, EGLSurface(EGLDisplay,EGLConfig,NativePixmapType,const EGLint*));
108
MOCK_METHOD3(eglCreatePbufferSurface, EGLSurface(EGLDisplay,EGLConfig,const EGLint*));
109
MOCK_METHOD2(eglDestroySurface, EGLBoolean(EGLDisplay,EGLSurface));
110
MOCK_METHOD4(eglQuerySurface, EGLBoolean(EGLDisplay,EGLSurface,EGLint,EGLint*));
112
// EGL 1.1 render-to-texture APIs
113
MOCK_METHOD4(eglSurfaceAttrib, EGLBoolean(EGLDisplay,EGLSurface,EGLint,EGLint));
114
MOCK_METHOD3(eglBindTexImage, EGLBoolean(EGLDisplay,EGLSurface,EGLint));
115
MOCK_METHOD3(eglReleaseTexImage, EGLBoolean(EGLDisplay,EGLSurface,EGLint));
117
// EGL 1.1 swap control API
118
MOCK_METHOD2(eglSwapInterval, EGLBoolean(EGLDisplay,EGLint));
120
MOCK_METHOD4(eglCreateContext, EGLContext(EGLDisplay,EGLConfig,EGLContext,const EGLint*));
121
MOCK_METHOD2(eglDestroyContext, EGLBoolean(EGLDisplay,EGLContext));
122
MOCK_METHOD4(eglMakeCurrent, EGLBoolean(EGLDisplay,EGLSurface,EGLSurface,EGLContext));
123
MOCK_METHOD0(eglGetCurrentContext,EGLContext());
124
MOCK_METHOD1(eglGetCurrentSurface,EGLSurface(EGLint));
125
MOCK_METHOD0(eglGetCurrentDisplay, EGLDisplay());
126
MOCK_METHOD4(eglQueryContext, EGLBoolean(EGLDisplay,EGLContext,EGLint,EGLint*));
128
MOCK_METHOD0(eglWaitGL, EGLBoolean());
129
MOCK_METHOD1(eglWaitNative, EGLBoolean(EGLint));
130
MOCK_METHOD2(eglSwapBuffers, EGLBoolean(EGLDisplay,EGLSurface));
131
MOCK_METHOD3(eglCopyBuffers, EGLBoolean(EGLDisplay,EGLSurface,NativePixmapType));
133
MOCK_METHOD0(eglGetError, EGLint (void));
135
MOCK_METHOD5(eglCreateImageKHR, EGLImageKHR(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, const EGLint*));
136
MOCK_METHOD2(eglDestroyImageKHR,EGLBoolean(EGLDisplay, EGLImageKHR));
137
MOCK_METHOD2(glEGLImageTargetTexture2DOES, void(GLenum, GLeglImageOES));
139
EGLDisplay fake_egl_display;
140
EGLConfig* fake_configs;
141
EGLint fake_configs_num;
142
EGLSurface fake_egl_surface;
143
EGLContext fake_egl_context;
144
EGLImageKHR fake_egl_image;
152
#endif /* MIR_TEST_DOUBLES_MOCK_EGL_H_ */