glexts = (const char*)glGetString(GL_EXTENSIONS);
ext_len = strlen(glexts);
- if (!ext_len)
+ if (!ext_len)
{
DBG("GL Get Extension string NULL: No extensions supported");
return;
}
_gl_ext_string = calloc(1, sizeof(char) * ext_len * 2);
- if (!_gl_ext_string)
+ if (!_gl_ext_string)
{
ERR("Error allocating _gl_ext_string.");
return;
#endif
ext_len = strlen(evasglexts);
- if (!ext_len)
+ if (!ext_len)
{
DBG("GL Get Extension string NULL: No extensions supported");
return;
}
_evasgl_ext_string = calloc(1, sizeof(char) * ext_len * 2);
- if (!_evasgl_ext_string)
+ if (!_evasgl_ext_string)
{
ERR("Error allocating _evasgl_ext_string.");
return;
Render_Engine_GL_Resource *rsc;
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
+ // Create internal resource context if it hasn't been created already
+ if ((rsc = eina_tls_get(resource_key)) == NULL)
+ {
+ ERR("Error retrieving the TLS resources.");
+ return 0;
+ }
+
+ if (eina_main_loop_is()) rsc->surface = re->win->egl_surface[0];
+
// EGL
// Delete the Resources
LKL(resource_lock);
eglDestroyContext(re->win->egl_disp, rsc->context);
free(rsc);
}
-#else
+ #else
// GLX
// Delete the Resources
LKL(resource_lock);
}
+static int
+_internal_resources_make_current(void *data)
+{
+ Render_Engine *re = (Render_Engine *)data;
+ Render_Engine_GL_Resource *rsc;
+ int ret = 0;
+
+ // Create internal resource context if it hasn't been created already
+ if ((rsc = eina_tls_get(resource_key)) == NULL)
+ {
+ if ((rsc = _create_internal_glue_resources(re)) == NULL)
+ {
+ ERR("Error creating internal resources.");
+ return 0;
+ }
+ }
+
+ // Use resource surface/context to create surface resrouces
+#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
+ // Update the evas' window surface
+ if (eina_main_loop_is()) rsc->surface = re->win->egl_surface[0];
+
+ ret = eglMakeCurrent(re->win->egl_disp, rsc->surface, rsc->surface, rsc->context);
+
+ if (!ret)
+ {
+ ERR("eglMakeCurrent() failed. Error Code: %#x", eglGetError());
+ return 0;
+ }
+#else
+ ret = glXMakeCurrent(re->info->info.display, re->win->win, rsc->context);
+ if (!ret)
+ {
+ ERR("glXMakeCurrent()!");
+ return 0;
+ }
+#endif
+ return 1;
+}
static int
eng_setup(Evas *e, void *in)
else \
DBG(__VA_ARGS__);
- PRINT_LOG("----------Surface Info------------");
+ PRINT_LOG("----------Surface Info------------");
PRINT_LOG(" [Surface] %x", (unsigned int)sfc);
PRINT_LOG(" Width: %d", sfc->w);
PRINT_LOG(" Height: %d", sfc->h);
PRINT_LOG(" RenderBuffer Stencil Format : %x", sfc->rb_stencil_fmt);
PRINT_LOG(" RenderBuffer Depth Stencil : %x", sfc->rb_depth_stencil);
PRINT_LOG(" RenderBuffer Depth Stencil Format: %x", sfc->rb_depth_stencil_fmt);
- PRINT_LOG("--------------------------------------");
+ PRINT_LOG("--------------------------------------");
#undef PRINT_LOG
}
// Attach texture to FBO
if (sfc->rt_msaa_samples)
- glsym_glFramebufferTexture2DMultisample(GL_FRAMEBUFFER,
- GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D, sfc->rt_tex,
+ glsym_glFramebufferTexture2DMultisample(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D, sfc->rt_tex,
0, sfc->rt_msaa_samples);
else
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_STENCIL_OES, sfc->w, sfc->h,
0, GL_DEPTH_STENCIL_OES, GL_UNSIGNED_INT_24_8_OES, NULL);
- if (sfc->rt_msaa_samples)
+ if (sfc->rt_msaa_samples)
{
- glsym_glFramebufferTexture2DMultisample(GL_FRAMEBUFFER,
+ glsym_glFramebufferTexture2DMultisample(GL_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT,
- GL_TEXTURE_2D,
- sfc->rb_depth_stencil,
+ GL_TEXTURE_2D,
+ sfc->rb_depth_stencil,
0, sfc->rt_msaa_samples);
- glsym_glFramebufferTexture2DMultisample(GL_FRAMEBUFFER,
+ glsym_glFramebufferTexture2DMultisample(GL_FRAMEBUFFER,
GL_STENCIL_ATTACHMENT,
- GL_TEXTURE_2D,
- sfc->rb_depth_stencil,
+ GL_TEXTURE_2D,
+ sfc->rb_depth_stencil,
0, sfc->rt_msaa_samples);
}
else
ERR("_attach_fbo_surface() failed.");
return 0;
}
- else
+ else
return 1;
}
#endif
}
- // Create internal resource context if it hasn't been created already
- if ((rsc = eina_tls_get(resource_key)) == NULL)
- {
- if ((rsc = _create_internal_glue_resources(re)) == NULL)
- {
- ERR("Error creating internal resources.");
- goto finish;
- }
- }
-
- // Use resource surface/context to create surface resrouces
-#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
- res = eglMakeCurrent(re->win->egl_disp, rsc->surface, rsc->surface, rsc->context);
-#else
- res = glXMakeCurrent(re->info->info.display, re->win->win, rsc->context);
-#endif
- if (!res)
+ // Use resource surface/context to do a make current
+ if (!_internal_resources_make_current(re))
{
- ERR("xxxMakeCurrent() finish!");
+ ERR("Error doing a make current with the internal resources.");
goto finish;
}
if (!sfc) return 0;
- if ((rsc = eina_tls_get(resource_key)) == EINA_FALSE) return 0;
-
-#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
- ret = eglMakeCurrent(re->win->egl_disp, rsc->surface, rsc->surface, rsc->context);
-#else
- ret = glXMakeCurrent(re->info->info.display, re->win->win, rsc->context);
-#endif
- if (!ret)
+ // Use resource surface/context to create surface resrouces
+ if (!_internal_resources_make_current(re))
{
- ERR("xxxMakeCurrent() failed!");
+ ERR("Error doing a make current with the internal resources.");
return 0;
}
if (!ctx) return 0;
- if ((rsc = eina_tls_get(resource_key)) == EINA_FALSE) return 0;
-
- // Do a make current with the given context
-#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
- ret = eglMakeCurrent(re->win->egl_disp, rsc->surface,
- rsc->surface, ctx->context);
-#else
- ret = glXMakeCurrent(re->info->info.display, re->win->win,
- ctx->context);
-#endif
- if (!ret)
+ // Use resource surface/context to create surface resrouces
+ if (!_internal_resources_make_current(re))
{
- ERR("xxxMakeCurrent() failed!");
+ ERR("Error doing a make current with the internal resources.");
return 0;
}
// rendering outside of pixel getter but it doesn't guarantee
// correct rendering.
if ((sfc->direct_fb_opt) && (gl_direct_img_obj || gl_direct_override))
- gl_direct_enabled = 1;
+ {
+#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
+ sfc->direct_sfc = re->win->egl_surface[0];
+#else
+ sfc->direct_sfc = re->win->win;
+#endif
+ gl_direct_enabled = 1;
+ }
else
gl_direct_enabled = 0;