/* * Copyright 2013 The Emscripten Authors. All rights reserved. * Emscripten is available under two separate licenses, the MIT license and the * University of Illinois/NCSA Open Source License. Both these licenses can be * found in the LICENSE file. */ #include #include #include #include static void die(const char *msg) { printf("%s\n", msg); abort(); } static void create_context(void) { EGLint num_config; EGLContext g_egl_ctx; EGLDisplay g_egl_dpy; EGLConfig g_config; static const EGLint attribute_list[] = { EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, EGL_ALPHA_SIZE, 8, EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_NONE }; static const EGLint context_attributes[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; g_egl_dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); if (!g_egl_dpy) die("failed to create display"); if (!eglInitialize(g_egl_dpy, NULL, NULL)) die("failed to initialize egl"); if (!eglChooseConfig(g_egl_dpy, attribute_list, &g_config, 1, &num_config)) die("failed to choose config"); g_egl_ctx = eglCreateContext(g_egl_dpy, g_config, EGL_NO_CONTEXT, context_attributes); if (!g_egl_ctx) die("failed to create context"); EGLNativeWindowType dummyWindow; EGLSurface surface = eglCreateWindowSurface(g_egl_dpy, g_config, dummyWindow, NULL); if (!surface) die("failed to create window surface"); if (!eglMakeCurrent(g_egl_dpy, surface, surface, g_egl_ctx)) die("failed to activate context"); } int main(int argc, char *argv[]) { unsigned i; create_context(); GLuint prog = glCreateProgram(); if (glGetError()) die("failed to create program"); GLuint vertex = glCreateShader(GL_VERTEX_SHADER); if (glGetError()) die("failed to create vertex shader"); glAttachShader(prog, vertex); GLuint fragment = glCreateShader(GL_FRAGMENT_SHADER); if (glGetError()) die("failed to create fragment shader"); glAttachShader(prog, fragment); GLuint shaders[2]; GLsizei count; glGetAttachedShaders(prog, 2, &count, shaders); if (glGetError()) die("failed to get attached shaders"); if (count != 2) die("unknown number of shaders returned"); if (shaders[0] == shaders[1]) die("returned identical shaders"); for (i = 0; i < count; i++) { if (shaders[i] == 0) die("returned 0"); if (shaders[i] != vertex && shaders[i] != fragment) die("unknown shader returned"); } REPORT_RESULT(1); return 0; }