summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2014-12-19 18:06:23 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2014-12-19 18:14:25 +0900
commit8f6b34d4cced4abd422735c4ad82a48f02ed94d5 (patch)
tree593b1580b4fa26367c68a95bfaba888998bab095 /src
parent3572b3bf3d19b0d0b5e2d27e5abfe4bba35511cc (diff)
Evas GL: Fix list of GLES 1.1 extensions
We should use GLESv1 functions in a GLESv1 context to scan for GLESv1 extensions. Makes sense yeah? This should expose the proper list... especially enabling FBO extension when it's supported by the driver.
Diffstat (limited to 'src')
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_api.c4
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_api_ext.c208
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_api_ext.h4
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_api_gles1.c9
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_core.c3
-rw-r--r--src/modules/evas/engines/gl_common/evas_gl_core_private.h2
6 files changed, 203 insertions, 27 deletions
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api.c b/src/modules/evas/engines/gl_common/evas_gl_api.c
index 6e04c92aa1..72d85ec8cc 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_api.c
@@ -723,8 +723,8 @@ _evgl_glGetString(GLenum name)
723#endif 723#endif
724 724
725 case GL_EXTENSIONS: 725 case GL_EXTENSIONS:
726 return (GLubyte *) evgl_api_ext_string_get 726 // No need to check context version, this is GLESv2 API.
727 (EINA_TRUE, (rsc->current_ctx->version == EVAS_GL_GLES_1_X)); 727 return (GLubyte *) evgl_api_ext_string_get(EINA_TRUE, EINA_FALSE);
728 728
729 default: 729 default:
730 // GL_INVALID_ENUM is generated if name is not an accepted value. 730 // GL_INVALID_ENUM is generated if name is not an accepted value.
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_ext.c b/src/modules/evas/engines/gl_common/evas_gl_api_ext.c
index 206bd71353..d6a30935de 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api_ext.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_api_ext.c
@@ -10,6 +10,11 @@
10char _gl_ext_string[MAX_EXTENSION_STRING_BUFFER] = { 0 }; 10char _gl_ext_string[MAX_EXTENSION_STRING_BUFFER] = { 0 };
11// list of exts by official name only like "GL_EXT_discard_framebuffer GL_EXT_multi_draw_arrays" 11// list of exts by official name only like "GL_EXT_discard_framebuffer GL_EXT_multi_draw_arrays"
12char _gl_ext_string_official[MAX_EXTENSION_STRING_BUFFER] = { 0 }; 12char _gl_ext_string_official[MAX_EXTENSION_STRING_BUFFER] = { 0 };
13// list of gles 1.1 exts by official name
14static char *_gles1_ext_string = NULL;
15
16typedef void (*_getproc_fn) (void);
17typedef _getproc_fn (*fp_getproc)(const char *);
13 18
14#ifndef EGL_NATIVE_PIXMAP_KHR 19#ifndef EGL_NATIVE_PIXMAP_KHR
15# define EGL_NATIVE_PIXMAP_KHR 0x30b0 20# define EGL_NATIVE_PIXMAP_KHR 0x30b0
@@ -24,7 +29,9 @@ char _gl_ext_string_official[MAX_EXTENSION_STRING_BUFFER] = { 0 };
24#define _EVASGL_EXT_END() 29#define _EVASGL_EXT_END()
25#define _EVASGL_EXT_DRVNAME(name) 30#define _EVASGL_EXT_DRVNAME(name)
26#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname) 31#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
27#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) ret (*glextsym_##name) param = NULL; 32#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) \
33 ret (*gl_ext_sym_##name) param = NULL; \
34 ret (*gles1_ext_sym_##name) param = NULL;
28#define _EVASGL_EXT_FUNCTION_END() 35#define _EVASGL_EXT_FUNCTION_END()
29#define _EVASGL_EXT_FUNCTION_DRVFUNC(name) 36#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
30#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name) 37#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name)
@@ -48,7 +55,9 @@ char _gl_ext_string_official[MAX_EXTENSION_STRING_BUFFER] = { 0 };
48///////////////////////////////////////////////////////////////////////////////////////////////////// 55/////////////////////////////////////////////////////////////////////////////////////////////////////
49#define _EVASGL_EXT_CHECK_SUPPORT(name) 56#define _EVASGL_EXT_CHECK_SUPPORT(name)
50#define _EVASGL_EXT_DISCARD_SUPPORT() 57#define _EVASGL_EXT_DISCARD_SUPPORT()
51#define _EVASGL_EXT_BEGIN(name) int _gl_ext_support_##name = 0; 58#define _EVASGL_EXT_BEGIN(name) \
59 int _gl_ext_support_##name = 0; \
60 int _gles1_ext_support_##name = 0;
52#define _EVASGL_EXT_END() 61#define _EVASGL_EXT_END()
53#define _EVASGL_EXT_DRVNAME(name) 62#define _EVASGL_EXT_DRVNAME(name)
54#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname) 63#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
@@ -274,15 +283,13 @@ evgl_evasglQueryWaylandBuffer(Evas_GL *evas_gl EINA_UNUSED,
274#else 283#else
275#endif 284#endif
276 285
286// 0: not initialized, 1: GLESv2 initialized, 2: GLESv1 also initialized
277static int _evgl_api_ext_status = 0; 287static int _evgl_api_ext_status = 0;
278 288
279Eina_Bool 289Eina_Bool
280evgl_api_ext_init(void *getproc, const char *glueexts) 290evgl_api_ext_init(void *getproc, const char *glueexts)
281{ 291{
282 const char *glexts; 292 const char *glexts;
283 typedef void (*_getproc_fn) (void);
284 typedef _getproc_fn (*fp_getproc)(const char *);
285
286 fp_getproc gp = (fp_getproc)getproc; 293 fp_getproc gp = (fp_getproc)getproc;
287 int _curext_supported = 0; 294 int _curext_supported = 0;
288 295
@@ -299,15 +306,6 @@ evgl_api_ext_init(void *getproc, const char *glueexts)
299 strncpy(_gl_ext_string_official, desktop_exts, MAX_EXTENSION_STRING_BUFFER); 306 strncpy(_gl_ext_string_official, desktop_exts, MAX_EXTENSION_STRING_BUFFER);
300#endif 307#endif
301 308
302 /////////////////////////////////////////////////////////////////////////////////////////////////////
303
304#define FINDSYM(getproc, dst, sym) \
305 if (getproc) { \
306 if (!dst) dst = (__typeof__(dst))getproc(sym); \
307 } else { \
308 if (!dst) dst = (__typeof__(dst))dlsym(RTLD_DEFAULT, sym); \
309 }
310
311 // GLES Extensions 309 // GLES Extensions
312 glexts = (const char*)glGetString(GL_EXTENSIONS); 310 glexts = (const char*)glGetString(GL_EXTENSIONS);
313 if (!glexts) 311 if (!glexts)
@@ -356,7 +354,7 @@ re->info->info.screen);
356 354
357#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) \ 355#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) \
358 { \ 356 { \
359 ret (**drvfunc)param = &glextsym_##name; 357 ret (**drvfunc)param = &gl_ext_sym_##name;
360 358
361#define _EVASGL_EXT_FUNCTION_END() \ 359#define _EVASGL_EXT_FUNCTION_END() \
362 if ((*drvfunc) == NULL) _EVASGL_EXT_DISCARD_SUPPORT(); \ 360 if ((*drvfunc) == NULL) _EVASGL_EXT_DISCARD_SUPPORT(); \
@@ -446,13 +444,13 @@ re->info->info.screen);
446void 444void
447evgl_api_ext_get(Evas_GL_API *gl_funcs) 445evgl_api_ext_get(Evas_GL_API *gl_funcs)
448{ 446{
449 if (_evgl_api_ext_status != 1) 447 if (_evgl_api_ext_status < 1)
450 { 448 {
451 ERR("EVGL extension is not yet initialized."); 449 ERR("EVGL extension is not yet initialized.");
452 return; 450 return;
453 } 451 }
454 452
455#define ORD(f) EVAS_API_OVERRIDE(f, gl_funcs, glextsym_) 453#define ORD(f) EVAS_API_OVERRIDE(f, gl_funcs, gl_ext_sym_)
456 454
457 ///////////////////////////////////////////////////////////////////////////////////////////////////// 455 /////////////////////////////////////////////////////////////////////////////////////////////////////
458 // Extension HEADER 456 // Extension HEADER
@@ -497,16 +495,180 @@ evgl_api_ext_get(Evas_GL_API *gl_funcs)
497 495
498} 496}
499 497
498Eina_Bool
499_evgl_api_gles1_ext_init(void)
500{
501 if (_evgl_api_ext_status >= 2)
502 return EINA_TRUE;
503
504#ifdef GL_GLES
505 int _curext_supported = 0;
506 Evas_GL_API *gles1_funcs;
507 const char *gles1_exts;
508
509 /* Note from the EGL documentation:
510 * Function pointers returned by eglGetProcAddress are independent of the
511 * display and the currently bound context and may be used by any context
512 * which supports the extension.
513 * So, we don't need to check that GLESv1 is current.
514 */
515
516 gles1_funcs = _evgl_api_gles1_internal_get();
517 if (!gles1_funcs || !gles1_funcs->glGetString)
518 {
519 ERR("Could not get address of glGetString in GLESv1 library!");
520 return EINA_FALSE;
521 }
522
523 gles1_exts = (const char *) gles1_funcs->glGetString(GL_EXTENSIONS);
524 if (!gles1_exts)
525 {
526 ERR("GLESv1:glGetString(GL_EXTENSIONS) returned NULL!");
527 return EINA_FALSE;
528 }
529
530 if (!_gles1_ext_string)
531 {
532 _gles1_ext_string = calloc(MAX_EXTENSION_STRING_BUFFER, 1);
533 if (!_gles1_ext_string) return EINA_FALSE;
534 }
535
536 _gles1_ext_string[0] = '\0';
537
538 /////////////////////////////////////////////////////////////////////////////////////////////////////
539 // Scanning supported extensions, sets the variables
540 /////////////////////////////////////////////////////////////////////////////////////////////////////
541
542 // Preparing all the magic macros
543#define GETPROCADDR(sym) \
544 ((__typeof__((*drvfunc))) (eglGetProcAddress(sym)))
545
546#define _EVASGL_EXT_BEGIN(name) \
547 { \
548 int *ext_support = &_gles1_ext_support_##name; \
549 *ext_support = 0;
550
551#define _EVASGL_EXT_END() \
552 }
553
554#define _EVASGL_EXT_CHECK_SUPPORT(name) \
555 (strstr(gles1_exts, name) != NULL)
556
557#define _EVASGL_EXT_DISCARD_SUPPORT() \
558 *ext_support = 0;
559
560#define _EVASGL_EXT_DRVNAME(name) \
561 if (_EVASGL_EXT_CHECK_SUPPORT(#name)) *ext_support = 1;
562
563#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname) \
564 if (_EVASGL_EXT_CHECK_SUPPORT(deskname)) *ext_support = 1;
565
566#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) \
567 { \
568 ret (**drvfunc)param = &gles1_ext_sym_##name;
569
570#define _EVASGL_EXT_FUNCTION_END() \
571 if ((*drvfunc) == NULL) _EVASGL_EXT_DISCARD_SUPPORT(); \
572 }
573
574#define _EVASGL_EXT_FUNCTION_DRVFUNC(name) \
575 if ((*drvfunc) == NULL) *drvfunc = name;
576
577#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name) \
578 if ((*drvfunc) == NULL) \
579 { \
580 *drvfunc = GETPROCADDR(name); \
581 evgl_safe_extension_add(name, (void *) (*drvfunc)); \
582 } \
583 else evgl_safe_extension_add(name, NULL);
584
585#ifdef _EVASGL_EXT_FUNCTION_WHITELIST
586# undef _EVASGL_EXT_FUNCTION_WHITELIST
587#endif
588#define _EVASGL_EXT_FUNCTION_WHITELIST(name) evgl_safe_extension_add(name, NULL);
589
590#define _EVASGL_EXT_GLES1_ONLY 1
591
592 // Okay, now we are ready to scan.
593#include "evas_gl_api_ext_def.h"
594
595#undef _EVASGL_EXT_GLES1_ONLY
596#undef _EVASGL_EXT_FUNCTION_WHITELIST
597#undef _EVASGL_EXT_CHECK_SUPPORT
598#undef _EVASGL_EXT_DISCARD_SUPPORT
599#undef _EVASGL_EXT_BEGIN
600#undef _EVASGL_EXT_END
601#undef _EVASGL_EXT_DRVNAME
602#undef _EVASGL_EXT_DRVNAME_DESKTOP
603#undef _EVASGL_EXT_FUNCTION_BEGIN
604#undef _EVASGL_EXT_FUNCTION_END
605#undef _EVASGL_EXT_FUNCTION_DRVFUNC
606#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR
607#undef GETPROCADDR
608
609#define _EVASGL_EXT_BEGIN(name) \
610 _curext_supported = (_gles1_ext_support_##name != 0);
611
612
613 /////////////////////////////////////////////////////////////////////////////////////////////////////
614 // Scanning again to add to the gles1 ext string list
615 /////////////////////////////////////////////////////////////////////////////////////////////////////
616
617#define _EVASGL_EXT_END()
618#define _EVASGL_EXT_CHECK_SUPPORT(name)
619#define _EVASGL_EXT_DISCARD_SUPPORT()
620#define _EVASGL_EXT_DRVNAME(name) if (_curext_supported) strcat(_gles1_ext_string, #name" ");
621#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
622#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param)
623#define _EVASGL_EXT_FUNCTION_END()
624#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
625#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name)
626
627#include "evas_gl_api_ext_def.h"
628
629#undef _EVASGL_EXT_CHECK_SUPPORT
630#undef _EVASGL_EXT_DISCARD_SUPPORT
631#undef _EVASGL_EXT_BEGIN
632#undef _EVASGL_EXT_END
633#undef _EVASGL_EXT_DRVNAME
634#undef _EVASGL_EXT_DRVNAME_DESKTOP
635#undef _EVASGL_EXT_FUNCTION_BEGIN
636#undef _EVASGL_EXT_FUNCTION_END
637#undef _EVASGL_EXT_FUNCTION_DRVFUNC
638#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR
639
640 if (evgl_engine->api_debug_mode)
641 DBG("GLES1: List of supported extensions:\n%s", _gles1_ext_string);
642
643 // Both GLES versions have been initialized!
644 _evgl_api_ext_status = 2;
645 return EINA_TRUE;
646#else
647 ERR("GLESv1 support is not implemented for GLX");
648 return EINA_FALSE;
649#endif
650}
651
500void 652void
501evgl_api_gles1_ext_get(Evas_GL_API *gl_funcs) 653evgl_api_gles1_ext_get(Evas_GL_API *gl_funcs)
502{ 654{
503 if (_evgl_api_ext_status != 1) 655 if (_evgl_api_ext_status < 1)
504 { 656 {
505 ERR("EVGL extension is not yet initialized."); 657 ERR("EVGL extension is not yet initialized.");
506 return; 658 return;
507 } 659 }
508 660
509#define ORD(f) EVAS_API_OVERRIDE(f, gl_funcs, glextsym_) 661 if (_evgl_api_ext_status < 2)
662 {
663 DBG("Initializing GLESv1 extensions...");
664 if (!_evgl_api_gles1_ext_init())
665 {
666 ERR("GLESv1 extensions initialization failed");
667 return;
668 }
669 }
670
671#define ORD(f) EVAS_API_OVERRIDE(f, gl_funcs, gles1_ext_sym_)
510 672
511 ///////////////////////////////////////////////////////////////////////////////////////////////////// 673 /////////////////////////////////////////////////////////////////////////////////////////////////////
512 // Extension HEADER 674 // Extension HEADER
@@ -514,7 +676,7 @@ evgl_api_gles1_ext_get(Evas_GL_API *gl_funcs)
514#define _EVASGL_EXT_CHECK_SUPPORT(name) 676#define _EVASGL_EXT_CHECK_SUPPORT(name)
515#define _EVASGL_EXT_DISCARD_SUPPORT() 677#define _EVASGL_EXT_DISCARD_SUPPORT()
516#define _EVASGL_EXT_BEGIN(name) \ 678#define _EVASGL_EXT_BEGIN(name) \
517 if (_gl_ext_support_##name != 0) \ 679 if (_gles1_ext_support_##name != 0) \
518 { 680 {
519#define _EVASGL_EXT_END() \ 681#define _EVASGL_EXT_END() \
520 } 682 }
@@ -553,14 +715,14 @@ evgl_api_gles1_ext_get(Evas_GL_API *gl_funcs)
553const char * 715const char *
554evgl_api_ext_string_get(Eina_Bool official, Eina_Bool gles1) 716evgl_api_ext_string_get(Eina_Bool official, Eina_Bool gles1)
555{ 717{
556 if (_evgl_api_ext_status != 1) 718 if (_evgl_api_ext_status < 1)
557 { 719 {
558 ERR("EVGL extension is not yet initialized."); 720 ERR("EVGL extension is not yet initialized.");
559 return NULL; 721 return NULL;
560 } 722 }
561 723
562 // TODO: Properly distinguish between GLES 2 and GLES 1 extensions. 724 if (gles1)
563 (void) gles1; 725 return _gles1_ext_string;
564 726
565 if (official) 727 if (official)
566 return _gl_ext_string_official; 728 return _gl_ext_string_official;
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_ext.h b/src/modules/evas/engines/gl_common/evas_gl_api_ext.h
index 357edc999a..17a2ffd1ef 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api_ext.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_api_ext.h
@@ -25,7 +25,7 @@
25#define _EVASGL_EXT_END() 25#define _EVASGL_EXT_END()
26#define _EVASGL_EXT_DRVNAME(name) 26#define _EVASGL_EXT_DRVNAME(name)
27#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname) 27#define _EVASGL_EXT_DRVNAME_DESKTOP(deskname)
28#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) extern ret (*glextsym_##name) param; 28#define _EVASGL_EXT_FUNCTION_BEGIN(ret, name, param) extern ret (*gl_ext_sym_##name) param;
29#define _EVASGL_EXT_FUNCTION_END() 29#define _EVASGL_EXT_FUNCTION_END()
30#define _EVASGL_EXT_FUNCTION_DRVFUNC(name) 30#define _EVASGL_EXT_FUNCTION_DRVFUNC(name)
31#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name) 31#define _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR(name)
@@ -43,7 +43,7 @@
43#undef _EVASGL_EXT_FUNCTION_DRVFUNC 43#undef _EVASGL_EXT_FUNCTION_DRVFUNC
44#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR 44#undef _EVASGL_EXT_FUNCTION_DRVFUNC_PROCADDR
45///////////////////////////////////////////////////////////////////////////////////////////////////// 45/////////////////////////////////////////////////////////////////////////////////////////////////////
46#define EXT_FUNC(fname) glextsym_##fname 46#define EXT_FUNC(fname) gl_ext_sym_##fname
47 47
48 48
49///////////////////////////////////////////////////////////////////////////////////////////////////// 49/////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c b/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c
index d3eee22a4d..99f793b12b 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c
@@ -3940,6 +3940,9 @@ _evgl_gles1_api_init(void)
3940 } 3940 }
3941 3941
3942 _evgl_load_gles1_apis(_gles1_handle, &_gles1_api); 3942 _evgl_load_gles1_apis(_gles1_handle, &_gles1_api);
3943 if (!_evgl_api_gles1_ext_init())
3944 WRN("Could not initialize OpenGL ES 1 extensions yet.");
3945
3943 _initialized = EINA_TRUE; 3946 _initialized = EINA_TRUE;
3944 return EINA_TRUE; 3947 return EINA_TRUE;
3945} 3948}
@@ -4276,3 +4279,9 @@ _evgl_api_gles1_get(Evas_GL_API *funcs, Eina_Bool debug)
4276 //if (evgl_engine->direct_scissor_off) 4279 //if (evgl_engine->direct_scissor_off)
4277 //_direct_scissor_off_api_get(funcs); 4280 //_direct_scissor_off_api_get(funcs);
4278} 4281}
4282
4283Evas_GL_API *
4284_evgl_api_gles1_internal_get(void)
4285{
4286 return &_gles1_api;
4287}
diff --git a/src/modules/evas/engines/gl_common/evas_gl_core.c b/src/modules/evas/engines/gl_common/evas_gl_core.c
index 9d58f02a72..242127a985 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_core.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_core.c
@@ -2326,6 +2326,9 @@ evgl_safe_extension_add(const char *name, void *funcptr)
2326{ 2326{
2327 if (!name) return; 2327 if (!name) return;
2328 2328
2329 if (evgl_engine->api_debug_mode)
2330 DBG("Whitelisting function [%p] %s", funcptr, name);
2331
2329 if (funcptr) 2332 if (funcptr)
2330 eina_hash_set(evgl_engine->safe_extensions, name, funcptr); 2333 eina_hash_set(evgl_engine->safe_extensions, name, funcptr);
2331 else 2334 else
diff --git a/src/modules/evas/engines/gl_common/evas_gl_core_private.h b/src/modules/evas/engines/gl_common/evas_gl_core_private.h
index a13d36904e..5d5fcca129 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_core_private.h
+++ b/src/modules/evas/engines/gl_common/evas_gl_core_private.h
@@ -328,5 +328,7 @@ extern EVGL_Context *_evgl_current_context_get(void);
328extern int _evgl_not_in_pixel_get(void); 328extern int _evgl_not_in_pixel_get(void);
329extern int _evgl_direct_enabled(void); 329extern int _evgl_direct_enabled(void);
330extern EVGLNative_Context _evgl_native_context_get(Evas_GL_Context *ctx); 330extern EVGLNative_Context _evgl_native_context_get(Evas_GL_Context *ctx);
331Eina_Bool _evgl_api_gles1_ext_init(void);
332Evas_GL_API* _evgl_api_gles1_internal_get(void);
331 333
332#endif //_EVAS_GL_CORE_PRIVATE_H 334#endif //_EVAS_GL_CORE_PRIVATE_H