EGLDisplay dpy;
EGLConfig cfg;
EGL_packed_attrib_list attrib_list;
- EGLint debug;
+ EGLint force_unique;
} EGL_packed_option;
typedef struct
static int
-_pack_egl_context_option(EGL_packed_option *pack_data, EGLDisplay dpy, EGLConfig cfg, EGLint debug, const EGLint *attrib_list)
+_pack_egl_context_option(EGL_packed_option *pack_data, EGLDisplay dpy, EGLConfig cfg, EGLint force_unique, const EGLint *attrib_list)
{
int ret = 0;
pack_data->dpy = dpy;
pack_data->cfg = cfg;
- pack_data->debug = debug;
+ pack_data->force_unique = force_unique;
// Default context attributes
pack_data->attrib_list.context_client_version = EGL_DONT_CARE;
pack_data->attrib_list.context_client_version = attrib[1];
break;
default:
- ERR("Invalid context attribute.\n");
+ ERR("\E[40;31;1mWARNING : Invalid context attribute.\E[0m\n");
goto finish;
}
attrib += 2;
}
+
+ // Eject condition for context version
+ // Current : Support GLES 2.0 only
+ if (pack_data->attrib_list.context_client_version != 2)
+ {
+ pack_data->force_unique = 1;
+ }
+
ret = 1;
goto finish;
}
static int
-_unpack_egl_context_option(EGL_packed_option *pack_data, EGLDisplay *dpy, EGLConfig *cfg, EGLint *debug, EGLint *attrib_list, const int attrib_list_size)
+_unpack_egl_context_option(EGL_packed_option *pack_data, EGLDisplay *dpy, EGLConfig *cfg, EGLint *force_unique, EGLint *attrib_list, const int attrib_list_size)
{
int ret = 0;
if (dpy != NULL) *dpy = pack_data->dpy;
if (cfg != NULL) *cfg = pack_data->cfg;
- if (debug != NULL) *debug = pack_data->debug;
+ if (force_unique != NULL) *force_unique = pack_data->force_unique;
if (attrib_list != NULL && attrib_list_size > 0)
{
if (debug_nofp == 1)
{
- static int debug_force_real = 100001;
- AST(_pack_egl_context_option(real_ctx_option, dpy, config, debug_force_real, attrib_list) == 1);
- debug_force_real++;
+ AST(_pack_egl_context_option(real_ctx_option, dpy, config, 1, attrib_list) == 1);
}
// Find context state
- cstate = fastpath_get_context_state_from_list(real_ctx_option, sizeof(EGL_packed_option), &ctx_list_access_mutex);
+ if (real_ctx_option->force_unique == 0)
+ {
+ cstate = fastpath_get_context_state_from_list(real_ctx_option, sizeof(EGL_packed_option), &ctx_list_access_mutex);
+ }
// Create a real context if it hasn't been created
if (cstate == NULL)
if (*ctx == EGL_NO_CONTEXT)
{
- ERR("Failed creating a egl real context for Fastpath.\n");
+ ERR("\E[40;31;1mWARNING : Failed creating a egl real context for Fastpath. (Invalid config?)\E[0m\n");
goto finish;
}
*cstate_new = (GLContextState *)calloc(1, sizeof(GLContextState));
if (*cstate_new == NULL)
{
- ERR("Error creating a new context state.\n");
+ ERR("\E[40;31;1mERROR : Error creating a new context state. (Memory full)\E[0m\n");
goto finish;
}
(*cstate_new)->rctx = *ctx;
_COREGL_FASTPATH_FUNC_BEGIN();
if (fp_opt == FP_UNKNOWN_PATH)
{
- ERR("\E[0;31;1mERROR : Invalid library link! (CoreGL path option is invalid)\E[0m\n");
+ ERR("\E[40;31;1mERROR : Invalid library link! (CoreGL path option is invalid)\E[0m\n");
goto finish;
}
_COREGL_FASTPATH_FUNC_BEGIN();
if (fp_opt == FP_UNKNOWN_PATH)
{
- ERR("\E[0;31;1mERROR : Invalid library link! (CoreGL path option is invalid)\E[0m\n");
+ ERR("\E[40;31;1mERROR : Invalid library link! (CoreGL path option is invalid)\E[0m\n");
goto finish;
}
real_ctx_option = (EGL_packed_option *)calloc(1, sizeof(EGL_packed_option));
if (real_ctx_option == NULL)
{
- ERR("Error creating a new GLGlueContext(1)\n");
+ ERR("\E[40;31;1mERROR : Error creating a new GLGlueContext(Memory full 1)\E[0m\n");
goto finish;
}
cstate = _egl_create_context(real_ctx_option, &cstate_new, &ctx, dpy, config, attrib_list);
real_ctx_sharable_option = (EGL_packed_sharable_option *)calloc(1, sizeof(EGL_packed_sharable_option));
if (real_ctx_sharable_option == NULL)
{
- ERR("Error creating a new GLGlueContext(2)\n");
+ ERR("\E[40;31;1mERROR : Error creating a new GLGlueContext(Memory full 2)\E[0m\n");
goto finish;
}
AST(_pack_egl_context_sharable_option(real_ctx_sharable_option, share_context) == 1);
gctx = (GLGlueContext *)calloc(1, sizeof(GLGlueContext));
if (gctx == NULL)
{
- ERR("Error creating a new GLGlueContext(3)\n");
+ ERR("\E[40;31;1mERROR : Error creating a new GLGlueContext(Memory full 3)\E[0m\n");
goto finish;
}
sostate_new = (GL_Shared_Object_State *)calloc(1, sizeof(GL_Shared_Object_State));
if (sostate_new == NULL)
{
- ERR("Error creating a new GLGlueContext(4)\n");
+ ERR("\E[40;31;1mERROR : Error creating a new GLGlueContext(Memory full 4)\E[0m\n");
goto finish;
}
gctx->sostate = sostate_new;
gctx_list_new = (GLGlueContext_List *)calloc(1, sizeof(GLGlueContext_List));
if (gctx_list_new == NULL)
{
- ERR("Error creating a new GlGlueContext(5)\n");
+ ERR("\E[40;31;1mERROR : Error creating a new GlGlueContext(Memory full 5)\E[0m\n");
goto finish;
}
}
else
{
- ERR("Invalid Context.\n");
+ ERR("\E[40;31;1mWARNING : Invalid destroying context. (no exists)\E[0m\n");
ret = EGL_FALSE;
goto finish;
}
GLGlueContext *gctx = NULL;
MY_MODULE_TSTATE *tstate = NULL;
- GLContextState *cstate = NULL;
GET_MY_TSTATE(tstate, get_current_thread_state());
if (gctx->rdpy != dpy)
{
- ERR("Invalid context (or invalid EGL display)\n");
+ ERR("\E[40;31;1mWARNING : Invalid context (or invalid EGL display)\E[0m\n");
ret = EGL_FALSE;
goto finish;
}
// Check if the object is correct
if (gctx->magic != MAGIC_GLFAST)
{
- ERR("Glue-CTX Magic Check Failed!!!\n");
+ ERR("\E[40;31;1mERROR : Glue-CTX Magic Check Failed!!! (Memory broken?)\E[0m\n");
ret = EGL_FALSE;
goto finish;
}
- cstate = tstate->cstate;
-
- // If it's a first time or drawable changed, do a make current
- if (cstate == NULL)
- {
- cstate = fastpath_get_context_state_from_list(gctx->real_ctx_option, gctx->real_ctx_option_len, &ctx_list_access_mutex);
-
- if (cstate == NULL)
- {
- ERR("Error making context current because context not ready.\n");
- ret = EGL_FALSE;
- goto finish;
- }
- need_mc = EGL_TRUE;
- }
-
// If drawable changed, do a make current
if ((tstate->rsurf_draw != draw) ||
(tstate->rsurf_read != read))
AST(gctx->cstate != NULL);
// If binded real context changed, do a make current
- if (gctx->cstate->rctx != cstate->rctx)
+ if (tstate->cstate == NULL || tstate->cstate->rctx != gctx->cstate->rctx)
need_mc = EGL_TRUE;
if (need_mc == EGL_TRUE)
// BB : full makecurrent
if (_orig_fastpath_eglMakeCurrent(dpy, draw, read, gctx->cstate->rctx) != EGL_TRUE)
{
- ERR("Error making context current with the drawable.\n");
+ ERR("\E[40;31;1mWARNING : Error making context current with the drawable. (Bad match?)\E[0m\n");
ret = EGL_FALSE;
goto finish;
}
{
if (fastpath_init_context_states(gctx) != 1)
{
- ERR("Error intializing context\n");
+ ERR("\E[40;31;1mERROR : Error intializing context. (Check driver specification)\E[0m\n");
goto finish;
}
}