summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/modules/evas/engines/software_generic/evas_engine.c17
-rw-r--r--src/modules/evas/engines/software_x11/evas_engine.c46
2 files changed, 51 insertions, 12 deletions
diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c
index 4eaa9a4..721c4ee 100644
--- a/src/modules/evas/engines/software_generic/evas_engine.c
+++ b/src/modules/evas/engines/software_generic/evas_engine.c
@@ -1096,12 +1096,15 @@ eng_image_native_set(void *data EINA_UNUSED, void *image, void *native)
1096 1096
1097 if (!im || !ns) return im; 1097 if (!im || !ns) return im;
1098 1098
1099 if ((ns->type == EVAS_NATIVE_SURFACE_OPENGL) && 1099 if ((ns->type == EVAS_NATIVE_SURFACE_EVASGL) &&
1100 (ns->version == EVAS_NATIVE_SURFACE_VERSION)) 1100 (ns->version == EVAS_NATIVE_SURFACE_VERSION))
1101 im2 = evas_cache_image_data(evas_common_image_cache_get(), 1101 {
1102 im->w, im->h, 1102
1103 ns->data.x11.visual, 1, 1103 im2 = evas_cache_image_data(evas_common_image_cache_get(),
1104 EVAS_COLORSPACE_ARGB8888); 1104 im->w, im->h,
1105 ns->data.evasgl.surface, 1,
1106 EVAS_COLORSPACE_ARGB8888);
1107 }
1105 else 1108 else
1106 im2 = evas_cache_image_data(evas_common_image_cache_get(), 1109 im2 = evas_cache_image_data(evas_common_image_cache_get(),
1107 im->w, im->h, 1110 im->w, im->h,
@@ -3178,9 +3181,9 @@ eng_gl_native_surface_get(void *data EINA_UNUSED, void *surface, void *native_su
3178 3181
3179 if (!sfc) return 0; 3182 if (!sfc) return 0;
3180 3183
3181 ns->type = EVAS_NATIVE_SURFACE_OPENGL; 3184 ns->type = EVAS_NATIVE_SURFACE_EVASGL;
3182 ns->version = EVAS_NATIVE_SURFACE_VERSION; 3185 ns->version = EVAS_NATIVE_SURFACE_VERSION;
3183 ns->data.x11.visual = sfc->buffer; 3186 ns->data.evasgl.surface = sfc->buffer;
3184 3187
3185 return 1; 3188 return 1;
3186#else 3189#else
diff --git a/src/modules/evas/engines/software_x11/evas_engine.c b/src/modules/evas/engines/software_x11/evas_engine.c
index 02e6630..5a5d1cf 100644
--- a/src/modules/evas/engines/software_x11/evas_engine.c
+++ b/src/modules/evas/engines/software_x11/evas_engine.c
@@ -632,6 +632,20 @@ eng_canvas_alpha_get(void *data, void *context EINA_UNUSED)
632 (re->outbuf_alpha_get(re->generic.ob)); 632 (re->outbuf_alpha_get(re->generic.ob));
633} 633}
634 634
635static void
636_native_evasgl_free(void *data EINA_UNUSED, void *image)
637{
638 RGBA_Image *im = image;
639 Native *n = im->native.data;
640
641 im->native.data = NULL;
642 im->native.func.data = NULL;
643 im->native.func.bind = NULL;
644 im->native.func.free = NULL;
645 //im->image.data = NULL;
646 free(n);
647}
648
635static void * 649static void *
636eng_image_native_set(void *data EINA_UNUSED, void *image, void *native) 650eng_image_native_set(void *data EINA_UNUSED, void *image, void *native)
637{ 651{
@@ -640,7 +654,13 @@ eng_image_native_set(void *data EINA_UNUSED, void *image, void *native)
640 Image_Entry *ie = image, *ie2 = NULL; 654 Image_Entry *ie = image, *ie2 = NULL;
641 RGBA_Image *im = image; 655 RGBA_Image *im = image;
642 656
643 if (!im || !ns) return im; 657 if (!im) return NULL;
658 if (!ns)
659 {
660 if (im->native.data && im->native.func.free)
661 im->native.func.free(im->native.func.data, im);
662 return NULL;
663 }
644 664
645 if (ns->type == EVAS_NATIVE_SURFACE_X11) 665 if (ns->type == EVAS_NATIVE_SURFACE_X11)
646 { 666 {
@@ -669,10 +689,10 @@ eng_image_native_set(void *data EINA_UNUSED, void *image, void *native)
669 } 689 }
670 690
671 // Code from software_generic 691 // Code from software_generic
672 if ((ns->type == EVAS_NATIVE_SURFACE_OPENGL) && 692 if ((ns->type == EVAS_NATIVE_SURFACE_EVASGL) &&
673 (ns->version == EVAS_NATIVE_SURFACE_VERSION)) 693 (ns->version == EVAS_NATIVE_SURFACE_VERSION))
674 ie2 = evas_cache_image_data(evas_common_image_cache_get(), 694 ie2 = evas_cache_image_data(evas_common_image_cache_get(),
675 ie->w, ie->h, ns->data.x11.visual, 1, 695 ie->w, ie->h, ns->data.evasgl.surface, 1,
676 EVAS_COLORSPACE_ARGB8888); 696 EVAS_COLORSPACE_ARGB8888);
677 else 697 else
678 ie2 = evas_cache_image_data(evas_common_image_cache_get(), 698 ie2 = evas_cache_image_data(evas_common_image_cache_get(),
@@ -702,10 +722,26 @@ eng_image_native_set(void *data EINA_UNUSED, void *image, void *native)
702 return evas_xcb_image_native_set(re->generic.ob, ie, ns); 722 return evas_xcb_image_native_set(re->generic.ob, ie, ns);
703#endif 723#endif
704 } 724 }
705 if (ns->type == EVAS_NATIVE_SURFACE_TBM) 725 else if (ns->type == EVAS_NATIVE_SURFACE_TBM)
706 { 726 {
707 return evas_native_tbm_image_set(re->generic.ob, ie, ns); 727 return evas_native_tbm_image_set(re->generic.ob, ie, ns);
708 } 728 }
729 else if (ns->type == EVAS_NATIVE_SURFACE_EVASGL)
730 {
731 /* Native contains Evas_Native_Surface. What a mess. */
732 Native *n = calloc(1, sizeof(Native));
733 if (n)
734 {
735 im = (RGBA_Image *) ie;
736 n->ns.type = EVAS_NATIVE_SURFACE_EVASGL;
737 n->ns.version = EVAS_NATIVE_SURFACE_VERSION;
738 n->ns.data.evasgl.surface = ns->data.evasgl.surface;
739 im->native.data = n;
740 im->native.func.free = _native_evasgl_free;
741 im->native.func.data = NULL;
742 im->native.func.bind = NULL;
743 }
744 }
709 745
710 return ie; 746 return ie;
711} 747}