static ContextInfo * renderspuCreateContextInternal(const char *dpyName, GLint visBits, GLint idCtx, ContextInfo * sharedContext) { ContextInfo *context; VisualInfo *visual; if (idCtx <= 0) { idCtx = (GLint)crHashtableAllocKeys(render_spu.contextTable, 1); if (idCtx <= 0) { crWarning("failed to allocate context id"); return NULL; } } else { if (crHashtableIsKeyUsed(render_spu.contextTable, idCtx)) { crWarning("the specified ctx key %d is in use", idCtx); return NULL; } } if (!dpyName || crStrlen(render_spu.display_string)>0) dpyName = render_spu.display_string; visual = renderspuFindVisual(dpyName, visBits); if (!visual) return NULL; context = (ContextInfo *) crCalloc(sizeof(ContextInfo)); if (!context) return NULL; context->BltInfo.Base.id = idCtx; context->shared = sharedContext; if (!renderspu_SystemCreateContext(visual, context, sharedContext)) return NULL; crHashtableAdd(render_spu.contextTable, idCtx, context); context->BltInfo.Base.visualBits = visual->visAttribs; /* crDebug("Render SPU: CreateContext(%s, 0x%x) returning %d", dpyName, visBits, context->BltInfo.Base.id); */ if (sharedContext) ASMAtomicIncU32(&sharedContext->cRefs); context->cRefs = 1; return context; }
GLint RENDER_APIENTRY renderspuCreateContext(const char *dpyName, GLint visBits, GLint shareCtx) { ContextInfo *context, *sharedContext = NULL; VisualInfo *visual; if (shareCtx > 0) { sharedContext = (ContextInfo *) crHashtableSearch(render_spu.contextTable, shareCtx); } if (!dpyName || crStrlen(render_spu.display_string)>0) dpyName = render_spu.display_string; visual = renderspuFindVisual(dpyName, visBits); if (!visual) return -1; context = (ContextInfo *) crCalloc(sizeof(ContextInfo)); if (!context) return -1; context->id = render_spu.context_id; context->shared = sharedContext; if (!renderspu_SystemCreateContext(visual, context, sharedContext)) return -1; crHashtableAdd(render_spu.contextTable, render_spu.context_id, context); render_spu.context_id++; /* crDebug("Render SPU: CreateContext(%s, 0x%x) returning %d", dpyName, visBits, context->id); */ return context->id; }