trouble with GL and GLES surfaces

Theo Veenker <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
Hi all,

I decided to spend some time on playing with cairo's GL backend. First I looked at 1.15.11 
(this is all under Linux Mint 18 64-bit, kernel 4.4.0-98, X.Org 1.18.4).

Cairo 1.15.11 configured with --enable-gl worked for me. I could use 
cairo_gl_surface_create_for_window(), cairo_gl_surface_create() and 
cairo_surface_create_similar() as advertised.

However when configured with --enable-glesv2 I ran into some problems:
- Cairo_gl_surface_create_for_egl() is fine, but both cairo_gl_surface_create() and 
cairo_surface_create_similar() consistently fail with CAIRO_STATUS_DEVICE_ERROR.
- Copying a (any) surface using cairo_paint() into a surface created by 
cairo_gl_surface_create_for_egl() causes a core dump. That is, at first it sometimes looks 
OK. And then when I trigger a redraw it segfaults. This does not happen with 1.14.12. 
Valgrind consistently shows it is accessing location 0xC. Here's a snippit of the valgrind 
log:
==24122== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==24122==  Access not within mapped region at address 0xC
==24122==    at 0x5AF0562: _cairo_gl_pattern_texture_setup (cairo-gl-operand.c:292)
==24122==    by 0x5AF0562: _cairo_gl_operand_init (cairo-gl-operand.c:555)
==24122==    by 0x5AEC03F: _cairo_gl_composite_set_source (cairo-gl-composite.c:150)
==24122==    by 0x5AEC03F: _blit_texture_to_renderbuffer (cairo-gl-composite.c:108)
==24122==    by 0x5AEC1BC: _cairo_gl_composite_init (cairo-gl-composite.c:1278)
==24122==    by 0x5AF3B43: copy_boxes.part.0 (cairo-gl-spans-compositor.c:342)
==24122==    by 0x5A9FDBC: upload_boxes (cairo-spans-compositor.c:518)
==24122==    by 0x5A9FDBC: composite_aligned_boxes (cairo-spans-compositor.c:630)
==24122==    by 0x5A9FDBC: clip_and_composite_boxes.part.11 (cairo-spans-compositor.c:882)
==24122==    by 0x5A9FE7D: clip_and_composite_boxes (cairo-spans-compositor.c:901)
==24122==    by 0x5AA0198: _cairo_spans_compositor_mask (cairo-spans-compositor.c:999)
==24122==    by 0x5A57578: _cairo_compositor_paint (cairo-compositor.c:65)
==24122==    by 0x5AABAF0: _cairo_surface_paint (cairo-surface.c:2198)
==24122==    by 0x5AF6108: _cairo_gl_surface_draw_image (cairo-gl-surface.c:1049)
==24122==    by 0x5AF39FA: draw_image_boxes (cairo-gl-spans-compositor.c:311)
==24122==    by 0x5A9FDEF: upload_boxes (cairo-spans-compositor.c:514)
==24122==    by 0x5A9FDEF: composite_aligned_boxes (cairo-spans-compositor.c:630)
==24122==    by 0x5A9FDEF: clip_and_composite_boxes.part.11 (cairo-spans-compositor.c:882)



Then I tried the same thing using cairo 1.14.2. Here I don't see any of the problems 
mentioned above. However I did notice a different problem with the regular GL (non-GLES) 
backend:
- It appears I can't use a GL surface (as created by cairo_gl_surface_create() or 
cairo_surface_create_similar()) as a source for cairo_set_source_surface(). No error is 
reported by cairo_set_source_surface() or cairo_paint(). This does however work correctly 
when configured with --enable-glesv2.


I did not test the GLESv3 backend as I have no idea where to get the glesv3 package 
referred to by cairo.pc.

Theo

-- 
Theo Veenker  |  Beexy - Behavioral Experiment Software
+31(0)524-541531  |  +31(0)6-42525777 mobile
[email protected]  |  www.beexy.nl
-- 
cairo mailing list
[email protected]
https://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.