135 строки
4.2 KiB
C
135 строки
4.2 KiB
C
#include <stdio.h>
|
|
#include <EGL/egl.h>
|
|
|
|
#include <GLES2/gl2.h>
|
|
|
|
int result = 1; // Success
|
|
#define assert(x) do { if (!(x)) {result = 0; printf("Assertion failure: %s in %s:%d!\n", #x, __FILE__, __LINE__); } } while(0)
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
|
assert(display != EGL_NO_DISPLAY);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
|
|
EGLint major = 0, minor = 0;
|
|
EGLBoolean ret = eglInitialize(display, &major, &minor);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
assert(ret == EGL_TRUE);
|
|
assert(major * 10000 + minor >= 10004);
|
|
|
|
EGLint numConfigs;
|
|
ret = eglGetConfigs(display, NULL, 0, &numConfigs);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
assert(ret == EGL_TRUE);
|
|
|
|
EGLint attribs[] = {
|
|
EGL_RED_SIZE, 5,
|
|
EGL_GREEN_SIZE, 6,
|
|
EGL_BLUE_SIZE, 5,
|
|
EGL_NONE
|
|
};
|
|
EGLConfig config;
|
|
ret = eglChooseConfig(display, attribs, &config, 1, &numConfigs);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
assert(ret == EGL_TRUE);
|
|
|
|
EGLNativeWindowType dummyWindow;
|
|
EGLSurface surface = eglCreateWindowSurface(display, config, dummyWindow, NULL);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
assert(surface != 0);
|
|
|
|
// WebGL maps to GLES2. GLES1 is not supported.
|
|
EGLint contextAttribsOld[] =
|
|
{
|
|
EGL_CONTEXT_CLIENT_VERSION, 1,
|
|
EGL_NONE
|
|
};
|
|
EGLContext context = eglCreateContext(display, config, NULL, contextAttribsOld);
|
|
assert(eglGetError() != EGL_SUCCESS);
|
|
|
|
//Test for invalid attribs
|
|
EGLint contextInvalidAttribs[] =
|
|
{
|
|
EGL_CONTEXT_CLIENT_VERSION, 2,
|
|
0xFFFF, -1,
|
|
EGL_NONE
|
|
};
|
|
context = eglCreateContext(display, config, NULL, contextInvalidAttribs);
|
|
assert(eglGetError() != EGL_SUCCESS);
|
|
assert(context == 0);
|
|
//Test for missing terminator
|
|
EGLint contextAttribsMissingTerm[] =
|
|
{
|
|
EGL_CONTEXT_CLIENT_VERSION, 2,
|
|
};
|
|
context = eglCreateContext(display, config, NULL, contextAttribsMissingTerm);
|
|
assert(eglGetError() != EGL_SUCCESS);
|
|
assert(context == 0);
|
|
//Test for null terminator
|
|
EGLint contextAttribsNullTerm[] =
|
|
{
|
|
EGL_CONTEXT_CLIENT_VERSION, 2,
|
|
0
|
|
};
|
|
context = eglCreateContext(display, config, NULL, contextAttribsNullTerm);
|
|
assert(eglGetError() != EGL_SUCCESS);
|
|
assert(context == 0);
|
|
//Test for invalid and null terminator
|
|
EGLint contextAttribsNullTermInvalid[] =
|
|
{
|
|
0,
|
|
};
|
|
context = eglCreateContext(display, config, NULL, contextAttribsNullTermInvalid);
|
|
assert(eglGetError() != EGL_SUCCESS);
|
|
assert(context == 0);
|
|
|
|
// The correct attributes, should create a good EGL context
|
|
EGLint contextAttribs[] =
|
|
{
|
|
EGL_CONTEXT_CLIENT_VERSION, 2,
|
|
EGL_NONE
|
|
};
|
|
context = eglCreateContext(display, config, NULL, contextAttribs);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
assert(context != 0);
|
|
|
|
assert(eglGetCurrentContext() == 0); // Creating a context does not yet activate it.
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
|
|
ret = eglMakeCurrent(display, surface, surface, context);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
assert(ret == EGL_TRUE);
|
|
assert(eglGetCurrentContext() == context);
|
|
assert(eglGetCurrentSurface(EGL_READ) == surface);
|
|
assert(eglGetCurrentSurface(EGL_DRAW) == surface);
|
|
|
|
ret = eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
assert(ret == EGL_TRUE);
|
|
assert(eglGetCurrentContext() == EGL_NO_CONTEXT);
|
|
assert(eglGetCurrentSurface(EGL_READ) == EGL_NO_SURFACE);
|
|
assert(eglGetCurrentSurface(EGL_DRAW) == EGL_NO_SURFACE);
|
|
|
|
assert(eglSwapInterval(display, 0) == EGL_TRUE);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
assert(eglSwapInterval(display, 1) == EGL_TRUE);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
assert(eglSwapInterval(display, 2) == EGL_TRUE);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
|
|
ret = eglTerminate(display);
|
|
assert(eglGetError() == EGL_SUCCESS);
|
|
assert(ret == EGL_TRUE);
|
|
|
|
assert(eglGetProcAddress("glClear") != 0);
|
|
assert(eglGetProcAddress("glWakaWaka") == 0);
|
|
|
|
glClearColor(1.0,0.0,0.0,0.5);
|
|
glClear(GL_COLOR_BUFFER_BIT);
|
|
|
|
#ifdef REPORT_RESULT
|
|
REPORT_RESULT();
|
|
#endif
|
|
}
|