EGLBoolean __stdcall eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx) { EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface draw = 0x%0.8p, EGLSurface read = 0x%0.8p, EGLContext ctx = 0x%0.8p)", dpy, draw, read, ctx); try { egl::Display *display = static_cast<egl::Display*>(dpy); gl::Context *context = static_cast<gl::Context*>(ctx); IDirect3DDevice9 *device = display->getDevice(); if (!device || display->testDeviceLost()) { display->notifyDeviceLost(); return EGL_FALSE; } if (display->isDeviceLost()) { return error(EGL_CONTEXT_LOST, EGL_FALSE); } if (ctx != EGL_NO_CONTEXT && !validateContext(display, context)) { return EGL_FALSE; } if ((draw != EGL_NO_SURFACE && !validateSurface(display, static_cast<egl::Surface*>(draw))) || (read != EGL_NO_SURFACE && !validateSurface(display, static_cast<egl::Surface*>(read)))) { return EGL_FALSE; } if (draw != read) { UNIMPLEMENTED(); // FIXME } egl::Surface* previousDraw = static_cast<egl::Surface*>(egl::getCurrentDrawSurface()); egl::Surface* previousRead = static_cast<egl::Surface*>(egl::getCurrentReadSurface()); egl::setCurrentDisplay(dpy); egl::setCurrentDrawSurface(draw); egl::setCurrentReadSurface(read); glMakeCurrent(context, display, static_cast<egl::Surface*>(draw)); return success(EGL_TRUE); } catch(std::bad_alloc&) { return error(EGL_BAD_ALLOC, EGL_FALSE); } return EGL_FALSE; }
EGLBoolean __stdcall eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx) { EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface draw = 0x%0.8p, EGLSurface read = 0x%0.8p, EGLContext ctx = 0x%0.8p)", dpy, draw, read, ctx); ANGLE_TRY { egl::Display *display = static_cast<egl::Display*>(dpy); gl::Context *context = static_cast<gl::Context*>(ctx); if (ctx != EGL_NO_CONTEXT && !validateContext(display, context)) { return EGL_FALSE; } if (dpy != EGL_NO_DISPLAY) { rx::Renderer *renderer = display->getRenderer(); if (renderer->testDeviceLost(true)) { return EGL_FALSE; } if (renderer->isDeviceLost()) { return egl::error(EGL_CONTEXT_LOST, EGL_FALSE); } } if ((draw != EGL_NO_SURFACE && !validateSurface(display, static_cast<egl::Surface*>(draw))) || (read != EGL_NO_SURFACE && !validateSurface(display, static_cast<egl::Surface*>(read)))) { return EGL_FALSE; } if (draw != read) { UNIMPLEMENTED(); // FIXME } egl::setCurrentDisplay(dpy); egl::setCurrentDrawSurface(draw); egl::setCurrentReadSurface(read); glMakeCurrent(context, display, static_cast<egl::Surface*>(draw)); return egl::success(EGL_TRUE); } ANGLE_CATCH_ALL { return egl::error(EGL_BAD_ALLOC, EGL_FALSE); } }
EGLBoolean __stdcall eglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value) { EVENT("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)", dpy, ctx, attribute, value); egl::Display *display = static_cast<egl::Display*>(dpy); gl::Context *context = static_cast<gl::Context*>(ctx); if (!validateContext(display, context)) { return EGL_FALSE; } UNIMPLEMENTED(); // FIXME return egl::success(0); }
EGLBoolean __stdcall eglDestroyContext(EGLDisplay dpy, EGLContext ctx) { EVENT("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p)", dpy, ctx); egl::Display *display = static_cast<egl::Display*>(dpy); gl::Context *context = static_cast<gl::Context*>(ctx); if (!validateContext(display, context)) { return EGL_FALSE; } if (ctx == EGL_NO_CONTEXT) { return egl::error(EGL_BAD_CONTEXT, EGL_FALSE); } display->destroyContext(context); return egl::success(EGL_TRUE); }