EGLBoolean _eglInitImage(_EGLImage *img, _EGLDisplay *dpy) { _eglInitResource(&img->Resource, sizeof(*img), dpy); return EGL_TRUE; }
/** * Initialize the given _EGLContext object to defaults and/or the values * in the attrib_list. */ EGLBoolean _eglInitContext(_EGLContext *ctx, _EGLDisplay *dpy, _EGLConfig *conf, const EGLint *attrib_list) { const EGLenum api = eglQueryAPI(); EGLint err; if (api == EGL_NONE) { _eglError(EGL_BAD_MATCH, "eglCreateContext(no client API)"); return EGL_FALSE; } _eglInitResource(&ctx->Resource, sizeof(*ctx), dpy); ctx->ClientAPI = api; ctx->Config = conf; ctx->WindowRenderBuffer = EGL_NONE; ctx->ClientVersion = 1; /* the default, per EGL spec */ err = _eglParseContextAttribList(ctx, attrib_list); if (err == EGL_SUCCESS && ctx->Config) { EGLint api_bit; api_bit = _eglGetContextAPIBit(ctx); if (!(ctx->Config->RenderableType & api_bit)) { _eglLog(_EGL_DEBUG, "context api is 0x%x while config supports 0x%x", api_bit, ctx->Config->RenderableType); err = EGL_BAD_CONFIG; } } if (err != EGL_SUCCESS) return _eglError(err, "eglCreateContext"); return EGL_TRUE; }
/** * Initialize the given _EGLContext object to defaults and/or the values * in the attrib_list. */ EGLBoolean _eglInitContext(_EGLContext *ctx, _EGLDisplay *dpy, _EGLConfig *conf, const EGLint *attrib_list) { const EGLenum api = eglQueryAPI(); EGLint err; if (api == EGL_NONE) { _eglError(EGL_BAD_MATCH, "eglCreateContext(no client API)"); return EGL_FALSE; } memset(ctx, 0, sizeof(_EGLContext)); _eglInitResource(&ctx->Resource, sizeof(_EGLResource), dpy); ctx->ClientAPI = api; ctx->Config = conf; ctx->WindowRenderBuffer = EGL_NONE; ctx->Profile = EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR; ctx->ClientMajorVersion = 1; /* the default, per EGL spec */ ctx->ClientMinorVersion = 0; ctx->Flags = 0; ctx->Profile = EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR; ctx->ResetNotificationStrategy = EGL_NO_RESET_NOTIFICATION_KHR; err = _eglParseContextAttribList(ctx, dpy, attrib_list); if (err == EGL_SUCCESS && ctx->Config) { EGLint api_bit; api_bit = _eglGetContextAPIBit(ctx); if (!(ctx->Config->RenderableType & api_bit)) { _eglLog(_EGL_DEBUG, "context api is 0x%x while config supports 0x%x", api_bit, ctx->Config->RenderableType); err = EGL_BAD_CONFIG; } } if (err != EGL_SUCCESS) return _eglError(err, "eglCreateContext"); return EGL_TRUE; }
EGLBoolean _eglInitSync(_EGLSync *sync, _EGLDisplay *dpy, EGLenum type, const EGLint *attrib_list) { EGLint err; if (!(type == EGL_SYNC_REUSABLE_KHR && dpy->Extensions.KHR_reusable_sync) && !(type == EGL_SYNC_FENCE_KHR && dpy->Extensions.KHR_fence_sync)) return _eglError(EGL_BAD_ATTRIBUTE, "eglCreateSyncKHR"); _eglInitResource(&sync->Resource, sizeof(*sync), dpy); sync->Type = type; sync->SyncStatus = EGL_UNSIGNALED_KHR; sync->SyncCondition = EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR; err = _eglParseSyncAttribList(sync, attrib_list); if (err != EGL_SUCCESS) return _eglError(err, "eglCreateSyncKHR"); return EGL_TRUE; }
/** * Do error check on parameters and initialize the given _EGLSurface object. * \return EGL_TRUE if no errors, EGL_FALSE otherwise. */ EGLBoolean _eglInitSurface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type, _EGLConfig *conf, const EGLint *attrib_list) { const char *func; EGLint renderBuffer = EGL_BACK_BUFFER; EGLint swapBehavior = EGL_BUFFER_DESTROYED; EGLint err; /* Swap behavior can be preserved only if config supports this. */ if (conf->SurfaceType & EGL_SWAP_BEHAVIOR_PRESERVED_BIT) swapBehavior = EGL_BUFFER_PRESERVED; switch (type) { case EGL_WINDOW_BIT: func = "eglCreateWindowSurface"; swapBehavior = EGL_BUFFER_DESTROYED; break; case EGL_PIXMAP_BIT: func = "eglCreatePixmapSurface"; renderBuffer = EGL_SINGLE_BUFFER; break; case EGL_PBUFFER_BIT: func = "eglCreatePBufferSurface"; break; default: _eglLog(_EGL_WARNING, "Bad type in _eglInitSurface"); return EGL_FALSE; } if ((conf->SurfaceType & type) == 0) { /* The config can't be used to create a surface of this type */ _eglError(EGL_BAD_MATCH, func); return EGL_FALSE; } _eglInitResource(&surf->Resource, sizeof(*surf), dpy); surf->Type = type; surf->Config = conf; surf->Width = 0; surf->Height = 0; surf->TextureFormat = EGL_NO_TEXTURE; surf->TextureTarget = EGL_NO_TEXTURE; surf->MipmapTexture = EGL_FALSE; surf->LargestPbuffer = EGL_FALSE; surf->RenderBuffer = renderBuffer; surf->VGAlphaFormat = EGL_VG_ALPHA_FORMAT_NONPRE; surf->VGColorspace = EGL_VG_COLORSPACE_sRGB; surf->GLColorspace = EGL_GL_COLORSPACE_LINEAR_KHR; surf->MipmapLevel = 0; surf->MultisampleResolve = EGL_MULTISAMPLE_RESOLVE_DEFAULT; surf->SwapBehavior = swapBehavior; surf->HorizontalResolution = EGL_UNKNOWN; surf->VerticalResolution = EGL_UNKNOWN; surf->AspectRatio = EGL_UNKNOWN; surf->PostSubBufferSupportedNV = EGL_FALSE; /* the default swap interval is 1 */ _eglClampSwapInterval(surf, 1); err = _eglParseSurfaceAttribList(surf, attrib_list); if (err != EGL_SUCCESS) return _eglError(err, func); /* if EGL_LARGEST_PBUFFER in use, clamp width and height */ if (surf->LargestPbuffer) { surf->Width = MIN2(surf->Width, _EGL_MAX_PBUFFER_WIDTH); surf->Height = MIN2(surf->Height, _EGL_MAX_PBUFFER_HEIGHT); } return EGL_TRUE; }