aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/modules/engines
diff options
context:
space:
mode:
authorDavid Walter Seikel2012-01-04 18:41:13 +1000
committerDavid Walter Seikel2012-01-04 18:41:13 +1000
commitdd7595a3475407a7fa96a97393bae8c5220e8762 (patch)
treee341e911d7eb911a51684a7412ef7f7c7605d28e /libraries/evas/src/modules/engines
parentAdd the skeleton. (diff)
downloadSledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.zip
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.gz
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.bz2
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.xz
Add the base Enlightenment Foundation Libraries - eina, eet, evas, ecore, embryo, and edje.
Note that embryo wont be used, but I'm not sure yet if you can build edje without it.
Diffstat (limited to 'libraries/evas/src/modules/engines')
-rw-r--r--libraries/evas/src/modules/engines/Makefile.am71
-rw-r--r--libraries/evas/src/modules/engines/Makefile.in765
-rw-r--r--libraries/evas/src/modules/engines/buffer/Evas_Engine_Buffer.h40
-rw-r--r--libraries/evas/src/modules/engines/buffer/Makefile.am44
-rw-r--r--libraries/evas/src/modules/engines/buffer/Makefile.in805
-rw-r--r--libraries/evas/src/modules/engines/buffer/evas_engine.c403
-rw-r--r--libraries/evas/src/modules/engines/buffer/evas_engine.h85
-rw-r--r--libraries/evas/src/modules/engines/buffer/evas_outbuf.c340
-rw-r--r--libraries/evas/src/modules/engines/direct3d/Evas_Engine_Direct3D.h36
-rw-r--r--libraries/evas/src/modules/engines/direct3d/Makefile.am71
-rw-r--r--libraries/evas/src/modules/engines/direct3d/Makefile.in1021
-rw-r--r--libraries/evas/src/modules/engines/direct3d/array.h305
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_context.cpp8
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_context.h22
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_device.cpp393
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_device.h87
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_image_cache.cpp436
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_image_cache.h108
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_main.cpp774
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_object.cpp12
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_object.h35
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_font.cpp231
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_font.h113
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_image.cpp320
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_image.h127
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_line.cpp60
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_line.h37
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_rect.cpp65
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_rect.h37
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_scene.cpp33
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_scene.h63
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_shader_pack.cpp344
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_shader_pack.h75
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_vertex_buffer_cache.cpp154
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_direct3d_vertex_buffer_cache.h60
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_engine.c503
-rw-r--r--libraries/evas/src/modules/engines/direct3d/evas_engine.h125
-rw-r--r--libraries/evas/src/modules/engines/direct3d/ref.h210
-rw-r--r--libraries/evas/src/modules/engines/directfb/Evas_Engine_DirectFB.h25
-rw-r--r--libraries/evas/src/modules/engines/directfb/Makefile.am46
-rw-r--r--libraries/evas/src/modules/engines/directfb/Makefile.in805
-rw-r--r--libraries/evas/src/modules/engines/directfb/evas_engine.c1753
-rw-r--r--libraries/evas/src/modules/engines/directfb/evas_engine.h71
-rw-r--r--libraries/evas/src/modules/engines/directfb/polygon.c269
-rw-r--r--libraries/evas/src/modules/engines/fb/Evas_Engine_FB.h25
-rw-r--r--libraries/evas/src/modules/engines/fb/Makefile.am48
-rw-r--r--libraries/evas/src/modules/engines/fb/Makefile.in825
-rw-r--r--libraries/evas/src/modules/engines/fb/evas_engine.c317
-rw-r--r--libraries/evas/src/modules/engines/fb/evas_engine.h85
-rw-r--r--libraries/evas/src/modules/engines/fb/evas_fb.h93
-rw-r--r--libraries/evas/src/modules/engines/fb/evas_fb_main.c600
-rw-r--r--libraries/evas/src/modules/engines/fb/evas_outbuf.c397
-rw-r--r--libraries/evas/src/modules/engines/gl_cocoa/Evas_Engine_GL_Cocoa.h20
-rw-r--r--libraries/evas/src/modules/engines/gl_cocoa/Makefile.am46
-rw-r--r--libraries/evas/src/modules/engines/gl_cocoa/Makefile.in848
-rw-r--r--libraries/evas/src/modules/engines/gl_cocoa/evas_engine.c1462
-rw-r--r--libraries/evas/src/modules/engines/gl_cocoa/evas_engine.h69
-rw-r--r--libraries/evas/src/modules/engines/gl_cocoa/evas_gl_cocoa_main.m134
-rw-r--r--libraries/evas/src/modules/engines/gl_common/Makefile.am164
-rw-r--r--libraries/evas/src/modules/engines/gl_common/Makefile.in871
-rw-r--r--libraries/evas/src/modules/engines/gl_common/evas_gl_common.h659
-rw-r--r--libraries/evas/src/modules/engines/gl_common/evas_gl_context.c2723
-rw-r--r--libraries/evas/src/modules/engines/gl_common/evas_gl_filter.c181
-rw-r--r--libraries/evas/src/modules/engines/gl_common/evas_gl_font.c203
-rw-r--r--libraries/evas/src/modules/engines/gl_common/evas_gl_image.c968
-rw-r--r--libraries/evas/src/modules/engines/gl_common/evas_gl_line.c32
-rw-r--r--libraries/evas/src/modules/engines/gl_common/evas_gl_polygon.c307
-rw-r--r--libraries/evas/src/modules/engines/gl_common/evas_gl_private.h32
-rw-r--r--libraries/evas/src/modules/engines/gl_common/evas_gl_rectangle.c53
-rw-r--r--libraries/evas/src/modules/engines/gl_common/evas_gl_shader.c1262
-rw-r--r--libraries/evas/src/modules/engines/gl_common/evas_gl_texture.c1668
-rwxr-xr-xlibraries/evas/src/modules/engines/gl_common/shader/compile-s3c6410.sh47
-rwxr-xr-xlibraries/evas/src/modules/engines/gl_common/shader/compile-sgx.sh48
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_blur.h24
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_blur.shd24
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra.h24
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra.shd24
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra_nomul.h24
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra_nomul.shd24
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_blur_nomul.h24
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_blur_nomul.shd24
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale.h15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale.shd15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra.h15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra.shd15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra_nomul.h14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra_nomul.shd14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_nomul.h14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_nomul.shd14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_invert.h14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_invert.shd14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra.h14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra.shd14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra_nomul.h15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra_nomul.shd15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_invert_nomul.h14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_invert_nomul.shd14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_sepia.h20
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_sepia.shd20
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra.h20
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra.shd20
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra_nomul.h18
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra_nomul.shd18
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_nomul.h18
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_nomul.shd18
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/font_frag.h14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/font_frag.shd14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/font_frag_bin_s3c6410.h9
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/font_frag_s3c6410.asm26
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/font_vert.h15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/font_vert.shd15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/font_vert_bin_s3c6410.h20
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag.h14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag.shd14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag_bin_s3c6410.h11
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag.h13
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag.shd13
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag_bin_s3c6410.h10
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert.h12
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert.shd12
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert_bin_s3c6410.h17
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert.h15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert.shd15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert_bin_s3c6410.h20
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_frag.h14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_frag.shd14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_frag_bin_s3c6410.h9
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_frag_s3c6410.asm26
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_mask_frag.h15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_mask_vert.h16
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag.h13
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag.shd13
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag_bin_s3c6410.h10
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert.h12
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert.shd12
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert_bin_s3c6410.h17
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_vert.h15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_vert.shd15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/img_vert_bin_s3c6410.h20
-rwxr-xr-xlibraries/evas/src/modules/engines/gl_common/shader/make-c-bin.sh3
-rwxr-xr-xlibraries/evas/src/modules/engines/gl_common/shader/make-c-str.sh3
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/nv12_frag.h31
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/nv12_frag.shd31
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_frag.h31
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_frag.shd31
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_vert.h14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_vert.shd14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/nv12_vert.h16
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/nv12_vert.shd16
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/rect_frag.h13
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/rect_frag.shd13
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/rect_frag_bin_s3c6410.h6
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/rect_frag_s3c6410.asm24
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/rect_vert.h12
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/rect_vert.shd12
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/rect_vert_bin_s3c6410.h17
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_frag.h14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_frag.shd14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_frag_bin_s3c6410.h9
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_frag_s3c6410.asm26
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag.h13
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag.shd13
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag_bin_s3c6410.h10
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert.h12
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert.shd12
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert_bin_s3c6410.h17
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_vert.h15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_vert.shd15
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/tex_vert_bin_s3c6410.h20
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_frag.h20
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_frag.shd20
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_frag_bin_s3c6410.h24
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_frag_s3c6410.asm46
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag.h19
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag.shd19
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag_bin_s3c6410.h23
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert.h14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert.shd14
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert_bin_s3c6410.h23
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_vert.h17
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_vert.shd17
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuv_vert_bin_s3c6410.h26
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuy2_frag.h30
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuy2_frag.shd30
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_frag.h30
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_frag.shd30
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_vert.h13
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_vert.shd13
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuy2_vert.h16
-rw-r--r--libraries/evas/src/modules/engines/gl_common/shader/yuy2_vert.shd16
-rw-r--r--libraries/evas/src/modules/engines/gl_sdl/Evas_Engine_GL_SDL.h24
-rw-r--r--libraries/evas/src/modules/engines/gl_sdl/Makefile.am46
-rw-r--r--libraries/evas/src/modules/engines/gl_sdl/Makefile.in796
-rw-r--r--libraries/evas/src/modules/engines/gl_sdl/evas_engine.c1081
-rw-r--r--libraries/evas/src/modules/engines/gl_sdl/evas_engine.h73
-rw-r--r--libraries/evas/src/modules/engines/gl_x11/Evas_Engine_GL_X11.h46
-rw-r--r--libraries/evas/src/modules/engines/gl_x11/Makefile.am47
-rw-r--r--libraries/evas/src/modules/engines/gl_x11/Makefile.in810
-rw-r--r--libraries/evas/src/modules/engines/gl_x11/evas_engine.c3993
-rw-r--r--libraries/evas/src/modules/engines/gl_x11/evas_engine.h126
-rw-r--r--libraries/evas/src/modules/engines/gl_x11/evas_x_main.c901
-rw-r--r--libraries/evas/src/modules/engines/psl1ght/Evas_Engine_PSL1GHT.h16
-rw-r--r--libraries/evas/src/modules/engines/psl1ght/Makefile.am47
-rw-r--r--libraries/evas/src/modules/engines/psl1ght/Makefile.in810
-rw-r--r--libraries/evas/src/modules/engines/psl1ght/evas_engine.c511
-rw-r--r--libraries/evas/src/modules/engines/psl1ght/evas_engine.h30
-rw-r--r--libraries/evas/src/modules/engines/psl1ght/rsxutil.c275
-rw-r--r--libraries/evas/src/modules/engines/psl1ght/rsxutil.h43
-rw-r--r--libraries/evas/src/modules/engines/software_16/Makefile.am39
-rw-r--r--libraries/evas/src/modules/engines/software_16/Makefile.in765
-rw-r--r--libraries/evas/src/modules/engines/software_16/evas_engine.c399
-rw-r--r--libraries/evas/src/modules/engines/software_16_ddraw/Evas_Engine_Software_16_DDraw.h32
-rw-r--r--libraries/evas/src/modules/engines/software_16_ddraw/Makefile.am49
-rw-r--r--libraries/evas/src/modules/engines/software_16_ddraw/Makefile.in869
-rw-r--r--libraries/evas/src/modules/engines/software_16_ddraw/evas_ddraw_buffer.cpp87
-rw-r--r--libraries/evas/src/modules/engines/software_16_ddraw/evas_ddraw_main.cpp71
-rw-r--r--libraries/evas/src/modules/engines/software_16_ddraw/evas_engine.c628
-rw-r--r--libraries/evas/src/modules/engines/software_16_ddraw/evas_engine.h85
-rw-r--r--libraries/evas/src/modules/engines/software_16_sdl/Evas_Engine_SDL_16.h25
-rw-r--r--libraries/evas/src/modules/engines/software_16_sdl/Makefile.am40
-rw-r--r--libraries/evas/src/modules/engines/software_16_sdl/Makefile.in780
-rw-r--r--libraries/evas/src/modules/engines/software_16_sdl/evas_engine.c1337
-rw-r--r--libraries/evas/src/modules/engines/software_16_sdl/evas_engine.h79
-rw-r--r--libraries/evas/src/modules/engines/software_16_wince/Evas_Engine_Software_16_WinCE.h35
-rw-r--r--libraries/evas/src/modules/engines/software_16_wince/Makefile.am52
-rw-r--r--libraries/evas/src/modules/engines/software_16_wince/Makefile.in898
-rw-r--r--libraries/evas/src/modules/engines/software_16_wince/evas_engine.c770
-rw-r--r--libraries/evas/src/modules/engines/software_16_wince/evas_engine.h120
-rw-r--r--libraries/evas/src/modules/engines/software_16_wince/evas_wince_ddraw_buffer.cpp195
-rw-r--r--libraries/evas/src/modules/engines/software_16_wince/evas_wince_fb_buffer.c210
-rw-r--r--libraries/evas/src/modules/engines/software_16_wince/evas_wince_gapi_buffer.c341
-rw-r--r--libraries/evas/src/modules/engines/software_16_wince/evas_wince_gdi_buffer.c165
-rw-r--r--libraries/evas/src/modules/engines/software_16_x11/Evas_Engine_Software_16_X11.h26
-rw-r--r--libraries/evas/src/modules/engines/software_16_x11/Makefile.am47
-rw-r--r--libraries/evas/src/modules/engines/software_16_x11/Makefile.in812
-rw-r--r--libraries/evas/src/modules/engines/software_16_x11/evas_engine.c741
-rw-r--r--libraries/evas/src/modules/engines/software_16_x11/evas_engine.h63
-rw-r--r--libraries/evas/src/modules/engines/software_16_x11/evas_x_buffer.c186
-rw-r--r--libraries/evas/src/modules/engines/software_8/Makefile.am39
-rw-r--r--libraries/evas/src/modules/engines/software_8/Makefile.in764
-rw-r--r--libraries/evas/src/modules/engines/software_8/evas_engine.c440
-rw-r--r--libraries/evas/src/modules/engines/software_8_x11/Evas_Engine_Software_8_X11.h38
-rw-r--r--libraries/evas/src/modules/engines/software_8_x11/Makefile.am49
-rw-r--r--libraries/evas/src/modules/engines/software_8_x11/Makefile.in814
-rw-r--r--libraries/evas/src/modules/engines/software_8_x11/evas_engine.c699
-rw-r--r--libraries/evas/src/modules/engines/software_8_x11/evas_engine.h65
-rw-r--r--libraries/evas/src/modules/engines/software_8_x11/evas_x_buffer.c243
-rw-r--r--libraries/evas/src/modules/engines/software_ddraw/Evas_Engine_Software_DDraw.h30
-rw-r--r--libraries/evas/src/modules/engines/software_ddraw/Makefile.am48
-rw-r--r--libraries/evas/src/modules/engines/software_ddraw/Makefile.in880
-rw-r--r--libraries/evas/src/modules/engines/software_ddraw/evas_ddraw_buffer.c92
-rw-r--r--libraries/evas/src/modules/engines/software_ddraw/evas_ddraw_main.cpp248
-rw-r--r--libraries/evas/src/modules/engines/software_ddraw/evas_engine.c379
-rw-r--r--libraries/evas/src/modules/engines/software_ddraw/evas_engine.h220
-rw-r--r--libraries/evas/src/modules/engines/software_ddraw/evas_outbuf.c460
-rw-r--r--libraries/evas/src/modules/engines/software_gdi/Evas_Engine_Software_Gdi.h32
-rw-r--r--libraries/evas/src/modules/engines/software_gdi/Makefile.am47
-rw-r--r--libraries/evas/src/modules/engines/software_gdi/Makefile.in838
-rw-r--r--libraries/evas/src/modules/engines/software_gdi/evas_engine.c387
-rw-r--r--libraries/evas/src/modules/engines/software_gdi/evas_engine.h209
-rw-r--r--libraries/evas/src/modules/engines/software_gdi/evas_gdi_buffer.c88
-rw-r--r--libraries/evas/src/modules/engines/software_gdi/evas_gdi_main.c100
-rw-r--r--libraries/evas/src/modules/engines/software_gdi/evas_outbuf.c656
-rw-r--r--libraries/evas/src/modules/engines/software_generic/Makefile.am35
-rw-r--r--libraries/evas/src/modules/engines/software_generic/Makefile.in763
-rw-r--r--libraries/evas/src/modules/engines/software_generic/evas_engine.c1230
-rw-r--r--libraries/evas/src/modules/engines/software_sdl/Evas_Engine_SDL.h27
-rw-r--r--libraries/evas/src/modules/engines/software_sdl/Makefile.am45
-rw-r--r--libraries/evas/src/modules/engines/software_sdl/Makefile.in796
-rw-r--r--libraries/evas/src/modules/engines/software_sdl/evas_engine.c1218
-rw-r--r--libraries/evas/src/modules/engines/software_sdl/evas_engine.h72
-rw-r--r--libraries/evas/src/modules/engines/software_x11/Evas_Engine_Software_X11.h52
-rw-r--r--libraries/evas/src/modules/engines/software_x11/Makefile.am85
-rw-r--r--libraries/evas/src/modules/engines/software_x11/Makefile.in948
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_engine.c929
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_engine.h137
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.c498
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.h30
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_color.c424
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_color.h10
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_main.c8
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.c1092
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.h30
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.c108
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.h11
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.c428
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.h45
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_color.c368
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_color.h16
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_main.c7
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.c1135
-rw-r--r--libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.h92
292 files changed, 65710 insertions, 0 deletions
diff --git a/libraries/evas/src/modules/engines/Makefile.am b/libraries/evas/src/modules/engines/Makefile.am
new file mode 100644
index 0000000..7d870a1
--- /dev/null
+++ b/libraries/evas/src/modules/engines/Makefile.am
@@ -0,0 +1,71 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3SUBDIRS =
4
5if !EVAS_STATIC_BUILD_SOFTWARE_GENERIC
6SUBDIRS += software_generic
7endif
8if !EVAS_STATIC_BUILD_BUFFER
9SUBDIRS += buffer
10endif
11if !EVAS_STATIC_BUILD_DIRECT3D
12SUBDIRS += direct3d
13endif
14if !EVAS_STATIC_BUILD_DIRECTFB
15SUBDIRS += directfb
16endif
17if !EVAS_STATIC_BUILD_FB
18SUBDIRS += fb
19endif
20
21if !EVAS_STATIC_BUILD_PSL1GHT
22SUBDIRS += psl1ght
23endif
24
25if !EVAS_STATIC_BUILD_GL_COMMON
26SUBDIRS += gl_common
27endif
28if !EVAS_STATIC_BUILD_GL_X11
29SUBDIRS += gl_x11
30endif
31if !EVAS_STATIC_BUILD_GL_SDL
32SUBDIRS += gl_sdl
33endif
34if !EVAS_STATIC_BUILD_GL_COCOA
35SUBDIRS += gl_cocoa
36endif
37
38if !EVAS_STATIC_BUILD_SOFTWARE_8
39SUBDIRS += software_8
40endif
41if !EVAS_STATIC_BUILD_SOFTWARE_8_X11
42SUBDIRS += software_8_x11
43endif
44if !EVAS_STATIC_BUILD_SOFTWARE_16
45SUBDIRS += software_16
46endif
47if !EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW
48SUBDIRS += software_16_ddraw
49endif
50if !EVAS_STATIC_BUILD_SOFTWARE_16_WINCE
51SUBDIRS += software_16_wince
52endif
53if !EVAS_STATIC_BUILD_SOFTWARE_16_X11
54SUBDIRS += software_16_x11
55endif
56if !EVAS_STATIC_BUILD_SOFTWARE_SDL
57SUBDIRS += software_sdl
58endif
59if !EVAS_STATIC_BUILD_SOFTWARE_16_SDL
60SUBDIRS += software_16_sdl
61endif
62if !EVAS_STATIC_BUILD_SOFTWARE_DDRAW
63SUBDIRS += software_ddraw
64endif
65if !EVAS_STATIC_BUILD_SOFTWARE_GDI
66SUBDIRS += software_gdi
67endif
68if !EVAS_STATIC_BUILD_SOFTWARE_X11
69SUBDIRS += software_x11
70endif
71
diff --git a/libraries/evas/src/modules/engines/Makefile.in b/libraries/evas/src/modules/engines/Makefile.in
new file mode 100644
index 0000000..3994fca
--- /dev/null
+++ b/libraries/evas/src/modules/engines/Makefile.in
@@ -0,0 +1,765 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17VPATH = @srcdir@
18pkgdatadir = $(datadir)/@PACKAGE@
19pkgincludedir = $(includedir)/@PACKAGE@
20pkglibdir = $(libdir)/@PACKAGE@
21pkglibexecdir = $(libexecdir)/@PACKAGE@
22am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
23install_sh_DATA = $(install_sh) -c -m 644
24install_sh_PROGRAM = $(install_sh) -c
25install_sh_SCRIPT = $(install_sh) -c
26INSTALL_HEADER = $(INSTALL_DATA)
27transform = $(program_transform_name)
28NORMAL_INSTALL = :
29PRE_INSTALL = :
30POST_INSTALL = :
31NORMAL_UNINSTALL = :
32PRE_UNINSTALL = :
33POST_UNINSTALL = :
34build_triplet = @build@
35host_triplet = @host@
36@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@am__append_1 = software_generic
37@EVAS_STATIC_BUILD_BUFFER_FALSE@am__append_2 = buffer
38@EVAS_STATIC_BUILD_DIRECT3D_FALSE@am__append_3 = direct3d
39@EVAS_STATIC_BUILD_DIRECTFB_FALSE@am__append_4 = directfb
40@EVAS_STATIC_BUILD_FB_FALSE@am__append_5 = fb
41@EVAS_STATIC_BUILD_PSL1GHT_FALSE@am__append_6 = psl1ght
42@EVAS_STATIC_BUILD_GL_COMMON_FALSE@am__append_7 = gl_common
43@EVAS_STATIC_BUILD_GL_X11_FALSE@am__append_8 = gl_x11
44@EVAS_STATIC_BUILD_GL_SDL_FALSE@am__append_9 = gl_sdl
45@EVAS_STATIC_BUILD_GL_COCOA_FALSE@am__append_10 = gl_cocoa
46@EVAS_STATIC_BUILD_SOFTWARE_8_FALSE@am__append_11 = software_8
47@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@am__append_12 = software_8_x11
48@EVAS_STATIC_BUILD_SOFTWARE_16_FALSE@am__append_13 = software_16
49@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@am__append_14 = software_16_ddraw
50@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@am__append_15 = software_16_wince
51@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@am__append_16 = software_16_x11
52@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@am__append_17 = software_sdl
53@EVAS_STATIC_BUILD_SOFTWARE_16_SDL_FALSE@am__append_18 = software_16_sdl
54@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@am__append_19 = software_ddraw
55@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@am__append_20 = software_gdi
56@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@am__append_21 = software_x11
57subdir = src/modules/engines
58DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
59ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
60am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
61 $(top_srcdir)/m4/efl_coverage.m4 \
62 $(top_srcdir)/m4/efl_doxygen.m4 \
63 $(top_srcdir)/m4/efl_fnmatch.m4 \
64 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
65 $(top_srcdir)/m4/evas_check_engine.m4 \
66 $(top_srcdir)/m4/evas_check_loader.m4 \
67 $(top_srcdir)/m4/evas_converter.m4 \
68 $(top_srcdir)/m4/evas_dither.m4 \
69 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
70 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
71 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
72 $(top_srcdir)/configure.ac
73am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
74 $(ACLOCAL_M4)
75mkinstalldirs = $(install_sh) -d
76CONFIG_HEADER = $(top_builddir)/config.h
77CONFIG_CLEAN_FILES =
78CONFIG_CLEAN_VPATH_FILES =
79AM_V_GEN = $(am__v_GEN_$(V))
80am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
81am__v_GEN_0 = @echo " GEN " $@;
82AM_V_at = $(am__v_at_$(V))
83am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
84am__v_at_0 = @
85SOURCES =
86DIST_SOURCES =
87RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
88 html-recursive info-recursive install-data-recursive \
89 install-dvi-recursive install-exec-recursive \
90 install-html-recursive install-info-recursive \
91 install-pdf-recursive install-ps-recursive install-recursive \
92 installcheck-recursive installdirs-recursive pdf-recursive \
93 ps-recursive uninstall-recursive
94RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
95 distclean-recursive maintainer-clean-recursive
96AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
97 $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
98 distdir
99ETAGS = etags
100CTAGS = ctags
101DIST_SUBDIRS = software_generic buffer direct3d directfb fb psl1ght \
102 gl_common gl_x11 gl_sdl gl_cocoa software_8 software_8_x11 \
103 software_16 software_16_ddraw software_16_wince \
104 software_16_x11 software_sdl software_16_sdl software_ddraw \
105 software_gdi software_x11
106DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
107am__relativize = \
108 dir0=`pwd`; \
109 sed_first='s,^\([^/]*\)/.*$$,\1,'; \
110 sed_rest='s,^[^/]*/*,,'; \
111 sed_last='s,^.*/\([^/]*\)$$,\1,'; \
112 sed_butlast='s,/*[^/]*$$,,'; \
113 while test -n "$$dir1"; do \
114 first=`echo "$$dir1" | sed -e "$$sed_first"`; \
115 if test "$$first" != "."; then \
116 if test "$$first" = ".."; then \
117 dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
118 dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
119 else \
120 first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
121 if test "$$first2" = "$$first"; then \
122 dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
123 else \
124 dir2="../$$dir2"; \
125 fi; \
126 dir0="$$dir0"/"$$first"; \
127 fi; \
128 fi; \
129 dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
130 done; \
131 reldir="$$dir2"
132ACLOCAL = @ACLOCAL@
133ALLOCA = @ALLOCA@
134AMTAR = @AMTAR@
135AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
136AR = @AR@
137AS = @AS@
138AUTOCONF = @AUTOCONF@
139AUTOHEADER = @AUTOHEADER@
140AUTOMAKE = @AUTOMAKE@
141AWK = @AWK@
142CC = @CC@
143CCDEPMODE = @CCDEPMODE@
144CFLAGS = @CFLAGS@
145CHECK_CFLAGS = @CHECK_CFLAGS@
146CHECK_LIBS = @CHECK_LIBS@
147CPP = @CPP@
148CPPFLAGS = @CPPFLAGS@
149CXX = @CXX@
150CXXCPP = @CXXCPP@
151CXXDEPMODE = @CXXDEPMODE@
152CXXFLAGS = @CXXFLAGS@
153CYGPATH_W = @CYGPATH_W@
154DEFS = @DEFS@
155DEPDIR = @DEPDIR@
156DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
157DIRECTFB_LIBS = @DIRECTFB_LIBS@
158DLLTOOL = @DLLTOOL@
159DSYMUTIL = @DSYMUTIL@
160DUMPBIN = @DUMPBIN@
161ECHO_C = @ECHO_C@
162ECHO_N = @ECHO_N@
163ECHO_T = @ECHO_T@
164ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
165ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
166EDB_CFLAGS = @EDB_CFLAGS@
167EDB_LIBS = @EDB_LIBS@
168EDJE_CFLAGS = @EDJE_CFLAGS@
169EDJE_LIBS = @EDJE_LIBS@
170EET_CFLAGS = @EET_CFLAGS@
171EET_LIBS = @EET_LIBS@
172EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
173EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
174EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
175EGREP = @EGREP@
176EINA_CFLAGS = @EINA_CFLAGS@
177EINA_LIBS = @EINA_LIBS@
178EVAS_CFLAGS = @EVAS_CFLAGS@
179EVAS_LIBS = @EVAS_LIBS@
180EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
181EVIL_CFLAGS = @EVIL_CFLAGS@
182EVIL_LIBS = @EVIL_LIBS@
183EXEEXT = @EXEEXT@
184FGREP = @FGREP@
185FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
186FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
187FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
188FREETYPE_LIBS = @FREETYPE_LIBS@
189FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
190FRIBIDI_LIBS = @FRIBIDI_LIBS@
191GL_EET_CFLAGS = @GL_EET_CFLAGS@
192GL_EET_LIBS = @GL_EET_LIBS@
193GREP = @GREP@
194HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
195HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
196INSTALL = @INSTALL@
197INSTALL_DATA = @INSTALL_DATA@
198INSTALL_PROGRAM = @INSTALL_PROGRAM@
199INSTALL_SCRIPT = @INSTALL_SCRIPT@
200INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
201LD = @LD@
202LDFLAGS = @LDFLAGS@
203LIBOBJS = @LIBOBJS@
204LIBS = @LIBS@
205LIBTOOL = @LIBTOOL@
206LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
207LINEBREAK_LIBS = @LINEBREAK_LIBS@
208LIPO = @LIPO@
209LN_S = @LN_S@
210LTLIBOBJS = @LTLIBOBJS@
211MAKEINFO = @MAKEINFO@
212MKDIR_P = @MKDIR_P@
213MODULE_ARCH = @MODULE_ARCH@
214NM = @NM@
215NMEDIT = @NMEDIT@
216OBJC = @OBJC@
217OBJCDEPMODE = @OBJCDEPMODE@
218OBJCFLAGS = @OBJCFLAGS@
219OBJDUMP = @OBJDUMP@
220OBJEXT = @OBJEXT@
221OTOOL = @OTOOL@
222OTOOL64 = @OTOOL64@
223PACKAGE = @PACKAGE@
224PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
225PACKAGE_NAME = @PACKAGE_NAME@
226PACKAGE_STRING = @PACKAGE_STRING@
227PACKAGE_TARNAME = @PACKAGE_TARNAME@
228PACKAGE_URL = @PACKAGE_URL@
229PACKAGE_VERSION = @PACKAGE_VERSION@
230PATH_SEPARATOR = @PATH_SEPARATOR@
231PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
232PIXMAN_LIBS = @PIXMAN_LIBS@
233PKG_CONFIG = @PKG_CONFIG@
234PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
235PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
236PNG_CFLAGS = @PNG_CFLAGS@
237PNG_LIBS = @PNG_LIBS@
238RANLIB = @RANLIB@
239SDL_CFLAGS = @SDL_CFLAGS@
240SDL_LIBS = @SDL_LIBS@
241SED = @SED@
242SET_MAKE = @SET_MAKE@
243SHELL = @SHELL@
244SHM_OPEN_LINK = @SHM_OPEN_LINK@
245STRIP = @STRIP@
246SVG_CFLAGS = @SVG_CFLAGS@
247SVG_LIBS = @SVG_LIBS@
248VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
249VALGRIND_LIBS = @VALGRIND_LIBS@
250VERSION = @VERSION@
251VMAJ = @VMAJ@
252WIN32_CFLAGS = @WIN32_CFLAGS@
253WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
254XCB_CFLAGS = @XCB_CFLAGS@
255XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
256XCB_GL_LIBS = @XCB_GL_LIBS@
257XCB_LIBS = @XCB_LIBS@
258XEXT_CFLAGS = @XEXT_CFLAGS@
259XEXT_LIBS = @XEXT_LIBS@
260XMKMF = @XMKMF@
261X_CFLAGS = @X_CFLAGS@
262X_EXTRA_LIBS = @X_EXTRA_LIBS@
263X_LIBS = @X_LIBS@
264X_PRE_LIBS = @X_PRE_LIBS@
265abs_builddir = @abs_builddir@
266abs_srcdir = @abs_srcdir@
267abs_top_builddir = @abs_top_builddir@
268abs_top_srcdir = @abs_top_srcdir@
269ac_ct_CC = @ac_ct_CC@
270ac_ct_CXX = @ac_ct_CXX@
271ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
272ac_ct_OBJC = @ac_ct_OBJC@
273altivec_cflags = @altivec_cflags@
274am__include = @am__include@
275am__leading_dot = @am__leading_dot@
276am__quote = @am__quote@
277am__tar = @am__tar@
278am__untar = @am__untar@
279bindir = @bindir@
280build = @build@
281build_alias = @build_alias@
282build_cpu = @build_cpu@
283build_os = @build_os@
284build_vendor = @build_vendor@
285builddir = @builddir@
286datadir = @datadir@
287datarootdir = @datarootdir@
288dlopen_libs = @dlopen_libs@
289docdir = @docdir@
290dvidir = @dvidir@
291edje_cc = @edje_cc@
292efl_doxygen = @efl_doxygen@
293efl_have_doxygen = @efl_have_doxygen@
294evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
295evas_engine_buffer_libs = @evas_engine_buffer_libs@
296evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
297evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
298evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
299evas_engine_directfb_libs = @evas_engine_directfb_libs@
300evas_engine_fb_cflags = @evas_engine_fb_cflags@
301evas_engine_fb_libs = @evas_engine_fb_libs@
302evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
303evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
304evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
305evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
306evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
307evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
308evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
309evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
310evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
311evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
312evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
313evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
314evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
315evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
316evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
317evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
318evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
319evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
320evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
321evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
322evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
323evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
324evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
325evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
326evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
327evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
328evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
329evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
330evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
331evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
332evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
333evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
334evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
335evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
336evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
337evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
338evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
339evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
340evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
341evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
342evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
343evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
344evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
345evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
346evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
347evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
348evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
349evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
350evas_image_loader_png_libs = @evas_image_loader_png_libs@
351evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
352evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
353evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
354evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
355evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
356evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
357evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
358evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
359evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
360evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
361evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
362evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
363exec_prefix = @exec_prefix@
364have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
365have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
366have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
367have_evas_engine_software_x11 = @have_evas_engine_software_x11@
368have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
369have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
370have_lcov = @have_lcov@
371host = @host@
372host_alias = @host_alias@
373host_cpu = @host_cpu@
374host_os = @host_os@
375host_vendor = @host_vendor@
376htmldir = @htmldir@
377includedir = @includedir@
378infodir = @infodir@
379install_sh = @install_sh@
380libdir = @libdir@
381libexecdir = @libexecdir@
382localedir = @localedir@
383localstatedir = @localstatedir@
384lt_ECHO = @lt_ECHO@
385lt_enable_auto_import = @lt_enable_auto_import@
386mandir = @mandir@
387mkdir_p = @mkdir_p@
388oldincludedir = @oldincludedir@
389pdfdir = @pdfdir@
390pkgconfig_requires_private = @pkgconfig_requires_private@
391prefix = @prefix@
392program_transform_name = @program_transform_name@
393psdir = @psdir@
394pthread_cflags = @pthread_cflags@
395pthread_libs = @pthread_libs@
396release_info = @release_info@
397requirement_evas = @requirement_evas@
398sbindir = @sbindir@
399sharedstatedir = @sharedstatedir@
400srcdir = @srcdir@
401sysconfdir = @sysconfdir@
402target_alias = @target_alias@
403top_build_prefix = @top_build_prefix@
404top_builddir = @top_builddir@
405top_srcdir = @top_srcdir@
406version_info = @version_info@
407MAINTAINERCLEANFILES = Makefile.in
408SUBDIRS = $(am__append_1) $(am__append_2) $(am__append_3) \
409 $(am__append_4) $(am__append_5) $(am__append_6) \
410 $(am__append_7) $(am__append_8) $(am__append_9) \
411 $(am__append_10) $(am__append_11) $(am__append_12) \
412 $(am__append_13) $(am__append_14) $(am__append_15) \
413 $(am__append_16) $(am__append_17) $(am__append_18) \
414 $(am__append_19) $(am__append_20) $(am__append_21)
415all: all-recursive
416
417.SUFFIXES:
418$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
419 @for dep in $?; do \
420 case '$(am__configure_deps)' in \
421 *$$dep*) \
422 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
423 && { if test -f $@; then exit 0; else break; fi; }; \
424 exit 1;; \
425 esac; \
426 done; \
427 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/Makefile'; \
428 $(am__cd) $(top_srcdir) && \
429 $(AUTOMAKE) --gnu src/modules/engines/Makefile
430.PRECIOUS: Makefile
431Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
432 @case '$?' in \
433 *config.status*) \
434 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
435 *) \
436 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
437 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
438 esac;
439
440$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
441 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
442
443$(top_srcdir)/configure: $(am__configure_deps)
444 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
445$(ACLOCAL_M4): $(am__aclocal_m4_deps)
446 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
447$(am__aclocal_m4_deps):
448
449mostlyclean-libtool:
450 -rm -f *.lo
451
452clean-libtool:
453 -rm -rf .libs _libs
454
455# This directory's subdirectories are mostly independent; you can cd
456# into them and run `make' without going through this Makefile.
457# To change the values of `make' variables: instead of editing Makefiles,
458# (1) if the variable is set in `config.status', edit `config.status'
459# (which will cause the Makefiles to be regenerated when you run `make');
460# (2) otherwise, pass the desired values on the `make' command line.
461$(RECURSIVE_TARGETS):
462 @fail= failcom='exit 1'; \
463 for f in x $$MAKEFLAGS; do \
464 case $$f in \
465 *=* | --[!k]*);; \
466 *k*) failcom='fail=yes';; \
467 esac; \
468 done; \
469 dot_seen=no; \
470 target=`echo $@ | sed s/-recursive//`; \
471 list='$(SUBDIRS)'; for subdir in $$list; do \
472 echo "Making $$target in $$subdir"; \
473 if test "$$subdir" = "."; then \
474 dot_seen=yes; \
475 local_target="$$target-am"; \
476 else \
477 local_target="$$target"; \
478 fi; \
479 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
480 || eval $$failcom; \
481 done; \
482 if test "$$dot_seen" = "no"; then \
483 $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
484 fi; test -z "$$fail"
485
486$(RECURSIVE_CLEAN_TARGETS):
487 @fail= failcom='exit 1'; \
488 for f in x $$MAKEFLAGS; do \
489 case $$f in \
490 *=* | --[!k]*);; \
491 *k*) failcom='fail=yes';; \
492 esac; \
493 done; \
494 dot_seen=no; \
495 case "$@" in \
496 distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
497 *) list='$(SUBDIRS)' ;; \
498 esac; \
499 rev=''; for subdir in $$list; do \
500 if test "$$subdir" = "."; then :; else \
501 rev="$$subdir $$rev"; \
502 fi; \
503 done; \
504 rev="$$rev ."; \
505 target=`echo $@ | sed s/-recursive//`; \
506 for subdir in $$rev; do \
507 echo "Making $$target in $$subdir"; \
508 if test "$$subdir" = "."; then \
509 local_target="$$target-am"; \
510 else \
511 local_target="$$target"; \
512 fi; \
513 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
514 || eval $$failcom; \
515 done && test -z "$$fail"
516tags-recursive:
517 list='$(SUBDIRS)'; for subdir in $$list; do \
518 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
519 done
520ctags-recursive:
521 list='$(SUBDIRS)'; for subdir in $$list; do \
522 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
523 done
524
525ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
526 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
527 unique=`for i in $$list; do \
528 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
529 done | \
530 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
531 END { if (nonempty) { for (i in files) print i; }; }'`; \
532 mkid -fID $$unique
533tags: TAGS
534
535TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
536 $(TAGS_FILES) $(LISP)
537 set x; \
538 here=`pwd`; \
539 if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
540 include_option=--etags-include; \
541 empty_fix=.; \
542 else \
543 include_option=--include; \
544 empty_fix=; \
545 fi; \
546 list='$(SUBDIRS)'; for subdir in $$list; do \
547 if test "$$subdir" = .; then :; else \
548 test ! -f $$subdir/TAGS || \
549 set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
550 fi; \
551 done; \
552 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
553 unique=`for i in $$list; do \
554 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
555 done | \
556 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
557 END { if (nonempty) { for (i in files) print i; }; }'`; \
558 shift; \
559 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
560 test -n "$$unique" || unique=$$empty_fix; \
561 if test $$# -gt 0; then \
562 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
563 "$$@" $$unique; \
564 else \
565 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
566 $$unique; \
567 fi; \
568 fi
569ctags: CTAGS
570CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
571 $(TAGS_FILES) $(LISP)
572 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
573 unique=`for i in $$list; do \
574 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
575 done | \
576 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
577 END { if (nonempty) { for (i in files) print i; }; }'`; \
578 test -z "$(CTAGS_ARGS)$$unique" \
579 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
580 $$unique
581
582GTAGS:
583 here=`$(am__cd) $(top_builddir) && pwd` \
584 && $(am__cd) $(top_srcdir) \
585 && gtags -i $(GTAGS_ARGS) "$$here"
586
587distclean-tags:
588 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
589
590distdir: $(DISTFILES)
591 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
592 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
593 list='$(DISTFILES)'; \
594 dist_files=`for file in $$list; do echo $$file; done | \
595 sed -e "s|^$$srcdirstrip/||;t" \
596 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
597 case $$dist_files in \
598 */*) $(MKDIR_P) `echo "$$dist_files" | \
599 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
600 sort -u` ;; \
601 esac; \
602 for file in $$dist_files; do \
603 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
604 if test -d $$d/$$file; then \
605 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
606 if test -d "$(distdir)/$$file"; then \
607 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
608 fi; \
609 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
610 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
611 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
612 fi; \
613 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
614 else \
615 test -f "$(distdir)/$$file" \
616 || cp -p $$d/$$file "$(distdir)/$$file" \
617 || exit 1; \
618 fi; \
619 done
620 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
621 if test "$$subdir" = .; then :; else \
622 test -d "$(distdir)/$$subdir" \
623 || $(MKDIR_P) "$(distdir)/$$subdir" \
624 || exit 1; \
625 fi; \
626 done
627 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
628 if test "$$subdir" = .; then :; else \
629 dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
630 $(am__relativize); \
631 new_distdir=$$reldir; \
632 dir1=$$subdir; dir2="$(top_distdir)"; \
633 $(am__relativize); \
634 new_top_distdir=$$reldir; \
635 echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
636 echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
637 ($(am__cd) $$subdir && \
638 $(MAKE) $(AM_MAKEFLAGS) \
639 top_distdir="$$new_top_distdir" \
640 distdir="$$new_distdir" \
641 am__remove_distdir=: \
642 am__skip_length_check=: \
643 am__skip_mode_fix=: \
644 distdir) \
645 || exit 1; \
646 fi; \
647 done
648check-am: all-am
649check: check-recursive
650all-am: Makefile
651installdirs: installdirs-recursive
652installdirs-am:
653install: install-recursive
654install-exec: install-exec-recursive
655install-data: install-data-recursive
656uninstall: uninstall-recursive
657
658install-am: all-am
659 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
660
661installcheck: installcheck-recursive
662install-strip:
663 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
664 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
665 `test -z '$(STRIP)' || \
666 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
667mostlyclean-generic:
668
669clean-generic:
670
671distclean-generic:
672 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
673 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
674
675maintainer-clean-generic:
676 @echo "This command is intended for maintainers to use"
677 @echo "it deletes files that may require special tools to rebuild."
678 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
679clean: clean-recursive
680
681clean-am: clean-generic clean-libtool mostlyclean-am
682
683distclean: distclean-recursive
684 -rm -f Makefile
685distclean-am: clean-am distclean-generic distclean-tags
686
687dvi: dvi-recursive
688
689dvi-am:
690
691html: html-recursive
692
693html-am:
694
695info: info-recursive
696
697info-am:
698
699install-data-am:
700
701install-dvi: install-dvi-recursive
702
703install-dvi-am:
704
705install-exec-am:
706
707install-html: install-html-recursive
708
709install-html-am:
710
711install-info: install-info-recursive
712
713install-info-am:
714
715install-man:
716
717install-pdf: install-pdf-recursive
718
719install-pdf-am:
720
721install-ps: install-ps-recursive
722
723install-ps-am:
724
725installcheck-am:
726
727maintainer-clean: maintainer-clean-recursive
728 -rm -f Makefile
729maintainer-clean-am: distclean-am maintainer-clean-generic
730
731mostlyclean: mostlyclean-recursive
732
733mostlyclean-am: mostlyclean-generic mostlyclean-libtool
734
735pdf: pdf-recursive
736
737pdf-am:
738
739ps: ps-recursive
740
741ps-am:
742
743uninstall-am:
744
745.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
746 install-am install-strip tags-recursive
747
748.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
749 all all-am check check-am clean clean-generic clean-libtool \
750 ctags ctags-recursive distclean distclean-generic \
751 distclean-libtool distclean-tags distdir dvi dvi-am html \
752 html-am info info-am install install-am install-data \
753 install-data-am install-dvi install-dvi-am install-exec \
754 install-exec-am install-html install-html-am install-info \
755 install-info-am install-man install-pdf install-pdf-am \
756 install-ps install-ps-am install-strip installcheck \
757 installcheck-am installdirs installdirs-am maintainer-clean \
758 maintainer-clean-generic mostlyclean mostlyclean-generic \
759 mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
760 uninstall uninstall-am
761
762
763# Tell versions [3.59,3.63) of GNU make to not export all variables.
764# Otherwise a system limit (for SysV at least) may be exceeded.
765.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/buffer/Evas_Engine_Buffer.h b/libraries/evas/src/modules/engines/buffer/Evas_Engine_Buffer.h
new file mode 100644
index 0000000..e6d11d1
--- /dev/null
+++ b/libraries/evas/src/modules/engines/buffer/Evas_Engine_Buffer.h
@@ -0,0 +1,40 @@
1#ifndef _EVAS_ENGINE_BUFFER_H
2#define _EVAS_ENGINE_BUFFER_H
3
4#define EVAS_ENGINE_BUFFER_DEPTH_ARGB32 0
5#define EVAS_ENGINE_BUFFER_DEPTH_BGRA32 1
6#define EVAS_ENGINE_BUFFER_DEPTH_RGB24 2
7#define EVAS_ENGINE_BUFFER_DEPTH_BGR24 3
8#define EVAS_ENGINE_BUFFER_DEPTH_RGB32 4
9
10typedef struct _Evas_Engine_Info_Buffer Evas_Engine_Info_Buffer;
11
12struct _Evas_Engine_Info_Buffer
13{
14 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
15 /* at you and make nasty noises */
16 Evas_Engine_Info magic;
17
18 struct {
19 int depth_type;
20
21 void *dest_buffer;
22 int dest_buffer_row_bytes;
23
24 char use_color_key : 1;
25 int alpha_threshold;
26 int color_key_r;
27 int color_key_g;
28 int color_key_b;
29 struct {
30 void * (*new_update_region) (int x, int y, int w, int h, int *row_bytes);
31 void (*free_update_region) (int x, int y, int w, int h, void *data);
32 } func;
33 } info;
34
35 /* non-blocking or blocking mode */
36 Evas_Engine_Render_Mode render_mode;
37};
38#endif
39
40
diff --git a/libraries/evas/src/modules/engines/buffer/Makefile.am b/libraries/evas/src/modules/engines/buffer/Makefile.am
new file mode 100644
index 0000000..19ac5a7
--- /dev/null
+++ b/libraries/evas/src/modules/engines/buffer/Makefile.am
@@ -0,0 +1,44 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9@EINA_CFLAGS@ \
10@FREETYPE_CFLAGS@ \
11@PIXMAN_CFLAGS@
12
13AM_CFLAGS = @WIN32_CFLAGS@
14
15if BUILD_ENGINE_BUFFER
16
17BUFFER_SOURCES = \
18evas_engine.c \
19evas_outbuf.c
20
21
22includes_HEADERS = Evas_Engine_Buffer.h
23includesdir = $(includedir)/evas-@VMAJ@
24
25if !EVAS_STATIC_BUILD_BUFFER
26
27pkgdir = $(libdir)/evas/modules/engines/buffer/$(MODULE_ARCH)
28pkg_LTLIBRARIES = module.la
29
30module_la_SOURCES = $(BUFFER_SOURCES)
31module_la_LIBADD = $(top_builddir)/src/lib/libevas.la @EINA_LIBS@
32module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
33module_la_LIBTOOLFLAGS = --tag=disable-static
34
35else
36
37noinst_LTLIBRARIES = libevas_engine_buffer.la
38
39libevas_engine_buffer_la_SOURCES = $(BUFFER_SOURCES)
40
41endif
42endif
43
44EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/buffer/Makefile.in b/libraries/evas/src/modules/engines/buffer/Makefile.in
new file mode 100644
index 0000000..2311344
--- /dev/null
+++ b/libraries/evas/src/modules/engines/buffer/Makefile.in
@@ -0,0 +1,805 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/buffer
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84libevas_engine_buffer_la_LIBADD =
85am__libevas_engine_buffer_la_SOURCES_DIST = evas_engine.c \
86 evas_outbuf.c
87@BUILD_ENGINE_BUFFER_TRUE@am__objects_1 = evas_engine.lo \
88@BUILD_ENGINE_BUFFER_TRUE@ evas_outbuf.lo
89@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_TRUE@am_libevas_engine_buffer_la_OBJECTS = $(am__objects_1)
90libevas_engine_buffer_la_OBJECTS = \
91 $(am_libevas_engine_buffer_la_OBJECTS)
92AM_V_lt = $(am__v_lt_$(V))
93am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
94am__v_lt_0 = --silent
95@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_TRUE@am_libevas_engine_buffer_la_rpath =
96@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la
97am__module_la_SOURCES_DIST = evas_engine.c evas_outbuf.c
98@BUILD_ENGINE_BUFFER_TRUE@am__objects_2 = module_la-evas_engine.lo \
99@BUILD_ENGINE_BUFFER_TRUE@ module_la-evas_outbuf.lo
100@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_FALSE@am_module_la_OBJECTS = $(am__objects_2)
101module_la_OBJECTS = $(am_module_la_OBJECTS)
102module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
103 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
104 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
105@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_FALSE@am_module_la_rpath = -rpath \
106@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_FALSE@ $(pkgdir)
107DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
108depcomp = $(SHELL) $(top_srcdir)/depcomp
109am__depfiles_maybe = depfiles
110am__mv = mv -f
111COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
112 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
113LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
114 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
115 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
116 $(AM_CFLAGS) $(CFLAGS)
117AM_V_CC = $(am__v_CC_$(V))
118am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
119am__v_CC_0 = @echo " CC " $@;
120AM_V_at = $(am__v_at_$(V))
121am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
122am__v_at_0 = @
123CCLD = $(CC)
124LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
125 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
126 $(AM_LDFLAGS) $(LDFLAGS) -o $@
127AM_V_CCLD = $(am__v_CCLD_$(V))
128am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
129am__v_CCLD_0 = @echo " CCLD " $@;
130AM_V_GEN = $(am__v_GEN_$(V))
131am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
132am__v_GEN_0 = @echo " GEN " $@;
133SOURCES = $(libevas_engine_buffer_la_SOURCES) $(module_la_SOURCES)
134DIST_SOURCES = $(am__libevas_engine_buffer_la_SOURCES_DIST) \
135 $(am__module_la_SOURCES_DIST)
136am__includes_HEADERS_DIST = Evas_Engine_Buffer.h
137HEADERS = $(includes_HEADERS)
138ETAGS = etags
139CTAGS = ctags
140DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
141ACLOCAL = @ACLOCAL@
142ALLOCA = @ALLOCA@
143AMTAR = @AMTAR@
144AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
145AR = @AR@
146AS = @AS@
147AUTOCONF = @AUTOCONF@
148AUTOHEADER = @AUTOHEADER@
149AUTOMAKE = @AUTOMAKE@
150AWK = @AWK@
151CC = @CC@
152CCDEPMODE = @CCDEPMODE@
153CFLAGS = @CFLAGS@
154CHECK_CFLAGS = @CHECK_CFLAGS@
155CHECK_LIBS = @CHECK_LIBS@
156CPP = @CPP@
157CPPFLAGS = @CPPFLAGS@
158CXX = @CXX@
159CXXCPP = @CXXCPP@
160CXXDEPMODE = @CXXDEPMODE@
161CXXFLAGS = @CXXFLAGS@
162CYGPATH_W = @CYGPATH_W@
163DEFS = @DEFS@
164DEPDIR = @DEPDIR@
165DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
166DIRECTFB_LIBS = @DIRECTFB_LIBS@
167DLLTOOL = @DLLTOOL@
168DSYMUTIL = @DSYMUTIL@
169DUMPBIN = @DUMPBIN@
170ECHO_C = @ECHO_C@
171ECHO_N = @ECHO_N@
172ECHO_T = @ECHO_T@
173ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
174ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
175EDB_CFLAGS = @EDB_CFLAGS@
176EDB_LIBS = @EDB_LIBS@
177EDJE_CFLAGS = @EDJE_CFLAGS@
178EDJE_LIBS = @EDJE_LIBS@
179EET_CFLAGS = @EET_CFLAGS@
180EET_LIBS = @EET_LIBS@
181EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
182EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
183EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
184EGREP = @EGREP@
185EINA_CFLAGS = @EINA_CFLAGS@
186EINA_LIBS = @EINA_LIBS@
187EVAS_CFLAGS = @EVAS_CFLAGS@
188EVAS_LIBS = @EVAS_LIBS@
189EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
190EVIL_CFLAGS = @EVIL_CFLAGS@
191EVIL_LIBS = @EVIL_LIBS@
192EXEEXT = @EXEEXT@
193FGREP = @FGREP@
194FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
195FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
196FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
197FREETYPE_LIBS = @FREETYPE_LIBS@
198FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
199FRIBIDI_LIBS = @FRIBIDI_LIBS@
200GL_EET_CFLAGS = @GL_EET_CFLAGS@
201GL_EET_LIBS = @GL_EET_LIBS@
202GREP = @GREP@
203HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
204HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
205INSTALL = @INSTALL@
206INSTALL_DATA = @INSTALL_DATA@
207INSTALL_PROGRAM = @INSTALL_PROGRAM@
208INSTALL_SCRIPT = @INSTALL_SCRIPT@
209INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
210LD = @LD@
211LDFLAGS = @LDFLAGS@
212LIBOBJS = @LIBOBJS@
213LIBS = @LIBS@
214LIBTOOL = @LIBTOOL@
215LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
216LINEBREAK_LIBS = @LINEBREAK_LIBS@
217LIPO = @LIPO@
218LN_S = @LN_S@
219LTLIBOBJS = @LTLIBOBJS@
220MAKEINFO = @MAKEINFO@
221MKDIR_P = @MKDIR_P@
222MODULE_ARCH = @MODULE_ARCH@
223NM = @NM@
224NMEDIT = @NMEDIT@
225OBJC = @OBJC@
226OBJCDEPMODE = @OBJCDEPMODE@
227OBJCFLAGS = @OBJCFLAGS@
228OBJDUMP = @OBJDUMP@
229OBJEXT = @OBJEXT@
230OTOOL = @OTOOL@
231OTOOL64 = @OTOOL64@
232PACKAGE = @PACKAGE@
233PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
234PACKAGE_NAME = @PACKAGE_NAME@
235PACKAGE_STRING = @PACKAGE_STRING@
236PACKAGE_TARNAME = @PACKAGE_TARNAME@
237PACKAGE_URL = @PACKAGE_URL@
238PACKAGE_VERSION = @PACKAGE_VERSION@
239PATH_SEPARATOR = @PATH_SEPARATOR@
240PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
241PIXMAN_LIBS = @PIXMAN_LIBS@
242PKG_CONFIG = @PKG_CONFIG@
243PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
244PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
245PNG_CFLAGS = @PNG_CFLAGS@
246PNG_LIBS = @PNG_LIBS@
247RANLIB = @RANLIB@
248SDL_CFLAGS = @SDL_CFLAGS@
249SDL_LIBS = @SDL_LIBS@
250SED = @SED@
251SET_MAKE = @SET_MAKE@
252SHELL = @SHELL@
253SHM_OPEN_LINK = @SHM_OPEN_LINK@
254STRIP = @STRIP@
255SVG_CFLAGS = @SVG_CFLAGS@
256SVG_LIBS = @SVG_LIBS@
257VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
258VALGRIND_LIBS = @VALGRIND_LIBS@
259VERSION = @VERSION@
260VMAJ = @VMAJ@
261WIN32_CFLAGS = @WIN32_CFLAGS@
262WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
263XCB_CFLAGS = @XCB_CFLAGS@
264XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
265XCB_GL_LIBS = @XCB_GL_LIBS@
266XCB_LIBS = @XCB_LIBS@
267XEXT_CFLAGS = @XEXT_CFLAGS@
268XEXT_LIBS = @XEXT_LIBS@
269XMKMF = @XMKMF@
270X_CFLAGS = @X_CFLAGS@
271X_EXTRA_LIBS = @X_EXTRA_LIBS@
272X_LIBS = @X_LIBS@
273X_PRE_LIBS = @X_PRE_LIBS@
274abs_builddir = @abs_builddir@
275abs_srcdir = @abs_srcdir@
276abs_top_builddir = @abs_top_builddir@
277abs_top_srcdir = @abs_top_srcdir@
278ac_ct_CC = @ac_ct_CC@
279ac_ct_CXX = @ac_ct_CXX@
280ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
281ac_ct_OBJC = @ac_ct_OBJC@
282altivec_cflags = @altivec_cflags@
283am__include = @am__include@
284am__leading_dot = @am__leading_dot@
285am__quote = @am__quote@
286am__tar = @am__tar@
287am__untar = @am__untar@
288bindir = @bindir@
289build = @build@
290build_alias = @build_alias@
291build_cpu = @build_cpu@
292build_os = @build_os@
293build_vendor = @build_vendor@
294builddir = @builddir@
295datadir = @datadir@
296datarootdir = @datarootdir@
297dlopen_libs = @dlopen_libs@
298docdir = @docdir@
299dvidir = @dvidir@
300edje_cc = @edje_cc@
301efl_doxygen = @efl_doxygen@
302efl_have_doxygen = @efl_have_doxygen@
303evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
304evas_engine_buffer_libs = @evas_engine_buffer_libs@
305evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
306evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
307evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
308evas_engine_directfb_libs = @evas_engine_directfb_libs@
309evas_engine_fb_cflags = @evas_engine_fb_cflags@
310evas_engine_fb_libs = @evas_engine_fb_libs@
311evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
312evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
313evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
314evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
315evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
316evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
317evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
318evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
319evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
320evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
321evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
322evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
323evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
324evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
325evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
326evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
327evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
328evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
329evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
330evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
331evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
332evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
333evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
334evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
335evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
336evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
337evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
338evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
339evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
340evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
341evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
342evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
343evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
344evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
345evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
346evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
347evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
348evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
349evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
350evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
351evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
352evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
353evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
354evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
355evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
356evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
357evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
358evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
359evas_image_loader_png_libs = @evas_image_loader_png_libs@
360evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
361evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
362evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
363evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
364evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
365evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
366evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
367evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
368evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
369evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
370evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
371evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
372exec_prefix = @exec_prefix@
373have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
374have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
375have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
376have_evas_engine_software_x11 = @have_evas_engine_software_x11@
377have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
378have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
379have_lcov = @have_lcov@
380host = @host@
381host_alias = @host_alias@
382host_cpu = @host_cpu@
383host_os = @host_os@
384host_vendor = @host_vendor@
385htmldir = @htmldir@
386includedir = @includedir@
387infodir = @infodir@
388install_sh = @install_sh@
389libdir = @libdir@
390libexecdir = @libexecdir@
391localedir = @localedir@
392localstatedir = @localstatedir@
393lt_ECHO = @lt_ECHO@
394lt_enable_auto_import = @lt_enable_auto_import@
395mandir = @mandir@
396mkdir_p = @mkdir_p@
397oldincludedir = @oldincludedir@
398pdfdir = @pdfdir@
399pkgconfig_requires_private = @pkgconfig_requires_private@
400prefix = @prefix@
401program_transform_name = @program_transform_name@
402psdir = @psdir@
403pthread_cflags = @pthread_cflags@
404pthread_libs = @pthread_libs@
405release_info = @release_info@
406requirement_evas = @requirement_evas@
407sbindir = @sbindir@
408sharedstatedir = @sharedstatedir@
409srcdir = @srcdir@
410sysconfdir = @sysconfdir@
411target_alias = @target_alias@
412top_build_prefix = @top_build_prefix@
413top_builddir = @top_builddir@
414top_srcdir = @top_srcdir@
415version_info = @version_info@
416MAINTAINERCLEANFILES = Makefile.in
417AM_CPPFLAGS = \
418-I. \
419-I$(top_srcdir)/src/lib \
420-I$(top_srcdir)/src/lib/include \
421-I$(top_srcdir)/src/modules/engines \
422@EINA_CFLAGS@ \
423@FREETYPE_CFLAGS@ \
424@PIXMAN_CFLAGS@
425
426AM_CFLAGS = @WIN32_CFLAGS@
427@BUILD_ENGINE_BUFFER_TRUE@BUFFER_SOURCES = \
428@BUILD_ENGINE_BUFFER_TRUE@evas_engine.c \
429@BUILD_ENGINE_BUFFER_TRUE@evas_outbuf.c
430
431@BUILD_ENGINE_BUFFER_TRUE@includes_HEADERS = Evas_Engine_Buffer.h
432@BUILD_ENGINE_BUFFER_TRUE@includesdir = $(includedir)/evas-@VMAJ@
433@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_FALSE@pkgdir = $(libdir)/evas/modules/engines/buffer/$(MODULE_ARCH)
434@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_FALSE@pkg_LTLIBRARIES = module.la
435@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_FALSE@module_la_SOURCES = $(BUFFER_SOURCES)
436@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_FALSE@module_la_LIBADD = $(top_builddir)/src/lib/libevas.la @EINA_LIBS@
437@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_FALSE@module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
438@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
439@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_TRUE@noinst_LTLIBRARIES = libevas_engine_buffer.la
440@BUILD_ENGINE_BUFFER_TRUE@@EVAS_STATIC_BUILD_BUFFER_TRUE@libevas_engine_buffer_la_SOURCES = $(BUFFER_SOURCES)
441EXTRA_DIST = evas_engine.h
442all: all-am
443
444.SUFFIXES:
445.SUFFIXES: .c .lo .o .obj
446$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
447 @for dep in $?; do \
448 case '$(am__configure_deps)' in \
449 *$$dep*) \
450 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
451 && { if test -f $@; then exit 0; else break; fi; }; \
452 exit 1;; \
453 esac; \
454 done; \
455 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/buffer/Makefile'; \
456 $(am__cd) $(top_srcdir) && \
457 $(AUTOMAKE) --gnu src/modules/engines/buffer/Makefile
458.PRECIOUS: Makefile
459Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
460 @case '$?' in \
461 *config.status*) \
462 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
463 *) \
464 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
465 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
466 esac;
467
468$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
469 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
470
471$(top_srcdir)/configure: $(am__configure_deps)
472 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
473$(ACLOCAL_M4): $(am__aclocal_m4_deps)
474 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
475$(am__aclocal_m4_deps):
476
477clean-noinstLTLIBRARIES:
478 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
479 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
480 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
481 test "$$dir" != "$$p" || dir=.; \
482 echo "rm -f \"$${dir}/so_locations\""; \
483 rm -f "$${dir}/so_locations"; \
484 done
485install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
486 @$(NORMAL_INSTALL)
487 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
488 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
489 list2=; for p in $$list; do \
490 if test -f $$p; then \
491 list2="$$list2 $$p"; \
492 else :; fi; \
493 done; \
494 test -z "$$list2" || { \
495 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
496 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
497 }
498
499uninstall-pkgLTLIBRARIES:
500 @$(NORMAL_UNINSTALL)
501 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
502 for p in $$list; do \
503 $(am__strip_dir) \
504 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
505 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
506 done
507
508clean-pkgLTLIBRARIES:
509 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
510 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
511 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
512 test "$$dir" != "$$p" || dir=.; \
513 echo "rm -f \"$${dir}/so_locations\""; \
514 rm -f "$${dir}/so_locations"; \
515 done
516libevas_engine_buffer.la: $(libevas_engine_buffer_la_OBJECTS) $(libevas_engine_buffer_la_DEPENDENCIES)
517 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_buffer_la_rpath) $(libevas_engine_buffer_la_OBJECTS) $(libevas_engine_buffer_la_LIBADD) $(LIBS)
518module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
519 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
520
521mostlyclean-compile:
522 -rm -f *.$(OBJEXT)
523
524distclean-compile:
525 -rm -f *.tab.c
526
527@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
528@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_outbuf.Plo@am__quote@
529@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
530@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_outbuf.Plo@am__quote@
531
532.c.o:
533@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
534@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
535@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
536@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
537@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
538@am__fastdepCC_FALSE@ $(COMPILE) -c $<
539
540.c.obj:
541@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
542@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
543@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
544@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
545@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
546@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
547
548.c.lo:
549@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
550@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
551@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
552@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
553@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
554@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
555
556module_la-evas_engine.lo: evas_engine.c
557@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
558@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
559@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
560@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
561@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
562@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
563
564module_la-evas_outbuf.lo: evas_outbuf.c
565@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_outbuf.lo -MD -MP -MF $(DEPDIR)/module_la-evas_outbuf.Tpo -c -o module_la-evas_outbuf.lo `test -f 'evas_outbuf.c' || echo '$(srcdir)/'`evas_outbuf.c
566@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_outbuf.Tpo $(DEPDIR)/module_la-evas_outbuf.Plo
567@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
568@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_outbuf.c' object='module_la-evas_outbuf.lo' libtool=yes @AMDEPBACKSLASH@
569@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
570@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_outbuf.lo `test -f 'evas_outbuf.c' || echo '$(srcdir)/'`evas_outbuf.c
571
572mostlyclean-libtool:
573 -rm -f *.lo
574
575clean-libtool:
576 -rm -rf .libs _libs
577install-includesHEADERS: $(includes_HEADERS)
578 @$(NORMAL_INSTALL)
579 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
580 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
581 for p in $$list; do \
582 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
583 echo "$$d$$p"; \
584 done | $(am__base_list) | \
585 while read files; do \
586 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
587 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
588 done
589
590uninstall-includesHEADERS:
591 @$(NORMAL_UNINSTALL)
592 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
593 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
594 test -n "$$files" || exit 0; \
595 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
596 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
597
598ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
599 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
600 unique=`for i in $$list; do \
601 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
602 done | \
603 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
604 END { if (nonempty) { for (i in files) print i; }; }'`; \
605 mkid -fID $$unique
606tags: TAGS
607
608TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
609 $(TAGS_FILES) $(LISP)
610 set x; \
611 here=`pwd`; \
612 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
613 unique=`for i in $$list; do \
614 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
615 done | \
616 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
617 END { if (nonempty) { for (i in files) print i; }; }'`; \
618 shift; \
619 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
620 test -n "$$unique" || unique=$$empty_fix; \
621 if test $$# -gt 0; then \
622 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
623 "$$@" $$unique; \
624 else \
625 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
626 $$unique; \
627 fi; \
628 fi
629ctags: CTAGS
630CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
631 $(TAGS_FILES) $(LISP)
632 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
633 unique=`for i in $$list; do \
634 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
635 done | \
636 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
637 END { if (nonempty) { for (i in files) print i; }; }'`; \
638 test -z "$(CTAGS_ARGS)$$unique" \
639 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
640 $$unique
641
642GTAGS:
643 here=`$(am__cd) $(top_builddir) && pwd` \
644 && $(am__cd) $(top_srcdir) \
645 && gtags -i $(GTAGS_ARGS) "$$here"
646
647distclean-tags:
648 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
649
650distdir: $(DISTFILES)
651 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
652 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
653 list='$(DISTFILES)'; \
654 dist_files=`for file in $$list; do echo $$file; done | \
655 sed -e "s|^$$srcdirstrip/||;t" \
656 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
657 case $$dist_files in \
658 */*) $(MKDIR_P) `echo "$$dist_files" | \
659 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
660 sort -u` ;; \
661 esac; \
662 for file in $$dist_files; do \
663 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
664 if test -d $$d/$$file; then \
665 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
666 if test -d "$(distdir)/$$file"; then \
667 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
668 fi; \
669 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
670 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
671 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
672 fi; \
673 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
674 else \
675 test -f "$(distdir)/$$file" \
676 || cp -p $$d/$$file "$(distdir)/$$file" \
677 || exit 1; \
678 fi; \
679 done
680check-am: all-am
681check: check-am
682all-am: Makefile $(LTLIBRARIES) $(HEADERS)
683installdirs:
684 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
685 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
686 done
687install: install-am
688install-exec: install-exec-am
689install-data: install-data-am
690uninstall: uninstall-am
691
692install-am: all-am
693 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
694
695installcheck: installcheck-am
696install-strip:
697 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
698 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
699 `test -z '$(STRIP)' || \
700 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
701mostlyclean-generic:
702
703clean-generic:
704
705distclean-generic:
706 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
707 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
708
709maintainer-clean-generic:
710 @echo "This command is intended for maintainers to use"
711 @echo "it deletes files that may require special tools to rebuild."
712 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
713clean: clean-am
714
715clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
716 clean-pkgLTLIBRARIES mostlyclean-am
717
718distclean: distclean-am
719 -rm -rf ./$(DEPDIR)
720 -rm -f Makefile
721distclean-am: clean-am distclean-compile distclean-generic \
722 distclean-tags
723
724dvi: dvi-am
725
726dvi-am:
727
728html: html-am
729
730html-am:
731
732info: info-am
733
734info-am:
735
736install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
737
738install-dvi: install-dvi-am
739
740install-dvi-am:
741
742install-exec-am:
743
744install-html: install-html-am
745
746install-html-am:
747
748install-info: install-info-am
749
750install-info-am:
751
752install-man:
753
754install-pdf: install-pdf-am
755
756install-pdf-am:
757
758install-ps: install-ps-am
759
760install-ps-am:
761
762installcheck-am:
763
764maintainer-clean: maintainer-clean-am
765 -rm -rf ./$(DEPDIR)
766 -rm -f Makefile
767maintainer-clean-am: distclean-am maintainer-clean-generic
768
769mostlyclean: mostlyclean-am
770
771mostlyclean-am: mostlyclean-compile mostlyclean-generic \
772 mostlyclean-libtool
773
774pdf: pdf-am
775
776pdf-am:
777
778ps: ps-am
779
780ps-am:
781
782uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
783
784.MAKE: install-am install-strip
785
786.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
787 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
788 ctags distclean distclean-compile distclean-generic \
789 distclean-libtool distclean-tags distdir dvi dvi-am html \
790 html-am info info-am install install-am install-data \
791 install-data-am install-dvi install-dvi-am install-exec \
792 install-exec-am install-html install-html-am \
793 install-includesHEADERS install-info install-info-am \
794 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
795 install-ps install-ps-am install-strip installcheck \
796 installcheck-am installdirs maintainer-clean \
797 maintainer-clean-generic mostlyclean mostlyclean-compile \
798 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
799 tags uninstall uninstall-am uninstall-includesHEADERS \
800 uninstall-pkgLTLIBRARIES
801
802
803# Tell versions [3.59,3.63) of GNU make to not export all variables.
804# Otherwise a system limit (for SysV at least) may be exceeded.
805.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/buffer/evas_engine.c b/libraries/evas/src/modules/engines/buffer/evas_engine.c
new file mode 100644
index 0000000..e8dff7a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/buffer/evas_engine.c
@@ -0,0 +1,403 @@
1#include "evas_common.h"
2#include "evas_private.h"
3#include "evas_engine.h"
4#include "Evas_Engine_Buffer.h"
5
6/* domain for eina_log */
7/* the log macros are defined in evas_common.h */
8/* theirs names are EVAS_ERR, EVAS_DBG, EVAS_CRIT, EVAS_WRN and EVAS_INF */
9/* although we can use the EVAS_ERROR, etc... macros it will not work
10 when the -fvisibility=hidden option is passed to gcc */
11
12int _evas_engine_buffer_log_dom = -1;
13
14/* function tables - filled in later (func and parent func) */
15
16static Evas_Func func, pfunc;
17
18
19/* engine struct data */
20typedef struct _Render_Engine Render_Engine;
21
22struct _Render_Engine
23{
24 Tilebuf *tb;
25 Outbuf *ob;
26 Tilebuf_Rect *rects;
27 Eina_Inlist *cur_rect;
28 int end : 1;
29};
30
31/* prototypes we will use here */
32static void *_output_setup(int w, int h, void *dest_buffer, int dest_buffer_row_bytes, int depth_type, int use_color_key, int alpha_threshold, int color_key_r, int color_key_g, int color_key_b, void *(*new_update_region) (int x, int y, int w, int h, int *row_bytes), void (*free_update_region) (int x, int y, int w, int h, void *data));
33
34static void *eng_info(Evas *e __UNUSED__);
35static void eng_info_free(Evas *e __UNUSED__, void *info);
36static int eng_setup(Evas *e, void *info);
37static void eng_output_free(void *data);
38static void eng_output_resize(void *data, int w, int h);
39static void eng_output_tile_size_set(void *data, int w, int h);
40static void eng_output_redraws_rect_add(void *data, int x, int y, int w, int h);
41static void eng_output_redraws_rect_del(void *data, int x, int y, int w, int h);
42static void eng_output_redraws_clear(void *data);
43static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
44static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
45static void eng_output_flush(void *data);
46static void eng_output_idle_flush(void *data);
47
48/* internal engine routines */
49static void *
50_output_setup(int w,
51 int h,
52 void *dest_buffer,
53 int dest_buffer_row_bytes,
54 int depth_type,
55 int use_color_key,
56 int alpha_threshold,
57 int color_key_r,
58 int color_key_g,
59 int color_key_b,
60 void *(*new_update_region) (int x, int y, int w, int h, int *row_bytes),
61 void (*free_update_region) (int x, int y, int w, int h, void *data)
62 )
63{
64 Render_Engine *re;
65
66 re = calloc(1, sizeof(Render_Engine));
67 if (!re)
68 return NULL;
69 /* if we haven't initialized - init (automatic abort if already done) */
70 evas_common_cpu_init();
71
72 evas_common_blend_init();
73 evas_common_image_init();
74 evas_common_convert_init();
75 evas_common_scale_init();
76 evas_common_rectangle_init();
77 evas_common_polygon_init();
78 evas_common_line_init();
79 evas_common_font_init();
80 evas_common_draw_init();
81 evas_common_tilebuf_init();
82
83 evas_buffer_outbuf_buf_init();
84
85 {
86 Outbuf_Depth dep;
87 DATA32 color_key = 0;
88
89 dep = OUTBUF_DEPTH_BGR_24BPP_888_888;
90 if (depth_type == EVAS_ENGINE_BUFFER_DEPTH_ARGB32)
91 dep = OUTBUF_DEPTH_ARGB_32BPP_8888_8888;
92 else if (depth_type == EVAS_ENGINE_BUFFER_DEPTH_RGB32)
93 dep = OUTBUF_DEPTH_RGB_32BPP_888_8888;
94 else if (depth_type == EVAS_ENGINE_BUFFER_DEPTH_BGRA32)
95 dep = OUTBUF_DEPTH_BGRA_32BPP_8888_8888;
96 else if (depth_type == EVAS_ENGINE_BUFFER_DEPTH_RGB24)
97 dep = OUTBUF_DEPTH_RGB_24BPP_888_888;
98 else if (depth_type == EVAS_ENGINE_BUFFER_DEPTH_BGR24)
99 dep = OUTBUF_DEPTH_BGR_24BPP_888_888;
100 R_VAL(&color_key) = color_key_r;
101 G_VAL(&color_key) = color_key_g;
102 B_VAL(&color_key) = color_key_b;
103 A_VAL(&color_key) = 0;
104 re->ob = evas_buffer_outbuf_buf_setup_fb(w,
105 h,
106 dep,
107 dest_buffer,
108 dest_buffer_row_bytes,
109 use_color_key,
110 color_key,
111 alpha_threshold,
112 new_update_region,
113 free_update_region);
114 }
115 re->tb = evas_common_tilebuf_new(w, h);
116 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
117 return re;
118}
119
120/* engine api this module provides */
121static void *
122eng_info(Evas *e __UNUSED__)
123{
124 Evas_Engine_Info_Buffer *info;
125 info = calloc(1, sizeof(Evas_Engine_Info_Buffer));
126 if (!info) return NULL;
127 info->magic.magic = rand();
128 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
129 return info;
130}
131
132static void
133eng_info_free(Evas *e __UNUSED__, void *info)
134{
135 Evas_Engine_Info_Buffer *in;
136 in = (Evas_Engine_Info_Buffer *)info;
137 free(in);
138}
139
140static int
141eng_setup(Evas *e, void *in)
142{
143 Render_Engine *re;
144 Evas_Engine_Info_Buffer *info;
145
146 info = (Evas_Engine_Info_Buffer *)in;
147 re = _output_setup(e->output.w,
148 e->output.h,
149 info->info.dest_buffer,
150 info->info.dest_buffer_row_bytes,
151 info->info.depth_type,
152 info->info.use_color_key,
153 info->info.alpha_threshold,
154 info->info.color_key_r,
155 info->info.color_key_g,
156 info->info.color_key_b,
157 info->info.func.new_update_region,
158 info->info.func.free_update_region);
159 if (e->engine.data.output)
160 eng_output_free(e->engine.data.output);
161 e->engine.data.output = re;
162 if (!e->engine.data.output) return 0;
163 if (!e->engine.data.context)
164 e->engine.data.context = e->engine.func->context_new(e->engine.data.output);
165 return 1;
166}
167
168static void
169eng_output_free(void *data)
170{
171 Render_Engine *re;
172
173 re = (Render_Engine *)data;
174 evas_buffer_outbuf_buf_free(re->ob);
175 evas_common_tilebuf_free(re->tb);
176 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
177 free(re);
178
179 evas_common_font_shutdown();
180 evas_common_image_shutdown();
181}
182
183static void
184eng_output_resize(void *data, int w, int h)
185{
186 Render_Engine *re;
187
188 re = (Render_Engine *)data;
189 {
190 int depth;
191 void *dest;
192 int dest_row_bytes;
193 int alpha_level;
194 DATA32 color_key;
195 char use_color_key;
196 void * (*new_update_region) (int x, int y, int w, int h, int *row_bytes);
197 void (*free_update_region) (int x, int y, int w, int h, void *data);
198
199 depth = re->ob->depth;
200 dest = re->ob->dest;
201 dest_row_bytes = re->ob->dest_row_bytes;
202 alpha_level = re->ob->alpha_level;
203 color_key = re->ob->color_key;
204 use_color_key = re->ob->use_color_key;
205 new_update_region = re->ob->func.new_update_region;
206 free_update_region = re->ob->func.free_update_region;
207 evas_buffer_outbuf_buf_free(re->ob);
208 re->ob = evas_buffer_outbuf_buf_setup_fb(w,
209 h,
210 depth,
211 dest,
212 dest_row_bytes,
213 use_color_key,
214 color_key,
215 alpha_level,
216 new_update_region,
217 free_update_region);
218 }
219 evas_common_tilebuf_free(re->tb);
220 re->tb = evas_common_tilebuf_new(w, h);
221 if (re->tb)
222 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
223}
224
225static void
226eng_output_tile_size_set(void *data, int w, int h)
227{
228 Render_Engine *re;
229
230 re = (Render_Engine *)data;
231 evas_common_tilebuf_set_tile_size(re->tb, w, h);
232}
233
234static void
235eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
236{
237 Render_Engine *re;
238
239 re = (Render_Engine *)data;
240 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
241}
242
243static void
244eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
245{
246 Render_Engine *re;
247
248 re = (Render_Engine *)data;
249 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
250}
251
252static void
253eng_output_redraws_clear(void *data)
254{
255 Render_Engine *re;
256
257 re = (Render_Engine *)data;
258 evas_common_tilebuf_clear(re->tb);
259}
260
261static void *
262eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
263{
264 Render_Engine *re;
265 RGBA_Image *surface;
266 Tilebuf_Rect *rect;
267 int ux, uy, uw, uh;
268
269 re = (Render_Engine *)data;
270 if (re->end)
271 {
272 re->end = 0;
273 return NULL;
274 }
275 if (!re->rects)
276 {
277 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
278 re->cur_rect = EINA_INLIST_GET(re->rects);
279 }
280 if (!re->cur_rect) return NULL;
281 rect = (Tilebuf_Rect *)re->cur_rect;
282 ux = rect->x; uy = rect->y; uw = rect->w; uh = rect->h;
283 re->cur_rect = re->cur_rect->next;
284 if (!re->cur_rect)
285 {
286 evas_common_tilebuf_free_render_rects(re->rects);
287 re->rects = NULL;
288 re->end = 1;
289 }
290
291 if ((ux + uw) > re->ob->w) uw = re->ob->w - ux;
292 if ((uy + uh) > re->ob->h) uh = re->ob->h - uy;
293 if ((uw <= 0) || (uh <= 0)) return NULL;
294 surface = evas_buffer_outbuf_buf_new_region_for_update(re->ob,
295 ux, uy, uw, uh,
296 cx, cy, cw, ch);
297 *x = ux; *y = uy; *w = uw; *h = uh;
298 return surface;
299}
300
301static void
302eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
303{
304 Render_Engine *re;
305
306 re = (Render_Engine *)data;
307#ifdef BUILD_PIPE_RENDER
308 evas_common_pipe_map_begin(surface);
309#endif
310 evas_buffer_outbuf_buf_push_updated_region(re->ob, surface, x, y, w, h);
311 evas_buffer_outbuf_buf_free_region_for_update(re->ob, surface);
312 evas_common_cpu_end_opt();
313}
314
315static void
316eng_output_flush(void *data)
317{
318 Render_Engine *re;
319
320 re = (Render_Engine *)data;
321}
322
323static void
324eng_output_idle_flush(void *data)
325{
326 Render_Engine *re;
327
328 re = (Render_Engine *)data;
329}
330
331static Eina_Bool
332eng_canvas_alpha_get(void *data, void *context __UNUSED__)
333{
334 Render_Engine *re;
335
336 re = (Render_Engine *)data;
337 if (re->ob->priv.back_buf)
338 return re->ob->priv.back_buf->cache_entry.flags.alpha;
339 return EINA_TRUE;
340}
341
342/* module advertising code */
343static int
344module_open(Evas_Module *em)
345{
346 if (!em) return 0;
347 /* get whatever engine module we inherit from */
348 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
349
350 _evas_engine_buffer_log_dom = eina_log_domain_register
351 ("evas-buffer", EINA_COLOR_BLUE);
352 if (_evas_engine_buffer_log_dom < 0)
353 {
354 EINA_LOG_ERR("Can not create a module log domain.");
355 return 0;
356 }
357
358 /* store it for later use */
359 func = pfunc;
360 /* now to override methods */
361#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
362 ORD(info);
363 ORD(info_free);
364 ORD(setup);
365 ORD(canvas_alpha_get);
366 ORD(output_free);
367 ORD(output_resize);
368 ORD(output_tile_size_set);
369 ORD(output_redraws_rect_add);
370 ORD(output_redraws_rect_del);
371 ORD(output_redraws_clear);
372 ORD(output_redraws_next_update_get);
373 ORD(output_redraws_next_update_push);
374 ORD(output_flush);
375 ORD(output_idle_flush);
376 /* now advertise out own api */
377 em->functions = (void *)(&func);
378 return 1;
379}
380
381static void
382module_close(Evas_Module *em __UNUSED__)
383{
384 eina_log_domain_unregister(_evas_engine_buffer_log_dom);
385}
386
387static Evas_Module_Api evas_modapi =
388{
389 EVAS_MODULE_API_VERSION,
390 "buffer",
391 "none",
392 {
393 module_open,
394 module_close
395 }
396};
397
398EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, buffer);
399
400#ifndef EVAS_STATIC_BUILD_BUFFER
401EVAS_EINA_MODULE_DEFINE(engine, buffer);
402#endif
403
diff --git a/libraries/evas/src/modules/engines/buffer/evas_engine.h b/libraries/evas/src/modules/engines/buffer/evas_engine.h
new file mode 100644
index 0000000..21c988c
--- /dev/null
+++ b/libraries/evas/src/modules/engines/buffer/evas_engine.h
@@ -0,0 +1,85 @@
1#ifndef EVAS_ENGINE_H
2#define EVAS_ENGINE_H
3#include "evas_common.h"
4/* this thing is for eina_log */
5extern int _evas_engine_buffer_log_dom ;
6
7#ifdef ERR
8# undef ERR
9#endif
10#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_buffer_log_dom, __VA_ARGS__)
11
12#ifdef DBG
13# undef DBG
14#endif
15#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_buffer_log_dom, __VA_ARGS__)
16
17#ifdef INF
18# undef INF
19#endif
20#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_buffer_log_dom, __VA_ARGS__)
21
22#ifdef WRN
23# undef WRN
24#endif
25#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_buffer_log_dom, __VA_ARGS__)
26
27#ifdef CRIT
28# undef CRIT
29#endif
30#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_buffer_log_dom, __VA_ARGS__)
31
32typedef struct _Outbuf Outbuf;
33
34typedef enum _Outbuf_Depth Outbuf_Depth;
35
36enum _Outbuf_Depth
37{
38 OUTBUF_DEPTH_NONE,
39 OUTBUF_DEPTH_ARGB_32BPP_8888_8888,
40 OUTBUF_DEPTH_BGRA_32BPP_8888_8888,
41 OUTBUF_DEPTH_RGB_32BPP_888_8888,
42 OUTBUF_DEPTH_BGR_32BPP_888_8888,
43 OUTBUF_DEPTH_RGB_24BPP_888_888,
44 OUTBUF_DEPTH_BGR_24BPP_888_888,
45 OUTBUF_DEPTH_LAST
46};
47
48struct _Outbuf
49{
50 int w, h;
51 Outbuf_Depth depth;
52
53 void *dest;
54 unsigned int dest_row_bytes;
55
56 int alpha_level;
57 DATA32 color_key;
58 char use_color_key : 1;
59
60 struct {
61 void * (*new_update_region) (int x, int y, int w, int h, int *row_bytes);
62 void (*free_update_region) (int x, int y, int w, int h, void *data);
63 } func;
64
65 struct {
66 RGBA_Image *back_buf;
67 } priv;
68};
69
70/****/
71
72void evas_buffer_outbuf_buf_init (void);
73void evas_buffer_outbuf_buf_free (Outbuf *buf);
74
75Outbuf *evas_buffer_outbuf_buf_setup_fb (int w, int h, Outbuf_Depth depth, void *dest, int dest_row_bytes, int use_color_key, DATA32 color_key, int alpha_level,
76 void * (*new_update_region) (int x, int y, int w, int h, int *row_bytes),
77 void (*free_update_region) (int x, int y, int w, int h, void *data));
78
79
80RGBA_Image *evas_buffer_outbuf_buf_new_region_for_update (Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch);
81void evas_buffer_outbuf_buf_free_region_for_update (Outbuf *buf, RGBA_Image *update);
82void evas_buffer_outbuf_buf_push_updated_region (Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h);
83
84#endif
85
diff --git a/libraries/evas/src/modules/engines/buffer/evas_outbuf.c b/libraries/evas/src/modules/engines/buffer/evas_outbuf.c
new file mode 100644
index 0000000..27f7a2c
--- /dev/null
+++ b/libraries/evas/src/modules/engines/buffer/evas_outbuf.c
@@ -0,0 +1,340 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4void
5evas_buffer_outbuf_buf_init(void)
6{
7}
8
9void
10evas_buffer_outbuf_buf_free(Outbuf *buf)
11{
12 if (buf->priv.back_buf)
13 {
14 evas_cache_image_drop(&buf->priv.back_buf->cache_entry);
15 }
16 free(buf);
17}
18
19Outbuf *
20evas_buffer_outbuf_buf_setup_fb(int w, int h, Outbuf_Depth depth, void *dest, int dest_row_bytes, int use_color_key, DATA32 color_key, int alpha_level,
21 void * (*new_update_region) (int x, int y, int w, int h, int *row_bytes),
22 void (*free_update_region) (int x, int y, int w, int h, void *data)
23 )
24{
25 Outbuf *buf;
26 int bpp;
27
28 buf = calloc(1, sizeof(Outbuf));
29 if (!buf) return NULL;
30
31 buf->w = w;
32 buf->h = h;
33 buf->depth = depth;
34
35 buf->dest = dest;
36 buf->dest_row_bytes = dest_row_bytes;
37
38 buf->alpha_level = alpha_level;
39 buf->color_key = color_key;
40 buf->use_color_key = use_color_key;
41
42 buf->func.new_update_region = new_update_region;
43 buf->func.free_update_region = free_update_region;
44
45 bpp = sizeof(DATA32);
46 if ((buf->depth == OUTBUF_DEPTH_RGB_24BPP_888_888) ||
47 (buf->depth == OUTBUF_DEPTH_BGR_24BPP_888_888))
48 bpp = 3;
49
50 if ((buf->depth == OUTBUF_DEPTH_ARGB_32BPP_8888_8888) &&
51 (buf->dest) && (buf->dest_row_bytes == (buf->w * sizeof(DATA32))))
52 {
53 memset(buf->dest, 0, h * buf->dest_row_bytes);
54 buf->priv.back_buf = (RGBA_Image *) evas_cache_image_data(evas_common_image_cache_get(),
55 w, h,
56 buf->dest,
57 1, EVAS_COLORSPACE_ARGB8888);
58 }
59 else if ((buf->depth == OUTBUF_DEPTH_RGB_32BPP_888_8888) &&
60 (buf->dest) && (buf->dest_row_bytes == (buf->w * sizeof(DATA32))))
61 {
62 buf->priv.back_buf = (RGBA_Image *) evas_cache_image_data(evas_common_image_cache_get(),
63 w, h,
64 buf->dest,
65 0, EVAS_COLORSPACE_ARGB8888);
66 }
67
68 return buf;
69}
70
71RGBA_Image *
72evas_buffer_outbuf_buf_new_region_for_update(Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch)
73{
74 RGBA_Image *im;
75
76 if (buf->priv.back_buf)
77 {
78 *cx = x; *cy = y; *cw = w; *ch = h;
79 return buf->priv.back_buf;
80 }
81 else
82 {
83 *cx = 0; *cy = 0; *cw = w; *ch = h;
84 im = (RGBA_Image *) evas_cache_image_empty(evas_common_image_cache_get());
85 if (im)
86 {
87 if (((buf->depth == OUTBUF_DEPTH_ARGB_32BPP_8888_8888)) ||
88 ((buf->depth == OUTBUF_DEPTH_BGRA_32BPP_8888_8888)))
89 {
90 im->cache_entry.flags.alpha = 1;
91 im = (RGBA_Image *) evas_cache_image_size_set(&im->cache_entry, w, h);
92 }
93 }
94 }
95 return im;
96}
97
98void
99evas_buffer_outbuf_buf_free_region_for_update(Outbuf *buf, RGBA_Image *update)
100{
101 if (update != buf->priv.back_buf) evas_cache_image_drop(&update->cache_entry);
102}
103
104void
105evas_buffer_outbuf_buf_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h)
106{
107 /* copy update image to out buf & convert */
108 switch (buf->depth)
109 {
110 case OUTBUF_DEPTH_RGB_24BPP_888_888:
111 /* copy & pack into 24bpp - if colorkey is enabled... etc. */
112 {
113 DATA8 thresh;
114 int xx, yy;
115 int row_bytes;
116 DATA8 *dest;
117 DATA32 colorkey;
118 DATA32 *src;
119 DATA8 *dst;
120
121 colorkey = buf->color_key;
122 thresh = buf->alpha_level;
123 row_bytes = buf->dest_row_bytes;
124 dest = (DATA8 *)(buf->dest) + (y * row_bytes) + (x * 3);
125 if (buf->func.new_update_region)
126 {
127 dest = buf->func.new_update_region(x, y, w, h, &row_bytes);
128 }
129 if (!dest) break;
130 if (buf->use_color_key)
131 {
132 for (yy = 0; yy < h; yy++)
133 {
134 dst = dest + (yy * row_bytes);
135 src = update->image.data + (yy * update->cache_entry.w);
136 for (xx = 0; xx < w; xx++)
137 {
138 if (A_VAL(src) > thresh)
139 {
140 *dst++ = R_VAL(src);
141 *dst++ = G_VAL(src);
142 *dst++ = B_VAL(src);
143 }
144 else
145 {
146 *dst++ = R_VAL(&colorkey);
147 *dst++ = G_VAL(&colorkey);
148 *dst++ = B_VAL(&colorkey);
149 }
150 src++;
151 }
152 }
153 }
154 else
155 {
156 for (yy = 0; yy < h; yy++)
157 {
158 dst = dest + (yy * row_bytes);
159 src = update->image.data + (yy * update->cache_entry.w);
160 for (xx = 0; xx < w; xx++)
161 {
162 *dst++ = R_VAL(src);
163 *dst++ = G_VAL(src);
164 *dst++ = B_VAL(src);
165 src++;
166 }
167 }
168 }
169 if (buf->func.free_update_region)
170 {
171 buf->func.free_update_region(x, y, w, h, dest);
172 }
173 }
174 break;
175 case OUTBUF_DEPTH_BGR_24BPP_888_888:
176 /* copy & pack into 24bpp - if colorkey is enabled... etc. */
177 {
178 DATA8 thresh;
179 int xx, yy;
180 int row_bytes;
181 DATA8 *dest;
182 DATA32 colorkey;
183 DATA32 *src;
184 DATA8 *dst;
185
186 colorkey = buf->color_key;
187 thresh = buf->alpha_level;
188 row_bytes = buf->dest_row_bytes;
189 dest = (DATA8 *)(buf->dest) + (y * row_bytes) + (x * 3);
190 if (buf->func.new_update_region)
191 {
192 dest = buf->func.new_update_region(x, y, w, h, &row_bytes);
193 }
194 if (!dest) break;
195 if (buf->use_color_key)
196 {
197 for (yy = 0; yy < h; yy++)
198 {
199 dst = dest + (yy * row_bytes);
200 src = update->image.data + (yy * update->cache_entry.w);
201 for (xx = 0; xx < w; xx++)
202 {
203 if (A_VAL(src) > thresh)
204 {
205 *dst++ = B_VAL(src);
206 *dst++ = G_VAL(src);
207 *dst++ = R_VAL(src);
208 }
209 else
210 {
211 *dst++ = B_VAL(&colorkey);
212 *dst++ = G_VAL(&colorkey);
213 *dst++ = R_VAL(&colorkey);
214 }
215 src++;
216 }
217 }
218 }
219 else
220 {
221 for (yy = 0; yy < h; yy++)
222 {
223 dst = dest + (yy * row_bytes);
224 src = update->image.data + (yy * update->cache_entry.w);
225 for (xx = 0; xx < w; xx++)
226 {
227 *dst++ = B_VAL(src);
228 *dst++ = G_VAL(src);
229 *dst++ = R_VAL(src);
230 src++;
231 }
232 }
233 }
234 if (buf->func.free_update_region)
235 {
236 buf->func.free_update_region(x, y, w, h, dest);
237 }
238 }
239 break;
240 case OUTBUF_DEPTH_RGB_32BPP_888_8888:
241 case OUTBUF_DEPTH_ARGB_32BPP_8888_8888:
242 {
243 DATA32 *dest, *src, *dst;
244 int yy, row_bytes;
245
246 row_bytes = buf->dest_row_bytes;
247 dest = (DATA32 *)((DATA8 *)(buf->dest) + (y * row_bytes) + (x * 4));
248 if (buf->func.new_update_region)
249 {
250 dest = buf->func.new_update_region(x, y, w, h, &row_bytes);
251 }
252 /* no need src == dest */
253 if (!buf->priv.back_buf)
254 {
255 Gfx_Func_Copy func;
256
257 func = evas_common_draw_func_copy_get(w, 0);
258 if (func)
259 {
260 for (yy = 0; yy < h; yy++)
261 {
262 src = update->image.data + (yy * update->cache_entry.w);
263 dst = (DATA32 *)((DATA8 *)(buf->dest) + ((y + yy) * row_bytes));
264 func(src, dst, w);
265 }
266
267 }
268 }
269 if (buf->func.free_update_region)
270 {
271 buf->func.free_update_region(x, y, w, h, dest);
272 }
273 }
274 break;
275 case OUTBUF_DEPTH_BGR_32BPP_888_8888:
276 {
277 DATA32 *src, *dst;
278 DATA8 *dest;
279 int xx, yy, row_bytes;
280
281 row_bytes = buf->dest_row_bytes;
282 dest = (DATA8 *)(buf->dest) + (y * row_bytes) + (x * 4);
283 if (buf->func.new_update_region)
284 {
285 dest = buf->func.new_update_region(x, y, w, h, &row_bytes);
286 }
287 for (yy = 0; yy < h; yy++)
288 {
289 dst = (DATA32 *)(dest + (yy * row_bytes));
290 src = update->image.data + (yy * update->cache_entry.w);
291 for (xx = 0; xx < w; xx++)
292 {
293 A_VAL(dst) = B_VAL(src);
294 R_VAL(dst) = G_VAL(src);
295 G_VAL(dst) = R_VAL(src);
296 dst++;
297 src++;
298 }
299 }
300 if (buf->func.free_update_region)
301 {
302 buf->func.free_update_region(x, y, w, h, dest);
303 }
304 }
305 break;
306 case OUTBUF_DEPTH_BGRA_32BPP_8888_8888:
307 {
308 DATA32 *src, *dst;
309 DATA8 *dest;
310 int xx, yy, row_bytes;
311
312 row_bytes = buf->dest_row_bytes;
313 dest = (DATA8 *)(buf->dest) + (y * row_bytes) + (x * 4);
314 if (buf->func.new_update_region)
315 {
316 dest = buf->func.new_update_region(x, y, w, h, &row_bytes);
317 }
318 for (yy = 0; yy < h; yy++)
319 {
320 dst = (DATA32 *)(dest + (yy * row_bytes));
321 src = update->image.data + (yy * update->cache_entry.w);
322 for (xx = 0; xx < w; xx++)
323 {
324 A_VAL(dst) = B_VAL(src);
325 R_VAL(dst) = G_VAL(src);
326 G_VAL(dst) = R_VAL(src);
327 dst++;
328 src++;
329 }
330 }
331 if (buf->func.free_update_region)
332 {
333 buf->func.free_update_region(x, y, w, h, dest);
334 }
335 }
336 break;
337 default:
338 break;
339 }
340}
diff --git a/libraries/evas/src/modules/engines/direct3d/Evas_Engine_Direct3D.h b/libraries/evas/src/modules/engines/direct3d/Evas_Engine_Direct3D.h
new file mode 100644
index 0000000..f9b7a9c
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/Evas_Engine_Direct3D.h
@@ -0,0 +1,36 @@
1#ifndef __EVAS_ENGINE_DIRECT3D_H__
2#define __EVAS_ENGINE_DIRECT3D_H__
3
4
5#define WIN32_LEAN_AND_MEAN
6#include <windows.h>
7#undef WIN32_LEAN_AND_MEAN
8
9typedef struct _Evas_Engine_Info_Direct3D Evas_Engine_Info_Direct3D;
10
11struct _Evas_Engine_Info_Direct3D
12{
13 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
14 /* at you and make nasty noises */
15 Evas_Engine_Info magic;
16
17 struct {
18 HWND window;
19 int rotation;
20 int depth;
21 int fullscreen : 1;
22 int layered : 1;
23 } info;
24
25 struct {
26 unsigned short width;
27 unsigned short height;
28 unsigned char *mask;
29 } *shape;
30
31 /* non-blocking or blocking mode */
32 Evas_Engine_Render_Mode render_mode;
33};
34
35
36#endif /* __EVAS_ENGINE_DIRECT3D_H__ */
diff --git a/libraries/evas/src/modules/engines/direct3d/Makefile.am b/libraries/evas/src/modules/engines/direct3d/Makefile.am
new file mode 100644
index 0000000..cdbfd52
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/Makefile.am
@@ -0,0 +1,71 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9@EINA_CFLAGS@ \
10@FREETYPE_CFLAGS@ \
11@PIXMAN_CFLAGS@ \
12@evas_engine_direct3d_cflags@
13
14if BUILD_ENGINE_DIRECT3D
15
16DIRECT3D_SOURCES = \
17evas_engine.c \
18evas_direct3d_context.cpp \
19evas_direct3d_device.cpp \
20evas_direct3d_image_cache.cpp \
21evas_direct3d_main.cpp \
22evas_direct3d_object.cpp \
23evas_direct3d_object_font.cpp \
24evas_direct3d_object_image.cpp \
25evas_direct3d_object_line.cpp \
26evas_direct3d_object_rect.cpp \
27evas_direct3d_scene.cpp \
28evas_direct3d_shader_pack.cpp \
29evas_direct3d_vertex_buffer_cache.cpp
30
31DIRECT3D_LIBADD = @evas_engine_direct3d_libs@
32
33
34includes_HEADERS = Evas_Engine_Direct3D.h
35includesdir = $(includedir)/evas-@VMAJ@
36
37if !EVAS_STATIC_BUILD_DIRECT3D
38
39pkgdir = $(libdir)/evas/modules/engines/direct3d/$(MODULE_ARCH)
40pkg_LTLIBRARIES = module.la
41module_la_SOURCES = $(DIRECT3D_SOURCES)
42module_la_CXXFLAGS = -fno-exceptions
43module_la_LIBADD = $(top_builddir)/src/lib/libevas.la $(DIRECT3D_LIBADD) @EINA_LIBS@
44module_la_LDFLAGS = @lt_enable_auto_import@ -no-undefined -module -avoid-version
45module_la_LIBTOOLFLAGS = --tag=disable-static
46
47else
48
49noinst_LTLIBRARIES = libevas_engine_direct3d.la
50
51libevas_engine_direct3d_la_SOURCES = $(DIRECT3D_SOURCES)
52libevas_engine_direct3d_la_LIBADD = $(DIRECT3D_LIBADD)
53
54endif
55endif
56
57EXTRA_DIST = \
58array.h \
59evas_direct3d_context.h \
60evas_direct3d_device.h \
61evas_direct3d_image_cache.h \
62evas_direct3d_object.h \
63evas_direct3d_object_font.h \
64evas_direct3d_object_image.h \
65evas_direct3d_object_line.h \
66evas_direct3d_object_rect.h \
67evas_direct3d_scene.h \
68evas_direct3d_shader_pack.h \
69evas_direct3d_vertex_buffer_cache.h \
70evas_engine.h \
71ref.h
diff --git a/libraries/evas/src/modules/engines/direct3d/Makefile.in b/libraries/evas/src/modules/engines/direct3d/Makefile.in
new file mode 100644
index 0000000..03d892e
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/Makefile.in
@@ -0,0 +1,1021 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/direct3d
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84am__DEPENDENCIES_1 =
85@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_TRUE@libevas_engine_direct3d_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_direct3d_la_SOURCES_DIST = evas_engine.c \
87 evas_direct3d_context.cpp evas_direct3d_device.cpp \
88 evas_direct3d_image_cache.cpp evas_direct3d_main.cpp \
89 evas_direct3d_object.cpp evas_direct3d_object_font.cpp \
90 evas_direct3d_object_image.cpp evas_direct3d_object_line.cpp \
91 evas_direct3d_object_rect.cpp evas_direct3d_scene.cpp \
92 evas_direct3d_shader_pack.cpp \
93 evas_direct3d_vertex_buffer_cache.cpp
94@BUILD_ENGINE_DIRECT3D_TRUE@am__objects_1 = evas_engine.lo \
95@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_context.lo \
96@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_device.lo \
97@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_image_cache.lo \
98@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_main.lo \
99@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_object.lo \
100@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_object_font.lo \
101@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_object_image.lo \
102@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_object_line.lo \
103@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_object_rect.lo \
104@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_scene.lo \
105@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_shader_pack.lo \
106@BUILD_ENGINE_DIRECT3D_TRUE@ evas_direct3d_vertex_buffer_cache.lo
107@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_TRUE@am_libevas_engine_direct3d_la_OBJECTS = $(am__objects_1)
108libevas_engine_direct3d_la_OBJECTS = \
109 $(am_libevas_engine_direct3d_la_OBJECTS)
110AM_V_lt = $(am__v_lt_$(V))
111am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
112am__v_lt_0 = --silent
113@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_TRUE@am_libevas_engine_direct3d_la_rpath =
114@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la \
115@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@ $(am__DEPENDENCIES_1)
116am__module_la_SOURCES_DIST = evas_engine.c evas_direct3d_context.cpp \
117 evas_direct3d_device.cpp evas_direct3d_image_cache.cpp \
118 evas_direct3d_main.cpp evas_direct3d_object.cpp \
119 evas_direct3d_object_font.cpp evas_direct3d_object_image.cpp \
120 evas_direct3d_object_line.cpp evas_direct3d_object_rect.cpp \
121 evas_direct3d_scene.cpp evas_direct3d_shader_pack.cpp \
122 evas_direct3d_vertex_buffer_cache.cpp
123@BUILD_ENGINE_DIRECT3D_TRUE@am__objects_2 = module_la-evas_engine.lo \
124@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_context.lo \
125@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_device.lo \
126@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_image_cache.lo \
127@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_main.lo \
128@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_object.lo \
129@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_object_font.lo \
130@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_object_image.lo \
131@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_object_line.lo \
132@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_object_rect.lo \
133@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_scene.lo \
134@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_shader_pack.lo \
135@BUILD_ENGINE_DIRECT3D_TRUE@ module_la-evas_direct3d_vertex_buffer_cache.lo
136@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@am_module_la_OBJECTS = $(am__objects_2)
137module_la_OBJECTS = $(am_module_la_OBJECTS)
138module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
139 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
140 $(module_la_CXXFLAGS) $(CXXFLAGS) $(module_la_LDFLAGS) \
141 $(LDFLAGS) -o $@
142@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@am_module_la_rpath = -rpath \
143@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@ $(pkgdir)
144DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
145depcomp = $(SHELL) $(top_srcdir)/depcomp
146am__depfiles_maybe = depfiles
147am__mv = mv -f
148COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
149 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
150LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
151 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
152 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
153 $(AM_CFLAGS) $(CFLAGS)
154AM_V_CC = $(am__v_CC_$(V))
155am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
156am__v_CC_0 = @echo " CC " $@;
157AM_V_at = $(am__v_at_$(V))
158am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
159am__v_at_0 = @
160CCLD = $(CC)
161LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
162 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
163 $(AM_LDFLAGS) $(LDFLAGS) -o $@
164AM_V_CCLD = $(am__v_CCLD_$(V))
165am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
166am__v_CCLD_0 = @echo " CCLD " $@;
167CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
168 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
169LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
170 $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
171 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
172 $(AM_CXXFLAGS) $(CXXFLAGS)
173AM_V_CXX = $(am__v_CXX_$(V))
174am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
175am__v_CXX_0 = @echo " CXX " $@;
176CXXLD = $(CXX)
177CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
178 $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
179 $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
180AM_V_CXXLD = $(am__v_CXXLD_$(V))
181am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
182am__v_CXXLD_0 = @echo " CXXLD " $@;
183AM_V_GEN = $(am__v_GEN_$(V))
184am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
185am__v_GEN_0 = @echo " GEN " $@;
186SOURCES = $(libevas_engine_direct3d_la_SOURCES) $(module_la_SOURCES)
187DIST_SOURCES = $(am__libevas_engine_direct3d_la_SOURCES_DIST) \
188 $(am__module_la_SOURCES_DIST)
189am__includes_HEADERS_DIST = Evas_Engine_Direct3D.h
190HEADERS = $(includes_HEADERS)
191ETAGS = etags
192CTAGS = ctags
193DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
194ACLOCAL = @ACLOCAL@
195ALLOCA = @ALLOCA@
196AMTAR = @AMTAR@
197AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
198AR = @AR@
199AS = @AS@
200AUTOCONF = @AUTOCONF@
201AUTOHEADER = @AUTOHEADER@
202AUTOMAKE = @AUTOMAKE@
203AWK = @AWK@
204CC = @CC@
205CCDEPMODE = @CCDEPMODE@
206CFLAGS = @CFLAGS@
207CHECK_CFLAGS = @CHECK_CFLAGS@
208CHECK_LIBS = @CHECK_LIBS@
209CPP = @CPP@
210CPPFLAGS = @CPPFLAGS@
211CXX = @CXX@
212CXXCPP = @CXXCPP@
213CXXDEPMODE = @CXXDEPMODE@
214CXXFLAGS = @CXXFLAGS@
215CYGPATH_W = @CYGPATH_W@
216DEFS = @DEFS@
217DEPDIR = @DEPDIR@
218DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
219DIRECTFB_LIBS = @DIRECTFB_LIBS@
220DLLTOOL = @DLLTOOL@
221DSYMUTIL = @DSYMUTIL@
222DUMPBIN = @DUMPBIN@
223ECHO_C = @ECHO_C@
224ECHO_N = @ECHO_N@
225ECHO_T = @ECHO_T@
226ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
227ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
228EDB_CFLAGS = @EDB_CFLAGS@
229EDB_LIBS = @EDB_LIBS@
230EDJE_CFLAGS = @EDJE_CFLAGS@
231EDJE_LIBS = @EDJE_LIBS@
232EET_CFLAGS = @EET_CFLAGS@
233EET_LIBS = @EET_LIBS@
234EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
235EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
236EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
237EGREP = @EGREP@
238EINA_CFLAGS = @EINA_CFLAGS@
239EINA_LIBS = @EINA_LIBS@
240EVAS_CFLAGS = @EVAS_CFLAGS@
241EVAS_LIBS = @EVAS_LIBS@
242EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
243EVIL_CFLAGS = @EVIL_CFLAGS@
244EVIL_LIBS = @EVIL_LIBS@
245EXEEXT = @EXEEXT@
246FGREP = @FGREP@
247FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
248FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
249FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
250FREETYPE_LIBS = @FREETYPE_LIBS@
251FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
252FRIBIDI_LIBS = @FRIBIDI_LIBS@
253GL_EET_CFLAGS = @GL_EET_CFLAGS@
254GL_EET_LIBS = @GL_EET_LIBS@
255GREP = @GREP@
256HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
257HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
258INSTALL = @INSTALL@
259INSTALL_DATA = @INSTALL_DATA@
260INSTALL_PROGRAM = @INSTALL_PROGRAM@
261INSTALL_SCRIPT = @INSTALL_SCRIPT@
262INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
263LD = @LD@
264LDFLAGS = @LDFLAGS@
265LIBOBJS = @LIBOBJS@
266LIBS = @LIBS@
267LIBTOOL = @LIBTOOL@
268LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
269LINEBREAK_LIBS = @LINEBREAK_LIBS@
270LIPO = @LIPO@
271LN_S = @LN_S@
272LTLIBOBJS = @LTLIBOBJS@
273MAKEINFO = @MAKEINFO@
274MKDIR_P = @MKDIR_P@
275MODULE_ARCH = @MODULE_ARCH@
276NM = @NM@
277NMEDIT = @NMEDIT@
278OBJC = @OBJC@
279OBJCDEPMODE = @OBJCDEPMODE@
280OBJCFLAGS = @OBJCFLAGS@
281OBJDUMP = @OBJDUMP@
282OBJEXT = @OBJEXT@
283OTOOL = @OTOOL@
284OTOOL64 = @OTOOL64@
285PACKAGE = @PACKAGE@
286PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
287PACKAGE_NAME = @PACKAGE_NAME@
288PACKAGE_STRING = @PACKAGE_STRING@
289PACKAGE_TARNAME = @PACKAGE_TARNAME@
290PACKAGE_URL = @PACKAGE_URL@
291PACKAGE_VERSION = @PACKAGE_VERSION@
292PATH_SEPARATOR = @PATH_SEPARATOR@
293PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
294PIXMAN_LIBS = @PIXMAN_LIBS@
295PKG_CONFIG = @PKG_CONFIG@
296PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
297PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
298PNG_CFLAGS = @PNG_CFLAGS@
299PNG_LIBS = @PNG_LIBS@
300RANLIB = @RANLIB@
301SDL_CFLAGS = @SDL_CFLAGS@
302SDL_LIBS = @SDL_LIBS@
303SED = @SED@
304SET_MAKE = @SET_MAKE@
305SHELL = @SHELL@
306SHM_OPEN_LINK = @SHM_OPEN_LINK@
307STRIP = @STRIP@
308SVG_CFLAGS = @SVG_CFLAGS@
309SVG_LIBS = @SVG_LIBS@
310VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
311VALGRIND_LIBS = @VALGRIND_LIBS@
312VERSION = @VERSION@
313VMAJ = @VMAJ@
314WIN32_CFLAGS = @WIN32_CFLAGS@
315WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
316XCB_CFLAGS = @XCB_CFLAGS@
317XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
318XCB_GL_LIBS = @XCB_GL_LIBS@
319XCB_LIBS = @XCB_LIBS@
320XEXT_CFLAGS = @XEXT_CFLAGS@
321XEXT_LIBS = @XEXT_LIBS@
322XMKMF = @XMKMF@
323X_CFLAGS = @X_CFLAGS@
324X_EXTRA_LIBS = @X_EXTRA_LIBS@
325X_LIBS = @X_LIBS@
326X_PRE_LIBS = @X_PRE_LIBS@
327abs_builddir = @abs_builddir@
328abs_srcdir = @abs_srcdir@
329abs_top_builddir = @abs_top_builddir@
330abs_top_srcdir = @abs_top_srcdir@
331ac_ct_CC = @ac_ct_CC@
332ac_ct_CXX = @ac_ct_CXX@
333ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
334ac_ct_OBJC = @ac_ct_OBJC@
335altivec_cflags = @altivec_cflags@
336am__include = @am__include@
337am__leading_dot = @am__leading_dot@
338am__quote = @am__quote@
339am__tar = @am__tar@
340am__untar = @am__untar@
341bindir = @bindir@
342build = @build@
343build_alias = @build_alias@
344build_cpu = @build_cpu@
345build_os = @build_os@
346build_vendor = @build_vendor@
347builddir = @builddir@
348datadir = @datadir@
349datarootdir = @datarootdir@
350dlopen_libs = @dlopen_libs@
351docdir = @docdir@
352dvidir = @dvidir@
353edje_cc = @edje_cc@
354efl_doxygen = @efl_doxygen@
355efl_have_doxygen = @efl_have_doxygen@
356evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
357evas_engine_buffer_libs = @evas_engine_buffer_libs@
358evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
359evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
360evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
361evas_engine_directfb_libs = @evas_engine_directfb_libs@
362evas_engine_fb_cflags = @evas_engine_fb_cflags@
363evas_engine_fb_libs = @evas_engine_fb_libs@
364evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
365evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
366evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
367evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
368evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
369evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
370evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
371evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
372evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
373evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
374evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
375evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
376evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
377evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
378evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
379evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
380evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
381evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
382evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
383evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
384evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
385evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
386evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
387evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
388evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
389evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
390evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
391evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
392evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
393evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
394evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
395evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
396evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
397evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
398evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
399evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
400evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
401evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
402evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
403evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
404evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
405evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
406evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
407evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
408evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
409evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
410evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
411evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
412evas_image_loader_png_libs = @evas_image_loader_png_libs@
413evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
414evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
415evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
416evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
417evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
418evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
419evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
420evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
421evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
422evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
423evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
424evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
425exec_prefix = @exec_prefix@
426have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
427have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
428have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
429have_evas_engine_software_x11 = @have_evas_engine_software_x11@
430have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
431have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
432have_lcov = @have_lcov@
433host = @host@
434host_alias = @host_alias@
435host_cpu = @host_cpu@
436host_os = @host_os@
437host_vendor = @host_vendor@
438htmldir = @htmldir@
439includedir = @includedir@
440infodir = @infodir@
441install_sh = @install_sh@
442libdir = @libdir@
443libexecdir = @libexecdir@
444localedir = @localedir@
445localstatedir = @localstatedir@
446lt_ECHO = @lt_ECHO@
447lt_enable_auto_import = @lt_enable_auto_import@
448mandir = @mandir@
449mkdir_p = @mkdir_p@
450oldincludedir = @oldincludedir@
451pdfdir = @pdfdir@
452pkgconfig_requires_private = @pkgconfig_requires_private@
453prefix = @prefix@
454program_transform_name = @program_transform_name@
455psdir = @psdir@
456pthread_cflags = @pthread_cflags@
457pthread_libs = @pthread_libs@
458release_info = @release_info@
459requirement_evas = @requirement_evas@
460sbindir = @sbindir@
461sharedstatedir = @sharedstatedir@
462srcdir = @srcdir@
463sysconfdir = @sysconfdir@
464target_alias = @target_alias@
465top_build_prefix = @top_build_prefix@
466top_builddir = @top_builddir@
467top_srcdir = @top_srcdir@
468version_info = @version_info@
469MAINTAINERCLEANFILES = Makefile.in
470AM_CPPFLAGS = \
471-I. \
472-I$(top_srcdir)/src/lib \
473-I$(top_srcdir)/src/lib/include \
474-I$(top_srcdir)/src/modules/engines \
475@EINA_CFLAGS@ \
476@FREETYPE_CFLAGS@ \
477@PIXMAN_CFLAGS@ \
478@evas_engine_direct3d_cflags@
479
480@BUILD_ENGINE_DIRECT3D_TRUE@DIRECT3D_SOURCES = \
481@BUILD_ENGINE_DIRECT3D_TRUE@evas_engine.c \
482@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_context.cpp \
483@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_device.cpp \
484@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_image_cache.cpp \
485@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_main.cpp \
486@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_object.cpp \
487@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_object_font.cpp \
488@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_object_image.cpp \
489@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_object_line.cpp \
490@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_object_rect.cpp \
491@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_scene.cpp \
492@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_shader_pack.cpp \
493@BUILD_ENGINE_DIRECT3D_TRUE@evas_direct3d_vertex_buffer_cache.cpp
494
495@BUILD_ENGINE_DIRECT3D_TRUE@DIRECT3D_LIBADD = @evas_engine_direct3d_libs@
496@BUILD_ENGINE_DIRECT3D_TRUE@includes_HEADERS = Evas_Engine_Direct3D.h
497@BUILD_ENGINE_DIRECT3D_TRUE@includesdir = $(includedir)/evas-@VMAJ@
498@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@pkgdir = $(libdir)/evas/modules/engines/direct3d/$(MODULE_ARCH)
499@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@pkg_LTLIBRARIES = module.la
500@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@module_la_SOURCES = $(DIRECT3D_SOURCES)
501@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@module_la_CXXFLAGS = -fno-exceptions
502@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@module_la_LIBADD = $(top_builddir)/src/lib/libevas.la $(DIRECT3D_LIBADD) @EINA_LIBS@
503@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@module_la_LDFLAGS = @lt_enable_auto_import@ -no-undefined -module -avoid-version
504@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
505@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_TRUE@noinst_LTLIBRARIES = libevas_engine_direct3d.la
506@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_TRUE@libevas_engine_direct3d_la_SOURCES = $(DIRECT3D_SOURCES)
507@BUILD_ENGINE_DIRECT3D_TRUE@@EVAS_STATIC_BUILD_DIRECT3D_TRUE@libevas_engine_direct3d_la_LIBADD = $(DIRECT3D_LIBADD)
508EXTRA_DIST = \
509array.h \
510evas_direct3d_context.h \
511evas_direct3d_device.h \
512evas_direct3d_image_cache.h \
513evas_direct3d_object.h \
514evas_direct3d_object_font.h \
515evas_direct3d_object_image.h \
516evas_direct3d_object_line.h \
517evas_direct3d_object_rect.h \
518evas_direct3d_scene.h \
519evas_direct3d_shader_pack.h \
520evas_direct3d_vertex_buffer_cache.h \
521evas_engine.h \
522ref.h
523
524all: all-am
525
526.SUFFIXES:
527.SUFFIXES: .c .cpp .lo .o .obj
528$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
529 @for dep in $?; do \
530 case '$(am__configure_deps)' in \
531 *$$dep*) \
532 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
533 && { if test -f $@; then exit 0; else break; fi; }; \
534 exit 1;; \
535 esac; \
536 done; \
537 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/direct3d/Makefile'; \
538 $(am__cd) $(top_srcdir) && \
539 $(AUTOMAKE) --gnu src/modules/engines/direct3d/Makefile
540.PRECIOUS: Makefile
541Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
542 @case '$?' in \
543 *config.status*) \
544 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
545 *) \
546 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
547 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
548 esac;
549
550$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
551 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
552
553$(top_srcdir)/configure: $(am__configure_deps)
554 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
555$(ACLOCAL_M4): $(am__aclocal_m4_deps)
556 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
557$(am__aclocal_m4_deps):
558
559clean-noinstLTLIBRARIES:
560 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
561 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
562 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
563 test "$$dir" != "$$p" || dir=.; \
564 echo "rm -f \"$${dir}/so_locations\""; \
565 rm -f "$${dir}/so_locations"; \
566 done
567install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
568 @$(NORMAL_INSTALL)
569 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
570 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
571 list2=; for p in $$list; do \
572 if test -f $$p; then \
573 list2="$$list2 $$p"; \
574 else :; fi; \
575 done; \
576 test -z "$$list2" || { \
577 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
578 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
579 }
580
581uninstall-pkgLTLIBRARIES:
582 @$(NORMAL_UNINSTALL)
583 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
584 for p in $$list; do \
585 $(am__strip_dir) \
586 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
587 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
588 done
589
590clean-pkgLTLIBRARIES:
591 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
592 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
593 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
594 test "$$dir" != "$$p" || dir=.; \
595 echo "rm -f \"$${dir}/so_locations\""; \
596 rm -f "$${dir}/so_locations"; \
597 done
598libevas_engine_direct3d.la: $(libevas_engine_direct3d_la_OBJECTS) $(libevas_engine_direct3d_la_DEPENDENCIES)
599 $(AM_V_CXXLD)$(CXXLINK) $(am_libevas_engine_direct3d_la_rpath) $(libevas_engine_direct3d_la_OBJECTS) $(libevas_engine_direct3d_la_LIBADD) $(LIBS)
600module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
601 $(AM_V_CXXLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
602
603mostlyclean-compile:
604 -rm -f *.$(OBJEXT)
605
606distclean-compile:
607 -rm -f *.tab.c
608
609@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_context.Plo@am__quote@
610@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_device.Plo@am__quote@
611@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_image_cache.Plo@am__quote@
612@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_main.Plo@am__quote@
613@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_object.Plo@am__quote@
614@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_object_font.Plo@am__quote@
615@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_object_image.Plo@am__quote@
616@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_object_line.Plo@am__quote@
617@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_object_rect.Plo@am__quote@
618@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_scene.Plo@am__quote@
619@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_shader_pack.Plo@am__quote@
620@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_direct3d_vertex_buffer_cache.Plo@am__quote@
621@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
622@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_context.Plo@am__quote@
623@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_device.Plo@am__quote@
624@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_image_cache.Plo@am__quote@
625@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_main.Plo@am__quote@
626@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_object.Plo@am__quote@
627@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_object_font.Plo@am__quote@
628@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_object_image.Plo@am__quote@
629@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_object_line.Plo@am__quote@
630@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_object_rect.Plo@am__quote@
631@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_scene.Plo@am__quote@
632@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_shader_pack.Plo@am__quote@
633@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_direct3d_vertex_buffer_cache.Plo@am__quote@
634@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
635
636.c.o:
637@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
638@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
639@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
640@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
641@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
642@am__fastdepCC_FALSE@ $(COMPILE) -c $<
643
644.c.obj:
645@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
646@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
647@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
648@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
649@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
650@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
651
652.c.lo:
653@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
654@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
655@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
656@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
657@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
658@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
659
660module_la-evas_engine.lo: evas_engine.c
661@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
662@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
663@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
664@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
665@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
666@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
667
668.cpp.o:
669@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
670@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
671@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
672@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
673@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
674@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
675
676.cpp.obj:
677@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
678@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
679@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
680@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
681@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
682@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
683
684.cpp.lo:
685@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
686@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
687@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
688@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
689@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
690@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
691
692module_la-evas_direct3d_context.lo: evas_direct3d_context.cpp
693@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_context.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_context.Tpo -c -o module_la-evas_direct3d_context.lo `test -f 'evas_direct3d_context.cpp' || echo '$(srcdir)/'`evas_direct3d_context.cpp
694@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_context.Tpo $(DEPDIR)/module_la-evas_direct3d_context.Plo
695@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
696@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_context.cpp' object='module_la-evas_direct3d_context.lo' libtool=yes @AMDEPBACKSLASH@
697@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
698@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_context.lo `test -f 'evas_direct3d_context.cpp' || echo '$(srcdir)/'`evas_direct3d_context.cpp
699
700module_la-evas_direct3d_device.lo: evas_direct3d_device.cpp
701@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_device.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_device.Tpo -c -o module_la-evas_direct3d_device.lo `test -f 'evas_direct3d_device.cpp' || echo '$(srcdir)/'`evas_direct3d_device.cpp
702@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_device.Tpo $(DEPDIR)/module_la-evas_direct3d_device.Plo
703@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
704@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_device.cpp' object='module_la-evas_direct3d_device.lo' libtool=yes @AMDEPBACKSLASH@
705@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
706@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_device.lo `test -f 'evas_direct3d_device.cpp' || echo '$(srcdir)/'`evas_direct3d_device.cpp
707
708module_la-evas_direct3d_image_cache.lo: evas_direct3d_image_cache.cpp
709@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_image_cache.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_image_cache.Tpo -c -o module_la-evas_direct3d_image_cache.lo `test -f 'evas_direct3d_image_cache.cpp' || echo '$(srcdir)/'`evas_direct3d_image_cache.cpp
710@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_image_cache.Tpo $(DEPDIR)/module_la-evas_direct3d_image_cache.Plo
711@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
712@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_image_cache.cpp' object='module_la-evas_direct3d_image_cache.lo' libtool=yes @AMDEPBACKSLASH@
713@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
714@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_image_cache.lo `test -f 'evas_direct3d_image_cache.cpp' || echo '$(srcdir)/'`evas_direct3d_image_cache.cpp
715
716module_la-evas_direct3d_main.lo: evas_direct3d_main.cpp
717@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_main.Tpo -c -o module_la-evas_direct3d_main.lo `test -f 'evas_direct3d_main.cpp' || echo '$(srcdir)/'`evas_direct3d_main.cpp
718@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_main.Tpo $(DEPDIR)/module_la-evas_direct3d_main.Plo
719@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
720@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_main.cpp' object='module_la-evas_direct3d_main.lo' libtool=yes @AMDEPBACKSLASH@
721@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
722@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_main.lo `test -f 'evas_direct3d_main.cpp' || echo '$(srcdir)/'`evas_direct3d_main.cpp
723
724module_la-evas_direct3d_object.lo: evas_direct3d_object.cpp
725@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_object.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_object.Tpo -c -o module_la-evas_direct3d_object.lo `test -f 'evas_direct3d_object.cpp' || echo '$(srcdir)/'`evas_direct3d_object.cpp
726@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_object.Tpo $(DEPDIR)/module_la-evas_direct3d_object.Plo
727@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
728@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_object.cpp' object='module_la-evas_direct3d_object.lo' libtool=yes @AMDEPBACKSLASH@
729@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
730@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_object.lo `test -f 'evas_direct3d_object.cpp' || echo '$(srcdir)/'`evas_direct3d_object.cpp
731
732module_la-evas_direct3d_object_font.lo: evas_direct3d_object_font.cpp
733@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_object_font.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_object_font.Tpo -c -o module_la-evas_direct3d_object_font.lo `test -f 'evas_direct3d_object_font.cpp' || echo '$(srcdir)/'`evas_direct3d_object_font.cpp
734@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_object_font.Tpo $(DEPDIR)/module_la-evas_direct3d_object_font.Plo
735@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
736@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_object_font.cpp' object='module_la-evas_direct3d_object_font.lo' libtool=yes @AMDEPBACKSLASH@
737@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
738@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_object_font.lo `test -f 'evas_direct3d_object_font.cpp' || echo '$(srcdir)/'`evas_direct3d_object_font.cpp
739
740module_la-evas_direct3d_object_image.lo: evas_direct3d_object_image.cpp
741@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_object_image.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_object_image.Tpo -c -o module_la-evas_direct3d_object_image.lo `test -f 'evas_direct3d_object_image.cpp' || echo '$(srcdir)/'`evas_direct3d_object_image.cpp
742@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_object_image.Tpo $(DEPDIR)/module_la-evas_direct3d_object_image.Plo
743@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
744@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_object_image.cpp' object='module_la-evas_direct3d_object_image.lo' libtool=yes @AMDEPBACKSLASH@
745@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
746@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_object_image.lo `test -f 'evas_direct3d_object_image.cpp' || echo '$(srcdir)/'`evas_direct3d_object_image.cpp
747
748module_la-evas_direct3d_object_line.lo: evas_direct3d_object_line.cpp
749@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_object_line.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_object_line.Tpo -c -o module_la-evas_direct3d_object_line.lo `test -f 'evas_direct3d_object_line.cpp' || echo '$(srcdir)/'`evas_direct3d_object_line.cpp
750@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_object_line.Tpo $(DEPDIR)/module_la-evas_direct3d_object_line.Plo
751@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
752@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_object_line.cpp' object='module_la-evas_direct3d_object_line.lo' libtool=yes @AMDEPBACKSLASH@
753@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
754@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_object_line.lo `test -f 'evas_direct3d_object_line.cpp' || echo '$(srcdir)/'`evas_direct3d_object_line.cpp
755
756module_la-evas_direct3d_object_rect.lo: evas_direct3d_object_rect.cpp
757@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_object_rect.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_object_rect.Tpo -c -o module_la-evas_direct3d_object_rect.lo `test -f 'evas_direct3d_object_rect.cpp' || echo '$(srcdir)/'`evas_direct3d_object_rect.cpp
758@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_object_rect.Tpo $(DEPDIR)/module_la-evas_direct3d_object_rect.Plo
759@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
760@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_object_rect.cpp' object='module_la-evas_direct3d_object_rect.lo' libtool=yes @AMDEPBACKSLASH@
761@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
762@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_object_rect.lo `test -f 'evas_direct3d_object_rect.cpp' || echo '$(srcdir)/'`evas_direct3d_object_rect.cpp
763
764module_la-evas_direct3d_scene.lo: evas_direct3d_scene.cpp
765@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_scene.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_scene.Tpo -c -o module_la-evas_direct3d_scene.lo `test -f 'evas_direct3d_scene.cpp' || echo '$(srcdir)/'`evas_direct3d_scene.cpp
766@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_scene.Tpo $(DEPDIR)/module_la-evas_direct3d_scene.Plo
767@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
768@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_scene.cpp' object='module_la-evas_direct3d_scene.lo' libtool=yes @AMDEPBACKSLASH@
769@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
770@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_scene.lo `test -f 'evas_direct3d_scene.cpp' || echo '$(srcdir)/'`evas_direct3d_scene.cpp
771
772module_la-evas_direct3d_shader_pack.lo: evas_direct3d_shader_pack.cpp
773@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_shader_pack.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_shader_pack.Tpo -c -o module_la-evas_direct3d_shader_pack.lo `test -f 'evas_direct3d_shader_pack.cpp' || echo '$(srcdir)/'`evas_direct3d_shader_pack.cpp
774@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_shader_pack.Tpo $(DEPDIR)/module_la-evas_direct3d_shader_pack.Plo
775@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
776@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_shader_pack.cpp' object='module_la-evas_direct3d_shader_pack.lo' libtool=yes @AMDEPBACKSLASH@
777@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
778@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_shader_pack.lo `test -f 'evas_direct3d_shader_pack.cpp' || echo '$(srcdir)/'`evas_direct3d_shader_pack.cpp
779
780module_la-evas_direct3d_vertex_buffer_cache.lo: evas_direct3d_vertex_buffer_cache.cpp
781@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_direct3d_vertex_buffer_cache.lo -MD -MP -MF $(DEPDIR)/module_la-evas_direct3d_vertex_buffer_cache.Tpo -c -o module_la-evas_direct3d_vertex_buffer_cache.lo `test -f 'evas_direct3d_vertex_buffer_cache.cpp' || echo '$(srcdir)/'`evas_direct3d_vertex_buffer_cache.cpp
782@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_direct3d_vertex_buffer_cache.Tpo $(DEPDIR)/module_la-evas_direct3d_vertex_buffer_cache.Plo
783@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
784@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_direct3d_vertex_buffer_cache.cpp' object='module_la-evas_direct3d_vertex_buffer_cache.lo' libtool=yes @AMDEPBACKSLASH@
785@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
786@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_direct3d_vertex_buffer_cache.lo `test -f 'evas_direct3d_vertex_buffer_cache.cpp' || echo '$(srcdir)/'`evas_direct3d_vertex_buffer_cache.cpp
787
788mostlyclean-libtool:
789 -rm -f *.lo
790
791clean-libtool:
792 -rm -rf .libs _libs
793install-includesHEADERS: $(includes_HEADERS)
794 @$(NORMAL_INSTALL)
795 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
796 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
797 for p in $$list; do \
798 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
799 echo "$$d$$p"; \
800 done | $(am__base_list) | \
801 while read files; do \
802 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
803 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
804 done
805
806uninstall-includesHEADERS:
807 @$(NORMAL_UNINSTALL)
808 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
809 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
810 test -n "$$files" || exit 0; \
811 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
812 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
813
814ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
815 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
816 unique=`for i in $$list; do \
817 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
818 done | \
819 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
820 END { if (nonempty) { for (i in files) print i; }; }'`; \
821 mkid -fID $$unique
822tags: TAGS
823
824TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
825 $(TAGS_FILES) $(LISP)
826 set x; \
827 here=`pwd`; \
828 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
829 unique=`for i in $$list; do \
830 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
831 done | \
832 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
833 END { if (nonempty) { for (i in files) print i; }; }'`; \
834 shift; \
835 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
836 test -n "$$unique" || unique=$$empty_fix; \
837 if test $$# -gt 0; then \
838 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
839 "$$@" $$unique; \
840 else \
841 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
842 $$unique; \
843 fi; \
844 fi
845ctags: CTAGS
846CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
847 $(TAGS_FILES) $(LISP)
848 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
849 unique=`for i in $$list; do \
850 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
851 done | \
852 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
853 END { if (nonempty) { for (i in files) print i; }; }'`; \
854 test -z "$(CTAGS_ARGS)$$unique" \
855 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
856 $$unique
857
858GTAGS:
859 here=`$(am__cd) $(top_builddir) && pwd` \
860 && $(am__cd) $(top_srcdir) \
861 && gtags -i $(GTAGS_ARGS) "$$here"
862
863distclean-tags:
864 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
865
866distdir: $(DISTFILES)
867 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
868 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
869 list='$(DISTFILES)'; \
870 dist_files=`for file in $$list; do echo $$file; done | \
871 sed -e "s|^$$srcdirstrip/||;t" \
872 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
873 case $$dist_files in \
874 */*) $(MKDIR_P) `echo "$$dist_files" | \
875 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
876 sort -u` ;; \
877 esac; \
878 for file in $$dist_files; do \
879 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
880 if test -d $$d/$$file; then \
881 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
882 if test -d "$(distdir)/$$file"; then \
883 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
884 fi; \
885 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
886 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
887 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
888 fi; \
889 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
890 else \
891 test -f "$(distdir)/$$file" \
892 || cp -p $$d/$$file "$(distdir)/$$file" \
893 || exit 1; \
894 fi; \
895 done
896check-am: all-am
897check: check-am
898all-am: Makefile $(LTLIBRARIES) $(HEADERS)
899installdirs:
900 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
901 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
902 done
903install: install-am
904install-exec: install-exec-am
905install-data: install-data-am
906uninstall: uninstall-am
907
908install-am: all-am
909 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
910
911installcheck: installcheck-am
912install-strip:
913 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
914 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
915 `test -z '$(STRIP)' || \
916 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
917mostlyclean-generic:
918
919clean-generic:
920
921distclean-generic:
922 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
923 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
924
925maintainer-clean-generic:
926 @echo "This command is intended for maintainers to use"
927 @echo "it deletes files that may require special tools to rebuild."
928 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
929clean: clean-am
930
931clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
932 clean-pkgLTLIBRARIES mostlyclean-am
933
934distclean: distclean-am
935 -rm -rf ./$(DEPDIR)
936 -rm -f Makefile
937distclean-am: clean-am distclean-compile distclean-generic \
938 distclean-tags
939
940dvi: dvi-am
941
942dvi-am:
943
944html: html-am
945
946html-am:
947
948info: info-am
949
950info-am:
951
952install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
953
954install-dvi: install-dvi-am
955
956install-dvi-am:
957
958install-exec-am:
959
960install-html: install-html-am
961
962install-html-am:
963
964install-info: install-info-am
965
966install-info-am:
967
968install-man:
969
970install-pdf: install-pdf-am
971
972install-pdf-am:
973
974install-ps: install-ps-am
975
976install-ps-am:
977
978installcheck-am:
979
980maintainer-clean: maintainer-clean-am
981 -rm -rf ./$(DEPDIR)
982 -rm -f Makefile
983maintainer-clean-am: distclean-am maintainer-clean-generic
984
985mostlyclean: mostlyclean-am
986
987mostlyclean-am: mostlyclean-compile mostlyclean-generic \
988 mostlyclean-libtool
989
990pdf: pdf-am
991
992pdf-am:
993
994ps: ps-am
995
996ps-am:
997
998uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
999
1000.MAKE: install-am install-strip
1001
1002.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
1003 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
1004 ctags distclean distclean-compile distclean-generic \
1005 distclean-libtool distclean-tags distdir dvi dvi-am html \
1006 html-am info info-am install install-am install-data \
1007 install-data-am install-dvi install-dvi-am install-exec \
1008 install-exec-am install-html install-html-am \
1009 install-includesHEADERS install-info install-info-am \
1010 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
1011 install-ps install-ps-am install-strip installcheck \
1012 installcheck-am installdirs maintainer-clean \
1013 maintainer-clean-generic mostlyclean mostlyclean-compile \
1014 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
1015 tags uninstall uninstall-am uninstall-includesHEADERS \
1016 uninstall-pkgLTLIBRARIES
1017
1018
1019# Tell versions [3.59,3.63) of GNU make to not export all variables.
1020# Otherwise a system limit (for SysV at least) may be exceeded.
1021.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/direct3d/array.h b/libraries/evas/src/modules/engines/direct3d/array.h
new file mode 100644
index 0000000..dfd80b7
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/array.h
@@ -0,0 +1,305 @@
1#ifndef __ARRAY_H__
2#define __ARRAY_H__
3
4#include "ref.h"
5#include <assert.h>
6
7template <class T>
8class TArray : virtual public Referenc
9{
10public:
11 TArray();
12 TArray(const TArray<T> &arr)
13 {
14 data = NULL;
15 size = num = 0;
16 block_size = arr.block_size;
17 keep_order = arr.keep_order;
18
19 //assert(0 && "Direct assignment for arrays is NOT allowed");
20 // risky probably, but anyway
21 arr.CopyTo(*this);
22 }
23 ~TArray();
24
25 bool Allocate(int new_num);
26 bool Resize(int new_size = 0);
27 bool Add(T &el);
28 bool Add(const T &el);
29
30 inline T &operator[](int i);
31 inline const T &operator[](int i) const;
32 inline const TArray<T> &operator =(const TArray<T> &arr)
33 {
34 block_size = arr.block_size;
35 keep_order = arr.keep_order;
36
37 //assert(0 && "Direct assignment for arrays is NOT allowed");
38 // risky probably, but anyway
39 arr.CopyTo(*this);
40 return *this;
41 }
42
43 T *Last()
44 {
45 if (num > 0)
46 return &data[num - 1];
47 return NULL;
48 }
49
50 inline int Length() const
51 {
52 return num;
53 }
54
55 inline int Size() const
56 {
57 return size;
58 }
59
60 inline int BlockSize() const
61 {
62 return block_size;
63 }
64
65 inline T *Data()
66 {
67 return data;
68 }
69
70 inline T **DataPtr()
71 {
72 return &data;
73 }
74
75 inline const T *Data() const
76 {
77 return data;
78 }
79
80 inline void SetKeepOrder(bool enable)
81 {
82 keep_order = enable;
83 }
84
85 bool Find(const T &el);
86
87 bool Add(TArray<T> &arr);
88 bool CopyTo(TArray<T> &dest) const;
89 bool Init(const T *arr, int len);
90
91 void Swap(int to, int from);
92 void Replace(int i);
93
94 bool SetBlockSize(int new_size);
95 void Set(T &el);
96 void Set(const T &el);
97
98protected:
99 T *data;
100 int size;
101 int num;
102 int block_size;
103 // Some operations restricted, order of the elements is fixed
104 bool keep_order;
105
106};
107
108namespace Array
109{
110 const int default_block_size = 16;
111 const int max_array_size = 0xffffff;
112}
113
114
115template <class T> TArray<T>::TArray()
116: data(NULL), size(0), num(0), block_size(Array::default_block_size), keep_order(false)
117{
118}
119
120template <class T> TArray<T>::~TArray()
121{
122 if (data != NULL)
123 Resize();
124}
125
126template <class T> bool TArray<T>::Allocate(int new_num)
127{
128 assert(new_num >= 0 && new_num <= Array::max_array_size);
129 if (new_num > size)
130 {
131 if (!Resize(new_num))
132 return false;
133 }
134 num = new_num;
135 return true;
136}
137
138template <class T> bool TArray<T>::Resize(int new_size)
139{
140 assert(new_size >= 0 && new_size <= Array::max_array_size);
141 if (new_size == 0)
142 {
143 delete[] data;
144 data = NULL;
145 size = 0;
146 num = 0;
147 return true;
148 }
149 if (new_size == size)
150 return true;
151
152 T *new_data = new T[new_size];
153 if (new_data == NULL)
154 return false;
155
156 if (data != NULL && num > 0)
157 {
158 //CopyMemory(new_data, data, num * sizeof(T));
159 for (int i = 0; i < num && i < new_size; i++)
160 new_data[i] = data[i];
161 }
162 delete[] data;
163
164 data = new_data;
165 size = new_size;
166 return true;
167}
168
169template <class T> bool TArray<T>::Add(T &el)
170{
171 if (data == NULL)
172 Resize(1);
173
174 if (num < size)
175 {
176 data[num++] = el;
177 return true;
178 }
179 // num >= size
180 int new_size = size + block_size;
181 if (!Resize(new_size))
182 return false;
183
184 data[num++] = el;
185 return true;
186}
187
188template <class T> bool TArray<T>::Add(const T &el)
189{
190 if (data == NULL)
191 Resize(1);
192
193 if (num < size)
194 {
195 data[num++] = *(T *)&el;
196 return true;
197 }
198 // num >= size
199 int new_size = size + block_size;
200 if (!Resize(new_size))
201 return false;
202
203 data[num++] = *(T *)&el;
204 return true;
205}
206
207template <class T> bool TArray<T>::Add(TArray<T> &arr)
208{
209 if (arr.Length() == 0)
210 return true;
211 int numf = num;
212 if (!Allocate(Length() + arr.Length()))
213 return false;
214 CopyMemory(&data[numf], arr.Data(), arr.Length() * sizeof(T));
215 return true;
216}
217
218template <class T> T &TArray<T>::operator [](int i)
219{
220 assert(i >= 0 && i < num);
221 return data[i];
222}
223
224template <class T> const T &TArray<T>::operator [](int i) const
225{
226 assert(i >= 0 && i < num);
227 return data[i];
228}
229
230template <class T> bool TArray<T>::SetBlockSize(int new_size)
231{
232 assert(new_size >= 0 && new_size <= Array::max_array_size);
233 block_size = new_size;
234 return true;
235}
236
237template <class T> void TArray<T>::Set(T &el)
238{
239 for (int i = 0; i < num; i++)
240 data[i] = el;
241}
242
243template <class T> void TArray<T>::Set(const T &el)
244{
245 for (int i = 0; i < num; i++)
246 data[i] = el;
247}
248
249template <class T> bool TArray<T>::CopyTo(TArray<T> &dest) const
250{
251 if (!dest.Resize(size))
252 return false;
253 dest.num = 0;
254 for (int i = 0; i < num; i++)
255 dest.Add(data[i]);
256
257 return true;
258}
259
260template <class T> bool TArray<T>::Init(const T *arr, int len)
261{
262 assert(arr != NULL);
263 if (!Resize(len))
264 return false;
265 num = 0;
266 for (int i = 0; i < len; i++)
267 Add((T)arr[i]);
268
269 return true;
270}
271
272template <class T> void TArray<T>::Swap(int to, int from)
273{
274 assert(to >= 0 && to < num && from >= 0 && from < num);
275 if (keep_order)
276 return;
277 T t = data[to];
278 data[to] = data[from];
279 data[from] = t;
280}
281
282template <class T> void TArray<T>::Replace(int i)
283{
284 assert(i >= 0 && i < num);
285 if (keep_order)
286 return;
287 if (num >= 1)
288 {
289 data[i] = data[num - 1];
290 num--;
291 }
292}
293
294// operator == for type T should be defined
295template <class T> bool TArray<T>::Find(const T &el)
296{
297 for (int i = 0; i < num; i++)
298 {
299 if (data[i] == el)
300 return true;
301 }
302 return false;
303}
304
305#endif // __ARRAY_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_context.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_context.cpp
new file mode 100644
index 0000000..07cfa3d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_context.cpp
@@ -0,0 +1,8 @@
1
2#include "evas_direct3d_context.h"
3
4D3DContext::D3DContext()
5{
6 color = 0xff000000;
7 color_mul = 0xffffffff;
8}
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_context.h b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_context.h
new file mode 100644
index 0000000..763d189
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_context.h
@@ -0,0 +1,22 @@
1#ifndef __EVAS_DIRECT3D_CONTEXT_H__
2#define __EVAS_DIRECT3D_CONTEXT_H__
3
4#include "evas_engine.h"
5
6#include "ref.h"
7#include "evas_direct3d_object.h"
8
9class D3DContext : virtual public Referenc
10{
11public:
12 D3DContext();
13
14public:
15 DWORD color;
16 DWORD color_mul;
17
18 Ref<D3DObject> font;
19
20};
21
22#endif // __EVAS_DIRECT3D_CONTEXT_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_device.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_device.cpp
new file mode 100644
index 0000000..ce0d985
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_device.cpp
@@ -0,0 +1,393 @@
1//#define ENABLE_LOG_PRINTF
2
3#include "evas_direct3d_device.h"
4
5#include "evas_direct3d_vertex_buffer_cache.h"
6
7D3DDevice::D3DDevice()
8{
9 ResetParams();
10}
11
12bool D3DDevice::Init(HWND window, int depth, bool fullscreen)
13{
14 D3DPRESENT_PARAMETERS pp;
15 D3DDISPLAYMODE dm;
16 D3DCAPS9 caps;
17 RECT rect;
18 DWORD flag;
19 HRESULT hr;
20
21 if (window == NULL)
22 return false;
23
24 Destroy();
25
26 _object = Direct3DCreate9(D3D_SDK_VERSION);
27 if (_object == NULL)
28 return false;
29
30 if (FAILED(hr = _object->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &dm)))
31 {
32 ERR("GetAdapterDisplayMode failed: %x", hr);
33 Destroy();
34 return false;
35 }
36
37 if (FAILED(hr = _object->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps)))
38 {
39 ERR("GetDeviceCaps failed: %x", hr);
40 Destroy();
41 return false;
42 }
43
44 if (!GetClientRect(window, &rect))
45 {
46 ERR("GetClientRect failed: %x", GetLastError());
47 Destroy();
48 return false;
49 }
50
51 if (SUCCEEDED(_object->CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
52 dm.Format, 0, D3DRTYPE_TEXTURE, (depth == 16) ? D3DFMT_R5G6B5 : D3DFMT_A8R8G8B8)))
53 {
54 dm.Format = (depth == 16) ? D3DFMT_R5G6B5 : D3DFMT_A8R8G8B8;
55 }
56
57 flag = (caps.VertexProcessingCaps != 0) ?
58 (D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE) :
59 D3DCREATE_SOFTWARE_VERTEXPROCESSING;
60
61 ZeroMemory(&pp, sizeof(pp));
62 if (!fullscreen)
63 {
64 pp.BackBufferWidth = rect.right - rect.left;
65 pp.BackBufferHeight = rect.bottom - rect.top;
66 }
67 else
68 {
69 pp.BackBufferWidth = ::GetSystemMetrics(SM_CXSCREEN);
70 pp.BackBufferHeight = ::GetSystemMetrics(SM_CYSCREEN);
71 }
72 pp.BackBufferFormat = dm.Format;
73 pp.BackBufferCount = 1;
74 pp.MultiSampleType = D3DMULTISAMPLE_NONE;
75 pp.MultiSampleQuality = 0;
76 pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
77 pp.hDeviceWindow = window;
78 pp.Windowed = fullscreen ? FALSE : TRUE;
79 //pp.EnableAutoDepthStencil = TRUE;
80 //pp.AutoDepthStencilFormat = D3DFMT_D16;
81 pp.FullScreen_RefreshRateInHz = 0;
82 pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
83
84 if (FAILED(hr = _object->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
85 window, flag, &pp, &_device)))
86 {
87 WRN("CreateDevice failed: %x", hr);
88 Destroy();
89 return false;
90 }
91
92 LPDIRECT3DSURFACE9 backbuffer = NULL;
93 _device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backbuffer);
94 backbuffer->GetDesc(&_backbuffer_desc);
95 backbuffer->Release();
96
97 switch (dm.Format) {
98 case D3DFMT_A8R8G8B8:
99 case D3DFMT_X8R8G8B8:
100 _depth = 32;
101 break;
102 case D3DFMT_R5G6B5:
103 _depth = 16;
104 break;
105 default:
106 WRN("No supported format found");
107 Destroy();
108 return false;
109 }
110
111 //_render_to_texture = false;
112
113 _d3dpp = pp;
114 _device_lost = FALSE;
115 _scene_rendering = FALSE;
116 _width = rect.right - rect.left;
117 _height = rect.bottom - rect.top;
118 _window = window;
119
120 if (FAILED(CreateRenderTarget()))
121 {
122 ERR("Failed to create render target");
123 Destroy();
124 return false;
125 }
126
127 Log("initialized");
128 return true;
129}
130
131bool D3DDevice::Reset(int width, int height, int fullscreen)
132{
133 D3DPRESENT_PARAMETERS pp = _d3dpp;
134 _d3dpp.BackBufferWidth = (width > 0) ? width : _d3dpp.BackBufferWidth;
135 _d3dpp.BackBufferHeight = (height > 0) ? height : _d3dpp.BackBufferHeight;
136 _d3dpp.Windowed = (fullscreen == 1) ? FALSE : ((fullscreen == 0) ? TRUE : _d3dpp.Windowed);
137 if (FAILED(ResetDevice()))
138 {
139 WRN("Couldnt restore device");
140 _d3dpp = pp;
141 return SUCCEEDED(ResetDevice());
142 }
143 _width = _d3dpp.BackBufferWidth;
144 _height = _d3dpp.BackBufferHeight;
145 return true;
146}
147
148void D3DDevice::Destroy()
149{
150 //if (_render_target != NULL)
151 //{
152 // _render_target->Release();
153 // _render_target = NULL;
154 //}
155 if (_render_target_data != NULL)
156 {
157 _render_target_data->Release();
158 _render_target_data = NULL;
159 }
160 if (_device != NULL)
161 {
162 int num = _device->Release();
163 assert(num == 0);
164 }
165 if (_object != NULL)
166 _object->Release();
167 ResetParams();
168
169 INF("uninitialized");
170}
171
172void D3DDevice::ResetParams()
173{
174 _window = NULL;
175 _object = NULL;
176 _device = NULL;
177 _width = 0;
178 _height = 0;
179 _rot = 0;
180 _depth = 0;
181 _device_lost = false;
182 _scene_rendering = false;
183 ZeroMemory(&_d3dpp, sizeof(_d3dpp));
184 ZeroMemory(&_backbuffer_desc, sizeof(_backbuffer_desc));
185 //_render_target = NULL;
186 _render_target_data = NULL;
187 _render_data_updated = false;
188 _render_data.Resize();
189 //_original_render_target = NULL;
190 //_render_to_texture = false;
191}
192
193HRESULT D3DDevice::RestoreDevice()
194{
195 Log("restore");
196 assert(_device != NULL);
197
198 HRESULT hr = S_OK;
199
200 // Test the cooperative level to see if it's okay to render
201 if (SUCCEEDED(hr = _device->TestCooperativeLevel()))
202 {
203 _device_lost = FALSE;
204 DBG("render test ok");
205 return S_OK;
206 }
207
208 // If the device was lost, do not render until we get it back
209 if (hr == D3DERR_DEVICELOST)
210 return E_FAIL;
211
212 // Check if the device needs to be reset.
213 if (hr == D3DERR_DEVICENOTRESET)
214 {
215 if (FAILED(hr = ResetDevice()))
216 return hr;
217 }
218 return hr;
219}
220
221HRESULT D3DDevice::ResetDevice()
222{
223 DBG("reset");
224 HRESULT hr = S_OK;
225
226 _scene_rendering = FALSE;
227
228 // Release all video memory objects
229 // Bad to call such, make better
230 D3DVertexBufferCache::Current()->Uninitialize();
231
232 //if (_render_target != NULL)
233 //{
234 // _render_target->Release();
235 // _render_target = NULL;
236 //}
237 if (_render_target_data != NULL)
238 {
239 _render_target_data->Release();
240 _render_target_data = NULL;
241 }
242
243 // Reset the device
244 if (FAILED(hr = _device->Reset(&_d3dpp)))
245 {
246 ERR("D3DDevice: Reset of the device failed! Error (%X)", (DWORD)hr);
247 return hr;
248 }
249
250 // Store render target surface desc
251 LPDIRECT3DSURFACE9 backbuffer = NULL;
252 _device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backbuffer);
253 if (backbuffer != NULL)
254 {
255 backbuffer->GetDesc(&_backbuffer_desc);
256 backbuffer->Release();
257 }
258
259 // Initialize the app's device-dependent objects
260 hr = CreateRenderTarget();
261
262 if (FAILED(hr))
263 {
264 WRN("Restoration of device objects failed");
265 // Invalidate objects
266
267 return E_FAIL;
268 }
269
270 DBG("Device objects were successfuly restored");
271 _textures.Set(NULL);
272
273 //_device_objects_restored = true;
274 return S_OK;
275}
276
277bool D3DDevice::Begin()
278{
279 if (FAILED(RestoreDevice()))
280 return false;
281
282 //if (_render_to_texture && _render_target != NULL)
283 //{
284 // if (FAILED(_device->GetRenderTarget(0, &_original_render_target)))
285 // return false;
286 // if (FAILED(_device->SetRenderTarget(0, _render_target)))
287 // return false;
288 //}
289
290 HRESULT hr;
291 if (FAILED(hr = _device->BeginScene()))
292 {
293 WRN("Cannot begin scene: %X", (DWORD)hr);
294 return false;
295 }
296
297 //static const D3DVIEWPORT9 vp = {0, 0, _width, _height, 0.f, 1.f};
298 //_device->SetViewport(&vp);
299 //_device->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
300
301 //_device->Clear(0, NULL, D3DCLEAR_TARGET /*| D3DCLEAR_ZBUFFER*/, 0xff8080ff, 1.f, 0);
302 return true;
303}
304
305bool D3DDevice::End()
306{
307 _device->EndScene();
308 _device->Present(NULL, NULL, NULL, NULL);
309
310 _render_data_updated = false;
311
312 //if (_render_to_texture && _render_target != NULL && _original_render_target != NULL)
313 //{
314 // if (FAILED(_device->SetRenderTarget(0, _original_render_target)))
315 // return false;
316 //}
317
318 return true;
319}
320
321TArray<DWORD> &D3DDevice::GetRenderData()
322{
323 if (_render_data_updated)
324 return _render_data;
325 _render_data.Allocate(0);
326 if (_render_target_data == NULL)
327 return _render_data;
328
329 LPDIRECT3DSURFACE9 surf = NULL;
330 HRESULT hr;
331 if (FAILED(_device->GetRenderTarget(0, &surf)))
332 return _render_data;
333 if (FAILED(hr = _device->GetRenderTargetData(surf, _render_target_data)))
334 {
335 WRN("Failed to get render target data (%X)", (DWORD)hr);
336 surf->Release();
337 return _render_data;
338 }
339 D3DLOCKED_RECT lr;
340 if (FAILED(_render_target_data->LockRect(&lr, NULL, D3DLOCK_READONLY)))
341 {
342 surf->Release();
343 return _render_data;
344 }
345 _render_data.Allocate(_width * _height);
346
347 for (int i = 0; i < _height; i++)
348 {
349 CopyMemory(&_render_data[i * _width], (BYTE *)lr.pBits + i * lr.Pitch,
350 _width * sizeof(DWORD));
351 }
352
353 _render_target_data->UnlockRect();
354 _render_data_updated = true;
355 surf->Release();
356 return _render_data;
357}
358
359HRESULT D3DDevice::SetTexture(DWORD stage, LPDIRECT3DTEXTURE9 tex)
360{
361 if (stage >= 8)
362 return E_FAIL;
363 if (_textures.Length() <= (int)stage)
364 _textures.Allocate(stage + 1);
365 if (_textures[stage] != tex)
366 {
367 _textures[stage] = tex;
368 return _device->SetTexture(stage, tex);
369 }
370 return S_OK;
371}
372
373HRESULT D3DDevice::CreateRenderTarget()
374{
375 if (_device == NULL)
376 return E_FAIL;
377 //if (_render_target != NULL &&
378 if (_render_target_data != NULL)
379 return S_OK;
380
381 //if (FAILED(_device->CreateRenderTarget(_width, _height, _backbuffer_desc.Format,
382 // D3DMULTISAMPLE_NONE, 0, FALSE, &_render_target, NULL)))
383 //{
384 // return E_FAIL;
385 //}
386 if (FAILED(_device->CreateOffscreenPlainSurface(_backbuffer_desc.Width,
387 _backbuffer_desc.Height, _backbuffer_desc.Format, D3DPOOL_SYSTEMMEM,
388 &_render_target_data, NULL)))
389 {
390 return E_FAIL;
391 }
392 return S_OK;
393}
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_device.h b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_device.h
new file mode 100644
index 0000000..c5a4b49
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_device.h
@@ -0,0 +1,87 @@
1#ifndef __EVAS_DIRECT3D_DEVICE_H__
2#define __EVAS_DIRECT3D_DEVICE_H__
3
4#include "evas_engine.h"
5
6#include <assert.h>
7
8#include "ref.h"
9#include "array.h"
10
11
12class D3DDevice : virtual public Referenc
13{
14public:
15 D3DDevice();
16
17 bool Init(HWND window, int depth, bool fullscreen = false);
18 bool Reset(int width, int height, int fullscreen);
19 void Destroy();
20 bool Begin();
21 bool End();
22
23 inline LPDIRECT3DDEVICE9 GetDevice();
24 inline int GetWidth();
25 inline int GetHeight();
26 inline HWND GetWindow();
27 inline bool GetFullscreen();
28
29 TArray<DWORD> &GetRenderData();
30
31 HRESULT SetTexture(DWORD stage, LPDIRECT3DTEXTURE9 tex);
32
33private:
34 HRESULT RestoreDevice();
35 HRESULT ResetDevice();
36 void ResetParams();
37
38 HRESULT CreateRenderTarget();
39
40private:
41 HWND _window;
42 LPDIRECT3D9 _object;
43 LPDIRECT3DDEVICE9 _device;
44 int _width;
45 int _height;
46 int _rot;
47 int _depth;
48 bool _device_lost;
49 bool _scene_rendering;
50 D3DPRESENT_PARAMETERS _d3dpp;
51 D3DSURFACE_DESC _backbuffer_desc;
52 //LPDIRECT3DSURFACE9 _render_target;
53 LPDIRECT3DSURFACE9 _render_target_data;
54 //LPDIRECT3DSURFACE9 _original_render_target;
55 //bool _render_to_texture;
56 TArray<DWORD> _render_data;
57 bool _render_data_updated;
58
59 TArray<LPDIRECT3DTEXTURE9> _textures;
60};
61
62LPDIRECT3DDEVICE9 D3DDevice::GetDevice()
63{
64 return _device;
65}
66
67int D3DDevice::GetWidth()
68{
69 return _width;
70}
71
72int D3DDevice::GetHeight()
73{
74 return _height;
75}
76
77HWND D3DDevice::GetWindow()
78{
79 return _window;
80}
81
82bool D3DDevice::GetFullscreen()
83{
84 return (_d3dpp.Windowed == 0);
85}
86
87#endif // __EVAS_DIRECT3D_DEVICE_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_image_cache.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_image_cache.cpp
new file mode 100644
index 0000000..aa44eb9
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_image_cache.cpp
@@ -0,0 +1,436 @@
1#include "evas_direct3d_image_cache.h"
2
3#include "evas_direct3d_device.h"
4
5#include <assert.h>
6
7Ref<D3DImageCache> D3DImageCache::_this;
8
9D3DImageCache::D3DImageCache()
10{
11 _max_width = 512;
12 _max_height = 512;
13 _margin = 0;
14}
15
16D3DImageCache::~D3DImageCache()
17{
18 Uninitialize();
19}
20
21D3DImageCache *D3DImageCache::Current()
22{
23 if (_this.IsNull())
24 _this = new D3DImageCache();
25 return _this;
26}
27
28void D3DImageCache::SetCurrent(D3DImageCache *obj)
29{
30 _this = obj;
31}
32
33void D3DImageCache::Uninitialize()
34{
35 for (int i = 0; i < _cache.Length(); i++)
36 {
37 // In normal case they all will be NULL
38 if (_cache[i].texture != NULL)
39 _cache[i].texture->Release();
40 }
41 _cache.Resize();
42}
43
44bool D3DImageCache::SelectImageToDevice(D3DDevice *d3d, int id)
45{
46 if (id < 0 || id >= _cache.Length())
47 return false;
48 assert(_cache[id].texture != NULL);
49 return SUCCEEDED(d3d->SetTexture(_cache[id].stage, _cache[id].texture));
50}
51
52void D3DImageCache::RemoveImageUser(int id)
53{
54 if (id < 0 || id >= _cache.Length())
55 return;
56 assert(_cache[id].texture != NULL);
57 _cache[id].users--;
58 if (_cache[id].users == 0)
59 {
60 _cache[id].texture->Release();
61 ZeroMemory(&_cache[id], sizeof(_cache[id]));
62 }
63}
64
65void D3DImageCache::AddImageUser(int id)
66{
67 if (id < 0 || id >= _cache.Length())
68 return;
69 assert(_cache[id].texture != NULL);
70 _cache[id].users++;
71}
72
73bool D3DImageCache::InsertImage(D3DDevice *d3d, DWORD *data, int w, int h, CacheEntryInfo &info)
74{
75 CacheEntry *ce = NULL;
76 int id = -1;
77 for (int i = 0; i < _cache.Length(); i++)
78 {
79 if (!_cache[i].locked && RequestInsert(_cache[i], w, h))
80 {
81 ce = &_cache[i];
82 id = i;
83 break;
84 }
85 }
86 if (ce == NULL)
87 {
88 CacheEntry new_entry;
89 if (!CreateEntry(d3d, new_entry, w, h))
90 return false;
91 for (id = 0; id < _cache.Length(); id++)
92 {
93 if (_cache[id].texture == NULL)
94 break;
95 }
96
97 if (id < _cache.Length())
98 {
99 _cache[id] = new_entry;
100 ce = &_cache[id];
101 }
102 else
103 {
104 _cache.Add(new_entry);
105 ce = _cache.Last();
106 id = _cache.Length() - 1;
107 }
108 }
109
110 assert(ce != NULL && ce->texture != NULL);
111
112 if (!InsertData(*ce, data, w, h))
113 return false;
114
115 info.id = id;
116 info.u = FLOAT(ce->cur_x) / FLOAT(ce->width);
117 info.v = FLOAT(ce->cur_y) / FLOAT(ce->height);
118 info.du = FLOAT(w) / FLOAT(ce->width);
119 info.dv = FLOAT(h) / FLOAT(ce->height);
120 info.width = w;
121 info.height = h;
122
123 UpdateInsert(*ce, w, h);
124 return true;
125}
126
127bool D3DImageCache::InsertImage(D3DDevice *d3d, int id, DWORD *data, int w, int h, CacheEntryInfo &info)
128{
129 if (id < 0 || id >= _cache.Length())
130 return false;
131 assert(_cache[id].texture != NULL);
132 CacheEntry *ce = &_cache[id];
133 if (!RequestInsert(*ce, w, h))
134 return false;
135 if (!InsertData(*ce, data, w, h))
136 return false;
137
138 info.id = id;
139 info.u = FLOAT(ce->cur_x) / FLOAT(ce->width);
140 info.v = FLOAT(ce->cur_y) / FLOAT(ce->height);
141 info.du = FLOAT(w) / FLOAT(ce->width);
142 info.dv = FLOAT(h) / FLOAT(ce->height);
143 info.width = w;
144 info.height = h;
145
146 UpdateInsert(*ce, w, h);
147 return true;
148}
149
150bool D3DImageCache::CreateImage(D3DDevice *d3d, int w, int h, bool locked, CacheEntryInfo &info)
151{
152 int id;
153 CacheEntry new_entry;
154 CacheEntry *ce = NULL;
155
156 if (!CreateEntry(d3d, new_entry, w, h, true))
157 return false;
158 for (id = 0; id < _cache.Length(); id++)
159 {
160 if (_cache[id].texture == NULL)
161 break;
162 }
163
164 if (id < _cache.Length())
165 {
166 _cache[id] = new_entry;
167 ce = &_cache[id];
168 }
169 else
170 {
171 _cache.Add(new_entry);
172 ce = _cache.Last();
173 id = _cache.Length() - 1;
174 }
175
176 assert(ce != NULL && ce->texture != NULL);
177
178 // Fill with zero
179 if (!InsertData(*ce, NULL, w, h))
180 return false;
181
182 info.id = id;
183 info.u = 0;
184 info.v = 0;
185 info.du = 1;
186 info.dv = 1;
187 info.width = w;
188 info.height = h;
189
190 UpdateInsert(*ce, 0, 0);
191 ce->locked = locked;
192 return true;
193}
194
195bool D3DImageCache::ResizeImage(D3DDevice *d3d, int nw, int nh, int id)
196{
197 if (id < 0 || id >= _cache.Length())
198 return false;
199 assert(_cache[id].texture != NULL);
200 CacheEntry *ce = &_cache[id];
201
202 if (ce->width == nw && ce->height == nh)
203 return true;
204
205 LPDIRECT3DTEXTURE9 tex = NULL;
206
207 HRESULT hr;
208 if (FAILED(hr = d3d->GetDevice()->CreateTexture(nw, nh, 0, 0, D3DFMT_A8R8G8B8,
209 D3DPOOL_MANAGED, &tex, NULL)))
210 {
211 WRN("Failed to create texture: %X", hr);
212 return false;
213 }
214 assert(tex != NULL);
215
216 ce->texture->Release();
217 ce->texture = tex;
218 ce->width = nw;
219 ce->height = nh;
220 return true;
221}
222
223bool D3DImageCache::RequestInsert(CacheEntry &entry, int w, int h)
224{
225 // If we already have large image entry
226 if (entry.width > _max_width || entry.height > _max_height)
227 return false;
228 // If requested size does not fit into this entry at all
229 if (entry.height - entry.cur_h < h + _margin * 2 || entry.width < w + _margin * 2)
230 return false;
231
232 // If requested size does not fit into the current line of the entry
233 if (entry.width - entry.cur_x < w + _margin * 2)
234 {
235 entry.cur_y = entry.cur_h + _margin;
236 entry.cur_x = _margin;
237 return true;
238 }
239 entry.cur_x += _margin;
240
241 return true;
242}
243
244bool D3DImageCache::CreateEntry(D3DDevice *d3d, CacheEntry &entry, int w, int h, bool exact_size)
245{
246 int width = exact_size ? w : max(_max_width, w);
247 int height = exact_size ? h : max(_max_height, h);
248 HRESULT hr;
249 if (FAILED(hr = d3d->GetDevice()->CreateTexture(width, height, 0, 0, D3DFMT_A8R8G8B8,
250 D3DPOOL_MANAGED, &entry.texture, NULL)))
251 {
252 WRN("Failed to create texture: %X", hr);
253 return false;
254 }
255
256 entry.cur_x = entry.cur_y = entry.cur_h = 0;
257 entry.width = width;
258 entry.height = height;
259 entry.users = 0;
260 entry.locked = false;
261 entry.stage = 0;
262 return true;
263}
264
265bool D3DImageCache::InsertData(CacheEntry &entry, DWORD *data, int w, int h)
266{
267 if (entry.texture == NULL)
268 return false;
269
270 RECT rc = {entry.cur_x, entry.cur_y, entry.cur_x + w, entry.cur_y + h};
271 D3DLOCKED_RECT lr;
272 if (FAILED(entry.texture->LockRect(0, &lr, &rc, 0)))
273 {
274 WRN("Failed to lock texture");
275 return false;
276 }
277
278 if (data != NULL)
279 {
280 for (int i = 0; i < h; i++)
281 CopyMemory(((BYTE *)lr.pBits) + i * lr.Pitch, data + i * w, sizeof(DWORD) * w);
282 }
283 else
284 {
285 for (int i = 0; i < h; i++)
286 ZeroMemory(((BYTE *)lr.pBits) + i * lr.Pitch, sizeof(DWORD) * w);
287 }
288
289 if (FAILED(entry.texture->UnlockRect(0)))
290 {
291 WRN("Failed to unlock texture");
292 return false;
293 }
294 return true;
295}
296
297
298bool D3DImageCache::RetrieveData(CacheEntry &entry, DWORD *data, int w, int h)
299{
300 if (entry.texture == NULL || data == NULL)
301 return false;
302
303 RECT rc = {entry.cur_x, entry.cur_y, entry.cur_x + w, entry.cur_y + h};
304 D3DLOCKED_RECT lr;
305 if (FAILED(entry.texture->LockRect(0, &lr, &rc, D3DLOCK_READONLY)))
306 {
307 WRN("Failed to lock texture");
308 return false;
309 }
310
311 for (int i = 0; i < h; i++)
312 CopyMemory(data + i * w, ((BYTE *)lr.pBits) + i * lr.Pitch, sizeof(DWORD) * w);
313
314 if (FAILED(entry.texture->UnlockRect(0)))
315 {
316 WRN("Failed to unlock texture");
317 return false;
318 }
319 return true;
320}
321
322void D3DImageCache::UpdateInsert(CacheEntry &entry, int w, int h)
323{
324 entry.cur_h = max(entry.cur_h, entry.cur_y + h + _margin);
325 entry.cur_x += w + _margin;
326 entry.users++;
327}
328
329bool D3DImageCache::UpdateImageData(CacheEntryInfo &info, DWORD *data)
330{
331 assert(data != NULL);
332 if (info.id < 0 || info.id >= _cache.Length())
333 return false;
334 CacheEntry ce_copy = _cache[info.id];
335 ce_copy.cur_x = int(info.u * FLOAT(ce_copy.width));
336 ce_copy.cur_y = int(info.v * FLOAT(ce_copy.height));
337 return InsertData(ce_copy, data, info.width, info.height);
338}
339
340bool D3DImageCache::UpdateImageDataWithDirtyInfo(CacheEntryInfo &info, DWORD *data, POINT *dirty)
341{
342 if (info.id < 0 || info.id >= _cache.Length())
343 return false;
344 CacheEntry &entry = _cache[info.id];
345 if (entry.texture == NULL)
346 return false;
347
348 RECT rc = {0, 0, entry.width, entry.height};
349 D3DLOCKED_RECT lr;
350 if (FAILED(entry.texture->LockRect(0, &lr, &rc, 0)))
351 {
352 WRN("Failed to lock texture");
353 return false;
354 }
355
356 if (data != NULL)
357 {
358 for (int i = 0; i < rc.bottom; i++)
359 {
360 if (dirty[i].x < 0 && dirty[i].y < 0)
361 continue;
362 if (dirty[i].x >= 0 && dirty[i].y >= 0)
363 {
364 CopyMemory(((BYTE *)lr.pBits) + i * lr.Pitch + dirty[i].x * 4,
365 data + i * rc.right + dirty[i].x, sizeof(DWORD) * (dirty[i].y - dirty[i].x + 1));
366 dirty[i].y = -dirty[i].y;
367 }
368 else if (dirty[i].x >= 0 && dirty[i].y < 0)
369 {
370 ZeroMemory(((BYTE *)lr.pBits) + i * lr.Pitch + dirty[i].x * 4,
371 sizeof(DWORD) * (-dirty[i].y - dirty[i].x + 1));
372 dirty[i].x = -dirty[i].x;
373 }
374 }
375 }
376 else
377 {
378 for (int i = 0; i < rc.bottom; i++)
379 {
380 if (dirty[i].x < 0 || dirty[i].y < 0)
381 continue;
382 ZeroMemory(((BYTE *)lr.pBits) + i * lr.Pitch + dirty[i].x * 4,
383 sizeof(DWORD) * (dirty[i].y - dirty[i].x + 1));
384 }
385 }
386
387 if (FAILED(entry.texture->UnlockRect(0)))
388 {
389 WRN("Failed to unlock texture");
390 return false;
391 }
392 return true;
393}
394
395bool D3DImageCache::UpdateImageDataDiscard(CacheEntryInfo &info, DWORD *data)
396{
397 assert(data != NULL);
398 if (info.id < 0 || info.id >= _cache.Length())
399 return false;
400 CacheEntry &entry = _cache[info.id];
401 if (entry.texture == NULL)
402 return false;
403
404 RECT rc = {0, 0, entry.width, entry.height};
405 D3DLOCKED_RECT lr;
406 if (FAILED(entry.texture->LockRect(0, &lr, &rc, 0)))
407 {
408 WRN("Failed to lock texture");
409 return false;
410 }
411
412 for (int i = 0; i < rc.bottom; i++)
413 {
414 CopyMemory(((BYTE *)lr.pBits) + i * lr.Pitch,
415 data + i * rc.right, sizeof(DWORD) * rc.right);
416 }
417
418 if (FAILED(entry.texture->UnlockRect(0)))
419 {
420 WRN("Failed to unlock texture");
421 return false;
422 }
423 return true;
424}
425
426bool D3DImageCache::GetImageData(CacheEntryInfo &info, TArray<DWORD> &data)
427{
428 if (info.id < 0 || info.id >= _cache.Length())
429 return false;
430 CacheEntry ce_copy = _cache[info.id];
431 ce_copy.cur_x = int(info.u * FLOAT(ce_copy.width));
432 ce_copy.cur_y = int(info.v * FLOAT(ce_copy.height));
433 data.Allocate(info.width * info.height);
434
435 return RetrieveData(ce_copy, data.Data(), info.width, info.height);
436}
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_image_cache.h b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_image_cache.h
new file mode 100644
index 0000000..6fb4c18
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_image_cache.h
@@ -0,0 +1,108 @@
1#ifndef __EVAS_DIRECT3D_IMAGE_CACHE_H__
2#define __EVAS_DIRECT3D_IMAGE_CACHE_H__
3
4#include "evas_engine.h"
5
6#include "ref.h"
7#include "array.h"
8
9class D3DDevice;
10
11class D3DImageCache : virtual public Referenc
12{
13public:
14 struct CacheEntryInfo
15 {
16 int id;
17 int width, height;
18 FLOAT u, v;
19 FLOAT du, dv;
20 };
21
22public:
23 ~D3DImageCache();
24
25 static D3DImageCache *Current();
26 static void SetCurrent(D3DImageCache *obj);
27
28 inline void SetMaxSize(int w, int h);
29 inline void SetMargin(int margin);
30
31 bool InsertImage(D3DDevice *d3d, DWORD *data, int w, int h, CacheEntryInfo &info);
32 bool InsertImage(D3DDevice *d3d, int id, DWORD *data, int w, int h, CacheEntryInfo &info);
33 bool CreateImage(D3DDevice *d3d, int w, int h, bool locked, CacheEntryInfo &info);
34 bool ResizeImage(D3DDevice *d3d, int nw, int nh, int id);
35 bool SelectImageToDevice(D3DDevice *d3d, int id);
36 void RemoveImageUser(int id);
37 void AddImageUser(int id);
38 bool UpdateImageData(CacheEntryInfo &info, DWORD *data);
39 bool UpdateImageDataWithDirtyInfo(CacheEntryInfo &info, DWORD *data, POINT *dirty);
40 bool UpdateImageDataDiscard(CacheEntryInfo &info, DWORD *data);
41 bool GetImageData(CacheEntryInfo &info, TArray<DWORD> &data);
42 void Uninitialize();
43
44 inline int GetImageWidth(int image_id);
45 inline int GetImageHeight(int image_id);
46
47 inline void SetImageStage(int image_id, int stage);
48
49private:
50 struct CacheEntry
51 {
52 LPDIRECT3DTEXTURE9 texture;
53 int width;
54 int height;
55 int cur_x;
56 int cur_y;
57 int cur_h;
58 int users;
59 bool locked;
60 int stage;
61 };
62
63private:
64 D3DImageCache();
65
66 bool RequestInsert(CacheEntry &entry, int w, int h);
67 bool CreateEntry(D3DDevice *d3d, CacheEntry &entry, int w, int h, bool exact_size = false);
68 bool InsertData(CacheEntry &entry, DWORD *data, int w, int h);
69 bool RetrieveData(CacheEntry &entry, DWORD *data, int w, int h);
70 void UpdateInsert(CacheEntry &entry, int w, int h);
71
72private:
73 TArray<CacheEntry> _cache;
74 int _max_width;
75 int _max_height;
76
77 int _margin;
78
79 static Ref<D3DImageCache> _this;
80};
81
82void D3DImageCache::SetMaxSize(int w, int h)
83{
84 _max_width = w;
85 _max_height = h;
86}
87
88void D3DImageCache::SetMargin(int margin)
89{
90 _margin = margin;
91}
92
93int D3DImageCache::GetImageWidth(int image_id)
94{
95 return _cache[image_id].width;
96}
97
98int D3DImageCache::GetImageHeight(int image_id)
99{
100 return _cache[image_id].height;
101}
102
103void D3DImageCache::SetImageStage(int image_id, int stage)
104{
105 _cache[image_id].stage = stage;
106}
107
108#endif // __EVAS_DIRECT3D_IMAGE_CACHE_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_main.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_main.cpp
new file mode 100644
index 0000000..fe1e13f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_main.cpp
@@ -0,0 +1,774 @@
1// Force the layered windows APIs to be visible.
2#define _WIN32_WINNT 0x0500
3
4#include "evas_engine.h"
5#include <assert.h>
6
7#include <d3dx9.h>
8
9#include "evas_direct3d_device.h"
10#include "evas_direct3d_context.h"
11#include "evas_direct3d_shader_pack.h"
12#include "evas_direct3d_scene.h"
13#include "evas_direct3d_image_cache.h"
14#include "evas_direct3d_object_line.h"
15#include "evas_direct3d_object_rect.h"
16#include "evas_direct3d_object_image.h"
17#include "evas_direct3d_vertex_buffer_cache.h"
18#include "evas_direct3d_object_font.h"
19
20// Internal structure that joins two types of objects
21struct ImagePtr
22{
23 Ref<D3DObjectImage> ref;
24 RGBA_Image *img;
25};
26
27struct DevicePtr
28{
29 Ref<D3DDevice> device;
30 Ref<D3DScene> scene;
31 Ref<D3DContext> context;
32 Ref<D3DImageCache> image_cache;
33 Ref<D3DShaderPack> shader_pack;
34 Ref<D3DVertexBufferCache> vb_cache;
35
36 int fonts_buffer_image_id;
37
38 // Layered windows cannot render D3D in the normal way
39 bool layered;
40
41 // Window shape mask
42 struct
43 {
44 // Width and height may be different from target size
45 int width;
46 int height;
47 // Pointer to external memory location, dont do anything with it
48 unsigned char *mask;
49 } shape;
50
51 // GDI output target
52 struct
53 {
54 HBITMAP image;
55 HDC hdc;
56 BITMAPINFO info;
57 BYTE *data;
58 } dib;
59
60};
61
62DevicePtr *SelectDevice(Direct3DDeviceHandler d3d)
63{
64 DevicePtr *dev_ptr = (DevicePtr *)d3d;
65 D3DImageCache::SetCurrent(dev_ptr->image_cache);
66 D3DShaderPack::SetCurrent(dev_ptr->shader_pack);
67 D3DVertexBufferCache::SetCurrent(dev_ptr->vb_cache);
68 return dev_ptr;
69}
70
71void DeleteDIBObjects(DevicePtr *dev_ptr)
72{
73 assert(dev_ptr != NULL);
74 if (dev_ptr->dib.image != NULL)
75 DeleteObject(dev_ptr->dib.image);
76 if (dev_ptr->dib.hdc != NULL)
77 DeleteDC(dev_ptr->dib.hdc);
78 ZeroMemory(&dev_ptr->dib, sizeof(dev_ptr->dib));
79}
80
81bool CreateDIBObjects(DevicePtr *dev_ptr)
82{
83 assert(dev_ptr != NULL);
84 if ((dev_ptr->dib.hdc = CreateCompatibleDC(NULL)) == NULL)
85 {
86 WRN("Failed to create compatible DC");
87 return false;
88 }
89 ZeroMemory(&dev_ptr->dib.info, sizeof(dev_ptr->dib.info));
90 dev_ptr->dib.info.bmiHeader.biSize = sizeof(dev_ptr->dib.info.bmiHeader);
91 dev_ptr->dib.info.bmiHeader.biBitCount = 32;
92 dev_ptr->dib.info.bmiHeader.biWidth = dev_ptr->device->GetWidth();
93 dev_ptr->dib.info.bmiHeader.biHeight = -dev_ptr->device->GetHeight();
94 dev_ptr->dib.info.bmiHeader.biCompression = BI_RGB;
95 dev_ptr->dib.info.bmiHeader.biPlanes = 1;
96 if ((dev_ptr->dib.image = CreateDIBSection(dev_ptr->dib.hdc, &dev_ptr->dib.info,
97 DIB_RGB_COLORS, (void **)&dev_ptr->dib.data, NULL, 0)) == NULL)
98 {
99 WRN("Failed to create dib section");
100 DeleteDIBObjects(dev_ptr);
101 return false;
102 }
103 assert(dev_ptr->dib.data != NULL);
104 GdiFlush();
105 return true;
106}
107
108
109
110
111extern "C" {
112
113Direct3DDeviceHandler evas_direct3d_init(HWND window, int depth, int fullscreen)
114{
115 Ref<D3DDevice> device = new D3DDevice();
116 if (!device->Init(window, depth, fullscreen == 1))
117 return NULL;
118
119 D3DImageCache::SetCurrent(NULL);
120 D3DShaderPack::SetCurrent(NULL);
121 D3DVertexBufferCache::SetCurrent(NULL);
122
123 if (!D3DShaderPack::Current()->Initialize(device))
124 {
125 ERR("Failed to build shader pack");
126 device->Destroy();
127 return NULL;
128 }
129
130 DevicePtr *dev_ptr = new DevicePtr;
131 ZeroMemory(dev_ptr, sizeof(DevicePtr));
132 dev_ptr->device = device;
133 dev_ptr->scene = new D3DScene();
134 dev_ptr->context = new D3DContext();
135 dev_ptr->image_cache = D3DImageCache::Current();
136 dev_ptr->shader_pack = D3DShaderPack::Current();
137 dev_ptr->vb_cache = D3DVertexBufferCache::Current();
138 dev_ptr->fonts_buffer_image_id = -1;
139
140 D3DImageCache::CacheEntryInfo info;
141 if (!D3DImageCache::Current()->CreateImage(device, device->GetWidth(), device->GetHeight(),
142 true, info))
143 {
144 WRN("Failed to create fonts image buffer");
145 return NULL;
146 }
147 dev_ptr->fonts_buffer_image_id = info.id;
148 D3DImageCache::Current()->SetImageStage(info.id, 1);
149
150 return (Direct3DDeviceHandler)dev_ptr;
151}
152
153void
154evas_direct3d_free(Direct3DDeviceHandler d3d)
155{
156 DevicePtr *dev_ptr = SelectDevice(d3d);
157
158 DeleteDIBObjects(dev_ptr);
159
160 dev_ptr->context = NULL;
161 dev_ptr->scene = NULL;
162 dev_ptr->image_cache = NULL;
163 dev_ptr->shader_pack = NULL;
164 D3DShaderPack::Current()->Uninitialize();
165 D3DImageCache::Current()->Uninitialize();
166 D3DVertexBufferCache::Current()->Uninitialize();
167 D3DShaderPack::SetCurrent(NULL);
168 D3DImageCache::SetCurrent(NULL);
169 D3DVertexBufferCache::SetCurrent(NULL);
170
171 dev_ptr->device = NULL;
172 delete dev_ptr;
173
174 DBG("uninitialized");
175}
176
177void
178evas_direct3d_resize(Direct3DDeviceHandler d3d, int width, int height)
179{
180 DevicePtr *dev_ptr = SelectDevice(d3d);
181 D3DDevice *device = dev_ptr->device;
182 if (!device->Reset(width, height, -1))
183 {
184 ERR("Failed to resize");
185 return;
186 }
187 if (!D3DImageCache::Current()->ResizeImage(device, width, height,
188 dev_ptr->fonts_buffer_image_id))
189 {
190 WRN("Failed to resize fonts image buffer");
191 }
192 if (dev_ptr->layered)
193 {
194 DeleteDIBObjects(dev_ptr);
195 if (!CreateDIBObjects(dev_ptr))
196 WRN("Failed to create dib objects");
197 }
198}
199
200void
201evas_direct3d_set_fullscreen(Direct3DDeviceHandler d3d, int width, int height, int fullscreen)
202{
203 DevicePtr *dev_ptr = SelectDevice(d3d);
204 D3DDevice *device = dev_ptr->device;
205
206 if (width < 0)
207 width = ::GetSystemMetrics(SM_CXSCREEN);
208 if (height < 0)
209 height = ::GetSystemMetrics(SM_CYSCREEN);
210
211 if (!device->Reset(width, height, fullscreen))
212 {
213 WRN("Failed to resize");
214 return;
215 }
216 if (!D3DImageCache::Current()->ResizeImage(device, width, height,
217 dev_ptr->fonts_buffer_image_id))
218 {
219 WRN("Failed to resize fonts image buffer");
220 }
221
222 if (fullscreen == 0)
223 InvalidateRect(HWND_DESKTOP, NULL, TRUE);
224}
225
226void
227evas_direct3d_set_layered(Direct3DDeviceHandler d3d, int layered,
228 int mask_width, int mask_height, unsigned char *mask)
229{
230 DevicePtr *dev_ptr = SelectDevice(d3d);
231 dev_ptr->layered = (layered != 0);
232 dev_ptr->shape.width = mask_width;
233 dev_ptr->shape.height = mask_height;
234 dev_ptr->shape.mask = mask;
235
236 if (dev_ptr->layered && dev_ptr->dib.data == NULL)
237 CreateDIBObjects(dev_ptr);
238 else if (!dev_ptr->layered)
239 DeleteDIBObjects(dev_ptr);
240}
241
242void
243evas_direct3d_context_color_set(Direct3DDeviceHandler d3d, int r, int g, int b, int a)
244{
245 DevicePtr *dev_ptr = SelectDevice(d3d);
246 dev_ptr->context->color = ((a & 0xff) << 24) | ((r & 0xff) << 16) |
247 ((g & 0xff) << 8) | (b & 0xff);
248}
249
250void
251evas_direct3d_context_set_multiplier(Direct3DDeviceHandler d3d, int r, int g, int b, int a)
252{
253 DevicePtr *dev_ptr = SelectDevice(d3d);
254 dev_ptr->context->color_mul = ((a & 0xff) << 24) | ((r & 0xff) << 16) |
255 ((g & 0xff) << 8) | (b & 0xff);
256}
257
258void
259evas_direct3d_render_all(Direct3DDeviceHandler d3d)
260{
261 DBG("render");
262 assert(d3d != NULL);
263 DevicePtr *dev_ptr = SelectDevice(d3d);
264 D3DDevice *device = dev_ptr->device;
265 D3DScene *scene = dev_ptr->scene;
266
267 if (!device->Begin())
268 return;
269
270 device->GetDevice()->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
271 device->GetDevice()->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
272 device->GetDevice()->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
273
274 //device->GetDevice()->SetSamplerState(1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
275 //device->GetDevice()->SetSamplerState(1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
276
277 D3DObjectLine::BeginCache();
278 D3DObjectRect::BeginCache();
279 D3DObjectImage::BeginCache();
280 scene->DrawAll(device);
281 D3DObjectLine::EndCache(device);
282 D3DObjectRect::EndCache(device);
283 D3DObjectImage::EndCache(device);
284 D3DObjectFont::EndCache(device);
285
286 device->End();
287
288 if (dev_ptr->layered && !device->GetFullscreen() && dev_ptr->dib.data != NULL)
289 {
290 HDC hdc = GetDC(device->GetWindow());
291 if (hdc != NULL)
292 {
293 POINT dest = {0, 0};
294 POINT src = {0, 0};
295 SIZE client = {device->GetWidth(), device->GetHeight()};
296 BLENDFUNCTION blend_func = {AC_SRC_OVER, 0, 255, AC_SRC_ALPHA};
297
298 if (device->GetRenderData().Length() == client.cx * client.cy)
299 {
300 CopyMemory(dev_ptr->dib.data, device->GetRenderData().Data(),
301 sizeof(DWORD) * client.cx * client.cy);
302 }
303
304 for (int i = 0; i < client.cy; i++)
305 {
306 for (int j = 0; j < client.cx; j++)
307 {
308 int mask_i = int(dev_ptr->shape.height * float(i) / float(client.cy));
309 int mask_j = int(dev_ptr->shape.width * float(j) / float(client.cx));
310 if (mask_i < 0)
311 mask_i = 0;
312 else if (mask_i >= dev_ptr->shape.height)
313 mask_i = dev_ptr->shape.height - 1;
314 if (mask_j < 0)
315 mask_j = 0;
316 else if (mask_j >= dev_ptr->shape.width)
317 mask_j = dev_ptr->shape.width - 1;
318 BYTE mask_b = dev_ptr->shape.mask[mask_i * dev_ptr->shape.width + mask_j];
319 float alpha = float(mask_b) / 255.f;
320
321 dev_ptr->dib.data[j * 4 + 0 + i * 4 * client.cx] = BYTE(float(dev_ptr->dib.data[j * 4 + 0 + i * 4 * client.cx]) * alpha);
322 dev_ptr->dib.data[j * 4 + 1 + i * 4 * client.cx] = BYTE(float(dev_ptr->dib.data[j * 4 + 1 + i * 4 * client.cx]) * alpha);
323 dev_ptr->dib.data[j * 4 + 2 + i * 4 * client.cx] = BYTE(float(dev_ptr->dib.data[j * 4 + 2 + i * 4 * client.cx]) * alpha);
324 dev_ptr->dib.data[j * 4 + 3 + i * 4 * client.cx] = mask_b;
325 }
326 }
327 HGDIOBJ prev_obj = SelectObject(dev_ptr->dib.hdc, dev_ptr->dib.image);
328 ClientToScreen(device->GetWindow(), &dest);
329
330 UpdateLayeredWindow(device->GetWindow(), hdc, &dest, &client,
331 dev_ptr->dib.hdc, &src, 0, &blend_func, ULW_ALPHA);
332
333 SelectObject(dev_ptr->dib.hdc, prev_obj);
334 ReleaseDC(device->GetWindow(), hdc);
335 }
336 }
337 scene->FreeObjects();
338}
339
340void evas_direct3d_line_draw(Direct3DDeviceHandler d3d, int x1, int y1, int x2, int y2)
341{
342 DevicePtr *dev_ptr = SelectDevice(d3d);
343 D3DDevice *device = dev_ptr->device;
344 D3DScene *scene = dev_ptr->scene;
345 D3DContext *context = dev_ptr->context;
346
347 Ref<D3DObjectLine> line = scene->GetFreeObject<D3DObjectLine>();
348 if (line == NULL)
349 {
350 line = new D3DObjectLine();
351 scene->AddObject(line);
352 DBG("New line object (total objects: %d)", scene->GetObjectCount());
353 }
354 else
355 {
356 line->SetFree(false);
357 DBG("Line reused (object: %p)", line.Addr());
358 }
359
360 line->Setup(
361 2.f * float(x1) / float(device->GetWidth()) - 1.f,
362 2.f * (1.f - float(y1) / float(device->GetHeight())) - 1.f,
363 2.f * float(x2) / float(device->GetWidth()) - 1.f,
364 2.f * (1.f - float(y2) / float(device->GetHeight())) - 1.f,
365 context->color);
366}
367
368void evas_direct3d_rectangle_draw(Direct3DDeviceHandler d3d, int x, int y, int w, int h)
369{
370 DevicePtr *dev_ptr = SelectDevice(d3d);
371 D3DDevice *device = dev_ptr->device;
372 D3DScene *scene = dev_ptr->scene;
373 D3DContext *context = dev_ptr->context;
374
375 Ref<D3DObjectRect> rect = scene->GetFreeObject<D3DObjectRect>();
376 if (rect == NULL)
377 {
378 rect = new D3DObjectRect();
379 scene->AddObject(rect);
380 DBG("New rect object (total objects: %d)", scene->GetObjectCount());
381 }
382 else
383 {
384 rect->SetFree(false);
385 DBG("Rect reused (object: %p)", rect.Addr());
386 }
387
388 rect->Setup(
389 2.f * float(x) / float(device->GetWidth()) - 1.f,
390 2.f * (1.f - float(y) / float(device->GetHeight())) - 1.f,
391 2.f * float(w) / float(device->GetWidth()),
392 -2.f * float(h) / float(device->GetHeight()),
393 context->color);
394}
395
396Direct3DImageHandler evas_direct3d_image_load(Direct3DDeviceHandler d3d,
397 const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
398{
399 DevicePtr *dev_ptr = SelectDevice(d3d);
400 D3DDevice *device = dev_ptr->device;
401 D3DScene *scene = dev_ptr->scene;
402
403 RGBA_Image *evas_image = evas_common_load_image_from_file(file, key, lo);
404 if (evas_image == NULL)
405 {
406 WRN("Failed to load image from %s", file);
407 return NULL;
408 }
409 int image_width = evas_image->cache_entry.w;
410 int image_height = evas_image->cache_entry.h;
411 assert(image_width > 0 && image_height > 0);
412
413 D3DImageCache::CacheEntryInfo info;
414 ZeroMemory(&info, sizeof(info));
415 info.id = -1;
416
417 Ref<D3DObjectImage> image = new D3DObjectImage();
418 image->Init(info.u, info.v, info.du, info.dv, info.id,
419 info.width, info.height, evas_image->cache_entry.file);
420 image->SetFree(true);
421 scene->AddObject(image);
422
423 DBG("New image object (total objects: %d)", scene->GetObjectCount());
424
425 ImagePtr *ptr = new ImagePtr;
426 ptr->ref = image;
427 ptr->img = evas_image;
428
429 return (Direct3DImageHandler)ptr;
430}
431
432Direct3DImageHandler evas_direct3d_image_new_from_data(Direct3DDeviceHandler d3d,
433 int w, int h, DWORD *image_data, int alpha, int cspace)
434{
435 DevicePtr *dev_ptr = SelectDevice(d3d);
436 D3DDevice *device = dev_ptr->device;
437 D3DScene *scene = dev_ptr->scene;
438
439 int image_width = w;
440 int image_height = h;
441 assert(image_width > 0 && image_height > 0);
442
443 Ref<D3DObjectImage> image = new D3DObjectImage();
444
445 D3DImageCache::CacheEntryInfo info;
446 ZeroMemory(&info, sizeof(info));
447 if (!D3DImageCache::Current()->InsertImage(device, image_data,
448 image_width, image_height, info))
449 {
450 WRN("Couldnt add image to the cache");
451 return NULL;
452 }
453 char buf[64];
454 sprintf(buf, "%p", image_data);
455 image->Init(info.u, info.v, info.du, info.dv, info.id,
456 info.width, info.height, buf);
457
458 image->SetFree(true);
459 scene->AddObject(image);
460
461 DBG("New image object (total objects: %d)", scene->GetObjectCount());
462
463 ImagePtr *ptr = new ImagePtr;
464 ptr->ref = image;
465 ptr->img = NULL;
466
467 return (Direct3DImageHandler)ptr;
468}
469
470Direct3DImageHandler evas_direct3d_image_new_from_copied_data(Direct3DDeviceHandler d3d,
471 int w, int h, DWORD *image_data, int alpha, int cspace)
472{
473 return evas_direct3d_image_new_from_data(d3d, w, h, image_data, alpha, cspace);
474}
475
476void evas_direct3d_image_free(Direct3DDeviceHandler d3d, Direct3DImageHandler image)
477{
478 DevicePtr *dev_ptr = SelectDevice(d3d);
479 D3DDevice *device = dev_ptr->device;
480 D3DScene *scene = dev_ptr->scene;
481
482 ImagePtr *ptr = (ImagePtr *)image;
483
484 Ref<D3DObjectImage> image_ref = ptr->ref;
485 assert(!image_ref.IsNull());
486 scene->DeleteObject(image_ref);
487
488 delete ptr;
489}
490
491void evas_direct3d_image_data_put(Direct3DDeviceHandler d3d, Direct3DImageHandler image,
492 DWORD *image_data)
493{
494 ImagePtr *ptr = (ImagePtr *)image;
495 Ref<D3DObjectImage> image_ref = ptr->ref;
496 //assert(!image_ref.IsNull());
497 if (image_ref.IsNull())
498 return;
499
500 if (!image_ref->UpdateImageData(image_data))
501 ERR("Failed to update image data");
502}
503
504void evas_direct3d_image_data_get(Direct3DDeviceHandler d3d, Direct3DImageHandler image,
505 int to_write, DATA32 **image_data)
506{
507 ImagePtr *ptr = (ImagePtr *)image;
508 Ref<D3DObjectImage> image_ref = ptr->ref;
509 if (image_ref.IsNull())
510 return;
511 if (image_data == NULL)
512 return;
513 assert(sizeof(DATA32) == sizeof(DWORD));
514 *image_data = (DATA32 *)image_ref->GetImageData();
515}
516
517void evas_direct3d_image_draw(Direct3DDeviceHandler d3d, Direct3DImageHandler image,
518 int src_x, int src_y, int src_w, int src_h,
519 int dst_x, int dst_y, int dst_w, int dst_h, int smooth)
520{
521 ImagePtr *ptr = (ImagePtr *)image;
522 Ref<D3DObjectImage> image_ref = ptr->ref;
523 RGBA_Image *evas_image = ptr->img;
524 DevicePtr *dev_ptr = SelectDevice(d3d);
525 D3DDevice *device = dev_ptr->device;
526 D3DScene *scene = dev_ptr->scene;
527 //assert(!image_ref.IsNull());
528 if (image_ref.IsNull())
529 return;
530
531 if (!image_ref->IsValid())
532 {
533 TArray<D3DObjectImage *> images;
534 scene->GetObjectsOfType<D3DObjectImage>(images);
535 bool found = false;
536 for (int i = 0; i < images.Length(); i++)
537 {
538 if (images[i]->IsValid() &&
539 _stricmp(images[i]->GetSource(), image_ref->GetSource()) == 0)
540 {
541 images[i]->CopyTo(image_ref);
542 found = true;
543 WRN("Image object info reused, source: \"%s\"", image_ref->GetSource());
544 break;
545 }
546 }
547 if (!found && evas_image != NULL)
548 evas_cache_image_load_data(&evas_image->cache_entry);
549 }
550
551 // If the image object wasn't initialized yet
552 if (evas_image != NULL && evas_image->image.data != NULL && !image_ref->IsValid())
553 {
554 D3DImageCache::CacheEntryInfo info;
555 ZeroMemory(&info, sizeof(info));
556 if (!D3DImageCache::Current()->InsertImage(device, (DWORD *)evas_image->image.data,
557 evas_image->cache_entry.w, evas_image->cache_entry.h, info))
558 {
559 WRN("Couldnt add image to the cache");
560 return;
561 }
562 image_ref->Init(info.u, info.v, info.du, info.dv, info.id,
563 info.width, info.height, evas_image->cache_entry.file);
564 }
565
566 // Do not draw invalid objects
567 if (!image_ref->IsValid())
568 {
569 image_ref->SetFree(true);
570 return;
571 }
572
573 image_ref->Setup(
574 2.f * float(dst_x) / float(device->GetWidth()) - 1.f,
575 2.f * (1.f - float(dst_y) / float(device->GetHeight())) - 1.f,
576 2.f * float(dst_w) / float(device->GetWidth()),
577 -2.f * float(dst_h) / float(device->GetHeight()),
578 src_x, src_y, src_w, src_h);
579
580 image_ref->SetupColorFilter(dev_ptr->context->color_mul);
581
582 image_ref->SetFree(false);
583}
584
585void evas_direct3d_image_size_get(Direct3DImageHandler image, int *w, int *h)
586{
587 ImagePtr *ptr = (ImagePtr *)image;
588 if (ptr == NULL)
589 return;
590 if (ptr->img != NULL)
591 {
592 if (w != NULL)
593 *w = ptr->img->cache_entry.w;
594 if (h != NULL)
595 *h = ptr->img->cache_entry.h;
596 }
597 else if (!ptr->ref.IsNull())
598 {
599 if (w != NULL)
600 *w = ptr->ref->GetWidth();
601 if (h != NULL)
602 *h = ptr->ref->GetHeight();
603 }
604}
605
606void evas_direct3d_image_border_set(Direct3DDeviceHandler d3d, Direct3DImageHandler image,
607 int l, int r, int t, int b)
608{
609 ImagePtr *ptr = (ImagePtr *)image;
610 Ref<D3DObjectImage> image_ref = ptr->ref;
611 DevicePtr *dev_ptr = SelectDevice(d3d);
612 D3DDevice *device = dev_ptr->device;
613 if (image_ref.IsNull())
614 return;
615
616 int im_w, im_h;
617 if (ptr->img != NULL)
618 {
619 im_w = ptr->img->cache_entry.w;
620 im_h = ptr->img->cache_entry.h;
621 }
622 else
623 {
624 im_w = image_ref->GetWidth();
625 im_h = image_ref->GetHeight();
626 }
627
628 image_ref->SetupBorder(
629 D3DXVECTOR4(
630 2.f * float(l) / float(device->GetWidth()),
631 -2.f * float(t) / float(device->GetHeight()),
632 2.f * float(r) / float(device->GetWidth()),
633 -2.f * float(b) / float(device->GetHeight())),
634 D3DXVECTOR4(float(l) / float(im_w),
635 float(t) / float(im_h),
636 float(r) / float(im_w),
637 float(b) / float(im_h)));
638}
639
640void evas_direct3d_image_border_get(Direct3DDeviceHandler d3d, Direct3DImageHandler image,
641 int *l, int *r, int *t, int *b)
642{
643 ImagePtr *ptr = (ImagePtr *)image;
644 Ref<D3DObjectImage> image_ref = ptr->ref;
645 DevicePtr *dev_ptr = SelectDevice(d3d);
646 D3DDevice *device = dev_ptr->device;
647 if (image_ref.IsNull())
648 return;
649 assert(l != NULL && r != NULL && b != NULL && t != NULL);
650 *l = (int)(0.5f * image_ref->GetBorderLeft() * device->GetWidth());
651 *r = (int)(0.5f * image_ref->GetBorderRight() * device->GetWidth());
652 *t = (int)(-0.5f * image_ref->GetBorderTop() * device->GetHeight());
653 *b = (int)(-0.5f * image_ref->GetBorderBottom() * device->GetHeight());
654}
655
656
657Direct3DFontGlyphHandler evas_direct3d_font_texture_new(Direct3DDeviceHandler d3d,
658 RGBA_Font_Glyph *fg)
659{
660 DevicePtr *dev_ptr = SelectDevice(d3d);
661 D3DContext *context = dev_ptr->context;
662 D3DDevice *device = dev_ptr->device;
663
664 if (context->font.IsNull())
665 return NULL;
666
667 D3DObjectFont *font = (D3DObjectFont *)context->font.Addr();
668 // This is not reliable
669 //D3DObjectFont::Glyph *glyph = (D3DObjectFont::Glyph *)fg->ext_dat;
670 D3DObjectFont::Glyph *glyph = font->GetGlyph(fg);
671 if (glyph != NULL)
672 {
673 assert(glyph->Compare(fg));
674 return glyph;
675 }
676 glyph = font->AddGlyph(device, fg, fg->glyph_out->bitmap.buffer,
677 fg->glyph_out->bitmap.width, fg->glyph_out->bitmap.rows, fg->glyph_out->bitmap.pitch);
678 return (Direct3DFontGlyphHandler)glyph;
679}
680
681void evas_direct3d_font_texture_free(Direct3DFontGlyphHandler ft)
682{
683 if (ft == NULL)
684 return;
685 D3DObjectFont::Glyph *glyph = (D3DObjectFont::Glyph *)ft;
686 RGBA_Font_Glyph *fg = (RGBA_Font_Glyph *)glyph->Source();
687 fg->ext_dat = NULL;
688}
689
690void evas_direct3d_font_texture_draw(Direct3DDeviceHandler d3d, void *, void *,
691 RGBA_Font_Glyph *fg, int x, int y)
692{
693 DevicePtr *dev_ptr = SelectDevice(d3d);
694 D3DContext *context = dev_ptr->context;
695 D3DDevice *device = dev_ptr->device;
696
697 if (context->font.IsNull())
698 return;
699
700 D3DObjectFont *font = (D3DObjectFont *)context->font.Addr();
701 D3DObjectFont::Glyph *glyph = (D3DObjectFont::Glyph *)fg->ext_dat;
702 if (glyph == NULL)
703 return;
704 assert(glyph->Compare(fg));
705
706 font->SetColor(context->color);
707 font->PushForDraw(glyph, x, y);
708 font->SetFree(false);
709}
710
711void evas_direct3d_select_or_create_font(Direct3DDeviceHandler d3d, void *font)
712{
713 // The Plan
714 // 1. Create D3DObjectFont with source string = "%p" (font)
715 // 2. Or find this object in the scene
716 // 3. On each texture_new call - fill internal texture with glyph, remember the
717 // glyph pointer - we'll use it.
718
719 DevicePtr *dev_ptr = SelectDevice(d3d);
720 D3DContext *context = dev_ptr->context;
721
722 if (!context->font.IsNull() && ((D3DObjectFont *)context->font.Addr())->Compare(font))
723 return;
724
725 D3DScene *scene = dev_ptr->scene;
726
727 static TArray<D3DObjectFont *> fonts;
728 scene->GetObjectsOfType<D3DObjectFont>(fonts);
729 for (int i = 0; i < fonts.Length(); i++)
730 {
731 if (fonts[i]->Compare(font))
732 {
733 context->font = fonts[i];
734 return;
735 }
736 }
737
738 D3DDevice *device = dev_ptr->device;
739
740 assert(dev_ptr->fonts_buffer_image_id >= 0);
741
742 Ref<D3DObjectFont> new_font = new D3DObjectFont(font, dev_ptr->fonts_buffer_image_id);
743 scene->AddObject(new_font);
744 context->font = new_font;
745}
746
747void evas_direct3d_font_free(Direct3DDeviceHandler d3d, void *font)
748{
749 DevicePtr *dev_ptr = SelectDevice(d3d);
750 D3DContext *context = dev_ptr->context;
751 D3DScene *scene = dev_ptr->scene;
752
753 if (context->font.IsNull() || !((D3DObjectFont *)context->font.Addr())->Compare(font))
754 {
755 D3DScene *scene = dev_ptr->scene;
756
757 static TArray<D3DObjectFont *> fonts;
758 scene->GetObjectsOfType<D3DObjectFont>(fonts);
759 for (int i = 0; i < fonts.Length(); i++)
760 {
761 if (fonts[i]->Compare(font))
762 {
763 context->font = fonts[i];
764 break;
765 }
766 }
767 }
768
769 scene->DeleteObject(context->font);
770 context->font = NULL;
771}
772
773
774} // extern "C"
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object.cpp
new file mode 100644
index 0000000..15a801e
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object.cpp
@@ -0,0 +1,12 @@
1
2#include "evas_direct3d_object.h"
3
4D3DObject::D3DObject()
5{
6 _free = false;
7}
8
9D3DObject::~D3DObject()
10{
11}
12
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object.h b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object.h
new file mode 100644
index 0000000..8c4e6df
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object.h
@@ -0,0 +1,35 @@
1#ifndef __EVAS_DIRECT3D_OBJECT_H__
2#define __EVAS_DIRECT3D_OBJECT_H__
3
4#include "evas_engine.h"
5
6#include "ref.h"
7
8class D3DDevice;
9
10class D3DObject : virtual public Referenc
11{
12public:
13 D3DObject();
14 virtual ~D3DObject();
15
16 virtual void Draw(D3DDevice *d3d) = 0;
17
18 inline bool IsFree();
19 inline void SetFree(bool state);
20
21private:
22 bool _free;
23};
24
25bool D3DObject::IsFree()
26{
27 return _free;
28}
29
30void D3DObject::SetFree(bool state)
31{
32 _free = state;
33}
34
35#endif // __EVAS_DIRECT3D_OBJECT_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_font.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_font.cpp
new file mode 100644
index 0000000..f072e87
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_font.cpp
@@ -0,0 +1,231 @@
1//#define ENABLE_LOG_PRINTF
2
3#include <string.h>
4
5#include "evas_direct3d_object_font.h"
6#include "evas_direct3d_image_cache.h"
7#include "evas_direct3d_device.h"
8#include "evas_direct3d_shader_pack.h"
9#include "evas_direct3d_vertex_buffer_cache.h"
10
11D3DObjectFont::Cache D3DObjectFont::_cache;
12
13D3DObjectFont::D3DObjectFont(void *source, int image_id)
14{
15 _image_id = image_id;
16 _color = 0xff000000;
17 _source = source;
18 D3DImageCache::Current()->AddImageUser(_image_id);
19}
20
21D3DObjectFont::~D3DObjectFont()
22{
23 D3DImageCache::Current()->RemoveImageUser(_image_id);
24}
25
26void D3DObjectFont::CopyTo(D3DObjectFont *font)
27{
28 assert(font != NULL);
29 font->_image_id = _image_id;
30 font->_source = _source;
31 D3DImageCache::Current()->AddImageUser(font->_image_id);
32 _glyphs.CopyTo(font->_glyphs);
33}
34
35void D3DObjectFont::BeginCache(int image_id)
36{
37 if (_cache.enabled)
38 return;
39 int w = D3DImageCache::Current()->GetImageWidth(image_id);
40 int h = D3DImageCache::Current()->GetImageHeight(image_id);
41 _cache.enabled = true;
42 _cache.image_id = image_id;
43 _cache.data.Allocate(w * h);
44
45 if (_cache.dirty.Length() != h)
46 {
47 _cache.dirty.Allocate(h);
48 memset(_cache.dirty.Data(), 0xff, sizeof(POINT) * _cache.dirty.Length());
49 }
50
51 ZeroMemory(_cache.data.Data(), sizeof(DWORD) * _cache.data.Length());
52 _cache.width = w;
53 _cache.height = h;
54
55 _cache.valid_rect.left = w;
56 _cache.valid_rect.right = 0;
57 _cache.valid_rect.top = h;
58 _cache.valid_rect.bottom = 0;
59}
60
61void D3DObjectFont::Draw(D3DDevice *d3d)
62{
63 assert(_cache.image_id == _image_id);
64}
65
66void D3DObjectFont::EndCache(D3DDevice *d3d)
67{
68 if (!_cache.enabled)
69 return;
70 _cache.enabled = false;
71
72 if (_cache.data.Length() == 0)
73 return;
74
75 D3DImageCache::CacheEntryInfo info;
76 ZeroMemory(&info, sizeof(info));
77 info.id = _cache.image_id;
78 info.width = _cache.width;
79 info.height = _cache.height;
80 if (!D3DImageCache::Current()->UpdateImageDataWithDirtyInfo(info,
81 _cache.data.Data(), _cache.dirty.Data()))
82 //if (!D3DImageCache::Current()->UpdateImageDataDiscard(info, _cache.data.Data()));
83 {
84 return;
85 }
86
87 D3DShaderPack::Current()->SetVDecl(d3d, D3DShaderPack::VDECL_XYUV);
88 D3DShaderPack::Current()->SetVS(d3d, D3DShaderPack::VS_COPY_UV);
89 D3DShaderPack::Current()->SetPS(d3d, D3DShaderPack::PS_TEX_2); // This image is in s1
90 D3DImageCache::Current()->SelectImageToDevice(d3d, _cache.image_id);
91
92 const FLOAT half_x = 0.5f / FLOAT(_cache.width);
93 const FLOAT half_y = 0.5f / FLOAT(_cache.height);
94 FLOAT left = FLOAT(_cache.valid_rect.left - 5) / FLOAT(_cache.width),
95 top = FLOAT(_cache.valid_rect.top - 5) / FLOAT(_cache.height),
96 right = FLOAT(_cache.valid_rect.right + 5) / FLOAT(_cache.width),
97 bottom = FLOAT(_cache.valid_rect.bottom + 5) / FLOAT(_cache.height);
98
99 const Vertex data[6] = {
100 {left * 2 - 1, 2 * (1 - bottom) - 1, left + half_x, bottom + half_y},
101 {left * 2 - 1, 2 * (1 - top) - 1, left + half_x, top + half_y},
102 {right * 2 - 1, 2 * (1 - bottom) - 1, right + half_x, bottom + half_y},
103 {right * 2 - 1, 2 * (1 - bottom) - 1, right + half_x, bottom + half_y},
104 {left * 2 - 1, 2 * (1 - top) - 1, left + half_x, top + half_y},
105 {right * 2 - 1, 2 * (1 - top) - 1, right + half_x, top + half_y}};
106
107 d3d->GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, data, sizeof(Vertex));
108
109 //D3DImageCache::Current()->UpdateImageDataWithDirtyInfo(info, NULL, _cache.dirty.Data());
110}
111
112D3DObjectFont::Glyph *D3DObjectFont::GetGlyph(void *source)
113{
114 if (_image_id < 0)
115 {
116 WRN("Font is not initialized");
117 return NULL;
118 }
119 for (int i = 0; i < _glyphs.Length(); i++)
120 {
121 if (_glyphs[i]->Compare(source))
122 return _glyphs[i];
123 }
124 return NULL;
125}
126
127D3DObjectFont::Glyph *D3DObjectFont::AddGlyph(D3DDevice *d3d, void *source,
128 BYTE *data8, int width, int height, int pitch)
129{
130 if (_image_id < 0)
131 {
132 WRN("Font is not initialized");
133 return NULL;
134 }
135 for (int i = 0; i < _glyphs.Length(); i++)
136 {
137 if (_glyphs[i]->Compare(source))
138 return _glyphs[i];
139 }
140 Ref<Glyph> glyph = new Glyph(source);
141 glyph->_data.Allocate(width * height);
142 glyph->_width = width;
143 glyph->_height = height;
144
145 for (int i = 0; i < height; i++)
146 CopyMemory(&glyph->_data[i * width], &data8[i * pitch], width);
147
148 Log("Glyph added (%p) (%dx%d)", source, width, height);
149 _glyphs.Add(glyph);
150 return _glyphs.Last()->Addr();
151}
152
153void D3DObjectFont::PushForDraw(Glyph *glyph, int x, int y)
154{
155 BeginCache(_image_id);
156
157 // Uff, I'm not sure about multiple windows...
158
159#define LERP(a, b, t1, t2) (BYTE)(FLOAT(a) * (t1) + FLOAT(b) * (t2))
160
161 Color dc, sc;
162 FLOAT a;
163 sc.color = _color;
164
165 const FLOAT color_alpha = sc.Alpha();
166
167 DWORD *data = _cache.data.Data();
168 BYTE *gdata = glyph->_data.Data();
169 const int glyph_height = glyph->_height;
170 const int cache_height = _cache.height;
171 const int glyph_width = glyph->_width;
172 const int cache_width = _cache.width;
173
174 for (int i = 0, yi = y; i < glyph_height && yi < cache_height; i++, yi++)
175 {
176 if (yi < 0)
177 continue;
178 DWORD *dst = data + ((yi) * cache_width + x);
179 BYTE *src = gdata + (i * glyph_width);
180 POINT *dirty_yi = &_cache.dirty[yi];
181
182 if (_cache.valid_rect.top > yi)
183 _cache.valid_rect.top = yi;
184 if (_cache.valid_rect.bottom < yi)
185 _cache.valid_rect.bottom = yi;
186
187 for (int j = 0, xj = x; j < glyph_width && xj < cache_width; j++, xj++, dst++, src++)
188 {
189 if (xj < 0)
190 continue;
191 BYTE glyph_pix = *src;
192 if (glyph_pix == 0)
193 continue;
194
195 if (dirty_yi->x >= 0 && dirty_yi->y < 0)
196 dirty_yi->x = 0, dirty_yi->y = cache_width - 1;
197 else
198 {
199 if (dirty_yi->x < 0 || dirty_yi->x > xj)
200 dirty_yi->x = xj;
201 if (dirty_yi->y < 0 || dirty_yi->y < xj)
202 dirty_yi->y = xj;
203 }
204
205 if (_cache.valid_rect.left > xj)
206 _cache.valid_rect.left = xj;
207 if (_cache.valid_rect.right < xj)
208 _cache.valid_rect.right = xj;
209
210 if (glyph_pix == 0xff && sc.a == 0xff)
211 {
212 *dst = sc.color;
213 continue;
214 }
215 a = FLOAT(glyph_pix) * color_alpha / 255.f;
216 if (*dst == 0)
217 {
218 *dst = (BYTE(255.f * a) << 24) | (0x00ffffff & sc.color);
219 continue;
220 }
221
222 dc.color = *dst;
223
224 dc.r = LERP(dc.r, sc.r, 1 - a, a);
225 dc.g = LERP(dc.g, sc.g, 1 - a, a);
226 dc.b = LERP(dc.b, sc.b, 1 - a, a);
227 dc.a = max(dc.a, BYTE(255.f * a));
228 *dst = dc.color;
229 }
230 }
231}
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_font.h b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_font.h
new file mode 100644
index 0000000..e8c0196
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_font.h
@@ -0,0 +1,113 @@
1#ifndef __EVAS_DIRECT3D_OBJECT_FONT_H__
2#define __EVAS_DIRECT3D_OBJECT_FONT_H__
3
4#include "evas_engine.h"
5
6#include "ref.h"
7#include "array.h"
8
9#include "evas_direct3d_object.h"
10
11class D3DObjectFont : public D3DObject
12{
13public:
14
15 class Glyph : public Referenc
16 {
17 public:
18 Glyph(void *source)
19 : _source(source), _width(0), _height(0) {};
20
21 bool Compare(void *source)
22 {
23 return (_source == source);
24 }
25 void *Source()
26 {
27 return _source;
28 }
29
30 private:
31 friend class D3DObjectFont;
32 void *_source;
33 TArray<BYTE> _data;
34 int _width;
35 int _height;
36 };
37
38public:
39 D3DObjectFont(void *source, int image_id);
40 ~D3DObjectFont();
41
42 inline bool Compare(void *source);
43 void CopyTo(D3DObjectFont *font);
44
45 virtual void Draw(D3DDevice *d3d);
46 static void EndCache(D3DDevice *d3d);
47
48 inline void SetColor(DWORD color);
49
50 Glyph *GetGlyph(void *source);
51 Glyph *AddGlyph(D3DDevice *d3d, void *source, BYTE *data8, int width, int height, int pitch);
52 void PushForDraw(Glyph *glyph, int x, int y);
53
54protected:
55 static void BeginCache(int image_id);
56
57private:
58 struct Vertex
59 {
60 FLOAT x, y;
61 FLOAT u, v;
62 };
63
64 struct Color
65 {
66 union
67 {
68 struct
69 {
70 BYTE b, g, r, a;
71 };
72 DWORD color;
73 };
74
75 FLOAT Alpha() { return FLOAT(a) / 255.f; }
76 };
77
78 class Cache
79 {
80 public:
81 Cache()
82 : enabled(false), image_id(-1), width(0), height(0) {};
83 public:
84 TArray<DWORD> data;
85 TArray<POINT> dirty; // Start, End
86 bool enabled;
87 int image_id;
88 int width;
89 int height;
90 RECT valid_rect;
91 };
92
93private:
94 DWORD _color;
95 void *_source;
96 int _image_id;
97
98 TArray<Ref<Glyph> > _glyphs;
99
100 static Cache _cache;
101};
102
103bool D3DObjectFont::Compare(void *source)
104{
105 return (_source == source);
106}
107
108void D3DObjectFont::SetColor(DWORD color)
109{
110 _color = color;
111}
112
113#endif // __EVAS_DIRECT3D_OBJECT_FONT_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_image.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_image.cpp
new file mode 100644
index 0000000..3bfbe1e
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_image.cpp
@@ -0,0 +1,320 @@
1//#define ENABLE_LOG_PRINTF
2
3#include <string.h>
4
5#include <d3dx9.h>
6
7#include "evas_direct3d_object_image.h"
8#include "evas_direct3d_image_cache.h"
9#include "evas_direct3d_device.h"
10#include "evas_direct3d_shader_pack.h"
11#include "evas_direct3d_vertex_buffer_cache.h"
12
13TArray<D3DObjectImage *> D3DObjectImage::_cache;
14bool D3DObjectImage::_cache_enabled = false;
15
16D3DObjectImage::D3DObjectImage()
17{
18 _x = _y = _w = _h = 0;
19 _sx = _sy = _sw = _sh = 0;
20 _u = _v = _du = _dv = 0;
21 _image_id = -1;
22 _width = _height = 0;
23 _source[0] = 0;
24 _color = 0xffffffff;
25 _cache_i = 0;
26 _border = D3DXVECTOR4(0, 0, 0, 0);
27 _uvborder = D3DXVECTOR4(0, 0, 0, 0);
28 _with_border = false;
29 _dirty = false;
30 _image_data_updated = false;
31}
32
33D3DObjectImage::~D3DObjectImage()
34{
35 D3DImageCache::Current()->RemoveImageUser(_image_id);
36}
37
38void D3DObjectImage::CopyTo(D3DObjectImage *image)
39{
40 assert(image != NULL);
41 image->_u = _u;
42 image->_v = _v;
43 image->_du = _du;
44 image->_dv = _dv;
45 image->_image_id = _image_id;
46 image->_width = _width;
47 image->_height = _height;
48 CopyMemory(image->_source, _source, sizeof(_source));
49 D3DImageCache::Current()->AddImageUser(image->_image_id);
50}
51
52void D3DObjectImage::BeginCache()
53{
54 _cache.Allocate(0);
55 _cache_enabled = true;
56}
57
58void D3DObjectImage::EndCache(D3DDevice *d3d)
59{
60 if (!_cache_enabled || _cache.Length() == 0)
61 return;
62 D3DShaderPack::Current()->SetVDecl(d3d, D3DShaderPack::VDECL_XYUVC);
63 D3DShaderPack::Current()->SetVS(d3d, D3DShaderPack::VS_COPY_UV_COLOR);
64 D3DShaderPack::Current()->SetPS(d3d, D3DShaderPack::PS_TEX_COLOR_FILTER);
65
66 static TArray<Vertex> sorted;
67 static TArray<GroupDesc> groups;
68 sorted.Allocate(0);
69 groups.Allocate(0);
70
71 bool found = true;
72 while (found)
73 {
74 found = false;
75 int cur_id = -1;
76 int num = 0;
77 for (int i = 0; i < _cache.Length(); i++)
78 {
79 // We have processed this
80 if (_cache[i]->_image_id < 0)
81 continue;
82 found = true;
83 if (cur_id < 0)
84 cur_id = _cache[i]->_image_id;
85 if (_cache[i]->_image_id == cur_id)
86 {
87 if (!_cache[i]->_with_border)
88 {
89 Vertex *data = _cache[i]->MakeData();
90 sorted.Add(data[0]);
91 sorted.Add(data[1]);
92 sorted.Add(data[2]);
93 sorted.Add(data[3]);
94 sorted.Add(data[4]);
95 sorted.Add(data[5]);
96 _cache[i]->_image_id = -_cache[i]->_image_id - 1;
97 num++;
98 }
99 else
100 {
101 Vertex *data = _cache[i]->MakeDataBorder();
102 int last_len = sorted.Length();
103 sorted.Allocate(last_len + 6 * 9);
104 CopyMemory(&sorted[last_len], data, sizeof(Vertex) * 6 * 9);
105 _cache[i]->_image_id = -_cache[i]->_image_id - 1;
106 num += 9;
107 }
108 }
109 }
110 if (num > 0)
111 {
112 GroupDesc gd = {num, cur_id};
113 groups.Add(gd);
114 }
115 }
116
117 // Restore ids
118 for (int i = 0; i < _cache.Length(); i++)
119 _cache[i]->_image_id = -_cache[i]->_image_id - 1;
120
121 D3DVertexBufferCache::CacheEntryInfo ce_info;
122 if (!D3DVertexBufferCache::Current()->InitBuffer(d3d, (BYTE *)sorted.Data(),
123 sorted.Length() * sizeof(Vertex), ce_info))
124 {
125 return;
126 }
127 D3DVertexBufferCache::Current()->SelectBufferToDevice(d3d, ce_info.id, sizeof(Vertex));
128
129 HRESULT hr;
130 for (int i = 0, cur = 0; i < groups.Length(); i++)
131 {
132 if (FAILED(hr = D3DImageCache::Current()->SelectImageToDevice(d3d, groups[i].id)))
133 {
134 Log("Failed to select texture: %X", (DWORD)hr);
135 }
136// d3d->GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLELIST, groups[i].num * 2,
137// &sorted[cur], sizeof(Vertex));
138 d3d->GetDevice()->DrawPrimitive(D3DPT_TRIANGLELIST, cur, groups[i].num * 2);
139 cur += groups[i].num * 6;
140 }
141
142 DBG("Image cache drawn: %d items, %d groups", _cache.Length(), groups.Length());
143 _cache_enabled = false;
144}
145
146void D3DObjectImage::Draw(D3DDevice *d3d)
147{
148 _dirty = false;
149
150 DBG("Image draw: (%.3f, %.3f, %.3f, %.3f)", _x, _y, _w, _h);
151
152 if (_cache_enabled)
153 {
154 _cache.Add(this);
155 _cache_i = _cache.Length() - 1;
156 return;
157 }
158
159 D3DShaderPack::Current()->SetVDecl(d3d, D3DShaderPack::VDECL_XYUVC);
160 D3DShaderPack::Current()->SetVS(d3d, D3DShaderPack::VS_COPY_UV_COLOR);
161 D3DShaderPack::Current()->SetPS(d3d, D3DShaderPack::PS_TEX_COLOR_FILTER);
162 D3DImageCache::Current()->SelectImageToDevice(d3d, _image_id);
163
164 if (!_with_border)
165 d3d->GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, MakeData(), sizeof(Vertex));
166 else
167 d3d->GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 18, MakeDataBorder(), sizeof(Vertex));
168}
169
170void D3DObjectImage::Init(FLOAT u, FLOAT v, FLOAT du, FLOAT dv,
171 int image_id, int width, int height, const char *source)
172{
173 _u = u;
174 _v = v;
175 _du = du;
176 _dv = dv;
177 _image_id = image_id;
178 _width = width;
179 _height = height;
180#ifdef __MINGW32__
181 strncpy(_source, source, sizeof(_source) - 1);
182#else
183 strncpy_s(_source, sizeof(_source), source, sizeof(_source) - 1);
184#endif // ! __MINGW32__
185}
186
187void D3DObjectImage::Setup(FLOAT x, FLOAT y, FLOAT w, FLOAT h,
188 int sx, int sy, int sw, int sh)
189{
190 if (!_dirty)
191 {
192 _x = 1.f;
193 _y = -1.f;
194 _w = _h = 0.f;
195 _sx = _sy = 1.f;
196 _sw = _sh = 0.f;
197 }
198
199 if (!_with_border)
200 {
201 _x = x;
202 _y = y;
203 _w = w;
204 _h = h;
205 _sx = FLOAT(sx) / FLOAT(_width);
206 _sy = FLOAT(sy) / FLOAT(_height);
207 _sw = FLOAT(sw) / FLOAT(_width);
208 _sh = FLOAT(sh) / FLOAT(_height);
209 }
210 else
211 {
212 _x = min(_x, x);
213 _y = max(_y, y);
214 _w += w / 3;
215 _h += h / 3;
216 _sx = min(_sx, FLOAT(sx) / FLOAT(_width));
217 _sy = min(_sy, FLOAT(sy) / FLOAT(_height));
218 _sw += FLOAT(sw) / (3.f * FLOAT(_width));
219 _sh += FLOAT(sh) / (3.f * FLOAT(_height));
220 }
221 _dirty = true;
222
223}
224
225void D3DObjectImage::SetupColorFilter(DWORD color)
226{
227 //_color = ((a & 0xff) << 24) | ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff);
228 _color = color;
229}
230
231D3DObjectImage::Vertex *D3DObjectImage::MakeData()
232{
233 //FLOAT z = (FLOAT(_cache_i) + 0.5f) / _cache.Length();
234 Vertex data[6] = {
235 {_x, _y, _u + _sx * _du, _v + _sy * _dv, _color},
236 {_x + _w, _y, _u + (_sx + _sw) * _du, _v + _sy * _dv, _color},
237 {_x, _y + _h, _u + _sx * _du, _v + (_sy + _sh) * _dv, _color},
238 {_x, _y + _h, _u + _sx * _du, _v + (_sy + _sh) * _dv, _color},
239 {_x + _w, _y, _u + (_sx + _sw) * _du, _v + _sy * _dv, _color},
240 {_x + _w, _y + _h, _u + (_sx + _sw) * _du, _v + (_sy + _sh) * _dv, _color}};
241 CopyMemory(_data, data, sizeof(data));
242 return _data;
243}
244
245D3DObjectImage::Vertex *D3DObjectImage::MakeDataBorder()
246{
247 //FLOAT z = (FLOAT(_cache_i) + 0.5f) / _cache.Length();
248 if (_border.x + _border.z > _w)
249 _border.x = _border.z = _w / 2;
250 if (_border.y + _border.w < _h)
251 _border.y = _border.w = _h / 2;
252
253 FLOAT ul, ut, ur, ub;
254 ul = _uvborder.x * _du;
255 ut = _uvborder.y * _dv;
256 ur = _uvborder.z * _du;
257 ub = _uvborder.w * _dv;
258 FLOAT bl, bt, br, bb;
259 bl = _border.x;
260 bt = _border.y;
261 br = _border.z;
262 bb = _border.w;
263
264 const FLOAT half_x = 0.5f * _du / FLOAT(_width);
265 const FLOAT half_y = 0.5f * _dv / FLOAT(_height);
266
267 // Diagonal knots
268 Vertex data[4] = {
269 {_x, _y, _u + _sx * _du + half_x, _v + _sy * _dv + half_y, _color},
270 {_x + bl, _y + bt, _u + ul + _sx * _du, _v + ut + _sy * _dv, _color},
271 {_x + _w - br, _y + _h - bb, _u - ur + (_sx + _sw) * _du, _v - ub + (_sy + _sh) * _dv, _color},
272 {_x + _w, _y + _h, _u + (_sx + _sw) * _du - half_x, _v + (_sy + _sh) * _dv - half_y, _color}};
273
274 static const int yshift[6] = {0, 0, 1, 1, 0, 1};
275 static const int xshift[6] = {0, 1, 0, 0, 1, 1};
276
277 int vi = 0;
278 for (int i = 0; i < 3; i++)
279 {
280 for (int j = 0; j < 3; j++)
281 {
282 for (int v = 0; v < 6; v++)
283 {
284 _data[vi].x = data[xshift[v] + j].x;
285 _data[vi].y = data[yshift[v] + i].y;
286 _data[vi].u = data[xshift[v] + j].u;
287 _data[vi].v = data[yshift[v] + i].v;
288 _data[vi].col = data[0].col;
289 vi++;
290 }
291 }
292 }
293
294 return _data;
295}
296
297void D3DObjectImage::SetupBorder(const D3DXVECTOR4 &world_border, const D3DXVECTOR4 &pix_border)
298{
299 _border = world_border;
300 _uvborder = pix_border;
301 _with_border = (_border.x > 0.0001f || _border.y > 0.0001f ||
302 _border.z > 0.0001f || _border.w > 0.0001f);
303}
304
305bool D3DObjectImage::UpdateImageData(DWORD *image_data)
306{
307 D3DImageCache::CacheEntryInfo info = {_image_id, _width, _height, _u, _v, _du, _dv};
308 _image_data_updated = false;
309 return D3DImageCache::Current()->UpdateImageData(info, image_data);
310}
311
312DWORD *D3DObjectImage::GetImageData()
313{
314 if (_image_data_updated)
315 return _image_data.Data();
316 _image_data_updated = true;
317 D3DImageCache::CacheEntryInfo info = {_image_id, _width, _height, _u, _v, _du, _dv};
318 D3DImageCache::Current()->GetImageData(info, _image_data);
319 return _image_data.Data();
320}
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_image.h b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_image.h
new file mode 100644
index 0000000..379207b
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_image.h
@@ -0,0 +1,127 @@
1#ifndef __EVAS_DIRECT3D_OBJECT_IMAGE_H__
2#define __EVAS_DIRECT3D_OBJECT_IMAGE_H__
3
4#include "evas_engine.h"
5
6#include "ref.h"
7#include "array.h"
8
9#include "evas_direct3d_object.h"
10
11class D3DObjectImage : public D3DObject
12{
13public:
14 D3DObjectImage();
15 virtual ~D3DObjectImage();
16
17 void CopyTo(D3DObjectImage *image);
18
19 static void BeginCache();
20 virtual void Draw(D3DDevice *d3d);
21 static void EndCache(D3DDevice *d3d);
22
23 void Init(FLOAT u, FLOAT v, FLOAT du, FLOAT dv, int image_id,
24 int width, int height, const char *source);
25 void Setup(FLOAT x, FLOAT y, FLOAT w, FLOAT h,
26 int sx, int sy, int sw, int sh);
27 void SetupColorFilter(DWORD color);
28 void SetupBorder(const D3DXVECTOR4 &world_border, const D3DXVECTOR4 &pix_border);
29
30 inline bool IsValid();
31 inline const char *GetSource();
32 inline int GetWidth();
33 inline int GetHeight();
34 inline FLOAT GetBorderLeft();
35 inline FLOAT GetBorderRight();
36 inline FLOAT GetBorderTop();
37 inline FLOAT GetBorderBottom();
38
39 bool UpdateImageData(DWORD *image_data);
40 DWORD *GetImageData();
41
42private:
43 struct Vertex
44 {
45 FLOAT x, y;
46 FLOAT u, v;
47 D3DCOLOR col;
48 };
49
50 struct GroupDesc
51 {
52 int num;
53 int id;
54 };
55
56private:
57 Vertex *MakeData();
58 Vertex *MakeDataBorder();
59
60private:
61 FLOAT _x, _y, _w, _h;
62 FLOAT _sx, _sy, _sw, _sh;
63 D3DXVECTOR4 _border;
64 D3DXVECTOR4 _uvborder;
65
66 FLOAT _u, _v, _du, _dv;
67 int _image_id;
68 int _width, _height;
69
70 D3DCOLOR _color;
71 int _cache_i;
72 bool _with_border;
73 bool _dirty;
74
75 TArray<DWORD> _image_data;
76 bool _image_data_updated;
77
78 char _source[256];
79
80 Vertex _data[54];
81
82 static TArray<D3DObjectImage *> _cache;
83 static bool _cache_enabled;
84};
85
86bool D3DObjectImage::IsValid()
87{
88 return _image_id >= 0 && _width > 0 && _height > 0;
89}
90
91const char *D3DObjectImage::GetSource()
92{
93 return _source;
94}
95
96int D3DObjectImage::GetWidth()
97{
98 return _width;
99}
100
101int D3DObjectImage::GetHeight()
102{
103 return _height;
104}
105
106FLOAT D3DObjectImage::GetBorderLeft()
107{
108 return _border.x;
109}
110
111FLOAT D3DObjectImage::GetBorderRight()
112{
113 return _border.z;
114}
115
116FLOAT D3DObjectImage::GetBorderTop()
117{
118 return _border.y;
119}
120
121FLOAT D3DObjectImage::GetBorderBottom()
122{
123 return _border.w;
124}
125
126
127#endif // __EVAS_DIRECT3D_OBJECT_IMAGE_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_line.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_line.cpp
new file mode 100644
index 0000000..9442243
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_line.cpp
@@ -0,0 +1,60 @@
1
2#include "evas_direct3d_object_line.h"
3#include "evas_direct3d_device.h"
4#include "evas_direct3d_shader_pack.h"
5
6TArray<D3DObjectLine::Vertex> D3DObjectLine::_cache;
7bool D3DObjectLine::_cache_enabled = false;
8
9D3DObjectLine::D3DObjectLine()
10{
11 _x1 = _y1 = 0;
12 _x2 = _y2 = 0;
13}
14
15void D3DObjectLine::BeginCache()
16{
17 _cache.Allocate(0);
18 _cache_enabled = true;
19}
20
21void D3DObjectLine::EndCache(D3DDevice *d3d)
22{
23 if (!_cache_enabled || _cache.Length() == 0)
24 return;
25 D3DShaderPack::Current()->SetVDecl(d3d, D3DShaderPack::VDECL_XYC);
26 D3DShaderPack::Current()->SetVS(d3d, D3DShaderPack::VS_COPY_COLOR);
27 D3DShaderPack::Current()->SetPS(d3d, D3DShaderPack::PS_COLOR);
28 d3d->GetDevice()->DrawPrimitiveUP(D3DPT_LINELIST, _cache.Length() / 2,
29 _cache.Data(), sizeof(Vertex));
30
31 DBG("Line cache drawn: %d items", _cache.Length() / 2);
32 _cache_enabled = false;
33}
34
35void D3DObjectLine::Draw(D3DDevice *d3d)
36{
37 Vertex data[2] = {{_x1, _y1, _color}, {_x2, _y2, _color}};
38
39 if (!_cache_enabled)
40 {
41 D3DShaderPack::Current()->SetVDecl(d3d, D3DShaderPack::VDECL_XYC);
42 D3DShaderPack::Current()->SetVS(d3d, D3DShaderPack::VS_COPY_COLOR);
43 D3DShaderPack::Current()->SetPS(d3d, D3DShaderPack::PS_COLOR);
44 d3d->GetDevice()->DrawPrimitiveUP(D3DPT_LINELIST, 1, data, sizeof(Vertex));
45 }
46 else
47 {
48 _cache.Add(data[0]);
49 _cache.Add(data[1]);
50 }
51}
52
53void D3DObjectLine::Setup(FLOAT x1, FLOAT y1, FLOAT x2, FLOAT y2, DWORD color)
54{
55 _x1 = x1;
56 _y1 = y1;
57 _x2 = x2;
58 _y2 = y2;
59 _color = color;
60}
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_line.h b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_line.h
new file mode 100644
index 0000000..0e5d807
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_line.h
@@ -0,0 +1,37 @@
1#ifndef __EVAS_DIRECT3D_OBJECT_LINE_H__
2#define __EVAS_DIRECT3D_OBJECT_LINE_H__
3
4#include "evas_engine.h"
5
6#include "ref.h"
7#include "array.h"
8
9#include "evas_direct3d_object.h"
10
11class D3DObjectLine : public D3DObject
12{
13public:
14 D3DObjectLine();
15
16 static void BeginCache();
17 virtual void Draw(D3DDevice *d3d);
18 static void EndCache(D3DDevice *d3d);
19
20 void Setup(FLOAT x1, FLOAT y1, FLOAT x2, FLOAT y2, DWORD color);
21
22private:
23 FLOAT _x1, _y1, _x2, _y2;
24 DWORD _color;
25
26private:
27 struct Vertex
28 {
29 FLOAT x, y;
30 DWORD color;
31 };
32
33 static TArray<Vertex> _cache;
34 static bool _cache_enabled;
35};
36
37#endif // __EVAS_DIRECT3D_OBJECT_LINE_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_rect.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_rect.cpp
new file mode 100644
index 0000000..ebdd22b
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_rect.cpp
@@ -0,0 +1,65 @@
1#include "evas_direct3d_object_rect.h"
2#include "evas_direct3d_device.h"
3#include "evas_direct3d_shader_pack.h"
4
5TArray<D3DObjectRect::Vertex> D3DObjectRect::_cache;
6bool D3DObjectRect::_cache_enabled = false;
7
8D3DObjectRect::D3DObjectRect()
9{
10 _x = _y = 0;
11 _w = _h = 0;
12}
13
14void D3DObjectRect::BeginCache()
15{
16 _cache.Allocate(0);
17 _cache_enabled = true;
18}
19
20void D3DObjectRect::EndCache(D3DDevice *d3d)
21{
22 if (!_cache_enabled || _cache.Length() == 0)
23 return;
24 D3DShaderPack::Current()->SetVDecl(d3d, D3DShaderPack::VDECL_XYC);
25 D3DShaderPack::Current()->SetVS(d3d, D3DShaderPack::VS_COPY_COLOR);
26 D3DShaderPack::Current()->SetPS(d3d, D3DShaderPack::PS_COLOR);
27 d3d->GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLELIST, _cache.Length() / 3,
28 _cache.Data(), sizeof(Vertex));
29
30 DBG("Rect cache drawn: %d items", _cache.Length() / 6);
31 _cache_enabled = false;
32}
33
34void D3DObjectRect::Draw(D3DDevice *d3d)
35{
36 Vertex data[6] = {
37 {_x, _y, _color}, {_x + _w, _y, _color}, {_x, _y + _h, _color},
38 {_x, _y + _h, _color}, {_x + _w, _y, _color}, {_x + _w, _y + _h, _color}};
39
40 if (!_cache_enabled)
41 {
42 D3DShaderPack::Current()->SetVDecl(d3d, D3DShaderPack::VDECL_XYC);
43 D3DShaderPack::Current()->SetVS(d3d, D3DShaderPack::VS_COPY_COLOR);
44 D3DShaderPack::Current()->SetPS(d3d, D3DShaderPack::PS_COLOR);
45 d3d->GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, data, sizeof(Vertex));
46 }
47 else
48 {
49 _cache.Add(data[0]);
50 _cache.Add(data[1]);
51 _cache.Add(data[2]);
52 _cache.Add(data[3]);
53 _cache.Add(data[4]);
54 _cache.Add(data[5]);
55 }
56}
57
58void D3DObjectRect::Setup(FLOAT x, FLOAT y, FLOAT w, FLOAT h, DWORD color)
59{
60 _x = x;
61 _y = y;
62 _w = w;
63 _h = h;
64 _color = color;
65}
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_rect.h b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_rect.h
new file mode 100644
index 0000000..f7ef084
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_rect.h
@@ -0,0 +1,37 @@
1#ifndef __EVAS_DIRECT3D_OBJECT_RECT_H__
2#define __EVAS_DIRECT3D_OBJECT_RECT_H__
3
4#include "evas_engine.h"
5
6#include "ref.h"
7#include "array.h"
8
9#include "evas_direct3d_object.h"
10
11class D3DObjectRect : public D3DObject
12{
13public:
14 D3DObjectRect();
15
16 static void BeginCache();
17 virtual void Draw(D3DDevice *d3d);
18 static void EndCache(D3DDevice *d3d);
19
20 void Setup(FLOAT x, FLOAT y, FLOAT w, FLOAT h, DWORD color);
21
22private:
23 FLOAT _x, _y, _w, _h;
24 DWORD _color;
25
26private:
27 struct Vertex
28 {
29 FLOAT x, y;
30 DWORD color;
31 };
32
33 static TArray<Vertex> _cache;
34 static bool _cache_enabled;
35};
36
37#endif // __EVAS_DIRECT3D_OBJECT_RECT_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_scene.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_scene.cpp
new file mode 100644
index 0000000..b171fc0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_scene.cpp
@@ -0,0 +1,33 @@
1
2#include "evas_direct3d_scene.h"
3
4D3DScene::D3DScene()
5{
6}
7
8void D3DScene::FreeObjects()
9{
10 for (int i = 0; i < _objects.Length(); i++)
11 _objects[i]->SetFree(true);
12}
13
14void D3DScene::DrawAll(D3DDevice *d3d)
15{
16 for (int i = 0; i < _objects.Length(); i++)
17 {
18 if (!_objects[i]->IsFree())
19 _objects[i]->Draw(d3d);
20 }
21}
22
23void D3DScene::DeleteObject(D3DObject *object)
24{
25 for (int i = 0; i < _objects.Length(); i++)
26 {
27 if (_objects[i].Addr() == object)
28 {
29 _objects.Replace(i);
30 return;
31 }
32 }
33}
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_scene.h b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_scene.h
new file mode 100644
index 0000000..e2f5f94
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_scene.h
@@ -0,0 +1,63 @@
1#ifndef __EVAS_DIRECT3D_SCENE_H__
2#define __EVAS_DIRECT3D_SCENE_H__
3
4#include "evas_engine.h"
5
6#include <assert.h>
7#include <typeinfo>
8
9#include "ref.h"
10#include "array.h"
11
12#include "evas_direct3d_object.h"
13
14class D3DDevice;
15
16class D3DScene : virtual public Referenc
17{
18public:
19 D3DScene();
20
21 void FreeObjects();
22
23 inline void AddObject(D3DObject *object);
24 inline int GetObjectCount();
25 void DeleteObject(D3DObject *object);
26
27 void DrawAll(D3DDevice *d3d);
28
29 template <class T> T *GetFreeObject()
30 {
31 for (int i = 0; i < _objects.Length(); i++)
32 {
33 if (typeid(T) == typeid(*_objects[i].Addr()) && _objects[i]->IsFree())
34 return (T *)_objects[i].Addr();
35 }
36 return NULL;
37 }
38
39 template <class T> void GetObjectsOfType(TArray<T *> &res)
40 {
41 for (int i = 0; i < _objects.Length(); i++)
42 {
43 if (typeid(T) == typeid(*_objects[i].Addr()))
44 res.Add((T *)_objects[i].Addr());
45 }
46 }
47
48private:
49 TArray<Ref<D3DObject> > _objects;
50};
51
52void D3DScene::AddObject(D3DObject *object)
53{
54 assert(object != NULL);
55 _objects.Add(object);
56}
57
58int D3DScene::GetObjectCount()
59{
60 return _objects.Length();
61}
62
63#endif // __EVAS_DIRECT3D_SCENE_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_shader_pack.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_shader_pack.cpp
new file mode 100644
index 0000000..d9c868f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_shader_pack.cpp
@@ -0,0 +1,344 @@
1
2#include <assert.h>
3
4#include <d3dx9.h>
5
6#include "evas_direct3d_shader_pack.h"
7#include "evas_direct3d_device.h"
8
9Ref<D3DShaderPack> D3DShaderPack::_this;
10
11D3DShaderPack::D3DShaderPack()
12{
13}
14
15D3DShaderPack::~D3DShaderPack()
16{
17 Uninitialize();
18}
19
20D3DShaderPack *D3DShaderPack::Current()
21{
22 if (_this.IsNull())
23 _this = new D3DShaderPack();
24 return _this;
25}
26
27void D3DShaderPack::SetCurrent(D3DShaderPack *obj)
28{
29 _this = obj;
30}
31
32
33bool D3DShaderPack::Initialize(D3DDevice *d3d)
34{
35 bool res = true;
36 if (!(res = InitVertexDeclarations(d3d) && res))
37 WRN("Failed to create vdecl set");
38 if (!(res = InitVertexShaders(d3d) && res))
39 WRN("Failed to create vs set");
40 if (!(res = InitPixelShaders(d3d) && res))
41 WRN("Failed to create ps set");
42 return res;
43}
44
45void D3DShaderPack::Uninitialize()
46{
47 for (int i = 0; i < _vdecl.Length(); i++)
48 {
49 if (_vdecl[i] != NULL)
50 {
51 _vdecl[i]->Release();
52 _vdecl[i] = NULL;
53 }
54 }
55
56 for (int i = 0; i < _vs.Length(); i++)
57 {
58 if (_vs[i] != NULL)
59 {
60 _vs[i]->Release();
61 _vs[i] = NULL;
62 }
63 }
64
65 for (int i = 0; i < _ps.Length(); i++)
66 {
67 if (_ps[i] != NULL)
68 {
69 _ps[i]->Release();
70 _ps[i] = NULL;
71 }
72 }
73}
74
75bool D3DShaderPack::InitVertexDeclarations(D3DDevice *d3d)
76{
77 _vdecl.Allocate(VDECL_NUM);
78 _vdecl.Set(NULL);
79
80 LPDIRECT3DVERTEXDECLARATION9 vdecl = NULL;
81 {
82 D3DVERTEXELEMENT9 elements[] = {
83 {0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
84 {0, 8, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0},
85 D3DDECL_END()
86 };
87 if (FAILED(d3d->GetDevice()->CreateVertexDeclaration(elements, &vdecl)))
88 return false;
89 if (vdecl == NULL)
90 return false;
91 }
92 _vdecl[VDECL_XYC] = vdecl;
93 vdecl = NULL;
94 {
95 D3DVERTEXELEMENT9 elements[] = {
96 {0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
97 {0, 8, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
98 D3DDECL_END()
99 };
100 if (FAILED(d3d->GetDevice()->CreateVertexDeclaration(elements, &vdecl)))
101 return false;
102 if (vdecl == NULL)
103 return false;
104 }
105 _vdecl[VDECL_XYUV] = vdecl;
106 vdecl = NULL;
107 {
108 D3DVERTEXELEMENT9 elements[] = {
109 {0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
110 {0, 8, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
111 {0, 16, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0},
112 D3DDECL_END()
113 };
114 if (FAILED(d3d->GetDevice()->CreateVertexDeclaration(elements, &vdecl)))
115 return false;
116 if (vdecl == NULL)
117 return false;
118 }
119 _vdecl[VDECL_XYUVC] = vdecl;
120 vdecl = NULL;
121 {
122 D3DVERTEXELEMENT9 elements[] = {
123 {0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
124 {0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
125 {0, 20, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0},
126 D3DDECL_END()
127 };
128 if (FAILED(d3d->GetDevice()->CreateVertexDeclaration(elements, &vdecl)))
129 return false;
130 if (vdecl == NULL)
131 return false;
132 }
133 _vdecl[VDECL_XYZUVC] = vdecl;
134
135 return true;
136}
137
138bool D3DShaderPack::InitVertexShaders(D3DDevice *d3d)
139{
140 _vs.Allocate(VS_NUM);
141 _vs.Set(NULL);
142
143 {
144 char buf[] =
145 "struct VsInput { float2 pos : POSITION; float4 col : COLOR; };\n"
146 "struct VsOutput { float4 pos : POSITION; float4 col : COLOR0; };\n"
147 "VsOutput main(VsInput vs_in) {\n"
148 "VsOutput vs_out;\n"
149 "vs_out.pos = float4(vs_in.pos, 0, 1);\n"
150 "vs_out.col = vs_in.col;\n"
151 "return vs_out;}";
152
153 _vs[VS_COPY_COLOR] = (LPDIRECT3DVERTEXSHADER9)
154 CompileShader(d3d, true, "CopyColor", buf, sizeof(buf) - 1);
155 if (_vs[VS_COPY_COLOR] == NULL)
156 return false;
157 }
158
159 {
160 char buf[] =
161 "struct VsInput { float2 pos : POSITION; float2 tex : TEXCOORD0; };\n"
162 "struct VsOutput { float4 pos : POSITION; float2 tex : TEXCOORD0; };\n"
163 "VsOutput main(VsInput vs_in) {\n"
164 "VsOutput vs_out;\n"
165 "vs_out.pos = float4(vs_in.pos, 0, 1);\n"
166 "vs_out.tex = vs_in.tex;\n"
167 "return vs_out;}";
168
169 _vs[VS_COPY_UV] = (LPDIRECT3DVERTEXSHADER9)
170 CompileShader(d3d, true, "CopyUV", buf, sizeof(buf) - 1);
171 if (_vs[VS_COPY_UV] == NULL)
172 return false;
173 }
174
175 {
176 char buf[] =
177 "struct VsInput { float2 pos : POSITION; float2 tex : TEXCOORD0; float4 col : COLOR; };\n"
178 "struct VsOutput { float4 pos : POSITION; float2 tex : TEXCOORD0; float4 col : COLOR0; };\n"
179 "VsOutput main(VsInput vs_in) {\n"
180 "VsOutput vs_out;\n"
181 "vs_out.pos = float4(vs_in.pos, 0, 1);\n"
182 "vs_out.tex = vs_in.tex;\n"
183 "vs_out.col = vs_in.col;\n"
184 "return vs_out;}";
185
186 _vs[VS_COPY_UV_COLOR] = (LPDIRECT3DVERTEXSHADER9)
187 CompileShader(d3d, true, "CopyUVColor", buf, sizeof(buf) - 1);
188 if (_vs[VS_COPY_UV_COLOR] == NULL)
189 return false;
190 }
191
192 {
193 char buf[] =
194 "struct VsInput { float3 pos : POSITION; float2 tex : TEXCOORD0; float4 col : COLOR; };\n"
195 "struct VsOutput { float4 pos : POSITION; float2 tex : TEXCOORD0; float4 col : COLOR0; };\n"
196 "VsOutput main(VsInput vs_in) {\n"
197 "VsOutput vs_out;\n"
198 "vs_out.pos = float4(vs_in.pos, 1);\n"
199 "vs_out.tex = vs_in.tex;\n"
200 "vs_out.col = vs_in.col;\n"
201 "return vs_out;}";
202
203 _vs[VS_COPY_UV_COLOR_Z] = (LPDIRECT3DVERTEXSHADER9)
204 CompileShader(d3d, true, "CopyUVColorZ", buf, sizeof(buf) - 1);
205 if (_vs[VS_COPY_UV_COLOR_Z] == NULL)
206 return false;
207 }
208
209 return true;
210}
211
212bool D3DShaderPack::InitPixelShaders(D3DDevice *d3d)
213{
214 _ps.Allocate(PS_NUM);
215 _ps.Set(NULL);
216
217 {
218 char buf[] =
219 "struct VsOutput { float4 pos : POSITION; float4 col : COLOR0; };\n"
220 "float4 main(VsOutput ps_in) : COLOR0 {\n"
221 "return ps_in.col;}";
222
223 _ps[PS_COLOR] = (LPDIRECT3DPIXELSHADER9)
224 CompileShader(d3d, false, "Color", buf, sizeof(buf) - 1);
225 if (_ps[PS_COLOR] == NULL)
226 return false;
227 }
228
229 {
230 char buf[] =
231 "sampler Texture : register(s0);\n"
232 "struct VsOutput { float4 pos : POSITION; float2 tex : TEXCOORD0; };\n"
233 "float4 main(VsOutput ps_in) : COLOR0 {\n"
234 "return tex2D(Texture, ps_in.tex);}";
235
236 _ps[PS_TEX] = (LPDIRECT3DPIXELSHADER9)
237 CompileShader(d3d, false, "Tex", buf, sizeof(buf) - 1);
238 if (_ps[PS_TEX] == NULL)
239 return false;
240 }
241
242 {
243 char buf[] =
244 "sampler Texture : register(s0);\n"
245 "struct VsOutput { float4 pos : POSITION; float2 tex : TEXCOORD0; float4 col : COLOR0; };\n"
246 "float4 main(VsOutput ps_in) : COLOR0 {\n"
247 "return tex2D(Texture, ps_in.tex) * ps_in.col;}";
248
249 _ps[PS_TEX_COLOR_FILTER] = (LPDIRECT3DPIXELSHADER9)
250 CompileShader(d3d, false, "TexColorFilter", buf, sizeof(buf) - 1);
251 if (_ps[PS_TEX_COLOR_FILTER] == NULL)
252 return false;
253 }
254
255 {
256 char buf[] =
257 "sampler Texture : register(s1);\n"
258 "struct VsOutput { float4 pos : POSITION; float2 tex : TEXCOORD0; };\n"
259 "float4 main(VsOutput ps_in) : COLOR0 {\n"
260 "return tex2D(Texture, ps_in.tex);}";
261
262 _ps[PS_TEX_2] = (LPDIRECT3DPIXELSHADER9)
263 CompileShader(d3d, false, "Tex2", buf, sizeof(buf) - 1);
264 if (_ps[PS_TEX_2] == NULL)
265 return false;
266 }
267
268 return true;
269}
270
271void *D3DShaderPack::CompileShader(D3DDevice *d3d, bool make_vs,
272 const char *name, const char *buf, int size)
273{
274 LPD3DXBUFFER compiled_res = NULL;
275 LPD3DXBUFFER error_msgs = NULL;
276
277 HRESULT res = D3DXCompileShader(buf, size, NULL, NULL,
278 "main", make_vs ? "vs_2_0" : "ps_2_0", // ?
279 0, &compiled_res, &error_msgs, NULL);
280
281 if (FAILED(res))
282 {
283 ERR("Shader %s compilation failed, code = %X", name, res);
284 if (error_msgs == NULL)
285 return NULL;
286 const char *mess = (const char *)error_msgs->GetBufferPointer();
287 ERR("Error output:\n%s", mess);
288 error_msgs->Release();
289 return NULL;
290 }
291
292 if (error_msgs != NULL)
293 error_msgs->Release();
294
295 void *res_ptr = NULL;
296 if (make_vs)
297 {
298 LPDIRECT3DVERTEXSHADER9 vs;
299 res = d3d->GetDevice()->CreateVertexShader((DWORD *)compiled_res->GetBufferPointer(), &vs);
300 res_ptr = (void *)vs;
301 }
302 else
303 {
304 LPDIRECT3DPIXELSHADER9 ps;
305 res = d3d->GetDevice()->CreatePixelShader((DWORD *)compiled_res->GetBufferPointer(), &ps);
306 res_ptr = (void *)ps;
307 }
308
309 compiled_res->Release();
310
311 if (FAILED(res))
312 {
313 WRN("Shader %s creation failed, code = %X", name, res);
314 return NULL;
315 }
316 return res_ptr;
317}
318
319bool D3DShaderPack::SetVDecl(D3DDevice *d3d, int id)
320{
321 if (id < 0 || id >= _vdecl.Length() || _vdecl[id] == NULL)
322 return false;
323 assert(d3d != NULL);
324 d3d->GetDevice()->SetVertexDeclaration(_vdecl[id]);
325 return true;
326}
327
328bool D3DShaderPack::SetVS(D3DDevice *d3d, int id)
329{
330 if (id < 0 || id >= _vs.Length() || _vs[id] == NULL)
331 return false;
332 assert(d3d != NULL);
333 d3d->GetDevice()->SetVertexShader(_vs[id]);
334 return true;
335}
336
337bool D3DShaderPack::SetPS(D3DDevice *d3d, int id)
338{
339 if (id < 0 || id >= _ps.Length() || _ps[id] == NULL)
340 return false;
341 assert(d3d != NULL);
342 d3d->GetDevice()->SetPixelShader(_ps[id]);
343 return true;
344}
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_shader_pack.h b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_shader_pack.h
new file mode 100644
index 0000000..b865f78
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_shader_pack.h
@@ -0,0 +1,75 @@
1#ifndef __EVAS_DIRECT3D_SHADER_PACK_H__
2#define __EVAS_DIRECT3D_SHADER_PACK_H__
3
4#include "evas_engine.h"
5
6#include "ref.h"
7#include "array.h"
8
9class D3DDevice;
10
11class D3DShaderPack : virtual public Referenc
12{
13public:
14 ~D3DShaderPack();
15
16 static D3DShaderPack *Current();
17 static void SetCurrent(D3DShaderPack *obj);
18
19 bool Initialize(D3DDevice *d3d);
20 void Uninitialize();
21
22 bool SetVDecl(D3DDevice *d3d, int id);
23 bool SetVS(D3DDevice *d3d, int id);
24 bool SetPS(D3DDevice *d3d, int id);
25
26public:
27 enum VDECL
28 {
29 VDECL_XYC = 0,
30 VDECL_XYUV,
31 VDECL_XYUVC,
32 VDECL_XYZUVC,
33
34 VDECL_NUM
35 };
36
37 enum VS
38 {
39 VS_COPY_COLOR = 0,
40 VS_COPY_UV,
41 VS_COPY_UV_COLOR,
42 VS_COPY_UV_COLOR_Z,
43
44 VS_NUM
45 };
46
47 enum PS
48 {
49 PS_COLOR = 0,
50 PS_TEX,
51 PS_TEX_COLOR_FILTER,
52 PS_TEX_2,
53
54 PS_NUM
55 };
56
57private:
58 D3DShaderPack();
59
60 bool InitVertexDeclarations(D3DDevice *d3d);
61 bool InitVertexShaders(D3DDevice *d3d);
62 bool InitPixelShaders(D3DDevice *d3d);
63
64 void *CompileShader(D3DDevice *d3d, bool make_vs, const char *name,
65 const char *buf, int size);
66
67private:
68 TArray<LPDIRECT3DVERTEXDECLARATION9> _vdecl;
69 TArray<LPDIRECT3DVERTEXSHADER9> _vs;
70 TArray<LPDIRECT3DPIXELSHADER9> _ps;
71
72 static Ref<D3DShaderPack> _this;
73};
74
75#endif // __EVAS_DIRECT3D_SHADER_PACK_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_vertex_buffer_cache.cpp b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_vertex_buffer_cache.cpp
new file mode 100644
index 0000000..8d3dd45
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_vertex_buffer_cache.cpp
@@ -0,0 +1,154 @@
1
2//#define ENABLE_LOG_PRINTF
3
4#include "evas_direct3d_vertex_buffer_cache.h"
5#include "evas_direct3d_device.h"
6
7#include <assert.h>
8
9
10Ref<D3DVertexBufferCache> D3DVertexBufferCache::_this;
11
12D3DVertexBufferCache::D3DVertexBufferCache()
13{
14 size_border_low = 0.6; // We can reuse buffer on 60%
15 size_border_high = 0.2; // We can reallocate the buffer on 20%
16}
17
18D3DVertexBufferCache::~D3DVertexBufferCache()
19{
20 Uninitialize();
21}
22
23D3DVertexBufferCache *D3DVertexBufferCache::Current()
24{
25 if (_this.IsNull())
26 _this = new D3DVertexBufferCache();
27 return _this;
28}
29
30void D3DVertexBufferCache::SetCurrent(D3DVertexBufferCache *obj)
31{
32 _this = obj;
33}
34
35void D3DVertexBufferCache::Uninitialize()
36{
37 for (int i = 0; i < _cache.Length(); i++)
38 {
39 assert(_cache[i].vb != NULL);
40 _cache[i].vb->Release();
41 }
42 _cache.Resize();
43}
44
45bool D3DVertexBufferCache::InitBuffer(D3DDevice *d3d, BYTE *data, int size, CacheEntryInfo &info)
46{
47 assert(d3d != NULL);
48 assert(data != NULL);
49 assert(size > 0);
50
51 int best = FindBestEntry(size);
52 CacheEntry *ce = NULL;
53
54 // Reallocate
55 if (best >= 0 && _cache[best].size < size)
56 {
57 DeleteEntry(best);
58 best = -1;
59 }
60
61 // New
62 if (best < 0)
63 {
64 CacheEntry new_entry;
65 if (!CreateEntry(d3d, new_entry, size))
66 {
67 WRN("Failed to create new vbcache entry");
68 return false;
69 }
70 _cache.Add(new_entry);
71 info.id = _cache.Length() - 1;
72 ce = _cache.Last();
73 }
74 else
75 {
76 info.id = best;
77 ce = &_cache[best];
78 }
79
80 assert(ce != NULL);
81 if (!InsertData(*ce, data, size))
82 {
83 WRN("Failed to insert vbcache data");
84 return false;
85 }
86 return true;
87}
88
89bool D3DVertexBufferCache::SelectBufferToDevice(D3DDevice *device, int id, int vertex_size)
90{
91 if (id < 0 || id >= _cache.Length())
92 return false;
93 return SUCCEEDED(device->GetDevice()->SetStreamSource(0, _cache[id].vb, 0, vertex_size));
94}
95
96int D3DVertexBufferCache::FindBestEntry(int size)
97{
98 // Search for buffer that fits in borders
99 for (int i = 0; i < _cache.Length(); i++)
100 {
101 const int vs = _cache[i].size;
102 if (size >= (vs - FLOAT(vs) * size_border_low) && size <= vs)
103 return i;
104 }
105 bool less_than_all = true;
106 for (int i = 0; i < _cache.Length(); i++)
107 {
108 const int vs = _cache[i].size;
109 if (size >= (vs - FLOAT(vs) * size_border_low))
110 less_than_all = false;
111 }
112 // Requested size is too small to reuse in any buffer
113 if (less_than_all)
114 return -1;
115 // Search for buffer that can be reallocated
116 for (int i = 0; i < _cache.Length(); i++)
117 {
118 const int vs = _cache[i].size;
119 if (size <= (vs + FLOAT(vs) * size_border_high))
120 return i;
121 }
122 // No buffer can be reused or reallocated, create a new one
123 return -1;
124}
125
126bool D3DVertexBufferCache::CreateEntry(D3DDevice *d3d, CacheEntry &entry, int size)
127{
128 assert(d3d != NULL);
129 if (FAILED(d3d->GetDevice()->CreateVertexBuffer(size, D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY,
130 0, D3DPOOL_DEFAULT, &entry.vb, NULL)))
131 {
132 return false;
133 }
134 entry.size = size;
135 return true;
136}
137
138void D3DVertexBufferCache::DeleteEntry(int id)
139{
140 if (id < 0 || id >= _cache.Length())
141 return;
142 assert(_cache[id].vb != NULL);
143 _cache[id].vb->Release();
144 _cache.Replace(id);
145}
146
147bool D3DVertexBufferCache::InsertData(CacheEntry &entry, BYTE *data, int size)
148{
149 BYTE *ptr = NULL;
150 if (FAILED(entry.vb->Lock(0, size, (void **)&ptr, D3DLOCK_DISCARD)))
151 return false;
152 CopyMemory(ptr, data, size);
153 return SUCCEEDED(entry.vb->Unlock());
154}
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_direct3d_vertex_buffer_cache.h b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_vertex_buffer_cache.h
new file mode 100644
index 0000000..822ac80
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_direct3d_vertex_buffer_cache.h
@@ -0,0 +1,60 @@
1#ifndef __EVAS_DIRECT3D_VERTEX_BUFFER_CACHE_H__
2#define __EVAS_DIRECT3D_VERTEX_BUFFER_CACHE_H__
3
4#include "evas_engine.h"
5
6#include "ref.h"
7#include "array.h"
8
9class D3DDevice;
10
11class D3DVertexBufferCache : virtual public Referenc
12{
13public:
14 struct CacheEntryInfo
15 {
16 int id;
17 };
18
19public:
20 ~D3DVertexBufferCache();
21
22 static D3DVertexBufferCache *Current();
23 static void SetCurrent(D3DVertexBufferCache *obj);
24
25 inline void SetSizeBorders(FLOAT low, FLOAT high);
26
27 bool InitBuffer(D3DDevice *d3d, BYTE *data, int size, CacheEntryInfo &info);
28 bool SelectBufferToDevice(D3DDevice *device, int id, int vertex_size);
29 void Uninitialize();
30
31private:
32 struct CacheEntry
33 {
34 LPDIRECT3DVERTEXBUFFER9 vb;
35 int size;
36 };
37
38private:
39 D3DVertexBufferCache();
40
41 int FindBestEntry(int size);
42 bool CreateEntry(D3DDevice *d3d, CacheEntry &entry, int size);
43 void DeleteEntry(int id);
44 bool InsertData(CacheEntry &entry, BYTE *data, int size);
45
46private:
47 TArray<CacheEntry> _cache;
48 FLOAT size_border_low;
49 FLOAT size_border_high;
50
51 static Ref<D3DVertexBufferCache> _this;
52};
53
54void D3DVertexBufferCache::SetSizeBorders(FLOAT low, FLOAT high)
55{
56 size_border_low = low;
57 size_border_high = high;
58}
59
60#endif // __EVAS_DIRECT3D_VERTEX_BUFFER_CACHE_H__
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_engine.c b/libraries/evas/src/modules/engines/direct3d/evas_engine.c
new file mode 100644
index 0000000..f7722d8
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_engine.c
@@ -0,0 +1,503 @@
1#include "evas_common.h" /* Also includes international specific stuff */
2#include "evas_engine.h"
3#include "evas_private.h"
4#include "Evas_Engine_Direct3D.h"
5
6#undef EAPI
7#define EAPI __declspec(dllexport)
8
9/* engine struct data */
10typedef struct _Render_Engine Render_Engine;
11struct _Render_Engine
12{
13 Direct3DDeviceHandler d3d;
14 int width, height;
15 int end : 1;
16 int in_redraw : 1;
17};
18
19int _evas_engine_direct3d_log_dom = -1;
20
21/* function tables - filled in later (func and parent func) */
22static Evas_Func func, pfunc;
23
24//////////////////////////////////////////////////////////////////////////////
25// Prototypes
26
27static void *eng_info(Evas *e);
28static void eng_info_free(Evas *e, void *info);
29static int eng_setup(Evas *e, void *info);
30static void eng_output_free(void *data);
31static void eng_output_resize(void *data, int width, int height);
32
33//////////////////////////////////////////////////////////////////////////////
34// Init / shutdown methods
35//
36
37static void *
38_output_setup(int width, int height, int rotation, HWND window, int depth, int fullscreen)
39{
40 Render_Engine *re;
41
42 re = (Render_Engine *)calloc(1, sizeof(Render_Engine));
43 if (!re)
44 return NULL;
45
46 /* if we haven't initialized - init (automatic abort if already done) */
47 evas_common_cpu_init();
48
49 evas_common_blend_init();
50 evas_common_image_init();
51 evas_common_convert_init();
52 evas_common_scale_init();
53 evas_common_rectangle_init();
54 evas_common_polygon_init();
55 evas_common_line_init();
56 evas_common_font_init();
57 evas_common_draw_init();
58 evas_common_tilebuf_init();
59
60 if ((re->d3d = evas_direct3d_init(window, depth, fullscreen)) == 0)
61 {
62 free(re);
63 return NULL;
64 }
65
66 re->width = width;
67 re->height = height;
68
69 return re;
70}
71
72static void *
73eng_info(Evas *e)
74{
75 Evas_Engine_Info_Direct3D *info;
76 info = (Evas_Engine_Info_Direct3D *)calloc(1, sizeof(Evas_Engine_Info_Direct3D));
77 if (!info) return NULL;
78 info->magic.magic = rand();
79 memset(&info->info, 0, sizeof(info->info));
80 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
81 return info;
82 e = NULL;
83}
84
85static void
86eng_info_free(Evas *e, void *info)
87{
88 Evas_Engine_Info_Direct3D *in;
89 in = (Evas_Engine_Info_Direct3D *)info;
90 free(in);
91}
92
93static int
94eng_setup(Evas *e, void *info)
95{
96 Render_Engine *re;
97 Evas_Engine_Info_Direct3D *in;
98 re = (Render_Engine *)e->engine.data.output;
99 in = (Evas_Engine_Info_Direct3D *)info;
100 if (!e->engine.data.output)
101 {
102 e->engine.data.output = _output_setup(e->output.w,
103 e->output.h,
104 in->info.rotation,
105 in->info.window,
106 in->info.depth,
107 in->info.fullscreen);
108 }
109 else if (in->info.fullscreen != 0)
110 {
111 if (re)
112 evas_direct3d_set_layered(re->d3d, 0, 0, 0, NULL);
113 evas_direct3d_set_fullscreen(re->d3d, -1, -1, 1);
114 }
115 else if (in->info.fullscreen == 0)
116 {
117 evas_direct3d_set_fullscreen(re->d3d, re->width, re->height, 0);
118 if (re && in->info.layered == 0)
119 evas_direct3d_set_layered(re->d3d, 0, 0, 0, NULL);
120 else if (re && in->info.layered != 0 && in->shape)
121 evas_direct3d_set_layered(re->d3d, 1, in->shape->width, in->shape->height, in->shape->mask);
122 }
123
124 if (!e->engine.data.output)
125 return 0;
126 if (!e->engine.data.context)
127 e->engine.data.context = e->engine.func->context_new(e->engine.data.output);
128
129 return 1;
130}
131
132static void
133eng_output_free(void *data)
134{
135 Render_Engine *re = (Render_Engine *)data;
136
137 evas_direct3d_free(re->d3d);
138
139 free(re);
140
141 evas_common_font_shutdown();
142 evas_common_image_shutdown();
143}
144
145//////////////////////////////////////////////////////////////////////////////
146// Context
147//
148
149static void
150eng_context_color_set(void *data, void *context, int r, int g, int b, int a)
151{
152 Render_Engine *re = (Render_Engine *)data;
153 evas_direct3d_context_color_set(re->d3d, r, g, b, a);
154
155 evas_common_draw_context_set_color(context, r, g, b, a);
156}
157
158static void
159eng_context_multiplier_set(void *data, void *context, int r, int g, int b, int a)
160{
161 Render_Engine *re = (Render_Engine *)data;
162 evas_direct3d_context_set_multiplier(re->d3d, 255, 255, 255, a);
163
164 evas_common_draw_context_set_multiplier(context, r, g, b, a);
165}
166
167static void
168eng_context_multiplier_unset(void *data, void *context)
169{
170 Render_Engine *re = (Render_Engine *)data;
171 evas_direct3d_context_set_multiplier(re->d3d, 255, 255, 255, 255);
172
173 evas_common_draw_context_unset_multiplier(context);
174}
175
176
177//////////////////////////////////////////////////////////////////////////////
178// Output manipulating
179//
180
181static void
182eng_output_resize(void *data, int width, int height)
183{
184 Render_Engine *re = (Render_Engine *)data;
185 re->width = width;
186 re->height = height;
187 evas_direct3d_resize(re->d3d, width, height);
188}
189
190static void
191eng_output_redraws_rect_add(void *data, int x, int y, int width, int height)
192{
193 Render_Engine *re = (Render_Engine *)data;
194}
195
196static void
197eng_output_redraws_rect_del(void *data, int x, int y, int width, int height)
198{
199 Render_Engine *re = (Render_Engine *)data;
200}
201
202static void
203eng_output_redraws_clear(void *data)
204{
205 Render_Engine *re = (Render_Engine *)data;
206}
207
208static void *
209eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h,
210 int *cx, int *cy, int *cw, int *ch)
211{
212 Render_Engine *re;
213
214 re = (Render_Engine *)data;
215 if (re->end)
216 {
217 re->end = 0;
218 re->in_redraw = 0;
219 return NULL;
220 }
221
222 if (x) *x = 0;
223 if (y) *y = 0;
224 if (w) *w = 800; //re->d3d.width;
225 if (h) *h = 600; //re->d3d.height;
226 if (cx) *cx = 0;
227 if (cy) *cy = 0;
228 if (cw) *cw = 800; //re->d3d.width;
229 if (ch) *ch = 600; //re->d3d.height;
230
231 re->in_redraw = 1;
232
233 return re;
234}
235
236static void
237eng_output_redraws_next_update_push(void *data, void *surface,
238 int x, int y, int w, int h)
239{
240 Render_Engine *re = (Render_Engine *)data;
241 re->end = 1;
242}
243
244static void
245eng_output_flush(void *data)
246{
247 Render_Engine *re = (Render_Engine *)data;
248 evas_direct3d_render_all(re->d3d);
249}
250
251static void
252eng_output_idle_flush(void *data)
253{
254 Render_Engine *re = (Render_Engine *)data;
255}
256
257
258//////////////////////////////////////////////////////////////////////////////
259// Draw objects
260//
261
262static void
263eng_line_draw(void *data, void *context, void *surface, int x1, int y1, int x2, int y2)
264{
265 Render_Engine *re = (Render_Engine *)data;
266 if (re->in_redraw == 0)
267 return;
268 evas_direct3d_line_draw(re->d3d, x1, y1, x2, y2);
269}
270
271static void
272eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h)
273{
274 Render_Engine *re = (Render_Engine *)data;
275 if (re->in_redraw == 0)
276 return;
277 evas_direct3d_rectangle_draw(re->d3d, x, y, w, h);
278}
279
280static void *
281eng_image_load(void *data, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
282{
283 Render_Engine *re = (Render_Engine *)data;
284 *error = 0;
285 return evas_direct3d_image_load(re->d3d, file, key, NULL, lo);
286}
287
288static void *
289eng_image_new_from_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace)
290{
291 Render_Engine *re = (Render_Engine *)data;
292 return evas_direct3d_image_new_from_data(re->d3d, w, h, image_data, alpha, cspace);
293}
294
295static void *
296eng_image_new_from_copied_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace)
297{
298 Render_Engine *re = (Render_Engine *)data;
299 return evas_direct3d_image_new_from_copied_data(re->d3d, w, h, image_data, alpha, cspace);
300}
301
302static void
303eng_image_free(void *data, void *image)
304{
305 Render_Engine *re = (Render_Engine *)data;
306 evas_direct3d_image_free(re->d3d, image);
307}
308
309static void *
310eng_image_data_put(void *data, void *image, DATA32 *image_data)
311{
312 Render_Engine *re = (Render_Engine *)data;
313 evas_direct3d_image_data_put(re->d3d, image, image_data);
314 return image;
315}
316
317static void *
318eng_image_dirty_region(void *data, void *image, int x, int y, int w, int h)
319{
320 return image;
321}
322
323static void *
324eng_image_data_get(void *data, void *image, int to_write, DATA32 **image_data, int *err)
325{
326 Render_Engine *re = (Render_Engine *)data;
327 evas_direct3d_image_data_get(re->d3d, image, to_write, image_data);
328 if (err) *err = EVAS_LOAD_ERROR_NONE;
329 return image;
330}
331
332static void
333eng_image_draw(void *data, void *context, void *surface, void *image,
334 int src_x, int src_y, int src_w, int src_h,
335 int dst_x, int dst_y, int dst_w, int dst_h, int smooth)
336{
337 Render_Engine *re = (Render_Engine *)data;
338 evas_direct3d_image_draw(re->d3d, image,
339 src_x, src_y, src_w, src_h,
340 dst_x, dst_y, dst_w, dst_h, smooth);
341}
342
343static void
344eng_image_size_get(void *data, void *image, int *w, int *h)
345{
346 evas_direct3d_image_size_get(image, w, h);
347}
348
349static int
350eng_image_alpha_get(void *data, void *image)
351{
352 // Hm:)
353 if (!image)
354 return 1;
355 return 0;
356}
357
358static int
359eng_image_colorspace_get(void *data, void *image)
360{
361 // Well, change that when you think about other colorspace
362 return EVAS_COLORSPACE_ARGB8888;
363}
364
365static void *
366eng_image_border_set(void *data, void *image, int l, int r, int t, int b)
367{
368 Render_Engine *re = (Render_Engine *)data;
369 evas_direct3d_image_border_set(re->d3d, image, l, t, r, b);
370 return image;
371}
372
373static void
374eng_image_border_get(void *data, void *image, int *l, int *r, int *t, int *b)
375{
376 Render_Engine *re = (Render_Engine *)data;
377 evas_direct3d_image_border_get(re->d3d, image, l, t, r, b);
378}
379
380static void
381eng_image_scale_hint_set(void *data __UNUSED__, void *image, int hint)
382{
383}
384
385static int
386eng_image_scale_hint_get(void *data __UNUSED__, void *image)
387{
388 return EVAS_IMAGE_SCALE_HINT_NONE;
389}
390
391static void
392eng_font_draw(void *data, void *context, void *surface, Evas_Font_Set *font, int x, int y, int w, int h, int ow, int oh, const Evas_Text_Props *intl_props)
393{
394 Render_Engine *re = (Render_Engine *)data;
395 RGBA_Image im;
396 im.image.data = NULL;
397 im.cache_entry.w = re->width;
398 im.cache_entry.h = re->height;
399
400 evas_direct3d_select_or_create_font(re->d3d, font);
401
402 evas_common_draw_context_font_ext_set(context, re->d3d,
403 evas_direct3d_font_texture_new,
404 evas_direct3d_font_texture_free,
405 evas_direct3d_font_texture_draw);
406 evas_common_font_draw(&im, context, (RGBA_Font *) font, x, y, intl_props);
407 evas_common_draw_context_font_ext_set(context, NULL, NULL, NULL, NULL);
408}
409
410static void
411eng_font_free(void *data, void *font)
412{
413 Render_Engine *re = (Render_Engine *)data;
414 evas_common_font_free(font);
415 evas_direct3d_font_free(re->d3d, font);
416}
417
418/* module advertising code */
419static int
420module_open(Evas_Module *em)
421{
422 if (!em) return 0;
423 /* get whatever engine module we inherit from */
424 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
425 /* Initialize the log domain */
426 _evas_engine_direct3d_log_dom = eina_log_domain_register
427 ("evas-direct3d", EVAS_DEFAULT_LOG_COLOR);
428 if (_evas_engine_direct3d_log_dom < 0)
429 {
430 EINA_LOG_ERR("Can not create a module log domain.");
431 return 0;
432 }
433 /* store it for later use */
434 func = pfunc;
435 /* now to override methods */
436#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
437 ORD(info);
438 ORD(info_free);
439 ORD(setup);
440 ORD(context_color_set);
441 ORD(context_multiplier_set);
442 ORD(context_multiplier_unset);
443 ORD(output_free);
444 ORD(output_resize);
445 ORD(output_redraws_rect_add);
446 ORD(output_redraws_rect_del);
447 ORD(output_redraws_clear);
448 ORD(output_redraws_next_update_get);
449 ORD(output_redraws_next_update_push);
450 ORD(output_flush);
451 ORD(output_idle_flush);
452 ORD(line_draw);
453 ORD(rectangle_draw);
454 ORD(image_load);
455 ORD(image_new_from_data);
456 ORD(image_new_from_copied_data);
457 ORD(image_free);
458 ORD(image_data_put);
459 ORD(image_dirty_region);
460 ORD(image_data_get);
461 ORD(image_draw);
462 ORD(image_size_get);
463 ORD(image_alpha_get);
464 ORD(image_colorspace_get);
465 ORD(image_border_set);
466 ORD(image_border_get);
467 ORD(font_draw);
468 ORD(font_free);
469
470 ORD(image_scale_hint_set);
471 ORD(image_scale_hint_get);
472
473// ORD(image_map_draw);
474// ORD(image_map_surface_new);
475// ORD(image_map_surface_free);
476
477 /* now advertise out own api */
478 em->functions = (void *)(&func);
479 return 1;
480}
481
482static void
483module_close(Evas_Module *em)
484{
485 eina_log_domain_unregister(_evas_engine_direct3d_log_dom);
486}
487
488static Evas_Module_Api evas_modapi =
489{
490 EVAS_MODULE_API_VERSION,
491 "direct3d",
492 "none",
493 {
494 module_open,
495 module_close
496 }
497};
498
499EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, direct3d);
500
501#ifndef EVAS_STATIC_BUILD_DIRECT3D
502EVAS_EINA_MODULE_DEFINE(engine, direct3d);
503#endif
diff --git a/libraries/evas/src/modules/engines/direct3d/evas_engine.h b/libraries/evas/src/modules/engines/direct3d/evas_engine.h
new file mode 100644
index 0000000..da1ebff
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/evas_engine.h
@@ -0,0 +1,125 @@
1#ifndef __EVAS_ENGINE_H__
2#define __EVAS_ENGINE_H__
3
4
5#define WIN32_LEAN_AND_MEAN
6#include <windows.h>
7#undef WIN32_LEAN_AND_MEAN
8#include <d3d9.h>
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14#define EVAS_INLINE_ARRAY_H // We dont need that and it is buggy
15
16#include "evas_common.h"
17
18#ifdef __cplusplus
19}
20#endif
21
22
23//#define ENABLE_LOG_PRINTF
24
25extern int _evas_engine_direct3d_log_dom ;
26#ifdef ERR
27# undef ERR
28#endif
29#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_direct3d_log_dom, __VA_ARGS__)
30
31#ifdef DBG
32# undef DBG
33#endif
34#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_direct3d_log_dom, __VA_ARGS__)
35
36#ifdef INF
37# undef INF
38#endif
39#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_direct3d_log_dom, __VA_ARGS__)
40
41#ifdef WRN
42# undef WRN
43#endif
44#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_direct3d_log_dom, __VA_ARGS__)
45
46#ifdef CRIT
47# undef CRIT
48#endif
49#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_direct3d_log_dom, __VA_ARGS__)
50
51#ifdef ENABLE_LOG_PRINTF
52#define Log(str, ...) INF("D3D "str, __VA_ARGS__)
53#else
54#define Log(str, ...)
55#endif
56
57typedef void * Direct3DDeviceHandler;
58typedef void * Direct3DImageHandler;
59typedef void * Direct3DFontGlyphHandler;
60
61
62#ifdef __cplusplus
63extern "C" {
64#endif
65
66// Main engine functions
67
68Direct3DDeviceHandler evas_direct3d_init(HWND window, int depth, int fullscreen);
69void evas_direct3d_free(Direct3DDeviceHandler d3d);
70void evas_direct3d_render_all(Direct3DDeviceHandler d3d);
71void evas_direct3d_resize(Direct3DDeviceHandler d3d, int width, int height);
72void evas_direct3d_set_fullscreen(Direct3DDeviceHandler d3d,
73 int width, int height, int fullscreen);
74void evas_direct3d_set_layered(Direct3DDeviceHandler d3d, int layered,
75 int mask_width, int mask_height, unsigned char *mask);
76
77
78// Context manipulations
79
80void evas_direct3d_context_color_set(Direct3DDeviceHandler d3d, int r, int g, int b, int a);
81void evas_direct3d_context_set_multiplier(Direct3DDeviceHandler d3d, int r, int g, int b, int a);
82
83// Simple objects
84
85void evas_direct3d_line_draw(Direct3DDeviceHandler d3d, int x1, int y1, int x2, int y2);
86void evas_direct3d_rectangle_draw(Direct3DDeviceHandler d3d, int x, int y, int w, int h);
87
88// Images
89
90Direct3DImageHandler evas_direct3d_image_load(Direct3DDeviceHandler d3d,
91 const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo);
92Direct3DImageHandler evas_direct3d_image_new_from_data(Direct3DDeviceHandler d3d,
93 int w, int h, DWORD *image_data, int alpha, int cspace);
94Direct3DImageHandler evas_direct3d_image_new_from_copied_data(Direct3DDeviceHandler d3d,
95 int w, int h, DWORD *image_data, int alpha, int cspace);
96void evas_direct3d_image_free(Direct3DDeviceHandler d3d, Direct3DImageHandler image);
97void evas_direct3d_image_data_put(Direct3DDeviceHandler d3d, Direct3DImageHandler image,
98 DWORD *image_data);
99void evas_direct3d_image_data_get(Direct3DDeviceHandler d3d, Direct3DImageHandler image,
100 int to_write, DATA32 **image_data);
101void evas_direct3d_image_draw(Direct3DDeviceHandler d3d, Direct3DImageHandler image,
102 int src_x, int src_y, int src_w, int src_h,
103 int dst_x, int dst_y, int dst_w, int dst_h, int smooth);
104void evas_direct3d_image_size_get(Direct3DImageHandler image, int *w, int *h);
105void evas_direct3d_image_border_set(Direct3DDeviceHandler d3d, Direct3DImageHandler image,
106 int l, int r, int t, int b);
107void evas_direct3d_image_border_get(Direct3DDeviceHandler d3d, Direct3DImageHandler image,
108 int *l, int *r, int *t, int *b);
109
110// Fonts
111
112Direct3DFontGlyphHandler evas_direct3d_font_texture_new(Direct3DDeviceHandler d3d,
113 RGBA_Font_Glyph *fg);
114void evas_direct3d_font_texture_free(Direct3DFontGlyphHandler ft);
115void evas_direct3d_font_texture_draw(Direct3DDeviceHandler d3d, void *dest, void *context,
116 RGBA_Font_Glyph *fg, int x, int y);
117void evas_direct3d_select_or_create_font(Direct3DDeviceHandler d3d, void *font);
118void evas_direct3d_font_free(Direct3DDeviceHandler d3d, void *font);
119
120#ifdef __cplusplus
121}
122#endif
123
124
125#endif /* __EVAS_ENGINE_H__ */
diff --git a/libraries/evas/src/modules/engines/direct3d/ref.h b/libraries/evas/src/modules/engines/direct3d/ref.h
new file mode 100644
index 0000000..0853f2e
--- /dev/null
+++ b/libraries/evas/src/modules/engines/direct3d/ref.h
@@ -0,0 +1,210 @@
1#ifndef __REF_H__
2#define __REF_H__
3
4//////////////////////////////////////////////////////////////////////////////
5// class Referenc
6// Desc: Base class enabling reference interface
7// Note: Class should derive as virtual
8//
9class Referenc
10{
11public:
12 Referenc()
13 : refs_count(0) {};
14
15 inline int AddRef()
16 {
17 return ++refs_count;
18 }
19 inline int RemRef()
20 {
21 return --refs_count;
22 }
23 inline int RefCount()
24 {
25 return refs_count;
26 }
27
28private:
29 int refs_count;
30};
31
32
33//////////////////////////////////////////////////////////////////////////////
34// template Ref
35// Desc: Holder in smart-pointers system.
36// Important: Only Referenc subclasses may be used as template param.
37//
38
39template <class T>
40class Ref
41{
42public:
43 // Constructors & destructor
44 Ref();
45 //Ref(Ref<T> &ref);
46 Ref(const Ref<T> &ref);
47 Ref(T *ptr);
48 Ref(const T *ptr);
49 ~Ref();
50
51 Ref<T> &operator =(Ref<T> &ref);
52 Ref<T> &operator =(T *ptr);
53
54 inline T *Addr();
55 inline T *Addr() const;
56 inline int RefCount();
57 inline bool IsNull();
58
59 inline T *operator ->();
60 inline operator const T *() const;
61 inline operator T *();
62
63//private:
64 void RemRef();
65
66private:
67 T *m_ptr;
68};
69
70//////////////////////////////////////////////////////////////////////////////
71// Constructors & destructor
72template <class T> Ref<T>::Ref()
73: m_ptr(NULL)
74{
75}
76
77//template <class T> Ref<T>::Ref(Ref<T> &ref)
78//: m_ptr(NULL)
79//{
80// if (ref.Addr() != NULL)
81// {
82// m_ptr = ref.Addr();
83// ((Referenc *)m_ptr)->AddRef();
84// }
85//}
86
87template <class T> Ref<T>::Ref(const Ref<T> &ref)
88: m_ptr(NULL)
89{
90 if (ref.Addr() != NULL)
91 {
92 m_ptr = ref.Addr();
93 ((Referenc *)m_ptr)->AddRef();
94 }
95}
96
97template <class T> Ref<T>::Ref(T *ptr)
98: m_ptr(NULL)
99{
100 if (ptr != NULL)
101 {
102 m_ptr = ptr;
103 ((Referenc *)m_ptr)->AddRef();
104 }
105}
106
107template <class T> Ref<T>::Ref(const T *ptr)
108: m_ptr(NULL)
109{
110 if (ptr != NULL)
111 {
112 m_ptr = ptr;
113 ((Referenc *)m_ptr)->AddRef();
114 }
115}
116
117template <class T> Ref<T>::~Ref()
118{
119 if (m_ptr == NULL)
120 return;
121 RemRef();
122}
123
124// Check pointer on correctness
125template <class T> bool Ref<T>::IsNull()
126{
127 return (m_ptr == NULL);
128}
129
130//////////////////////////////////////////////////////////////////////////////
131// Operators
132
133template <class T> Ref<T> &Ref<T>::operator =(T *ptr)
134{
135 if (ptr != NULL)
136 {
137 if (m_ptr != ptr)
138 {
139 RemRef();
140 m_ptr = ptr;
141 ((Referenc *)m_ptr)->AddRef();
142 }
143 }
144 else if (m_ptr != NULL)
145 RemRef();
146 return *this;
147}
148
149template <class T> Ref<T> &Ref<T>::operator =(Ref<T> &ref)
150{
151 if (ref.Addr() != NULL)
152 {
153 if (m_ptr != ref.Addr())
154 {
155 RemRef();
156 m_ptr = ref.Addr();
157 ((Referenc *)m_ptr)->AddRef();
158 }
159 }
160 else if (m_ptr != NULL)
161 RemRef();
162 return *this;
163}
164
165// Get pointer
166template <class T> T *Ref<T>::Addr()
167{
168 return m_ptr;
169}
170
171template <class T> T *Ref<T>::Addr() const
172{
173 return m_ptr;
174}
175
176// Get refs count
177template <class T> int Ref<T>::RefCount()
178{
179 if (m_ptr == NULL)
180 return 0;
181 return ((Referenc *)m_ptr)->RefCount();
182}
183
184// Remove ref to the object and delete it if necessary
185// WARNING: arrays cannot be deleted
186template <class T> void Ref<T>::RemRef()
187{
188 if (m_ptr == NULL)
189 return;
190 if (((Referenc *)m_ptr)->RemRef() == 0)
191 delete m_ptr;
192 m_ptr = NULL;
193}
194
195template <class T> T *Ref<T>::operator ->()
196{
197 return m_ptr;
198}
199
200template <class T> Ref<T>::operator const T *() const
201{
202 return m_ptr;
203}
204
205template <class T> Ref<T>::operator T *()
206{
207 return m_ptr;
208}
209
210#endif // __REF_H__
diff --git a/libraries/evas/src/modules/engines/directfb/Evas_Engine_DirectFB.h b/libraries/evas/src/modules/engines/directfb/Evas_Engine_DirectFB.h
new file mode 100644
index 0000000..53352b7
--- /dev/null
+++ b/libraries/evas/src/modules/engines/directfb/Evas_Engine_DirectFB.h
@@ -0,0 +1,25 @@
1#ifndef _EVAS_ENGINE_DIRECTFB_H
2#define _EVAS_ENGINE_DIRECTFB_H
3
4#include <Evas.h>
5#include <directfb.h>
6
7typedef struct _Evas_Engine_Info_DirectFB Evas_Engine_Info_DirectFB;
8
9struct _Evas_Engine_Info_DirectFB
10{
11 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
12 /* at you and make nasty noises */
13 Evas_Engine_Info magic;
14
15 struct Evas_Engine_DirectFB_Spec {
16 IDirectFB *dfb;
17 IDirectFBSurface *surface;
18 } info;
19
20 /* non-blocking or blocking mode */
21 Evas_Engine_Render_Mode render_mode;
22};
23#endif
24
25
diff --git a/libraries/evas/src/modules/engines/directfb/Makefile.am b/libraries/evas/src/modules/engines/directfb/Makefile.am
new file mode 100644
index 0000000..5b00166
--- /dev/null
+++ b/libraries/evas/src/modules/engines/directfb/Makefile.am
@@ -0,0 +1,46 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9@FREETYPE_CFLAGS@ \
10@PIXMAN_CFLAGS@ \
11@EINA_CFLAGS@ \
12@evas_engine_directfb_cflags@
13
14AM_CFLAGS = @WIN32_CFLAGS@
15
16if BUILD_ENGINE_DIRECTFB
17
18DIRECTFB_SOURCES = evas_engine.c polygon.c
19DIRECTFB_LIBADD = @evas_engine_directfb_libs@
20
21
22includes_HEADERS = Evas_Engine_DirectFB.h
23includesdir = $(includedir)/evas-@VMAJ@
24
25if !EVAS_STATIC_BUILD_DIRECTFB
26
27pkgdir = $(libdir)/evas/modules/engines/directfb/$(MODULE_ARCH)
28pkg_LTLIBRARIES = module.la
29
30module_la_SOURCES = $(DIRECTFB_SOURCES)
31
32module_la_LIBADD = @EINA_LIBS@ $(DIRECTFB_LIBADD) $(top_builddir)/src/lib/libevas.la
33module_la_LDFLAGS = -module -avoid-version
34module_la_LIBTOOLFLAGS = --tag=disable-static
35
36else
37
38noinst_LTLIBRARIES = libevas_engine_directfb.la
39
40libevas_engine_directfb_la_SOURCES = $(DIRECTFB_SOURCES)
41libevas_engine_directfb_la_LIBADD = $(DIRECTFB_LIBADD)
42
43endif
44endif
45
46EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/directfb/Makefile.in b/libraries/evas/src/modules/engines/directfb/Makefile.in
new file mode 100644
index 0000000..cd5651a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/directfb/Makefile.in
@@ -0,0 +1,805 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/directfb
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84am__DEPENDENCIES_1 =
85@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_TRUE@libevas_engine_directfb_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_directfb_la_SOURCES_DIST = evas_engine.c polygon.c
87@BUILD_ENGINE_DIRECTFB_TRUE@am__objects_1 = evas_engine.lo polygon.lo
88@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_TRUE@am_libevas_engine_directfb_la_OBJECTS = $(am__objects_1)
89libevas_engine_directfb_la_OBJECTS = \
90 $(am_libevas_engine_directfb_la_OBJECTS)
91AM_V_lt = $(am__v_lt_$(V))
92am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
93am__v_lt_0 = --silent
94@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_TRUE@am_libevas_engine_directfb_la_rpath =
95@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_FALSE@module_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
96@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_FALSE@ $(top_builddir)/src/lib/libevas.la
97am__module_la_SOURCES_DIST = evas_engine.c polygon.c
98@BUILD_ENGINE_DIRECTFB_TRUE@am__objects_2 = module_la-evas_engine.lo \
99@BUILD_ENGINE_DIRECTFB_TRUE@ module_la-polygon.lo
100@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_FALSE@am_module_la_OBJECTS = $(am__objects_2)
101module_la_OBJECTS = $(am_module_la_OBJECTS)
102module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
103 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
104 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
105@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_FALSE@am_module_la_rpath = -rpath \
106@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_FALSE@ $(pkgdir)
107DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
108depcomp = $(SHELL) $(top_srcdir)/depcomp
109am__depfiles_maybe = depfiles
110am__mv = mv -f
111COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
112 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
113LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
114 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
115 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
116 $(AM_CFLAGS) $(CFLAGS)
117AM_V_CC = $(am__v_CC_$(V))
118am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
119am__v_CC_0 = @echo " CC " $@;
120AM_V_at = $(am__v_at_$(V))
121am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
122am__v_at_0 = @
123CCLD = $(CC)
124LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
125 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
126 $(AM_LDFLAGS) $(LDFLAGS) -o $@
127AM_V_CCLD = $(am__v_CCLD_$(V))
128am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
129am__v_CCLD_0 = @echo " CCLD " $@;
130AM_V_GEN = $(am__v_GEN_$(V))
131am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
132am__v_GEN_0 = @echo " GEN " $@;
133SOURCES = $(libevas_engine_directfb_la_SOURCES) $(module_la_SOURCES)
134DIST_SOURCES = $(am__libevas_engine_directfb_la_SOURCES_DIST) \
135 $(am__module_la_SOURCES_DIST)
136am__includes_HEADERS_DIST = Evas_Engine_DirectFB.h
137HEADERS = $(includes_HEADERS)
138ETAGS = etags
139CTAGS = ctags
140DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
141ACLOCAL = @ACLOCAL@
142ALLOCA = @ALLOCA@
143AMTAR = @AMTAR@
144AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
145AR = @AR@
146AS = @AS@
147AUTOCONF = @AUTOCONF@
148AUTOHEADER = @AUTOHEADER@
149AUTOMAKE = @AUTOMAKE@
150AWK = @AWK@
151CC = @CC@
152CCDEPMODE = @CCDEPMODE@
153CFLAGS = @CFLAGS@
154CHECK_CFLAGS = @CHECK_CFLAGS@
155CHECK_LIBS = @CHECK_LIBS@
156CPP = @CPP@
157CPPFLAGS = @CPPFLAGS@
158CXX = @CXX@
159CXXCPP = @CXXCPP@
160CXXDEPMODE = @CXXDEPMODE@
161CXXFLAGS = @CXXFLAGS@
162CYGPATH_W = @CYGPATH_W@
163DEFS = @DEFS@
164DEPDIR = @DEPDIR@
165DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
166DIRECTFB_LIBS = @DIRECTFB_LIBS@
167DLLTOOL = @DLLTOOL@
168DSYMUTIL = @DSYMUTIL@
169DUMPBIN = @DUMPBIN@
170ECHO_C = @ECHO_C@
171ECHO_N = @ECHO_N@
172ECHO_T = @ECHO_T@
173ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
174ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
175EDB_CFLAGS = @EDB_CFLAGS@
176EDB_LIBS = @EDB_LIBS@
177EDJE_CFLAGS = @EDJE_CFLAGS@
178EDJE_LIBS = @EDJE_LIBS@
179EET_CFLAGS = @EET_CFLAGS@
180EET_LIBS = @EET_LIBS@
181EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
182EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
183EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
184EGREP = @EGREP@
185EINA_CFLAGS = @EINA_CFLAGS@
186EINA_LIBS = @EINA_LIBS@
187EVAS_CFLAGS = @EVAS_CFLAGS@
188EVAS_LIBS = @EVAS_LIBS@
189EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
190EVIL_CFLAGS = @EVIL_CFLAGS@
191EVIL_LIBS = @EVIL_LIBS@
192EXEEXT = @EXEEXT@
193FGREP = @FGREP@
194FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
195FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
196FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
197FREETYPE_LIBS = @FREETYPE_LIBS@
198FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
199FRIBIDI_LIBS = @FRIBIDI_LIBS@
200GL_EET_CFLAGS = @GL_EET_CFLAGS@
201GL_EET_LIBS = @GL_EET_LIBS@
202GREP = @GREP@
203HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
204HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
205INSTALL = @INSTALL@
206INSTALL_DATA = @INSTALL_DATA@
207INSTALL_PROGRAM = @INSTALL_PROGRAM@
208INSTALL_SCRIPT = @INSTALL_SCRIPT@
209INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
210LD = @LD@
211LDFLAGS = @LDFLAGS@
212LIBOBJS = @LIBOBJS@
213LIBS = @LIBS@
214LIBTOOL = @LIBTOOL@
215LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
216LINEBREAK_LIBS = @LINEBREAK_LIBS@
217LIPO = @LIPO@
218LN_S = @LN_S@
219LTLIBOBJS = @LTLIBOBJS@
220MAKEINFO = @MAKEINFO@
221MKDIR_P = @MKDIR_P@
222MODULE_ARCH = @MODULE_ARCH@
223NM = @NM@
224NMEDIT = @NMEDIT@
225OBJC = @OBJC@
226OBJCDEPMODE = @OBJCDEPMODE@
227OBJCFLAGS = @OBJCFLAGS@
228OBJDUMP = @OBJDUMP@
229OBJEXT = @OBJEXT@
230OTOOL = @OTOOL@
231OTOOL64 = @OTOOL64@
232PACKAGE = @PACKAGE@
233PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
234PACKAGE_NAME = @PACKAGE_NAME@
235PACKAGE_STRING = @PACKAGE_STRING@
236PACKAGE_TARNAME = @PACKAGE_TARNAME@
237PACKAGE_URL = @PACKAGE_URL@
238PACKAGE_VERSION = @PACKAGE_VERSION@
239PATH_SEPARATOR = @PATH_SEPARATOR@
240PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
241PIXMAN_LIBS = @PIXMAN_LIBS@
242PKG_CONFIG = @PKG_CONFIG@
243PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
244PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
245PNG_CFLAGS = @PNG_CFLAGS@
246PNG_LIBS = @PNG_LIBS@
247RANLIB = @RANLIB@
248SDL_CFLAGS = @SDL_CFLAGS@
249SDL_LIBS = @SDL_LIBS@
250SED = @SED@
251SET_MAKE = @SET_MAKE@
252SHELL = @SHELL@
253SHM_OPEN_LINK = @SHM_OPEN_LINK@
254STRIP = @STRIP@
255SVG_CFLAGS = @SVG_CFLAGS@
256SVG_LIBS = @SVG_LIBS@
257VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
258VALGRIND_LIBS = @VALGRIND_LIBS@
259VERSION = @VERSION@
260VMAJ = @VMAJ@
261WIN32_CFLAGS = @WIN32_CFLAGS@
262WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
263XCB_CFLAGS = @XCB_CFLAGS@
264XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
265XCB_GL_LIBS = @XCB_GL_LIBS@
266XCB_LIBS = @XCB_LIBS@
267XEXT_CFLAGS = @XEXT_CFLAGS@
268XEXT_LIBS = @XEXT_LIBS@
269XMKMF = @XMKMF@
270X_CFLAGS = @X_CFLAGS@
271X_EXTRA_LIBS = @X_EXTRA_LIBS@
272X_LIBS = @X_LIBS@
273X_PRE_LIBS = @X_PRE_LIBS@
274abs_builddir = @abs_builddir@
275abs_srcdir = @abs_srcdir@
276abs_top_builddir = @abs_top_builddir@
277abs_top_srcdir = @abs_top_srcdir@
278ac_ct_CC = @ac_ct_CC@
279ac_ct_CXX = @ac_ct_CXX@
280ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
281ac_ct_OBJC = @ac_ct_OBJC@
282altivec_cflags = @altivec_cflags@
283am__include = @am__include@
284am__leading_dot = @am__leading_dot@
285am__quote = @am__quote@
286am__tar = @am__tar@
287am__untar = @am__untar@
288bindir = @bindir@
289build = @build@
290build_alias = @build_alias@
291build_cpu = @build_cpu@
292build_os = @build_os@
293build_vendor = @build_vendor@
294builddir = @builddir@
295datadir = @datadir@
296datarootdir = @datarootdir@
297dlopen_libs = @dlopen_libs@
298docdir = @docdir@
299dvidir = @dvidir@
300edje_cc = @edje_cc@
301efl_doxygen = @efl_doxygen@
302efl_have_doxygen = @efl_have_doxygen@
303evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
304evas_engine_buffer_libs = @evas_engine_buffer_libs@
305evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
306evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
307evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
308evas_engine_directfb_libs = @evas_engine_directfb_libs@
309evas_engine_fb_cflags = @evas_engine_fb_cflags@
310evas_engine_fb_libs = @evas_engine_fb_libs@
311evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
312evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
313evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
314evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
315evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
316evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
317evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
318evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
319evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
320evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
321evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
322evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
323evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
324evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
325evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
326evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
327evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
328evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
329evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
330evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
331evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
332evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
333evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
334evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
335evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
336evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
337evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
338evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
339evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
340evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
341evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
342evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
343evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
344evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
345evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
346evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
347evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
348evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
349evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
350evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
351evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
352evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
353evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
354evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
355evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
356evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
357evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
358evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
359evas_image_loader_png_libs = @evas_image_loader_png_libs@
360evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
361evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
362evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
363evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
364evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
365evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
366evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
367evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
368evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
369evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
370evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
371evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
372exec_prefix = @exec_prefix@
373have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
374have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
375have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
376have_evas_engine_software_x11 = @have_evas_engine_software_x11@
377have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
378have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
379have_lcov = @have_lcov@
380host = @host@
381host_alias = @host_alias@
382host_cpu = @host_cpu@
383host_os = @host_os@
384host_vendor = @host_vendor@
385htmldir = @htmldir@
386includedir = @includedir@
387infodir = @infodir@
388install_sh = @install_sh@
389libdir = @libdir@
390libexecdir = @libexecdir@
391localedir = @localedir@
392localstatedir = @localstatedir@
393lt_ECHO = @lt_ECHO@
394lt_enable_auto_import = @lt_enable_auto_import@
395mandir = @mandir@
396mkdir_p = @mkdir_p@
397oldincludedir = @oldincludedir@
398pdfdir = @pdfdir@
399pkgconfig_requires_private = @pkgconfig_requires_private@
400prefix = @prefix@
401program_transform_name = @program_transform_name@
402psdir = @psdir@
403pthread_cflags = @pthread_cflags@
404pthread_libs = @pthread_libs@
405release_info = @release_info@
406requirement_evas = @requirement_evas@
407sbindir = @sbindir@
408sharedstatedir = @sharedstatedir@
409srcdir = @srcdir@
410sysconfdir = @sysconfdir@
411target_alias = @target_alias@
412top_build_prefix = @top_build_prefix@
413top_builddir = @top_builddir@
414top_srcdir = @top_srcdir@
415version_info = @version_info@
416MAINTAINERCLEANFILES = Makefile.in
417AM_CPPFLAGS = \
418-I. \
419-I$(top_srcdir)/src/lib \
420-I$(top_srcdir)/src/lib/include \
421-I$(top_srcdir)/src/modules/engines \
422@FREETYPE_CFLAGS@ \
423@PIXMAN_CFLAGS@ \
424@EINA_CFLAGS@ \
425@evas_engine_directfb_cflags@
426
427AM_CFLAGS = @WIN32_CFLAGS@
428@BUILD_ENGINE_DIRECTFB_TRUE@DIRECTFB_SOURCES = evas_engine.c polygon.c
429@BUILD_ENGINE_DIRECTFB_TRUE@DIRECTFB_LIBADD = @evas_engine_directfb_libs@
430@BUILD_ENGINE_DIRECTFB_TRUE@includes_HEADERS = Evas_Engine_DirectFB.h
431@BUILD_ENGINE_DIRECTFB_TRUE@includesdir = $(includedir)/evas-@VMAJ@
432@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_FALSE@pkgdir = $(libdir)/evas/modules/engines/directfb/$(MODULE_ARCH)
433@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_FALSE@pkg_LTLIBRARIES = module.la
434@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_FALSE@module_la_SOURCES = $(DIRECTFB_SOURCES)
435@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_FALSE@module_la_LIBADD = @EINA_LIBS@ $(DIRECTFB_LIBADD) $(top_builddir)/src/lib/libevas.la
436@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_FALSE@module_la_LDFLAGS = -module -avoid-version
437@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
438@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_TRUE@noinst_LTLIBRARIES = libevas_engine_directfb.la
439@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_TRUE@libevas_engine_directfb_la_SOURCES = $(DIRECTFB_SOURCES)
440@BUILD_ENGINE_DIRECTFB_TRUE@@EVAS_STATIC_BUILD_DIRECTFB_TRUE@libevas_engine_directfb_la_LIBADD = $(DIRECTFB_LIBADD)
441EXTRA_DIST = evas_engine.h
442all: all-am
443
444.SUFFIXES:
445.SUFFIXES: .c .lo .o .obj
446$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
447 @for dep in $?; do \
448 case '$(am__configure_deps)' in \
449 *$$dep*) \
450 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
451 && { if test -f $@; then exit 0; else break; fi; }; \
452 exit 1;; \
453 esac; \
454 done; \
455 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/directfb/Makefile'; \
456 $(am__cd) $(top_srcdir) && \
457 $(AUTOMAKE) --gnu src/modules/engines/directfb/Makefile
458.PRECIOUS: Makefile
459Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
460 @case '$?' in \
461 *config.status*) \
462 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
463 *) \
464 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
465 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
466 esac;
467
468$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
469 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
470
471$(top_srcdir)/configure: $(am__configure_deps)
472 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
473$(ACLOCAL_M4): $(am__aclocal_m4_deps)
474 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
475$(am__aclocal_m4_deps):
476
477clean-noinstLTLIBRARIES:
478 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
479 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
480 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
481 test "$$dir" != "$$p" || dir=.; \
482 echo "rm -f \"$${dir}/so_locations\""; \
483 rm -f "$${dir}/so_locations"; \
484 done
485install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
486 @$(NORMAL_INSTALL)
487 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
488 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
489 list2=; for p in $$list; do \
490 if test -f $$p; then \
491 list2="$$list2 $$p"; \
492 else :; fi; \
493 done; \
494 test -z "$$list2" || { \
495 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
496 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
497 }
498
499uninstall-pkgLTLIBRARIES:
500 @$(NORMAL_UNINSTALL)
501 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
502 for p in $$list; do \
503 $(am__strip_dir) \
504 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
505 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
506 done
507
508clean-pkgLTLIBRARIES:
509 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
510 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
511 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
512 test "$$dir" != "$$p" || dir=.; \
513 echo "rm -f \"$${dir}/so_locations\""; \
514 rm -f "$${dir}/so_locations"; \
515 done
516libevas_engine_directfb.la: $(libevas_engine_directfb_la_OBJECTS) $(libevas_engine_directfb_la_DEPENDENCIES)
517 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_directfb_la_rpath) $(libevas_engine_directfb_la_OBJECTS) $(libevas_engine_directfb_la_LIBADD) $(LIBS)
518module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
519 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
520
521mostlyclean-compile:
522 -rm -f *.$(OBJEXT)
523
524distclean-compile:
525 -rm -f *.tab.c
526
527@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
528@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
529@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-polygon.Plo@am__quote@
530@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polygon.Plo@am__quote@
531
532.c.o:
533@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
534@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
535@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
536@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
537@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
538@am__fastdepCC_FALSE@ $(COMPILE) -c $<
539
540.c.obj:
541@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
542@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
543@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
544@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
545@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
546@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
547
548.c.lo:
549@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
550@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
551@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
552@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
553@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
554@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
555
556module_la-evas_engine.lo: evas_engine.c
557@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
558@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
559@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
560@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
561@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
562@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
563
564module_la-polygon.lo: polygon.c
565@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-polygon.lo -MD -MP -MF $(DEPDIR)/module_la-polygon.Tpo -c -o module_la-polygon.lo `test -f 'polygon.c' || echo '$(srcdir)/'`polygon.c
566@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-polygon.Tpo $(DEPDIR)/module_la-polygon.Plo
567@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
568@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='polygon.c' object='module_la-polygon.lo' libtool=yes @AMDEPBACKSLASH@
569@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
570@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-polygon.lo `test -f 'polygon.c' || echo '$(srcdir)/'`polygon.c
571
572mostlyclean-libtool:
573 -rm -f *.lo
574
575clean-libtool:
576 -rm -rf .libs _libs
577install-includesHEADERS: $(includes_HEADERS)
578 @$(NORMAL_INSTALL)
579 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
580 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
581 for p in $$list; do \
582 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
583 echo "$$d$$p"; \
584 done | $(am__base_list) | \
585 while read files; do \
586 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
587 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
588 done
589
590uninstall-includesHEADERS:
591 @$(NORMAL_UNINSTALL)
592 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
593 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
594 test -n "$$files" || exit 0; \
595 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
596 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
597
598ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
599 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
600 unique=`for i in $$list; do \
601 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
602 done | \
603 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
604 END { if (nonempty) { for (i in files) print i; }; }'`; \
605 mkid -fID $$unique
606tags: TAGS
607
608TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
609 $(TAGS_FILES) $(LISP)
610 set x; \
611 here=`pwd`; \
612 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
613 unique=`for i in $$list; do \
614 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
615 done | \
616 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
617 END { if (nonempty) { for (i in files) print i; }; }'`; \
618 shift; \
619 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
620 test -n "$$unique" || unique=$$empty_fix; \
621 if test $$# -gt 0; then \
622 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
623 "$$@" $$unique; \
624 else \
625 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
626 $$unique; \
627 fi; \
628 fi
629ctags: CTAGS
630CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
631 $(TAGS_FILES) $(LISP)
632 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
633 unique=`for i in $$list; do \
634 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
635 done | \
636 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
637 END { if (nonempty) { for (i in files) print i; }; }'`; \
638 test -z "$(CTAGS_ARGS)$$unique" \
639 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
640 $$unique
641
642GTAGS:
643 here=`$(am__cd) $(top_builddir) && pwd` \
644 && $(am__cd) $(top_srcdir) \
645 && gtags -i $(GTAGS_ARGS) "$$here"
646
647distclean-tags:
648 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
649
650distdir: $(DISTFILES)
651 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
652 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
653 list='$(DISTFILES)'; \
654 dist_files=`for file in $$list; do echo $$file; done | \
655 sed -e "s|^$$srcdirstrip/||;t" \
656 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
657 case $$dist_files in \
658 */*) $(MKDIR_P) `echo "$$dist_files" | \
659 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
660 sort -u` ;; \
661 esac; \
662 for file in $$dist_files; do \
663 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
664 if test -d $$d/$$file; then \
665 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
666 if test -d "$(distdir)/$$file"; then \
667 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
668 fi; \
669 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
670 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
671 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
672 fi; \
673 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
674 else \
675 test -f "$(distdir)/$$file" \
676 || cp -p $$d/$$file "$(distdir)/$$file" \
677 || exit 1; \
678 fi; \
679 done
680check-am: all-am
681check: check-am
682all-am: Makefile $(LTLIBRARIES) $(HEADERS)
683installdirs:
684 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
685 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
686 done
687install: install-am
688install-exec: install-exec-am
689install-data: install-data-am
690uninstall: uninstall-am
691
692install-am: all-am
693 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
694
695installcheck: installcheck-am
696install-strip:
697 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
698 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
699 `test -z '$(STRIP)' || \
700 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
701mostlyclean-generic:
702
703clean-generic:
704
705distclean-generic:
706 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
707 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
708
709maintainer-clean-generic:
710 @echo "This command is intended for maintainers to use"
711 @echo "it deletes files that may require special tools to rebuild."
712 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
713clean: clean-am
714
715clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
716 clean-pkgLTLIBRARIES mostlyclean-am
717
718distclean: distclean-am
719 -rm -rf ./$(DEPDIR)
720 -rm -f Makefile
721distclean-am: clean-am distclean-compile distclean-generic \
722 distclean-tags
723
724dvi: dvi-am
725
726dvi-am:
727
728html: html-am
729
730html-am:
731
732info: info-am
733
734info-am:
735
736install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
737
738install-dvi: install-dvi-am
739
740install-dvi-am:
741
742install-exec-am:
743
744install-html: install-html-am
745
746install-html-am:
747
748install-info: install-info-am
749
750install-info-am:
751
752install-man:
753
754install-pdf: install-pdf-am
755
756install-pdf-am:
757
758install-ps: install-ps-am
759
760install-ps-am:
761
762installcheck-am:
763
764maintainer-clean: maintainer-clean-am
765 -rm -rf ./$(DEPDIR)
766 -rm -f Makefile
767maintainer-clean-am: distclean-am maintainer-clean-generic
768
769mostlyclean: mostlyclean-am
770
771mostlyclean-am: mostlyclean-compile mostlyclean-generic \
772 mostlyclean-libtool
773
774pdf: pdf-am
775
776pdf-am:
777
778ps: ps-am
779
780ps-am:
781
782uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
783
784.MAKE: install-am install-strip
785
786.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
787 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
788 ctags distclean distclean-compile distclean-generic \
789 distclean-libtool distclean-tags distdir dvi dvi-am html \
790 html-am info info-am install install-am install-data \
791 install-data-am install-dvi install-dvi-am install-exec \
792 install-exec-am install-html install-html-am \
793 install-includesHEADERS install-info install-info-am \
794 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
795 install-ps install-ps-am install-strip installcheck \
796 installcheck-am installdirs maintainer-clean \
797 maintainer-clean-generic mostlyclean mostlyclean-compile \
798 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
799 tags uninstall uninstall-am uninstall-includesHEADERS \
800 uninstall-pkgLTLIBRARIES
801
802
803# Tell versions [3.59,3.63) of GNU make to not export all variables.
804# Otherwise a system limit (for SysV at least) may be exceeded.
805.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/directfb/evas_engine.c b/libraries/evas/src/modules/engines/directfb/evas_engine.c
new file mode 100644
index 0000000..17914ab
--- /dev/null
+++ b/libraries/evas/src/modules/engines/directfb/evas_engine.c
@@ -0,0 +1,1753 @@
1#include <assert.h>
2#include <math.h>
3#include <string.h>
4#include <sys/time.h>
5#include <time.h>
6#include "evas_engine.h"
7#include "evas_common.h" /* Also includes international specific stuff */
8
9/* Uses Evas own image_draw primitive, for comparison purposes only. */
10//#define DFB_USE_EVAS_IMAGE_DRAW 1
11//#define DFB_USE_EVAS_RECT_DRAW 1
12//#define DFB_USE_EVAS_POLYGON_DRAW 1
13//#define DFB_UPDATE_INDIVIDUAL_RECTS 1
14#define DFB_FLIP_FLAGS DSFLIP_NONE
15//#define DFB_FLIP_FLAGS (DSFLIP_ONSYNC | DSFLIP_WAIT)
16
17/* Turn on debug */
18//#define DFB_DEBUG_IMAGE 1
19//#define DFB_DEBUG_FLAGS 1
20//#define DFB_DEBUG_ACCELERATION 1
21int _evas_engine_directfb_log_dom = -1;
22
23static Evas_Func func = {};
24static Evas_Func parent_func = {};
25static IDirectFB *dfb = NULL; /* XXX HACK to work around evas image cache
26 * lack of extra data. Fix it instead later.
27 */
28
29
30/***********************************************************************
31 * Evas helpers
32 **********************************************************************/
33static void
34_context_get_color(RGBA_Draw_Context *dc, int *r, int *g, int *b, int *a)
35{
36 DATA32 col;
37
38 if (dc->mul.use)
39 col = dc->mul.col;
40 else
41 col = dc->col.col;
42
43 *r = R_VAL(&col);
44 *g = G_VAL(&col);
45 *b = B_VAL(&col);
46 *a = A_VAL(&col);
47}
48
49
50/***********************************************************************
51 * DirectFB helpers
52 **********************************************************************/
53static void
54_dfb_surface_clear(IDirectFBSurface *surface, int x, int y, int w, int h)
55{
56 DFBRegion cr;
57 DFBResult r;
58
59 cr.x1 = x;
60 cr.y1 = y;
61 cr.x2 = x + w - 1;
62 cr.y2 = y + h - 1;
63 r = surface->SetClip(surface, &cr);
64 if (r != DFB_OK)
65 goto error;
66
67 r = surface->Clear(surface, 0, 0, 0, 0);
68 if (r != DFB_OK)
69 goto error;
70
71 return;
72
73 error:
74 ERR("DirectFB: could not clear surface: %s",
75 DirectFBErrorString(r));
76}
77
78static void
79_image_clear(DirectFB_Engine_Image_Entry *image, int x, int y, int w, int h)
80{
81 if (image->cache_entry.src->flags.alpha)
82 _dfb_surface_clear(image->surface, x, y, w, h);
83}
84
85static void
86_image_autoset_alpha(DirectFB_Engine_Image_Entry *image)
87{
88 DFBResult r;
89 DFBSurfacePixelFormat fmt;
90 IDirectFBSurface *surface;
91 RGBA_Image *im;
92 int has_alpha;
93
94 surface = image->surface;
95 r = surface->GetPixelFormat(surface, &fmt);
96 if (r != DFB_OK)
97 {
98 ERR("Could not get pixel format: %s",
99 DirectFBErrorString(r));
100 return;
101 }
102
103 /* XXX: check this in more depth in future, if other PF are supported */
104 image->cache_entry.src->flags.alpha = (fmt == DSPF_ARGB);
105}
106
107static void
108_dfb_surface_update(IDirectFBSurface *surface, int x, int y, int w, int h)
109{
110 DFBRegion cr;
111 DFBResult r;
112
113 cr.x1 = x;
114 cr.y1 = y;
115 cr.x2 = x + w - 1;
116 cr.y2 = y + h - 1;
117 r = surface->Flip(surface, &cr, DSFLIP_NONE);
118 if (r != DFB_OK)
119 WRN("Could not update surface: %s",
120 DirectFBErrorString(r));
121}
122
123static IDirectFBSurface *
124_dfb_surface_from_data(IDirectFB *dfb, int w, int h, void *data)
125{
126 IDirectFBSurface *s;
127 DFBSurfaceDescription desc;
128 DFBResult r;
129
130 desc.flags = (DSDESC_CAPS | DSDESC_WIDTH | DSDESC_HEIGHT |
131 DSDESC_PIXELFORMAT | DSDESC_PREALLOCATED);
132 desc.caps = DSCAPS_PREMULTIPLIED;
133 desc.width = w;
134 desc.height = h;
135 desc.preallocated[0].data = data;
136 desc.preallocated[0].pitch = w * 4;
137 desc.preallocated[1].data = NULL;
138 desc.preallocated[1].pitch = 0;
139 desc.pixelformat = DSPF_ARGB;
140 r = dfb->CreateSurface(dfb, &desc, &s);
141 if (r != DFB_OK)
142 {
143 ERR("Cannot create DirectFB surface: %s",
144 DirectFBErrorString(r));
145 return NULL;
146 }
147
148 s->SetPorterDuff(s, DSPD_SRC_OVER);
149
150 return s;
151}
152
153static void
154_dfb_surface_free(IDirectFBSurface *surface)
155{
156 if (surface)
157 surface->Release(surface);
158}
159
160static void
161_dfb_blit_accel_caps_print(IDirectFBSurface *dst, IDirectFBSurface *src)
162{
163#ifdef DFB_DEBUG_ACCELERATION
164 DFBAccelerationMask mask;
165 DFBResult r;
166
167 r = dst->GetAccelerationMask(dst, src, &mask);
168 if (r != DFB_OK)
169 {
170 ERR("Could not retrieve acceleration mask: %s",
171 DirectFBErrorString(r));
172 return;
173 }
174
175 DBG("Acceleration: ");
176
177#define O(m) if (mask & m) DBG(#m " ")
178 O(DFXL_FILLRECTANGLE);
179 O(DFXL_DRAWRECTANGLE);
180 O(DFXL_DRAWLINE);
181 O(DFXL_FILLTRIANGLE);
182 O(DFXL_BLIT);
183 O(DFXL_STRETCHBLIT);
184 O(DFXL_TEXTRIANGLES);
185 O(DFXL_DRAWSTRING);
186#undef O
187
188 if (mask == DFXL_NONE) DBG("<NONE>");
189#endif /* DFB_DEBUG_ACCELERATION */
190}
191
192#ifdef DFB_DEBUG_FLAGS
193static const char *
194_dfb_blit_flags_str(DFBSurfaceBlittingFlags flags)
195{
196 static char buf[1024];
197
198 buf[0] = 0;
199
200#define T(m, n) \
201 do { \
202 if (flags & m) { \
203 if (buf[0] != 0) strcat(buf, " | "); \
204 strcat(buf, n); \
205 } \
206 } while (0)
207
208 T(DSBLIT_BLEND_ALPHACHANNEL, "BLEND_ALPHACHANNEL");
209 T(DSBLIT_BLEND_COLORALPHA, "BLEND_COLORALPHA");
210 T(DSBLIT_COLORIZE, "COLORIZE");
211 T(DSBLIT_SRC_COLORKEY, "SRC_COLORKEY");
212 T(DSBLIT_DST_COLORKEY, "DST_COLORKEY");
213 T(DSBLIT_SRC_PREMULTIPLY, "SRC_PREMULTIPLY");
214 T(DSBLIT_DST_PREMULTIPLY, "DST_PREMULTIPLY");
215 T(DSBLIT_DEMULTIPLY, "DEMULTIPLY");
216 T(DSBLIT_DEINTERLACE, "DSBLIT_DEINTERLACE");
217 T(DSBLIT_SRC_PREMULTCOLOR, "SRC_PREMULTCOLOR");
218 T(DSBLIT_XOR, "XOR");
219 T(DSBLIT_INDEX_TRANSLATION, "INDEX_TRANSLATION");
220#undef T
221
222 if (buf[0] == 0)
223 strcpy(buf, "NOFX");
224
225 return buf;
226}
227
228static const char *
229_dfb_draw_flags_str(DFBSurfaceDrawingFlags flags)
230{
231 static char buf[1024];
232
233 buf[0] = 0;
234
235#define T(m, n) \
236 do { \
237 if (flags & m) { \
238 if (buf[0] != 0) strcat(buf, " | "); \
239 strcat(buf, n); \
240 } \
241 } while (0)
242 T(DSDRAW_BLEND, "BLEND");
243 T(DSDRAW_DST_COLORKEY, "DST_COLORKEY");
244 T(DSDRAW_SRC_PREMULTIPLY, "SRC_PREMULTIPLY");
245 T(DSDRAW_DST_PREMULTIPLY, "DST_PREMULTIPLY");
246 T(DSDRAW_DEMULTIPLY, "DEMULTIPLY");
247 T(DSDRAW_XOR, "DSDRAW_XOR");
248#undef T
249 if (buf[0] == 0)
250 strcpy(buf, "NOFX");
251
252 return buf;
253}
254
255static const char *
256_dfb_blend_func_str(DFBSurfaceBlendFunction func)
257{
258 static char *names[] = {
259 "ZERO",
260 "ONE",
261 "SRCCOLOR",
262 "INVSRCCOLOR",
263 "SRCALPHA",
264 "INVSRCALPHA",
265 "DESTALPHA",
266 "INVDESTALPHA",
267 "DESTCOLOR",
268 "INVDESTCOLOR",
269 "SRCALPHASAT"
270 };
271 func--;
272 if ((func >= 0) && (func <= sizeof(names)/sizeof(*names)))
273 return names[func];
274 else
275 return NULL;
276}
277#endif /* DFB_DEBUG_FLAGS */
278
279int
280_dfb_surface_set_color_from_context(IDirectFBSurface *surface, RGBA_Draw_Context *dc)
281{
282 DFBSurfaceDrawingFlags flags;
283 int r, g, b, a;
284 DFBResult res;
285
286 _context_get_color(dc, &r, &g, &b, &a);
287 if (a == 0)
288 return 0;
289
290 r = 0xff * r / a;
291 g = 0xff * g / a;
292 b = 0xff * b / a;
293
294 res = surface->SetColor(surface, r, g, b, a);
295 if (res != DFB_OK)
296 goto error;
297
298 flags = (a != 255) ? DSDRAW_BLEND : DSDRAW_NOFX;
299 res = surface->SetDrawingFlags(surface, flags);
300 if (res != DFB_OK)
301 goto error;
302
303#ifdef DFB_DEBUG_FLAGS
304 DBG("Color=%d %d %d %d, flags=%s",
305 r, g, b, a, _dfb_draw_flags_str(flags));
306#endif /* DFB_DEBUG_FLAGS */
307
308 return 1;
309
310 error:
311 ERR("Could not set color from context: %s",
312 DirectFBErrorString(res));
313 return 0;
314}
315
316static int
317_dfb_surface_set_blit_params(DirectFB_Engine_Image_Entry *d, DirectFB_Engine_Image_Entry *s, RGBA_Draw_Context *dc)
318{
319 IDirectFBSurface *surface;
320 DFBSurfaceBlittingFlags blit_flags = DSBLIT_NOFX;
321 DFBResult res;
322 int r, g, b, a;
323
324 _context_get_color(dc, &r, &g, &b, &a);
325 if (a == 0)
326 return 0;
327
328 if (a != 255)
329 blit_flags = DSBLIT_BLEND_COLORALPHA | DSBLIT_SRC_PREMULTCOLOR;
330
331 if ((r != a) || (g != a) || (b != a))
332 {
333 blit_flags |= DSBLIT_COLORIZE;
334
335 r = 0xff * r / a;
336 g = 0xff * g / a;
337 b = 0xff * b / a;
338 }
339
340 if (s->cache_entry.src->flags.alpha)
341 blit_flags |= DSBLIT_BLEND_ALPHACHANNEL;
342
343 surface = d->surface;
344
345 if (blit_flags &
346 (DSBLIT_BLEND_COLORALPHA | DSBLIT_SRC_PREMULTCOLOR | DSBLIT_COLORIZE))
347 {
348 res = surface->SetColor(surface, r, g, b, a);
349 if (res != DFB_OK)
350 goto error;
351 }
352
353 res = surface->SetBlittingFlags(surface, blit_flags);
354 if (res != DFB_OK)
355 goto error;
356
357#ifdef DFB_DEBUG_FLAGS
358 DBG("sfunc=%s, dfunc=%s, color=%d %d %d %d, blit=%s, draw=%s",
359 _dfb_blend_func_str(src_func), _dfb_blend_func_str(dst_func),
360 r, g, b, a,
361 _dfb_blit_flags_str(blit_flags), _dfb_draw_flags_str(draw_flags));
362#endif /* DFB_DEBUG_FLAGS */
363
364 return 1;
365
366 error:
367 ERR("Could not set blit params: %s",
368 DirectFBErrorString(res));
369 return 0;
370}
371
372static int
373_dfb_lock_and_sync_image(IDirectFBSurface *surface, RGBA_Image *image, DFBSurfaceLockFlags flags)
374{
375 DFBResult r;
376 int pitch, sw, sh;
377 void *pixels;
378
379 r = surface->GetSize(surface, &sw, &sh);
380 if (r != DFB_OK)
381 return 0;
382
383 r = surface->Lock(surface, flags, &pixels, &pitch);
384 if (r != DFB_OK)
385 return 0;
386
387 if (pitch != (sw * 4))
388 {
389 /* XXX TODO: support other pixel formats. */
390 ERR("IDirectFBSurface pitch(%d) is not supported: "
391 "should be %d.",
392 pitch, sw * 4);
393 surface->Unlock(surface);
394 return 0;
395 }
396
397 image->cache_entry.w = sw;
398 image->cache_entry.h = sh;
399 image->image.data = pixels;
400 return 1;
401}
402
403typedef void (*_cb_for_each_cutout_t)(IDirectFBSurface *surface, RGBA_Draw_Context *dc, const DFBRegion *region, void *data);
404static void
405_dfb_surface_for_each_cutout(IDirectFBSurface *surface, RGBA_Draw_Context *dc, _cb_for_each_cutout_t cb, void *data)
406{
407 Cutout_Rects *rects;
408 int i;
409
410 rects = evas_common_draw_context_apply_cutouts(dc);
411 if (!rects)
412 {
413 DFBRegion cr;
414 cr.x1 = 0;
415 cr.y1 = 0;
416 surface->GetSize(surface, &cr.x2, &cr.y2);
417 cr.x2 -= 1;
418 cr.y2 -= 1;
419 surface->SetClip(surface, NULL);
420 cb(surface, dc, &cr, data);
421 return;
422 }
423
424 for (i = 0; i < rects->active; ++i)
425 {
426 Cutout_Rect *r;
427 DFBRegion cr;
428
429 r = rects->rects + i;
430
431 cr.x1 = r->x;
432 cr.y1 = r->y;
433 cr.x2 = r->x + r->w - 1;
434 cr.y2 = r->y + r->h - 1;
435 surface->SetClip(surface, &cr);
436 cb(surface, dc, &cr, data);
437 }
438 evas_common_draw_context_apply_clear_cutouts(rects);
439}
440
441static void
442_dfb_rect_set(DFBRectangle *r, int x, int y, int w, int h)
443{
444 r->x = x;
445 r->y = y;
446 r->w = w;
447 r->h = h;
448}
449
450
451/***********************************************************************
452 * Image Cache
453 **********************************************************************/
454static Engine_Image_Entry *
455evas_cache_image_dfb_alloc(void)
456{
457 DirectFB_Engine_Image_Entry *deie;
458
459 deie = calloc(1, sizeof (DirectFB_Engine_Image_Entry));
460
461 return (Engine_Image_Entry *)deie;
462}
463
464static void
465evas_cache_image_dfb_delete(Engine_Image_Entry *eie)
466{
467 free(eie);
468}
469
470static int
471evas_cache_image_dfb_constructor(Engine_Image_Entry *eie, void *data)
472{
473 DirectFB_Engine_Image_Entry *deie = (DirectFB_Engine_Image_Entry *)eie;
474 Render_Engine *re = data;
475 IDirectFBSurface *s;
476 RGBA_Image *im;
477
478 im = (RGBA_Image *)eie->src;
479 if (!im)
480 return EVAS_LOAD_ERROR_NONE; // XXX TODO: confirm?
481
482 evas_cache_image_load_data(&im->cache_entry);
483 if (!im->image.data)
484 return EVAS_LOAD_ERROR_NONE; // XXX TODO: confirm?
485
486 s = _dfb_surface_from_data(re->spec->dfb, eie->w, eie->h, im->image.data);
487 if (!s)
488 return EVAS_LOAD_ERROR_GENERIC;
489
490 deie->surface = s;
491 deie->flags.engine_surface = 0;
492
493 return EVAS_LOAD_ERROR_NONE;
494}
495
496static void
497evas_cache_image_dfb_destructor(Engine_Image_Entry *eie)
498{
499 DirectFB_Engine_Image_Entry *deie = (DirectFB_Engine_Image_Entry *)eie;
500
501 if (!deie->flags.engine_surface)
502 _dfb_surface_free(deie->surface);
503 deie->surface = NULL;
504}
505
506/* note: dst have some properties set, like desired size (w, h) */
507static int
508_cache_image_copy(Engine_Image_Entry *dst, const Engine_Image_Entry *src)
509{
510 DirectFB_Engine_Image_Entry *dst_deie;
511 const DirectFB_Engine_Image_Entry *src_deie;
512 IDirectFBSurface *s;
513 RGBA_Image *im;
514
515 dst_deie = (DirectFB_Engine_Image_Entry *)dst;
516 src_deie = (const DirectFB_Engine_Image_Entry *)src;
517 im = (RGBA_Image *)dst->src;
518 s = _dfb_surface_from_data(dfb, dst->w, dst->h, im->image.data);
519 if (!s)
520 return -1;
521
522 dst_deie->surface = s;
523 dst_deie->flags.engine_surface = 0;
524
525 return 0;
526}
527
528static int
529evas_cache_image_dfb_dirty(Engine_Image_Entry *dst, const Engine_Image_Entry *src)
530{
531 return _cache_image_copy(dst, src);
532}
533
534static void
535evas_cache_image_dfb_dirty_region(Engine_Image_Entry *eim, int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
536{
537 RGBA_Image *im;
538
539 im = (RGBA_Image *)eim->src;
540 im->flags |= RGBA_IMAGE_IS_DIRTY;
541}
542
543static int
544evas_cache_image_dfb_update_data(Engine_Image_Entry *dst, void *engine_data)
545{
546 DirectFB_Engine_Image_Entry *deie = (DirectFB_Engine_Image_Entry *)dst;
547 IDirectFBSurface *s = engine_data;
548 Image_Entry *ie;
549 RGBA_Image *im;
550
551 ie = dst->src;
552 im = (RGBA_Image *)ie;
553
554 if (s)
555 {
556 deie->surface = s;
557
558 /* XXX why size is required here? */
559 s->GetSize(s, &dst->w, &dst->h);
560
561 if (im)
562 {
563 im->image.data = NULL; /* IDirectFBSurface requires lock */
564 im->image.no_free = 1;
565 ie->w = dst->w;
566 ie->h = dst->h;
567 _image_autoset_alpha(deie);
568 }
569 }
570 else
571 {
572 _dfb_surface_free(deie->surface);
573 s = _dfb_surface_from_data(dfb, dst->w, dst->h, im->image.data);
574 deie->surface = s;
575 }
576
577 return 0;
578}
579
580static int
581evas_cache_image_dfb_size_set(Engine_Image_Entry *dst, const Engine_Image_Entry *src)
582{
583 return _cache_image_copy(dst, src);
584}
585
586static void
587evas_cache_image_dfb_load(Engine_Image_Entry *eim, const Image_Entry *ie)
588{
589 DirectFB_Engine_Image_Entry *deie = (DirectFB_Engine_Image_Entry *)eim;
590 IDirectFBSurface *s;
591 const RGBA_Image *im;
592
593 if (deie->surface)
594 return;
595
596 im = (const RGBA_Image *)ie;
597 s = _dfb_surface_from_data(dfb, eim->w, eim->h, im->image.data);
598 deie->surface = s;
599}
600
601static int
602evas_cache_image_dfb_mem_size_get(Engine_Image_Entry *eie)
603{
604 DirectFB_Engine_Image_Entry *deie = (DirectFB_Engine_Image_Entry *)eie;
605 DFBResult r;
606 int size, w, h;
607
608 if (!deie->surface)
609 return 0;
610
611 size = sizeof(*deie->surface);
612
613 r = deie->surface->GetSize(deie->surface, &w, &h);
614 if (r != DFB_OK)
615 {
616 ERR("Could not get surface size: %s",
617 DirectFBErrorString(r));
618 return size;
619 }
620
621 size += w * h * 4; // XXX get correct surface size using pixelformat
622
623 return size;
624}
625
626#ifdef DFB_DEBUG_IMAGE
627static void
628evas_cache_image_dfb_debug(const char *context, Engine_Image_Entry* eie)
629{
630 DirectFB_Engine_Image_Entry *eim = (DirectFB_Engine_Image_Entry *)eie;
631
632 DBG("*** %s image (%p) ***", context, eim);
633 if (eim)
634 {
635 DBG("W: %d, H: %d, R: %d, Key: %s, DFB Surface: %p",
636 eie->w, eie->h, eie->references, eie->cache_key, eim->surface);
637
638 if (eie->src)
639 DBG("Pixels: %p", ((RGBA_Image*) eie->src)->image.data);
640 }
641 DBG("*** ***");
642}
643#endif
644
645static const Evas_Cache_Engine_Image_Func _dfb_cache_engine_image_cb = {
646 NULL /* key */,
647 evas_cache_image_dfb_alloc /* alloc */,
648 evas_cache_image_dfb_delete /* dealloc */,
649 evas_cache_image_dfb_constructor /* constructor */,
650 evas_cache_image_dfb_destructor /* destructor */,
651 evas_cache_image_dfb_dirty_region /* dirty_region */,
652 evas_cache_image_dfb_dirty /* dirty */,
653 evas_cache_image_dfb_size_set /* size_set */,
654 evas_cache_image_dfb_update_data /* update_data */,
655 evas_cache_image_dfb_load /* load */,
656 evas_cache_image_dfb_mem_size_get /* mem_size_get */,
657#ifdef DFB_DEBUG_IMAGE /* debug */
658 evas_cache_image_dfb_debug
659#else
660 NULL
661#endif
662};
663
664
665/***********************************************************************
666 * Evas Engine
667 **********************************************************************/
668static void *
669evas_engine_dfb_info(Evas* e __UNUSED__)
670{
671 Evas_Engine_Info_DirectFB *info;
672 info = calloc(1, sizeof(Evas_Engine_Info_DirectFB));
673 if (!info)
674 return NULL;
675 info->magic.magic = rand();
676 return info;
677}
678
679static void
680evas_engine_dfb_info_free(Evas *e __UNUSED__, void *in)
681{
682 Evas_Engine_Info_DirectFB *info = in;
683 free(info);
684}
685
686static Eina_Bool
687_is_dfb_data_ok(IDirectFB *idfb, IDirectFBSurface *surface, int w, int h)
688{
689 DFBResult r;
690 int sw, sh;
691
692 if (!idfb)
693 {
694 ERR("missing IDirectFB");
695 return EINA_FALSE;
696 }
697 dfb = idfb;
698
699 if (!surface)
700 {
701 ERR("missing IDirectFBSurface");
702 return EINA_FALSE;
703 }
704
705 r = surface->GetSize(surface, &sw, &sh);
706 if (r != DFB_OK)
707 {
708 ERR("Could not get surface %p size: %s",
709 surface, DirectFBErrorString(r));
710 return EINA_FALSE;
711 }
712
713 if ((w > sw) || (h > sh))
714 {
715 ERR("Requested size is larger than surface: %dx%d > %dx%d",
716 w, h, sw, sh);
717 return EINA_FALSE;
718 }
719 else if ((w <= 0) || (h <= 0))
720 {
721 w = sw;
722 h = sh;
723 }
724
725 return EINA_TRUE;
726}
727
728static void
729_evas_common_init(void)
730{
731 evas_common_cpu_init();
732 evas_common_blend_init();
733 evas_common_image_init();
734 evas_common_convert_init();
735 evas_common_scale_init();
736 evas_common_rectangle_init();
737 evas_common_polygon_init();
738 evas_common_line_init();
739 evas_common_font_init();
740 evas_common_draw_init();
741 evas_common_tilebuf_init();
742}
743
744static int
745evas_engine_dfb_output_reconfigure(Render_Engine *re, int w, int h)
746{
747 if (re->screen_image)
748 evas_cache_engine_image_drop(&re->screen_image->cache_entry);
749
750 if (re->tb)
751 evas_common_tilebuf_free(re->tb);
752
753 re->tb = evas_common_tilebuf_new(w, h);
754 if (!re->tb)
755 {
756 ERR("Could not allocate tile buffer.");
757 goto failed_tilebuf;
758 }
759 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
760
761 /* We create a "fake" RGBA_Image which points to the IDirectFB surface.
762 * Each access to that surface is wrapped in Lock / Unlock calls whenever
763 * the data is manipulated directly.
764 */
765 re->screen_image = (DirectFB_Engine_Image_Entry *)
766 evas_cache_engine_image_engine(re->cache, re->spec->surface);
767 if (!re->screen_image)
768 {
769 ERR("RGBA_Image allocation from DFB failed");
770 goto failed_image;
771 }
772 re->screen_image->flags.engine_surface = 1;
773
774 _image_autoset_alpha(re->screen_image);
775 _image_clear(re->screen_image, 0, 0, w, h);
776
777 return 1;
778
779 failed_image:
780 evas_common_tilebuf_free(re->tb);
781 re->tb = NULL;
782 failed_tilebuf:
783 re->screen_image = NULL;
784 ERR("Evas DirectFB reconfigure failed");
785 return 0;
786}
787
788static void *
789_dfb_output_setup(int w, int h, const struct Evas_Engine_DirectFB_Spec *spec)
790{
791 Render_Engine *re;
792
793 if (!_is_dfb_data_ok(spec->dfb, spec->surface, w, h))
794 goto fatal;
795
796 _evas_common_init();
797
798 re = calloc(1, sizeof(Render_Engine));
799 if (!re)
800 {
801 perror("calloc");
802 goto fatal;
803 }
804 re->dfb = spec->dfb;
805 re->spec = spec;
806 re->cache = evas_cache_engine_image_init(&_dfb_cache_engine_image_cb,
807 evas_common_image_cache_get());
808 if (!re->cache)
809 {
810 ERR("Evas_Cache_Engine_Image allocation failed!");
811 goto fatal_after_engine;
812 }
813
814 if (!evas_engine_dfb_output_reconfigure(re, w, h))
815 {
816 ERR("Could not reconfigure evas engine.");
817 goto fatal_after_reconfigure;
818 }
819
820 _dfb_blit_accel_caps_print(spec->surface, NULL);
821
822 return re;
823
824
825 fatal_after_reconfigure:
826 evas_cache_engine_image_shutdown(re->cache);
827 fatal_after_engine:
828 free(re);
829 fatal:
830 CRIT("DirectFB: unable to continue, abort()!");
831 abort();
832 return NULL;
833}
834
835static int
836evas_engine_dfb_setup(Evas *e, void *in)
837{
838 Evas_Engine_Info_DirectFB *info = in;
839
840 if (!e->engine.data.output)
841 e->engine.data.output = _dfb_output_setup(e->output.w, e->output.h,
842 &info->info);
843 // XXX TODO: else reconfigure existing...
844
845 if (!e->engine.data.output)
846 return 0;
847
848 if (!e->engine.data.context)
849 e->engine.data.context =
850 e->engine.func->context_new(e->engine.data.output);
851
852 return 1;
853}
854
855static void
856evas_engine_dfb_output_free(void *data)
857{
858 Render_Engine *re = data;
859
860 if (!re)
861 return;
862
863 if (re->cache)
864 evas_cache_engine_image_shutdown(re->cache);
865
866 evas_common_tilebuf_free(re->tb);
867 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
868 free(re);
869
870 evas_common_font_shutdown();
871 evas_common_image_shutdown();
872}
873
874static void
875evas_engine_dfb_output_resize(void *data, int w, int h)
876{
877 if (!evas_engine_dfb_output_reconfigure(data, w, h))
878 ERR("Failed to resize DirectFB evas");
879}
880
881static void
882evas_engine_dfb_output_tile_size_set(void *data, int w, int h)
883{
884 Render_Engine *re = data;
885
886 evas_common_tilebuf_set_tile_size(re->tb, w, h);
887}
888
889static void
890evas_engine_dfb_output_redraws_rect_add(void *data, int x, int y, int w, int h)
891{
892 Render_Engine *re = data;
893
894 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
895}
896
897static void
898evas_engine_dfb_output_redraws_rect_del(void *data, int x, int y, int w, int h)
899{
900 Render_Engine *re = data;
901
902 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
903}
904
905static void
906evas_engine_dfb_output_redraws_clear(void *data)
907{
908 Render_Engine *re = data;
909
910 evas_common_tilebuf_clear(re->tb);
911}
912
913static void *
914evas_engine_dfb_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
915{
916 Render_Engine *re = data;
917 Tilebuf_Rect *tb_rect;
918
919 if (re->end)
920 {
921 re->end = 0;
922 return NULL;
923 }
924 if (!re->rects)
925 {
926 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
927 re->cur_rect = EINA_INLIST_GET(re->rects);
928 }
929 if (!re->cur_rect)
930 return NULL;
931
932 tb_rect = (Tilebuf_Rect*) re->cur_rect;
933 *cx = *x = tb_rect->x;
934 *cy = *y = tb_rect->y;
935 *cw = *w = tb_rect->w;
936 *ch = *h = tb_rect->h;
937 re->cur_rect = re->cur_rect->next;
938 if (!re->cur_rect)
939 {
940 evas_common_tilebuf_free_render_rects(re->rects);
941 re->rects = NULL;
942 re->end = 1;
943 }
944
945 return re->screen_image;
946}
947
948static void
949evas_engine_dfb_output_redraws_next_update_push(void *data, void *surface __UNUSED__, int x, int y, int w, int h)
950{
951 Render_Engine *re = data;
952 DFBRegion *r;
953
954 if (re->update_regions_count >= re->update_regions_limit)
955 {
956 void *tmp;
957
958 re->update_regions_limit += 16;
959
960 tmp = realloc(re->update_regions,
961 sizeof(DFBRegion) * re->update_regions_limit);
962 if (!tmp)
963 {
964 perror("realloc");
965 return;
966 }
967 re->update_regions = tmp;
968 }
969
970 r = re->update_regions + re->update_regions_count;
971 re->update_regions_count++;
972
973 r->x1 = x;
974 r->y1 = y;
975 r->x2 = x + w - 1;
976 r->y2 = y + h - 1;
977}
978
979static void
980evas_engine_dfb_output_flush(void *data)
981{
982 Render_Engine *re = data;
983 IDirectFBSurface *s = re->screen_image->surface;
984 DFBRegion *r, *r_end;
985
986 r = re->update_regions;
987 r_end = re->update_regions + re->update_regions_count;
988
989#ifdef DFB_UPDATE_INDIVIDUAL_RECTS
990 for (; r < r_end; r++)
991 s->Flip(s, r, DFB_FLIP_FLAGS);
992#else
993 DFBRegion bb;
994
995 bb.x1 = bb.y1 = 10000;
996 bb.x2 = bb.y2 = 0;
997 for (; r < r_end; r++)
998 {
999 if (bb.x1 > r->x1)
1000 bb.x1 = r->x1;
1001 if (bb.y1 > r->y1)
1002 bb.y1 = r->y1;
1003
1004 if (bb.x2 < r->x2)
1005 bb.x2 = r->x2;
1006 if (bb.y2 < r->y2)
1007 bb.y2 = r->y2;
1008 }
1009
1010 s->Flip(s, &bb, DFB_FLIP_FLAGS);
1011#endif
1012
1013 re->update_regions_count = 0;
1014}
1015
1016static void
1017evas_engine_dfb_output_idle_flush(void *data)
1018{
1019 Render_Engine *re = data;
1020
1021 if (re->update_regions_count != 0)
1022 ERR("update_regions_count not 0 as it should be!");
1023
1024 free(re->update_regions);
1025 re->update_regions_count = 0;
1026 re->update_regions_limit = 0;
1027 re->update_regions = NULL;
1028}
1029
1030/* HACK!!! -- KLUDGE!!!
1031 *
1032 * This should really use IDirectFBFont and IDirectFBSurface::DrawString(),
1033 * but to be edje-compatible IDirectFBFont::CreateFont() should be able to
1034 * load fonts from non-files, which it does not.
1035 *
1036 * Try to find a way to create own IDirectFBFont in future and load from
1037 * memory.
1038 */
1039static void
1040evas_engine_dfb_font_draw(void *data, void *context, void *surface, void *font, int x, int y, int w __UNUSED__, int h __UNUSED__, int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *intl_props)
1041{
1042 DirectFB_Engine_Image_Entry *eim = surface;
1043 IDirectFBSurface *screen;
1044 Render_Engine *re = data;
1045 RGBA_Image *im;
1046
1047 im = (RGBA_Image *)eim->cache_entry.src;
1048 screen = eim->surface;
1049 if (!_dfb_lock_and_sync_image(screen, im, DSLF_READ | DSLF_WRITE))
1050 return;
1051
1052 evas_common_font_draw(im, context, font, x, y, intl_props);
1053 evas_common_cpu_end_opt();
1054
1055 im->image.data = NULL;
1056
1057 screen->Unlock(screen);
1058}
1059
1060
1061static void
1062_cb_draw_line(IDirectFBSurface *surface, RGBA_Draw_Context *dc __UNUSED__, const DFBRegion *region __UNUSED__, void *data)
1063{
1064 const Eina_Rectangle *r = data;
1065
1066 surface->DrawLine(surface, r->x, r->y, r->w, r->h); /* x2, y2 really */
1067}
1068
1069static void
1070evas_engine_dfb_line_draw(void *data __UNUSED__, void *context, void *surface, int x1, int y1, int x2, int y2)
1071{
1072 DirectFB_Engine_Image_Entry *eim = surface;
1073 Eina_Rectangle r;
1074
1075 if (!_dfb_surface_set_color_from_context(eim->surface, context))
1076 return;
1077
1078 EINA_RECTANGLE_SET(&r, x1, y1, x2, y2); /* x2, y2 (ab)used as w, h */
1079 _dfb_surface_for_each_cutout(eim->surface, context, _cb_draw_line, &r);
1080}
1081
1082#ifndef DFB_USE_EVAS_RECT_DRAW
1083static void
1084_cb_draw_rectangle(IDirectFBSurface *surface, RGBA_Draw_Context *dc __UNUSED__, const DFBRegion *region __UNUSED__, void *data)
1085{
1086 const Eina_Rectangle *r = data;
1087
1088 surface->FillRectangle(surface, r->x, r->y, r->w, r->h);
1089}
1090
1091static void
1092evas_engine_dfb_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h)
1093{
1094 DirectFB_Engine_Image_Entry *eim = surface;
1095 IDirectFBSurface *screen;
1096 Render_Engine *re = data;
1097 RGBA_Draw_Context *dc = context;
1098 Eina_Rectangle r;
1099
1100 screen = eim->surface;
1101 if (!_dfb_surface_set_color_from_context(screen, context))
1102 {
1103 if (dc->render_op != EVAS_RENDER_COPY)
1104 return;
1105 if (!eim->cache_entry.src->flags.alpha)
1106 return;
1107 screen->SetColor(screen, 0, 0, 0, 0);
1108 screen->SetDrawingFlags(screen, DSDRAW_NOFX);
1109 }
1110
1111 EINA_RECTANGLE_SET(&r, x, y, w, h);
1112 _dfb_surface_for_each_cutout(screen, context, _cb_draw_rectangle, &r);
1113}
1114#else
1115static void
1116evas_engine_dfb_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h)
1117{
1118 DirectFB_Engine_Image_Entry *eim = surface;
1119 IDirectFBSurface *screen;
1120 Render_Engine *re = data;
1121 RGBA_Image *dst;
1122
1123 dst = (RGBA_Image *)eim->cache_entry.src;
1124 screen = eim->surface;
1125 if (!_dfb_lock_and_sync_image(screen, dst, DSLF_READ | DSLF_WRITE))
1126 return;
1127
1128 evas_common_rectangle_draw(dst, context, x, y, w, h);
1129 evas_common_cpu_end_opt();
1130
1131 dst->image.data = NULL;
1132
1133 screen->Unlock(screen);
1134}
1135#endif
1136
1137#ifndef DFB_USE_EVAS_POLYGON_DRAW
1138static void
1139evas_engine_dfb_polygon_draw(void *data __UNUSED__, void *context, void *surface, void *polygon, int x, int y)
1140{
1141 _dfb_polygon_draw(surface, context, polygon, x, y);
1142}
1143#else
1144static void
1145evas_engine_dfb_polygon_draw(void *data, void *context, void *surface, void *polygon, int x, int y)
1146{
1147 DirectFB_Engine_Image_Entry *eim = surface;
1148 IDirectFBSurface *screen;
1149 Render_Engine *re = data;
1150 RGBA_Image *dst;
1151
1152 dst = (RGBA_Image *)eim->cache_entry.src;
1153 screen = eim->surface;
1154 if (!_dfb_lock_and_sync_image(screen, dst, DSLF_READ | DSLF_WRITE))
1155 return;
1156
1157 evas_common_polygon_draw(dst, context, polygon, x, y);
1158 evas_common_cpu_end_opt();
1159
1160 dst->image.data = NULL;
1161
1162 screen->Unlock(screen);
1163}
1164#endif
1165
1166/** Image Object *******************************************************/
1167static void *
1168evas_engine_dfb_image_load(void *data, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
1169{
1170 Render_Engine *re = data;
1171
1172 *error = 0;
1173 return evas_cache_engine_image_request(re->cache, file, key, lo,
1174 data, error);
1175}
1176
1177static int
1178evas_engine_dfb_image_alpha_get(void *data __UNUSED__, void *image)
1179{
1180 DirectFB_Engine_Image_Entry *eim = image;
1181 Image_Entry *ie;
1182 RGBA_Image *im;
1183
1184 if (!eim) return 1;
1185 ie = eim->cache_entry.src;
1186 im = (RGBA_Image *)ie;
1187 switch (ie->space)
1188 {
1189 case EVAS_COLORSPACE_ARGB8888:
1190 if (ie->flags.alpha) return 1;
1191 default:
1192 break;
1193 }
1194 return 0;
1195}
1196
1197static void
1198evas_engine_dfb_image_size_get(void *data __UNUSED__, void *image, int *w, int *h)
1199{
1200 DirectFB_Engine_Image_Entry *eim = image;
1201 Image_Entry *ie;
1202
1203 ie = eim->cache_entry.src;
1204 if (w) *w = ie->w;
1205 if (h) *h = ie->h;
1206}
1207
1208static int
1209evas_engine_dfb_image_colorspace_get(void *data __UNUSED__, void *image)
1210{
1211 DirectFB_Engine_Image_Entry *eim = image;
1212
1213 if (!eim) return EVAS_COLORSPACE_ARGB8888;
1214 return eim->cache_entry.src->space;
1215}
1216
1217static void
1218evas_engine_dfb_image_colorspace_set(void *data, void *image, int cspace)
1219{
1220 DirectFB_Engine_Image_Entry *eim = image;
1221
1222 if (!eim) return;
1223 if (eim->cache_entry.src->space == cspace) return;
1224
1225 evas_cache_engine_image_colorspace(&eim->cache_entry, cspace, data);
1226}
1227
1228static void *
1229evas_engine_dfb_image_new_from_copied_data(void *data, int w, int h, DATA32* image_data, int alpha, int cspace)
1230{
1231 Render_Engine *re = data;
1232
1233 return evas_cache_engine_image_copied_data(re->cache, w, h, image_data,
1234 alpha, cspace, NULL);
1235}
1236
1237static void *
1238evas_engine_dfb_image_new_from_data(void *data, int w, int h, DATA32* image_data, int alpha, int cspace)
1239{
1240 Render_Engine *re = data;
1241
1242 return evas_cache_engine_image_data(re->cache, w, h, image_data,
1243 alpha, cspace, NULL);
1244}
1245
1246static void
1247evas_engine_dfb_image_free(void *data __UNUSED__, void *image)
1248{
1249 DirectFB_Engine_Image_Entry *eim = image;
1250
1251 evas_cache_engine_image_drop(&eim->cache_entry);
1252}
1253
1254static void *
1255evas_engine_dfb_image_size_set(void *data __UNUSED__, void *image, int w, int h)
1256{
1257 DirectFB_Engine_Image_Entry *eim = image;
1258
1259 return evas_cache_engine_image_size_set(&eim->cache_entry, w, h);
1260}
1261
1262static void *
1263evas_engine_dfb_image_dirty_region(void *data __UNUSED__, void *image, int x, int y, int w, int h)
1264{
1265 DirectFB_Engine_Image_Entry *eim = image;
1266
1267 return evas_cache_engine_image_dirty(&eim->cache_entry, x, y, w, h);
1268}
1269
1270static void *
1271evas_engine_dfb_image_data_get(void *data __UNUSED__, void *image, int to_write, DATA32** image_data)
1272{
1273 DirectFB_Engine_Image_Entry *deie = image;
1274 Engine_Image_Entry *ce;
1275 Image_Entry *ie;
1276 RGBA_Image *im;
1277
1278 if (!deie)
1279 {
1280 *image_data = NULL;
1281 return NULL;
1282 }
1283
1284 ce = (Engine_Image_Entry *)deie;
1285 ie = ce->src;
1286 im = (RGBA_Image *)ie;
1287
1288 switch (ie->space)
1289 {
1290 case EVAS_COLORSPACE_ARGB8888:
1291 {
1292 DFBResult r;
1293 IDirectFBSurface *s;
1294 void *pixels;
1295 int pitch;
1296
1297 if (to_write)
1298 deie = (DirectFB_Engine_Image_Entry *)
1299 evas_cache_engine_image_dirty(ce, 0, 0, ie->w, ie->h);
1300
1301 evas_cache_engine_image_load_data(ce);
1302
1303 ce = (Engine_Image_Entry *)deie;
1304 ie = ce->src;
1305 im = (RGBA_Image *)ie;
1306 s = deie->surface;
1307
1308 if (to_write)
1309 {
1310 r = s->Lock(s, DSLF_WRITE, &pixels, &pitch);
1311 if (r != DFB_OK)
1312 goto error;
1313 deie->flags.is_locked = 1;
1314 }
1315 else
1316 {
1317 r = s->Lock(s, DSLF_READ, &pixels, &pitch);
1318 if (r != DFB_OK)
1319 goto error;
1320 s->Unlock(s);
1321 }
1322
1323 *image_data = pixels;
1324 im->image.data = pixels; /* remember for _put() */
1325 break;
1326
1327 error:
1328 ERR("Could not lock surface %p: %s",
1329 s, DirectFBErrorString(r));
1330 *image_data = NULL;
1331 break;
1332 }
1333 case EVAS_COLORSPACE_YCBCR422P709_PL:
1334 case EVAS_COLORSPACE_YCBCR422P601_PL:
1335 case EVAS_COLORSPACE_YCBCR422601_PL:
1336 /* XXX untested */
1337 *image_data = im->cs.data;
1338 break;
1339 default:
1340 abort();
1341 break;
1342 }
1343 return deie;
1344}
1345
1346static void *
1347evas_engine_dfb_image_data_put(void *data, void *image, DATA32* image_data)
1348{
1349 DirectFB_Engine_Image_Entry *deie = image;
1350 Render_Engine *re = data;
1351 Engine_Image_Entry *ce;
1352 Image_Entry *ie;
1353 RGBA_Image *im;
1354
1355 if (!deie) return NULL;
1356
1357 ce = (Engine_Image_Entry *)deie;
1358 ie = ce->src;
1359 im = (RGBA_Image*)ie;
1360
1361 switch (ie->space)
1362 {
1363 case EVAS_COLORSPACE_ARGB8888:
1364 if (image_data == im->image.data)
1365 {
1366 if (deie->flags.is_locked)
1367 {
1368 deie->surface->Unlock(deie->surface);
1369 deie->flags.is_locked = 0;
1370 }
1371 }
1372 else
1373 {
1374 int alpha, cspace;
1375
1376 alpha = func.image_alpha_get(re, deie);
1377 cspace = func.image_colorspace_get(re, deie);
1378
1379 evas_cache_engine_image_drop(ce);
1380 deie = (DirectFB_Engine_Image_Entry *)
1381 evas_cache_engine_image_data(re->cache, ce->w, ce->h,
1382 image_data, alpha, cspace, NULL);
1383 }
1384 break;
1385 case EVAS_COLORSPACE_YCBCR422P601_PL:
1386 case EVAS_COLORSPACE_YCBCR422P709_PL:
1387 case EVAS_COLORSPACE_YCBCR422601_PL:
1388 /* XXX untested */
1389 if (image_data != im->cs.data)
1390 {
1391 if (im->cs.data)
1392 if (!im->cs.no_free)
1393 free(im->cs.data);
1394 im->cs.data = image_data;
1395 evas_common_image_colorspace_dirty(im);
1396 }
1397 break;
1398 default:
1399 abort();
1400 break;
1401 }
1402 return deie;
1403}
1404
1405static void
1406evas_engine_dfb_image_data_preload_request(void *data __UNUSED__, void *image, const void *target)
1407{
1408 DirectFB_Engine_Image_Entry *deie = image;
1409 RGBA_Image *im;
1410
1411 if (!deie) return ;
1412 im = (RGBA_Image*) deie->cache_entry.src;
1413 if (!im) return ;
1414 evas_cache_image_preload_data(&im->cache_entry, target);
1415}
1416
1417static void
1418evas_engine_dfb_image_data_preload_cancel(void *data __UNUSED__, void *image, const void *target)
1419{
1420 DirectFB_Engine_Image_Entry *deie = image;
1421 RGBA_Image *im;
1422
1423 if (!deie) return ;
1424 im = (RGBA_Image*) deie->cache_entry.src;
1425 if (!im) return ;
1426 evas_cache_image_preload_cancel(&im->cache_entry, target);
1427}
1428
1429static void *
1430evas_engine_dfb_image_alpha_set(void *data __UNUSED__, void *image, int has_alpha)
1431{
1432 DirectFB_Engine_Image_Entry *eim = image;
1433 Engine_Image_Entry *ce;
1434 Image_Entry *ie;
1435 RGBA_Image *im;
1436
1437 if (!eim) return NULL;
1438
1439 ce = &eim->cache_entry;
1440 ie = ce->src;
1441 im = (RGBA_Image*)ie;
1442
1443 if (ie->space != EVAS_COLORSPACE_ARGB8888)
1444 {
1445 ie->flags.alpha = 0;
1446 return eim;
1447 }
1448
1449 eim = (DirectFB_Engine_Image_Entry *)
1450 evas_cache_engine_image_dirty(ce, 0, 0, ce->w, ce->h);
1451
1452 ie->flags.alpha = !!has_alpha;
1453 return eim;
1454}
1455
1456struct _for_each_cutout_image
1457{
1458 IDirectFBSurface *image;
1459 DFBRectangle src, dst;
1460};
1461
1462static void
1463_cb_draw_image_unscaled(IDirectFBSurface *surface, RGBA_Draw_Context *dc __UNUSED__, const DFBRegion *region __UNUSED__, void *data)
1464{
1465 const struct _for_each_cutout_image *p = data;
1466
1467 surface->Blit(surface, p->image, &p->src, p->dst.x, p->dst.y);
1468}
1469
1470static void
1471_cb_draw_image_scaled(IDirectFBSurface *surface, RGBA_Draw_Context *dc __UNUSED__, const DFBRegion *region __UNUSED__, void *data)
1472{
1473 const struct _for_each_cutout_image *p = data;
1474
1475 surface->StretchBlit(surface, p->image, &p->src, &p->dst);
1476}
1477
1478#ifndef DFB_USE_EVAS_IMAGE_DRAW
1479static void
1480evas_engine_dfb_image_draw(void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth __UNUSED__)
1481{
1482 DirectFB_Engine_Image_Entry *eim = surface;
1483 Render_Engine *re = data;
1484 IDirectFBSurface *screen;
1485 DirectFB_Engine_Image_Entry *deie = image;
1486 struct _for_each_cutout_image p;
1487 _cb_for_each_cutout_t cb;
1488
1489 screen = eim->surface;
1490 if (deie->cache_entry.src->space == EVAS_COLORSPACE_ARGB8888)
1491 evas_cache_engine_image_load_data(&deie->cache_entry);
1492
1493 evas_common_image_colorspace_normalize((RGBA_Image *)deie->cache_entry.src);
1494
1495 _dfb_surface_set_blit_params(eim, deie, context);
1496
1497 _dfb_rect_set(&p.src, src_x, src_y, src_w, src_h);
1498 _dfb_rect_set(&p.dst, dst_x, dst_y, dst_w, dst_h);
1499 p.image = deie->surface;
1500
1501 if ((src_w == dst_w) && (src_h == dst_h))
1502 cb = _cb_draw_image_unscaled;
1503 else
1504 cb = _cb_draw_image_scaled;
1505
1506 _dfb_blit_accel_caps_print(screen, deie->surface);
1507 _dfb_surface_for_each_cutout(screen, context, cb, &p);
1508}
1509#else /* DFB_USE_EVAS_IMAGE_DRAW */
1510static void
1511evas_engine_dfb_image_draw(void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth)
1512{
1513 DirectFB_Engine_Image_Entry *deie = image;
1514 DirectFB_Engine_Image_Entry *eim = surface;
1515 Render_Engine *re = data;
1516 RGBA_Image *dst, *src;
1517 IDirectFBSurface *screen;
1518
1519 screen = eim->surface;
1520 if (deie->cache_entry.src->space == EVAS_COLORSPACE_ARGB8888)
1521 evas_cache_engine_image_load_data(&deie->cache_entry);
1522
1523 evas_common_image_colorspace_normalize((RGBA_Image *)deie->cache_entry.src);
1524
1525 dst = (RGBA_Image *)eim->cache_entry.src;
1526 if (!_dfb_lock_and_sync_image(screen, dst, DSLF_READ | DSLF_WRITE))
1527 return;
1528
1529 src = (RGBA_Image *)deie->cache_entry.src;
1530 if (!_dfb_lock_and_sync_image(deie->surface, src, DSLF_READ))
1531 goto error_src;
1532
1533 if (smooth)
1534 evas_common_scale_rgba_in_to_out_clip_smooth(src, dst, context,
1535 src_x, src_y, src_w, src_h,
1536 dst_x, dst_y, dst_w, dst_h);
1537 else
1538 evas_common_scale_rgba_in_to_out_clip_sample(src, dst, context,
1539 src_x, src_y, src_w, src_h,
1540 dst_x, dst_y, dst_w, dst_h);
1541 evas_common_cpu_end_opt();
1542
1543 dst->image.data = NULL;
1544
1545 screen->Unlock(screen);
1546 deie->surface->Unlock(deie->surface);
1547
1548 return;
1549
1550 error_src:
1551 screen->Unlock(screen);
1552}
1553#endif
1554
1555static void
1556evas_engine_dfb_image_map_draw(void *data __UNUSED__, void *context, void *surface, void *image, int npoints, RGBA_Map_Point *p, int smooth, int level)
1557{
1558 Render_Engine *re = (Render_Engine*) data;
1559 DirectFB_Engine_Image_Entry *deie = image;
1560 DirectFB_Engine_Image_Entry *eim = surface;
1561 IDirectFBSurface *screen;
1562 RGBA_Image *dst, *src;
1563
1564 if (!deie || !eim) return ;
1565
1566 screen = eim->surface;
1567 dst = (RGBA_Image *) eim->cache_entry.src;
1568 if (!_dfb_lock_and_sync_image(screen, dst, DSLF_READ | DSLF_WRITE))
1569 return;
1570
1571 src = (RGBA_Image *)deie->cache_entry.src;
1572 if (!_dfb_lock_and_sync_image(deie->surface, src, DSLF_READ))
1573 goto error_src;
1574
1575 evas_common_map_rgba(src, dst, context, 4, p, smooth, level);
1576 evas_common_cpu_end_opt();
1577
1578 screen->Unlock(screen);
1579 deie->surface->Unlock(deie->surface);
1580
1581 return ;
1582
1583 error_src:
1584 screen->Unlock(screen);
1585}
1586
1587static void *
1588evas_engine_dfb_image_map_surface_new(void *data, int w, int h, int alpha)
1589{
1590 Render_Engine *re = (Render_Engine*) data;
1591 void *surface;
1592
1593 surface = evas_cache_engine_image_copied_data(re->cache,
1594 w, h, NULL, alpha,
1595 EVAS_COLORSPACE_ARGB8888,
1596 NULL);
1597 return surface;
1598}
1599
1600static void
1601evas_engine_dfb_image_map_surface_free(void *data __UNUSED__, void *surface)
1602{
1603 evas_cache_engine_image_drop(surface);
1604}
1605
1606
1607static void
1608evas_engine_dfb_image_cache_flush(void *data)
1609{
1610 Render_Engine *re = data;
1611 int size;
1612
1613 size = evas_cache_engine_image_get(re->cache);
1614 evas_cache_engine_image_set(re->cache, 0);
1615 evas_cache_engine_image_set(re->cache, size);
1616}
1617
1618static void
1619evas_engine_dfb_image_cache_set(void *data, int bytes)
1620{
1621 Render_Engine *re = data;
1622
1623 evas_cache_engine_image_set(re->cache, bytes);
1624}
1625
1626static int
1627evas_engine_dfb_image_cache_get(void *data)
1628{
1629 Render_Engine *re = data;
1630
1631 return evas_cache_engine_image_get(re->cache);
1632}
1633
1634static char *
1635evas_engine_dfb_image_comment_get(void *data __UNUSED__, void *image, char *key __UNUSED__)
1636{
1637 DirectFB_Engine_Image_Entry *eim = image;
1638 RGBA_Image *im;
1639
1640 if (!eim) return NULL;
1641 im = (RGBA_Image *)eim->cache_entry.src;
1642
1643 return im->info.comment;
1644}
1645
1646static void
1647evas_engine_dfb_image_scale_hint_set(void *data __UNUSED__, void *image, int hint)
1648{
1649}
1650
1651static int
1652evas_engine_dfb_image_scale_hint_get(void *data __UNUSED__, void *image)
1653{
1654 return EVAS_IMAGE_SCALE_HINT_NONE;
1655}
1656
1657static Eina_Bool
1658evas_engine_dfb_canvas_alpha_get(void *data, void *context)
1659{
1660 Render_Engine *re = data;
1661
1662 return re->screen_image->cache_entry.src->flags.alpha;
1663}
1664
1665static int
1666module_open(Evas_Module *em)
1667{
1668 if (!em) return 0;
1669 /* get whatever engine module we inherit from */
1670 if (!_evas_module_engine_inherit(&parent_func, "software_generic")) return 0;
1671 _evas_engine_directfb_log_dom = eina_log_domain_register
1672 ("evas-directfb", EVAS_DEFAULT_LOG_COLOR);
1673 if (_evas_engine_directfb_log_dom < 0)
1674 {
1675 EINA_LOG_ERR("Can not create a module log domain.");
1676 return 0;
1677 }
1678 /* store it for later use */
1679 func = parent_func;
1680 /* now to override methods */
1681#define ORD(f) EVAS_API_OVERRIDE(f, &func, evas_engine_dfb_)
1682 ORD(info);
1683 ORD(info_free);
1684 ORD(setup);
1685 ORD(canvas_alpha_get);
1686 ORD(output_free);
1687 ORD(output_resize);
1688 ORD(output_tile_size_set);
1689 ORD(output_redraws_rect_add);
1690 ORD(output_redraws_rect_del);
1691 ORD(output_redraws_clear);
1692 ORD(output_redraws_next_update_get);
1693 ORD(output_redraws_next_update_push);
1694 ORD(output_flush);
1695 ORD(output_idle_flush);
1696 ORD(image_load);
1697 ORD(image_new_from_data);
1698 ORD(image_new_from_copied_data);
1699 ORD(image_colorspace_set);
1700 ORD(image_colorspace_get);
1701 ORD(image_free);
1702 ORD(image_size_set);
1703 ORD(image_size_get);
1704 ORD(image_dirty_region);
1705 ORD(image_data_get);
1706 ORD(image_data_put);
1707 ORD(image_data_preload_request);
1708 ORD(image_data_preload_cancel);
1709 ORD(image_alpha_set);
1710 ORD(image_alpha_get);
1711 ORD(image_draw);
1712 ORD(image_comment_get);
1713 ORD(image_cache_flush);
1714 ORD(image_cache_set);
1715 ORD(image_cache_get);
1716 ORD(font_draw);
1717 ORD(line_draw);
1718 ORD(rectangle_draw);
1719 ORD(polygon_draw);
1720 ORD(image_scale_hint_set);
1721 ORD(image_scale_hint_get);
1722
1723 ORD(image_map_draw);
1724 ORD(image_map_surface_new);
1725 ORD(image_map_surface_free);
1726
1727 /* now advertise out own api */
1728 em->functions = (void *)(&func);
1729 return 1;
1730}
1731
1732static void
1733module_close(Evas_Module *em)
1734{
1735 eina_log_domain_unregister(_evas_engine_directfb_log_dom);
1736}
1737
1738static Evas_Module_Api evas_modapi =
1739{
1740 EVAS_MODULE_API_VERSION,
1741 "directfb",
1742 "ProFUSION embedded systems",
1743 {
1744 module_open,
1745 module_close
1746 }
1747};
1748
1749EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, directfb);
1750
1751#ifndef EVAS_STATIC_BUILD_DIRECTFB
1752EVAS_EINA_MODULE_DEFINE(engine, directfb);
1753#endif
diff --git a/libraries/evas/src/modules/engines/directfb/evas_engine.h b/libraries/evas/src/modules/engines/directfb/evas_engine.h
new file mode 100644
index 0000000..7ad1e38
--- /dev/null
+++ b/libraries/evas/src/modules/engines/directfb/evas_engine.h
@@ -0,0 +1,71 @@
1#ifndef EVAS_ENGINE_DIRECTFB_H
2#define EVAS_ENGINE_DIRECTFB_H
3
4#include "evas_common.h"
5#include "evas_private.h"
6#include "Evas_Engine_DirectFB.h"
7
8extern int _evas_engine_directfb_log_dom ;
9
10#ifdef ERR
11# undef ERR
12#endif
13#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_directfb_log_dom, __VA_ARGS__)
14
15#ifdef DBG
16# undef DBG
17#endif
18#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_directfb_log_dom, __VA_ARGS__)
19
20#ifdef INF
21# undef INF
22#endif
23#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_directfb_log_dom, __VA_ARGS__)
24
25#ifdef WRN
26# undef WRN
27#endif
28#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_directfb_log_dom, __VA_ARGS__)
29
30#ifdef CRIT
31# undef CRIT
32#endif
33#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_directfb_log_dom, __VA_ARGS__)
34
35typedef struct _DirectFB_Engine_Image_Entry DirectFB_Engine_Image_Entry;
36struct _DirectFB_Engine_Image_Entry
37{
38 Engine_Image_Entry cache_entry;
39 IDirectFBSurface *surface;
40
41 struct
42 {
43 Eina_Bool engine_surface : 1;
44 Eina_Bool is_locked : 1;
45 } flags;
46};
47
48typedef struct _Render_Engine Render_Engine;
49struct _Render_Engine
50{
51 DirectFB_Engine_Image_Entry *screen_image;
52 const struct Evas_Engine_DirectFB_Spec *spec;
53 IDirectFB *dfb;
54
55 Evas_Cache_Engine_Image *cache;
56
57 Tilebuf *tb;
58 Tilebuf_Rect *rects;
59 Eina_Inlist *cur_rect;
60
61 DFBRegion *update_regions;
62 unsigned int update_regions_count;
63 unsigned int update_regions_limit;
64
65 Eina_Bool end : 1;
66};
67
68int _dfb_surface_set_color_from_context(IDirectFBSurface *surface, RGBA_Draw_Context *dc);
69void _dfb_polygon_draw(IDirectFBSurface *surface, RGBA_Draw_Context *dc, Eina_Inlist *points, int x, int y);
70
71#endif
diff --git a/libraries/evas/src/modules/engines/directfb/polygon.c b/libraries/evas/src/modules/engines/directfb/polygon.c
new file mode 100644
index 0000000..715fd84
--- /dev/null
+++ b/libraries/evas/src/modules/engines/directfb/polygon.c
@@ -0,0 +1,269 @@
1#include <math.h>
2#include "evas_engine.h"
3
4/* reduce calls to DirectFB (FillSpans), but uses twice as much memory */
5//#define USE_SPAN_RECTS 1
6
7#define MAX_SPANS 512
8typedef struct _RGBA_Edge RGBA_Edge;
9typedef struct _RGBA_Vertex RGBA_Vertex;
10
11struct _RGBA_Edge
12{
13 double x, dx;
14 int i;
15};
16
17struct _RGBA_Vertex
18{
19 double x, y;
20 int i;
21};
22
23#define POLY_EDGE_DEL(_i) \
24{ \
25 int _j; \
26 \
27 for (_j = 0; (_j < num_active_edges) && (edges[_j].i != _i); _j++); \
28 if (_j < num_active_edges) \
29 { \
30 num_active_edges--; \
31 memmove(&(edges[_j]), &(edges[_j + 1]), \
32 (num_active_edges - _j) * sizeof(RGBA_Edge)); \
33 } \
34}
35
36#define POLY_EDGE_ADD(_i, _y) \
37{ \
38 int _j; \
39 float _dx; \
40 RGBA_Vertex *_p, *_q; \
41 if (_i < (n - 1)) _j = _i + 1; \
42 else _j = 0; \
43 if (point[_i].y < point[_j].y) \
44 { \
45 _p = &(point[_i]); \
46 _q = &(point[_j]); \
47 } \
48 else \
49 { \
50 _p = &(point[_j]); \
51 _q = &(point[_i]); \
52 } \
53 edges[num_active_edges].dx = _dx = (_q->x - _p->x) / (_q->y - _p->y); \
54 edges[num_active_edges].x = (_dx * ((float)_y + 0.5 - _p->y)) + _p->x; \
55 edges[num_active_edges].i = _i; \
56 num_active_edges++; \
57}
58
59static int
60polygon_point_sorter(const void *a, const void *b)
61{
62 RGBA_Vertex *p, *q;
63
64 p = (RGBA_Vertex *)a;
65 q = (RGBA_Vertex *)b;
66 if (p->y <= q->y) return -1;
67 return 1;
68}
69
70static int
71polygon_edge_sorter(const void *a, const void *b)
72{
73 RGBA_Edge *p, *q;
74
75 p = (RGBA_Edge *)a;
76 q = (RGBA_Edge *)b;
77 if (p->x <= q->x) return -1;
78 return 1;
79}
80
81#ifndef USE_SPAN_RECTS
82typedef DFBSpan span_t;
83
84static void
85polygon_span_add(span_t *span, int y __UNUSED__, int x, int w)
86{
87 span->x = x;
88 span->w = w;
89}
90
91static void
92polygon_spans_fill(IDirectFBSurface *surface, int y, const span_t *spans, int n_spans)
93{
94 /* directfb automatically increments y for each span */
95 for (; n_spans > 0; n_spans--, spans++)
96 surface->FillSpans(surface, y, spans, 1);
97}
98#else /* USE_SPAN_RECTS */
99typedef DFBRectangle span_t;
100
101static void
102polygon_span_add(span_t *span, int y, int x, int w)
103{
104 span->x = x;
105 span->y = y;
106 span->w = w;
107 span->h = 1;
108}
109
110static void
111polygon_spans_fill(IDirectFBSurface *surface, int y, const span_t *spans, int n_spans)
112{
113 surface->FillRectangles(surface, spans, n_spans);
114}
115#endif /* USE_SPAN_RECTS */
116
117
118void
119_dfb_polygon_draw(IDirectFBSurface *surface, RGBA_Draw_Context *dc, Eina_Inlist *points, int px, int py)
120{
121 RGBA_Polygon_Point *pt;
122 RGBA_Vertex *point;
123 RGBA_Edge *edges;
124 int num_active_edges;
125 int n;
126 int i, j, k;
127 int y0, y1, y;
128 int ext_x, ext_y, ext_w, ext_h;
129 int *sorted_index;
130
131 ext_x = 0;
132 ext_y = 0;
133 surface->GetSize(surface, &ext_w, &ext_h);
134 if (dc->clip.use)
135 {
136 if (dc->clip.x > ext_x)
137 {
138 ext_w += ext_x - dc->clip.x;
139 ext_x = dc->clip.x;
140 }
141 if ((ext_x + ext_w) > (dc->clip.x + dc->clip.w))
142 {
143 ext_w = (dc->clip.x + dc->clip.w) - ext_x;
144 }
145 if (dc->clip.y > ext_y)
146 {
147 ext_h += ext_y - dc->clip.y;
148 ext_y = dc->clip.y;
149 }
150 if ((ext_y + ext_h) > (dc->clip.y + dc->clip.h))
151 {
152 ext_h = (dc->clip.y + dc->clip.h) - ext_y;
153 }
154 }
155 if ((ext_w <= 0) || (ext_h <= 0)) return;
156
157 evas_common_cpu_end_opt();
158
159 if (!_dfb_surface_set_color_from_context(surface, dc))
160 return;
161
162 n = 0; EINA_INLIST_FOREACH(points, pt) n++;
163 if (n < 3) return;
164 edges = malloc(sizeof(RGBA_Edge) * n);
165 if (!edges) return;
166 point = malloc(sizeof(RGBA_Vertex) * n);
167 if (!point)
168 {
169 free(edges);
170 return;
171 }
172 sorted_index = malloc(sizeof(int) * n);
173 if (!sorted_index)
174 {
175 free(edges);
176 free(point);
177 return;
178 }
179
180 k = 0;
181 EINA_INLIST_FOREACH(points, pt)
182 {
183 point[k].x = pt->x + px;
184 point[k].y = pt->y + py;
185 point[k].i = k;
186 k++;
187 }
188 qsort(point, n, sizeof(RGBA_Vertex), polygon_point_sorter);
189 for (k = 0; k < n; k++) sorted_index[k] = point[k].i;
190 k = 0;
191 EINA_INLIST_FOREACH(points, pt)
192 {
193 point[k].x = pt->x + px;
194 point[k].y = pt->y + py;
195 point[k].i = k;
196 k++;
197 }
198
199 y0 = MAX(ext_y, ceil(point[sorted_index[0]].y - 0.5));
200 y1 = MIN(ext_y + ext_h - 1, floor(point[sorted_index[n - 1]].y - 0.5));
201
202 k = 0;
203 num_active_edges = 0;
204
205 for (y = y0; y <= y1; y++)
206 {
207 span_t spans[MAX_SPANS];
208 unsigned int n_spans = 0;
209
210 for (; (k < n) && (point[sorted_index[k]].y <= ((double)y + 0.5)); k++)
211 {
212 i = sorted_index[k];
213
214 if (i > 0) j = i - 1;
215 else j = n - 1;
216 if (point[j].y <= ((double)y - 0.5))
217 {
218 POLY_EDGE_DEL(j)
219 }
220 else if (point[j].y > ((double)y + 0.5))
221 {
222 POLY_EDGE_ADD(j, y)
223 }
224 if (i < (n - 1)) j = i + 1;
225 else j = 0;
226 if (point[j].y <= ((double)y - 0.5))
227 {
228 POLY_EDGE_DEL(i)
229 }
230 else if (point[j].y > ((double)y + 0.5))
231 {
232 POLY_EDGE_ADD(i, y)
233 }
234 }
235
236 qsort(edges, num_active_edges, sizeof(RGBA_Edge), polygon_edge_sorter);
237
238 for (j = 0; j < num_active_edges; j += 2)
239 {
240 int x0, x1;
241
242 x0 = ceil(edges[j].x - 0.5);
243 if (j < (num_active_edges - 1))
244 x1 = floor(edges[j + 1].x - 0.5);
245 else
246 x1 = x0;
247 if ((x1 >= ext_x) && (x0 < (ext_x + ext_w)) && (x0 <= x1))
248 {
249 if (n_spans == MAX_SPANS)
250 {
251 polygon_spans_fill(surface, y, spans, n_spans);
252 n_spans = 0;
253 }
254
255 polygon_span_add(spans + n_spans, y, x0, (x1 - x0) + 1);
256 n_spans++;
257 }
258 edges[j].x += edges[j].dx;
259 edges[j + 1].x += edges[j + 1].dx;
260 }
261
262 if (n_spans)
263 polygon_spans_fill(surface, y, spans, n_spans);
264 }
265
266 free(edges);
267 free(point);
268 free(sorted_index);
269}
diff --git a/libraries/evas/src/modules/engines/fb/Evas_Engine_FB.h b/libraries/evas/src/modules/engines/fb/Evas_Engine_FB.h
new file mode 100644
index 0000000..b548237
--- /dev/null
+++ b/libraries/evas/src/modules/engines/fb/Evas_Engine_FB.h
@@ -0,0 +1,25 @@
1#ifndef _EVAS_ENGINE_FB_H
2#define _EVAS_ENGINE_FB_H
3
4typedef struct _Evas_Engine_Info_FB Evas_Engine_Info_FB;
5
6struct _Evas_Engine_Info_FB
7{
8 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
9 /* at you and make nasty noises */
10 Evas_Engine_Info magic;
11
12 struct {
13
14 int virtual_terminal;
15 int device_number;
16 int refresh;
17 int rotation;
18 } info;
19
20 /* non-blocking or blocking mode */
21 Evas_Engine_Render_Mode render_mode;
22};
23#endif
24
25
diff --git a/libraries/evas/src/modules/engines/fb/Makefile.am b/libraries/evas/src/modules/engines/fb/Makefile.am
new file mode 100644
index 0000000..55127bb
--- /dev/null
+++ b/libraries/evas/src/modules/engines/fb/Makefile.am
@@ -0,0 +1,48 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9@FREETYPE_CFLAGS@ \
10@PIXMAN_CFLAGS@ \
11@EINA_CFLAGS@ \
12@evas_engine_fb_cflags@
13
14if BUILD_ENGINE_FB
15
16FB_SOURCES = \
17evas_engine.c \
18evas_fb_main.c \
19evas_outbuf.c
20
21FB_LIBADD = @evas_engine_fb_libs@
22
23
24includes_HEADERS = Evas_Engine_FB.h
25includesdir = $(includedir)/evas-@VMAJ@
26
27if !EVAS_STATIC_BUILD_FB
28
29pkgdir = $(libdir)/evas/modules/engines/fb/$(MODULE_ARCH)
30pkg_LTLIBRARIES = module.la
31module_la_SOURCES = $(FB_SOURCES)
32module_la_LIBADD = @EINA_LIBS@ $(FB_LIBADD) $(top_builddir)/src/lib/libevas.la
33module_la_LDFLAGS = -module -avoid-version
34module_la_LIBTOOLFLAGS = --tag=disable-static
35
36else
37
38noinst_LTLIBRARIES = libevas_engine_fb.la
39
40libevas_engine_fb_la_SOURCES = $(FB_SOURCES)
41libevas_engine_fb_la_LIBADD = $(FB_LIBADD)
42
43endif
44endif
45
46EXTRA_DIST = \
47evas_engine.h \
48evas_fb.h
diff --git a/libraries/evas/src/modules/engines/fb/Makefile.in b/libraries/evas/src/modules/engines/fb/Makefile.in
new file mode 100644
index 0000000..aec24ff
--- /dev/null
+++ b/libraries/evas/src/modules/engines/fb/Makefile.in
@@ -0,0 +1,825 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/fb
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84am__DEPENDENCIES_1 =
85@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_TRUE@libevas_engine_fb_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_fb_la_SOURCES_DIST = evas_engine.c evas_fb_main.c \
87 evas_outbuf.c
88@BUILD_ENGINE_FB_TRUE@am__objects_1 = evas_engine.lo evas_fb_main.lo \
89@BUILD_ENGINE_FB_TRUE@ evas_outbuf.lo
90@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_TRUE@am_libevas_engine_fb_la_OBJECTS = $(am__objects_1)
91libevas_engine_fb_la_OBJECTS = $(am_libevas_engine_fb_la_OBJECTS)
92AM_V_lt = $(am__v_lt_$(V))
93am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
94am__v_lt_0 = --silent
95@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_TRUE@am_libevas_engine_fb_la_rpath =
96@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@module_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
97@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@ $(top_builddir)/src/lib/libevas.la
98am__module_la_SOURCES_DIST = evas_engine.c evas_fb_main.c \
99 evas_outbuf.c
100@BUILD_ENGINE_FB_TRUE@am__objects_2 = module_la-evas_engine.lo \
101@BUILD_ENGINE_FB_TRUE@ module_la-evas_fb_main.lo \
102@BUILD_ENGINE_FB_TRUE@ module_la-evas_outbuf.lo
103@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@am_module_la_OBJECTS = $(am__objects_2)
104module_la_OBJECTS = $(am_module_la_OBJECTS)
105module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
106 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
107 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
108@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@am_module_la_rpath = \
109@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@ -rpath \
110@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@ $(pkgdir)
111DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
112depcomp = $(SHELL) $(top_srcdir)/depcomp
113am__depfiles_maybe = depfiles
114am__mv = mv -f
115COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
116 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
117LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
118 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
119 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
120 $(AM_CFLAGS) $(CFLAGS)
121AM_V_CC = $(am__v_CC_$(V))
122am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
123am__v_CC_0 = @echo " CC " $@;
124AM_V_at = $(am__v_at_$(V))
125am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
126am__v_at_0 = @
127CCLD = $(CC)
128LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
129 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
130 $(AM_LDFLAGS) $(LDFLAGS) -o $@
131AM_V_CCLD = $(am__v_CCLD_$(V))
132am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
133am__v_CCLD_0 = @echo " CCLD " $@;
134AM_V_GEN = $(am__v_GEN_$(V))
135am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
136am__v_GEN_0 = @echo " GEN " $@;
137SOURCES = $(libevas_engine_fb_la_SOURCES) $(module_la_SOURCES)
138DIST_SOURCES = $(am__libevas_engine_fb_la_SOURCES_DIST) \
139 $(am__module_la_SOURCES_DIST)
140am__includes_HEADERS_DIST = Evas_Engine_FB.h
141HEADERS = $(includes_HEADERS)
142ETAGS = etags
143CTAGS = ctags
144DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
145ACLOCAL = @ACLOCAL@
146ALLOCA = @ALLOCA@
147AMTAR = @AMTAR@
148AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
149AR = @AR@
150AS = @AS@
151AUTOCONF = @AUTOCONF@
152AUTOHEADER = @AUTOHEADER@
153AUTOMAKE = @AUTOMAKE@
154AWK = @AWK@
155CC = @CC@
156CCDEPMODE = @CCDEPMODE@
157CFLAGS = @CFLAGS@
158CHECK_CFLAGS = @CHECK_CFLAGS@
159CHECK_LIBS = @CHECK_LIBS@
160CPP = @CPP@
161CPPFLAGS = @CPPFLAGS@
162CXX = @CXX@
163CXXCPP = @CXXCPP@
164CXXDEPMODE = @CXXDEPMODE@
165CXXFLAGS = @CXXFLAGS@
166CYGPATH_W = @CYGPATH_W@
167DEFS = @DEFS@
168DEPDIR = @DEPDIR@
169DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
170DIRECTFB_LIBS = @DIRECTFB_LIBS@
171DLLTOOL = @DLLTOOL@
172DSYMUTIL = @DSYMUTIL@
173DUMPBIN = @DUMPBIN@
174ECHO_C = @ECHO_C@
175ECHO_N = @ECHO_N@
176ECHO_T = @ECHO_T@
177ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
178ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
179EDB_CFLAGS = @EDB_CFLAGS@
180EDB_LIBS = @EDB_LIBS@
181EDJE_CFLAGS = @EDJE_CFLAGS@
182EDJE_LIBS = @EDJE_LIBS@
183EET_CFLAGS = @EET_CFLAGS@
184EET_LIBS = @EET_LIBS@
185EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
186EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
187EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
188EGREP = @EGREP@
189EINA_CFLAGS = @EINA_CFLAGS@
190EINA_LIBS = @EINA_LIBS@
191EVAS_CFLAGS = @EVAS_CFLAGS@
192EVAS_LIBS = @EVAS_LIBS@
193EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
194EVIL_CFLAGS = @EVIL_CFLAGS@
195EVIL_LIBS = @EVIL_LIBS@
196EXEEXT = @EXEEXT@
197FGREP = @FGREP@
198FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
199FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
200FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
201FREETYPE_LIBS = @FREETYPE_LIBS@
202FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
203FRIBIDI_LIBS = @FRIBIDI_LIBS@
204GL_EET_CFLAGS = @GL_EET_CFLAGS@
205GL_EET_LIBS = @GL_EET_LIBS@
206GREP = @GREP@
207HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
208HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
209INSTALL = @INSTALL@
210INSTALL_DATA = @INSTALL_DATA@
211INSTALL_PROGRAM = @INSTALL_PROGRAM@
212INSTALL_SCRIPT = @INSTALL_SCRIPT@
213INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
214LD = @LD@
215LDFLAGS = @LDFLAGS@
216LIBOBJS = @LIBOBJS@
217LIBS = @LIBS@
218LIBTOOL = @LIBTOOL@
219LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
220LINEBREAK_LIBS = @LINEBREAK_LIBS@
221LIPO = @LIPO@
222LN_S = @LN_S@
223LTLIBOBJS = @LTLIBOBJS@
224MAKEINFO = @MAKEINFO@
225MKDIR_P = @MKDIR_P@
226MODULE_ARCH = @MODULE_ARCH@
227NM = @NM@
228NMEDIT = @NMEDIT@
229OBJC = @OBJC@
230OBJCDEPMODE = @OBJCDEPMODE@
231OBJCFLAGS = @OBJCFLAGS@
232OBJDUMP = @OBJDUMP@
233OBJEXT = @OBJEXT@
234OTOOL = @OTOOL@
235OTOOL64 = @OTOOL64@
236PACKAGE = @PACKAGE@
237PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
238PACKAGE_NAME = @PACKAGE_NAME@
239PACKAGE_STRING = @PACKAGE_STRING@
240PACKAGE_TARNAME = @PACKAGE_TARNAME@
241PACKAGE_URL = @PACKAGE_URL@
242PACKAGE_VERSION = @PACKAGE_VERSION@
243PATH_SEPARATOR = @PATH_SEPARATOR@
244PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
245PIXMAN_LIBS = @PIXMAN_LIBS@
246PKG_CONFIG = @PKG_CONFIG@
247PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
248PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
249PNG_CFLAGS = @PNG_CFLAGS@
250PNG_LIBS = @PNG_LIBS@
251RANLIB = @RANLIB@
252SDL_CFLAGS = @SDL_CFLAGS@
253SDL_LIBS = @SDL_LIBS@
254SED = @SED@
255SET_MAKE = @SET_MAKE@
256SHELL = @SHELL@
257SHM_OPEN_LINK = @SHM_OPEN_LINK@
258STRIP = @STRIP@
259SVG_CFLAGS = @SVG_CFLAGS@
260SVG_LIBS = @SVG_LIBS@
261VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
262VALGRIND_LIBS = @VALGRIND_LIBS@
263VERSION = @VERSION@
264VMAJ = @VMAJ@
265WIN32_CFLAGS = @WIN32_CFLAGS@
266WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
267XCB_CFLAGS = @XCB_CFLAGS@
268XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
269XCB_GL_LIBS = @XCB_GL_LIBS@
270XCB_LIBS = @XCB_LIBS@
271XEXT_CFLAGS = @XEXT_CFLAGS@
272XEXT_LIBS = @XEXT_LIBS@
273XMKMF = @XMKMF@
274X_CFLAGS = @X_CFLAGS@
275X_EXTRA_LIBS = @X_EXTRA_LIBS@
276X_LIBS = @X_LIBS@
277X_PRE_LIBS = @X_PRE_LIBS@
278abs_builddir = @abs_builddir@
279abs_srcdir = @abs_srcdir@
280abs_top_builddir = @abs_top_builddir@
281abs_top_srcdir = @abs_top_srcdir@
282ac_ct_CC = @ac_ct_CC@
283ac_ct_CXX = @ac_ct_CXX@
284ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
285ac_ct_OBJC = @ac_ct_OBJC@
286altivec_cflags = @altivec_cflags@
287am__include = @am__include@
288am__leading_dot = @am__leading_dot@
289am__quote = @am__quote@
290am__tar = @am__tar@
291am__untar = @am__untar@
292bindir = @bindir@
293build = @build@
294build_alias = @build_alias@
295build_cpu = @build_cpu@
296build_os = @build_os@
297build_vendor = @build_vendor@
298builddir = @builddir@
299datadir = @datadir@
300datarootdir = @datarootdir@
301dlopen_libs = @dlopen_libs@
302docdir = @docdir@
303dvidir = @dvidir@
304edje_cc = @edje_cc@
305efl_doxygen = @efl_doxygen@
306efl_have_doxygen = @efl_have_doxygen@
307evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
308evas_engine_buffer_libs = @evas_engine_buffer_libs@
309evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
310evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
311evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
312evas_engine_directfb_libs = @evas_engine_directfb_libs@
313evas_engine_fb_cflags = @evas_engine_fb_cflags@
314evas_engine_fb_libs = @evas_engine_fb_libs@
315evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
316evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
317evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
318evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
319evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
320evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
321evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
322evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
323evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
324evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
325evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
326evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
327evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
328evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
329evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
330evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
331evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
332evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
333evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
334evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
335evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
336evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
337evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
338evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
339evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
340evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
341evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
342evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
343evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
344evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
345evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
346evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
347evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
348evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
349evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
350evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
351evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
352evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
353evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
354evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
355evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
356evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
357evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
358evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
359evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
360evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
361evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
362evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
363evas_image_loader_png_libs = @evas_image_loader_png_libs@
364evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
365evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
366evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
367evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
368evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
369evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
370evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
371evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
372evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
373evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
374evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
375evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
376exec_prefix = @exec_prefix@
377have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
378have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
379have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
380have_evas_engine_software_x11 = @have_evas_engine_software_x11@
381have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
382have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
383have_lcov = @have_lcov@
384host = @host@
385host_alias = @host_alias@
386host_cpu = @host_cpu@
387host_os = @host_os@
388host_vendor = @host_vendor@
389htmldir = @htmldir@
390includedir = @includedir@
391infodir = @infodir@
392install_sh = @install_sh@
393libdir = @libdir@
394libexecdir = @libexecdir@
395localedir = @localedir@
396localstatedir = @localstatedir@
397lt_ECHO = @lt_ECHO@
398lt_enable_auto_import = @lt_enable_auto_import@
399mandir = @mandir@
400mkdir_p = @mkdir_p@
401oldincludedir = @oldincludedir@
402pdfdir = @pdfdir@
403pkgconfig_requires_private = @pkgconfig_requires_private@
404prefix = @prefix@
405program_transform_name = @program_transform_name@
406psdir = @psdir@
407pthread_cflags = @pthread_cflags@
408pthread_libs = @pthread_libs@
409release_info = @release_info@
410requirement_evas = @requirement_evas@
411sbindir = @sbindir@
412sharedstatedir = @sharedstatedir@
413srcdir = @srcdir@
414sysconfdir = @sysconfdir@
415target_alias = @target_alias@
416top_build_prefix = @top_build_prefix@
417top_builddir = @top_builddir@
418top_srcdir = @top_srcdir@
419version_info = @version_info@
420MAINTAINERCLEANFILES = Makefile.in
421AM_CPPFLAGS = \
422-I. \
423-I$(top_srcdir)/src/lib \
424-I$(top_srcdir)/src/lib/include \
425-I$(top_srcdir)/src/modules/engines \
426@FREETYPE_CFLAGS@ \
427@PIXMAN_CFLAGS@ \
428@EINA_CFLAGS@ \
429@evas_engine_fb_cflags@
430
431@BUILD_ENGINE_FB_TRUE@FB_SOURCES = \
432@BUILD_ENGINE_FB_TRUE@evas_engine.c \
433@BUILD_ENGINE_FB_TRUE@evas_fb_main.c \
434@BUILD_ENGINE_FB_TRUE@evas_outbuf.c
435
436@BUILD_ENGINE_FB_TRUE@FB_LIBADD = @evas_engine_fb_libs@
437@BUILD_ENGINE_FB_TRUE@includes_HEADERS = Evas_Engine_FB.h
438@BUILD_ENGINE_FB_TRUE@includesdir = $(includedir)/evas-@VMAJ@
439@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@pkgdir = $(libdir)/evas/modules/engines/fb/$(MODULE_ARCH)
440@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@pkg_LTLIBRARIES = module.la
441@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@module_la_SOURCES = $(FB_SOURCES)
442@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@module_la_LIBADD = @EINA_LIBS@ $(FB_LIBADD) $(top_builddir)/src/lib/libevas.la
443@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@module_la_LDFLAGS = -module -avoid-version
444@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
445@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_TRUE@noinst_LTLIBRARIES = libevas_engine_fb.la
446@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_TRUE@libevas_engine_fb_la_SOURCES = $(FB_SOURCES)
447@BUILD_ENGINE_FB_TRUE@@EVAS_STATIC_BUILD_FB_TRUE@libevas_engine_fb_la_LIBADD = $(FB_LIBADD)
448EXTRA_DIST = \
449evas_engine.h \
450evas_fb.h
451
452all: all-am
453
454.SUFFIXES:
455.SUFFIXES: .c .lo .o .obj
456$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
457 @for dep in $?; do \
458 case '$(am__configure_deps)' in \
459 *$$dep*) \
460 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
461 && { if test -f $@; then exit 0; else break; fi; }; \
462 exit 1;; \
463 esac; \
464 done; \
465 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/fb/Makefile'; \
466 $(am__cd) $(top_srcdir) && \
467 $(AUTOMAKE) --gnu src/modules/engines/fb/Makefile
468.PRECIOUS: Makefile
469Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
470 @case '$?' in \
471 *config.status*) \
472 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
473 *) \
474 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
475 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
476 esac;
477
478$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
479 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
480
481$(top_srcdir)/configure: $(am__configure_deps)
482 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
483$(ACLOCAL_M4): $(am__aclocal_m4_deps)
484 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
485$(am__aclocal_m4_deps):
486
487clean-noinstLTLIBRARIES:
488 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
489 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
490 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
491 test "$$dir" != "$$p" || dir=.; \
492 echo "rm -f \"$${dir}/so_locations\""; \
493 rm -f "$${dir}/so_locations"; \
494 done
495install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
496 @$(NORMAL_INSTALL)
497 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
498 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
499 list2=; for p in $$list; do \
500 if test -f $$p; then \
501 list2="$$list2 $$p"; \
502 else :; fi; \
503 done; \
504 test -z "$$list2" || { \
505 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
506 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
507 }
508
509uninstall-pkgLTLIBRARIES:
510 @$(NORMAL_UNINSTALL)
511 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
512 for p in $$list; do \
513 $(am__strip_dir) \
514 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
515 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
516 done
517
518clean-pkgLTLIBRARIES:
519 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
520 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
521 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
522 test "$$dir" != "$$p" || dir=.; \
523 echo "rm -f \"$${dir}/so_locations\""; \
524 rm -f "$${dir}/so_locations"; \
525 done
526libevas_engine_fb.la: $(libevas_engine_fb_la_OBJECTS) $(libevas_engine_fb_la_DEPENDENCIES)
527 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_fb_la_rpath) $(libevas_engine_fb_la_OBJECTS) $(libevas_engine_fb_la_LIBADD) $(LIBS)
528module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
529 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
530
531mostlyclean-compile:
532 -rm -f *.$(OBJEXT)
533
534distclean-compile:
535 -rm -f *.tab.c
536
537@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
538@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_fb_main.Plo@am__quote@
539@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_outbuf.Plo@am__quote@
540@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
541@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_fb_main.Plo@am__quote@
542@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_outbuf.Plo@am__quote@
543
544.c.o:
545@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
546@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
547@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
548@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
549@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
550@am__fastdepCC_FALSE@ $(COMPILE) -c $<
551
552.c.obj:
553@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
554@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
555@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
556@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
557@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
558@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
559
560.c.lo:
561@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
562@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
563@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
564@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
565@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
566@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
567
568module_la-evas_engine.lo: evas_engine.c
569@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
570@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
571@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
572@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
573@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
574@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
575
576module_la-evas_fb_main.lo: evas_fb_main.c
577@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_fb_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_fb_main.Tpo -c -o module_la-evas_fb_main.lo `test -f 'evas_fb_main.c' || echo '$(srcdir)/'`evas_fb_main.c
578@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_fb_main.Tpo $(DEPDIR)/module_la-evas_fb_main.Plo
579@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
580@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_fb_main.c' object='module_la-evas_fb_main.lo' libtool=yes @AMDEPBACKSLASH@
581@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
582@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_fb_main.lo `test -f 'evas_fb_main.c' || echo '$(srcdir)/'`evas_fb_main.c
583
584module_la-evas_outbuf.lo: evas_outbuf.c
585@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_outbuf.lo -MD -MP -MF $(DEPDIR)/module_la-evas_outbuf.Tpo -c -o module_la-evas_outbuf.lo `test -f 'evas_outbuf.c' || echo '$(srcdir)/'`evas_outbuf.c
586@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_outbuf.Tpo $(DEPDIR)/module_la-evas_outbuf.Plo
587@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
588@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_outbuf.c' object='module_la-evas_outbuf.lo' libtool=yes @AMDEPBACKSLASH@
589@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
590@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_outbuf.lo `test -f 'evas_outbuf.c' || echo '$(srcdir)/'`evas_outbuf.c
591
592mostlyclean-libtool:
593 -rm -f *.lo
594
595clean-libtool:
596 -rm -rf .libs _libs
597install-includesHEADERS: $(includes_HEADERS)
598 @$(NORMAL_INSTALL)
599 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
600 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
601 for p in $$list; do \
602 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
603 echo "$$d$$p"; \
604 done | $(am__base_list) | \
605 while read files; do \
606 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
607 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
608 done
609
610uninstall-includesHEADERS:
611 @$(NORMAL_UNINSTALL)
612 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
613 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
614 test -n "$$files" || exit 0; \
615 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
616 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
617
618ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
619 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
620 unique=`for i in $$list; do \
621 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
622 done | \
623 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
624 END { if (nonempty) { for (i in files) print i; }; }'`; \
625 mkid -fID $$unique
626tags: TAGS
627
628TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
629 $(TAGS_FILES) $(LISP)
630 set x; \
631 here=`pwd`; \
632 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
633 unique=`for i in $$list; do \
634 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
635 done | \
636 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
637 END { if (nonempty) { for (i in files) print i; }; }'`; \
638 shift; \
639 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
640 test -n "$$unique" || unique=$$empty_fix; \
641 if test $$# -gt 0; then \
642 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
643 "$$@" $$unique; \
644 else \
645 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
646 $$unique; \
647 fi; \
648 fi
649ctags: CTAGS
650CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
651 $(TAGS_FILES) $(LISP)
652 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
653 unique=`for i in $$list; do \
654 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
655 done | \
656 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
657 END { if (nonempty) { for (i in files) print i; }; }'`; \
658 test -z "$(CTAGS_ARGS)$$unique" \
659 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
660 $$unique
661
662GTAGS:
663 here=`$(am__cd) $(top_builddir) && pwd` \
664 && $(am__cd) $(top_srcdir) \
665 && gtags -i $(GTAGS_ARGS) "$$here"
666
667distclean-tags:
668 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
669
670distdir: $(DISTFILES)
671 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
672 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
673 list='$(DISTFILES)'; \
674 dist_files=`for file in $$list; do echo $$file; done | \
675 sed -e "s|^$$srcdirstrip/||;t" \
676 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
677 case $$dist_files in \
678 */*) $(MKDIR_P) `echo "$$dist_files" | \
679 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
680 sort -u` ;; \
681 esac; \
682 for file in $$dist_files; do \
683 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
684 if test -d $$d/$$file; then \
685 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
686 if test -d "$(distdir)/$$file"; then \
687 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
688 fi; \
689 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
690 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
691 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
692 fi; \
693 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
694 else \
695 test -f "$(distdir)/$$file" \
696 || cp -p $$d/$$file "$(distdir)/$$file" \
697 || exit 1; \
698 fi; \
699 done
700check-am: all-am
701check: check-am
702all-am: Makefile $(LTLIBRARIES) $(HEADERS)
703installdirs:
704 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
705 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
706 done
707install: install-am
708install-exec: install-exec-am
709install-data: install-data-am
710uninstall: uninstall-am
711
712install-am: all-am
713 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
714
715installcheck: installcheck-am
716install-strip:
717 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
718 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
719 `test -z '$(STRIP)' || \
720 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
721mostlyclean-generic:
722
723clean-generic:
724
725distclean-generic:
726 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
727 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
728
729maintainer-clean-generic:
730 @echo "This command is intended for maintainers to use"
731 @echo "it deletes files that may require special tools to rebuild."
732 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
733clean: clean-am
734
735clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
736 clean-pkgLTLIBRARIES mostlyclean-am
737
738distclean: distclean-am
739 -rm -rf ./$(DEPDIR)
740 -rm -f Makefile
741distclean-am: clean-am distclean-compile distclean-generic \
742 distclean-tags
743
744dvi: dvi-am
745
746dvi-am:
747
748html: html-am
749
750html-am:
751
752info: info-am
753
754info-am:
755
756install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
757
758install-dvi: install-dvi-am
759
760install-dvi-am:
761
762install-exec-am:
763
764install-html: install-html-am
765
766install-html-am:
767
768install-info: install-info-am
769
770install-info-am:
771
772install-man:
773
774install-pdf: install-pdf-am
775
776install-pdf-am:
777
778install-ps: install-ps-am
779
780install-ps-am:
781
782installcheck-am:
783
784maintainer-clean: maintainer-clean-am
785 -rm -rf ./$(DEPDIR)
786 -rm -f Makefile
787maintainer-clean-am: distclean-am maintainer-clean-generic
788
789mostlyclean: mostlyclean-am
790
791mostlyclean-am: mostlyclean-compile mostlyclean-generic \
792 mostlyclean-libtool
793
794pdf: pdf-am
795
796pdf-am:
797
798ps: ps-am
799
800ps-am:
801
802uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
803
804.MAKE: install-am install-strip
805
806.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
807 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
808 ctags distclean distclean-compile distclean-generic \
809 distclean-libtool distclean-tags distdir dvi dvi-am html \
810 html-am info info-am install install-am install-data \
811 install-data-am install-dvi install-dvi-am install-exec \
812 install-exec-am install-html install-html-am \
813 install-includesHEADERS install-info install-info-am \
814 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
815 install-ps install-ps-am install-strip installcheck \
816 installcheck-am installdirs maintainer-clean \
817 maintainer-clean-generic mostlyclean mostlyclean-compile \
818 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
819 tags uninstall uninstall-am uninstall-includesHEADERS \
820 uninstall-pkgLTLIBRARIES
821
822
823# Tell versions [3.59,3.63) of GNU make to not export all variables.
824# Otherwise a system limit (for SysV at least) may be exceeded.
825.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/fb/evas_engine.c b/libraries/evas/src/modules/engines/fb/evas_engine.c
new file mode 100644
index 0000000..7681b00
--- /dev/null
+++ b/libraries/evas/src/modules/engines/fb/evas_engine.c
@@ -0,0 +1,317 @@
1#include "evas_common.h"
2#include "evas_private.h"
3#include "evas_engine.h"
4#include "Evas_Engine_FB.h"
5
6int _evas_engine_fb_log_dom = -1;
7
8/* function tables - filled in later (func and parent func) */
9static Evas_Func func, pfunc;
10
11/* engine struct data */
12typedef struct _Render_Engine Render_Engine;
13
14struct _Render_Engine
15{
16 Tilebuf *tb;
17 Outbuf *ob;
18 Tilebuf_Rect *rects;
19 Eina_Inlist *cur_rect;
20 int end : 1;
21};
22
23/* prototypes we will use here */
24static void *_output_setup(int w, int h, int rot, int vt, int dev, int refresh);
25
26static void *eng_info(Evas *e);
27static void eng_info_free(Evas *e, void *info);
28static int eng_setup(Evas *e, void *info);
29static void eng_output_free(void *data);
30static void eng_output_resize(void *data, int w, int h);
31static void eng_output_tile_size_set(void *data, int w, int h);
32static void eng_output_redraws_rect_add(void *data, int x, int y, int w, int h);
33static void eng_output_redraws_rect_del(void *data, int x, int y, int w, int h);
34static void eng_output_redraws_clear(void *data);
35static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
36static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
37static void eng_output_flush(void *data);
38static void eng_output_idle_flush(void *data);
39
40/* internal engine routines */
41static void *
42_output_setup(int w, int h, int rot, int vt, int dev, int refresh)
43{
44 Render_Engine *re;
45
46 re = calloc(1, sizeof(Render_Engine));
47 if (!re)
48 return NULL;
49 /* if we haven't initialized - init (automatic abort if already done) */
50 evas_common_cpu_init();
51
52 evas_common_blend_init();
53 evas_common_image_init();
54 evas_common_convert_init();
55 evas_common_scale_init();
56 evas_common_rectangle_init();
57 evas_common_polygon_init();
58 evas_common_line_init();
59 evas_common_font_init();
60 evas_common_draw_init();
61 evas_common_tilebuf_init();
62
63 evas_fb_outbuf_fb_init();
64
65 /* get any stored performance metrics from device (xserver) */
66 re->ob = evas_fb_outbuf_fb_setup_fb(w, h, rot, OUTBUF_DEPTH_INHERIT, vt, dev, refresh);
67 re->tb = evas_common_tilebuf_new(evas_fb_outbuf_fb_get_width(re->ob), evas_fb_outbuf_fb_get_height(re->ob));
68 /* no backbuf! */
69 evas_fb_outbuf_fb_set_have_backbuf(re->ob, 0);
70 /* in preliminary tests 16x16 gave highest framerates */
71 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
72 return re;
73}
74
75/* engine api this module provides */
76static void *
77eng_info(Evas *e)
78{
79 Evas_Engine_Info_FB *info;
80 info = calloc(1, sizeof(Evas_Engine_Info_FB));
81 if (!info) return NULL;
82 info->magic.magic = rand();
83 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
84 return info;
85 e = NULL;
86}
87
88static void
89eng_info_free(Evas *e __UNUSED__, void *info)
90{
91 Evas_Engine_Info_FB *in;
92 in = (Evas_Engine_Info_FB *)info;
93 free(in);
94}
95
96static int
97eng_setup(Evas *e, void *in)
98{
99 Render_Engine *re;
100 Evas_Engine_Info_FB *info;
101
102 info = (Evas_Engine_Info_FB *)in;
103 re = _output_setup(e->output.w,
104 e->output.h,
105 info->info.rotation,
106 info->info.virtual_terminal,
107 info->info.device_number,
108 info->info.refresh);
109 e->engine.data.output = re;
110 if (!e->engine.data.output) return 0;
111 e->engine.data.context = e->engine.func->context_new(e->engine.data.output);
112
113 return 1;
114}
115
116static void
117eng_output_free(void *data)
118{
119 Render_Engine *re;
120
121 re = (Render_Engine *)data;
122 evas_fb_outbuf_fb_free(re->ob);
123 evas_common_tilebuf_free(re->tb);
124 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
125 free(re);
126
127 evas_common_font_shutdown();
128 evas_common_image_shutdown();
129}
130
131static void
132eng_output_resize(void *data, int w, int h)
133{
134 Render_Engine *re;
135
136 re = (Render_Engine *)data;
137 evas_fb_outbuf_fb_reconfigure(re->ob, w, h,
138 evas_fb_outbuf_fb_get_rot(re->ob),
139 OUTBUF_DEPTH_INHERIT);
140 evas_common_tilebuf_free(re->tb);
141 re->tb = evas_common_tilebuf_new(w, h);
142 if (re->tb)
143 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
144}
145
146static void
147eng_output_tile_size_set(void *data, int w, int h)
148{
149 Render_Engine *re;
150
151 re = (Render_Engine *)data;
152 evas_common_tilebuf_set_tile_size(re->tb, w, h);
153}
154
155static void
156eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
157{
158 Render_Engine *re;
159
160 re = (Render_Engine *)data;
161 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
162}
163
164static void
165eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
166{
167 Render_Engine *re;
168
169 re = (Render_Engine *)data;
170 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
171}
172
173static void
174eng_output_redraws_clear(void *data)
175{
176 Render_Engine *re;
177
178 re = (Render_Engine *)data;
179 evas_common_tilebuf_clear(re->tb);
180}
181
182static void *
183eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
184{
185 Render_Engine *re;
186 RGBA_Image *surface;
187 Tilebuf_Rect *rect;
188 int ux, uy, uw, uh;
189
190 re = (Render_Engine *)data;
191 if (re->end)
192 {
193 re->end = 0;
194 return NULL;
195 }
196 if (!re->rects)
197 {
198 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
199 re->cur_rect = EINA_INLIST_GET(re->rects);
200 }
201 if (!re->cur_rect) return NULL;
202 rect = (Tilebuf_Rect *)re->cur_rect;
203 ux = rect->x; uy = rect->y; uw = rect->w; uh = rect->h;
204 re->cur_rect = re->cur_rect->next;
205 if (!re->cur_rect)
206 {
207 evas_common_tilebuf_free_render_rects(re->rects);
208 re->rects = NULL;
209 re->end = 1;
210 }
211
212 surface = evas_fb_outbuf_fb_new_region_for_update(re->ob,
213 ux, uy, uw, uh,
214 cx, cy, cw, ch);
215 *x = ux; *y = uy; *w = uw; *h = uh;
216 return surface;
217}
218
219static void
220eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
221{
222 Render_Engine *re;
223
224 re = (Render_Engine *)data;
225#ifdef BUILD_PIPE_RENDER
226 evas_common_pipe_map_begin(surface);
227#endif
228 evas_fb_outbuf_fb_push_updated_region(re->ob, surface, x, y, w, h);
229 evas_fb_outbuf_fb_free_region_for_update(re->ob, surface);
230 evas_common_cpu_end_opt();
231}
232
233static void
234eng_output_flush(void *data)
235{
236 Render_Engine *re;
237
238 re = (Render_Engine *)data;
239}
240
241static void
242eng_output_idle_flush(void *data)
243{
244 Render_Engine *re;
245
246 re = (Render_Engine *)data;
247}
248
249static Eina_Bool
250eng_canvas_alpha_get(void *data, void *context __UNUSED__)
251{
252 Render_Engine *re;
253
254 re = (Render_Engine *)data;
255 return (re->ob->priv.fb.fb->fb_var.transp.length > 0);
256}
257
258/* module advertising code */
259static int
260module_open(Evas_Module *em)
261{
262 if (!em) return 0;
263 /* get whatever engine module we inherit from */
264 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
265 _evas_engine_fb_log_dom = eina_log_domain_register
266 ("evas-fb", EVAS_DEFAULT_LOG_COLOR);
267 if (_evas_engine_fb_log_dom < 0)
268 {
269 EINA_LOG_ERR("Can not create a module log domain.");
270 return 0;
271 }
272
273 /* store it for later use */
274 func = pfunc;
275 /* now to override methods */
276#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
277 ORD(info);
278 ORD(info_free);
279 ORD(setup);
280 ORD(canvas_alpha_get);
281 ORD(output_free);
282 ORD(output_resize);
283 ORD(output_tile_size_set);
284 ORD(output_redraws_rect_add);
285 ORD(output_redraws_rect_del);
286 ORD(output_redraws_clear);
287 ORD(output_redraws_next_update_get);
288 ORD(output_redraws_next_update_push);
289 ORD(output_flush);
290 ORD(output_idle_flush);
291 /* now advertise out own api */
292 em->functions = (void *)(&func);
293 return 1;
294}
295
296static void
297module_close(Evas_Module *em __UNUSED__)
298{
299 eina_log_domain_unregister(_evas_engine_fb_log_dom);
300}
301
302static Evas_Module_Api evas_modapi =
303{
304 EVAS_MODULE_API_VERSION,
305 "fb",
306 "none",
307 {
308 module_open,
309 module_close
310 }
311};
312
313EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, fb);
314
315#ifndef EVAS_STATIC_BUILD_FB
316EVAS_EINA_MODULE_DEFINE(engine, fb);
317#endif
diff --git a/libraries/evas/src/modules/engines/fb/evas_engine.h b/libraries/evas/src/modules/engines/fb/evas_engine.h
new file mode 100644
index 0000000..295e91e
--- /dev/null
+++ b/libraries/evas/src/modules/engines/fb/evas_engine.h
@@ -0,0 +1,85 @@
1#ifndef EVAS_ENGINE_H
2#define EVAS_ENGINE_H
3
4#include "evas_fb.h"
5
6extern int _evas_engine_fb_log_dom;
7#ifdef ERR
8# undef ERR
9#endif
10#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_fb_log_dom, __VA_ARGS__)
11
12#ifdef DBG
13# undef DBG
14#endif
15#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_fb_log_dom, __VA_ARGS__)
16
17#ifdef INF
18# undef INF
19#endif
20#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_fb_log_dom, __VA_ARGS__)
21
22#ifdef WRN
23# undef WRN
24#endif
25#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_fb_log_dom, __VA_ARGS__)
26
27#ifdef CRIT
28# undef CRIT
29#endif
30#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_fb_log_dom, __VA_ARGS__)
31
32typedef struct _Outbuf Outbuf;
33
34typedef enum _Outbuf_Depth Outbuf_Depth;
35
36enum _Outbuf_Depth
37{
38 OUTBUF_DEPTH_NONE,
39 OUTBUF_DEPTH_INHERIT,
40 OUTBUF_DEPTH_RGB_16BPP_565_565_DITHERED,
41 OUTBUF_DEPTH_RGB_16BPP_555_555_DITHERED,
42 OUTBUF_DEPTH_RGB_16BPP_444_444_DITHERED,
43 OUTBUF_DEPTH_RGB_16BPP_565_444_DITHERED,
44 OUTBUF_DEPTH_RGB_32BPP_888_8888,
45 OUTBUF_DEPTH_LAST
46};
47
48struct _Outbuf
49{
50 Outbuf_Depth depth;
51 int w, h;
52 int rot;
53
54 struct {
55 struct {
56 FB_Mode *fb;
57 } fb;
58 struct {
59 DATA32 r, g, b;
60 } mask;
61 RGBA_Image *back_buf;
62 } priv;
63};
64
65/****/
66
67void evas_fb_outbuf_fb_init (void);
68void evas_fb_outbuf_fb_free (Outbuf *buf);
69
70Outbuf *evas_fb_outbuf_fb_setup_fb (int w, int h, int rot, Outbuf_Depth depth, int vt_no, int dev_no, int refresh);
71
72void evas_fb_outbuf_fb_blit (Outbuf *buf, int src_x, int src_y, int w, int h, int dst_x, int dst_y);
73void evas_fb_outbuf_fb_update (Outbuf *buf, int x, int y, int w, int h);
74RGBA_Image *evas_fb_outbuf_fb_new_region_for_update (Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch);
75void evas_fb_outbuf_fb_free_region_for_update (Outbuf *buf, RGBA_Image *update);
76void evas_fb_outbuf_fb_push_updated_region (Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h);
77void evas_fb_outbuf_fb_reconfigure (Outbuf *buf, int w, int h, int rot, Outbuf_Depth depth);
78int evas_fb_outbuf_fb_get_width (Outbuf *buf);
79int evas_fb_outbuf_fb_get_height (Outbuf *buf);
80Outbuf_Depth evas_fb_outbuf_fb_get_depth (Outbuf *buf);
81int evas_fb_outbuf_fb_get_rot (Outbuf *buf);
82int evas_fb_outbuf_fb_get_have_backbuf (Outbuf *buf);
83void evas_fb_outbuf_fb_set_have_backbuf (Outbuf *buf, int have_backbuf);
84
85#endif
diff --git a/libraries/evas/src/modules/engines/fb/evas_fb.h b/libraries/evas/src/modules/engines/fb/evas_fb.h
new file mode 100644
index 0000000..76ab30b
--- /dev/null
+++ b/libraries/evas/src/modules/engines/fb/evas_fb.h
@@ -0,0 +1,93 @@
1#ifndef _EVAS_FB_H
2#define _EVAS_FB_H 1
3
4/* -------------------------------------------------------------------- */
5/* LINUX FBCON FRAMEBUFFER UTILITY CODE */
6/* makes setting up the framebuffer easy. Also makes it eays to port to */
7/* some other system if needed. */
8/* Copyright (c) 1999 - Carsten Haitzler (The Rasterman) */
9/* -------------------------------------------------------------------- */
10
11#include <stdio.h>
12#include <stdlib.h>
13#include <string.h>
14#include <unistd.h>
15#include <fcntl.h>
16#include <termios.h>
17#include <errno.h>
18#include <sys/ioctl.h>
19#include <sys/mman.h>
20#include <sys/wait.h>
21#include <sys/stat.h>
22#include <linux/kd.h>
23#include <linux/vt.h>
24#include <linux/fb.h>
25
26typedef struct _fb_mode FB_Mode;
27
28struct _fb_mode
29{
30 unsigned int width;
31 unsigned int height;
32 unsigned int refresh;
33 unsigned int depth;
34 unsigned int bpp;
35 int fb_fd;
36 void *mem;
37 unsigned int mem_offset;
38 struct fb_var_screeninfo fb_var;
39};
40
41/* init a framebuffer (and switch to) vt number vt. If vt == 0 use current */
42/* vt */
43void fb_init(int vt, int device);
44/* call this afetr setting or getting the fb mode (whichever) to complete */
45/* the dsetup */
46int fb_postinit(FB_Mode *mode);
47/* console switching - if a switch was requested this with block if block */
48/* is 1, otherwise it will return 1 if current console is active or 0 if */
49/* the user has switched away in the meantime */
50int fb_await_switch(int block);
51/* list all current possible video modes listed in /etc/fb.modes */
52/* returns pointer to an aray of FB_Mode, and sets num_return to the number */
53/* of elements in the returned array */
54FB_Mode *fb_list_modes(unsigned int *num_return);
55/* sets the fb mode to the resolution width x height and the depth to depth. */
56/* and if refresh > 0 attempts to use a mode with a refresh rate (in Hz) of */
57/* that. If this fails it will return NULL - if it succeeds it will return */
58/* a pointer to the FB_Mode thatwas set. only modes in /etc/fb.modes will */
59/* be used. If refresh is 0 it uses the DEFAULT mode (the one with no */
60/* refresh rate at the end of its name (WIDTHxHEIGHT-REFRESH) */
61/* NB: in 8bpp you get a 332 palette. This is fixed so all modes are */
62/* "truecolor" - the only difference is how many bits bep red, green and */
63/* blue channel. This is for speed reasons */
64FB_Mode *fb_setmode(unsigned int width, unsigned int height, unsigned int depth, unsigned int refresh);
65/* returns the current fb mode being used in FB_Mode */
66FB_Mode *fb_getmode(void);
67/* changes the bit depth of the current fb mode to depth and returns a new */
68/* handle to a new fb mode with updated parameters. frees cur_mode for you. */
69FB_Mode *fb_changedepth(FB_Mode *cur_mode, unsigned int depth);
70/* changes resolution - retaining current depth of the current mode, */
71/* returning a handle to the new mode once done. frees cur_mode for you. */
72FB_Mode *fb_changeres(FB_Mode *cur_mode, unsigned int width, unsigned int height, unsigned int refresh);
73/* chnages both resolution and depth and returns a handle to the new mode */
74/* when done. frees cur_mode for you */
75FB_Mode *fb_changemode(FB_Mode *cur_mode, unsigned int width, unsigned int height, unsigned int depth, unsigned int refresh);
76
77/* ------------------------------------------------------------------------- */
78/* How to init: */
79/* (Example) */
80
81/* FB_Mode *mode; */
82/* int fb_fd = -1; */
83/* fb_init(0); */
84/* mode = fb_setmode(640, 480, 8, 0); */
85/* if (mode) */
86/* fb_fd = fb_postinit(mode); */
87/* if (fb_fd == -1) */
88/* { */
89/* fprintf(stderr, "Frambuffer init failed\n"); */
90/* exit(1); */
91/* } */
92/* .... code to play with the FB */
93#endif
diff --git a/libraries/evas/src/modules/engines/fb/evas_fb_main.c b/libraries/evas/src/modules/engines/fb/evas_fb_main.c
new file mode 100644
index 0000000..1d61f1a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/fb/evas_fb_main.c
@@ -0,0 +1,600 @@
1/* -------------------------------------------------------------------- */
2/* LINUX FBCON FRAMEBUFFER UTILITY CODE */
3/* makes setting up the framebuffer easy. Also makes it eays to port to */
4/* some other system if needed. */
5/* Copyright (c) 1999 - Carsten Haitzler (The Rasterman) */
6/* -------------------------------------------------------------------- */
7#include "evas_common.h"
8#include "evas_fb.h"
9
10#include <sys/ioctl.h>
11#include <sys/wait.h>
12#include <linux/kd.h>
13#include <linux/vt.h>
14#include <sys/user.h>
15
16#define FB_ACTIVE 0
17#define FB_REL_REQ 1
18#define FB_INACTIVE 2
19#define FB_ACQ_REQ 3
20
21/* -------------------------------------------------------------------- */
22/* internal variables */
23
24static struct fb_fix_screeninfo fb_fix;
25static int fb, tty;
26static int bpp, depth;
27//static int orig_vt_no = 0;
28static int kd_mode;
29static struct vt_mode vt_omode;
30static struct fb_var_screeninfo fb_ovar;
31static unsigned short ored[256], ogreen[256], oblue[256];
32static unsigned short red[256], green[256], blue[256];
33static struct fb_cmap ocmap = { 0, 256, ored, ogreen, oblue, NULL };
34static struct fb_cmap cmap = { 0, 256, red, green, blue, NULL };
35
36/* -------------------------------------------------------------------- */
37/* internal function prototypes */
38
39static void fb_cleanup(void);
40//static void fb_cleanup_fork(void);
41//static void fb_setvt(int vtno);
42static void fb_init_palette_332(FB_Mode *mode);
43static void fb_init_palette_linear(FB_Mode *mode);
44
45/* -------------------------------------------------------------------- */
46/* palette setting */
47
48static void
49fb_init_palette_332(FB_Mode *mode)
50{
51 int r, g, b, i;
52
53 if (mode->fb_var.bits_per_pixel != 8)
54 return;
55 i = 0;
56
57 if (ioctl(fb, FBIOGETCMAP, &cmap) == -1)
58 perror("ioctl FBIOGETCMAP");
59
60 /* generate the palette */
61 for (r = 0; r < 8; r++)
62 {
63 for (g = 0; g < 8; g++)
64 {
65 for (b = 0; b < 4; b++)
66 {
67 int val;
68
69 val = (r << 5) | (r << 2) | (r >> 1);
70 red[i] = (val << 8) | val;
71 val = (g << 5) | (g << 2) | (g >> 1);
72 green[i] = (val << 8) | val;
73 val = (b << 6) | (b << 4) | (b << 2) | (b);
74 blue[i] = (val << 8) | val;
75 i++;
76 }
77 }
78 }
79
80 /* set colormap */
81 if (ioctl(fb, FBIOPUTCMAP, &cmap) == -1)
82 perror("ioctl FBIOPUTCMAP");
83}
84
85static void
86fb_init_palette_linear(FB_Mode *mode)
87{
88 int i;
89
90 if (mode->fb_var.bits_per_pixel != 8)
91 return;
92
93 if (ioctl(fb, FBIOGETCMAP, &cmap) == -1)
94 perror("ioctl FBIOGETCMAP");
95
96 /* generate the palette */
97 for (i = 0; i < 256; i++)
98 red[i] = (i << 8) | i;
99 for (i = 0; i < 256; i++)
100 green[i] = (i << 8) | i;
101 for (i = 0; i < 256; i++)
102 blue[i] = (i << 8) | i;
103
104 /* set colormap */
105 if (ioctl(fb, FBIOPUTCMAP, &cmap) == -1)
106 perror("ioctl FBIOPUTCMAP");
107}
108
109/* -------------------------------------------------------------------- */
110/* initialisation & cleanup */
111
112FB_Mode *
113fb_list_modes(unsigned int *num_return)
114{
115 FILE *f;
116 char line[256], label[256], value[256];
117 FB_Mode *modes = NULL;
118 int num;
119
120 num = 0;
121 f = fopen("/etc/fb.modes","r");
122 if (!f)
123 {
124 *num_return = 0;
125 return NULL;
126 }
127 while (fgets(line, sizeof(line) - 1, f))
128 {
129 if (sscanf(line, "mode \"%250[^\"]\"", label) == 1)
130 {
131 char f1[32], f2[32], f3[32], f4[32];
132
133 f1[0] = 0; f2[0] = 0; f3[0] = 0; f4[0] = 0;
134 sscanf(label, "%30[^x]x%30[^-]-%30[^-]-%30s", f1, f2, f3, f4);
135 if ((f1[0]) && (f2[0]))
136 {
137 int geometry = 0;
138 int timings = 0;
139
140 num++;
141 modes = realloc(modes, num * sizeof(FB_Mode));
142 modes[num - 1].width = atoi(f1);
143 modes[num - 1].height = atoi(f2);
144 if (f3[0])
145 modes[num - 1].refresh = atoi(f3);
146 else
147 modes[num - 1].refresh = 0;
148 modes[num - 1].fb_var.sync = 0;
149 while ((fgets(line, sizeof(line) - 1, f)) &&
150 (!strstr(line, "endmode")))
151 {
152
153 if (sscanf(line," geometry %i %i %i %i %i",
154 &modes[num - 1].fb_var.xres,
155 &modes[num - 1].fb_var.yres,
156 &modes[num - 1].fb_var.xres_virtual,
157 &modes[num - 1].fb_var.yres_virtual,
158 &modes[num - 1].fb_var.bits_per_pixel) == 5)
159 geometry = 1;
160 if (sscanf(line," timings %i %i %i %i %i %i %i",
161 &modes[num - 1].fb_var.pixclock,
162 &modes[num - 1].fb_var.left_margin,
163 &modes[num - 1].fb_var.right_margin,
164 &modes[num - 1].fb_var.upper_margin,
165 &modes[num - 1].fb_var.lower_margin,
166 &modes[num - 1].fb_var.hsync_len,
167 &modes[num - 1].fb_var.vsync_len) == 7)
168 timings = 1;
169 if ((sscanf(line, " hsync %15s", value) == 1) &&
170 (!strcmp(value,"high")))
171 modes[num - 1].fb_var.sync |= FB_SYNC_HOR_HIGH_ACT;
172 if ((sscanf(line, " vsync %15s", value) == 1) &&
173 (!strcmp(value,"high")))
174 modes[num - 1].fb_var.sync |= FB_SYNC_VERT_HIGH_ACT;
175 if ((sscanf(line, " csync %15s", value) == 1) &&
176 (!strcmp(value,"high")))
177 modes[num - 1].fb_var.sync |= FB_SYNC_COMP_HIGH_ACT;
178 if ((sscanf(line, " extsync %15s", value) == 1) &&
179 (!strcmp(value,"true")))
180 modes[num - 1].fb_var.sync |= FB_SYNC_EXT;
181 if ((sscanf(line, " laced %15s", value) == 1) &&
182 (!strcmp(value,"true")))
183 modes[num - 1].fb_var.vmode |= FB_VMODE_INTERLACED;
184 if ((sscanf(line, " double %15s",value) == 1) &&
185 (!strcmp(value,"true")))
186 modes[num - 1].fb_var.vmode |= FB_VMODE_DOUBLE;
187 }
188 if ((!geometry) || (!timings))
189 {
190 num--;
191 if (num == 0)
192 {
193 free(modes);
194 modes = NULL;
195 }
196 }
197 else
198 {
199 modes[num - 1].fb_var.xoffset = 0;
200 modes[num - 1].fb_var.yoffset = 0;
201 }
202 }
203 }
204 }
205 fclose(f);
206 *num_return = num;
207 return modes;
208}
209
210FB_Mode *
211fb_setmode(unsigned int width, unsigned int height, unsigned int pdepth, unsigned int refresh)
212{
213 FB_Mode *modes, *mode = NULL;
214 unsigned int i, num_modes;
215
216 modes = fb_list_modes(&num_modes);
217 if (modes)
218 {
219 for (i = 0; i < num_modes; i++)
220 {
221 if ((modes[i].width == width) &&
222 (modes[i].height == height) &&
223 (!pdepth || modes[i].fb_var.bits_per_pixel == pdepth) &&
224 (modes[i].refresh == refresh))
225 {
226 if (pdepth) modes[i].fb_var.bits_per_pixel = pdepth;
227
228 if (ioctl(fb, FBIOPUT_VSCREENINFO, &modes[i].fb_var) == -1)
229 perror("ioctl FBIOPUT_VSCREENINFO");
230
231 free(modes);
232 return fb_getmode();
233 }
234 }
235 free(modes);
236 }
237 return mode;
238}
239
240FB_Mode *
241fb_changedepth(FB_Mode *cur_mode, unsigned int pdepth)
242{
243 cur_mode->fb_var.bits_per_pixel = pdepth;
244
245 if (ioctl(fb, FBIOPUT_VSCREENINFO, &cur_mode->fb_var) == -1)
246 perror("ioctl FBIOPUT_VSCREENINFO");
247
248 free(cur_mode);
249 return fb_getmode();
250}
251
252FB_Mode *
253fb_changeres(FB_Mode *cur_mode, unsigned int width, unsigned int height, unsigned int refresh)
254{
255 FB_Mode *modes;
256 unsigned int i, num_modes;
257
258 modes = fb_list_modes(&num_modes);
259 if (modes)
260 {
261 for (i = 0; i < num_modes; i++)
262 {
263 if ((modes[i].width == width) &&
264 (modes[i].height == height) &&
265 (modes[i].refresh == refresh))
266 {
267 modes[i].fb_var.bits_per_pixel = cur_mode->depth;
268
269 if (ioctl(fb, FBIOPUT_VSCREENINFO, &modes[i].fb_var) == -1)
270 perror("ioctl FBIOPUT_VSCREENINFO");
271
272 free(modes);
273 free(cur_mode);
274 return fb_getmode();
275 }
276 }
277 free(modes);
278 }
279 return cur_mode;
280}
281
282FB_Mode *
283fb_changemode(FB_Mode *cur_mode, unsigned int width, unsigned int height, unsigned int pdepth, unsigned int refresh)
284{
285 FB_Mode *modes;
286 unsigned int i, num_modes;
287
288 modes = fb_list_modes(&num_modes);
289 if (modes)
290 {
291 for (i = 0; i < num_modes; i++)
292 {
293 if ((modes[i].width == width) &&
294 (modes[i].height == height) &&
295 (!pdepth || modes[i].fb_var.bits_per_pixel == pdepth) &&
296 (modes[i].refresh == refresh))
297 {
298 if (pdepth) modes[i].fb_var.bits_per_pixel = pdepth;
299
300 if (ioctl(fb, FBIOPUT_VSCREENINFO, &modes[i].fb_var) == -1)
301 perror("ioctl FBIOPUT_VSCREENINFO");
302
303 free(modes);
304 free(cur_mode);
305 return fb_getmode();
306 }
307 }
308 free(modes);
309 }
310 return cur_mode;
311}
312
313FB_Mode *
314fb_getmode(void)
315{
316 FB_Mode *mode = NULL;
317 int hpix, lines, clockrate;
318
319 mode = malloc(sizeof(FB_Mode));
320 /* look what we have now ... */
321
322 if (ioctl(fb, FBIOGET_VSCREENINFO, &mode->fb_var) == -1)
323 {
324 perror("ioctl FBIOGET_VSCREENINFO");
325 return NULL;
326 }
327
328 mode->width = mode->fb_var.xres_virtual;
329 mode->height = mode->fb_var.yres_virtual;
330 hpix =
331 mode->fb_var.left_margin +
332 mode->fb_var.xres +
333 mode->fb_var.right_margin +
334 mode->fb_var.hsync_len;
335 lines =
336 mode->fb_var.upper_margin +
337 mode->fb_var.yres +
338 mode->fb_var.lower_margin +
339 mode->fb_var.vsync_len;
340 if (mode->fb_var.pixclock > 0)
341 clockrate = 1000000 / mode->fb_var.pixclock;
342 else
343 clockrate = 0;
344 if ((lines > 0) && (hpix > 0))
345 mode->refresh = clockrate * 1000000 / (lines * hpix);
346 switch (mode->fb_var.bits_per_pixel)
347 {
348 case 1:
349 bpp = 1;
350 depth = 1;
351 break;
352 case 4:
353 bpp = 1;
354 depth = 4;
355 break;
356 case 8:
357 bpp = 1;
358 depth = 8;
359 break;
360 case 15:
361 case 16:
362 if (mode->fb_var.green.length == 6)
363 depth = 16;
364 else
365 depth = 15;
366 bpp = 2;
367 break;
368 case 24:
369 depth = 24;
370 bpp = mode->fb_var.bits_per_pixel / 8;
371 break;
372 case 32:
373 depth = 32;
374 bpp = mode->fb_var.bits_per_pixel / 8;
375 break;
376 default:
377 ERR("Cannot handle framebuffer of depth %i",
378 mode->fb_var.bits_per_pixel);
379 fb_cleanup();
380 free(mode);
381 return NULL;
382 }
383 mode->depth = depth;
384 mode->bpp = bpp;
385 if (mode->depth == 8) fb_init_palette_332(mode);
386 else fb_init_palette_linear(mode);
387 return mode;
388}
389
390/* XXX: unused
391static void
392fb_setvt(int vtno)
393{
394 struct vt_stat vts;
395 char vtname[32];
396 int vtfd;
397
398 if (vtno < 0)
399 {
400 if ((ioctl(tty,VT_OPENQRY, &vtno) == -1))
401 {
402 perror("ioctl VT_OPENQRY");
403 return;
404 }
405 if (vtno <= 0 )
406 {
407 perror("ioctl VT_OPENQRY vtno <= 0");
408 return;
409 }
410 }
411 vtno &= 0xff;
412 sprintf(vtname, "/dev/tty%i", vtno);
413 if (chown(vtname, getuid(), getgid()) != 0)
414 {
415 vtfd = 0; // do nothing - don't worry about chown
416 }
417 if (access(vtname,R_OK | W_OK) == -1)
418 {
419 CRIT("Access %s: %s",vtname,strerror(errno));
420 return;
421 }
422 vtfd = open(vtname,O_RDWR);
423
424 if (ioctl(tty, VT_GETSTATE, &vts) == -1)
425 {
426 perror("ioctl VT_GETSTATE");
427 close(vtfd);
428 return;
429 }
430
431 orig_vt_no = vts.v_active;
432 close(vtfd);
433#if 0
434 if (ioctl(tty, VT_ACTIVATE, vtno) == -1)
435 {
436 perror("ioctl VT_ACTIVATE");
437 exit(1);
438 }
439 if (ioctl(tty, VT_WAITACTIVE, vtno) == -1)
440 {
441 perror("ioctl VT_WAITACTIVE");
442 exit(1);
443 }
444#endif
445}
446*/
447
448void
449fb_init(int vt __UNUSED__, int device)
450{
451 char dev[32];
452
453 tty = 0;
454#if 0
455 if (vt != 0) fb_setvt(vt);
456#endif
457
458 if ( getenv("EVAS_FB_DEV") )
459 {
460 fb = open(getenv("EVAS_FB_DEV"), O_RDWR);
461 }
462 else
463 {
464 sprintf(dev, "/dev/fb/%i", device);
465 fb = open(dev, O_RDWR);
466 if ( fb == -1 )
467 {
468 sprintf(dev, "/dev/fb%i", device);
469 fb = open(dev, O_RDWR);
470 }
471 }
472 if (fb == -1)
473 {
474 CRIT("open %s: %s", dev, strerror(errno));
475 fb_cleanup();
476 return;
477 }
478
479 if (ioctl(fb, FBIOGET_VSCREENINFO, &fb_ovar) == -1)
480 {
481 perror("ioctl FBIOGET_VSCREENINFO");
482 return;
483 }
484 if (ioctl(fb, FBIOGET_FSCREENINFO, &fb_fix) == -1)
485 {
486 perror("ioctl FBIOGET_FSCREENINFO");
487 return;
488 }
489
490 if ((fb_ovar.bits_per_pixel == 8) ||
491 (fb_fix.visual == FB_VISUAL_DIRECTCOLOR))
492 {
493 if (ioctl(fb,FBIOGETCMAP , &ocmap) == -1)
494 {
495 perror("ioctl FBIOGETCMAP");
496 return;
497 }
498 }
499#if 0
500 if (isatty(0))
501 tty = 0;
502 else if ((tty = open("/dev/tty",O_RDWR)) == -1)
503 {
504 CITICAL("open %s: %s", "/dev/tty", strerror(errno));
505 return;
506 }
507 if (tty)
508 {
509 if (ioctl(tty, KDGETMODE, &kd_mode) == -1)
510 {
511 perror("ioctl KDGETMODE");
512 return;
513 }
514 if (ioctl(tty, VT_GETMODE, &vt_omode) == -1)
515 {
516 perror("ioctl VT_GETMODE");
517 return;
518 }
519 }
520#endif
521}
522
523int
524fb_postinit(FB_Mode *mode)
525{
526 if (ioctl(fb,FBIOGET_FSCREENINFO, &fb_fix) == -1)
527 {
528 perror("ioctl FBIOGET_FSCREENINFO");
529 fb_cleanup();
530 return 0;
531 }
532
533 if (fb_fix.type != FB_TYPE_PACKED_PIXELS)
534 {
535 CRIT("can handle only packed pixel frame buffers");
536 fb_cleanup();
537 return 0;
538 }
539 mode->mem_offset = (unsigned)(fb_fix.smem_start) & (getpagesize()-1);
540 mode->mem = (unsigned char *)mmap(NULL, fb_fix.smem_len + mode->mem_offset,
541 PROT_WRITE | PROT_READ, MAP_SHARED, fb, 0);
542 if (mode->mem == MAP_FAILED)
543 {
544 perror("mmap");
545 fb_cleanup();
546 }
547 /* move viewport to upper left corner */
548 if ((mode->fb_var.xoffset != 0) || (mode->fb_var.yoffset != 0))
549 {
550 mode->fb_var.xoffset = 0;
551 mode->fb_var.yoffset = 0;
552
553 if (ioctl(fb, FBIOPAN_DISPLAY, &(mode->fb_var)) == -1)
554 {
555 perror("ioctl FBIOPAN_DISPLAY");
556 fb_cleanup();
557 }
558 }
559#if 0
560 if (tty)
561 {
562 if (ioctl(tty,KDSETMODE, KD_GRAPHICS) == -1)
563 {
564 perror("ioctl KDSETMODE");
565 fb_cleanup();
566 }
567 }
568#endif
569 mode->fb_fd = fb;
570 return fb;
571}
572
573static void
574fb_cleanup(void)
575{
576 /* restore console */
577 if (ioctl(fb, FBIOPUT_VSCREENINFO, &fb_ovar) == -1)
578 perror("ioctl FBIOPUT_VSCREENINFO");
579 if (ioctl(fb, FBIOGET_FSCREENINFO, &fb_fix) == -1)
580 perror("ioctl FBIOGET_FSCREENINFO");
581 if ((fb_ovar.bits_per_pixel == 8) ||
582 (fb_fix.visual == FB_VISUAL_DIRECTCOLOR))
583 {
584 if (ioctl(fb, FBIOPUTCMAP, &ocmap) == -1)
585 perror("ioctl FBIOPUTCMAP");
586 }
587 close(fb);
588 if (tty)
589 {
590 if (ioctl(tty, KDSETMODE, kd_mode) == -1)
591 perror("ioctl KDSETMODE");
592 if (ioctl(tty, VT_SETMODE, &vt_omode) == -1)
593 perror("ioctl VT_SETMODE");
594#if 0
595 if ((ioctl(tty, VT_ACTIVATE, orig_vt_no) == -1) && (orig_vt_no))
596 perror("ioctl VT_ACTIVATE");
597#endif
598 }
599 close(tty);
600}
diff --git a/libraries/evas/src/modules/engines/fb/evas_outbuf.c b/libraries/evas/src/modules/engines/fb/evas_outbuf.c
new file mode 100644
index 0000000..57cf7a6
--- /dev/null
+++ b/libraries/evas/src/modules/engines/fb/evas_outbuf.c
@@ -0,0 +1,397 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3#include <sys/time.h>
4#include <sys/utsname.h>
5
6void
7evas_fb_outbuf_fb_init(void)
8{
9}
10
11void
12evas_fb_outbuf_fb_free(Outbuf *buf)
13{
14 /* FIXME: implement */
15 WRN("destroying fb info.. not implemented!!!! WARNING. LEAK!");
16 if (buf->priv.back_buf)
17 evas_cache_image_drop(&buf->priv.back_buf->cache_entry);
18 free(buf);
19}
20
21Outbuf *
22evas_fb_outbuf_fb_setup_fb(int w, int h, int rot, Outbuf_Depth depth, int vt_no, int dev_no, int refresh)
23{
24 /* create outbuf struct */
25 /* setup window and/or fb */
26 /* if (dithered) create backbuf */
27 Outbuf *buf;
28 int fb_fd = -1;
29 int fb_depth;
30
31 fb_depth = -1;
32 if (depth == OUTBUF_DEPTH_RGB_16BPP_565_565_DITHERED) fb_depth = 16;
33 else if (depth == OUTBUF_DEPTH_RGB_16BPP_555_555_DITHERED) fb_depth = 15;
34 else if (depth == OUTBUF_DEPTH_RGB_16BPP_565_444_DITHERED) fb_depth = 16;
35 else if (depth == OUTBUF_DEPTH_RGB_16BPP_444_444_DITHERED) fb_depth = 12;
36 else if (depth == OUTBUF_DEPTH_RGB_32BPP_888_8888) fb_depth = 32;
37 else if (depth == OUTBUF_DEPTH_INHERIT) fb_depth = 0;
38 buf = calloc(1, sizeof(Outbuf));
39 if (!buf)
40 return NULL;
41
42 fb_init(vt_no, dev_no);
43 if (rot == 0 || rot == 180)
44 buf->priv.fb.fb = fb_setmode(w, h, fb_depth, refresh);
45 else if (rot == 90 || rot == 270)
46 buf->priv.fb.fb = fb_setmode(h, w, fb_depth, refresh);
47 if (!buf->priv.fb.fb) buf->priv.fb.fb = fb_getmode();
48 if (!buf->priv.fb.fb)
49 {
50 free(buf);
51 return NULL;
52 }
53 fb_fd = fb_postinit(buf->priv.fb.fb);
54
55 if (rot == 0 || rot == 180)
56 {
57 buf->w = buf->priv.fb.fb->width;
58 buf->h = buf->priv.fb.fb->height;
59 }
60 else if (rot == 90 || rot == 270)
61 {
62 buf->w = buf->priv.fb.fb->height;
63 buf->h = buf->priv.fb.fb->width;
64 }
65
66 buf->depth = depth;
67 buf->rot = rot;
68
69 {
70 Gfx_Func_Convert conv_func;
71 int i;
72
73 buf->priv.mask.r = 0;
74 for (i = 0; i < (int)buf->priv.fb.fb->fb_var.red.length; i++)
75 buf->priv.mask.r |= (1 << (buf->priv.fb.fb->fb_var.red.offset + i));
76 buf->priv.mask.g = 0;
77 for (i = 0; i < (int)buf->priv.fb.fb->fb_var.green.length; i++)
78 buf->priv.mask.g |= (1 << (buf->priv.fb.fb->fb_var.green.offset + i));
79 buf->priv.mask.b = 0;
80 for (i = 0; i < (int)buf->priv.fb.fb->fb_var.blue.length; i++)
81 buf->priv.mask.b |= (1 << (buf->priv.fb.fb->fb_var.blue.offset + i));
82
83 conv_func = NULL;
84 if (buf->rot == 0 || buf->rot == 180)
85 conv_func = evas_common_convert_func_get(0, buf->w, buf->h,
86 buf->priv.fb.fb->fb_var.bits_per_pixel,
87 buf->priv.mask.r,
88 buf->priv.mask.g,
89 buf->priv.mask.b,
90 PAL_MODE_NONE,
91 buf->rot);
92 else if (buf->rot == 90 || buf->rot == 270)
93 conv_func = evas_common_convert_func_get(0, buf->h, buf->w,
94 buf->priv.fb.fb->fb_var.bits_per_pixel,
95 buf->priv.mask.r,
96 buf->priv.mask.g,
97 buf->priv.mask.b,
98 PAL_MODE_NONE,
99 buf->rot);
100 if (!conv_func)
101 {
102 free(buf);
103 return NULL;
104 }
105 }
106// if (buf->priv.fb.fb->fb_var.bits_per_pixel < 24)
107// buf->priv.back_buf = evas_common_image_create(buf->w, buf->h);
108
109 return buf;
110}
111
112void
113evas_fb_outbuf_fb_blit(Outbuf *buf, int src_x, int src_y, int w, int h, int dst_x, int dst_y)
114{
115 if (buf->priv.back_buf)
116 {
117 evas_common_blit_rectangle(buf->priv.back_buf, buf->priv.back_buf,
118 src_x, src_y, w, h, dst_x, dst_y);
119 evas_fb_outbuf_fb_update(buf, dst_x, dst_y, w, h);
120 }
121 else
122 {
123 if (buf->priv.fb.fb)
124 {
125 /* FIXME: need to implement an fb call for "copy area" */
126 }
127 }
128}
129
130void
131evas_fb_outbuf_fb_update(Outbuf *buf, int x, int y, int w, int h)
132{
133 if (!(buf->priv.back_buf)) return;
134 if (buf->priv.fb.fb)
135 {
136 Gfx_Func_Convert conv_func;
137 DATA8 *data;
138
139 data = NULL;
140 conv_func = NULL;
141 if (buf->rot == 0)
142 {
143 data = (DATA8 *)buf->priv.fb.fb->mem + buf->priv.fb.fb->mem_offset +
144 buf->priv.fb.fb->bpp *
145 (x + (y * buf->priv.fb.fb->width));
146 conv_func = evas_common_convert_func_get(data, w, h, buf->priv.fb.fb->fb_var.bits_per_pixel,
147 buf->priv.mask.r, buf->priv.mask.g,
148 buf->priv.mask.b, PAL_MODE_NONE,
149 buf->rot);
150 }
151 else if (buf->rot == 180)
152 {
153 data = (DATA8 *)buf->priv.fb.fb->mem + buf->priv.fb.fb->mem_offset +
154 buf->priv.fb.fb->bpp *
155 (buf->w - x - w + ((buf->h - y - h) * buf->priv.fb.fb->width));
156 conv_func = evas_common_convert_func_get(data, w, h, buf->priv.fb.fb->fb_var.bits_per_pixel,
157 buf->priv.mask.r, buf->priv.mask.g,
158 buf->priv.mask.b, PAL_MODE_NONE,
159 buf->rot);
160 }
161 else if (buf->rot == 270)
162 {
163 data = (DATA8 *)buf->priv.fb.fb->mem + buf->priv.fb.fb->mem_offset +
164 buf->priv.fb.fb->bpp *
165 (buf->h - y - h + (x * buf->priv.fb.fb->width));
166 conv_func = evas_common_convert_func_get(data, h, w, buf->priv.fb.fb->fb_var.bits_per_pixel,
167 buf->priv.mask.r, buf->priv.mask.g,
168 buf->priv.mask.b, PAL_MODE_NONE,
169 buf->rot);
170 }
171 else if (buf->rot == 90)
172 {
173 data = (DATA8 *)buf->priv.fb.fb->mem + buf->priv.fb.fb->mem_offset +
174 buf->priv.fb.fb->bpp *
175 (y + ((buf->w - x - w) * buf->priv.fb.fb->width));
176 conv_func = evas_common_convert_func_get(data, h, w, buf->priv.fb.fb->fb_var.bits_per_pixel,
177 buf->priv.mask.r, buf->priv.mask.g,
178 buf->priv.mask.b, PAL_MODE_NONE,
179 buf->rot);
180 }
181 if (conv_func)
182 {
183 DATA32 *src_data;
184
185 src_data = buf->priv.back_buf->image.data + (y * buf->w) + x;
186 if (buf->rot == 0 || buf->rot == 180)
187 {
188 conv_func(src_data, data,
189 buf->w - w,
190 buf->priv.fb.fb->width - w,
191 w, h,
192 x, y, NULL);
193 }
194 else if (buf->rot == 90 || buf->rot == 270)
195 {
196 conv_func(src_data, data,
197 buf->w - w,
198 buf->priv.fb.fb->width - h,
199 h, w,
200 x, y, NULL);
201 }
202 }
203 }
204}
205
206RGBA_Image *
207evas_fb_outbuf_fb_new_region_for_update(Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch)
208{
209 if (buf->priv.back_buf)
210 {
211 *cx = x; *cy = y; *cw = w; *ch = h;
212 return buf->priv.back_buf;
213 }
214 else
215 {
216 RGBA_Image *im;
217
218 *cx = 0; *cy = 0; *cw = w; *ch = h;
219 im = (RGBA_Image *) evas_cache_image_empty(evas_common_image_cache_get());
220 im->cache_entry.flags.alpha = 1;
221 im = (RGBA_Image *) evas_cache_image_size_set(&im->cache_entry, w, h);
222
223 return im;
224 }
225 return NULL;
226}
227
228void
229evas_fb_outbuf_fb_free_region_for_update(Outbuf *buf, RGBA_Image *update)
230{
231 if (update != buf->priv.back_buf) evas_cache_image_drop(&update->cache_entry);
232}
233
234void
235evas_fb_outbuf_fb_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h)
236{
237 if (!buf->priv.fb.fb) return;
238 if (buf->priv.back_buf)
239 {
240 if (update != buf->priv.back_buf)
241 evas_common_blit_rectangle(update, buf->priv.back_buf,
242 0, 0, w, h, x, y);
243 evas_fb_outbuf_fb_update(buf, x, y, w, h);
244 }
245 else
246 {
247 Gfx_Func_Convert conv_func;
248 DATA8 *data;
249
250 data = NULL;
251 conv_func = NULL;
252 if (buf->rot == 0)
253 {
254 data = (DATA8 *)buf->priv.fb.fb->mem +
255 buf->priv.fb.fb->mem_offset +
256 buf->priv.fb.fb->bpp *
257 (x + (y * buf->priv.fb.fb->width));
258 conv_func = evas_common_convert_func_get(data, w, h,
259 buf->priv.fb.fb->fb_var.bits_per_pixel,
260 buf->priv.mask.r, buf->priv.mask.g,
261 buf->priv.mask.b, PAL_MODE_NONE,
262 buf->rot);
263 }
264 else if (buf->rot == 180)
265 {
266 data = (DATA8 *)buf->priv.fb.fb->mem +
267 buf->priv.fb.fb->mem_offset +
268 buf->priv.fb.fb->bpp *
269 (buf->w - x - w + ((buf->h - y - h) * buf->priv.fb.fb->width));
270 conv_func = evas_common_convert_func_get(data, w, h,
271 buf->priv.fb.fb->fb_var.bits_per_pixel,
272 buf->priv.mask.r, buf->priv.mask.g,
273 buf->priv.mask.b, PAL_MODE_NONE,
274 buf->rot);
275 }
276 else if (buf->rot == 270)
277 {
278 data = (DATA8 *)buf->priv.fb.fb->mem +
279 buf->priv.fb.fb->mem_offset +
280 buf->priv.fb.fb->bpp *
281 (buf->h - y - h + (x * buf->priv.fb.fb->width));
282 conv_func = evas_common_convert_func_get(data, h, w,
283 buf->priv.fb.fb->fb_var.bits_per_pixel,
284 buf->priv.mask.r, buf->priv.mask.g,
285 buf->priv.mask.b, PAL_MODE_NONE,
286 buf->rot);
287 }
288 else if (buf->rot == 90)
289 {
290 data = (DATA8 *)buf->priv.fb.fb->mem +
291 buf->priv.fb.fb->mem_offset +
292 buf->priv.fb.fb->bpp *
293 (y + ((buf->w - x - w) * buf->priv.fb.fb->width));
294 conv_func = evas_common_convert_func_get(data, h, w,
295 buf->priv.fb.fb->fb_var.bits_per_pixel,
296 buf->priv.mask.r, buf->priv.mask.g,
297 buf->priv.mask.b, PAL_MODE_NONE,
298 buf->rot);
299 }
300 if (conv_func)
301 {
302 DATA32 *src_data;
303
304 src_data = update->image.data;
305 if (buf->rot == 0 || buf->rot == 180)
306 {
307 conv_func(src_data, data,
308 0,
309 buf->priv.fb.fb->width - w,
310 w, h,
311 x, y, NULL);
312 }
313 else if (buf->rot == 90 || buf->rot == 270)
314 {
315 conv_func(src_data, data,
316 0,
317 buf->priv.fb.fb->width - h,
318 h, w,
319 x, y, NULL);
320 }
321 }
322 }
323}
324
325void
326evas_fb_outbuf_fb_reconfigure(Outbuf *buf, int w, int h, int rot, Outbuf_Depth depth)
327{
328 if ((w == buf->w) && (h == buf->h) &&
329 (rot == buf->rot) && (depth == buf->depth))
330 return;
331 if (buf->priv.back_buf)
332 {
333 evas_cache_image_drop(&buf->priv.back_buf->cache_entry);
334 buf->priv.back_buf = NULL;
335 }
336 if (buf->priv.fb.fb)
337 {
338 /* FIXME: implement this */
339 }
340 /* if backbuf delet it */
341 /* resize window or reset fb mode */
342 /* if (dithered) create new backbuf */
343}
344
345int
346evas_fb_outbuf_fb_get_width(Outbuf *buf)
347{
348 return buf->w;
349}
350
351int
352evas_fb_outbuf_fb_get_height(Outbuf *buf)
353{
354 return buf->h;
355}
356
357Outbuf_Depth
358evas_fb_outbuf_fb_get_depth(Outbuf *buf)
359{
360 return buf->depth;
361}
362
363int
364evas_fb_outbuf_fb_get_rot(Outbuf *buf)
365{
366 return buf->rot;
367}
368
369int
370evas_fb_outbuf_fb_get_have_backbuf(Outbuf *buf)
371{
372 if (buf->priv.back_buf) return 1;
373 return 0;
374}
375
376void
377evas_fb_outbuf_fb_set_have_backbuf(Outbuf *buf, int have_backbuf)
378{
379 if (buf->priv.back_buf)
380 {
381 if (have_backbuf) return;
382 evas_cache_image_drop(&buf->priv.back_buf->cache_entry);
383 buf->priv.back_buf = NULL;
384 }
385 else
386 {
387 if (!have_backbuf) return;
388 if (buf->priv.fb.fb)
389 {
390 if (buf->priv.fb.fb->fb_var.bits_per_pixel < 24)
391 {
392 buf->priv.back_buf = (RGBA_Image *) evas_cache_image_empty(evas_common_image_cache_get());
393 buf->priv.back_buf = (RGBA_Image *) evas_cache_image_size_set(&buf->priv.back_buf->cache_entry, buf->w, buf->h);
394 }
395 }
396 }
397}
diff --git a/libraries/evas/src/modules/engines/gl_cocoa/Evas_Engine_GL_Cocoa.h b/libraries/evas/src/modules/engines/gl_cocoa/Evas_Engine_GL_Cocoa.h
new file mode 100644
index 0000000..eb04d28
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_cocoa/Evas_Engine_GL_Cocoa.h
@@ -0,0 +1,20 @@
1#ifndef __EVAS_ENGINE_GL_COCOA_H__
2#define __EVAS_ENGINE_GL_COCOA_H__
3
4typedef struct _Evas_Engine_Info_GL_Cocoa Evas_Engine_Info_GL_Cocoa;
5
6struct _Evas_Engine_Info_GL_Cocoa
7{
8 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
9 /* at you and make nasty noises */
10 Evas_Engine_Info magic;
11
12 /* engine specific data & parameters it needs to set up */
13 void *window;
14 void *view;
15 int depth;
16
17};
18
19
20#endif /* __EVAS_ENGINE_GL_COCOA_H__ */
diff --git a/libraries/evas/src/modules/engines/gl_cocoa/Makefile.am b/libraries/evas/src/modules/engines/gl_cocoa/Makefile.am
new file mode 100644
index 0000000..d502846
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_cocoa/Makefile.am
@@ -0,0 +1,46 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines/gl_common \
9@EINA_CFLAGS@ \
10@GL_EET_CFLAGS@ \
11@FREETYPE_CFLAGS@ \
12@evas_engine_gl_cocoa_cflags@
13
14if BUILD_ENGINE_GL_COCOA
15
16GL_COCOA_SOURCES = evas_engine.c\
17evas_gl_cocoa_main.m
18
19
20GL_COCOA_LIBADD = @evas_engine_gl_cocoa_libs@ $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
21
22
23includes_HEADERS = Evas_Engine_GL_Cocoa.h
24includesdir = $(includedir)/evas-@VMAJ@
25
26if !EVAS_STATIC_BUILD_GL_COCOA
27
28pkgdir = $(libdir)/evas/modules/engines/gl_cocoa/$(MODULE_ARCH)
29pkg_LTLIBRARIES = module.la
30
31module_la_SOURCES = $(GL_COCOA_SOURCES)
32module_la_LIBADD = @EINA_LIBS@ @GL_EET_LIBS@ $(GL_COCOA_LIBADD) $(top_builddir)/src/lib/libevas.la @dlopen_libs@
33module_la_LDFLAGS = -module -avoid-version
34module_la_LIBTOOLFLAGS = --tag=disable-static
35
36else
37
38noinst_LTLIBRARIES = libevas_engine_gl_cocoa.la
39
40libevas_engine_gl_cocoa_la_SOURCES = $(GL_COCOA_SOURCES)
41libevas_engine_gl_cocoa_la_LIBADD = $(GL_COCOA_LIBADD)
42
43endif
44endif
45
46EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/gl_cocoa/Makefile.in b/libraries/evas/src/modules/engines/gl_cocoa/Makefile.in
new file mode 100644
index 0000000..ceea03d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_cocoa/Makefile.in
@@ -0,0 +1,848 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/gl_cocoa
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84@BUILD_ENGINE_GL_COCOA_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
85@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_TRUE@libevas_engine_gl_cocoa_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_gl_cocoa_la_SOURCES_DIST = evas_engine.c \
87 evas_gl_cocoa_main.m
88@BUILD_ENGINE_GL_COCOA_TRUE@am__objects_1 = evas_engine.lo \
89@BUILD_ENGINE_GL_COCOA_TRUE@ evas_gl_cocoa_main.lo
90@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_TRUE@am_libevas_engine_gl_cocoa_la_OBJECTS = $(am__objects_1)
91libevas_engine_gl_cocoa_la_OBJECTS = \
92 $(am_libevas_engine_gl_cocoa_la_OBJECTS)
93AM_V_lt = $(am__v_lt_$(V))
94am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
95am__v_lt_0 = --silent
96@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_TRUE@am_libevas_engine_gl_cocoa_la_rpath =
97@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_FALSE@module_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
98@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_FALSE@ $(top_builddir)/src/lib/libevas.la
99am__module_la_SOURCES_DIST = evas_engine.c evas_gl_cocoa_main.m
100@BUILD_ENGINE_GL_COCOA_TRUE@am__objects_2 = module_la-evas_engine.lo \
101@BUILD_ENGINE_GL_COCOA_TRUE@ module_la-evas_gl_cocoa_main.lo
102@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_FALSE@am_module_la_OBJECTS = $(am__objects_2)
103module_la_OBJECTS = $(am_module_la_OBJECTS)
104module_la_LINK = $(LIBTOOL) $(AM_V_lt) $(module_la_LIBTOOLFLAGS) \
105 $(LIBTOOLFLAGS) --mode=link $(OBJCLD) $(AM_OBJCFLAGS) \
106 $(OBJCFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
107@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_FALSE@am_module_la_rpath = -rpath \
108@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_FALSE@ $(pkgdir)
109DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
110depcomp = $(SHELL) $(top_srcdir)/depcomp
111am__depfiles_maybe = depfiles
112am__mv = mv -f
113COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
114 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
115LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
116 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
117 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
118 $(AM_CFLAGS) $(CFLAGS)
119AM_V_CC = $(am__v_CC_$(V))
120am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
121am__v_CC_0 = @echo " CC " $@;
122AM_V_at = $(am__v_at_$(V))
123am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
124am__v_at_0 = @
125CCLD = $(CC)
126LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
127 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
128 $(AM_LDFLAGS) $(LDFLAGS) -o $@
129AM_V_CCLD = $(am__v_CCLD_$(V))
130am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
131am__v_CCLD_0 = @echo " CCLD " $@;
132OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
133 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS)
134LTOBJCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
135 $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) \
136 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
137 $(AM_OBJCFLAGS) $(OBJCFLAGS)
138AM_V_OBJC = $(am__v_OBJC_$(V))
139am__v_OBJC_ = $(am__v_OBJC_$(AM_DEFAULT_VERBOSITY))
140am__v_OBJC_0 = @echo " OBJC " $@;
141OBJCLD = $(OBJC)
142OBJCLINK = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
143 --mode=link $(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) \
144 $(AM_LDFLAGS) $(LDFLAGS) -o $@
145AM_V_OBJCLD = $(am__v_OBJCLD_$(V))
146am__v_OBJCLD_ = $(am__v_OBJCLD_$(AM_DEFAULT_VERBOSITY))
147am__v_OBJCLD_0 = @echo " OBJCLD" $@;
148AM_V_GEN = $(am__v_GEN_$(V))
149am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
150am__v_GEN_0 = @echo " GEN " $@;
151SOURCES = $(libevas_engine_gl_cocoa_la_SOURCES) $(module_la_SOURCES)
152DIST_SOURCES = $(am__libevas_engine_gl_cocoa_la_SOURCES_DIST) \
153 $(am__module_la_SOURCES_DIST)
154am__includes_HEADERS_DIST = Evas_Engine_GL_Cocoa.h
155HEADERS = $(includes_HEADERS)
156ETAGS = etags
157CTAGS = ctags
158DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
159ACLOCAL = @ACLOCAL@
160ALLOCA = @ALLOCA@
161AMTAR = @AMTAR@
162AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
163AR = @AR@
164AS = @AS@
165AUTOCONF = @AUTOCONF@
166AUTOHEADER = @AUTOHEADER@
167AUTOMAKE = @AUTOMAKE@
168AWK = @AWK@
169CC = @CC@
170CCDEPMODE = @CCDEPMODE@
171CFLAGS = @CFLAGS@
172CHECK_CFLAGS = @CHECK_CFLAGS@
173CHECK_LIBS = @CHECK_LIBS@
174CPP = @CPP@
175CPPFLAGS = @CPPFLAGS@
176CXX = @CXX@
177CXXCPP = @CXXCPP@
178CXXDEPMODE = @CXXDEPMODE@
179CXXFLAGS = @CXXFLAGS@
180CYGPATH_W = @CYGPATH_W@
181DEFS = @DEFS@
182DEPDIR = @DEPDIR@
183DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
184DIRECTFB_LIBS = @DIRECTFB_LIBS@
185DLLTOOL = @DLLTOOL@
186DSYMUTIL = @DSYMUTIL@
187DUMPBIN = @DUMPBIN@
188ECHO_C = @ECHO_C@
189ECHO_N = @ECHO_N@
190ECHO_T = @ECHO_T@
191ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
192ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
193EDB_CFLAGS = @EDB_CFLAGS@
194EDB_LIBS = @EDB_LIBS@
195EDJE_CFLAGS = @EDJE_CFLAGS@
196EDJE_LIBS = @EDJE_LIBS@
197EET_CFLAGS = @EET_CFLAGS@
198EET_LIBS = @EET_LIBS@
199EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
200EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
201EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
202EGREP = @EGREP@
203EINA_CFLAGS = @EINA_CFLAGS@
204EINA_LIBS = @EINA_LIBS@
205EVAS_CFLAGS = @EVAS_CFLAGS@
206EVAS_LIBS = @EVAS_LIBS@
207EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
208EVIL_CFLAGS = @EVIL_CFLAGS@
209EVIL_LIBS = @EVIL_LIBS@
210EXEEXT = @EXEEXT@
211FGREP = @FGREP@
212FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
213FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
214FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
215FREETYPE_LIBS = @FREETYPE_LIBS@
216FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
217FRIBIDI_LIBS = @FRIBIDI_LIBS@
218GL_EET_CFLAGS = @GL_EET_CFLAGS@
219GL_EET_LIBS = @GL_EET_LIBS@
220GREP = @GREP@
221HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
222HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
223INSTALL = @INSTALL@
224INSTALL_DATA = @INSTALL_DATA@
225INSTALL_PROGRAM = @INSTALL_PROGRAM@
226INSTALL_SCRIPT = @INSTALL_SCRIPT@
227INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
228LD = @LD@
229LDFLAGS = @LDFLAGS@
230LIBOBJS = @LIBOBJS@
231LIBS = @LIBS@
232LIBTOOL = @LIBTOOL@
233LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
234LINEBREAK_LIBS = @LINEBREAK_LIBS@
235LIPO = @LIPO@
236LN_S = @LN_S@
237LTLIBOBJS = @LTLIBOBJS@
238MAKEINFO = @MAKEINFO@
239MKDIR_P = @MKDIR_P@
240MODULE_ARCH = @MODULE_ARCH@
241NM = @NM@
242NMEDIT = @NMEDIT@
243OBJC = @OBJC@
244OBJCDEPMODE = @OBJCDEPMODE@
245OBJCFLAGS = @OBJCFLAGS@
246OBJDUMP = @OBJDUMP@
247OBJEXT = @OBJEXT@
248OTOOL = @OTOOL@
249OTOOL64 = @OTOOL64@
250PACKAGE = @PACKAGE@
251PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
252PACKAGE_NAME = @PACKAGE_NAME@
253PACKAGE_STRING = @PACKAGE_STRING@
254PACKAGE_TARNAME = @PACKAGE_TARNAME@
255PACKAGE_URL = @PACKAGE_URL@
256PACKAGE_VERSION = @PACKAGE_VERSION@
257PATH_SEPARATOR = @PATH_SEPARATOR@
258PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
259PIXMAN_LIBS = @PIXMAN_LIBS@
260PKG_CONFIG = @PKG_CONFIG@
261PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
262PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
263PNG_CFLAGS = @PNG_CFLAGS@
264PNG_LIBS = @PNG_LIBS@
265RANLIB = @RANLIB@
266SDL_CFLAGS = @SDL_CFLAGS@
267SDL_LIBS = @SDL_LIBS@
268SED = @SED@
269SET_MAKE = @SET_MAKE@
270SHELL = @SHELL@
271SHM_OPEN_LINK = @SHM_OPEN_LINK@
272STRIP = @STRIP@
273SVG_CFLAGS = @SVG_CFLAGS@
274SVG_LIBS = @SVG_LIBS@
275VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
276VALGRIND_LIBS = @VALGRIND_LIBS@
277VERSION = @VERSION@
278VMAJ = @VMAJ@
279WIN32_CFLAGS = @WIN32_CFLAGS@
280WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
281XCB_CFLAGS = @XCB_CFLAGS@
282XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
283XCB_GL_LIBS = @XCB_GL_LIBS@
284XCB_LIBS = @XCB_LIBS@
285XEXT_CFLAGS = @XEXT_CFLAGS@
286XEXT_LIBS = @XEXT_LIBS@
287XMKMF = @XMKMF@
288X_CFLAGS = @X_CFLAGS@
289X_EXTRA_LIBS = @X_EXTRA_LIBS@
290X_LIBS = @X_LIBS@
291X_PRE_LIBS = @X_PRE_LIBS@
292abs_builddir = @abs_builddir@
293abs_srcdir = @abs_srcdir@
294abs_top_builddir = @abs_top_builddir@
295abs_top_srcdir = @abs_top_srcdir@
296ac_ct_CC = @ac_ct_CC@
297ac_ct_CXX = @ac_ct_CXX@
298ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
299ac_ct_OBJC = @ac_ct_OBJC@
300altivec_cflags = @altivec_cflags@
301am__include = @am__include@
302am__leading_dot = @am__leading_dot@
303am__quote = @am__quote@
304am__tar = @am__tar@
305am__untar = @am__untar@
306bindir = @bindir@
307build = @build@
308build_alias = @build_alias@
309build_cpu = @build_cpu@
310build_os = @build_os@
311build_vendor = @build_vendor@
312builddir = @builddir@
313datadir = @datadir@
314datarootdir = @datarootdir@
315dlopen_libs = @dlopen_libs@
316docdir = @docdir@
317dvidir = @dvidir@
318edje_cc = @edje_cc@
319efl_doxygen = @efl_doxygen@
320efl_have_doxygen = @efl_have_doxygen@
321evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
322evas_engine_buffer_libs = @evas_engine_buffer_libs@
323evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
324evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
325evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
326evas_engine_directfb_libs = @evas_engine_directfb_libs@
327evas_engine_fb_cflags = @evas_engine_fb_cflags@
328evas_engine_fb_libs = @evas_engine_fb_libs@
329evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
330evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
331evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
332evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
333evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
334evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
335evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
336evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
337evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
338evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
339evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
340evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
341evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
342evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
343evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
344evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
345evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
346evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
347evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
348evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
349evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
350evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
351evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
352evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
353evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
354evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
355evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
356evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
357evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
358evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
359evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
360evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
361evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
362evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
363evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
364evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
365evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
366evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
367evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
368evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
369evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
370evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
371evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
372evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
373evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
374evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
375evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
376evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
377evas_image_loader_png_libs = @evas_image_loader_png_libs@
378evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
379evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
380evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
381evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
382evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
383evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
384evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
385evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
386evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
387evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
388evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
389evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
390exec_prefix = @exec_prefix@
391have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
392have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
393have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
394have_evas_engine_software_x11 = @have_evas_engine_software_x11@
395have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
396have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
397have_lcov = @have_lcov@
398host = @host@
399host_alias = @host_alias@
400host_cpu = @host_cpu@
401host_os = @host_os@
402host_vendor = @host_vendor@
403htmldir = @htmldir@
404includedir = @includedir@
405infodir = @infodir@
406install_sh = @install_sh@
407libdir = @libdir@
408libexecdir = @libexecdir@
409localedir = @localedir@
410localstatedir = @localstatedir@
411lt_ECHO = @lt_ECHO@
412lt_enable_auto_import = @lt_enable_auto_import@
413mandir = @mandir@
414mkdir_p = @mkdir_p@
415oldincludedir = @oldincludedir@
416pdfdir = @pdfdir@
417pkgconfig_requires_private = @pkgconfig_requires_private@
418prefix = @prefix@
419program_transform_name = @program_transform_name@
420psdir = @psdir@
421pthread_cflags = @pthread_cflags@
422pthread_libs = @pthread_libs@
423release_info = @release_info@
424requirement_evas = @requirement_evas@
425sbindir = @sbindir@
426sharedstatedir = @sharedstatedir@
427srcdir = @srcdir@
428sysconfdir = @sysconfdir@
429target_alias = @target_alias@
430top_build_prefix = @top_build_prefix@
431top_builddir = @top_builddir@
432top_srcdir = @top_srcdir@
433version_info = @version_info@
434MAINTAINERCLEANFILES = Makefile.in
435AM_CPPFLAGS = \
436-I. \
437-I$(top_srcdir)/src/lib \
438-I$(top_srcdir)/src/lib/include \
439-I$(top_srcdir)/src/modules/engines/gl_common \
440@EINA_CFLAGS@ \
441@GL_EET_CFLAGS@ \
442@FREETYPE_CFLAGS@ \
443@evas_engine_gl_cocoa_cflags@
444
445@BUILD_ENGINE_GL_COCOA_TRUE@GL_COCOA_SOURCES = evas_engine.c\
446@BUILD_ENGINE_GL_COCOA_TRUE@evas_gl_cocoa_main.m
447
448@BUILD_ENGINE_GL_COCOA_TRUE@GL_COCOA_LIBADD = @evas_engine_gl_cocoa_libs@ $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
449@BUILD_ENGINE_GL_COCOA_TRUE@includes_HEADERS = Evas_Engine_GL_Cocoa.h
450@BUILD_ENGINE_GL_COCOA_TRUE@includesdir = $(includedir)/evas-@VMAJ@
451@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_FALSE@pkgdir = $(libdir)/evas/modules/engines/gl_cocoa/$(MODULE_ARCH)
452@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_FALSE@pkg_LTLIBRARIES = module.la
453@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_FALSE@module_la_SOURCES = $(GL_COCOA_SOURCES)
454@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_FALSE@module_la_LIBADD = @EINA_LIBS@ @GL_EET_LIBS@ $(GL_COCOA_LIBADD) $(top_builddir)/src/lib/libevas.la @dlopen_libs@
455@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_FALSE@module_la_LDFLAGS = -module -avoid-version
456@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
457@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_TRUE@noinst_LTLIBRARIES = libevas_engine_gl_cocoa.la
458@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_TRUE@libevas_engine_gl_cocoa_la_SOURCES = $(GL_COCOA_SOURCES)
459@BUILD_ENGINE_GL_COCOA_TRUE@@EVAS_STATIC_BUILD_GL_COCOA_TRUE@libevas_engine_gl_cocoa_la_LIBADD = $(GL_COCOA_LIBADD)
460EXTRA_DIST = evas_engine.h
461all: all-am
462
463.SUFFIXES:
464.SUFFIXES: .c .lo .m .o .obj
465$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
466 @for dep in $?; do \
467 case '$(am__configure_deps)' in \
468 *$$dep*) \
469 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
470 && { if test -f $@; then exit 0; else break; fi; }; \
471 exit 1;; \
472 esac; \
473 done; \
474 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/gl_cocoa/Makefile'; \
475 $(am__cd) $(top_srcdir) && \
476 $(AUTOMAKE) --gnu src/modules/engines/gl_cocoa/Makefile
477.PRECIOUS: Makefile
478Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
479 @case '$?' in \
480 *config.status*) \
481 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
482 *) \
483 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
484 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
485 esac;
486
487$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
488 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
489
490$(top_srcdir)/configure: $(am__configure_deps)
491 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
492$(ACLOCAL_M4): $(am__aclocal_m4_deps)
493 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
494$(am__aclocal_m4_deps):
495
496clean-noinstLTLIBRARIES:
497 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
498 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
499 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
500 test "$$dir" != "$$p" || dir=.; \
501 echo "rm -f \"$${dir}/so_locations\""; \
502 rm -f "$${dir}/so_locations"; \
503 done
504install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
505 @$(NORMAL_INSTALL)
506 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
507 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
508 list2=; for p in $$list; do \
509 if test -f $$p; then \
510 list2="$$list2 $$p"; \
511 else :; fi; \
512 done; \
513 test -z "$$list2" || { \
514 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
515 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
516 }
517
518uninstall-pkgLTLIBRARIES:
519 @$(NORMAL_UNINSTALL)
520 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
521 for p in $$list; do \
522 $(am__strip_dir) \
523 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
524 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
525 done
526
527clean-pkgLTLIBRARIES:
528 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
529 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
530 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
531 test "$$dir" != "$$p" || dir=.; \
532 echo "rm -f \"$${dir}/so_locations\""; \
533 rm -f "$${dir}/so_locations"; \
534 done
535libevas_engine_gl_cocoa.la: $(libevas_engine_gl_cocoa_la_OBJECTS) $(libevas_engine_gl_cocoa_la_DEPENDENCIES)
536 $(AM_V_OBJCLD)$(OBJCLINK) $(am_libevas_engine_gl_cocoa_la_rpath) $(libevas_engine_gl_cocoa_la_OBJECTS) $(libevas_engine_gl_cocoa_la_LIBADD) $(LIBS)
537module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
538 $(AM_V_OBJCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
539
540mostlyclean-compile:
541 -rm -f *.$(OBJEXT)
542
543distclean-compile:
544 -rm -f *.tab.c
545
546@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
547@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gl_cocoa_main.Plo@am__quote@
548@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
549@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_gl_cocoa_main.Plo@am__quote@
550
551.c.o:
552@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
553@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
554@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
555@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
556@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
557@am__fastdepCC_FALSE@ $(COMPILE) -c $<
558
559.c.obj:
560@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
561@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
562@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
563@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
564@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
565@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
566
567.c.lo:
568@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
569@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
570@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
571@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
572@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
573@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
574
575module_la-evas_engine.lo: evas_engine.c
576@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
577@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
578@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
579@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
580@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
581@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
582
583.m.o:
584@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJCCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
585@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
586@am__fastdepOBJC_FALSE@ $(AM_V_OBJC) @AM_BACKSLASH@
587@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
588@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
589@am__fastdepOBJC_FALSE@ $(OBJCCOMPILE) -c -o $@ $<
590
591.m.obj:
592@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(OBJCCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
593@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
594@am__fastdepOBJC_FALSE@ $(AM_V_OBJC) @AM_BACKSLASH@
595@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
596@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
597@am__fastdepOBJC_FALSE@ $(OBJCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
598
599.m.lo:
600@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(LTOBJCCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
601@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
602@am__fastdepOBJC_FALSE@ $(AM_V_OBJC) @AM_BACKSLASH@
603@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
604@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
605@am__fastdepOBJC_FALSE@ $(LTOBJCCOMPILE) -c -o $@ $<
606
607module_la-evas_gl_cocoa_main.lo: evas_gl_cocoa_main.m
608@am__fastdepOBJC_TRUE@ $(AM_V_OBJC)$(LIBTOOL) $(AM_V_lt) $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -MT module_la-evas_gl_cocoa_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_gl_cocoa_main.Tpo -c -o module_la-evas_gl_cocoa_main.lo `test -f 'evas_gl_cocoa_main.m' || echo '$(srcdir)/'`evas_gl_cocoa_main.m
609@am__fastdepOBJC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_gl_cocoa_main.Tpo $(DEPDIR)/module_la-evas_gl_cocoa_main.Plo
610@am__fastdepOBJC_FALSE@ $(AM_V_OBJC) @AM_BACKSLASH@
611@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='evas_gl_cocoa_main.m' object='module_la-evas_gl_cocoa_main.lo' libtool=yes @AMDEPBACKSLASH@
612@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
613@am__fastdepOBJC_FALSE@ $(LIBTOOL) $(AM_V_lt) $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) -c -o module_la-evas_gl_cocoa_main.lo `test -f 'evas_gl_cocoa_main.m' || echo '$(srcdir)/'`evas_gl_cocoa_main.m
614
615mostlyclean-libtool:
616 -rm -f *.lo
617
618clean-libtool:
619 -rm -rf .libs _libs
620install-includesHEADERS: $(includes_HEADERS)
621 @$(NORMAL_INSTALL)
622 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
623 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
624 for p in $$list; do \
625 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
626 echo "$$d$$p"; \
627 done | $(am__base_list) | \
628 while read files; do \
629 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
630 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
631 done
632
633uninstall-includesHEADERS:
634 @$(NORMAL_UNINSTALL)
635 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
636 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
637 test -n "$$files" || exit 0; \
638 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
639 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
640
641ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
642 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
643 unique=`for i in $$list; do \
644 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
645 done | \
646 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
647 END { if (nonempty) { for (i in files) print i; }; }'`; \
648 mkid -fID $$unique
649tags: TAGS
650
651TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
652 $(TAGS_FILES) $(LISP)
653 set x; \
654 here=`pwd`; \
655 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
656 unique=`for i in $$list; do \
657 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
658 done | \
659 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
660 END { if (nonempty) { for (i in files) print i; }; }'`; \
661 shift; \
662 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
663 test -n "$$unique" || unique=$$empty_fix; \
664 if test $$# -gt 0; then \
665 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
666 "$$@" $$unique; \
667 else \
668 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
669 $$unique; \
670 fi; \
671 fi
672ctags: CTAGS
673CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
674 $(TAGS_FILES) $(LISP)
675 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
676 unique=`for i in $$list; do \
677 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
678 done | \
679 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
680 END { if (nonempty) { for (i in files) print i; }; }'`; \
681 test -z "$(CTAGS_ARGS)$$unique" \
682 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
683 $$unique
684
685GTAGS:
686 here=`$(am__cd) $(top_builddir) && pwd` \
687 && $(am__cd) $(top_srcdir) \
688 && gtags -i $(GTAGS_ARGS) "$$here"
689
690distclean-tags:
691 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
692
693distdir: $(DISTFILES)
694 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
695 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
696 list='$(DISTFILES)'; \
697 dist_files=`for file in $$list; do echo $$file; done | \
698 sed -e "s|^$$srcdirstrip/||;t" \
699 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
700 case $$dist_files in \
701 */*) $(MKDIR_P) `echo "$$dist_files" | \
702 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
703 sort -u` ;; \
704 esac; \
705 for file in $$dist_files; do \
706 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
707 if test -d $$d/$$file; then \
708 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
709 if test -d "$(distdir)/$$file"; then \
710 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
711 fi; \
712 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
713 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
714 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
715 fi; \
716 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
717 else \
718 test -f "$(distdir)/$$file" \
719 || cp -p $$d/$$file "$(distdir)/$$file" \
720 || exit 1; \
721 fi; \
722 done
723check-am: all-am
724check: check-am
725all-am: Makefile $(LTLIBRARIES) $(HEADERS)
726installdirs:
727 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
728 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
729 done
730install: install-am
731install-exec: install-exec-am
732install-data: install-data-am
733uninstall: uninstall-am
734
735install-am: all-am
736 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
737
738installcheck: installcheck-am
739install-strip:
740 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
741 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
742 `test -z '$(STRIP)' || \
743 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
744mostlyclean-generic:
745
746clean-generic:
747
748distclean-generic:
749 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
750 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
751
752maintainer-clean-generic:
753 @echo "This command is intended for maintainers to use"
754 @echo "it deletes files that may require special tools to rebuild."
755 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
756clean: clean-am
757
758clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
759 clean-pkgLTLIBRARIES mostlyclean-am
760
761distclean: distclean-am
762 -rm -rf ./$(DEPDIR)
763 -rm -f Makefile
764distclean-am: clean-am distclean-compile distclean-generic \
765 distclean-tags
766
767dvi: dvi-am
768
769dvi-am:
770
771html: html-am
772
773html-am:
774
775info: info-am
776
777info-am:
778
779install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
780
781install-dvi: install-dvi-am
782
783install-dvi-am:
784
785install-exec-am:
786
787install-html: install-html-am
788
789install-html-am:
790
791install-info: install-info-am
792
793install-info-am:
794
795install-man:
796
797install-pdf: install-pdf-am
798
799install-pdf-am:
800
801install-ps: install-ps-am
802
803install-ps-am:
804
805installcheck-am:
806
807maintainer-clean: maintainer-clean-am
808 -rm -rf ./$(DEPDIR)
809 -rm -f Makefile
810maintainer-clean-am: distclean-am maintainer-clean-generic
811
812mostlyclean: mostlyclean-am
813
814mostlyclean-am: mostlyclean-compile mostlyclean-generic \
815 mostlyclean-libtool
816
817pdf: pdf-am
818
819pdf-am:
820
821ps: ps-am
822
823ps-am:
824
825uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
826
827.MAKE: install-am install-strip
828
829.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
830 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
831 ctags distclean distclean-compile distclean-generic \
832 distclean-libtool distclean-tags distdir dvi dvi-am html \
833 html-am info info-am install install-am install-data \
834 install-data-am install-dvi install-dvi-am install-exec \
835 install-exec-am install-html install-html-am \
836 install-includesHEADERS install-info install-info-am \
837 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
838 install-ps install-ps-am install-strip installcheck \
839 installcheck-am installdirs maintainer-clean \
840 maintainer-clean-generic mostlyclean mostlyclean-compile \
841 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
842 tags uninstall uninstall-am uninstall-includesHEADERS \
843 uninstall-pkgLTLIBRARIES
844
845
846# Tell versions [3.59,3.63) of GNU make to not export all variables.
847# Otherwise a system limit (for SysV at least) may be exceeded.
848.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/gl_cocoa/evas_engine.c b/libraries/evas/src/modules/engines/gl_cocoa/evas_engine.c
new file mode 100644
index 0000000..fd95688
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_cocoa/evas_engine.c
@@ -0,0 +1,1462 @@
1#include "evas_common.h" /* Also includes international specific stuff */
2#include "evas_engine.h"
3
4#include "evas_private.h"
5
6#include <dlfcn.h> /* dlopen,dlclose,etc */
7#define EVAS_GL_NO_GL_H_CHECK 1
8#include "Evas_GL.h"
9
10
11
12typedef struct _Render_Engine Render_Engine;
13typedef struct _Render_Engine_GL_Surface Render_Engine_GL_Surface;
14typedef struct _Render_Engine_GL_Context Render_Engine_GL_Context;
15
16struct _Render_Engine
17{
18 Evas_GL_Cocoa_Window *win;
19 int end;
20};
21
22
23struct _Render_Engine_GL_Surface
24{
25 int initialized;
26 int fbo_attached;
27 int w, h;
28 int depth_bits;
29 int stencil_bits;
30
31 // Render target texture/buffers
32 GLuint rt_tex;
33 GLint rt_internal_fmt;
34 GLenum rt_fmt;
35 GLuint rb_depth;
36 GLenum rb_depth_fmt;
37 GLuint rb_stencil;
38 GLenum rb_stencil_fmt;
39
40 Render_Engine_GL_Context *current_ctx;
41};
42
43struct _Render_Engine_GL_Context
44{
45 int initialized;
46 // EGLContext context;
47
48 GLuint fbo;
49
50 Render_Engine_GL_Surface *current_sfc;
51};
52
53
54int _evas_engine_gl_cocoa_log_dom = -1;
55/* function tables - filled in later (func and parent func) */
56static Evas_Func func, pfunc;
57
58/* Function table for GL APIs */
59static Evas_GL_API gl_funcs;
60
61
62
63static void *
64eng_info(Evas *e __UNUSED__)
65{
66 Evas_Engine_Info_GL_Cocoa *info;
67 info = calloc(1, sizeof(Evas_Engine_Info_GL_Cocoa));
68 DBG("Info %p", info);
69 if (!info) return NULL;
70 info->magic.magic = rand();
71 return info;
72}
73
74static void
75eng_info_free(Evas *e __UNUSED__, void *info)
76{
77 Evas_Engine_Info_GL_Cocoa *in;
78
79 DBG("Info %p", info);
80 eina_log_domain_unregister(_evas_engine_gl_cocoa_log_dom);
81 in = (Evas_Engine_Info_GL_Cocoa *)info;
82 free(in);
83}
84
85static int
86eng_setup(Evas *e, void *in)
87{
88 Render_Engine *re;
89 Evas_Engine_Info_GL_Cocoa *info;
90
91 DBG("Engine Setup");
92
93 info = (Evas_Engine_Info_GL_Cocoa *)in;
94 if (!e->engine.data.output)
95 {
96 re = calloc(1, sizeof(Render_Engine));
97 if (!re) return 0;
98
99 e->engine.data.output = re;
100 re->win = eng_window_new(info->window,
101 e->output.w,
102 e->output.h);
103 info->view = re->win->view;
104 if (!re->win)
105 {
106 free(re);
107 e->engine.data.output = NULL;
108 return 0;
109 }
110
111 evas_common_cpu_init();
112
113 evas_common_blend_init();
114 evas_common_image_init();
115 evas_common_convert_init();
116 evas_common_scale_init();
117 evas_common_rectangle_init();
118 evas_common_polygon_init();
119 evas_common_line_init();
120 evas_common_font_init();
121 evas_common_draw_init();
122 evas_common_tilebuf_init();
123 }
124 else
125 {
126 re = e->engine.data.output;
127 eng_window_free(re->win);
128 re->win = eng_window_new(info->window,
129 e->output.w,
130 e->output.h);
131 info->view = re->win->view;
132 }
133 if (!e->engine.data.output) return 0;
134
135 if (!e->engine.data.context)
136 e->engine.data.context =
137 e->engine.func->context_new(e->engine.data.output);
138 eng_window_use(re->win);
139
140 return 1;
141}
142
143static void
144eng_output_free(void *data)
145{
146 Render_Engine *re;
147
148 DBG("Output free");
149 re = (Render_Engine *)data;
150 eng_window_free(re->win);
151 free(re);
152
153 evas_common_font_shutdown();
154 evas_common_image_shutdown();
155}
156
157static void
158eng_output_resize(void *data, int w, int h)
159{
160 Render_Engine *re;
161
162 DBG("Output Resize %d %d", w, h);
163
164 re = (Render_Engine *)data;
165 re->win->width = w;
166 re->win->height = h;
167
168 eng_window_resize(re->win, w, h);
169 evas_gl_common_context_resize(re->win->gl_context, w, h, 0);
170}
171
172static void
173eng_output_tile_size_set(void *data __UNUSED__, int w __UNUSED__, int h __UNUSED__)
174{
175 DBG("tile size set");
176}
177
178static void
179eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
180{
181 Render_Engine *re;
182
183 DBG("Redraw rect %d %d %d %d", x, y, w, h);
184 re = (Render_Engine *)data;
185 evas_gl_common_context_resize(re->win->gl_context, re->win->width, re->win->height, 0);
186 /* simple bounding box */
187 RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, re->win->width, re->win->height);
188 if ((w <= 0) || (h <= 0)) return;
189 if (!re->win->draw.redraw)
190 {
191#if 0
192 re->win->draw.x1 = x;
193 re->win->draw.y1 = y;
194 re->win->draw.x2 = x + w - 1;
195 re->win->draw.y2 = y + h - 1;
196#else
197 re->win->draw.x1 = 0;
198 re->win->draw.y1 = 0;
199 re->win->draw.x2 = re->win->width - 1;
200 re->win->draw.y2 = re->win->height - 1;
201#endif
202 }
203 else
204 {
205 if (x < re->win->draw.x1) re->win->draw.x1 = x;
206 if (y < re->win->draw.y1) re->win->draw.y1 = y;
207 if ((x + w - 1) > re->win->draw.x2) re->win->draw.x2 = x + w - 1;
208 if ((y + h - 1) > re->win->draw.y2) re->win->draw.y2 = y + h - 1;
209 }
210 re->win->draw.redraw = 1;
211}
212
213static void
214eng_output_redraws_rect_del(void *data __UNUSED__, int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
215{
216}
217
218static void
219eng_output_redraws_clear(void *data)
220{
221 Render_Engine *re;
222
223 re = (Render_Engine *)data;
224 re->win->draw.redraw = 0;
225}
226
227//#define SLOW_GL_COPY_RECT 1
228/* vsync games - not for now though */
229#define VSYNC_TO_SCREEN 1
230
231static void *
232eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
233{
234 Render_Engine *re;
235
236 re = (Render_Engine *)data;
237 evas_gl_common_context_flush(re->win->gl_context);
238 /* get the upate rect surface - return engine data as dummy */
239 if (!re->win->draw.redraw)
240 {
241// printf("GL: NO updates!\n");
242 return NULL;
243 }
244// printf("GL: update....!\n");
245#ifdef SLOW_GL_COPY_RECT
246 /* if any update - just return the whole canvas - works with swap
247 * buffers then */
248 if (x) *x = 0;
249 if (y) *y = 0;
250 if (w) *w = re->win->width;
251 if (h) *h = re->win->height;
252 if (cx) *cx = 0;
253 if (cy) *cy = 0;
254 if (cw) *cw = re->win->width;
255 if (ch) *ch = re->win->height;
256#else
257 /* 1 update - INCREDIBLY SLOW if combined with swap_rect in flush. a gl
258 * problem where there just is no hardware path for somethnig that
259 * obviously SHOULD be there */
260 /* only 1 update to minimise gl context games and rendering multiple update
261 * regions as evas does with other engines
262 */
263 if (x) *x = re->win->draw.x1;
264 if (y) *y = re->win->draw.y1;
265 if (w) *w = re->win->draw.x2 - re->win->draw.x1 + 1;
266 if (h) *h = re->win->draw.y2 - re->win->draw.y1 + 1;
267 if (cx) *cx = re->win->draw.x1;
268 if (cy) *cy = re->win->draw.y1;
269 if (cw) *cw = re->win->draw.x2 - re->win->draw.x1 + 1;
270 if (ch) *ch = re->win->draw.y2 - re->win->draw.y1 + 1;
271#endif
272// clear buffer. only needed for dest alpha
273// glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
274// glClear(GL_COLOR_BUFFER_BIT);
275//x// printf("frame -> new\n");
276 return re->win->gl_context->def_surface;
277}
278
279static void
280eng_output_redraws_next_update_push(void *data, void *surface __UNUSED__, int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
281{
282 Render_Engine *re;
283
284 re = (Render_Engine *)data;
285 /* put back update surface.. in this case just unflag redraw */
286 re->win->draw.redraw = 0;
287 re->win->draw.drew = 1;
288 evas_gl_common_context_flush(re->win->gl_context);
289}
290
291static void
292eng_output_flush(void *data)
293{
294 Render_Engine *re;
295
296 re = (Render_Engine *)data;
297 if (!re->win->draw.drew) return;
298
299 re->win->draw.drew = 0;
300 eng_window_use(re->win);
301
302#ifdef VSYNC_TO_SCREEN
303 eng_window_vsync_set(1);
304#endif
305
306 eng_window_swap_buffers(re->win);
307
308}
309
310static void
311eng_output_idle_flush(void *data __UNUSED__)
312{
313}
314
315static void
316eng_context_cutout_add(void *data __UNUSED__, void *context, int x, int y, int w, int h)
317{
318 evas_common_draw_context_add_cutout(context, x, y, w, h);
319}
320
321static void
322eng_context_cutout_clear(void *data __UNUSED__, void *context)
323{
324 evas_common_draw_context_clear_cutouts(context);
325}
326
327static void
328eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h)
329{
330 Render_Engine *re;
331
332 re = (Render_Engine *)data;
333 eng_window_use(re->win);
334 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
335 re->win->gl_context->dc = context;
336 evas_gl_common_rect_draw(re->win->gl_context, x, y, w, h);
337}
338
339static void
340eng_line_draw(void *data, void *context, void *surface, int x1, int y1, int x2, int y2)
341{
342 Render_Engine *re;
343
344 re = (Render_Engine *)data;
345 eng_window_use(re->win);
346 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
347 re->win->gl_context->dc = context;
348 evas_gl_common_line_draw(re->win->gl_context, x1, y1, x2, y2);
349}
350
351static void *
352eng_polygon_point_add(void *data, void *context __UNUSED__, void *polygon, int x, int y)
353{
354 Render_Engine *re;
355
356 re = (Render_Engine *)data;
357 return evas_gl_common_poly_point_add(polygon, x, y);
358}
359
360static void *
361eng_polygon_points_clear(void *data, void *context __UNUSED__, void *polygon)
362{
363 Render_Engine *re;
364
365 re = (Render_Engine *)data;
366 return evas_gl_common_poly_points_clear(polygon);
367}
368
369static void
370eng_polygon_draw(void *data, void *context, void *surface __UNUSED__, void *polygon, int x, int y)
371{
372 Render_Engine *re;
373
374 re = (Render_Engine *)data;
375 eng_window_use(re->win);
376 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
377 re->win->gl_context->dc = context;
378 evas_gl_common_poly_draw(re->win->gl_context, polygon, x, y);
379}
380
381static int
382eng_image_alpha_get(void *data __UNUSED__, void *image)
383{
384// Render_Engine *re;
385 Evas_GL_Image *im;
386
387// re = (Render_Engine *)data;
388 if (!image) return 1;
389 im = image;
390 return im->alpha;
391}
392
393static int
394eng_image_colorspace_get(void *data __UNUSED__, void *image)
395{
396// Render_Engine *re;
397 Evas_GL_Image *im;
398
399// re = (Render_Engine *)data;
400 if (!image) return EVAS_COLORSPACE_ARGB8888;
401 im = image;
402 return im->cs.space;
403}
404
405static void
406eng_image_mask_create(void *data __UNUSED__, void *image)
407{
408 Evas_GL_Image *im;
409
410 if (!image) return;
411 im = image;
412 if (!im->im->image.data)
413 evas_cache_image_load_data(&im->im->cache_entry);
414 if (!im->tex)
415 im->tex = evas_gl_common_texture_new(im->gc, im->im);
416}
417
418
419static void *
420eng_image_alpha_set(void *data, void *image, int has_alpha)
421{
422 Render_Engine *re;
423 Evas_GL_Image *im;
424
425 re = (Render_Engine *)data;
426 if (!image) return NULL;
427 im = image;
428 if (im->alpha == has_alpha) return image;
429 if (im->native.data)
430 {
431 im->alpha = has_alpha;
432 return image;
433 }
434 eng_window_use(re->win);
435 if ((im->tex) && (im->tex->pt->dyn.img))
436 {
437 im->alpha = has_alpha;
438 im->tex->alpha = im->alpha;
439 return image;
440 }
441 /* FIXME: can move to gl_common */
442 if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return im;
443 if ((has_alpha) && (im->im->cache_entry.flags.alpha)) return image;
444 else if ((!has_alpha) && (!im->im->cache_entry.flags.alpha)) return image;
445 if (im->references > 1)
446 {
447 Evas_GL_Image *im_new;
448
449 im_new = evas_gl_common_image_new_from_copied_data
450 (im->gc, im->im->cache_entry.w, im->im->cache_entry.h,
451 im->im->image.data,
452 eng_image_alpha_get(data, image),
453 eng_image_colorspace_get(data, image));
454 if (!im_new) return im;
455 evas_gl_common_image_free(im);
456 im = im_new;
457 }
458 else
459 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
460 return evas_gl_common_image_alpha_set(im, has_alpha ? 1 : 0);
461// im->im->cache_entry.flags.alpha = has_alpha ? 1 : 0;
462// return image;
463}
464
465static void *
466eng_image_border_set(void *data __UNUSED__, void *image, int l __UNUSED__, int r __UNUSED__, int t __UNUSED__, int b __UNUSED__)
467{
468// Render_Engine *re;
469//
470// re = (Render_Engine *)data;
471 return image;
472}
473
474static void
475eng_image_border_get(void *data __UNUSED__, void *image __UNUSED__, int *l __UNUSED__, int *r __UNUSED__, int *t __UNUSED__, int *b __UNUSED__)
476{
477// Render_Engine *re;
478//
479// re = (Render_Engine *)data;
480}
481
482static char *
483eng_image_comment_get(void *data __UNUSED__, void *image, char *key __UNUSED__)
484{
485// Render_Engine *re;
486 Evas_GL_Image *im;
487
488// re = (Render_Engine *)data;
489 if (!image) return NULL;
490 im = image;
491 if (!im->im) return NULL;
492 return im->im->info.comment;
493}
494
495static char *
496eng_image_format_get(void *data __UNUSED__, void *image)
497{
498// Render_Engine *re;
499 Evas_GL_Image *im;
500
501// re = (Render_Engine *)data;
502 im = image;
503 return NULL;
504}
505
506static void
507eng_image_colorspace_set(void *data, void *image, int cspace)
508{
509 Render_Engine *re;
510 Evas_GL_Image *im;
511
512 re = (Render_Engine *)data;
513 if (!image) return;
514 im = image;
515 if (im->native.data) return;
516 /* FIXME: can move to gl_common */
517 if (im->cs.space == cspace) return;
518 eng_window_use(re->win);
519 evas_cache_image_colorspace(&im->im->cache_entry, cspace);
520 switch (cspace)
521 {
522 case EVAS_COLORSPACE_ARGB8888:
523 if (im->cs.data)
524 {
525 if (!im->cs.no_free) free(im->cs.data);
526 im->cs.data = NULL;
527 im->cs.no_free = 0;
528 }
529 break;
530 case EVAS_COLORSPACE_YCBCR422P601_PL:
531 case EVAS_COLORSPACE_YCBCR422P709_PL:
532 if (im->tex) evas_gl_common_texture_free(im->tex);
533 im->tex = NULL;
534 if (im->cs.data)
535 {
536 if (!im->cs.no_free) free(im->cs.data);
537 }
538 if (im->im->cache_entry.h > 0)
539 im->cs.data =
540 calloc(1, im->im->cache_entry.h * sizeof(unsigned char *) * 2);
541 else
542 im->cs.data = NULL;
543 im->cs.no_free = 0;
544 break;
545 default:
546 abort();
547 break;
548 }
549 im->cs.space = cspace;
550}
551
552/////////////////////////////////////////////////////////////////////////
553//
554//
555
556// FIXME: this is enabled so updates happen - but its SLOOOOOOOOOOOOOOOW
557// (i am sure this is the reason) not to mention seemingly superfluous. but
558// i need to enable it for it to work on fglrx at least. havent tried nvidia.
559//
560// why is this the case? does anyone know? has anyone tried it on other gfx
561// drivers?
562//
563//#define GLX_TEX_PIXMAP_RECREATE 1
564#if 0
565static void
566eng_image_draw_filtered(void *data, void *context, void *surface,
567 void *image, Evas_Filter_Info *filter)
568{
569 Render_Engine *re = data;
570
571 if (!image) return;
572 eng_window_use(re->win);
573 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
574 re->win->gl_context->dc = context;
575
576 evas_gl_common_filter_draw(re->win->gl_context, image, filter);
577}
578
579static Filtered_Image *
580eng_image_filtered_get(void *im, uint8_t *key, size_t keylen)
581{
582 return evas_gl_common_image_filtered_get(im, key, keylen);
583}
584
585static Filtered_Image *
586eng_image_filtered_save(void *im, void *fim, uint8_t *key, size_t keylen)
587{
588 return evas_gl_common_image_filtered_save(im, fim, key, keylen);
589}
590
591static void
592eng_image_filtered_free(void *im, Filtered_Image *fim)
593{
594 evas_gl_common_image_filtered_free(im, fim);
595}
596
597#endif
598
599//
600//
601/////////////////////////////////////////////////////////////////////////
602
603static void *
604eng_image_load(void *data, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
605{
606 Render_Engine *re;
607
608 re = (Render_Engine *)data;
609 *error = EVAS_LOAD_ERROR_NONE;
610 eng_window_use(re->win);
611 return evas_gl_common_image_load(re->win->gl_context, file, key, lo, error);
612}
613
614static void *
615eng_image_new_from_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace)
616{
617 Render_Engine *re;
618
619 re = (Render_Engine *)data;
620 eng_window_use(re->win);
621 return evas_gl_common_image_new_from_data(re->win->gl_context, w, h, image_data, alpha, cspace);
622}
623
624static void *
625eng_image_new_from_copied_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace)
626{
627 Render_Engine *re;
628
629 re = (Render_Engine *)data;
630 eng_window_use(re->win);
631 return evas_gl_common_image_new_from_copied_data(re->win->gl_context, w, h, image_data, alpha, cspace);
632}
633
634static void
635eng_image_free(void *data, void *image)
636{
637 Render_Engine *re;
638
639 re = (Render_Engine *)data;
640 if (!image) return;
641 eng_window_use(re->win);
642 evas_gl_common_image_free(image);
643}
644
645static void
646eng_image_size_get(void *data __UNUSED__, void *image, int *w, int *h)
647{
648 if (!image)
649 {
650 *w = 0;
651 *h = 0;
652 return;
653 }
654 if (w) *w = ((Evas_GL_Image *)image)->w;
655 if (h) *h = ((Evas_GL_Image *)image)->h;
656}
657
658static void *
659eng_image_size_set(void *data, void *image, int w, int h)
660{
661 Render_Engine *re;
662 Evas_GL_Image *im = image;
663 Evas_GL_Image *im_old;
664
665 re = (Render_Engine *)data;
666 if (!im) return NULL;
667 if (im->native.data)
668 {
669 im->w = w;
670 im->h = h;
671 return image;
672 }
673 eng_window_use(re->win);
674 if ((im->tex) && (im->tex->pt->dyn.img))
675 {
676 evas_gl_common_texture_free(im->tex);
677 im->tex = NULL;
678 im->w = w;
679 im->h = h;
680 im->tex = evas_gl_common_texture_dynamic_new(im->gc, im);
681 return image;
682 }
683 im_old = image;
684 if ((eng_image_colorspace_get(data, image) == EVAS_COLORSPACE_YCBCR422P601_PL) ||
685 (eng_image_colorspace_get(data, image) == EVAS_COLORSPACE_YCBCR422P709_PL))
686 w &= ~0x1;
687 if ((im_old) &&
688 ((int)im_old->im->cache_entry.w == w) &&
689 ((int)im_old->im->cache_entry.h == h))
690 return image;
691 if (im_old)
692 {
693 im = evas_gl_common_image_new(re->win->gl_context, w, h,
694 eng_image_alpha_get(data, image),
695 eng_image_colorspace_get(data, image));
696/*
697 evas_common_load_image_data_from_file(im_old->im);
698 if (im_old->im->image->data)
699 {
700 evas_common_blit_rectangle(im_old->im, im->im, 0, 0, w, h, 0, 0);
701 evas_common_cpu_end_opt();
702 }
703 */
704 evas_gl_common_image_free(im_old);
705 }
706 else
707 im = evas_gl_common_image_new(re->win->gl_context, w, h, 1, EVAS_COLORSPACE_ARGB8888);
708 return im;
709}
710
711static void *
712eng_image_dirty_region(void *data, void *image, int x, int y, int w, int h)
713{
714 Render_Engine *re;
715 Evas_GL_Image *im = image;
716
717 re = (Render_Engine *)data;
718 if (!image) return NULL;
719 if (im->native.data) return image;
720 eng_window_use(re->win);
721 evas_gl_common_image_dirty(image, x, y, w, h);
722 return image;
723}
724
725static void *
726eng_image_data_get(void *data, void *image, int to_write, DATA32 **image_data, int *err)
727{
728 Render_Engine *re;
729 Evas_GL_Image *im;
730 int error;
731
732 re = (Render_Engine *)data;
733 if (!image)
734 {
735 *image_data = NULL;
736 if (err) *err = EVAS_LOAD_ERROR_GENERIC;
737 return NULL;
738 }
739 im = image;
740 if (im->native.data)
741 {
742 *image_data = NULL;
743 if (err) *err = EVAS_LOAD_ERROR_NONE;
744 return im;
745 }
746 if ((im->tex) && (im->tex->pt) && (im->tex->pt->dyn.data))
747 {
748 *image_data = im->tex->pt->dyn.data;
749 if (err) *err = EVAS_LOAD_ERROR_NONE;
750 return im;
751 }
752 eng_window_use(re->win);
753 error = evas_cache_image_load_data(&im->im->cache_entry);
754 switch (im->cs.space)
755 {
756 case EVAS_COLORSPACE_ARGB8888:
757 if (to_write)
758 {
759 if (im->references > 1)
760 {
761 Evas_GL_Image *im_new;
762
763 im_new = evas_gl_common_image_new_from_copied_data
764 (im->gc, im->im->cache_entry.w, im->im->cache_entry.h,
765 im->im->image.data,
766 eng_image_alpha_get(data, image),
767 eng_image_colorspace_get(data, image));
768 if (!im_new)
769 {
770 *image_data = NULL;
771 if (err) *err = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
772 return im;
773 }
774 evas_gl_common_image_free(im);
775 im = im_new;
776 }
777 else
778 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
779 }
780 *image_data = im->im->image.data;
781 break;
782 case EVAS_COLORSPACE_YCBCR422P601_PL:
783 case EVAS_COLORSPACE_YCBCR422P709_PL:
784 *image_data = im->cs.data;
785 break;
786 default:
787 abort();
788 break;
789 }
790 if (err) *err = error;
791 return im;
792}
793
794static void *
795eng_image_data_put(void *data, void *image, DATA32 *image_data)
796{
797 Render_Engine *re;
798 Evas_GL_Image *im, *im2;
799
800 re = (Render_Engine *)data;
801 if (!image) return NULL;
802 im = image;
803 if (im->native.data) return image;
804 eng_window_use(re->win);
805 if ((im->tex) && (im->tex->pt) && (im->tex->pt->dyn.data))
806 {
807 if (im->tex->pt->dyn.data == image_data)
808 {
809 return image;
810 }
811 else
812 {
813 int w, h;
814
815 w = im->im->cache_entry.w;
816 h = im->im->cache_entry.h;
817 im2 = eng_image_new_from_data(data, w, h, image_data,
818 eng_image_alpha_get(data, image),
819 eng_image_colorspace_get(data, image));
820 if (!im2) return im;
821 evas_gl_common_image_free(im);
822 im = im2;
823 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
824 return im;
825 }
826 }
827 switch (im->cs.space)
828 {
829 case EVAS_COLORSPACE_ARGB8888:
830 if (image_data != im->im->image.data)
831 {
832 int w, h;
833
834 w = im->im->cache_entry.w;
835 h = im->im->cache_entry.h;
836 im2 = eng_image_new_from_data(data, w, h, image_data,
837 eng_image_alpha_get(data, image),
838 eng_image_colorspace_get(data, image));
839 if (!im2) return im;
840 evas_gl_common_image_free(im);
841 im = im2;
842 }
843 break;
844 case EVAS_COLORSPACE_YCBCR422P601_PL:
845 case EVAS_COLORSPACE_YCBCR422P709_PL:
846 if (image_data != im->cs.data)
847 {
848 if (im->cs.data)
849 {
850 if (!im->cs.no_free) free(im->cs.data);
851 }
852 im->cs.data = image_data;
853 }
854 break;
855 default:
856 abort();
857 break;
858 }
859 /* hmmm - but if we wrote... why bother? */
860 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
861 return im;
862}
863
864static void
865eng_image_data_preload_request(void *data __UNUSED__, void *image, const void *target)
866{
867 Evas_GL_Image *gim = image;
868 RGBA_Image *im;
869
870 if (!gim) return;
871 if (gim->native.data) return;
872 im = (RGBA_Image *)gim->im;
873 if (!im) return;
874 evas_cache_image_preload_data(&im->cache_entry, target);
875}
876
877static void
878eng_image_data_preload_cancel(void *data __UNUSED__, void *image, const void *target)
879{
880 Evas_GL_Image *gim = image;
881 RGBA_Image *im;
882
883 if (!gim) return;
884 if (gim->native.data) return;
885 im = (RGBA_Image *)gim->im;
886 if (!im) return;
887 evas_cache_image_preload_cancel(&im->cache_entry, target);
888}
889
890static void
891eng_image_draw(void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth)
892{
893 Render_Engine *re;
894
895 re = (Render_Engine *)data;
896 if (!image) return;
897 eng_window_use(re->win);
898 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
899 re->win->gl_context->dc = context;
900 evas_gl_common_image_draw(re->win->gl_context, image,
901 src_x, src_y, src_w, src_h,
902 dst_x, dst_y, dst_w, dst_h,
903 smooth);
904}
905
906static void
907eng_image_scale_hint_set(void *data __UNUSED__, void *image, int hint)
908{
909 if (image) evas_gl_common_image_scale_hint_set(image, hint);
910}
911
912static int
913eng_image_scale_hint_get(void *data __UNUSED__, void *image)
914{
915 Evas_GL_Image *gim = image;
916 if (!gim) return EVAS_IMAGE_SCALE_HINT_NONE;
917 return gim->scale_hint;
918}
919
920static void
921eng_image_map_draw(void *data __UNUSED__, void *context, void *surface, void *image, int npoints, RGBA_Map_Point *p, int smooth, int level)
922{
923 Evas_GL_Image *gim = image;
924 Render_Engine *re;
925
926 re = (Render_Engine *)data;
927 if (!image) return;
928 eng_window_use(re->win);
929 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
930 re->win->gl_context->dc = context;
931 if (npoints != 4)
932 {
933 // FIXME: nash - you didnt fix this
934 abort();
935 }
936 if ((p[0].x == p[3].x) &&
937 (p[1].x == p[2].x) &&
938 (p[0].y == p[1].y) &&
939 (p[3].y == p[2].y) &&
940 (p[0].x <= p[1].x) &&
941 (p[0].y <= p[2].y) &&
942 (p[0].u == 0) &&
943 (p[0].v == 0) &&
944 (p[1].u == (gim->w << FP)) &&
945 (p[1].v == 0) &&
946 (p[2].u == (gim->w << FP)) &&
947 (p[2].v == (gim->h << FP)) &&
948 (p[3].u == 0) &&
949 (p[3].v == (gim->h << FP)) &&
950 (p[0].col == 0xffffffff) &&
951 (p[1].col == 0xffffffff) &&
952 (p[2].col == 0xffffffff) &&
953 (p[3].col == 0xffffffff))
954 {
955 int dx, dy, dw, dh;
956
957 dx = p[0].x >> FP;
958 dy = p[0].y >> FP;
959 dw = (p[2].x >> FP) - dx;
960 dh = (p[2].y >> FP) - dy;
961 eng_image_draw(data, context, surface, image,
962 0, 0, gim->w, gim->h, dx, dy, dw, dh, smooth);
963 }
964 else
965 {
966 evas_gl_common_image_map_draw(re->win->gl_context, image, npoints, p,
967 smooth, level);
968 }
969}
970
971static void *
972eng_image_map_surface_new(void *data __UNUSED__, int w, int h, int alpha)
973{
974 Render_Engine *re;
975
976 re = (Render_Engine *)data;
977 return evas_gl_common_image_surface_new(re->win->gl_context, w, h, alpha);
978}
979
980static void
981eng_image_map_surface_free(void *data __UNUSED__, void *surface)
982{
983 evas_gl_common_image_free(surface);
984}
985
986static void
987eng_image_content_hint_set(void *data __UNUSED__, void *image, int hint)
988{
989 if (image) evas_gl_common_image_content_hint_set(image, hint);
990}
991
992static int
993eng_image_content_hint_get(void *data __UNUSED__, void *image)
994{
995 Evas_GL_Image *gim = image;
996 if (!gim) return EVAS_IMAGE_CONTENT_HINT_NONE;
997 return gim->content_hint;
998}
999
1000static void
1001eng_image_cache_flush(void *data __UNUSED__)
1002{
1003 Render_Engine *re;
1004 int tmp_size;
1005
1006 re = (Render_Engine *)data;
1007
1008 tmp_size = evas_common_image_get_cache();
1009 evas_common_image_set_cache(0);
1010 evas_common_rgba_image_scalecache_flush();
1011 evas_gl_common_image_cache_flush(re->win->gl_context);
1012 evas_common_image_set_cache(tmp_size);
1013}
1014
1015static void
1016eng_image_cache_set(void *data __UNUSED__, int bytes)
1017{
1018 Render_Engine *re;
1019
1020 re = (Render_Engine *)data;
1021 evas_common_image_set_cache(bytes);
1022 evas_common_rgba_image_scalecache_size_set(bytes);
1023 evas_gl_common_image_cache_flush(re->win->gl_context);
1024}
1025
1026static int
1027eng_image_cache_get(void *data __UNUSED__)
1028{
1029 Render_Engine *re;
1030
1031 re = (Render_Engine *)data;
1032 return evas_common_image_get_cache();
1033}
1034
1035
1036static void
1037eng_image_stride_get(void *data __UNUSED__, void *image, int *stride)
1038{
1039 Evas_GL_Image *im = image;
1040 *stride = im->w * 4;
1041 if ((im->tex) && (im->tex->pt->dyn.img))
1042 {
1043 *stride = im->tex->pt->dyn.w * 4;
1044 // FIXME: for other image formats (yuv etc.) different stride needed
1045 }
1046}
1047
1048static void
1049eng_font_draw(void *data, void *context, void *surface, Evas_Font_Set *font, int x, int y, int w __UNUSED__, int h __UNUSED__, int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *intl_props)
1050{
1051 Render_Engine *re;
1052
1053 re = (Render_Engine *)data;
1054 eng_window_use(re->win);
1055 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
1056 re->win->gl_context->dc = context;
1057 {
1058 // FIXME: put im into context so we can free it
1059 static RGBA_Image *im = NULL;
1060
1061 if (!im)
1062 im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
1063 im->cache_entry.w = re->win->width;
1064 im->cache_entry.h = re->win->height;
1065 evas_common_draw_context_font_ext_set(context,
1066 re->win->gl_context,
1067 evas_gl_font_texture_new,
1068 evas_gl_font_texture_free,
1069 evas_gl_font_texture_draw);
1070 evas_common_font_draw(im, context, (RGBA_Font *) font, x, y,
1071 intl_props);
1072 evas_common_draw_context_font_ext_set(context,
1073 NULL,
1074 NULL,
1075 NULL,
1076 NULL);
1077 }
1078}
1079
1080
1081static Eina_Bool
1082eng_canvas_alpha_get(void *data __UNUSED__, void *info __UNUSED__)
1083{
1084 // FIXME: support ARGB gl targets!!!
1085 return EINA_FALSE;
1086}
1087
1088
1089#if 1
1090static void
1091evgl_glBindFramebuffer(GLenum target, GLuint framebuffer)
1092{
1093 // Add logic to take care when framebuffer=0
1094 glBindFramebuffer(target, framebuffer);
1095}
1096
1097static void
1098evgl_glBindRenderbuffer(GLenum target, GLuint renderbuffer)
1099{
1100 // Add logic to take care when renderbuffer=0
1101 glBindRenderbuffer(target, renderbuffer);
1102}
1103
1104static void
1105evgl_glClearDepthf(GLclampf depth)
1106{
1107#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1108 glClearDepthf(depth);
1109#else
1110 glClearDepth(depth);
1111#endif
1112}
1113
1114static void
1115evgl_glDepthRangef(GLclampf zNear, GLclampf zFar)
1116{
1117#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1118 glDepthRangef(zNear, zFar);
1119#else
1120 glDepthRange(zNear, zFar);
1121#endif
1122}
1123
1124static void
1125evgl_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
1126{
1127#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1128 glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
1129#else
1130 if (range)
1131 {
1132 range[0] = -126; // floor(log2(FLT_MIN))
1133 range[1] = 127; // floor(log2(FLT_MAX))
1134 }
1135 if (precision)
1136 {
1137 precision[0] = 24; // floor(-log2((1.0/16777218.0)));
1138 }
1139 return;
1140 shadertype = precisiontype = 0;
1141#endif
1142}
1143
1144static void
1145evgl_glReleaseShaderCompiler(void)
1146{
1147#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1148 glReleaseShaderCompiler();
1149#else
1150#endif
1151}
1152
1153static void
1154evgl_glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
1155{
1156#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1157 glShaderBinary(n, shaders, binaryformat, binary, length);
1158#else
1159// FIXME: need to dlsym/getprocaddress for this
1160 return;
1161 n = binaryformat = length = 0;
1162 shaders = binary = 0;
1163#endif
1164}
1165
1166#endif
1167
1168static void *
1169eng_gl_api_get(void *data)
1170{
1171 Render_Engine *re;
1172
1173 re = (Render_Engine *)data;
1174
1175 gl_funcs.version = EVAS_GL_API_VERSION;
1176#if 1
1177#define ORD(f) EVAS_API_OVERRIDE(f, &gl_funcs, )
1178 ORD(glActiveTexture);
1179 ORD(glAttachShader);
1180 ORD(glBindAttribLocation);
1181 ORD(glBindBuffer);
1182 ORD(glBindTexture);
1183 ORD(glBlendColor);
1184 ORD(glBlendEquation);
1185 ORD(glBlendEquationSeparate);
1186 ORD(glBlendFunc);
1187 ORD(glBlendFuncSeparate);
1188 ORD(glBufferData);
1189 ORD(glBufferSubData);
1190 ORD(glCheckFramebufferStatus);
1191 ORD(glClear);
1192 ORD(glClearColor);
1193// ORD(glClearDepthf);
1194 ORD(glClearStencil);
1195 ORD(glColorMask);
1196 ORD(glCompileShader);
1197 ORD(glCompressedTexImage2D);
1198 ORD(glCompressedTexSubImage2D);
1199 ORD(glCopyTexImage2D);
1200 ORD(glCopyTexSubImage2D);
1201 ORD(glCreateProgram);
1202 ORD(glCreateShader);
1203 ORD(glCullFace);
1204 ORD(glDeleteBuffers);
1205 ORD(glDeleteFramebuffers);
1206 ORD(glDeleteProgram);
1207 ORD(glDeleteRenderbuffers);
1208 ORD(glDeleteShader);
1209 ORD(glDeleteTextures);
1210 ORD(glDepthFunc);
1211 ORD(glDepthMask);
1212// ORD(glDepthRangef);
1213 ORD(glDetachShader);
1214 ORD(glDisable);
1215 ORD(glDisableVertexAttribArray);
1216 ORD(glDrawArrays);
1217 ORD(glDrawElements);
1218 ORD(glEnable);
1219 ORD(glEnableVertexAttribArray);
1220 ORD(glFinish);
1221 ORD(glFlush);
1222 ORD(glFramebufferRenderbuffer);
1223 ORD(glFramebufferTexture2D);
1224 ORD(glFrontFace);
1225 ORD(glGenBuffers);
1226 ORD(glGenerateMipmap);
1227 ORD(glGenFramebuffers);
1228 ORD(glGenRenderbuffers);
1229 ORD(glGenTextures);
1230 ORD(glGetActiveAttrib);
1231 ORD(glGetActiveUniform);
1232 ORD(glGetAttachedShaders);
1233 ORD(glGetAttribLocation);
1234 ORD(glGetBooleanv);
1235 ORD(glGetBufferParameteriv);
1236 ORD(glGetError);
1237 ORD(glGetFloatv);
1238 ORD(glGetFramebufferAttachmentParameteriv);
1239 ORD(glGetIntegerv);
1240 ORD(glGetProgramiv);
1241 ORD(glGetProgramInfoLog);
1242 ORD(glGetRenderbufferParameteriv);
1243 ORD(glGetShaderiv);
1244 ORD(glGetShaderInfoLog);
1245// ORD(glGetShaderPrecisionFormat);
1246 ORD(glGetShaderSource);
1247 ORD(glGetString);
1248 ORD(glGetTexParameterfv);
1249 ORD(glGetTexParameteriv);
1250 ORD(glGetUniformfv);
1251 ORD(glGetUniformiv);
1252 ORD(glGetUniformLocation);
1253 ORD(glGetVertexAttribfv);
1254 ORD(glGetVertexAttribiv);
1255 ORD(glGetVertexAttribPointerv);
1256 ORD(glHint);
1257 ORD(glIsBuffer);
1258 ORD(glIsEnabled);
1259 ORD(glIsFramebuffer);
1260 ORD(glIsProgram);
1261 ORD(glIsRenderbuffer);
1262 ORD(glIsShader);
1263 ORD(glIsTexture);
1264 ORD(glLineWidth);
1265 ORD(glLinkProgram);
1266 ORD(glPixelStorei);
1267 ORD(glPolygonOffset);
1268 ORD(glReadPixels);
1269// ORD(glReleaseShaderCompiler);
1270 ORD(glRenderbufferStorage);
1271 ORD(glSampleCoverage);
1272 ORD(glScissor);
1273// ORD(glShaderBinary);
1274 ORD(glShaderSource);
1275 ORD(glStencilFunc);
1276 ORD(glStencilFuncSeparate);
1277 ORD(glStencilMask);
1278 ORD(glStencilMaskSeparate);
1279 ORD(glStencilOp);
1280 ORD(glStencilOpSeparate);
1281 ORD(glTexImage2D);
1282 ORD(glTexParameterf);
1283 ORD(glTexParameterfv);
1284 ORD(glTexParameteri);
1285 ORD(glTexParameteriv);
1286 ORD(glTexSubImage2D);
1287 ORD(glUniform1f);
1288 ORD(glUniform1fv);
1289 ORD(glUniform1i);
1290 ORD(glUniform1iv);
1291 ORD(glUniform2f);
1292 ORD(glUniform2fv);
1293 ORD(glUniform2i);
1294 ORD(glUniform2iv);
1295 ORD(glUniform3f);
1296 ORD(glUniform3fv);
1297 ORD(glUniform3i);
1298 ORD(glUniform3iv);
1299 ORD(glUniform4f);
1300 ORD(glUniform4fv);
1301 ORD(glUniform4i);
1302 ORD(glUniform4iv);
1303 ORD(glUniformMatrix2fv);
1304 ORD(glUniformMatrix3fv);
1305 ORD(glUniformMatrix4fv);
1306 ORD(glUseProgram);
1307 ORD(glValidateProgram);
1308 ORD(glVertexAttrib1f);
1309 ORD(glVertexAttrib1fv);
1310 ORD(glVertexAttrib2f);
1311 ORD(glVertexAttrib2fv);
1312 ORD(glVertexAttrib3f);
1313 ORD(glVertexAttrib3fv);
1314 ORD(glVertexAttrib4f);
1315 ORD(glVertexAttrib4fv);
1316 ORD(glVertexAttribPointer);
1317 ORD(glViewport);
1318#undef ORD
1319
1320// Override functions wrapped by Evas_GL
1321#define ORD(f) EVAS_API_OVERRIDE(f, &gl_funcs, evgl_)
1322 ORD(glBindFramebuffer);
1323 ORD(glBindRenderbuffer);
1324
1325// GLES2.0 API compat on top of desktop gl
1326 ORD(glClearDepthf);
1327 ORD(glDepthRangef);
1328 ORD(glGetShaderPrecisionFormat);
1329 ORD(glReleaseShaderCompiler);
1330 ORD(glShaderBinary);
1331#undef ORD
1332
1333#endif
1334
1335 return &gl_funcs;
1336}
1337
1338static int
1339eng_image_load_error_get(void *data __UNUSED__, void *image)
1340{
1341 Evas_GL_Image *im;
1342
1343 if (!image) return EVAS_LOAD_ERROR_NONE;
1344 im = image;
1345 return im->im->cache_entry.load_error;
1346}
1347
1348static int
1349module_open(Evas_Module *em)
1350{
1351 if (!em) return 0;
1352 /* get whatever engine module we inherit from */
1353 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
1354 _evas_engine_gl_cocoa_log_dom = eina_log_domain_register("EvasGLCocoa", EVAS_DEFAULT_LOG_COLOR);
1355 if(_evas_engine_gl_cocoa_log_dom < 0)
1356 {
1357 EINA_LOG_ERR("Impossible to create a log domain for GL (Cocoa) engine.");
1358 return 0;
1359 }
1360 /* store it for later use */
1361 func = pfunc;
1362 /* now to override methods */
1363 #define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
1364 ORD(info);
1365 ORD(info_free);
1366 ORD(setup);
1367 ORD(canvas_alpha_get);
1368 ORD(output_free);
1369 ORD(output_resize);
1370 ORD(output_tile_size_set);
1371 ORD(output_redraws_rect_add);
1372 ORD(output_redraws_rect_del);
1373 ORD(output_redraws_clear);
1374 ORD(output_redraws_next_update_get);
1375 ORD(output_redraws_next_update_push);
1376 ORD(context_cutout_add);
1377 ORD(context_cutout_clear);
1378 ORD(output_flush);
1379 ORD(output_idle_flush);
1380 // ORD(output_dump);
1381 ORD(rectangle_draw);
1382 ORD(line_draw);
1383 ORD(polygon_point_add);
1384 ORD(polygon_points_clear);
1385 ORD(polygon_draw);
1386
1387 ORD(image_load);
1388 ORD(image_new_from_data);
1389 ORD(image_new_from_copied_data);
1390 ORD(image_free);
1391 ORD(image_size_get);
1392 ORD(image_size_set);
1393 ORD(image_dirty_region);
1394 ORD(image_data_get);
1395 ORD(image_data_put);
1396 ORD(image_data_preload_request);
1397 ORD(image_data_preload_cancel);
1398 ORD(image_alpha_set);
1399 ORD(image_alpha_get);
1400 ORD(image_border_set);
1401 ORD(image_border_get);
1402 ORD(image_draw);
1403 ORD(image_comment_get);
1404 ORD(image_format_get);
1405 ORD(image_colorspace_set);
1406 ORD(image_colorspace_get);
1407 ORD(image_mask_create);
1408 // ORD(image_native_set);
1409 // ORD(image_native_get);
1410 // ORD(image_draw_filtered);
1411 // ORD(image_filtered_get);
1412 // ORD(image_filtered_save);
1413 // ORD(image_filtered_free);
1414
1415 ORD(font_draw);
1416
1417 ORD(image_scale_hint_set);
1418 ORD(image_scale_hint_get);
1419 ORD(image_stride_get);
1420
1421 ORD(image_map_draw);
1422 ORD(image_map_surface_new);
1423 ORD(image_map_surface_free);
1424
1425 ORD(image_content_hint_set);
1426 ORD(image_content_hint_get);
1427
1428 ORD(image_cache_flush);
1429 ORD(image_cache_set);
1430 ORD(image_cache_get);
1431
1432 ORD(gl_api_get);
1433
1434 ORD(image_load_error_get);
1435
1436 /* now advertise out own api */
1437 em->functions = (void *)(&func);
1438 return 1;
1439}
1440
1441static void
1442module_close(Evas_Module *em)
1443{
1444 eina_log_domain_unregister(_evas_engine_gl_cocoa_log_dom);
1445}
1446
1447static Evas_Module_Api evas_modapi =
1448{
1449 EVAS_MODULE_API_VERSION,
1450 "gl_cocoa",
1451 "none",
1452 {
1453 module_open,
1454 module_close
1455 }
1456};
1457
1458EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, gl_cocoa);
1459
1460#ifndef EVAS_STATIC_BUILD_GL_COCOA
1461EVAS_EINA_MODULE_DEFINE(engine, gl_cocoa);
1462#endif
diff --git a/libraries/evas/src/modules/engines/gl_cocoa/evas_engine.h b/libraries/evas/src/modules/engines/gl_cocoa/evas_engine.h
new file mode 100644
index 0000000..a066d3e
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_cocoa/evas_engine.h
@@ -0,0 +1,69 @@
1#ifndef __EVAS_ENGINE_H__
2#define __EVAS_ENGINE_H__
3
4#ifdef HAVE_CONFIG_H
5# include <config.h>
6#endif
7
8#include <OpenGL/gl.h>
9
10#include "evas_gl_common.h"
11#include "Evas_Engine_GL_Cocoa.h"
12
13extern int _evas_engine_gl_cocoa_log_dom;
14
15#ifdef ERR
16# undef ERR
17#endif
18#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_gl_cocoa_log_dom, __VA_ARGS__)
19
20#ifdef DBG
21# undef DBG
22#endif
23#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_gl_cocoa_log_dom, __VA_ARGS__)
24
25#ifdef INF
26# undef INF
27#endif
28#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_gl_cocoa_log_dom, __VA_ARGS__)
29
30#ifdef WRN
31# undef WRN
32#endif
33#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_gl_cocoa_log_dom, __VA_ARGS__)
34
35#ifdef CRIT
36# undef CRIT
37#endif
38#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_gl_cocoa_log_dom, __VA_ARGS__)
39
40typedef struct _Evas_GL_Cocoa_Window Evas_GL_Cocoa_Window;
41
42struct _Evas_GL_Cocoa_Window
43{
44 void* window;
45 void* view;
46 int width;
47 int height;
48 int depth;
49 Evas_Engine_GL_Context *gl_context;
50 struct {
51 int x1;
52 int y1;
53 int x2;
54 int y2;
55 int redraw : 1;
56 int drew : 1;
57 } draw;
58};
59
60Evas_GL_Cocoa_Window *eng_window_new(void *window,
61 int width,
62 int height);
63void eng_window_free(Evas_GL_Cocoa_Window *gw);
64void eng_window_use(Evas_GL_Cocoa_Window *gw);
65void eng_window_swap_buffers(Evas_GL_Cocoa_Window *gw);
66void eng_window_vsync_set(int on);
67void ng_window_resize(Evas_GL_Cocoa_Window *gw, int width, int height);
68
69#endif /* __EVAS_ENGINE_H__ */
diff --git a/libraries/evas/src/modules/engines/gl_cocoa/evas_gl_cocoa_main.m b/libraries/evas/src/modules/engines/gl_cocoa/evas_gl_cocoa_main.m
new file mode 100644
index 0000000..aa6b895
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_cocoa/evas_gl_cocoa_main.m
@@ -0,0 +1,134 @@
1
2#include <Cocoa/Cocoa.h>
3
4#include "evas_engine.h"
5
6static Evas_GL_Cocoa_Window *_evas_gl_cocoa_window = NULL;
7
8@interface EvasGLView : NSOpenGLView
9{
10}
11
12+ (NSOpenGLPixelFormat*) basicPixelFormat;
13- (id) initWithFrame: (NSRect) frameRect;
14
15@end
16
17
18@implementation EvasGLView
19
20- (id) init
21{
22 self = [super init];
23 return self;
24}
25
26+ (NSOpenGLPixelFormat*) basicPixelFormat
27{
28 NSOpenGLPixelFormatAttribute attributes [] = {
29 NSOpenGLPFAWindow,
30 NSOpenGLPFAAccelerated,
31 NSOpenGLPFADoubleBuffer,
32 /*NSOpenGLPFAColorSize, 24,
33 NSOpenGLPFAAlphaSize, 8,
34 NSOpenGLPFADepthSize, 24,*/
35 0
36 };
37 return [[[NSOpenGLPixelFormat alloc] initWithAttributes:attributes] autorelease];
38}
39
40// ---------------------------------
41
42-(id) initWithFrame: (NSRect) frameRect
43{
44 NSOpenGLPixelFormat * pf = [EvasGLView basicPixelFormat];
45 self = [super initWithFrame: frameRect pixelFormat: pf];
46 return self;
47}
48
49@end
50
51
52Evas_GL_Cocoa_Window *
53eng_window_new(void *window,
54 int w,
55 int h)
56{
57 Evas_GL_Cocoa_Window *gw;
58 int context_attrs[3];
59 int config_attrs[20];
60 int major_version, minor_version;
61 int num_config;
62
63 gw = calloc(1, sizeof(Evas_GL_Cocoa_Window));
64 if (!gw) return NULL;
65
66 _evas_gl_cocoa_window = gw;
67 gw->window = window;
68 gw->view = [[EvasGLView alloc] initWithFrame:NSMakeRect(0,0,w,h)];
69 NSOpenGLContext *ctx = [(NSOpenGLView*)gw->view openGLContext];
70 [ctx makeCurrentContext];
71 gw->gl_context = evas_gl_common_context_new();
72
73 if (!gw->gl_context)
74 {
75 free(gw);
76 return NULL;
77 }
78 evas_gl_common_context_use(gw->gl_context);
79 evas_gl_common_context_resize(gw->gl_context, w, h, 0);
80
81 return gw;
82}
83
84void
85eng_window_free(Evas_GL_Cocoa_Window *gw)
86{
87 if (gw == _evas_gl_cocoa_window) _evas_gl_cocoa_window = NULL;
88 evas_gl_common_context_free(gw->gl_context);
89 free(gw);
90}
91
92void
93eng_window_use(Evas_GL_Cocoa_Window *gw)
94{
95 if (_evas_gl_cocoa_window != gw)
96 {
97 [[(NSOpenGLView*)gw->view openGLContext] makeCurrentContext];
98 if (_evas_gl_cocoa_window)
99 evas_gl_common_context_flush(_evas_gl_cocoa_window->gl_context);
100 _evas_gl_cocoa_window = gw;
101
102 }
103 evas_gl_common_context_use(gw->gl_context);
104}
105
106void
107eng_window_swap_buffers(Evas_GL_Cocoa_Window *gw)
108{
109 [[(NSOpenGLView*)gw->view openGLContext] flushBuffer];
110}
111
112void
113eng_window_vsync_set(int on)
114{
115
116}
117
118
119void
120eng_window_resize(Evas_GL_Cocoa_Window *gw, int width, int height)
121{
122 NSRect view_frame;
123
124 INF("Resize %d %d\n", width, height);
125
126 view_frame = [(EvasGLView*)gw->view frame];
127 printf("view_frame : %3.3f %3.3f\n", view_frame.size.height, view_frame.size.width);
128 view_frame.size.height = height;
129 view_frame.size.width = width;
130 printf("view_frame : %3.3f %3.3f\n", view_frame.size.height, view_frame.size.width);
131 [(EvasGLView*)gw->view setFrame:view_frame];
132 [[(NSOpenGLView*)gw->view openGLContext] flushBuffer];
133}
134
diff --git a/libraries/evas/src/modules/engines/gl_common/Makefile.am b/libraries/evas/src/modules/engines/gl_common/Makefile.am
new file mode 100644
index 0000000..15acc02
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/Makefile.am
@@ -0,0 +1,164 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8@FREETYPE_CFLAGS@ \
9@PIXMAN_CFLAGS@ \
10@GL_EET_CFLAGS@ \
11@EINA_CFLAGS@
12
13if BUILD_ENGINE_GL_COMMON
14
15noinst_LTLIBRARIES = libevas_engine_gl_common.la
16libevas_engine_gl_common_la_SOURCES = \
17evas_gl_private.h \
18evas_gl_common.h \
19evas_gl_context.c \
20evas_gl_shader.c \
21evas_gl_rectangle.c \
22evas_gl_texture.c \
23evas_gl_image.c \
24evas_gl_font.c \
25evas_gl_polygon.c \
26evas_gl_line.c \
27evas_gl_filter.c \
28shader/rect_frag.h \
29shader/rect_frag_bin_s3c6410.h \
30shader/rect_vert.h \
31shader/rect_vert_bin_s3c6410.h \
32shader/font_frag.h \
33shader/font_frag_bin_s3c6410.h \
34shader/font_vert.h \
35shader/font_vert_bin_s3c6410.h \
36shader/img_frag.h \
37shader/img_frag_bin_s3c6410.h \
38shader/img_vert.h \
39shader/img_vert_bin_s3c6410.h \
40shader/img_nomul_frag.h \
41shader/img_nomul_frag_bin_s3c6410.h \
42shader/img_nomul_vert.h \
43shader/img_nomul_vert_bin_s3c6410.h \
44shader/img_bgra_frag.h \
45shader/img_bgra_frag_bin_s3c6410.h \
46shader/img_bgra_vert.h \
47shader/img_bgra_vert_bin_s3c6410.h \
48shader/img_bgra_nomul_frag.h \
49shader/img_bgra_nomul_frag_bin_s3c6410.h \
50shader/img_bgra_nomul_vert.h \
51shader/img_bgra_nomul_vert_bin_s3c6410.h \
52shader/img_mask_frag.h \
53shader/img_mask_vert.h \
54shader/nv12_nomul_vert.h \
55shader/nv12_vert.h \
56shader/nv12_nomul_frag.h \
57shader/nv12_frag.h \
58shader/yuv_frag.h \
59shader/yuv_frag_bin_s3c6410.h \
60shader/yuv_vert.h \
61shader/yuv_vert_bin_s3c6410.h \
62shader/yuv_nomul_frag.h \
63shader/yuv_nomul_frag_bin_s3c6410.h \
64shader/yuv_nomul_vert.h \
65shader/yuv_nomul_vert_bin_s3c6410.h \
66shader/tex_frag.h \
67shader/tex_frag_bin_s3c6410.h \
68shader/tex_vert.h \
69shader/tex_vert_bin_s3c6410.h \
70shader/tex_nomul_frag.h \
71shader/tex_nomul_frag_bin_s3c6410.h \
72shader/tex_nomul_vert.h \
73shader/tex_nomul_vert_bin_s3c6410.h \
74shader/filter_invert.h \
75shader/filter_invert_nomul.h \
76shader/filter_invert_bgra.h \
77shader/filter_invert_bgra_nomul.h \
78shader/filter_sepia.h \
79shader/filter_sepia_nomul.h \
80shader/filter_sepia_bgra.h \
81shader/filter_sepia_bgra_nomul.h \
82shader/filter_greyscale.h \
83shader/filter_greyscale_nomul.h \
84shader/filter_greyscale_bgra.h \
85shader/filter_greyscale_bgra_nomul.h \
86shader/filter_blur.h \
87shader/filter_blur_nomul.h \
88shader/filter_blur_bgra.h \
89shader/filter_blur_bgra_nomul.h \
90shader/yuy2_frag.h \
91shader/yuy2_vert.h \
92shader/yuy2_nomul_frag.h \
93shader/yuy2_nomul_vert.h
94
95libevas_engine_gl_common_la_LIBADD = @EINA_LIBS@ @GL_EET_LIBS@ @evas_engine_gl_common_libs@ @dlopen_libs@
96endif
97
98EXTRA_DIST = \
99shader/compile-s3c6410.sh \
100shader/compile-sgx.sh \
101shader/make-c-bin.sh \
102shader/make-c-str.sh \
103shader/rect_frag.shd \
104shader/rect_frag_s3c6410.asm \
105shader/rect_vert.shd \
106shader/font_frag.shd \
107shader/font_frag_s3c6410.asm \
108shader/font_vert.shd \
109shader/img_frag.shd \
110shader/img_frag_s3c6410.asm \
111shader/img_vert.shd \
112shader/img_nomul_frag.shd \
113shader/img_nomul_vert.shd \
114shader/img_bgra_vert.shd \
115shader/img_bgra_frag.shd \
116shader/img_bgra_vert.shd \
117shader/img_bgra_nomul_frag.shd \
118shader/img_bgra_nomul_vert.shd \
119shader/img_mask_frag.h \
120shader/img_mask_vert.h \
121shader/yuv_frag.shd \
122shader/yuv_frag_s3c6410.asm \
123shader/yuv_vert.shd \
124shader/yuv_nomul_frag.shd \
125shader/yuv_nomul_vert.shd \
126shader/tex_frag.shd \
127shader/tex_frag_s3c6410.asm \
128shader/tex_vert.shd \
129shader/tex_nomul_frag.shd \
130shader/tex_nomul_vert.shd \
131shader/filter_invert.shd \
132shader/filter_invert_nomul.shd \
133shader/filter_invert_bgra.shd \
134shader/filter_invert_bgra_nomul.shd \
135shader/filter_greyscale.shd \
136shader/filter_greyscale_nomul.shd \
137shader/filter_greyscale_bgra.shd \
138shader/filter_greyscale_bgra_nomul.shd \
139shader/filter_sepia.shd \
140shader/filter_sepia_nomul.shd \
141shader/filter_sepia_bgra.shd \
142shader/filter_sepia_bgra_nomul.shd \
143shader/filter_blur.shd \
144shader/filter_blur_nomul.shd \
145shader/filter_blur_bgra.shd \
146shader/filter_blur_bgra_nomul.shd \
147shader/nv12_frag.h \
148shader/nv12_frag.shd \
149shader/nv12_nomul_frag.h \
150shader/nv12_nomul_frag.shd \
151shader/nv12_nomul_vert.h \
152shader/nv12_nomul_vert.shd \
153shader/nv12_vert.h \
154shader/nv12_vert.shd \
155shader/yuy2_frag.h \
156shader/yuy2_frag.shd \
157shader/yuy2_nomul_frag.h \
158shader/yuy2_nomul_frag.shd \
159shader/yuy2_nomul_vert.h \
160shader/yuy2_nomul_vert.shd \
161shader/yuy2_vert.h \
162shader/yuy2_vert.shd
163
164
diff --git a/libraries/evas/src/modules/engines/gl_common/Makefile.in b/libraries/evas/src/modules/engines/gl_common/Makefile.in
new file mode 100644
index 0000000..61ed478
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/Makefile.in
@@ -0,0 +1,871 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/modules/engines/gl_common
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_coverage.m4 \
42 $(top_srcdir)/m4/efl_doxygen.m4 \
43 $(top_srcdir)/m4/efl_fnmatch.m4 \
44 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
45 $(top_srcdir)/m4/evas_check_engine.m4 \
46 $(top_srcdir)/m4/evas_check_loader.m4 \
47 $(top_srcdir)/m4/evas_converter.m4 \
48 $(top_srcdir)/m4/evas_dither.m4 \
49 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
50 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
51 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
52 $(top_srcdir)/configure.ac
53am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
54 $(ACLOCAL_M4)
55mkinstalldirs = $(install_sh) -d
56CONFIG_HEADER = $(top_builddir)/config.h
57CONFIG_CLEAN_FILES =
58CONFIG_CLEAN_VPATH_FILES =
59LTLIBRARIES = $(noinst_LTLIBRARIES)
60libevas_engine_gl_common_la_DEPENDENCIES =
61am__libevas_engine_gl_common_la_SOURCES_DIST = evas_gl_private.h \
62 evas_gl_common.h evas_gl_context.c evas_gl_shader.c \
63 evas_gl_rectangle.c evas_gl_texture.c evas_gl_image.c \
64 evas_gl_font.c evas_gl_polygon.c evas_gl_line.c \
65 evas_gl_filter.c shader/rect_frag.h \
66 shader/rect_frag_bin_s3c6410.h shader/rect_vert.h \
67 shader/rect_vert_bin_s3c6410.h shader/font_frag.h \
68 shader/font_frag_bin_s3c6410.h shader/font_vert.h \
69 shader/font_vert_bin_s3c6410.h shader/img_frag.h \
70 shader/img_frag_bin_s3c6410.h shader/img_vert.h \
71 shader/img_vert_bin_s3c6410.h shader/img_nomul_frag.h \
72 shader/img_nomul_frag_bin_s3c6410.h shader/img_nomul_vert.h \
73 shader/img_nomul_vert_bin_s3c6410.h shader/img_bgra_frag.h \
74 shader/img_bgra_frag_bin_s3c6410.h shader/img_bgra_vert.h \
75 shader/img_bgra_vert_bin_s3c6410.h \
76 shader/img_bgra_nomul_frag.h \
77 shader/img_bgra_nomul_frag_bin_s3c6410.h \
78 shader/img_bgra_nomul_vert.h \
79 shader/img_bgra_nomul_vert_bin_s3c6410.h \
80 shader/img_mask_frag.h shader/img_mask_vert.h \
81 shader/nv12_nomul_vert.h shader/nv12_vert.h \
82 shader/nv12_nomul_frag.h shader/nv12_frag.h shader/yuv_frag.h \
83 shader/yuv_frag_bin_s3c6410.h shader/yuv_vert.h \
84 shader/yuv_vert_bin_s3c6410.h shader/yuv_nomul_frag.h \
85 shader/yuv_nomul_frag_bin_s3c6410.h shader/yuv_nomul_vert.h \
86 shader/yuv_nomul_vert_bin_s3c6410.h shader/tex_frag.h \
87 shader/tex_frag_bin_s3c6410.h shader/tex_vert.h \
88 shader/tex_vert_bin_s3c6410.h shader/tex_nomul_frag.h \
89 shader/tex_nomul_frag_bin_s3c6410.h shader/tex_nomul_vert.h \
90 shader/tex_nomul_vert_bin_s3c6410.h shader/filter_invert.h \
91 shader/filter_invert_nomul.h shader/filter_invert_bgra.h \
92 shader/filter_invert_bgra_nomul.h shader/filter_sepia.h \
93 shader/filter_sepia_nomul.h shader/filter_sepia_bgra.h \
94 shader/filter_sepia_bgra_nomul.h shader/filter_greyscale.h \
95 shader/filter_greyscale_nomul.h shader/filter_greyscale_bgra.h \
96 shader/filter_greyscale_bgra_nomul.h shader/filter_blur.h \
97 shader/filter_blur_nomul.h shader/filter_blur_bgra.h \
98 shader/filter_blur_bgra_nomul.h shader/yuy2_frag.h \
99 shader/yuy2_vert.h shader/yuy2_nomul_frag.h \
100 shader/yuy2_nomul_vert.h
101@BUILD_ENGINE_GL_COMMON_TRUE@am_libevas_engine_gl_common_la_OBJECTS = \
102@BUILD_ENGINE_GL_COMMON_TRUE@ evas_gl_context.lo \
103@BUILD_ENGINE_GL_COMMON_TRUE@ evas_gl_shader.lo \
104@BUILD_ENGINE_GL_COMMON_TRUE@ evas_gl_rectangle.lo \
105@BUILD_ENGINE_GL_COMMON_TRUE@ evas_gl_texture.lo \
106@BUILD_ENGINE_GL_COMMON_TRUE@ evas_gl_image.lo evas_gl_font.lo \
107@BUILD_ENGINE_GL_COMMON_TRUE@ evas_gl_polygon.lo \
108@BUILD_ENGINE_GL_COMMON_TRUE@ evas_gl_line.lo evas_gl_filter.lo
109libevas_engine_gl_common_la_OBJECTS = \
110 $(am_libevas_engine_gl_common_la_OBJECTS)
111AM_V_lt = $(am__v_lt_$(V))
112am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
113am__v_lt_0 = --silent
114@BUILD_ENGINE_GL_COMMON_TRUE@am_libevas_engine_gl_common_la_rpath =
115DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
116depcomp = $(SHELL) $(top_srcdir)/depcomp
117am__depfiles_maybe = depfiles
118am__mv = mv -f
119COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
120 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
121LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
122 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
123 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
124 $(AM_CFLAGS) $(CFLAGS)
125AM_V_CC = $(am__v_CC_$(V))
126am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
127am__v_CC_0 = @echo " CC " $@;
128AM_V_at = $(am__v_at_$(V))
129am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
130am__v_at_0 = @
131CCLD = $(CC)
132LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
133 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
134 $(AM_LDFLAGS) $(LDFLAGS) -o $@
135AM_V_CCLD = $(am__v_CCLD_$(V))
136am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
137am__v_CCLD_0 = @echo " CCLD " $@;
138AM_V_GEN = $(am__v_GEN_$(V))
139am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
140am__v_GEN_0 = @echo " GEN " $@;
141SOURCES = $(libevas_engine_gl_common_la_SOURCES)
142DIST_SOURCES = $(am__libevas_engine_gl_common_la_SOURCES_DIST)
143ETAGS = etags
144CTAGS = ctags
145DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
146ACLOCAL = @ACLOCAL@
147ALLOCA = @ALLOCA@
148AMTAR = @AMTAR@
149AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
150AR = @AR@
151AS = @AS@
152AUTOCONF = @AUTOCONF@
153AUTOHEADER = @AUTOHEADER@
154AUTOMAKE = @AUTOMAKE@
155AWK = @AWK@
156CC = @CC@
157CCDEPMODE = @CCDEPMODE@
158CFLAGS = @CFLAGS@
159CHECK_CFLAGS = @CHECK_CFLAGS@
160CHECK_LIBS = @CHECK_LIBS@
161CPP = @CPP@
162CPPFLAGS = @CPPFLAGS@
163CXX = @CXX@
164CXXCPP = @CXXCPP@
165CXXDEPMODE = @CXXDEPMODE@
166CXXFLAGS = @CXXFLAGS@
167CYGPATH_W = @CYGPATH_W@
168DEFS = @DEFS@
169DEPDIR = @DEPDIR@
170DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
171DIRECTFB_LIBS = @DIRECTFB_LIBS@
172DLLTOOL = @DLLTOOL@
173DSYMUTIL = @DSYMUTIL@
174DUMPBIN = @DUMPBIN@
175ECHO_C = @ECHO_C@
176ECHO_N = @ECHO_N@
177ECHO_T = @ECHO_T@
178ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
179ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
180EDB_CFLAGS = @EDB_CFLAGS@
181EDB_LIBS = @EDB_LIBS@
182EDJE_CFLAGS = @EDJE_CFLAGS@
183EDJE_LIBS = @EDJE_LIBS@
184EET_CFLAGS = @EET_CFLAGS@
185EET_LIBS = @EET_LIBS@
186EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
187EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
188EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
189EGREP = @EGREP@
190EINA_CFLAGS = @EINA_CFLAGS@
191EINA_LIBS = @EINA_LIBS@
192EVAS_CFLAGS = @EVAS_CFLAGS@
193EVAS_LIBS = @EVAS_LIBS@
194EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
195EVIL_CFLAGS = @EVIL_CFLAGS@
196EVIL_LIBS = @EVIL_LIBS@
197EXEEXT = @EXEEXT@
198FGREP = @FGREP@
199FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
200FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
201FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
202FREETYPE_LIBS = @FREETYPE_LIBS@
203FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
204FRIBIDI_LIBS = @FRIBIDI_LIBS@
205GL_EET_CFLAGS = @GL_EET_CFLAGS@
206GL_EET_LIBS = @GL_EET_LIBS@
207GREP = @GREP@
208HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
209HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
210INSTALL = @INSTALL@
211INSTALL_DATA = @INSTALL_DATA@
212INSTALL_PROGRAM = @INSTALL_PROGRAM@
213INSTALL_SCRIPT = @INSTALL_SCRIPT@
214INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
215LD = @LD@
216LDFLAGS = @LDFLAGS@
217LIBOBJS = @LIBOBJS@
218LIBS = @LIBS@
219LIBTOOL = @LIBTOOL@
220LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
221LINEBREAK_LIBS = @LINEBREAK_LIBS@
222LIPO = @LIPO@
223LN_S = @LN_S@
224LTLIBOBJS = @LTLIBOBJS@
225MAKEINFO = @MAKEINFO@
226MKDIR_P = @MKDIR_P@
227MODULE_ARCH = @MODULE_ARCH@
228NM = @NM@
229NMEDIT = @NMEDIT@
230OBJC = @OBJC@
231OBJCDEPMODE = @OBJCDEPMODE@
232OBJCFLAGS = @OBJCFLAGS@
233OBJDUMP = @OBJDUMP@
234OBJEXT = @OBJEXT@
235OTOOL = @OTOOL@
236OTOOL64 = @OTOOL64@
237PACKAGE = @PACKAGE@
238PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
239PACKAGE_NAME = @PACKAGE_NAME@
240PACKAGE_STRING = @PACKAGE_STRING@
241PACKAGE_TARNAME = @PACKAGE_TARNAME@
242PACKAGE_URL = @PACKAGE_URL@
243PACKAGE_VERSION = @PACKAGE_VERSION@
244PATH_SEPARATOR = @PATH_SEPARATOR@
245PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
246PIXMAN_LIBS = @PIXMAN_LIBS@
247PKG_CONFIG = @PKG_CONFIG@
248PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
249PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
250PNG_CFLAGS = @PNG_CFLAGS@
251PNG_LIBS = @PNG_LIBS@
252RANLIB = @RANLIB@
253SDL_CFLAGS = @SDL_CFLAGS@
254SDL_LIBS = @SDL_LIBS@
255SED = @SED@
256SET_MAKE = @SET_MAKE@
257SHELL = @SHELL@
258SHM_OPEN_LINK = @SHM_OPEN_LINK@
259STRIP = @STRIP@
260SVG_CFLAGS = @SVG_CFLAGS@
261SVG_LIBS = @SVG_LIBS@
262VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
263VALGRIND_LIBS = @VALGRIND_LIBS@
264VERSION = @VERSION@
265VMAJ = @VMAJ@
266WIN32_CFLAGS = @WIN32_CFLAGS@
267WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
268XCB_CFLAGS = @XCB_CFLAGS@
269XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
270XCB_GL_LIBS = @XCB_GL_LIBS@
271XCB_LIBS = @XCB_LIBS@
272XEXT_CFLAGS = @XEXT_CFLAGS@
273XEXT_LIBS = @XEXT_LIBS@
274XMKMF = @XMKMF@
275X_CFLAGS = @X_CFLAGS@
276X_EXTRA_LIBS = @X_EXTRA_LIBS@
277X_LIBS = @X_LIBS@
278X_PRE_LIBS = @X_PRE_LIBS@
279abs_builddir = @abs_builddir@
280abs_srcdir = @abs_srcdir@
281abs_top_builddir = @abs_top_builddir@
282abs_top_srcdir = @abs_top_srcdir@
283ac_ct_CC = @ac_ct_CC@
284ac_ct_CXX = @ac_ct_CXX@
285ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
286ac_ct_OBJC = @ac_ct_OBJC@
287altivec_cflags = @altivec_cflags@
288am__include = @am__include@
289am__leading_dot = @am__leading_dot@
290am__quote = @am__quote@
291am__tar = @am__tar@
292am__untar = @am__untar@
293bindir = @bindir@
294build = @build@
295build_alias = @build_alias@
296build_cpu = @build_cpu@
297build_os = @build_os@
298build_vendor = @build_vendor@
299builddir = @builddir@
300datadir = @datadir@
301datarootdir = @datarootdir@
302dlopen_libs = @dlopen_libs@
303docdir = @docdir@
304dvidir = @dvidir@
305edje_cc = @edje_cc@
306efl_doxygen = @efl_doxygen@
307efl_have_doxygen = @efl_have_doxygen@
308evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
309evas_engine_buffer_libs = @evas_engine_buffer_libs@
310evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
311evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
312evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
313evas_engine_directfb_libs = @evas_engine_directfb_libs@
314evas_engine_fb_cflags = @evas_engine_fb_cflags@
315evas_engine_fb_libs = @evas_engine_fb_libs@
316evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
317evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
318evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
319evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
320evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
321evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
322evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
323evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
324evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
325evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
326evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
327evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
328evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
329evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
330evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
331evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
332evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
333evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
334evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
335evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
336evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
337evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
338evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
339evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
340evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
341evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
342evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
343evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
344evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
345evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
346evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
347evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
348evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
349evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
350evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
351evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
352evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
353evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
354evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
355evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
356evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
357evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
358evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
359evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
360evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
361evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
362evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
363evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
364evas_image_loader_png_libs = @evas_image_loader_png_libs@
365evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
366evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
367evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
368evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
369evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
370evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
371evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
372evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
373evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
374evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
375evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
376evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
377exec_prefix = @exec_prefix@
378have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
379have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
380have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
381have_evas_engine_software_x11 = @have_evas_engine_software_x11@
382have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
383have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
384have_lcov = @have_lcov@
385host = @host@
386host_alias = @host_alias@
387host_cpu = @host_cpu@
388host_os = @host_os@
389host_vendor = @host_vendor@
390htmldir = @htmldir@
391includedir = @includedir@
392infodir = @infodir@
393install_sh = @install_sh@
394libdir = @libdir@
395libexecdir = @libexecdir@
396localedir = @localedir@
397localstatedir = @localstatedir@
398lt_ECHO = @lt_ECHO@
399lt_enable_auto_import = @lt_enable_auto_import@
400mandir = @mandir@
401mkdir_p = @mkdir_p@
402oldincludedir = @oldincludedir@
403pdfdir = @pdfdir@
404pkgconfig_requires_private = @pkgconfig_requires_private@
405prefix = @prefix@
406program_transform_name = @program_transform_name@
407psdir = @psdir@
408pthread_cflags = @pthread_cflags@
409pthread_libs = @pthread_libs@
410release_info = @release_info@
411requirement_evas = @requirement_evas@
412sbindir = @sbindir@
413sharedstatedir = @sharedstatedir@
414srcdir = @srcdir@
415sysconfdir = @sysconfdir@
416target_alias = @target_alias@
417top_build_prefix = @top_build_prefix@
418top_builddir = @top_builddir@
419top_srcdir = @top_srcdir@
420version_info = @version_info@
421MAINTAINERCLEANFILES = Makefile.in
422AM_CPPFLAGS = \
423-I. \
424-I$(top_srcdir)/src/lib \
425-I$(top_srcdir)/src/lib/include \
426@FREETYPE_CFLAGS@ \
427@PIXMAN_CFLAGS@ \
428@GL_EET_CFLAGS@ \
429@EINA_CFLAGS@
430
431@BUILD_ENGINE_GL_COMMON_TRUE@noinst_LTLIBRARIES = libevas_engine_gl_common.la
432@BUILD_ENGINE_GL_COMMON_TRUE@libevas_engine_gl_common_la_SOURCES = \
433@BUILD_ENGINE_GL_COMMON_TRUE@evas_gl_private.h \
434@BUILD_ENGINE_GL_COMMON_TRUE@evas_gl_common.h \
435@BUILD_ENGINE_GL_COMMON_TRUE@evas_gl_context.c \
436@BUILD_ENGINE_GL_COMMON_TRUE@evas_gl_shader.c \
437@BUILD_ENGINE_GL_COMMON_TRUE@evas_gl_rectangle.c \
438@BUILD_ENGINE_GL_COMMON_TRUE@evas_gl_texture.c \
439@BUILD_ENGINE_GL_COMMON_TRUE@evas_gl_image.c \
440@BUILD_ENGINE_GL_COMMON_TRUE@evas_gl_font.c \
441@BUILD_ENGINE_GL_COMMON_TRUE@evas_gl_polygon.c \
442@BUILD_ENGINE_GL_COMMON_TRUE@evas_gl_line.c \
443@BUILD_ENGINE_GL_COMMON_TRUE@evas_gl_filter.c \
444@BUILD_ENGINE_GL_COMMON_TRUE@shader/rect_frag.h \
445@BUILD_ENGINE_GL_COMMON_TRUE@shader/rect_frag_bin_s3c6410.h \
446@BUILD_ENGINE_GL_COMMON_TRUE@shader/rect_vert.h \
447@BUILD_ENGINE_GL_COMMON_TRUE@shader/rect_vert_bin_s3c6410.h \
448@BUILD_ENGINE_GL_COMMON_TRUE@shader/font_frag.h \
449@BUILD_ENGINE_GL_COMMON_TRUE@shader/font_frag_bin_s3c6410.h \
450@BUILD_ENGINE_GL_COMMON_TRUE@shader/font_vert.h \
451@BUILD_ENGINE_GL_COMMON_TRUE@shader/font_vert_bin_s3c6410.h \
452@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_frag.h \
453@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_frag_bin_s3c6410.h \
454@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_vert.h \
455@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_vert_bin_s3c6410.h \
456@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_nomul_frag.h \
457@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_nomul_frag_bin_s3c6410.h \
458@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_nomul_vert.h \
459@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_nomul_vert_bin_s3c6410.h \
460@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_bgra_frag.h \
461@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_bgra_frag_bin_s3c6410.h \
462@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_bgra_vert.h \
463@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_bgra_vert_bin_s3c6410.h \
464@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_bgra_nomul_frag.h \
465@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_bgra_nomul_frag_bin_s3c6410.h \
466@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_bgra_nomul_vert.h \
467@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_bgra_nomul_vert_bin_s3c6410.h \
468@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_mask_frag.h \
469@BUILD_ENGINE_GL_COMMON_TRUE@shader/img_mask_vert.h \
470@BUILD_ENGINE_GL_COMMON_TRUE@shader/nv12_nomul_vert.h \
471@BUILD_ENGINE_GL_COMMON_TRUE@shader/nv12_vert.h \
472@BUILD_ENGINE_GL_COMMON_TRUE@shader/nv12_nomul_frag.h \
473@BUILD_ENGINE_GL_COMMON_TRUE@shader/nv12_frag.h \
474@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuv_frag.h \
475@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuv_frag_bin_s3c6410.h \
476@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuv_vert.h \
477@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuv_vert_bin_s3c6410.h \
478@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuv_nomul_frag.h \
479@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuv_nomul_frag_bin_s3c6410.h \
480@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuv_nomul_vert.h \
481@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuv_nomul_vert_bin_s3c6410.h \
482@BUILD_ENGINE_GL_COMMON_TRUE@shader/tex_frag.h \
483@BUILD_ENGINE_GL_COMMON_TRUE@shader/tex_frag_bin_s3c6410.h \
484@BUILD_ENGINE_GL_COMMON_TRUE@shader/tex_vert.h \
485@BUILD_ENGINE_GL_COMMON_TRUE@shader/tex_vert_bin_s3c6410.h \
486@BUILD_ENGINE_GL_COMMON_TRUE@shader/tex_nomul_frag.h \
487@BUILD_ENGINE_GL_COMMON_TRUE@shader/tex_nomul_frag_bin_s3c6410.h \
488@BUILD_ENGINE_GL_COMMON_TRUE@shader/tex_nomul_vert.h \
489@BUILD_ENGINE_GL_COMMON_TRUE@shader/tex_nomul_vert_bin_s3c6410.h \
490@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_invert.h \
491@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_invert_nomul.h \
492@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_invert_bgra.h \
493@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_invert_bgra_nomul.h \
494@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_sepia.h \
495@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_sepia_nomul.h \
496@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_sepia_bgra.h \
497@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_sepia_bgra_nomul.h \
498@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_greyscale.h \
499@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_greyscale_nomul.h \
500@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_greyscale_bgra.h \
501@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_greyscale_bgra_nomul.h \
502@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_blur.h \
503@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_blur_nomul.h \
504@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_blur_bgra.h \
505@BUILD_ENGINE_GL_COMMON_TRUE@shader/filter_blur_bgra_nomul.h \
506@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuy2_frag.h \
507@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuy2_vert.h \
508@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuy2_nomul_frag.h \
509@BUILD_ENGINE_GL_COMMON_TRUE@shader/yuy2_nomul_vert.h
510
511@BUILD_ENGINE_GL_COMMON_TRUE@libevas_engine_gl_common_la_LIBADD = @EINA_LIBS@ @GL_EET_LIBS@ @evas_engine_gl_common_libs@ @dlopen_libs@
512EXTRA_DIST = \
513shader/compile-s3c6410.sh \
514shader/compile-sgx.sh \
515shader/make-c-bin.sh \
516shader/make-c-str.sh \
517shader/rect_frag.shd \
518shader/rect_frag_s3c6410.asm \
519shader/rect_vert.shd \
520shader/font_frag.shd \
521shader/font_frag_s3c6410.asm \
522shader/font_vert.shd \
523shader/img_frag.shd \
524shader/img_frag_s3c6410.asm \
525shader/img_vert.shd \
526shader/img_nomul_frag.shd \
527shader/img_nomul_vert.shd \
528shader/img_bgra_vert.shd \
529shader/img_bgra_frag.shd \
530shader/img_bgra_vert.shd \
531shader/img_bgra_nomul_frag.shd \
532shader/img_bgra_nomul_vert.shd \
533shader/img_mask_frag.h \
534shader/img_mask_vert.h \
535shader/yuv_frag.shd \
536shader/yuv_frag_s3c6410.asm \
537shader/yuv_vert.shd \
538shader/yuv_nomul_frag.shd \
539shader/yuv_nomul_vert.shd \
540shader/tex_frag.shd \
541shader/tex_frag_s3c6410.asm \
542shader/tex_vert.shd \
543shader/tex_nomul_frag.shd \
544shader/tex_nomul_vert.shd \
545shader/filter_invert.shd \
546shader/filter_invert_nomul.shd \
547shader/filter_invert_bgra.shd \
548shader/filter_invert_bgra_nomul.shd \
549shader/filter_greyscale.shd \
550shader/filter_greyscale_nomul.shd \
551shader/filter_greyscale_bgra.shd \
552shader/filter_greyscale_bgra_nomul.shd \
553shader/filter_sepia.shd \
554shader/filter_sepia_nomul.shd \
555shader/filter_sepia_bgra.shd \
556shader/filter_sepia_bgra_nomul.shd \
557shader/filter_blur.shd \
558shader/filter_blur_nomul.shd \
559shader/filter_blur_bgra.shd \
560shader/filter_blur_bgra_nomul.shd \
561shader/nv12_frag.h \
562shader/nv12_frag.shd \
563shader/nv12_nomul_frag.h \
564shader/nv12_nomul_frag.shd \
565shader/nv12_nomul_vert.h \
566shader/nv12_nomul_vert.shd \
567shader/nv12_vert.h \
568shader/nv12_vert.shd \
569shader/yuy2_frag.h \
570shader/yuy2_frag.shd \
571shader/yuy2_nomul_frag.h \
572shader/yuy2_nomul_frag.shd \
573shader/yuy2_nomul_vert.h \
574shader/yuy2_nomul_vert.shd \
575shader/yuy2_vert.h \
576shader/yuy2_vert.shd
577
578all: all-am
579
580.SUFFIXES:
581.SUFFIXES: .c .lo .o .obj
582$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
583 @for dep in $?; do \
584 case '$(am__configure_deps)' in \
585 *$$dep*) \
586 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
587 && { if test -f $@; then exit 0; else break; fi; }; \
588 exit 1;; \
589 esac; \
590 done; \
591 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/gl_common/Makefile'; \
592 $(am__cd) $(top_srcdir) && \
593 $(AUTOMAKE) --gnu src/modules/engines/gl_common/Makefile
594.PRECIOUS: Makefile
595Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
596 @case '$?' in \
597 *config.status*) \
598 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
599 *) \
600 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
601 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
602 esac;
603
604$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
605 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
606
607$(top_srcdir)/configure: $(am__configure_deps)
608 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
609$(ACLOCAL_M4): $(am__aclocal_m4_deps)
610 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
611$(am__aclocal_m4_deps):
612
613clean-noinstLTLIBRARIES:
614 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
615 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
616 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
617 test "$$dir" != "$$p" || dir=.; \
618 echo "rm -f \"$${dir}/so_locations\""; \
619 rm -f "$${dir}/so_locations"; \
620 done
621libevas_engine_gl_common.la: $(libevas_engine_gl_common_la_OBJECTS) $(libevas_engine_gl_common_la_DEPENDENCIES)
622 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_gl_common_la_rpath) $(libevas_engine_gl_common_la_OBJECTS) $(libevas_engine_gl_common_la_LIBADD) $(LIBS)
623
624mostlyclean-compile:
625 -rm -f *.$(OBJEXT)
626
627distclean-compile:
628 -rm -f *.tab.c
629
630@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gl_context.Plo@am__quote@
631@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gl_filter.Plo@am__quote@
632@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gl_font.Plo@am__quote@
633@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gl_image.Plo@am__quote@
634@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gl_line.Plo@am__quote@
635@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gl_polygon.Plo@am__quote@
636@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gl_rectangle.Plo@am__quote@
637@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gl_shader.Plo@am__quote@
638@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gl_texture.Plo@am__quote@
639
640.c.o:
641@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
642@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
643@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
644@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
645@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
646@am__fastdepCC_FALSE@ $(COMPILE) -c $<
647
648.c.obj:
649@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
650@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
651@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
652@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
653@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
654@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
655
656.c.lo:
657@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
658@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
659@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
660@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
661@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
662@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
663
664mostlyclean-libtool:
665 -rm -f *.lo
666
667clean-libtool:
668 -rm -rf .libs _libs
669
670ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
671 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
672 unique=`for i in $$list; do \
673 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
674 done | \
675 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
676 END { if (nonempty) { for (i in files) print i; }; }'`; \
677 mkid -fID $$unique
678tags: TAGS
679
680TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
681 $(TAGS_FILES) $(LISP)
682 set x; \
683 here=`pwd`; \
684 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
685 unique=`for i in $$list; do \
686 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
687 done | \
688 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
689 END { if (nonempty) { for (i in files) print i; }; }'`; \
690 shift; \
691 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
692 test -n "$$unique" || unique=$$empty_fix; \
693 if test $$# -gt 0; then \
694 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
695 "$$@" $$unique; \
696 else \
697 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
698 $$unique; \
699 fi; \
700 fi
701ctags: CTAGS
702CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
703 $(TAGS_FILES) $(LISP)
704 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
705 unique=`for i in $$list; do \
706 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
707 done | \
708 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
709 END { if (nonempty) { for (i in files) print i; }; }'`; \
710 test -z "$(CTAGS_ARGS)$$unique" \
711 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
712 $$unique
713
714GTAGS:
715 here=`$(am__cd) $(top_builddir) && pwd` \
716 && $(am__cd) $(top_srcdir) \
717 && gtags -i $(GTAGS_ARGS) "$$here"
718
719distclean-tags:
720 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
721
722distdir: $(DISTFILES)
723 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
724 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
725 list='$(DISTFILES)'; \
726 dist_files=`for file in $$list; do echo $$file; done | \
727 sed -e "s|^$$srcdirstrip/||;t" \
728 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
729 case $$dist_files in \
730 */*) $(MKDIR_P) `echo "$$dist_files" | \
731 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
732 sort -u` ;; \
733 esac; \
734 for file in $$dist_files; do \
735 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
736 if test -d $$d/$$file; then \
737 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
738 if test -d "$(distdir)/$$file"; then \
739 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
740 fi; \
741 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
742 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
743 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
744 fi; \
745 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
746 else \
747 test -f "$(distdir)/$$file" \
748 || cp -p $$d/$$file "$(distdir)/$$file" \
749 || exit 1; \
750 fi; \
751 done
752check-am: all-am
753check: check-am
754all-am: Makefile $(LTLIBRARIES)
755installdirs:
756install: install-am
757install-exec: install-exec-am
758install-data: install-data-am
759uninstall: uninstall-am
760
761install-am: all-am
762 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
763
764installcheck: installcheck-am
765install-strip:
766 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
767 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
768 `test -z '$(STRIP)' || \
769 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
770mostlyclean-generic:
771
772clean-generic:
773
774distclean-generic:
775 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
776 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
777
778maintainer-clean-generic:
779 @echo "This command is intended for maintainers to use"
780 @echo "it deletes files that may require special tools to rebuild."
781 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
782clean: clean-am
783
784clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
785 mostlyclean-am
786
787distclean: distclean-am
788 -rm -rf ./$(DEPDIR)
789 -rm -f Makefile
790distclean-am: clean-am distclean-compile distclean-generic \
791 distclean-tags
792
793dvi: dvi-am
794
795dvi-am:
796
797html: html-am
798
799html-am:
800
801info: info-am
802
803info-am:
804
805install-data-am:
806
807install-dvi: install-dvi-am
808
809install-dvi-am:
810
811install-exec-am:
812
813install-html: install-html-am
814
815install-html-am:
816
817install-info: install-info-am
818
819install-info-am:
820
821install-man:
822
823install-pdf: install-pdf-am
824
825install-pdf-am:
826
827install-ps: install-ps-am
828
829install-ps-am:
830
831installcheck-am:
832
833maintainer-clean: maintainer-clean-am
834 -rm -rf ./$(DEPDIR)
835 -rm -f Makefile
836maintainer-clean-am: distclean-am maintainer-clean-generic
837
838mostlyclean: mostlyclean-am
839
840mostlyclean-am: mostlyclean-compile mostlyclean-generic \
841 mostlyclean-libtool
842
843pdf: pdf-am
844
845pdf-am:
846
847ps: ps-am
848
849ps-am:
850
851uninstall-am:
852
853.MAKE: install-am install-strip
854
855.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
856 clean-libtool clean-noinstLTLIBRARIES ctags distclean \
857 distclean-compile distclean-generic distclean-libtool \
858 distclean-tags distdir dvi dvi-am html html-am info info-am \
859 install install-am install-data install-data-am install-dvi \
860 install-dvi-am install-exec install-exec-am install-html \
861 install-html-am install-info install-info-am install-man \
862 install-pdf install-pdf-am install-ps install-ps-am \
863 install-strip installcheck installcheck-am installdirs \
864 maintainer-clean maintainer-clean-generic mostlyclean \
865 mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
866 pdf pdf-am ps ps-am tags uninstall uninstall-am
867
868
869# Tell versions [3.59,3.63) of GNU make to not export all variables.
870# Otherwise a system limit (for SysV at least) may be exceeded.
871.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/gl_common/evas_gl_common.h b/libraries/evas/src/modules/engines/gl_common/evas_gl_common.h
new file mode 100644
index 0000000..a088748
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/evas_gl_common.h
@@ -0,0 +1,659 @@
1#ifndef EVAS_GL_COMMON_H
2#define EVAS_GL_COMMON_H
3
4#include "evas_common.h"
5#include "evas_private.h"
6#include "config.h"
7
8#include <stdio.h>
9#include <stdlib.h>
10#include <string.h>
11#include <math.h>
12#include <sys/time.h>
13#include <unistd.h>
14#include <Eet.h>
15
16#define GL_GLEXT_PROTOTYPES
17
18#ifdef BUILD_ENGINE_GL_QUARTZ
19# include <OpenGL/gl.h>
20# include <OpenGL/glext.h>
21#else
22# ifdef _EVAS_ENGINE_SDL_H
23# if defined(GLES_VARIETY_S3C6410) || defined(GLES_VARIETY_SGX)
24# include <SDL/SDL_opengles.h>
25# else
26# include <SDL/SDL_opengl.h>
27# endif
28# else
29# if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
30# if defined(GLES_VARIETY_S3C6410)
31# include <GLES2/gl2.h>
32# elif defined(GLES_VARIETY_SGX)
33# include <GLES2/gl2.h>
34# include <GLES2/gl2ext.h>
35# endif
36# else
37# include <GL/gl.h>
38# include <GL/glext.h>
39# endif
40# endif
41#endif
42
43#ifndef GL_TEXTURE_RECTANGLE_NV
44# define GL_TEXTURE_RECTANGLE_NV 0x84F5
45#endif
46#ifndef GL_BGRA
47# define GL_BGRA 0x80E1
48#endif
49
50#ifndef EGL_NO_CONTEXT
51# define EGL_NO_CONTEXT 0
52#endif
53#ifndef EGL_NONE
54# define EGL_NONE 0x3038
55#endif
56#ifndef EGL_TRUE
57# define EGL_TRUE 1
58#endif
59#ifndef EGL_FALSE
60# define EGL_FALSE 0
61#endif
62
63#ifndef EGL_MAP_GL_TEXTURE_2D_SEC
64# define EGL_MAP_GL_TEXTURE_2D_SEC 0x3201
65#endif
66#ifndef EGL_MAP_GL_TEXTURE_HEIGHT_SEC
67# define EGL_MAP_GL_TEXTURE_HEIGHT_SEC 0x3202
68#endif
69#ifndef EGL_MAP_GL_TEXTURE_WIDTH_SEC
70# define EGL_MAP_GL_TEXTURE_WIDTH_SEC 0x3203
71#endif
72#ifndef EGL_MAP_GL_TEXTURE_FORMAT_SEC
73# define EGL_MAP_GL_TEXTURE_FORMAT_SEC 0x3204
74#endif
75#ifndef EGL_MAP_GL_TEXTURE_RGB_SEC
76# define EGL_MAP_GL_TEXTURE_RGB_SEC 0x3205
77#endif
78#ifndef EGL_MAP_GL_TEXTURE_RGBA_SEC
79# define EGL_MAP_GL_TEXTURE_RGBA_SEC 0x3206
80#endif
81#ifndef EGL_MAP_GL_TEXTURE_BGRA_SEC
82# define EGL_MAP_GL_TEXTURE_BGRA_SEC 0x3207
83#endif
84#ifndef EGL_MAP_GL_TEXTURE_LUMINANCE_SEC
85# define EGL_MAP_GL_TEXTURE_LUMINANCE_SEC 0x3208
86#endif
87#ifndef EGL_MAP_GL_TEXTURE_LUMINANCE_ALPHA_SEC
88# define EGL_MAP_GL_TEXTURE_LUMINANCE_ALPHA_SEC 0x3209
89#endif
90#ifndef EGL_MAP_GL_TEXTURE_PIXEL_TYPE_SEC
91# define EGL_MAP_GL_TEXTURE_PIXEL_TYPE_SEC 0x320a
92#endif
93#ifndef EGL_MAP_GL_TEXTURE_UNSIGNED_BYTE_SEC
94# define EGL_MAP_GL_TEXTURE_UNSIGNED_BYTE_SEC 0x320b
95#endif
96#ifndef EGL_MAP_GL_TEXTURE_STRIDE_IN_BYTES_SEC
97# define EGL_MAP_GL_TEXTURE_STRIDE_IN_BYTES_SEC 0x320c
98#endif
99#ifndef GL_PROGRAM_BINARY_LENGTH
100# define GL_PROGRAM_BINARY_LENGTH 0x8741
101#endif
102#ifndef GL_NUM_PROGRAM_BINARY_FORMATS
103# define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
104#endif
105#ifndef GL_PROGRAM_BINARY_FORMATS
106# define GL_PROGRAM_BINARY_FORMATS 0x87FF
107#endif
108#ifndef GL_PROGRAM_BINARY_RETRIEVABLE_HINT
109# define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
110#endif
111
112#define SHAD_VERTEX 0
113#define SHAD_COLOR 1
114#define SHAD_TEXUV 2
115#define SHAD_TEXUV2 3
116#define SHAD_TEXUV3 4
117#define SHAD_TEXM 5
118
119typedef struct _Evas_GL_Program Evas_GL_Program;
120typedef struct _Evas_GL_Program_Source Evas_GL_Program_Source;
121typedef struct _Evas_GL_Shared Evas_GL_Shared;
122typedef struct _Evas_Engine_GL_Context Evas_Engine_GL_Context;
123typedef struct _Evas_GL_Texture_Pool Evas_GL_Texture_Pool;
124typedef struct _Evas_GL_Texture Evas_GL_Texture;
125typedef struct _Evas_GL_Image Evas_GL_Image;
126typedef struct _Evas_GL_Font_Texture Evas_GL_Font_Texture;
127typedef struct _Evas_GL_Polygon Evas_GL_Polygon;
128typedef struct _Evas_GL_Polygon_Point Evas_GL_Polygon_Point;
129
130typedef enum {
131 SHADER_RECT,
132 SHADER_FONT,
133 SHADER_IMG,
134 SHADER_IMG_NOMUL,
135 SHADER_IMG_BGRA,
136 SHADER_IMG_BGRA_NOMUL,
137 SHADER_IMG_MASK,
138 SHADER_YUV,
139 SHADER_YUV_NOMUL,
140 SHADER_YUY2,
141 SHADER_YUY2_NOMUL,
142 SHADER_NV12,
143 SHADER_NV12_NOMUL,
144 SHADER_TEX,
145 SHADER_TEX_NOMUL,
146 SHADER_FILTER_INVERT,
147 SHADER_FILTER_INVERT_NOMUL,
148 SHADER_FILTER_INVERT_BGRA,
149 SHADER_FILTER_INVERT_BGRA_NOMUL,
150 SHADER_FILTER_GREYSCALE,
151 SHADER_FILTER_GREYSCALE_NOMUL,
152 SHADER_FILTER_GREYSCALE_BGRA,
153 SHADER_FILTER_GREYSCALE_BGRA_NOMUL,
154 SHADER_FILTER_SEPIA,
155 SHADER_FILTER_SEPIA_NOMUL,
156 SHADER_FILTER_SEPIA_BGRA,
157 SHADER_FILTER_SEPIA_BGRA_NOMUL,
158 /* SHADER_FILTER_BLUR, */
159 /* SHADER_FILTER_BLUR_NOMUL, */
160 /* SHADER_FILTER_BLUR_BGRA, */
161 /* SHADER_FILTER_BLUR_BGRA_NOMUL, */
162 SHADER_LAST
163} Evas_GL_Shader;
164
165struct _Evas_GL_Program
166{
167 GLuint vert, frag, prog;
168
169 int tex_count;
170};
171
172struct _Evas_GL_Program_Source
173{
174 const char *src;
175 const unsigned int *bin;
176 int bin_size;
177};
178
179struct _Evas_GL_Shared
180{
181 Eina_List *images;
182
183 int images_size;
184
185 struct {
186 GLint max_texture_units;
187 GLint max_texture_size;
188 GLint max_vertex_elements;
189 GLfloat anisotropic;
190 Eina_Bool rgb : 1;
191 Eina_Bool bgra : 1;
192 Eina_Bool tex_npo2 : 1;
193 Eina_Bool tex_rect : 1;
194 Eina_Bool sec_image_map : 1;
195 Eina_Bool bin_program : 1;
196 // tuning params - per gpu/cpu combo?
197#define MAX_CUTOUT 512
198#define DEF_CUTOUT 512
199
200// FIXME bug with pipes > 1 right now, should default to 32
201#define MAX_PIPES 128
202#define DEF_PIPES 32
203#define DEF_PIPES_SGX_540 32
204#define DEF_PIPES_TEGRA_2 1
205
206#define MIN_ATLAS_ALLOC 16
207#define MAX_ATLAS_ALLOC 1024
208#define DEF_ATLAS_ALLOC 1024
209
210#define MIN_ATLAS_ALLOC_ALPHA 16
211#define MAX_ATLAS_ALLOC_ALPHA 4096
212#define DEF_ATLAS_ALLOC_ALPHA 4096
213
214#define MAX_ATLAS_W 512
215#define DEF_ATLAS_W 512
216
217#define MAX_ATLAS_H 512
218#define DEF_ATLAS_H 512
219
220#define MIN_ATLAS_SLOT 16
221#define MAX_ATLAS_SLOT 512
222#define DEF_ATLAS_SLOT 16
223
224 struct {
225 struct {
226 int max;
227 } cutout;
228 struct {
229 int max;
230 } pipes;
231 struct {
232 int max_alloc_size;
233 int max_alloc_alpha_size;
234 int max_w;
235 int max_h;
236 int slot_size;
237 } atlas;
238 } tune;
239 } info;
240
241 struct {
242 Eina_List *whole;
243 Eina_List *atlas[33][3];
244 } tex;
245
246 Eina_Hash *native_pm_hash;
247 Eina_Hash *native_tex_hash;
248
249 Evas_GL_Program shader[SHADER_LAST];
250
251 int references;
252 int w, h;
253 int rot;
254 int mflip;
255 // persp map
256 int foc, z0, px, py;
257 int ax, ay;
258};
259
260#define RTYPE_RECT 1
261#define RTYPE_IMAGE 2
262#define RTYPE_FONT 3
263#define RTYPE_YUV 4
264#define RTYPE_MAP 5 /* need to merge with image */
265#define RTYPE_IMASK 6
266#define RTYPE_YUY2 7
267#define RTYPE_NV12 8
268
269struct _Evas_Engine_GL_Context
270{
271 int references;
272 int w, h;
273 int rot;
274 int foc, z0, px, py;
275 RGBA_Draw_Context *dc;
276
277 Evas_GL_Shared *shared;
278
279 int flushnum;
280 struct {
281 int top_pipe;
282 struct {
283 GLuint cur_prog;
284 GLuint cur_tex, cur_texu, cur_texv;
285 GLuint cur_texm, cur_texmu, cur_texmv;
286 int render_op;
287 int cx, cy, cw, ch;
288 int smooth;
289 int blend;
290 int clip;
291 } current;
292 } state;
293
294 struct {
295 struct {
296 int x, y, w, h;
297 int type;
298 } region;
299 struct {
300 int x, y, w, h;
301 Eina_Bool active : 1;
302 } clip;
303 struct {
304 Evas_GL_Image *surface;
305 GLuint cur_prog;
306 GLuint cur_tex, cur_texu, cur_texv, cur_texm;
307 void *cur_tex_dyn, *cur_texu_dyn, *cur_texv_dyn;
308 int render_op;
309 int cx, cy, cw, ch;
310 int smooth;
311 int blend;
312 int clip;
313 } shader;
314 struct {
315 int num, alloc;
316 GLshort *vertex;
317 GLubyte *color;
318 GLfloat *texuv;
319 GLfloat *texuv2;
320 GLfloat *texuv3;
321 GLfloat *texm;
322 Eina_Bool line: 1;
323 Eina_Bool use_vertex : 1;
324 Eina_Bool use_color : 1;
325 Eina_Bool use_texuv : 1;
326 Eina_Bool use_texuv2 : 1;
327 Eina_Bool use_texuv3 : 1;
328 Eina_Bool use_texm : 1;
329 Evas_GL_Image *im;
330 } array;
331 } pipe[MAX_PIPES];
332
333 struct {
334 Eina_Bool size : 1;
335 } change;
336
337 Eina_Bool havestuff : 1;
338
339 Evas_GL_Image *def_surface;
340
341 /* If this is set: Force drawing with a particular filter */
342 GLuint filter_prog;
343
344#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
345// FIXME: hack. expose egl display to gl core for egl image sec extn.
346 void *egldisp;
347#endif
348};
349
350struct _Evas_GL_Texture_Pool
351{
352 Evas_Engine_GL_Context *gc;
353 GLuint texture, fb;
354 GLuint intformat, format, dataformat;
355 int w, h;
356 int references;
357 int slot, fslot;
358 struct {
359 void *img;
360 unsigned int *data;
361 int w, h;
362 int stride;
363 int checked_out;
364 } dyn;
365 Eina_List *allocations;
366 Eina_Bool whole : 1;
367 Eina_Bool render : 1;
368 Eina_Bool native : 1;
369 Eina_Bool dynamic : 1;
370};
371
372struct _Evas_GL_Texture
373{
374 Evas_Engine_GL_Context *gc;
375 Evas_GL_Image *im;
376 Evas_GL_Texture_Pool *pt, *ptu, *ptv, *ptuv;
377 int x, y, w, h;
378 double sx1, sy1, sx2, sy2;
379 int references;
380
381 struct
382 {
383 Evas_GL_Texture_Pool *pt[2], *ptuv[2];
384 int source;
385 } double_buffer;
386
387 Eina_Bool alpha : 1;
388 Eina_Bool dyn : 1;
389};
390
391struct _Evas_GL_Image
392{
393 Evas_Engine_GL_Context *gc;
394 RGBA_Image *im;
395 Evas_GL_Texture *tex;
396 RGBA_Image_Loadopts load_opts;
397 int references;
398 // if im->im == NULL, it's a render-surface so these here are used
399 int w, h;
400 struct {
401 int space;
402 void *data;
403 unsigned char no_free : 1;
404 } cs;
405
406 struct {
407 void *data;
408 struct {
409 void (*bind) (void *data, void *image);
410 void (*unbind) (void *data, void *image);
411 void (*free) (void *data, void *image);
412 void *data;
413 } func;
414 int yinvert;
415 int target;
416 int mipmap;
417 unsigned char loose : 1;
418 } native;
419
420 int scale_hint, content_hint;
421 int csize;
422
423 Eina_List *filtered;
424
425 unsigned char dirty : 1;
426 unsigned char cached : 1;
427 unsigned char alpha : 1;
428 unsigned char tex_only : 1;
429};
430
431struct _Evas_GL_Font_Texture
432{
433 Evas_GL_Texture *tex;
434};
435
436struct _Evas_GL_Polygon
437{
438 Eina_List *points;
439 Eina_Bool changed : 1;
440};
441
442struct _Evas_GL_Polygon_Point
443{
444 int x, y;
445};
446
447#if 0
448extern Evas_GL_Program_Source shader_rect_frag_src;
449extern Evas_GL_Program_Source shader_rect_vert_src;
450extern Evas_GL_Program_Source shader_font_frag_src;
451extern Evas_GL_Program_Source shader_font_vert_src;
452
453extern Evas_GL_Program_Source shader_img_frag_src;
454extern Evas_GL_Program_Source shader_img_vert_src;
455extern Evas_GL_Program_Source shader_img_nomul_frag_src;
456extern Evas_GL_Program_Source shader_img_nomul_vert_src;
457extern Evas_GL_Program_Source shader_img_bgra_frag_src;
458extern Evas_GL_Program_Source shader_img_bgra_vert_src;
459extern Evas_GL_Program_Source shader_img_bgra_nomul_frag_src;
460extern Evas_GL_Program_Source shader_img_bgra_nomul_vert_src;
461extern Evas_GL_Program_Source shader_img_mask_frag_src;
462extern Evas_GL_Program_Source shader_img_mask_vert_src;
463
464extern Evas_GL_Program_Source shader_yuv_frag_src;
465extern Evas_GL_Program_Source shader_yuv_vert_src;
466extern Evas_GL_Program_Source shader_yuv_nomul_frag_src;
467extern Evas_GL_Program_Source shader_yuv_nomul_vert_src;
468
469extern Evas_GL_Program_Source shader_yuy2_frag_src;
470extern Evas_GL_Program_Source shader_yuy2_vert_src;
471extern Evas_GL_Program_Source shader_yuy2_nomul_frag_src;
472extern Evas_GL_Program_Source shader_yuy2_nomul_vert_src;
473
474extern Evas_GL_Program_Source shader_tex_frag_src;
475extern Evas_GL_Program_Source shader_tex_vert_src;
476extern Evas_GL_Program_Source shader_tex_nomul_frag_src;
477extern Evas_GL_Program_Source shader_tex_nomul_vert_src;
478
479extern Evas_GL_Program_Source shader_filter_invert_frag_src;
480extern Evas_GL_Program_Source shader_filter_invert_nomul_frag_src;
481extern Evas_GL_Program_Source shader_filter_invert_bgra_frag_src;
482extern Evas_GL_Program_Source shader_filter_invert_bgra_nomul_frag_src;
483extern Evas_GL_Program_Source shader_filter_sepia_frag_src;
484extern Evas_GL_Program_Source shader_filter_sepia_nomul_frag_src;
485extern Evas_GL_Program_Source shader_filter_sepia_bgra_frag_src;
486extern Evas_GL_Program_Source shader_filter_sepia_bgra_nomul_frag_src;
487extern Evas_GL_Program_Source shader_filter_greyscale_frag_src;
488extern Evas_GL_Program_Source shader_filter_greyscale_nomul_frag_src;
489extern Evas_GL_Program_Source shader_filter_greyscale_bgra_frag_src;
490extern Evas_GL_Program_Source shader_filter_greyscale_bgra_nomul_frag_src;
491/* blur (annoyingly) needs (aka is faster with) a vertex shader */
492extern Evas_GL_Program_Source shader_filter_blur_vert_src;
493extern Evas_GL_Program_Source shader_filter_blur_frag_src;
494extern Evas_GL_Program_Source shader_filter_blur_nomul_frag_src;
495extern Evas_GL_Program_Source shader_filter_blur_bgra_frag_src;
496extern Evas_GL_Program_Source shader_filter_blur_bgra_nomul_frag_src;
497#endif
498
499void glerr(int err, const char *file, const char *func, int line, const char *op);
500
501Evas_Engine_GL_Context *evas_gl_common_context_new(void);
502void evas_gl_common_context_free(Evas_Engine_GL_Context *gc);
503void evas_gl_common_context_use(Evas_Engine_GL_Context *gc);
504void evas_gl_common_context_newframe(Evas_Engine_GL_Context *gc);
505void evas_gl_common_context_resize(Evas_Engine_GL_Context *gc, int w, int h, int rot);
506void evas_gl_common_context_target_surface_set(Evas_Engine_GL_Context *gc, Evas_GL_Image *surface);
507
508void evas_gl_common_context_line_push(Evas_Engine_GL_Context *gc,
509 int x1, int y1, int x2, int y2,
510 int clip, int cx, int cy, int cw, int ch,
511 int r, int g, int b, int a);
512void evas_gl_common_context_rectangle_push(Evas_Engine_GL_Context *gc,
513 int x, int y, int w, int h,
514 int r, int g, int b, int a);
515void evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
516 Evas_GL_Texture *tex,
517 double sx, double sy, double sw, double sh,
518 int x, int y, int w, int h,
519 int r, int g, int b, int a,
520 Eina_Bool smooth, Eina_Bool tex_only);
521void evas_gl_common_context_image_mask_push(Evas_Engine_GL_Context *gc,
522 Evas_GL_Texture *tex,
523 Evas_GL_Texture *texm,
524 double sx, double sy, double sw, double sh,
525 double sxm, double sym, double swm, double shm,
526 int x, int y, int w, int h,
527 int r, int g, int b, int a,
528 Eina_Bool smooth);
529
530
531void evas_gl_common_context_font_push(Evas_Engine_GL_Context *gc,
532 Evas_GL_Texture *tex,
533 double sx, double sy, double sw, double sh,
534 int x, int y, int w, int h,
535 int r, int g, int b, int a);
536void evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
537 Evas_GL_Texture *tex,
538 double sx, double sy, double sw, double sh,
539 int x, int y, int w, int h,
540 int r, int g, int b, int a,
541 Eina_Bool smooth);
542void evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
543 Evas_GL_Texture *tex,
544 double sx, double sy, double sw, double sh,
545 int x, int y, int w, int h,
546 int r, int g, int b, int a,
547 Eina_Bool smooth);
548void evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
549 Evas_GL_Texture *tex,
550 double sx, double sy, double sw, double sh,
551 int x, int y, int w, int h,
552 int r, int g, int b, int a,
553 Eina_Bool smooth);
554void evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
555 Evas_GL_Texture *tex,
556 int npoints,
557 RGBA_Map_Point *p,
558 int clip, int cx, int cy, int cw, int ch,
559 int r, int g, int b, int a,
560 Eina_Bool smooth,
561 Eina_Bool tex_only,
562 Evas_Colorspace cspace);
563void evas_gl_common_context_flush(Evas_Engine_GL_Context *gc);
564
565int evas_gl_common_shader_program_init(Evas_GL_Shared *shared);
566void evas_gl_common_shader_program_init_done(void);
567void evas_gl_common_shader_program_shutdown(Evas_GL_Program *p);
568
569void evas_gl_common_rect_draw(Evas_Engine_GL_Context *gc, int x, int y, int w, int h);
570
571void evas_gl_texture_pool_empty(Evas_GL_Texture_Pool *pt);
572Evas_GL_Texture *evas_gl_common_texture_new(Evas_Engine_GL_Context *gc, RGBA_Image *im);
573Evas_GL_Texture *evas_gl_common_texture_native_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, Evas_GL_Image *im);
574Evas_GL_Texture *evas_gl_common_texture_render_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha);
575Evas_GL_Texture *evas_gl_common_texture_dynamic_new(Evas_Engine_GL_Context *gc, Evas_GL_Image *im);
576void evas_gl_common_texture_update(Evas_GL_Texture *tex, RGBA_Image *im);
577void evas_gl_common_texture_free(Evas_GL_Texture *tex);
578Evas_GL_Texture *evas_gl_common_texture_alpha_new(Evas_Engine_GL_Context *gc, DATA8 *pixels, unsigned int w, unsigned int h, int fh);
579void evas_gl_common_texture_alpha_update(Evas_GL_Texture *tex, DATA8 *pixels, unsigned int w, unsigned int h, int fh);
580Evas_GL_Texture *evas_gl_common_texture_yuv_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h);
581void evas_gl_common_texture_yuv_update(Evas_GL_Texture *tex, DATA8 **rows, unsigned int w, unsigned int h);
582Evas_GL_Texture *evas_gl_common_texture_yuy2_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h);
583void evas_gl_common_texture_yuy2_update(Evas_GL_Texture *tex, DATA8 **rows, unsigned int w, unsigned int h);
584Evas_GL_Texture *evas_gl_common_texture_nv12_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h);
585void evas_gl_common_texture_nv12_update(Evas_GL_Texture *tex, DATA8 **row, unsigned int w, unsigned int h);
586Evas_GL_Texture *evas_gl_common_texture_nv12tiled_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h);
587void evas_gl_common_texture_nv12tiled_update(Evas_GL_Texture *tex, DATA8 **row, unsigned int w, unsigned int h);
588
589void evas_gl_common_image_all_unload(Evas_Engine_GL_Context *gc);
590
591void evas_gl_common_image_ref(Evas_GL_Image *im);
592void evas_gl_common_image_unref(Evas_GL_Image *im);
593Evas_GL_Image *evas_gl_common_image_load(Evas_Engine_GL_Context *gc, const char *file, const char *key, Evas_Image_Load_Opts *lo, int *error);
594Evas_GL_Image *evas_gl_common_image_new_from_data(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, DATA32 *data, int alpha, int cspace);
595Evas_GL_Image *evas_gl_common_image_new_from_copied_data(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, DATA32 *data, int alpha, int cspace);
596Evas_GL_Image *evas_gl_common_image_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, int cspace);
597Evas_GL_Image *evas_gl_common_image_alpha_set(Evas_GL_Image *im, int alpha);
598void evas_gl_common_image_native_enable(Evas_GL_Image *im);
599void evas_gl_common_image_native_disable(Evas_GL_Image *im);
600void evas_gl_common_image_scale_hint_set(Evas_GL_Image *im, int hint);
601void evas_gl_common_image_content_hint_set(Evas_GL_Image *im, int hint);
602void evas_gl_common_image_cache_flush(Evas_Engine_GL_Context *gc);
603void evas_gl_common_image_free(Evas_GL_Image *im);
604Evas_GL_Image *evas_gl_common_image_surface_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha);
605void evas_gl_common_image_dirty(Evas_GL_Image *im, unsigned int x, unsigned int y, unsigned int w, unsigned int h);
606void evas_gl_common_image_update(Evas_Engine_GL_Context *gc, Evas_GL_Image *im);
607void evas_gl_common_image_map_draw(Evas_Engine_GL_Context *gc, Evas_GL_Image *im, int npoints, RGBA_Map_Point *p, int smooth, int level);
608void evas_gl_common_image_draw(Evas_Engine_GL_Context *gc, Evas_GL_Image *im, int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, int smooth);
609
610void *evas_gl_font_texture_new(void *gc, RGBA_Font_Glyph *fg);
611void evas_gl_font_texture_free(void *);
612void evas_gl_font_texture_draw(void *gc, void *surface, void *dc, RGBA_Font_Glyph *fg, int x, int y);
613
614Evas_GL_Polygon *evas_gl_common_poly_point_add(Evas_GL_Polygon *poly, int x, int y);
615Evas_GL_Polygon *evas_gl_common_poly_points_clear(Evas_GL_Polygon *poly);
616void evas_gl_common_poly_draw(Evas_Engine_GL_Context *gc, Evas_GL_Polygon *poly, int x, int y);
617
618void evas_gl_common_line_draw(Evas_Engine_GL_Context *gc, int x1, int y1, int x2, int y2);
619
620#if 0 // filtering disabled
621void evas_gl_common_filter_draw(Evas_Engine_GL_Context *context, Evas_GL_Image *im, Evas_Filter_Info *filter);
622Filtered_Image *evas_gl_common_image_filtered_get(Evas_GL_Image *im, uint8_t *key, size_t keylen);
623Filtered_Image *evas_gl_common_image_filtered_save(Evas_GL_Image *im, Evas_GL_Image *fimage, uint8_t *key, size_t keylen);
624void evas_gl_common_image_filtered_free(Evas_GL_Image *im, Filtered_Image *);
625#endif
626
627extern void (*glsym_glGenFramebuffers) (GLsizei a, GLuint *b);
628extern void (*glsym_glBindFramebuffer) (GLenum a, GLuint b);
629extern void (*glsym_glFramebufferTexture2D) (GLenum a, GLenum b, GLenum c, GLuint d, GLint e);
630extern void (*glsym_glDeleteFramebuffers) (GLsizei a, const GLuint *b);
631extern void (*glsym_glGetProgramBinary) (GLuint a, GLsizei b, GLsizei *c, GLenum *d, void *e);
632extern void (*glsym_glProgramBinary) (GLuint a, GLenum b, const void *c, GLint d);
633extern void (*glsym_glProgramParameteri) (GLuint a, GLuint b, GLint d);
634
635#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
636extern void *(*secsym_eglCreateImage) (void *a, void *b, GLenum c, void *d, const int *e);
637extern unsigned int (*secsym_eglDestroyImage) (void *a, void *b);
638extern void (*secsym_glEGLImageTargetTexture2DOES) (int a, void *b);
639extern void *(*secsym_eglMapImageSEC) (void *a, void *b);
640extern unsigned int (*secsym_eglUnmapImageSEC) (void *a, void *b);
641extern unsigned int (*secsym_eglGetImageAttribSEC) (void *a, void *b, int c, int *d);
642#endif
643
644//#define GL_ERRORS 1
645
646#ifdef GL_ERRORS
647# define GLERR(fn, fl, ln, op) \
648 { \
649 int __gl_err = glGetError(); \
650 if (__gl_err != GL_NO_ERROR) glerr(__gl_err, fl, fn, ln, op); \
651 }
652#else
653# define GLERR(fn, fl, ln, op)
654#endif
655
656Eina_Bool evas_gl_common_module_open(void);
657void evas_gl_common_module_close(void);
658
659#endif
diff --git a/libraries/evas/src/modules/engines/gl_common/evas_gl_context.c b/libraries/evas/src/modules/engines/gl_common/evas_gl_context.c
new file mode 100644
index 0000000..62e72bd
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/evas_gl_context.c
@@ -0,0 +1,2723 @@
1#include "evas_gl_private.h"
2
3#ifdef HAVE_DLSYM
4# include <dlfcn.h> /* dlopen,dlclose,etc */
5#else
6# error gl_common should not get compiled if dlsym is not found on the system!
7#endif
8
9#define PRG_INVALID 0xffffffff
10#define GLPIPES 1
11
12static int sym_done = 0;
13int _evas_engine_GL_common_log_dom = -1;
14
15typedef void (*glsym_func_void) ();
16
17void (*glsym_glGenFramebuffers) (GLsizei a, GLuint *b) = NULL;
18void (*glsym_glBindFramebuffer) (GLenum a, GLuint b) = NULL;
19void (*glsym_glFramebufferTexture2D) (GLenum a, GLenum b, GLenum c, GLuint d, GLint e) = NULL;
20void (*glsym_glDeleteFramebuffers) (GLsizei a, const GLuint *b) = NULL;
21void (*glsym_glGetProgramBinary) (GLuint a, GLsizei b, GLsizei *c, GLenum *d, void *e) = NULL;
22void (*glsym_glProgramBinary) (GLuint a, GLenum b, const void *c, GLint d) = NULL;
23void (*glsym_glProgramParameteri) (GLuint a, GLuint b, GLint d) = NULL;
24
25#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
26// just used for finding symbols :)
27typedef void (*_eng_fn) (void);
28
29typedef _eng_fn (*secsym_func_eng_fn) ();
30typedef unsigned int (*secsym_func_uint) ();
31typedef void *(*secsym_func_void_ptr) ();
32
33static _eng_fn (*secsym_eglGetProcAddress) (const char *a) = NULL;
34
35void *(*secsym_eglCreateImage) (void *a, void *b, GLenum c, void *d, const int *e) = NULL;
36unsigned int (*secsym_eglDestroyImage) (void *a, void *b) = NULL;
37void (*secsym_glEGLImageTargetTexture2DOES) (int a, void *b) = NULL;
38void *(*secsym_eglMapImageSEC) (void *a, void *b) = NULL;
39unsigned int (*secsym_eglUnmapImageSEC) (void *a, void *b) = NULL;
40unsigned int (*secsym_eglGetImageAttribSEC) (void *a, void *b, int c, int *d) = NULL;
41#endif
42
43static int dbgflushnum = -1;
44
45static void
46sym_missing(void)
47{
48 ERR("GL symbols missing!");
49}
50
51static void
52gl_symbols(void)
53{
54 if (sym_done) return;
55 sym_done = 1;
56
57 /* FIXME: If using the SDL engine, we should use SDL_GL_GetProcAddress
58 * instead of dlsym
59 * if (!dst) dst = (typ)SDL_GL_GetProcAddress(sym)
60 */
61#define FINDSYM(dst, sym, typ) if (!dst) dst = (typ)dlsym(RTLD_DEFAULT, sym)
62#define FALLBAK(dst, typ) if (!dst) dst = (typ)sym_missing;
63
64 FINDSYM(glsym_glGenFramebuffers, "glGenFramebuffers", glsym_func_void);
65 FINDSYM(glsym_glGenFramebuffers, "glGenFramebuffersEXT", glsym_func_void);
66 FINDSYM(glsym_glGenFramebuffers, "glGenFramebuffersARB", glsym_func_void);
67 FALLBAK(glsym_glGenFramebuffers, glsym_func_void);
68
69 FINDSYM(glsym_glBindFramebuffer, "glBindFramebuffer", glsym_func_void);
70 FINDSYM(glsym_glBindFramebuffer, "glBindFramebufferEXT", glsym_func_void);
71 FINDSYM(glsym_glBindFramebuffer, "glBindFramebufferARB", glsym_func_void);
72 FALLBAK(glsym_glBindFramebuffer, glsym_func_void);
73
74 FINDSYM(glsym_glFramebufferTexture2D, "glFramebufferTexture2D", glsym_func_void);
75 FINDSYM(glsym_glFramebufferTexture2D, "glFramebufferTexture2DEXT", glsym_func_void);
76 FINDSYM(glsym_glFramebufferTexture2D, "glFramebufferTexture2DARB", glsym_func_void);
77 FALLBAK(glsym_glFramebufferTexture2D, glsym_func_void);
78
79 FINDSYM(glsym_glDeleteFramebuffers, "glDeleteFramebuffers", glsym_func_void);
80 FINDSYM(glsym_glDeleteFramebuffers, "glDeleteFramebuffersEXT", glsym_func_void);
81 FINDSYM(glsym_glDeleteFramebuffers, "glDeleteFramebuffersARB", glsym_func_void);
82 FALLBAK(glsym_glDeleteFramebuffers, glsym_func_void);
83
84 FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinary", glsym_func_void);
85 FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryEXT", glsym_func_void);
86 FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryARB", glsym_func_void);
87 FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryOES", glsym_func_void);
88
89 FINDSYM(glsym_glProgramBinary, "glProgramBinary", glsym_func_void);
90 FINDSYM(glsym_glProgramBinary, "glProgramBinaryEXT", glsym_func_void);
91 FINDSYM(glsym_glProgramBinary, "glProgramBinaryARB", glsym_func_void);
92
93 FINDSYM(glsym_glProgramParameteri, "glProgramParameteri", glsym_func_void);
94 FINDSYM(glsym_glProgramParameteri, "glProgramParameteriEXT", glsym_func_void);
95 FINDSYM(glsym_glProgramParameteri, "glProgramParameteriARB", glsym_func_void);
96
97#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
98#undef FINDSYM
99#define FINDSYM(dst, sym, typ) \
100 if ((!dst) && (secsym_eglGetProcAddress)) dst = (typ)secsym_eglGetProcAddress(sym); \
101 if (!dst) dst = (typ)dlsym(RTLD_DEFAULT, sym)
102// yes - gl core looking for egl stuff. i know it's odd. a reverse-layer thing
103// but it will work as the egl/glx layer calls gl core common stuff and thus
104// these symbols will work. making the glx/egl + x11 layer do this kind-of is
105// wrong as this is not x11 (output) layer specific like the native surface
106// stuff. this is generic zero-copy textures for gl
107
108 FINDSYM(secsym_eglGetProcAddress, "eglGetProcAddress", secsym_func_eng_fn);
109 FINDSYM(secsym_eglGetProcAddress, "eglGetProcAddressEXT", secsym_func_eng_fn);
110 FINDSYM(secsym_eglGetProcAddress, "eglGetProcAddressARB", secsym_func_eng_fn);
111 FINDSYM(secsym_eglGetProcAddress, "eglGetProcAddressKHR", secsym_func_eng_fn);
112
113 FINDSYM(secsym_eglCreateImage, "eglCreateImage", secsym_func_void_ptr);
114 FINDSYM(secsym_eglCreateImage, "eglCreateImageEXT", secsym_func_void_ptr);
115 FINDSYM(secsym_eglCreateImage, "eglCreateImageARB", secsym_func_void_ptr);
116 FINDSYM(secsym_eglCreateImage, "eglCreateImageKHR", secsym_func_void_ptr);
117
118 FINDSYM(secsym_eglDestroyImage, "eglDestroyImage", secsym_func_uint);
119 FINDSYM(secsym_eglDestroyImage, "eglDestroyImageEXT", secsym_func_uint);
120 FINDSYM(secsym_eglDestroyImage, "eglDestroyImageARB", secsym_func_uint);
121 FINDSYM(secsym_eglDestroyImage, "eglDestroyImageKHR", secsym_func_uint);
122
123 FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinary", glsym_func_void);
124 FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryEXT", glsym_func_void);
125 FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryARB", glsym_func_void);
126 FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryOES", glsym_func_void);
127 FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryKHR", glsym_func_void);
128
129 FINDSYM(glsym_glProgramBinary, "glProgramBinary", glsym_func_void);
130 FINDSYM(glsym_glProgramBinary, "glProgramBinaryEXT", glsym_func_void);
131 FINDSYM(glsym_glProgramBinary, "glProgramBinaryARB", glsym_func_void);
132 FINDSYM(glsym_glProgramBinary, "glProgramBinaryOES", glsym_func_void);
133 FINDSYM(glsym_glProgramBinary, "glProgramBinaryKHR", glsym_func_void);
134
135 FINDSYM(glsym_glProgramParameteri, "glProgramParameteri", glsym_func_void);
136 FINDSYM(glsym_glProgramParameteri, "glProgramParameteriEXT", glsym_func_void);
137 FINDSYM(glsym_glProgramParameteri, "glProgramParameteriARB", glsym_func_void);
138 FINDSYM(glsym_glProgramParameteri, "glProgramParameteriOES", glsym_func_void);
139 FINDSYM(glsym_glProgramParameteri, "glProgramParameteriKHR", glsym_func_void);
140
141 FINDSYM(secsym_glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES", glsym_func_void);
142
143 FINDSYM(secsym_eglMapImageSEC, "eglMapImageSEC", secsym_func_void_ptr);
144
145 FINDSYM(secsym_eglUnmapImageSEC, "eglUnmapImageSEC", secsym_func_uint);
146
147 FINDSYM(secsym_eglGetImageAttribSEC, "eglGetImageAttribSEC", secsym_func_uint);
148#endif
149}
150
151static void shader_array_flush(Evas_Engine_GL_Context *gc);
152
153static Evas_Engine_GL_Context *_evas_gl_common_context = NULL;
154static Evas_GL_Shared *shared = NULL;
155
156void
157glerr(int err, const char *file, const char *func, int line, const char *op)
158{
159 const char *errmsg;
160 char buf[32];
161
162 switch (err)
163 {
164 case GL_INVALID_ENUM:
165 errmsg = "GL_INVALID_ENUM";
166 break;
167 case GL_INVALID_VALUE:
168 errmsg = "GL_INVALID_VALUE";
169 break;
170 case GL_INVALID_OPERATION:
171 errmsg = "GL_INVALID_OPERATION";
172 break;
173 case GL_OUT_OF_MEMORY:
174 errmsg = "GL_OUT_OF_MEMORY";
175 break;
176 default:
177 snprintf(buf, sizeof(buf), "%#x", err);
178 errmsg = buf;
179 }
180
181 eina_log_print(_evas_engine_GL_common_log_dom, EINA_LOG_LEVEL_ERR,
182 file, func, line, "%s: %s", op, errmsg);
183}
184
185static void
186matrix_ortho(GLfloat *m,
187 GLfloat l, GLfloat r,
188 GLfloat t, GLfloat b,
189 GLfloat near, GLfloat far,
190 int rot, int vw, int vh,
191 int foc, GLfloat orth)
192{
193 GLfloat rotf;
194 GLfloat cosv, sinv;
195 GLfloat tx, ty;
196
197 rotf = (((rot / 90) & 0x3) * M_PI) / 2.0;
198
199 tx = -0.5 * (1.0 - orth);
200 ty = -0.5 * (1.0 - orth);
201
202 if (rot == 90)
203 {
204 tx += -(vw * 1.0);
205 ty += -(vh * 0.0);
206 }
207 if (rot == 180)
208 {
209 tx += -(vw * 1.0);
210 ty += -(vh * 1.0);
211 }
212 if (rot == 270)
213 {
214 tx += -(vw * 0.0);
215 ty += -(vh * 1.0);
216 }
217
218 cosv = cos(rotf);
219 sinv = sin(rotf);
220
221 m[0] = (2.0 / (r - l)) * ( cosv);
222 m[1] = (2.0 / (r - l)) * ( sinv);
223 m[2] = 0.0;
224 m[3] = 0.0;
225
226 m[4] = (2.0 / (t - b)) * (-sinv);
227 m[5] = (2.0 / (t - b)) * ( cosv);
228 m[6] = 0.0;
229 m[7] = 0.0;
230
231 m[8] = 0.0;
232 m[9] = 0.0;
233 m[10] = -(2.0 / (far - near));
234 m[11] = 1.0 / (GLfloat)foc;
235
236 m[12] = (m[0] * tx) + (m[4] * ty) - ((r + l) / (r - l));
237 m[13] = (m[1] * tx) + (m[5] * ty) - ((t + b) / (t - b));
238 m[14] = (m[2] * tx) + (m[6] * ty) - ((near + far) / (far - near));
239 m[15] = (m[3] * tx) + (m[7] * ty) + orth;
240}
241
242static int
243_evas_gl_common_version_check()
244{
245 char *version;
246 char *tmp;
247 char *tmp2;
248 int major;
249 int minor;
250
251 /*
252 * glGetString returns a string describing the current GL connection.
253 * GL_VERSION is used to get the version of the connection
254 */
255
256 version = (char *)glGetString(GL_VERSION);
257
258 /*
259 * OpengL ES
260 *
261 * 1.* : The form is:
262 *
263 * OpenGL ES-<profile> <major>.<minor>
264 *
265 * where <profile> is either "CM" or "CL". The minor can be followed by the vendor
266 * specific information
267 *
268 * 2.0 : The form is:
269 *
270 * OpenGL<space>ES<space><version number><space><vendor-specific information>
271 */
272
273 /* OpenGL ES 1.* ? */
274
275 if ((tmp = strstr(version, "OpenGL ES-CM ")) || (tmp = strstr(version, "OpenGL ES-CL ")))
276 {
277 /* Not supported */
278 return 0;
279 }
280
281 /* OpenGL ES 2.* ? */
282
283 if ((tmp = strstr(version, "OpenGL ES ")))
284 {
285 /* Supported */
286 return 1;
287 }
288
289 /*
290 * OpenGL
291 *
292 * The GL_VERSION and GL_SHADING_LANGUAGE_VERSION strings begin with a
293 * version number. The version number uses one of these forms:
294 *
295 * major_number.minor_number
296 * major_number.minor_number.release_number
297 *
298 * Vendor-specific information may follow the version number. Its format
299 * depends on the implementation, but a space always separates the
300 * version number and the vendor-specific information.
301 */
302
303 /* glGetString() returns a static string, and we are going to */
304 /* modify it, so we get a copy first */
305 version = strdup(version);
306 if (!version)
307 return 0;
308
309 tmp = strchr(version, '.');
310 /* the first '.' always exists */
311 *tmp = '\0';
312 major = atoi(version);
313 /* FIXME: maybe we can assume that minor in only a cipher */
314 tmp2 = ++tmp;
315 while ((*tmp != '.') && (*tmp != ' ') && (*tmp != '\0'))
316 tmp++;
317 /* *tmp is '\0' : version is major_number.minor_number */
318 /* *tmp is '.' : version is major_number.minor_number.release_number */
319 /* *tmp is ' ' : version is major_number.minor_number followed by vendor */
320 *tmp = '\0';
321 minor = atoi(tmp2);
322 free(version);
323
324 if (((major == 1) && (minor >= 4)) || (major >= 2))
325 return 1;
326
327 return 0;
328}
329
330static void
331_evas_gl_common_viewport_set(Evas_Engine_GL_Context *gc)
332{
333 GLfloat proj[16];
334 unsigned int i;
335 int w = 1, h = 1, m = 1, rot = 1, foc = 0;
336
337 EINA_SAFETY_ON_NULL_RETURN(gc);
338 foc = gc->foc;
339 // surface in pipe 0 will be the same as all pipes
340 if ((gc->pipe[0].shader.surface == gc->def_surface) ||
341 (!gc->pipe[0].shader.surface))
342 {
343 w = gc->w;
344 h = gc->h;
345 rot = gc->rot;
346 }
347 else
348 {
349 w = gc->pipe[0].shader.surface->w;
350 h = gc->pipe[0].shader.surface->h;
351 rot = 0;
352 m = -1;
353 }
354
355 if ((!gc->change.size) ||
356 ((gc->shared->w == w) && (gc->shared->h == h) &&
357 (gc->shared->rot == rot) && (gc->shared->foc == gc->foc) &&
358 (gc->shared->mflip == m)))
359 return;
360
361 gc->shared->w = w;
362 gc->shared->h = h;
363 gc->shared->rot = rot;
364 gc->shared->mflip = m;
365 gc->shared->foc = foc;
366 gc->shared->z0 = gc->z0;
367 gc->shared->px = gc->px;
368 gc->shared->py = gc->py;
369 gc->change.size = 0;
370
371 if (foc == 0)
372 {
373 if ((rot == 0) || (rot == 180))
374 glViewport(0, 0, w, h);
375 else
376 glViewport(0, 0, h, w);
377 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
378 // std matrix
379 if (m == 1)
380 matrix_ortho(proj,
381 0, w, 0, h,
382 -1000000.0, 1000000.0,
383 rot, w, h,
384 1, 1.0);
385 // v flipped matrix for render-to-texture
386 else
387 matrix_ortho(proj,
388 0, w, h, 0,
389 -1000000.0, 1000000.0,
390 rot, w, h,
391 1, 1.0);
392 }
393 else
394 {
395 int px, py, vx, vy, vw = 0, vh = 0, ax = 0, ay = 0, ppx = 0, ppy = 0;
396
397 px = gc->shared->px;
398 py = gc->shared->py;
399
400 if ((rot == 0 ) || (rot == 90 )) ppx = px;
401 else if ((rot == 180) || (rot == 270)) ppx = w - px;
402 if ((rot == 0 ) || (rot == 270)) ppy = py;
403 else if ((rot == 90 ) || (rot == 180)) ppy = h - py;
404
405 vx = ((w / 2) - ppx);
406 if (vx >= 0)
407 {
408 vw = w + (2 * vx);
409 if ((rot == 0 ) || (rot == 90 )) ax = 2 * vx;
410 else if ((rot == 180) || (rot == 270)) ax = 0;
411 }
412 else
413 {
414 vw = w - (2 * vx);
415 if ((rot == 0 ) || (rot == 90 )) ax = 0;
416 else if ((rot == 180) || (rot == 270)) ax = ppx - px;
417 vx = 0;
418 }
419
420 vy = ((h / 2) - ppy);
421 if (vy < 0)
422 {
423 vh = h - (2 * vy);
424 if ((rot == 0 )) ay = 0;
425 else if ((rot == 90 ) || (rot == 180) || (rot == 270)) ay = ppy - py;
426 vy = -vy;
427 }
428 else
429 {
430 vh = h + (2 * vy);
431 if ((rot == 0 ) || (rot == 270)) ay = 2 * vy;
432 else if ((rot == 90 ) || (rot == 180)) ay = 0;
433 vy = 0;
434 }
435
436 if (m == -1) ay = vy * 2;
437
438 if ((rot == 0) || (rot == 180))
439 glViewport(-2 * vx, -2 * vy, vw, vh);
440 else
441 glViewport(-2 * vy, -2 * vx, vh, vw);
442 if (m == 1)
443 matrix_ortho(proj, 0, vw, 0, vh,
444 -1000000.0, 1000000.0,
445 rot, vw, vh,
446 foc, 0.0);
447 else
448 matrix_ortho(proj, 0, vw, vh, 0,
449 -1000000.0, 1000000.0,
450 rot, vw, vh,
451 foc, 0.0);
452 gc->shared->ax = ax;
453 gc->shared->ay = ay;
454 }
455
456 for (i = 0; i < SHADER_LAST; ++i)
457 {
458 glUseProgram(gc->shared->shader[i].prog);
459 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
460 glUniformMatrix4fv(glGetUniformLocation(gc->shared->shader[i].prog, "mvp"), 1, GL_FALSE, proj);
461 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
462 }
463
464 if (gc->state.current.cur_prog == PRG_INVALID)
465 glUseProgram(gc->shared->shader[0].prog);
466 else glUseProgram(gc->state.current.cur_prog);
467 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
468}
469
470Evas_Engine_GL_Context *
471evas_gl_common_context_new(void)
472{
473 Evas_Engine_GL_Context *gc;
474 const char *s;
475 int i;
476
477#if 1
478 if (_evas_gl_common_context)
479 {
480 _evas_gl_common_context->references++;
481 return _evas_gl_common_context;
482 }
483#endif
484 if (!_evas_gl_common_version_check())
485 return NULL;
486 gc = calloc(1, sizeof(Evas_Engine_GL_Context));
487 if (!gc) return NULL;
488
489 gl_symbols();
490
491 gc->references = 1;
492
493 _evas_gl_common_context = gc;
494
495 for (i = 0; i < MAX_PIPES; i++)
496 gc->pipe[i].shader.render_op = EVAS_RENDER_BLEND;
497
498 if (!shared)
499 {
500 const GLubyte *ext;
501
502 shared = calloc(1, sizeof(Evas_GL_Shared));
503 ext = glGetString(GL_EXTENSIONS);
504 if (ext)
505 {
506 if (getenv("EVAS_GL_INFO"))
507 fprintf(stderr, "EXT:\n%s\n", ext);
508 if ((strstr((char *)ext, "GL_ARB_texture_non_power_of_two")) ||
509 (strstr((char *)ext, "OES_texture_npot")) ||
510 (strstr((char *)ext, "GL_IMG_texture_npot")))
511 shared->info.tex_npo2 = 1;
512 if ((strstr((char *)ext, "GL_NV_texture_rectangle")) ||
513 (strstr((char *)ext, "GL_EXT_texture_rectangle")) ||
514 (strstr((char *)ext, "GL_ARB_texture_rectangle")))
515 shared->info.tex_rect = 1;
516 if ((strstr((char *)ext, "GL_ARB_get_program_binary")) ||
517 (strstr((char *)ext, "GL_OES_get_program_binary")))
518 shared->info.bin_program = 1;
519#ifdef GL_TEXTURE_MAX_ANISOTROPY_EXT
520 if ((strstr((char *)ext, "GL_EXT_texture_filter_anisotropic")))
521 glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT,
522 &(shared->info.anisotropic));
523#endif
524#ifdef GL_BGRA
525 if ((strstr((char *)ext, "GL_EXT_bgra")) ||
526 (strstr((char *)ext, "GL_EXT_texture_format_BGRA8888")))
527 shared->info.bgra = 1;
528#endif
529#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
530 // FIXME: there should be an extension name/string to check for
531 // not just symbols in the lib
532 i = 0;
533 s = getenv("EVAS_GL_NO_MAP_IMAGE_SEC");
534 if (s) i = atoi(s);
535 if (!i)
536 {
537 // test for all needed symbols - be "conservative" and
538 // need all of it
539 if ((secsym_eglCreateImage) &&
540 (secsym_eglDestroyImage) &&
541 (secsym_glEGLImageTargetTexture2DOES) &&
542 (secsym_eglMapImageSEC) &&
543 (secsym_eglUnmapImageSEC) &&
544 (secsym_eglGetImageAttribSEC))
545 shared->info.sec_image_map = 1;
546 }
547#endif
548 }
549 glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS,
550 &(shared->info.max_texture_units));
551 glGetIntegerv(GL_MAX_TEXTURE_SIZE,
552 &(shared->info.max_texture_size));
553 shared->info.max_vertex_elements = 6 * 100000;
554#ifdef GL_MAX_ELEMENTS_VERTICES
555/* only applies to glDrawRangeElements. don't really need to get it.
556 glGetIntegerv(GL_MAX_ELEMENTS_VERTICES,
557 &(shared->info.max_vertex_elements));
558 */
559#endif
560 s = getenv("EVAS_GL_VERTEX_MAX");
561 if (s) shared->info.max_vertex_elements = atoi(s);
562 if (shared->info.max_vertex_elements < 6)
563 shared->info.max_vertex_elements = 6;
564
565 // magic numbers that are a result of imperical testing and getting
566 // "best case" performance across a range of systems
567 shared->info.tune.cutout.max = DEF_CUTOUT;
568 shared->info.tune.pipes.max = DEF_PIPES;
569 shared->info.tune.atlas.max_alloc_size = DEF_ATLAS_ALLOC;
570 shared->info.tune.atlas.max_alloc_alpha_size = DEF_ATLAS_ALLOC_ALPHA;
571 shared->info.tune.atlas.max_w = DEF_ATLAS_W;
572 shared->info.tune.atlas.max_h = DEF_ATLAS_H;
573 shared->info.tune.atlas.slot_size = DEF_ATLAS_SLOT;
574
575 // per gpu hacks. based on impirical measurement of some known gpu's
576 s = (const char *)glGetString(GL_RENDERER);
577 if (s)
578 {
579 if (strstr(s, "PowerVR SGX 540"))
580 shared->info.tune.pipes.max = DEF_PIPES_SGX_540;
581 else if (strstr(s, "NVIDIA Tegra"))
582 shared->info.tune.pipes.max = DEF_PIPES_TEGRA_2;
583 }
584
585#define GETENVOPT(name, tune_param, min, max) \
586 do { \
587 const char *__v = getenv(name); \
588 if (__v) { \
589 shared->info.tune.tune_param = atoi(__v); \
590 if (shared->info.tune.tune_param > max) \
591 shared->info.tune.tune_param = max; \
592 else if (shared->info.tune.tune_param < min) \
593 shared->info.tune.tune_param = min; \
594 } \
595 } while (0)
596
597 GETENVOPT("EVAS_GL_CUTOUT_MAX", cutout.max, -1, 0x7fffffff);
598 GETENVOPT("EVAS_GL_PIPES_MAX", pipes.max, 1, MAX_PIPES);
599 GETENVOPT("EVAS_GL_ATLAS_ALLOC_SIZE", atlas.max_alloc_size, MIN_ATLAS_ALLOC, MAX_ATLAS_ALLOC);
600 GETENVOPT("EVAS_GL_ATLAS_ALLOC_ALPHA_SIZE", atlas.max_alloc_alpha_size, MIN_ATLAS_ALLOC_ALPHA, MAX_ATLAS_ALLOC_ALPHA);
601 GETENVOPT("EVAS_GL_ATLAS_MAX_W", atlas.max_w, 0, MAX_ATLAS_W);
602 GETENVOPT("EVAS_GL_ATLAS_MAX_H", atlas.max_h, 0, MAX_ATLAS_H);
603 GETENVOPT("EVAS_GL_ATLAS_SLOT_SIZE", atlas.slot_size, MIN_ATLAS_SLOT, MAX_ATLAS_SLOT);
604 s = (const char *)getenv("EVAS_GL_GET_PROGRAM_BINARY");
605 if (s)
606 {
607 if (atoi(s) == 0) shared->info.bin_program = 0;
608 }
609
610 if (getenv("EVAS_GL_INFO"))
611 fprintf(stderr,
612 "max tex size %ix%i\n"
613 "max units %i\n"
614 "non-power-2 tex %i\n"
615 "rect tex %i\n"
616 "bgra : %i\n"
617 "max ansiotropic filtering: %3.3f\n"
618 "egl sec map image: %i\n"
619 "max vertex count: %i\n"
620 "\n"
621 "(can set EVAS_GL_VERTEX_MAX EVAS_GL_NO_MAP_IMAGE_SEC EVAS_GL_INFO EVAS_GL_MEMINFO )\n"
622 "\n"
623 "EVAS_GL_GET_PROGRAM_BINARY: %i\n"
624 "EVAS_GL_CUTOUT_MAX: %i\n"
625 "EVAS_GL_PIPES_MAX: %i\n"
626 "EVAS_GL_ATLAS_ALLOC_SIZE: %i\n"
627 "EVAS_GL_ATLAS_ALLOC_ALPHA_SIZE: %i\n"
628 "EVAS_GL_ATLAS_MAX_W x EVAS_GL_ATLAS_MAX_H: %i x %i\n"
629 "EVAS_GL_ATLAS_SLOT_SIZE: %i\n"
630 ,
631 (int)shared->info.max_texture_size, (int)shared->info.max_texture_size,
632 (int)shared->info.max_texture_units,
633 (int)shared->info.tex_npo2,
634 (int)shared->info.tex_rect,
635 (int)shared->info.bgra,
636 (double)shared->info.anisotropic,
637 (int)shared->info.sec_image_map,
638 (int)shared->info.max_vertex_elements,
639
640 (int)shared->info.bin_program,
641 (int)shared->info.tune.cutout.max,
642 (int)shared->info.tune.pipes.max,
643 (int)shared->info.tune.atlas.max_alloc_size,
644 (int)shared->info.tune.atlas.max_alloc_alpha_size,
645 (int)shared->info.tune.atlas.max_w, (int)shared->info.tune.atlas.max_h,
646 (int)shared->info.tune.atlas.slot_size
647 );
648
649 glDisable(GL_DEPTH_TEST);
650 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
651 glEnable(GL_DITHER);
652 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
653 glDisable(GL_BLEND);
654 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
655 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
656 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
657 // no dest alpha
658// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // dest alpha
659// glBlendFunc(GL_SRC_ALPHA, GL_ONE); // ???
660 glDepthMask(GL_FALSE);
661 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
662
663 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
664 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
665 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
666 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
667 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
668 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
669 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
670 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
671#ifdef GL_TEXTURE_MAX_ANISOTROPY_EXT
672 if (shared->info.anisotropic > 0.0)
673 {
674 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.0);
675 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
676 }
677#endif
678
679 glEnableVertexAttribArray(SHAD_VERTEX);
680 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
681 glEnableVertexAttribArray(SHAD_COLOR);
682 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
683
684 if (!evas_gl_common_shader_program_init(shared)) goto error;
685
686#define SHADER_TEXTURE_ADD(Shared, Shader, Name) \
687 glUseProgram(Shared->shader[SHADER_##Shader].prog); \
688 GLERR(__FUNCTION__, __FILE__, __LINE__, ""); \
689 glUniform1i(glGetUniformLocation(Shared->shader[SHADER_##Shader].prog, #Name), Shared->shader[SHADER_##Shader].tex_count++); \
690 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
691
692 SHADER_TEXTURE_ADD(shared, YUV, tex);
693 SHADER_TEXTURE_ADD(shared, YUV, texu);
694 SHADER_TEXTURE_ADD(shared, YUV, texv);
695
696 SHADER_TEXTURE_ADD(shared, YUY2, tex);
697 SHADER_TEXTURE_ADD(shared, YUY2, texuv);
698
699 SHADER_TEXTURE_ADD(shared, NV12, tex);
700 SHADER_TEXTURE_ADD(shared, NV12, texuv);
701
702 SHADER_TEXTURE_ADD(shared, YUV_NOMUL, tex);
703 SHADER_TEXTURE_ADD(shared, YUV_NOMUL, texu);
704 SHADER_TEXTURE_ADD(shared, YUV_NOMUL, texv);
705
706 SHADER_TEXTURE_ADD(shared, YUY2_NOMUL, tex);
707 SHADER_TEXTURE_ADD(shared, YUY2_NOMUL, texuv);
708
709 SHADER_TEXTURE_ADD(shared, NV12_NOMUL, tex);
710 SHADER_TEXTURE_ADD(shared, NV12_NOMUL, texuv);
711
712 SHADER_TEXTURE_ADD(shared, IMG_MASK, tex);
713 SHADER_TEXTURE_ADD(shared, IMG_MASK, texm);
714
715 if (gc->state.current.cur_prog == PRG_INVALID)
716 glUseProgram(gc->shared->shader[0].prog);
717 else glUseProgram(gc->state.current.cur_prog);
718 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
719
720 evas_gl_common_shader_program_init_done();
721 // in shader:
722 // uniform sampler2D tex[8];
723 //
724 // in code:
725 // GLuint texes[8];
726 // GLint loc = glGetUniformLocation(prog, "tex");
727 // glUniform1iv(loc, 8, texes);
728
729 shared->native_pm_hash = eina_hash_int32_new(NULL);
730 shared->native_tex_hash = eina_hash_int32_new(NULL);
731 }
732 gc->shared = shared;
733 gc->shared->references++;
734 _evas_gl_common_viewport_set(gc);
735
736 gc->def_surface = evas_gl_common_image_surface_new(gc, 1, 1, 1);
737
738 return gc;
739 error:
740 evas_gl_common_context_free(gc);
741 return NULL;
742}
743
744void
745evas_gl_common_context_free(Evas_Engine_GL_Context *gc)
746{
747 int i, j;
748 Eina_List *l;
749
750 gc->references--;
751 if (gc->references > 0) return;
752 if (gc->shared) gc->shared->references--;
753
754 if (gc->def_surface) evas_gl_common_image_free(gc->def_surface);
755
756 if (gc->shared)
757 {
758 for (i = 0; i < gc->shared->info.tune.pipes.max; i++)
759 {
760 if (gc->pipe[i].array.vertex) free(gc->pipe[i].array.vertex);
761 if (gc->pipe[i].array.color) free(gc->pipe[i].array.color);
762 if (gc->pipe[i].array.texuv) free(gc->pipe[i].array.texuv);
763 if (gc->pipe[i].array.texm) free(gc->pipe[i].array.texm);
764 if (gc->pipe[i].array.texuv2) free(gc->pipe[i].array.texuv2);
765 if (gc->pipe[i].array.texuv3) free(gc->pipe[i].array.texuv3);
766 }
767 }
768
769 if ((gc->shared) && (gc->shared->references == 0))
770 {
771 Evas_GL_Texture_Pool *pt;
772
773 for (i = 0; i < SHADER_LAST; ++i)
774 evas_gl_common_shader_program_shutdown(&(gc->shared->shader[i]));
775
776 while (gc->shared->images)
777 {
778 evas_gl_common_image_free(gc->shared->images->data);
779 }
780
781 EINA_LIST_FOREACH(gc->shared->tex.whole, l, pt)
782 evas_gl_texture_pool_empty(pt);
783 for (i = 0; i < 33; i++)
784 {
785 for (j = 0; j < 3; j++)
786 {
787 EINA_LIST_FOREACH(gc->shared->tex.atlas[i][j], l, pt)
788 evas_gl_texture_pool_empty(pt);
789 }
790 }
791 eina_hash_free(gc->shared->native_pm_hash);
792 eina_hash_free(gc->shared->native_tex_hash);
793 free(gc->shared);
794 shared = NULL;
795 }
796 if (gc == _evas_gl_common_context) _evas_gl_common_context = NULL;
797 free(gc);
798}
799
800void
801evas_gl_common_context_use(Evas_Engine_GL_Context *gc)
802{
803 if (_evas_gl_common_context == gc) return;
804 _evas_gl_common_context = gc;
805 if (gc) _evas_gl_common_viewport_set(gc);
806}
807
808void
809evas_gl_common_context_newframe(Evas_Engine_GL_Context *gc)
810{
811 int i;
812
813 if (dbgflushnum < 0)
814 {
815 dbgflushnum = 0;
816 if (getenv("EVAS_GL_DBG")) dbgflushnum = 1;
817 }
818 if (dbgflushnum) printf("----prev-flushnum: %i -----------------------------------\n", gc->flushnum);
819
820 gc->flushnum = 0;
821 gc->state.current.cur_prog = 0;
822 gc->state.current.cur_tex = 0;
823 gc->state.current.cur_texu = 0;
824 gc->state.current.cur_texv = 0;
825 gc->state.current.cur_texm = 0;
826 gc->state.current.cur_texmu = 0;
827 gc->state.current.cur_texmv = 0;
828 gc->state.current.render_op = 0;
829 gc->state.current.smooth = 0;
830 gc->state.current.blend = 0;
831 gc->state.current.clip = 0;
832 gc->state.current.cx = 0;
833 gc->state.current.cy = 0;
834 gc->state.current.cw = 0;
835 gc->state.current.ch = 0;
836
837 for (i = 0; i < gc->shared->info.tune.pipes.max; i++)
838 {
839 gc->pipe[i].region.x = 0;
840 gc->pipe[i].region.y = 0;
841 gc->pipe[i].region.w = 0;
842 gc->pipe[i].region.h = 0;
843 gc->pipe[i].region.type = 0;
844 gc->pipe[i].clip.active = 0;
845 gc->pipe[i].clip.x = 0;
846 gc->pipe[i].clip.y = 0;
847 gc->pipe[i].clip.w = 0;
848 gc->pipe[i].clip.h = 0;
849 gc->pipe[i].shader.surface = NULL;
850 gc->pipe[i].shader.cur_prog = 0;
851 gc->pipe[i].shader.cur_tex = 0;
852 gc->pipe[i].shader.cur_texu = 0;
853 gc->pipe[i].shader.cur_texv = 0;
854 gc->pipe[i].shader.cur_texm = 0;
855 gc->pipe[i].shader.render_op = EVAS_RENDER_BLEND;
856 gc->pipe[i].shader.smooth = 0;
857 gc->pipe[i].shader.blend = 0;
858 gc->pipe[i].shader.clip = 0;
859 gc->pipe[i].shader.cx = 0;
860 gc->pipe[i].shader.cy = 0;
861 gc->pipe[i].shader.cw = 0;
862 gc->pipe[i].shader.ch = 0;
863 }
864 gc->change.size = 1;
865
866 glDisable(GL_SCISSOR_TEST);
867 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
868 glScissor(0, 0, 0, 0);
869 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
870
871 glDisable(GL_DEPTH_TEST);
872 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
873 glEnable(GL_DITHER);
874 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
875 glDisable(GL_BLEND);
876 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
877 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
878 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
879 // no dest alpha
880// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // dest alpha
881// glBlendFunc(GL_SRC_ALPHA, GL_ONE); // ???
882 glDepthMask(GL_FALSE);
883 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
884
885 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
886 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
887 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
888 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
889 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
890 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
891 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
892 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
893#ifdef GL_TEXTURE_MAX_ANISOTROPY_EXT
894 if (shared->info.anisotropic > 0.0)
895 {
896 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.0);
897 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
898 }
899#endif
900
901 glEnableVertexAttribArray(SHAD_VERTEX);
902 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
903 glEnableVertexAttribArray(SHAD_COLOR);
904 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
905 if (gc->state.current.cur_prog == PRG_INVALID)
906 glUseProgram(gc->shared->shader[0].prog);
907 else glUseProgram(gc->state.current.cur_prog);
908 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
909
910 glActiveTexture(GL_TEXTURE0);
911 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
912 glBindTexture(GL_TEXTURE_2D, gc->pipe[0].shader.cur_tex);
913 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
914
915 _evas_gl_common_viewport_set(gc);
916}
917
918void
919evas_gl_common_context_resize(Evas_Engine_GL_Context *gc, int w, int h, int rot)
920{
921 if ((gc->w == w) && (gc->h == h) && (gc->rot == rot)) return;
922 evas_gl_common_context_flush(gc);
923 gc->change.size = 1;
924 gc->rot = rot;
925 gc->w = w;
926 gc->h = h;
927 if (_evas_gl_common_context == gc) _evas_gl_common_viewport_set(gc);
928}
929
930void
931evas_gl_common_context_target_surface_set(Evas_Engine_GL_Context *gc,
932 Evas_GL_Image *surface)
933{
934 if (surface == gc->pipe[0].shader.surface) return;
935
936 evas_gl_common_context_flush(gc);
937
938 gc->state.current.cur_prog = PRG_INVALID;
939 gc->state.current.cur_tex = -1;
940 gc->state.current.cur_texu = -1;
941 gc->state.current.cur_texv = -1;
942 gc->state.current.render_op = -1;
943 gc->state.current.smooth = -1;
944 gc->state.current.blend = -1;
945 gc->state.current.clip = -1;
946 gc->state.current.cx = -1;
947 gc->state.current.cy = -1;
948 gc->state.current.cw = -1;
949 gc->state.current.ch = -1;
950
951 gc->pipe[0].shader.surface = surface;
952 gc->change.size = 1;
953#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
954# ifndef GL_FRAMEBUFFER
955# define GL_FRAMEBUFFER GL_FRAMEBUFFER_OES
956# endif
957#else
958# ifndef GL_FRAMEBUFFER
959# define GL_FRAMEBUFFER GL_FRAMEBUFFER_EXT
960# endif
961#endif
962 if (gc->pipe[0].shader.surface == gc->def_surface)
963 {
964 glsym_glBindFramebuffer(GL_FRAMEBUFFER, 0);
965 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
966 }
967 else
968 {
969 glsym_glBindFramebuffer(GL_FRAMEBUFFER, surface->tex->pt->fb);
970 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
971 }
972 _evas_gl_common_viewport_set(gc);
973}
974
975#define PUSH_VERTEX(n, x, y, z) \
976 gc->pipe[n].array.vertex[nv++] = x; \
977 gc->pipe[n].array.vertex[nv++] = y; \
978 gc->pipe[n].array.vertex[nv++] = z
979#define PUSH_COLOR(n, r, g, b, a) \
980 gc->pipe[n].array.color[nc++] = r; \
981 gc->pipe[n].array.color[nc++] = g; \
982 gc->pipe[n].array.color[nc++] = b; \
983 gc->pipe[n].array.color[nc++] = a
984#define PUSH_TEXUV(n, u, v) \
985 gc->pipe[n].array.texuv[nu++] = u; \
986 gc->pipe[n].array.texuv[nu++] = v
987#define PUSH_TEXUV2(n, u, v) \
988 gc->pipe[n].array.texuv2[nu2++] = u; \
989 gc->pipe[n].array.texuv2[nu2++] = v
990#define PUSH_TEXUV3(n, u, v) \
991 gc->pipe[n].array.texuv3[nu3++] = u; \
992 gc->pipe[n].array.texuv3[nu3++] = v
993#define PUSH_TEXM(n, u, v) \
994 gc->pipe[n].array.texm[nm++] = u; \
995 gc->pipe[n].array.texm[nm++] = v
996
997
998static inline void
999array_alloc(Evas_Engine_GL_Context *gc, int n)
1000{
1001 gc->havestuff = EINA_TRUE;
1002 if (gc->pipe[n].array.num <= gc->pipe[n].array.alloc) return;
1003 gc->pipe[n].array.alloc += 6 * 1024;
1004 if (gc->pipe[n].array.use_vertex)
1005 gc->pipe[n].array.vertex = realloc(gc->pipe[n].array.vertex,
1006 gc->pipe[n].array.alloc * sizeof(GLshort) * 3);
1007 if (gc->pipe[n].array.use_color)
1008 gc->pipe[n].array.color = realloc(gc->pipe[n].array.color,
1009 gc->pipe[n].array.alloc * sizeof(GLubyte) * 4);
1010 if (gc->pipe[n].array.use_texuv)
1011 gc->pipe[n].array.texuv = realloc(gc->pipe[n].array.texuv,
1012 gc->pipe[n].array.alloc * sizeof(GLfloat) * 2);
1013 if (gc->pipe[n].array.use_texm)
1014 gc->pipe[n].array.texm = realloc(gc->pipe[n].array.texm,
1015 gc->pipe[n].array.alloc * sizeof(GLfloat) * 2);
1016 if (gc->pipe[n].array.use_texuv2)
1017 gc->pipe[n].array.texuv2 = realloc(gc->pipe[n].array.texuv2,
1018 gc->pipe[n].array.alloc * sizeof(GLfloat) * 2);
1019 if (gc->pipe[n].array.use_texuv3)
1020 gc->pipe[n].array.texuv3 = realloc(gc->pipe[n].array.texuv3,
1021 gc->pipe[n].array.alloc * sizeof(GLfloat) * 2);
1022}
1023
1024#ifdef GLPIPES
1025static int
1026pipe_region_intersects(Evas_Engine_GL_Context *gc, int n,
1027 int x, int y, int w, int h)
1028{
1029 int i, rx, ry, rw, rh, ii;
1030
1031 rx = gc->pipe[n].region.x;
1032 ry = gc->pipe[n].region.y;
1033 rw = gc->pipe[n].region.w;
1034 rh = gc->pipe[n].region.h;
1035 if (!RECTS_INTERSECT(x, y, w, h, rx, ry, rw, rh))
1036 return 0;
1037
1038 // a hack for now. map pipes use their whole bounding box for intersects
1039 // which at worst case reduces to old pipeline flushes, but cheaper than
1040 // full quad region or triangle intersects right now
1041 if (gc->pipe[n].region.type == RTYPE_MAP) return 1;
1042
1043 for (i = 0,
1044 ii = 0;
1045
1046 i < gc->pipe[n].array.num;
1047
1048 i += (3 * 2),
1049 ii += (3 * 3 * 2))
1050 { // tri 1...
1051 // 0, 1, 2 < top left
1052 // 3, 4, 5 < top right
1053 // 6. 7, 8 < bottom left
1054 rx = gc->pipe[n].array.vertex[ii + 0];
1055 ry = gc->pipe[n].array.vertex[ii + 1];
1056 rw = gc->pipe[n].array.vertex[ii + 3] - rx;
1057 rh = gc->pipe[n].array.vertex[ii + 7] - ry;
1058 if (RECTS_INTERSECT(x, y, w, h, rx, ry, rw, rh))
1059 return 1;
1060 }
1061 return 0;
1062}
1063#endif
1064
1065static void
1066pipe_region_expand(Evas_Engine_GL_Context *gc, int n,
1067 int x, int y, int w, int h)
1068{
1069 int x1, y1, x2, y2;
1070
1071 if (gc->pipe[n].region.w <= 0)
1072 {
1073 gc->pipe[n].region.x = x;
1074 gc->pipe[n].region.y = y;
1075 gc->pipe[n].region.w = w;
1076 gc->pipe[n].region.h = h;
1077 return;
1078 }
1079 x1 = gc->pipe[n].region.x;
1080 y1 = gc->pipe[n].region.y;
1081 x2 = gc->pipe[n].region.x + gc->pipe[n].region.w;
1082 y2 = gc->pipe[n].region.y + gc->pipe[n].region.h;
1083 if (x < x1) x1 = x;
1084 if (y < y1) y1 = y;
1085 if ((x + w) > x2) x2 = x + w;
1086 if ((y + h) > y2) y2 = y + h;
1087 gc->pipe[n].region.x = x1;
1088 gc->pipe[n].region.y = y1;
1089 gc->pipe[n].region.w = x2 - x1;
1090 gc->pipe[n].region.h = y2 - y1;
1091}
1092
1093static Eina_Bool
1094vertex_array_size_check(Evas_Engine_GL_Context *gc, int pn, int n)
1095{
1096 return 1;
1097// this fixup breaks for expedite test 32. why?
1098 if ((gc->pipe[pn].array.num + n) > gc->shared->info.max_vertex_elements)
1099 {
1100 shader_array_flush(gc);
1101 return 0;
1102 }
1103 return 1;
1104}
1105
1106static inline Evas_GL_Shader
1107evas_gl_common_shader_choice(int npoints __UNUSED__,
1108 RGBA_Map_Point *p,
1109 int r, int g, int b, int a,
1110 Evas_GL_Shader nomul,
1111 Evas_GL_Shader mul)
1112{
1113 if ((a == 255) && (r == 255) && (g == 255) && (b == 255))
1114 {
1115 if (!p) return nomul;
1116
1117 if ((p[0].col == 0xffffffff) && (p[1].col == 0xffffffff) &&
1118 (p[2].col == 0xffffffff) && (p[3].col == 0xffffffff))
1119 return nomul;
1120 }
1121 return mul;
1122}
1123
1124static int
1125_evas_gl_common_context_push(int rtype,
1126 Evas_Engine_GL_Context *gc,
1127 Evas_GL_Texture *tex,
1128 Evas_GL_Texture *texm,
1129 GLuint prog,
1130 int x, int y, int w, int h,
1131 Eina_Bool blend,
1132 Eina_Bool smooth,
1133 Eina_Bool clip,
1134 int cx, int cy, int cw, int ch)
1135{
1136 int pn = 0;
1137
1138#ifdef GLPIPES
1139 again:
1140#endif
1141 vertex_array_size_check(gc, gc->state.top_pipe, 6);
1142 pn = gc->state.top_pipe;
1143#ifdef GLPIPES
1144 if (!((pn == 0) && (gc->pipe[pn].array.num == 0)))
1145 {
1146 int found = 0;
1147 int i;
1148
1149 for (i = pn; i >= 0; i--)
1150 {
1151 if ((gc->pipe[i].region.type == rtype)
1152 && (!tex || gc->pipe[i].shader.cur_tex == tex->pt->texture)
1153 && (!texm || gc->pipe[i].shader.cur_texm == texm->pt->texture)
1154 && (gc->pipe[i].shader.cur_prog == prog)
1155 && (gc->pipe[i].shader.smooth == smooth)
1156 && (gc->pipe[i].shader.blend == blend)
1157 && (gc->pipe[i].shader.render_op == gc->dc->render_op)
1158 && (gc->pipe[i].shader.clip == clip)
1159 && (!clip || ((gc->pipe[i].shader.cx == cx)
1160 && (gc->pipe[i].shader.cy == cy)
1161 && (gc->pipe[i].shader.cw == cw)
1162 && (gc->pipe[i].shader.ch == ch))))
1163 {
1164 found = 1;
1165 pn = i;
1166 break;
1167 }
1168 if (pipe_region_intersects(gc, i, x, y, w, h)) break;
1169 }
1170 if (!found)
1171 {
1172 pn = gc->state.top_pipe + 1;
1173 if (pn >= gc->shared->info.tune.pipes.max)
1174 {
1175 shader_array_flush(gc);
1176 goto again;
1177 }
1178 gc->state.top_pipe = pn;
1179 }
1180 }
1181 if ((tex) && (((tex->im) && (tex->im->native.data)) || tex->pt->dyn.img))
1182 {
1183 if (gc->pipe[pn].array.im != tex->im)
1184 {
1185 shader_array_flush(gc);
1186 pn = gc->state.top_pipe;
1187 gc->pipe[pn].array.im = tex->im;
1188 goto again;
1189 }
1190 }
1191#else
1192 if (!((gc->pipe[pn].region.type == rtype)
1193 && (!tex || gc->pipe[pn].shader.cur_tex == tex->pt->texture)
1194 && (!texm || gc->pipe[pn].shader.cur_texm == texm->pt->texture)
1195 && (gc->pipe[pn].shader.cur_prog == prog)
1196 && (gc->pipe[pn].shader.smooth == smooth)
1197 && (gc->pipe[pn].shader.blend == blend)
1198 && (gc->pipe[pn].shader.render_op == gc->dc->render_op)
1199 && (gc->pipe[pn].shader.clip == clip)
1200 && (!clip || ((gc->pipe[pn].shader.cx == cx)
1201 && (gc->pipe[pn].shader.cy == cy)
1202 && (gc->pipe[pn].shader.cw == cw)
1203 && (gc->pipe[pn].shader.ch == ch)))))
1204 {
1205 shader_array_flush(gc);
1206 }
1207 if ((tex) && (((tex->im) && (tex->im->native.data)) || tex->pt->dyn.img))
1208 {
1209 if (gc->pipe[pn].array.im != tex->im)
1210 {
1211 shader_array_flush(gc);
1212 gc->pipe[pn].array.im = tex->im;
1213 }
1214 }
1215#endif
1216
1217 return pn;
1218}
1219
1220void
1221evas_gl_common_context_line_push(Evas_Engine_GL_Context *gc,
1222 int x1, int y1, int x2, int y2,
1223 int clip, int cx, int cy, int cw, int ch,
1224 int r, int g, int b, int a)
1225{
1226 int pnum, nv, nc, nu, nt, i;
1227 Eina_Bool blend = 0;
1228 GLuint prog = gc->shared->shader[SHADER_RECT].prog;
1229 int pn = 0;
1230
1231 if (a < 255) blend = 1;
1232 if (gc->dc->render_op == EVAS_RENDER_COPY) blend = 0;
1233
1234 shader_array_flush(gc);
1235 vertex_array_size_check(gc, gc->state.top_pipe, 2);
1236 pn = gc->state.top_pipe;
1237 gc->pipe[pn].shader.cur_tex = 0;
1238 gc->pipe[pn].shader.cur_prog = prog;
1239 gc->pipe[pn].shader.blend = blend;
1240 gc->pipe[pn].shader.render_op = gc->dc->render_op;
1241 gc->pipe[pn].shader.clip = clip;
1242 gc->pipe[pn].shader.cx = cx;
1243 gc->pipe[pn].shader.cy = cy;
1244 gc->pipe[pn].shader.cw = cw;
1245 gc->pipe[pn].shader.ch = ch;
1246
1247 gc->pipe[pn].array.line = 1;
1248 gc->pipe[pn].array.use_vertex = 1;
1249 gc->pipe[pn].array.use_color = 1;
1250 gc->pipe[pn].array.use_texuv = 0;
1251 gc->pipe[pn].array.use_texuv2 = 0;
1252 gc->pipe[pn].array.use_texuv3 = 0;
1253
1254 pnum = gc->pipe[pn].array.num;
1255 nv = pnum * 3; nc = pnum * 4; nu = pnum * 2; nt = pnum * 4;
1256 gc->pipe[pn].array.num += 2;
1257 array_alloc(gc, pn);
1258
1259 PUSH_VERTEX(pn, x1, y1, 0);
1260 PUSH_VERTEX(pn, x2, y2, 0);
1261
1262 for (i = 0; i < 2; i++)
1263 {
1264 PUSH_COLOR(pn, r, g, b, a);
1265 }
1266
1267 shader_array_flush(gc);
1268 gc->pipe[pn].array.line = 0;
1269 gc->pipe[pn].array.use_vertex = 0;
1270 gc->pipe[pn].array.use_color = 0;
1271 gc->pipe[pn].array.use_texuv = 0;
1272 gc->pipe[pn].array.use_texuv2 = 0;
1273 gc->pipe[pn].array.use_texuv3 = 0;
1274}
1275
1276void
1277evas_gl_common_context_rectangle_push(Evas_Engine_GL_Context *gc,
1278 int x, int y, int w, int h,
1279 int r, int g, int b, int a)
1280{
1281 int pnum, nv, nc, nu, nt, i;
1282 Eina_Bool blend = 0;
1283 GLuint prog = gc->shared->shader[SHADER_RECT].prog;
1284 int pn = 0;
1285
1286 if (gc->dc->mask.mask)
1287 {
1288 RGBA_Draw_Context *dc;
1289 dc = gc->dc;
1290 Evas_GL_Image *im;
1291 im = (void *)dc->mask.mask;
1292 evas_gl_common_context_font_push(gc, im->tex,
1293 x - dc->mask.x,y - dc->mask.y,
1294 dc->mask.w,dc->mask.h,
1295 x,y,w,h,r,g,b,a);
1296 return;
1297 }
1298
1299 if (a < 255) blend = 1;
1300 if (gc->dc->render_op == EVAS_RENDER_COPY) blend = 0;
1301
1302again:
1303 vertex_array_size_check(gc, gc->state.top_pipe, 6);
1304 pn = gc->state.top_pipe;
1305#ifdef GLPIPES
1306 if ((pn == 0) && (gc->pipe[pn].array.num == 0))
1307 {
1308 gc->pipe[pn].region.type = RTYPE_RECT;
1309 gc->pipe[pn].shader.cur_tex = 0;
1310 gc->pipe[pn].shader.cur_prog = prog;
1311 gc->pipe[pn].shader.blend = blend;
1312 gc->pipe[pn].shader.render_op = gc->dc->render_op;
1313 gc->pipe[pn].shader.clip = 0;
1314 gc->pipe[pn].shader.cx = 0;
1315 gc->pipe[pn].shader.cy = 0;
1316 gc->pipe[pn].shader.cw = 0;
1317 gc->pipe[pn].shader.ch = 0;
1318 gc->pipe[pn].array.line = 0;
1319 gc->pipe[pn].array.use_vertex = 1;
1320 gc->pipe[pn].array.use_color = 1;
1321 gc->pipe[pn].array.use_texuv = 0;
1322 gc->pipe[pn].array.use_texuv2 = 0;
1323 gc->pipe[pn].array.use_texuv3 = 0;
1324 }
1325 else
1326 {
1327 int found = 0;
1328
1329 for (i = pn; i >= 0; i--)
1330 {
1331 if ((gc->pipe[i].region.type == RTYPE_RECT)
1332 && (gc->pipe[i].shader.cur_tex == 0)
1333 && (gc->pipe[i].shader.cur_prog == prog)
1334 && (gc->pipe[i].shader.blend == blend)
1335 && (gc->pipe[i].shader.render_op == gc->dc->render_op)
1336 && (gc->pipe[i].shader.clip == 0)
1337 )
1338 {
1339 found = 1;
1340 pn = i;
1341 break;
1342 }
1343 if (pipe_region_intersects(gc, i, x, y, w, h)) break;
1344 }
1345 if (!found)
1346 {
1347 pn = gc->state.top_pipe + 1;
1348 if (pn >= gc->shared->info.tune.pipes.max)
1349 {
1350 shader_array_flush(gc);
1351 goto again;
1352 }
1353 gc->state.top_pipe = pn;
1354 gc->pipe[pn].region.type = RTYPE_RECT;
1355 gc->pipe[pn].shader.cur_tex = 0;
1356 gc->pipe[pn].shader.cur_prog = prog;
1357 gc->pipe[pn].shader.blend = blend;
1358 gc->pipe[pn].shader.render_op = gc->dc->render_op;
1359 gc->pipe[pn].shader.clip = 0;
1360 gc->pipe[pn].shader.cx = 0;
1361 gc->pipe[pn].shader.cy = 0;
1362 gc->pipe[pn].shader.cw = 0;
1363 gc->pipe[pn].shader.ch = 0;
1364 gc->pipe[pn].array.line = 0;
1365 gc->pipe[pn].array.use_vertex = 1;
1366 gc->pipe[pn].array.use_color = 1;
1367 gc->pipe[pn].array.use_texuv = 0;
1368 gc->pipe[pn].array.use_texuv2 = 0;
1369 gc->pipe[pn].array.use_texuv3 = 0;
1370 }
1371 }
1372#else
1373 if ((gc->pipe[pn].shader.cur_tex != 0)
1374 || (gc->pipe[pn].shader.cur_prog != prog)
1375 || (gc->pipe[pn].shader.blend != blend)
1376 || (gc->pipe[pn].shader.render_op != gc->dc->render_op)
1377 || (gc->pipe[pn].shader.clip != 0)
1378 )
1379 {
1380 shader_array_flush(gc);
1381 pn = gc->state.top_pipe;
1382 gc->pipe[pn].shader.cur_tex = 0;
1383 gc->pipe[pn].shader.cur_prog = prog;
1384 gc->pipe[pn].shader.blend = blend;
1385 gc->pipe[pn].shader.render_op = gc->dc->render_op;
1386 gc->pipe[pn].shader.clip = 0;
1387 gc->pipe[pn].shader.cx = 0;
1388 gc->pipe[pn].shader.cy = 0;
1389 gc->pipe[pn].shader.cw = 0;
1390 gc->pipe[pn].shader.ch = 0;
1391 }
1392
1393 gc->pipe[pn].region.type = RTYPE_RECT;
1394 gc->pipe[pn].array.line = 0;
1395 gc->pipe[pn].array.use_vertex = 1;
1396 gc->pipe[pn].array.use_color = 1;
1397 gc->pipe[pn].array.use_texuv = 0;
1398 gc->pipe[pn].array.use_texuv2 = 0;
1399 gc->pipe[pn].array.use_texuv3 = 0;
1400#endif
1401
1402 pipe_region_expand(gc, pn, x, y, w, h);
1403
1404 pnum = gc->pipe[pn].array.num;
1405 nv = pnum * 3; nc = pnum * 4; nu = pnum * 2; nt = pnum * 4;
1406 gc->pipe[pn].array.num += 6;
1407 array_alloc(gc, pn);
1408
1409 PUSH_VERTEX(pn, x , y , 0);
1410 PUSH_VERTEX(pn, x + w, y , 0);
1411 PUSH_VERTEX(pn, x , y + h, 0);
1412
1413 PUSH_VERTEX(pn, x + w, y , 0);
1414 PUSH_VERTEX(pn, x + w, y + h, 0);
1415 PUSH_VERTEX(pn, x , y + h, 0);
1416
1417 for (i = 0; i < 6; i++)
1418 {
1419 PUSH_COLOR(pn, r, g, b, a);
1420 }
1421}
1422
1423void
1424evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
1425 Evas_GL_Texture *tex,
1426 double sx, double sy, double sw, double sh,
1427 int x, int y, int w, int h,
1428 int r, int g, int b, int a,
1429 Eina_Bool smooth, Eina_Bool tex_only)
1430{
1431 int pnum, nv, nc, nu, nu2, nt, i;
1432 GLfloat tx1, tx2, ty1, ty2;
1433 Eina_Bool blend = 1;
1434 GLuint prog = gc->shared->shader[SHADER_IMG].prog;
1435 int pn = 0;
1436
1437 if (!tex->alpha) blend = 0;
1438 if (a < 255) blend = 1;
1439
1440 if (gc->filter_prog)
1441 {
1442 prog = gc->filter_prog;
1443 }
1444 else if (tex_only)
1445 {
1446 if (tex->pt->dyn.img)
1447 {
1448 prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a,
1449 SHADER_IMG_BGRA_NOMUL, SHADER_IMG_BGRA)].prog;
1450 }
1451 else
1452 {
1453 prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a,
1454 SHADER_TEX_NOMUL, SHADER_TEX)].prog;
1455 }
1456 }
1457 else
1458 {
1459 if (tex->gc->shared->info.bgra)
1460 {
1461 prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a,
1462 SHADER_IMG_BGRA_NOMUL, SHADER_IMG_BGRA)].prog;
1463 }
1464 else
1465 {
1466 prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a,
1467 SHADER_IMG_NOMUL, SHADER_IMG)].prog;
1468 }
1469 }
1470
1471 pn = _evas_gl_common_context_push(RTYPE_IMAGE,
1472 gc, tex, NULL,
1473 prog,
1474 x, y, w, h,
1475 blend,
1476 smooth,
1477 0, 0, 0, 0, 0);
1478
1479 gc->pipe[pn].region.type = RTYPE_IMAGE;
1480 gc->pipe[pn].shader.cur_tex = tex->pt->texture;
1481 gc->pipe[pn].shader.cur_prog = prog;
1482 gc->pipe[pn].shader.smooth = smooth;
1483 gc->pipe[pn].shader.blend = blend;
1484 gc->pipe[pn].shader.render_op = gc->dc->render_op;
1485 gc->pipe[pn].shader.clip = 0;
1486 gc->pipe[pn].shader.cx = 0;
1487 gc->pipe[pn].shader.cy = 0;
1488 gc->pipe[pn].shader.cw = 0;
1489 gc->pipe[pn].shader.ch = 0;
1490 gc->pipe[pn].array.line = 0;
1491 gc->pipe[pn].array.use_vertex = 1;
1492 // if nomul... dont need this
1493 gc->pipe[pn].array.use_color = 1;
1494 gc->pipe[pn].array.use_texuv = 1;
1495 gc->pipe[pn].array.use_texuv2 = 0;
1496 gc->pipe[pn].array.use_texuv3 = 0;
1497
1498 pipe_region_expand(gc, pn, x, y, w, h);
1499
1500 pnum = gc->pipe[pn].array.num;
1501 nv = pnum * 3; nc = pnum * 4; nu = pnum * 2; nu2 = pnum * 2;
1502 nt = pnum * 4;
1503 gc->pipe[pn].array.num += 6;
1504 array_alloc(gc, pn);
1505
1506 if ((tex->im) && (tex->im->native.data) && (!tex->im->native.yinvert))
1507 {
1508 tx1 = ((double)(tex->x) + sx) / (double)tex->pt->w;
1509 ty1 = 1.0 - ((double)(tex->y) + sy) / (double)tex->pt->h;
1510 tx2 = ((double)(tex->x) + sx + sw) / (double)tex->pt->w;
1511 ty2 = 1.0 - ((double)(tex->y) + sy + sh) / (double)tex->pt->h;
1512 }
1513 else
1514 {
1515 tx1 = ((double)(tex->x) + sx) / (double)tex->pt->w;
1516 ty1 = ((double)(tex->y) + sy) / (double)tex->pt->h;
1517 tx2 = ((double)(tex->x) + sx + sw) / (double)tex->pt->w;
1518 ty2 = ((double)(tex->y) + sy + sh) / (double)tex->pt->h;
1519 }
1520
1521 PUSH_VERTEX(pn, x , y , 0);
1522 PUSH_VERTEX(pn, x + w, y , 0);
1523 PUSH_VERTEX(pn, x , y + h, 0);
1524
1525 PUSH_TEXUV(pn, tx1, ty1);
1526 PUSH_TEXUV(pn, tx2, ty1);
1527 PUSH_TEXUV(pn, tx1, ty2);
1528
1529 PUSH_VERTEX(pn, x + w, y , 0);
1530 PUSH_VERTEX(pn, x + w, y + h, 0);
1531 PUSH_VERTEX(pn, x , y + h, 0);
1532
1533 PUSH_TEXUV(pn, tx2, ty1);
1534 PUSH_TEXUV(pn, tx2, ty2);
1535 PUSH_TEXUV(pn, tx1, ty2);
1536
1537 // if nomul... dont need this
1538 for (i = 0; i < 6; i++)
1539 {
1540 PUSH_COLOR(pn, r, g, b, a);
1541 }
1542}
1543
1544void
1545evas_gl_common_context_image_mask_push(Evas_Engine_GL_Context *gc,
1546 Evas_GL_Texture *tex,
1547 Evas_GL_Texture *texm,
1548 double sx, double sy, double sw, double sh,
1549 double sxm, double sym, double swm,double shm,
1550 int x, int y, int w, int h,
1551 int r, int g, int b, int a,
1552 Eina_Bool smooth)
1553{
1554 int pnum, nv, nc, nu, nm, nt, i;
1555 GLfloat tx1, tx2, ty1, ty2;
1556 GLfloat txm1, txm2, tym1, tym2;
1557 Eina_Bool blend = 1;
1558 GLuint prog = gc->shared->shader[SHADER_IMG_MASK].prog;
1559 int pn = 0;
1560
1561#if 0
1562 if (tex->gc->shared->info.bgra)
1563 {
1564 prog = gc->shared->shader[SHADER_IMG_MASK].prog;
1565 }
1566 else
1567 {
1568#warning Nash: FIXME: Need two shaders?
1569 printf("Not good: Need other texture\n");
1570 prog = gc->shared->shader[SHADER_IMG].prog;
1571 }
1572#endif
1573
1574 pn = _evas_gl_common_context_push(RTYPE_IMASK,
1575 gc, tex, texm,
1576 prog,
1577 x, y, w, h,
1578 blend,
1579 smooth,
1580 0, 0, 0, 0, 0);
1581
1582 gc->pipe[pn].region.type = RTYPE_IMASK;
1583 gc->pipe[pn].shader.cur_tex = tex->pt->texture;
1584 gc->pipe[pn].shader.cur_texm = texm->pt->texture;
1585 gc->pipe[pn].shader.cur_prog = prog;
1586 gc->pipe[pn].shader.smooth = smooth;
1587 gc->pipe[pn].shader.blend = blend;
1588 gc->pipe[pn].shader.render_op = gc->dc->render_op;
1589 gc->pipe[pn].shader.clip = 0;
1590 gc->pipe[pn].shader.cx = 0;
1591 gc->pipe[pn].shader.cy = 0;
1592 gc->pipe[pn].shader.cw = 0;
1593 gc->pipe[pn].shader.ch = 0;
1594 gc->pipe[pn].array.line = 0;
1595 gc->pipe[pn].array.use_vertex = 1;
1596 // if nomul... dont need this
1597 gc->pipe[pn].array.use_color = 1;
1598 gc->pipe[pn].array.use_texuv = 1;
1599 gc->pipe[pn].array.use_texuv2 = 0;
1600 gc->pipe[pn].array.use_texuv3 = 0;
1601 gc->pipe[pn].array.use_texm = 1;
1602
1603 pipe_region_expand(gc, pn, x, y, w, h);
1604
1605 pnum = gc->pipe[pn].array.num;
1606 nv = pnum * 3; nc = pnum * 4; nm = pnum * 2; nu = pnum * 2;
1607 nt = pnum * 4;
1608 gc->pipe[pn].array.num += 6;
1609 array_alloc(gc, pn);
1610
1611 if ((tex->im) && (tex->im->native.data) && (!tex->im->native.yinvert))
1612 {
1613 tx1 = ((double)(tex->x) + sx) / (double)tex->pt->w;
1614 ty1 = ((double)(tex->y) + sy + sh) / (double)tex->pt->h;
1615 tx2 = ((double)(tex->x) + sx + sw) / (double)tex->pt->w;
1616 ty2 = ((double)(tex->y) + sy) / (double)tex->pt->h;
1617
1618 txm1 = ((double)(texm->x) + sxm) / (double)texm->pt->w;
1619 tym1 = ((double)(texm->y) + sym + shm) / (double)texm->pt->h;
1620 txm2 = ((double)(texm->x) + sxm + swm) / (double)texm->pt->w;
1621 tym2 = ((double)(texm->y) + sym) / (double)texm->pt->h;
1622 }
1623 else
1624 {
1625 tx1 = ((double)(tex->x) + sx) / (double)tex->pt->w;
1626 ty1 = ((double)(tex->y) + sy) / (double)tex->pt->h;
1627 tx2 = ((double)(tex->x) + sx + sw) / (double)tex->pt->w;
1628 ty2 = ((double)(tex->y) + sy + sh) / (double)tex->pt->h;
1629
1630 txm1 = (texm->x + sxm) / (double)texm->pt->w;
1631 tym1 = (texm->y + sym) / (double)texm->pt->h;
1632 txm2 = (texm->x + sxm + swm) / (double)texm->pt->w;
1633 tym2 = (texm->y + sym + shm) / (double)texm->pt->h;
1634 }
1635 // printf(" %3.6lf %3.6lf %3.6lf %3.6lf\n",sx,sy,sw,sh);
1636 // printf("m%3.6lf %3.6lf %3.6lf %3.6lf\n",sxm,sym,swm,shm);
1637 // printf(" %3f %3f %3f %3f\n",tx1,ty1,tx2,ty2);
1638 // printf("m%3f %3f %3f %3f\n",txm1,tym1,txm2,tym2);
1639
1640 PUSH_VERTEX(pn, x , y , 0);
1641 PUSH_VERTEX(pn, x + w, y , 0);
1642 PUSH_VERTEX(pn, x , y + h, 0);
1643
1644 PUSH_TEXUV(pn, tx1, ty1);
1645 PUSH_TEXUV(pn, tx2, ty1);
1646 PUSH_TEXUV(pn, tx1, ty2);
1647
1648 PUSH_TEXM(pn, txm1, tym1);
1649 PUSH_TEXM(pn, txm2, tym1);
1650 PUSH_TEXM(pn, txm1, tym2);
1651
1652 PUSH_VERTEX(pn, x + w, y , 0);
1653 PUSH_VERTEX(pn, x + w, y + h, 0);
1654 PUSH_VERTEX(pn, x , y + h, 0);
1655
1656 PUSH_TEXUV(pn, tx2, ty1);
1657 PUSH_TEXUV(pn, tx2, ty2);
1658 PUSH_TEXUV(pn, tx1, ty2);
1659
1660 PUSH_TEXM(pn, txm2, tym1);
1661 PUSH_TEXM(pn, txm2, tym2);
1662 PUSH_TEXM(pn, txm1, tym2);
1663
1664 // if nomul... dont need this
1665 for (i = 0; i < 6; i++)
1666 {
1667 PUSH_COLOR(pn, r, g, b, a);
1668 }
1669}
1670
1671
1672void
1673evas_gl_common_context_font_push(Evas_Engine_GL_Context *gc,
1674 Evas_GL_Texture *tex,
1675 double sx, double sy, double sw, double sh,
1676 int x, int y, int w, int h,
1677 int r, int g, int b, int a)
1678{
1679 int pnum, nv, nc, nu, nt, i;
1680 GLfloat tx1, tx2, ty1, ty2;
1681 GLuint prog = gc->shared->shader[SHADER_FONT].prog;
1682 int pn = 0;
1683
1684 pn = _evas_gl_common_context_push(RTYPE_FONT,
1685 gc, tex, NULL,
1686 prog,
1687 x, y, w, h,
1688 1,
1689 0,
1690 0, 0, 0, 0, 0);
1691
1692 gc->pipe[pn].region.type = RTYPE_FONT;
1693 gc->pipe[pn].shader.cur_tex = tex->pt->texture;
1694 gc->pipe[pn].shader.cur_prog = prog;
1695 gc->pipe[pn].shader.smooth = 0;
1696 gc->pipe[pn].shader.blend = 1;
1697 gc->pipe[pn].shader.render_op = gc->dc->render_op;
1698 gc->pipe[pn].shader.clip = 0;
1699 gc->pipe[pn].shader.cx = 0;
1700 gc->pipe[pn].shader.cy = 0;
1701 gc->pipe[pn].shader.cw = 0;
1702 gc->pipe[pn].shader.ch = 0;
1703 gc->pipe[pn].array.line = 0;
1704 gc->pipe[pn].array.use_vertex = 1;
1705 gc->pipe[pn].array.use_color = 1;
1706 gc->pipe[pn].array.use_texuv = 1;
1707 gc->pipe[pn].array.use_texuv2 = 0;
1708 gc->pipe[pn].array.use_texuv3 = 0;
1709
1710 pipe_region_expand(gc, pn, x, y, w, h);
1711
1712 pnum = gc->pipe[pn].array.num;
1713 nv = pnum * 3; nc = pnum * 4; nu = pnum * 2; nt = pnum * 4;
1714 gc->pipe[pn].array.num += 6;
1715 array_alloc(gc, pn);
1716
1717 if (sw == 0.0)
1718 {
1719 tx1 = tex->sx1;
1720 ty1 = tex->sy1;
1721 tx2 = tex->sx2;
1722 ty2 = tex->sy2;
1723 }
1724 else
1725 {
1726 tx1 = ((double)(tex->x) + sx) / (double)tex->pt->w;
1727 ty1 = ((double)(tex->y) + sy) / (double)tex->pt->h;
1728 tx2 = ((double)(tex->x) + sx + sw) / (double)tex->pt->w;
1729 ty2 = ((double)(tex->y) + sy + sh) / (double)tex->pt->h;
1730 }
1731
1732 PUSH_VERTEX(pn, x , y , 0);
1733 PUSH_VERTEX(pn, x + w, y , 0);
1734 PUSH_VERTEX(pn, x , y + h, 0);
1735
1736 PUSH_TEXUV(pn, tx1, ty1);
1737 PUSH_TEXUV(pn, tx2, ty1);
1738 PUSH_TEXUV(pn, tx1, ty2);
1739
1740 PUSH_VERTEX(pn, x + w, y , 0);
1741 PUSH_VERTEX(pn, x + w, y + h, 0);
1742 PUSH_VERTEX(pn, x , y + h, 0);
1743
1744 PUSH_TEXUV(pn, tx2, ty1);
1745 PUSH_TEXUV(pn, tx2, ty2);
1746 PUSH_TEXUV(pn, tx1, ty2);
1747
1748 for (i = 0; i < 6; i++)
1749 {
1750 PUSH_COLOR(pn, r, g, b, a);
1751 }
1752}
1753
1754void
1755evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
1756 Evas_GL_Texture *tex,
1757 double sx, double sy, double sw, double sh,
1758 int x, int y, int w, int h,
1759 int r, int g, int b, int a,
1760 Eina_Bool smooth)
1761{
1762 int pnum, nv, nc, nu, nu2, nu3, nt, i;
1763 GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
1764 Eina_Bool blend = 0;
1765 GLuint prog;
1766 int pn = 0;
1767
1768 if (a < 255) blend = 1;
1769
1770 prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a,
1771 SHADER_YUV_NOMUL, SHADER_YUV)].prog;
1772
1773 pn = _evas_gl_common_context_push(RTYPE_YUV,
1774 gc, tex, NULL,
1775 prog,
1776 x, y, w, h,
1777 blend,
1778 smooth,
1779 0, 0, 0, 0, 0);
1780
1781 gc->pipe[pn].region.type = RTYPE_YUV;
1782 gc->pipe[pn].shader.cur_tex = tex->pt->texture;
1783 gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
1784 gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
1785 gc->pipe[pn].shader.cur_prog = prog;
1786 gc->pipe[pn].shader.smooth = smooth;
1787 gc->pipe[pn].shader.blend = blend;
1788 gc->pipe[pn].shader.render_op = gc->dc->render_op;
1789 gc->pipe[pn].shader.clip = 0;
1790 gc->pipe[pn].shader.cx = 0;
1791 gc->pipe[pn].shader.cy = 0;
1792 gc->pipe[pn].shader.cw = 0;
1793 gc->pipe[pn].shader.ch = 0;
1794 gc->pipe[pn].array.line = 0;
1795 gc->pipe[pn].array.use_vertex = 1;
1796 gc->pipe[pn].array.use_color = 1;
1797 gc->pipe[pn].array.use_texuv = 1;
1798 gc->pipe[pn].array.use_texuv2 = 1;
1799 gc->pipe[pn].array.use_texuv3 = 1;
1800
1801 pipe_region_expand(gc, pn, x, y, w, h);
1802
1803 pnum = gc->pipe[pn].array.num;
1804 nv = pnum * 3; nc = pnum * 4; nu = pnum * 2;
1805 nu2 = pnum * 2; nu3 = pnum * 2; nt = pnum * 4;
1806 gc->pipe[pn].array.num += 6;
1807 array_alloc(gc, pn);
1808
1809 tx1 = (sx) / (double)tex->pt->w;
1810 ty1 = (sy) / (double)tex->pt->h;
1811 tx2 = (sx + sw) / (double)tex->pt->w;
1812 ty2 = (sy + sh) / (double)tex->pt->h;
1813
1814 t2x1 = ((sx) / 2) / (double)tex->ptu->w;
1815 t2y1 = ((sy) / 2) / (double)tex->ptu->h;
1816 t2x2 = ((sx + sw) / 2) / (double)tex->ptu->w;
1817 t2y2 = ((sy + sh) / 2) / (double)tex->ptu->h;
1818
1819 PUSH_VERTEX(pn, x , y , 0);
1820 PUSH_VERTEX(pn, x + w, y , 0);
1821 PUSH_VERTEX(pn, x , y + h, 0);
1822
1823 PUSH_TEXUV(pn, tx1, ty1);
1824 PUSH_TEXUV(pn, tx2, ty1);
1825 PUSH_TEXUV(pn, tx1, ty2);
1826
1827 PUSH_TEXUV2(pn, t2x1, t2y1);
1828 PUSH_TEXUV2(pn, t2x2, t2y1);
1829 PUSH_TEXUV2(pn, t2x1, t2y2);
1830
1831 PUSH_TEXUV3(pn, t2x1, t2y1);
1832 PUSH_TEXUV3(pn, t2x2, t2y1);
1833 PUSH_TEXUV3(pn, t2x1, t2y2);
1834
1835 PUSH_VERTEX(pn, x + w, y , 0);
1836 PUSH_VERTEX(pn, x + w, y + h, 0);
1837 PUSH_VERTEX(pn, x , y + h, 0);
1838
1839 PUSH_TEXUV(pn, tx2, ty1);
1840 PUSH_TEXUV(pn, tx2, ty2);
1841 PUSH_TEXUV(pn, tx1, ty2);
1842
1843 PUSH_TEXUV2(pn, t2x2, t2y1);
1844 PUSH_TEXUV2(pn, t2x2, t2y2);
1845 PUSH_TEXUV2(pn, t2x1, t2y2);
1846
1847 PUSH_TEXUV3(pn, t2x2, t2y1);
1848 PUSH_TEXUV3(pn, t2x2, t2y2);
1849 PUSH_TEXUV3(pn, t2x1, t2y2);
1850
1851 for (i = 0; i < 6; i++)
1852 {
1853 PUSH_COLOR(pn, r, g, b, a);
1854 }
1855}
1856
1857void
1858evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
1859 Evas_GL_Texture *tex,
1860 double sx, double sy, double sw, double sh,
1861 int x, int y, int w, int h,
1862 int r, int g, int b, int a,
1863 Eina_Bool smooth)
1864{
1865 int pnum, nv, nc, nu, nu2, nu3, nt, i;
1866 GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
1867 Eina_Bool blend = 0;
1868 GLuint prog;
1869 int pn = 0;
1870
1871 if (a < 255) blend = 1;
1872
1873 prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a,
1874 SHADER_YUY2_NOMUL, SHADER_YUY2)].prog;
1875
1876 pn = _evas_gl_common_context_push(RTYPE_YUY2,
1877 gc, tex, NULL,
1878 prog,
1879 x, y, w, h,
1880 blend,
1881 smooth,
1882 0, 0, 0, 0, 0);
1883
1884 gc->pipe[pn].region.type = RTYPE_YUY2;
1885 gc->pipe[pn].shader.cur_tex = tex->pt->texture;
1886 gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
1887 gc->pipe[pn].shader.cur_prog = prog;
1888 gc->pipe[pn].shader.smooth = smooth;
1889 gc->pipe[pn].shader.blend = blend;
1890 gc->pipe[pn].shader.render_op = gc->dc->render_op;
1891 gc->pipe[pn].shader.clip = 0;
1892 gc->pipe[pn].shader.cx = 0;
1893 gc->pipe[pn].shader.cy = 0;
1894 gc->pipe[pn].shader.cw = 0;
1895 gc->pipe[pn].shader.ch = 0;
1896 gc->pipe[pn].array.line = 0;
1897 gc->pipe[pn].array.use_vertex = 1;
1898 gc->pipe[pn].array.use_color = 1;
1899 gc->pipe[pn].array.use_texuv = 1;
1900 gc->pipe[pn].array.use_texuv2 = 1;
1901 gc->pipe[pn].array.use_texuv3 = 0;
1902
1903 pipe_region_expand(gc, pn, x, y, w, h);
1904
1905 pnum = gc->pipe[pn].array.num;
1906 nv = pnum * 3; nc = pnum * 4; nu = pnum * 2;
1907 nu2 = pnum * 2; nu3 = pnum * 2; nt = pnum * 4;
1908 gc->pipe[pn].array.num += 6;
1909 array_alloc(gc, pn);
1910
1911 tx1 = (sx) / (double)tex->pt->w;
1912 ty1 = (sy) / (double)tex->pt->h;
1913 tx2 = (sx + sw) / (double)tex->pt->w;
1914 ty2 = (sy + sh) / (double)tex->pt->h;
1915
1916 t2x1 = sx / (double)tex->ptuv->w;
1917 t2y1 = sy / (double)tex->ptuv->h;
1918 t2x2 = (sx + sw) / (double)tex->ptuv->w;
1919 t2y2 = (sy + sh) / (double)tex->ptuv->h;
1920
1921 PUSH_VERTEX(pn, x , y , 0);
1922 PUSH_VERTEX(pn, x + w, y , 0);
1923 PUSH_VERTEX(pn, x , y + h, 0);
1924
1925 PUSH_TEXUV(pn, tx1, ty1);
1926 PUSH_TEXUV(pn, tx2, ty1);
1927 PUSH_TEXUV(pn, tx1, ty2);
1928
1929 PUSH_TEXUV2(pn, t2x1, t2y1);
1930 PUSH_TEXUV2(pn, t2x2, t2y1);
1931 PUSH_TEXUV2(pn, t2x1, t2y2);
1932
1933 PUSH_VERTEX(pn, x + w, y , 0);
1934 PUSH_VERTEX(pn, x + w, y + h, 0);
1935 PUSH_VERTEX(pn, x , y + h, 0);
1936
1937 PUSH_TEXUV(pn, tx2, ty1);
1938 PUSH_TEXUV(pn, tx2, ty2);
1939 PUSH_TEXUV(pn, tx1, ty2);
1940
1941 PUSH_TEXUV2(pn, t2x2, t2y1);
1942 PUSH_TEXUV2(pn, t2x2, t2y2);
1943 PUSH_TEXUV2(pn, t2x1, t2y2);
1944
1945 for (i = 0; i < 6; i++)
1946 {
1947 PUSH_COLOR(pn, r, g, b, a);
1948 }
1949}
1950
1951void
1952evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
1953 Evas_GL_Texture *tex,
1954 double sx, double sy, double sw, double sh,
1955 int x, int y, int w, int h,
1956 int r, int g, int b, int a,
1957 Eina_Bool smooth)
1958{
1959 int pnum, nv, nc, nu, nu2, nu3, nt, i;
1960 GLfloat tx1, tx2, ty1, ty2, t2x1, t2x2, t2y1, t2y2;
1961 Eina_Bool blend = 0;
1962 GLuint prog;
1963 int pn = 0;
1964
1965 if (a < 255) blend = 1;
1966
1967 prog = gc->shared->shader[evas_gl_common_shader_choice(0, NULL, r, g, b, a,
1968 SHADER_NV12_NOMUL, SHADER_NV12)].prog;
1969
1970 pn = _evas_gl_common_context_push(RTYPE_NV12,
1971 gc, tex, NULL,
1972 prog,
1973 x, y, w, h,
1974 blend,
1975 smooth,
1976 0, 0, 0, 0, 0);
1977
1978 gc->pipe[pn].region.type = RTYPE_NV12;
1979 gc->pipe[pn].shader.cur_tex = tex->pt->texture;
1980 gc->pipe[pn].shader.cur_tex_dyn = tex->pt->dyn.img;
1981 gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
1982 gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
1983 gc->pipe[pn].shader.cur_prog = prog;
1984 gc->pipe[pn].shader.smooth = smooth;
1985 gc->pipe[pn].shader.blend = blend;
1986 gc->pipe[pn].shader.render_op = gc->dc->render_op;
1987 gc->pipe[pn].shader.clip = 0;
1988 gc->pipe[pn].shader.cx = 0;
1989 gc->pipe[pn].shader.cy = 0;
1990 gc->pipe[pn].shader.cw = 0;
1991 gc->pipe[pn].shader.ch = 0;
1992 gc->pipe[pn].array.line = 0;
1993 gc->pipe[pn].array.use_vertex = 1;
1994 gc->pipe[pn].array.use_color = 1;
1995 gc->pipe[pn].array.use_texuv = 1;
1996 gc->pipe[pn].array.use_texuv2 = 1;
1997 gc->pipe[pn].array.use_texuv3 = 0;
1998
1999 pipe_region_expand(gc, pn, x, y, w, h);
2000
2001 pnum = gc->pipe[pn].array.num;
2002 nv = pnum * 3; nc = pnum * 4; nu = pnum * 2;
2003 nu2 = pnum * 2; nu3 = pnum * 2; nt = pnum * 4;
2004 gc->pipe[pn].array.num += 6;
2005 array_alloc(gc, pn);
2006
2007 tx1 = (sx) / (double)tex->pt->w;
2008 ty1 = (sy) / (double)tex->pt->h;
2009 tx2 = (sx + sw) / (double)tex->pt->w;
2010 ty2 = (sy + sh) / (double)tex->pt->h;
2011
2012 t2x1 = sx / (double)tex->ptuv->w;
2013 t2y1 = sy / (double)tex->ptuv->h;
2014 t2x2 = (sx + sw) / (double)tex->ptuv->w;
2015 t2y2 = (sy + sh) / (double)tex->ptuv->h;
2016
2017 PUSH_VERTEX(pn, x , y , 0);
2018 PUSH_VERTEX(pn, x + w, y , 0);
2019 PUSH_VERTEX(pn, x , y + h, 0);
2020
2021 PUSH_TEXUV(pn, tx1, ty1);
2022 PUSH_TEXUV(pn, tx2, ty1);
2023 PUSH_TEXUV(pn, tx1, ty2);
2024
2025 PUSH_TEXUV2(pn, t2x1, t2y1);
2026 PUSH_TEXUV2(pn, t2x2, t2y1);
2027 PUSH_TEXUV2(pn, t2x1, t2y2);
2028
2029 PUSH_VERTEX(pn, x + w, y , 0);
2030 PUSH_VERTEX(pn, x + w, y + h, 0);
2031 PUSH_VERTEX(pn, x , y + h, 0);
2032
2033 PUSH_TEXUV(pn, tx2, ty1);
2034 PUSH_TEXUV(pn, tx2, ty2);
2035 PUSH_TEXUV(pn, tx1, ty2);
2036
2037 PUSH_TEXUV2(pn, t2x2, t2y1);
2038 PUSH_TEXUV2(pn, t2x2, t2y2);
2039 PUSH_TEXUV2(pn, t2x1, t2y2);
2040
2041 for (i = 0; i < 6; i++)
2042 {
2043 PUSH_COLOR(pn, r, g, b, a);
2044 }
2045}
2046
2047void
2048evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
2049 Evas_GL_Texture *tex,
2050 int npoints,
2051 RGBA_Map_Point *p,
2052 int clip, int cx, int cy, int cw, int ch,
2053 int r, int g, int b, int a,
2054 Eina_Bool smooth, Eina_Bool tex_only,
2055 Evas_Colorspace cspace)
2056{
2057 int pnum, nv, nc, nu, nu2, nu3, nt, i;
2058 const int points[6] = { 0, 1, 2, 0, 2, 3 };
2059 int x = 0, y = 0, w = 0, h = 0, px = 0, py = 0;
2060 GLfloat tx[4], ty[4], t2x[4], t2y[4];
2061 Eina_Bool blend = 1;
2062 DATA32 cmul;
2063 GLuint prog = gc->shared->shader[SHADER_IMG].prog;
2064 Eina_Bool utexture = EINA_FALSE;
2065 Eina_Bool uvtexture = EINA_FALSE;
2066 int pn = 0;
2067 int flat = 0;
2068
2069 if (!tex->alpha) blend = 0;
2070 if (a < 255) blend = 1;
2071 if (npoints != 4)
2072 {
2073 // FIXME: nash - you didn't fix this for n points. its still all
2074 // 4 point stuff!!! grrrr.
2075 abort();
2076 }
2077 if ((A_VAL(&(p[0].col)) < 0xff) || (A_VAL(&(p[1].col)) < 0xff) ||
2078 (A_VAL(&(p[2].col)) < 0xff) || (A_VAL(&(p[3].col)) < 0xff))
2079 blend = 1;
2080
2081 if ((p[0].z == p[1].z) && (p[1].z == p[2].z) && (p[2].z == p[3].z))
2082 flat = 1;
2083
2084 if (!clip) cx = cy = cw = ch = 0;
2085
2086 if (!flat)
2087 {
2088 if (p[0].foc <= 0) flat = 1;
2089 }
2090
2091 switch (cspace)
2092 {
2093 case EVAS_COLORSPACE_YCBCR422P601_PL:
2094 case EVAS_COLORSPACE_YCBCR422P709_PL:
2095 prog = gc->shared->shader[evas_gl_common_shader_choice(npoints, p, r, g, b, a,
2096 SHADER_YUV_NOMUL, SHADER_YUV)].prog;
2097 utexture = EINA_TRUE;
2098 break;
2099 case EVAS_COLORSPACE_YCBCR422601_PL:
2100 prog = gc->shared->shader[evas_gl_common_shader_choice(npoints, p, r, g, b, a,
2101 SHADER_YUY2_NOMUL, SHADER_YUY2)].prog;
2102 uvtexture = EINA_TRUE;
2103 break;
2104 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
2105 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
2106 prog = gc->shared->shader[evas_gl_common_shader_choice(npoints, p, r, g, b, a,
2107 SHADER_NV12_NOMUL, SHADER_NV12)].prog;
2108 uvtexture = EINA_TRUE;
2109 break;
2110
2111 default:
2112 if (tex_only)
2113 {
2114 if (tex->pt->dyn.img)
2115 {
2116 prog = gc->shared->shader[evas_gl_common_shader_choice(npoints, p, r, g, b, a,
2117 SHADER_IMG_BGRA_NOMUL, SHADER_IMG_BGRA)].prog;
2118 }
2119 else
2120 {
2121 prog = gc->shared->shader[evas_gl_common_shader_choice(npoints, p, r, g, b, a,
2122 SHADER_TEX_NOMUL, SHADER_TEX)].prog;
2123 }
2124 }
2125 else
2126 {
2127 if (tex->gc->shared->info.bgra)
2128 {
2129 prog = gc->shared->shader[evas_gl_common_shader_choice(npoints, p, r, g, b, a,
2130 SHADER_IMG_BGRA_NOMUL,
2131 SHADER_IMG_BGRA)].prog;
2132 }
2133 else
2134 {
2135 prog = gc->shared->shader[evas_gl_common_shader_choice(npoints, p, r, g, b, a,
2136 SHADER_IMG_NOMUL,
2137 SHADER_IMG)].prog;
2138 }
2139 }
2140 }
2141
2142 x = w = (p[0].x >> FP);
2143 y = h = (p[0].y >> FP);
2144 for (i = 0; i < 4; i++)
2145 {
2146 tx[i] = ((double)(tex->x) + (((double)p[i].u) / FP1)) /
2147 (double)tex->pt->w;
2148 ty[i] = ((double)(tex->y) + (((double)p[i].v) / FP1)) /
2149 (double)tex->pt->h;
2150 px = (p[i].x >> FP);
2151 if (px < x) x = px;
2152 else if (px > w) w = px;
2153 py = (p[i].y >> FP);
2154 if (py < y) y = py;
2155 else if (py > h) h = py;
2156 if (utexture)
2157 {
2158 t2x[i] = ((((double)p[i].u / 2) / FP1)) / (double)tex->ptu->w;
2159 t2y[i] = ((((double)p[i].v / 2) / FP1)) / (double)tex->ptu->h;
2160 }
2161 else if (uvtexture)
2162 {
2163 t2x[i] = ((((double)p[i].u / 2) / FP1)) / (double)tex->ptuv->w;
2164 t2y[i] = ((((double)p[i].v / 2) / FP1)) / (double)tex->ptuv->h;
2165 }
2166 }
2167 w = w - x;
2168 h = h - y;
2169
2170 if (clip)
2171 {
2172 int nx = x, ny = y, nw = w, nh = h;
2173
2174 RECTS_CLIP_TO_RECT(nx, ny, nw, nh, cx, cy, cw, ch);
2175 if ((nx == x) && (ny == y) && (nw == w) && (nh == h))
2176 {
2177 clip = 0; cx = 0; cy = 0; cw = 0; ch = 0;
2178 }
2179 x = nx; y = nw; w = nw; h = nh;
2180 }
2181
2182 if (!flat)
2183 {
2184 shader_array_flush(gc);
2185 gc->foc = p[0].foc >> FP;
2186 gc->z0 = p[0].z0 >> FP;
2187 gc->px = p[0].px >> FP;
2188 gc->py = p[0].py >> FP;
2189 gc->change.size = 1;
2190 _evas_gl_common_viewport_set(gc);
2191 }
2192
2193 pn = _evas_gl_common_context_push(RTYPE_MAP,
2194 gc, tex, NULL,
2195 prog,
2196 x, y, w, h,
2197 blend,
2198 smooth,
2199 clip, cx, cy, cw, ch);
2200 gc->pipe[pn].region.type = RTYPE_MAP;
2201 gc->pipe[pn].shader.cur_tex = tex->pt->texture;
2202 if (utexture)
2203 {
2204 gc->pipe[pn].shader.cur_texu = tex->ptu->texture;
2205 gc->pipe[pn].shader.cur_texu_dyn = tex->ptu->dyn.img;
2206 gc->pipe[pn].shader.cur_texv = tex->ptv->texture;
2207 gc->pipe[pn].shader.cur_texv_dyn = tex->ptv->dyn.img;
2208 }
2209 else if (uvtexture)
2210 {
2211 gc->pipe[pn].shader.cur_texu = tex->ptuv->texture;
2212 gc->pipe[pn].shader.cur_texu_dyn = tex->ptuv->dyn.img;
2213 }
2214 gc->pipe[pn].shader.cur_prog = prog;
2215 gc->pipe[pn].shader.smooth = smooth;
2216 gc->pipe[pn].shader.blend = blend;
2217 gc->pipe[pn].shader.render_op = gc->dc->render_op;
2218 gc->pipe[pn].shader.clip = clip;
2219 gc->pipe[pn].shader.cx = cx;
2220 gc->pipe[pn].shader.cy = cy;
2221 gc->pipe[pn].shader.cw = cw;
2222 gc->pipe[pn].shader.ch = ch;
2223 gc->pipe[pn].array.line = 0;
2224 gc->pipe[pn].array.use_vertex = 1;
2225 gc->pipe[pn].array.use_color = 1;
2226 gc->pipe[pn].array.use_texuv = 1;
2227 gc->pipe[pn].array.use_texuv2 = (utexture || uvtexture) ? 1 : 0;
2228 gc->pipe[pn].array.use_texuv3 = (utexture) ? 1 : 0;
2229
2230 pipe_region_expand(gc, pn, x, y, w, h);
2231
2232 pnum = gc->pipe[pn].array.num;
2233 nv = pnum * 3; nc = pnum * 4; nu = pnum * 2; nu2 = pnum * 2;
2234 nu2 = pnum * 2; nu3 = pnum * 2; nt = pnum * 4;
2235 gc->pipe[pn].array.num += 6;
2236 array_alloc(gc, pn);
2237
2238 if ((tex->im) && (tex->im->native.data) && (!tex->im->native.yinvert))
2239 {
2240 for (i = 0; i < 4; i++)
2241 {
2242 ty[i] = 1.0 - ty[i];
2243 if (utexture || uvtexture)
2244 t2y[i] = 1.0 - t2y[i];
2245 }
2246 }
2247
2248 cmul = ARGB_JOIN(a, r, g, b);
2249 for (i = 0; i < 6; i++)
2250 {
2251 DATA32 cl = MUL4_SYM(cmul, p[points[i]].col);
2252 if (flat)
2253 {
2254 PUSH_VERTEX(pn,
2255 (p[points[i]].x >> FP),
2256 (p[points[i]].y >> FP),
2257 0);
2258 }
2259 else
2260 {
2261 PUSH_VERTEX(pn,
2262 (p[points[i]].fx) + gc->shared->ax,
2263 (p[points[i]].fy) + gc->shared->ay,
2264 (p[points[i]].fz)
2265 + (gc->shared->foc - gc->shared->z0));
2266 }
2267 PUSH_TEXUV(pn,
2268 tx[points[i]],
2269 ty[points[i]]);
2270 if (utexture)
2271 {
2272 PUSH_TEXUV2(pn,
2273 t2x[points[i]],
2274 t2y[points[i]]);
2275 PUSH_TEXUV3(pn,
2276 t2x[points[i]],
2277 t2y[points[i]]);
2278 }
2279 else if (uvtexture)
2280 {
2281 PUSH_TEXUV2(pn,
2282 t2x[points[i]],
2283 t2y[points[i]]);
2284 }
2285
2286 PUSH_COLOR(pn,
2287 R_VAL(&cl),
2288 G_VAL(&cl),
2289 B_VAL(&cl),
2290 A_VAL(&cl));
2291 }
2292 if (!flat)
2293 {
2294 shader_array_flush(gc);
2295 gc->foc = 0;
2296 gc->z0 = 0;
2297 gc->px = 0;
2298 gc->py = 0;
2299 gc->change.size = 1;
2300 _evas_gl_common_viewport_set(gc);
2301 }
2302}
2303
2304void
2305evas_gl_common_context_flush(Evas_Engine_GL_Context *gc)
2306{
2307 shader_array_flush(gc);
2308}
2309
2310static void
2311scissor_rot(Evas_Engine_GL_Context *gc __UNUSED__,
2312 int rot, int gw, int gh, int cx, int cy, int cw, int ch)
2313{
2314 switch (rot)
2315 {
2316 case 0: // UP this way: ^
2317 glScissor(cx, cy, cw, ch);
2318 break;
2319 case 90: // UP this way: <
2320 glScissor(gh - (cy + ch), cx, ch, cw);
2321 break;
2322 case 180: // UP this way: v
2323 glScissor(gw - (cx + cw), gh - (cy + ch), cw, ch);
2324 break;
2325 case 270: // UP this way: >
2326 glScissor(cy, gw - (cx + cw), ch, cw);
2327 break;
2328 default: // assume up is up
2329 glScissor(cx, cy, cw, ch);
2330 break;
2331 }
2332}
2333
2334static void
2335shader_array_flush(Evas_Engine_GL_Context *gc)
2336{
2337 int i, gw, gh, setclip, cy, fbo = 0, done = 0;
2338
2339 if (!gc->havestuff) return;
2340 gw = gc->w;
2341 gh = gc->h;
2342 if (!((gc->pipe[0].shader.surface == gc->def_surface) ||
2343 (!gc->pipe[0].shader.surface)))
2344 {
2345 gw = gc->pipe[0].shader.surface->w;
2346 gh = gc->pipe[0].shader.surface->h;
2347 fbo = 1;
2348 }
2349 for (i = 0; i < gc->shared->info.tune.pipes.max; i++)
2350 {
2351 if (gc->pipe[i].array.num <= 0) break;
2352 setclip = 0;
2353 done++;
2354 gc->flushnum++;
2355 GLERR(__FUNCTION__, __FILE__, __LINE__, "<flush err>");
2356 if (gc->pipe[i].shader.cur_prog != gc->state.current.cur_prog)
2357 {
2358 glUseProgram(gc->pipe[i].shader.cur_prog);
2359 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2360 }
2361
2362 if (gc->pipe[i].shader.cur_tex != gc->state.current.cur_tex)
2363 {
2364#if 0
2365 if (gc->pipe[i].shader.cur_tex)
2366 {
2367 glEnable(GL_TEXTURE_2D);
2368 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2369 }
2370 else
2371 {
2372 glDisable(GL_TEXTURE_2D);
2373 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2374 }
2375#endif
2376 glActiveTexture(GL_TEXTURE0);
2377 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2378 glBindTexture(GL_TEXTURE_2D, gc->pipe[i].shader.cur_tex);
2379 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2380 }
2381 if (gc->pipe[i].array.im)
2382 {
2383#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2384 if (gc->pipe[i].array.im->tex->pt->dyn.img)
2385 {
2386 secsym_glEGLImageTargetTexture2DOES
2387 (GL_TEXTURE_2D, gc->pipe[i].array.im->tex->pt->dyn.img);
2388 }
2389 else
2390#endif
2391 {
2392 if (!gc->pipe[i].array.im->native.loose)
2393 {
2394 if (gc->pipe[i].array.im->native.func.bind)
2395 gc->pipe[i].array.im->native.func.bind(gc->pipe[i].array.im->native.func.data,
2396 gc->pipe[i].array.im);
2397 }
2398 }
2399 }
2400 if (gc->pipe[i].shader.render_op != gc->state.current.render_op)
2401 {
2402 switch (gc->pipe[i].shader.render_op)
2403 {
2404 case EVAS_RENDER_BLEND: /**< default op: d = d*(1-sa) + s */
2405 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
2406 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2407 break;
2408 case EVAS_RENDER_COPY: /**< d = s */
2409 gc->pipe[i].shader.blend = 0;
2410 glBlendFunc(GL_ONE, GL_ONE);
2411 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2412 break;
2413 // FIXME: fix blend funcs below!
2414 case EVAS_RENDER_BLEND_REL: /**< d = d*(1 - sa) + s*da */
2415 case EVAS_RENDER_COPY_REL: /**< d = s*da */
2416 case EVAS_RENDER_ADD: /**< d = d + s */
2417 case EVAS_RENDER_ADD_REL: /**< d = d + s*da */
2418 case EVAS_RENDER_SUB: /**< d = d - s */
2419 case EVAS_RENDER_SUB_REL: /**< d = d - s*da */
2420 case EVAS_RENDER_TINT: /**< d = d*s + d*(1 - sa) + s*(1 - da) */
2421 case EVAS_RENDER_TINT_REL: /**< d = d*(1 - sa + s) */
2422 case EVAS_RENDER_MASK: /**< d = d*sa */
2423 case EVAS_RENDER_MUL: /**< d = d*s */
2424 default:
2425 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
2426 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2427 break;
2428 }
2429 }
2430 if (gc->pipe[i].shader.blend != gc->state.current.blend)
2431 {
2432 if (gc->pipe[i].shader.blend)
2433 {
2434 glEnable(GL_BLEND);
2435 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2436 }
2437 else
2438 {
2439 glDisable(GL_BLEND);
2440 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2441 }
2442 }
2443 if ((gc->pipe[i].shader.smooth != gc->state.current.smooth) ||
2444 (gc->pipe[i].shader.cur_tex != gc->state.current.cur_tex))
2445 {
2446 if (gc->pipe[i].shader.smooth)
2447 {
2448#ifdef GL_TEXTURE_MAX_ANISOTROPY_EXT
2449 if (shared->info.anisotropic > 0.0)
2450 {
2451 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, shared->info.anisotropic);
2452 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2453 }
2454#endif
2455 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
2456 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2457 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
2458 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2459 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
2460 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2461 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
2462 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2463 }
2464 else
2465 {
2466#ifdef GL_TEXTURE_MAX_ANISOTROPY_EXT
2467 if (shared->info.anisotropic > 0.0)
2468 {
2469 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.0);
2470 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2471 }
2472#endif
2473 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
2474 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2475 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
2476 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2477 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
2478 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2479 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
2480 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2481 }
2482 }
2483 if (gc->pipe[i].shader.clip != gc->state.current.clip)
2484 {
2485
2486 if (gc->pipe[i].shader.clip)
2487 {
2488 cy = gh - gc->pipe[i].shader.cy - gc->pipe[i].shader.ch;
2489 if (fbo) cy = gc->pipe[i].shader.cy;
2490 glEnable(GL_SCISSOR_TEST);
2491 if (!fbo)
2492 scissor_rot(gc, gc->rot, gw, gh,
2493 gc->pipe[i].shader.cx,
2494 cy,
2495 gc->pipe[i].shader.cw,
2496 gc->pipe[i].shader.ch);
2497 else
2498 glScissor(gc->pipe[i].shader.cx, cy,
2499 gc->pipe[i].shader.cw, gc->pipe[i].shader.ch);
2500 setclip = 1;
2501 }
2502 else
2503 {
2504 glDisable(GL_SCISSOR_TEST);
2505 glScissor(0, 0, 0, 0);
2506 }
2507 }
2508 if ((gc->pipe[i].shader.clip) && (!setclip))
2509 {
2510 if ((gc->pipe[i].shader.cx != gc->state.current.cx) ||
2511 (gc->pipe[i].shader.cy != gc->state.current.cy) ||
2512 (gc->pipe[i].shader.cw != gc->state.current.cw) ||
2513 (gc->pipe[i].shader.ch != gc->state.current.ch))
2514 {
2515 cy = gh - gc->pipe[i].shader.cy - gc->pipe[i].shader.ch;
2516 if (fbo) cy = gc->pipe[i].shader.cy;
2517 if (!fbo)
2518 scissor_rot(gc, gc->rot, gw, gh,
2519 gc->pipe[i].shader.cx,
2520 cy,
2521 gc->pipe[i].shader.cw,
2522 gc->pipe[i].shader.ch);
2523 else
2524 glScissor(gc->pipe[i].shader.cx, cy,
2525 gc->pipe[i].shader.cw, gc->pipe[i].shader.ch);
2526 }
2527 }
2528
2529 glVertexAttribPointer(SHAD_VERTEX, 3, GL_SHORT, GL_FALSE, 0, gc->pipe[i].array.vertex);
2530 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2531 glVertexAttribPointer(SHAD_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, gc->pipe[i].array.color);
2532 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2533 if (gc->pipe[i].array.use_texuv)
2534 {
2535 glEnableVertexAttribArray(SHAD_TEXUV);
2536 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2537 glVertexAttribPointer(SHAD_TEXUV, 2, GL_FLOAT, GL_FALSE, 0, gc->pipe[i].array.texuv);
2538 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2539 }
2540 else
2541 {
2542 glDisableVertexAttribArray(SHAD_TEXUV);
2543 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2544 }
2545
2546 if (gc->pipe[i].array.line)
2547 {
2548 glDisableVertexAttribArray(SHAD_TEXUV);
2549 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2550 glDisableVertexAttribArray(SHAD_TEXUV2);
2551 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2552 glDisableVertexAttribArray(SHAD_TEXUV3);
2553 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2554 glDrawArrays(GL_LINES, 0, gc->pipe[i].array.num);
2555 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2556 }
2557 else
2558 {
2559 if (gc->pipe[i].array.use_texm)
2560 {
2561 glEnableVertexAttribArray(SHAD_TEXM);
2562 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2563 glVertexAttribPointer(SHAD_TEXM, 2, GL_FLOAT, GL_FALSE, 0, gc->pipe[i].array.texm);
2564 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2565 glActiveTexture(GL_TEXTURE1);
2566 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2567 glBindTexture(GL_TEXTURE_2D, gc->pipe[i].shader.cur_texm);
2568 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2569 glActiveTexture(GL_TEXTURE0);
2570 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2571 }
2572 else
2573 {
2574 glDisableVertexAttribArray(SHAD_TEXM);
2575 }
2576 if ((gc->pipe[i].array.use_texuv2) && (gc->pipe[i].array.use_texuv3))
2577 {
2578 glEnableVertexAttribArray(SHAD_TEXUV2);
2579 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2580 glEnableVertexAttribArray(SHAD_TEXUV3);
2581 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2582 glVertexAttribPointer(SHAD_TEXUV2, 2, GL_FLOAT, GL_FALSE, 0, gc->pipe[i].array.texuv2);
2583 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2584 glVertexAttribPointer(SHAD_TEXUV3, 2, GL_FLOAT, GL_FALSE, 0, gc->pipe[i].array.texuv3);
2585 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2586
2587 glActiveTexture(GL_TEXTURE1);
2588 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2589 glBindTexture(GL_TEXTURE_2D, gc->pipe[i].shader.cur_texu);
2590 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2591#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2592 if (gc->pipe[i].shader.cur_texu_dyn)
2593 secsym_glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, gc->pipe[i].shader.cur_texu_dyn);
2594#endif
2595
2596 glActiveTexture(GL_TEXTURE2);
2597 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2598 glBindTexture(GL_TEXTURE_2D, gc->pipe[i].shader.cur_texv);
2599 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2600#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2601 if (gc->pipe[i].shader.cur_texv_dyn)
2602 secsym_glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, gc->pipe[i].shader.cur_texv_dyn);
2603#endif
2604 glActiveTexture(GL_TEXTURE0);
2605 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2606 }
2607 else if (gc->pipe[i].array.use_texuv2)
2608 {
2609 glEnableVertexAttribArray(SHAD_TEXUV2);
2610 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2611 glVertexAttribPointer(SHAD_TEXUV2, 2, GL_FLOAT, GL_FALSE, 0, gc->pipe[i].array.texuv2);
2612 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2613
2614 glActiveTexture(GL_TEXTURE1);
2615 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2616 glBindTexture(GL_TEXTURE_2D, gc->pipe[i].shader.cur_texu);
2617 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2618#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2619 if (gc->pipe[i].shader.cur_texu_dyn)
2620 secsym_glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, gc->pipe[i].shader.cur_texu_dyn);
2621#endif
2622 glActiveTexture(GL_TEXTURE0);
2623 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2624 }
2625 else
2626 {
2627 glDisableVertexAttribArray(SHAD_TEXUV2);
2628 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2629 glDisableVertexAttribArray(SHAD_TEXUV3);
2630 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2631 }
2632 if (dbgflushnum)
2633 {
2634 const char *types[6] =
2635 {"----", "RECT", "IMAG", "FONT", "YUV-", "MAP"};
2636 printf(" DRAW#%3i %4i -> %p[%4ix%4i] @ %4ix%4i -{ tex %4i type %s }-\n",
2637 i,
2638 gc->pipe[i].array.num / 6,
2639 gc->pipe[0].shader.surface,
2640 gc->pipe[0].shader.surface->w,
2641 gc->pipe[0].shader.surface->h,
2642 gw, gh,
2643 gc->pipe[i].shader.cur_tex,
2644 types[gc->pipe[i].region.type]
2645 );
2646 }
2647 glDrawArrays(GL_TRIANGLES, 0, gc->pipe[i].array.num);
2648 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2649 }
2650 if (gc->pipe[i].array.im)
2651 {
2652 if (!gc->pipe[i].array.im->native.loose)
2653 {
2654 if (gc->pipe[i].array.im->native.func.unbind)
2655 gc->pipe[i].array.im->native.func.unbind(gc->pipe[i].array.im->native.func.data,
2656 gc->pipe[i].array.im);
2657 }
2658 gc->pipe[i].array.im = NULL;
2659 }
2660
2661 gc->state.current.cur_prog = gc->pipe[i].shader.cur_prog;
2662 gc->state.current.cur_tex = gc->pipe[i].shader.cur_tex;
2663 gc->state.current.render_op = gc->pipe[i].shader.render_op;
2664 gc->state.current.cx = gc->pipe[i].shader.cx;
2665 gc->state.current.cy = gc->pipe[i].shader.cy;
2666 gc->state.current.cw = gc->pipe[i].shader.cw;
2667 gc->state.current.ch = gc->pipe[i].shader.ch;
2668 gc->state.current.smooth = gc->pipe[i].shader.smooth;
2669 gc->state.current.blend = gc->pipe[i].shader.blend;
2670 gc->state.current.clip = gc->pipe[i].shader.clip;
2671
2672 if (gc->pipe[i].array.vertex) free(gc->pipe[i].array.vertex);
2673 if (gc->pipe[i].array.color) free(gc->pipe[i].array.color);
2674 if (gc->pipe[i].array.texuv) free(gc->pipe[i].array.texuv);
2675 if (gc->pipe[i].array.texm) free(gc->pipe[i].array.texm);
2676 if (gc->pipe[i].array.texuv2) free(gc->pipe[i].array.texuv2);
2677 if (gc->pipe[i].array.texuv3) free(gc->pipe[i].array.texuv3);
2678
2679 gc->pipe[i].array.vertex = NULL;
2680 gc->pipe[i].array.color = NULL;
2681 gc->pipe[i].array.texuv = NULL;
2682 gc->pipe[i].array.texm = NULL;
2683 gc->pipe[i].array.texuv2 = NULL;
2684 gc->pipe[i].array.texuv3 = NULL;
2685
2686 gc->pipe[i].array.num = 0;
2687 gc->pipe[i].array.alloc = 0;
2688
2689 gc->pipe[i].region.x = 0;
2690 gc->pipe[i].region.y = 0;
2691 gc->pipe[i].region.w = 0;
2692 gc->pipe[i].region.h = 0;
2693 gc->pipe[i].region.type = 0;
2694 }
2695 gc->state.top_pipe = 0;
2696 if (dbgflushnum)
2697 {
2698 if (done > 0) printf("DONE (pipes): %i\n", done);
2699 }
2700 gc->havestuff = EINA_FALSE;
2701}
2702
2703Eina_Bool
2704evas_gl_common_module_open(void)
2705{
2706 if (_evas_engine_GL_common_log_dom < 0)
2707 _evas_engine_GL_common_log_dom = eina_log_domain_register
2708 ("evas-gl_common", EVAS_DEFAULT_LOG_COLOR);
2709 if (_evas_engine_GL_common_log_dom < 0)
2710 {
2711 EINA_LOG_ERR("Can not create a module log domain.");
2712 return EINA_FALSE;
2713 }
2714 return EINA_TRUE;
2715}
2716
2717void
2718evas_gl_common_module_close(void)
2719{
2720 if (_evas_engine_GL_common_log_dom < 0) return;
2721 eina_log_domain_unregister(_evas_engine_GL_common_log_dom);
2722 _evas_engine_GL_common_log_dom = -1;
2723}
diff --git a/libraries/evas/src/modules/engines/gl_common/evas_gl_filter.c b/libraries/evas/src/modules/engines/gl_common/evas_gl_filter.c
new file mode 100644
index 0000000..a9d18d8
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/evas_gl_filter.c
@@ -0,0 +1,181 @@
1#include "evas_gl_private.h"
2
3#if 0 // filtering disabled
4void
5evas_gl_common_filter_draw(Evas_Engine_GL_Context *gc, Evas_GL_Image *im, Evas_Filter_Info *filter)
6{
7 RGBA_Draw_Context *dc;
8 GLuint prog;
9 int r,g,b,a;
10 int nomul, bgra;
11
12 dc = gc->dc;
13
14 if (dc->mul.use)
15 {
16 a = (dc->mul.col >> 24) & 0xff;
17 r = (dc->mul.col >> 16) & 0xff;
18 g = (dc->mul.col >> 8 ) & 0xff;
19 b = (dc->mul.col ) & 0xff;
20 }
21 else
22 {
23 r = g = b = a = 255;
24 }
25
26 nomul = (a == 255 && r == 255 && g == 255 && b == 255) ? 1 : 0;
27 bgra = (gc->shared->info.bgra) ? 1 : 0;
28
29 /* FIXME: This should so be a table */
30#if 0
31 if (filter->filter == EVAS_FILTER_BLUR)
32 {
33 if (bgra)
34 {
35 if (nomul)
36 prog = gc->shared->shader.filter_blur_bgra_nomul.prog;
37 else
38 prog = gc->shared->shader.filter_blur_bgra.prog;
39 }
40 else
41 {
42 if (a == 255 && r == 255 && g == 255 && b == 255)
43 prog = gc->shared->shader.filter_blur_nomul.prog;
44 else
45 prog = gc->shared->shader.filter_blur.prog;
46 }
47 }
48 else
49#endif
50 if (filter->filter == EVAS_FILTER_INVERT)
51 {
52 if (bgra)
53 {
54 if (nomul)
55 prog = gc->shared->shader.filter_invert_bgra_nomul.prog;
56 else
57 prog = gc->shared->shader.filter_invert_bgra.prog;
58 }
59 else
60 {
61 if (a == 255 && r == 255 && g == 255 && b == 255)
62 prog = gc->shared->shader.filter_invert_nomul.prog;
63 else
64 prog = gc->shared->shader.filter_invert.prog;
65 }
66 }
67 else if (filter->filter == EVAS_FILTER_SEPIA)
68 {
69 if (bgra)
70 {
71 if (nomul)
72 prog = gc->shared->shader.filter_sepia_bgra_nomul.prog;
73 else
74 prog = gc->shared->shader.filter_sepia_bgra.prog;
75 }
76 else
77 {
78 if (nomul)
79 prog = gc->shared->shader.filter_sepia_nomul.prog;
80 else
81 prog = gc->shared->shader.filter_sepia.prog;
82 }
83
84 }
85 else /*if (filter->filter == EVAS_FILTER_GREYSCALE)*/
86 {
87 printf("BGRA: %s Nomul: %s\n",bgra?"true":"false",nomul?"nomul":"mul");
88 if (bgra)
89 {
90 if (nomul)
91 prog = gc->shared->shader.filter_greyscale_bgra_nomul.prog;
92 else
93 prog = gc->shared->shader.filter_greyscale_bgra.prog;
94 }
95 else
96 {
97 if (nomul)
98 prog = gc->shared->shader.filter_greyscale_nomul.prog;
99 else
100 prog = gc->shared->shader.filter_greyscale.prog;
101 }
102
103 }
104
105 printf("Prog: %d %d %d\n",prog,im->w,im->h);
106 gc->filter_prog = prog;
107 evas_gl_common_image_update(gc, im);
108 evas_gl_common_context_image_push(gc, im->tex, 0, 0, im->w, im->h,
109 0, 0, im->w, im->h,
110 r,g,b,a,
111 1, im->tex_only);
112 gc->filter_prog = 0;
113}
114
115
116Filtered_Image *
117evas_gl_common_image_filtered_get(Evas_GL_Image *im, uint8_t *key, size_t len)
118{
119 Filtered_Image *fi;
120 Eina_List *l;
121
122 for (l = im->filtered ; l ; l = l->next)
123 {
124 fi = l->data;
125 if (fi->keylen != len) continue;
126 if (memcmp(key, fi->key, len) != 0) continue;
127 fi->ref ++;
128 return fi;
129 }
130
131 return NULL;
132}
133
134Filtered_Image *
135evas_gl_common_image_filtered_save(Evas_GL_Image *im, Evas_GL_Image *fimage,
136 uint8_t *key, size_t keylen)
137{
138 Filtered_Image *fi;
139 Eina_List *l;
140
141 for (l = im->filtered ; l ; l = l->next)
142 {
143 fi = l->data;
144 if (fi->keylen != keylen) continue;
145 if (memcmp(key, fi->key, keylen) != 0) continue;
146
147 fi->image = (void *)fimage;
148 fi->ref ++;
149 return fi;
150 }
151
152 fi = calloc(1,sizeof(Filtered_Image));
153 if (!fi) return NULL;
154
155 fi->keylen = keylen;
156 fi->key = malloc(keylen);
157 memcpy(fi->key, key, keylen);
158 fi->image = (void *)fimage;
159 fi->ref = 1;
160
161 im->filtered = eina_list_prepend(im->filtered, fi);
162
163 return fi;
164}
165
166void
167evas_gl_common_image_filtered_free(Evas_GL_Image *image, Filtered_Image *fi)
168{
169 fi->ref --;
170 if (fi->ref) return;
171
172 free(fi->key);
173 evas_gl_common_image_free((void *)fi->image);
174 fi->image = NULL;
175
176 image->filtered = eina_list_remove(image->filtered, fi);
177}
178#endif
179
180
181/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/
diff --git a/libraries/evas/src/modules/engines/gl_common/evas_gl_font.c b/libraries/evas/src/modules/engines/gl_common/evas_gl_font.c
new file mode 100644
index 0000000..e5f3a4a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/evas_gl_font.c
@@ -0,0 +1,203 @@
1#include "evas_gl_private.h"
2
3void *
4evas_gl_font_texture_new(void *context, RGBA_Font_Glyph *fg)
5{
6 Evas_Engine_GL_Context *gc = context;
7 Evas_GL_Texture *tex;
8 DATA8 *data;
9 int w, h, j, nw;
10 DATA8 *ndata;
11 int fh;
12
13 if (fg->ext_dat) return fg->ext_dat; // FIXME: one engine at a time can do this :(
14
15 w = fg->glyph_out->bitmap.width;
16 h = fg->glyph_out->bitmap.rows;
17 if ((w == 0) || (h == 0)) return NULL;
18
19 data = fg->glyph_out->bitmap.buffer;
20 j = fg->glyph_out->bitmap.pitch;
21 if (j < w) j = w;
22
23 nw = ((w + 3) / 4) * 4;
24 ndata = alloca(nw *h);
25 if (!ndata) return NULL;
26 if (fg->glyph_out->bitmap.num_grays == 256)
27 {
28 int x, y;
29 DATA8 *p1, *p2;
30
31 for (y = 0; y < h; y++)
32 {
33 p1 = data + (j * y);
34 p2 = ndata + (nw * y);
35 for (x = 0; x < w; x++)
36 {
37 *p2 = *p1;
38 p1++;
39 p2++;
40 }
41 }
42 }
43 else if (fg->glyph_out->bitmap.num_grays == 0)
44 {
45 DATA8 *tmpbuf = NULL, *dp, *tp, bits;
46 int bi, bj, end;
47 const DATA8 bitrepl[2] = {0x0, 0xff};
48
49 tmpbuf = alloca(w);
50 if (tmpbuf)
51 {
52 int x, y;
53 DATA8 *p1, *p2;
54
55 for (y = 0; y < h; y++)
56 {
57 p1 = tmpbuf;
58 p2 = ndata + (nw * y);
59 tp = tmpbuf;
60 dp = data + (y * fg->glyph_out->bitmap.pitch);
61 for (bi = 0; bi < w; bi += 8)
62 {
63 bits = *dp;
64 if ((w - bi) < 8) end = w - bi;
65 else end = 8;
66 for (bj = 0; bj < end; bj++)
67 {
68 *tp = bitrepl[(bits >> (7 - bj)) & 0x1];
69 tp++;
70 }
71 dp++;
72 }
73 for (x = 0; x < w; x++)
74 {
75 *p2 = *p1;
76 p1++;
77 p2++;
78 }
79 }
80 }
81 }
82// fh = h;
83 fh = fg->fi->max_h;
84 tex = evas_gl_common_texture_alpha_new(gc, ndata, w, h, fh);
85 tex->sx1 = ((double)(tex->x)) / (double)tex->pt->w;
86 tex->sy1 = ((double)(tex->y)) / (double)tex->pt->h;
87 tex->sx2 = ((double)(tex->x + tex->w)) / (double)tex->pt->w;
88 tex->sy2 = ((double)(tex->y + tex->h)) / (double)tex->pt->h;
89 return tex;
90}
91
92void
93evas_gl_font_texture_free(void *tex)
94{
95 if (!tex) return;
96 evas_gl_common_texture_free(tex);
97}
98
99void
100evas_gl_font_texture_draw(void *context, void *surface __UNUSED__, void *draw_context, RGBA_Font_Glyph *fg, int x, int y)
101{
102 Evas_Engine_GL_Context *gc = context;
103 RGBA_Draw_Context *dc = draw_context;
104 Evas_GL_Texture *tex;
105 Cutout_Rects *rects;
106 Cutout_Rect *rct;
107 int r, g, b, a;
108 double ssx, ssy, ssw, ssh;
109 int c, cx, cy, cw, ch;
110 int i;
111 int sx, sy, sw, sh;
112
113 if (dc != gc->dc) return;
114 tex = fg->ext_dat;
115 if (!tex) return;
116 a = (dc->col.col >> 24) & 0xff;
117 if (a == 0) return;
118 r = (dc->col.col >> 16) & 0xff;
119 g = (dc->col.col >> 8 ) & 0xff;
120 b = (dc->col.col ) & 0xff;
121 sx = 0; sy = 0; sw = tex->w, sh = tex->h;
122 if ((!gc->dc->cutout.rects) ||
123 ((gc->shared->info.tune.cutout.max > 0) &&
124 (gc->dc->cutout.active > gc->shared->info.tune.cutout.max)))
125 {
126 if (gc->dc->clip.use)
127 {
128 int nx, ny, nw, nh;
129
130 nx = x; ny = y; nw = tex->w; nh = tex->h;
131 RECTS_CLIP_TO_RECT(nx, ny, nw, nh,
132 gc->dc->clip.x, gc->dc->clip.y,
133 gc->dc->clip.w, gc->dc->clip.h);
134 if ((nw < 1) || (nh < 1)) return;
135 if ((nx == x) && (ny == y) && (nw == tex->w) && (nh == tex->h))
136 {
137 evas_gl_common_context_font_push(gc, tex,
138 0.0, 0.0, 0.0, 0.0,
139// sx, sy, sw, sh,
140 x, y, tex->w, tex->h,
141 r, g, b, a);
142 return;
143 }
144 ssx = (double)sx + ((double)(sw * (nx - x)) / (double)(tex->w));
145 ssy = (double)sy + ((double)(sh * (ny - y)) / (double)(tex->h));
146 ssw = ((double)sw * (double)(nw)) / (double)(tex->w);
147 ssh = ((double)sh * (double)(nh)) / (double)(tex->h);
148 evas_gl_common_context_font_push(gc, tex,
149 ssx, ssy, ssw, ssh,
150 nx, ny, nw, nh,
151 r, g, b, a);
152 }
153 else
154 {
155 evas_gl_common_context_font_push(gc, tex,
156 0.0, 0.0, 0.0, 0.0,
157// sx, sy, sw, sh,
158 x, y, tex->w, tex->h,
159 r, g, b, a);
160 }
161 return;
162 }
163 /* save out clip info */
164 c = gc->dc->clip.use; cx = gc->dc->clip.x; cy = gc->dc->clip.y; cw = gc->dc->clip.w; ch = gc->dc->clip.h;
165 evas_common_draw_context_clip_clip(gc->dc, 0, 0, gc->w, gc->h);
166 evas_common_draw_context_clip_clip(gc->dc, x, y, tex->w, tex->h);
167 /* our clip is 0 size.. abort */
168 if ((gc->dc->clip.w <= 0) || (gc->dc->clip.h <= 0))
169 {
170 gc->dc->clip.use = c; gc->dc->clip.x = cx; gc->dc->clip.y = cy; gc->dc->clip.w = cw; gc->dc->clip.h = ch;
171 return;
172 }
173 rects = evas_common_draw_context_apply_cutouts(dc);
174 for (i = 0; i < rects->active; ++i)
175 {
176 int nx, ny, nw, nh;
177
178 rct = rects->rects + i;
179 nx = x; ny = y; nw = tex->w; nh = tex->h;
180 RECTS_CLIP_TO_RECT(nx, ny, nw, nh, rct->x, rct->y, rct->w, rct->h);
181 if ((nw < 1) || (nh < 1)) continue;
182 if ((nx == x) && (ny == y) && (nw == tex->w) && (nh == tex->h))
183 {
184 evas_gl_common_context_font_push(gc, tex,
185 0.0, 0.0, 0.0, 0.0,
186// sx, sy, sw, sh,
187 x, y, tex->w, tex->h,
188 r, g, b, a);
189 continue;
190 }
191 ssx = (double)sx + ((double)(sw * (nx - x)) / (double)(tex->w));
192 ssy = (double)sy + ((double)(sh * (ny - y)) / (double)(tex->h));
193 ssw = ((double)sw * (double)(nw)) / (double)(tex->w);
194 ssh = ((double)sh * (double)(nh)) / (double)(tex->h);
195 evas_gl_common_context_font_push(gc, tex,
196 ssx, ssy, ssw, ssh,
197 nx, ny, nw, nh,
198 r, g, b, a);
199 }
200 evas_common_draw_context_apply_clear_cutouts(rects);
201 /* restore clip info */
202 gc->dc->clip.use = c; gc->dc->clip.x = cx; gc->dc->clip.y = cy; gc->dc->clip.w = cw; gc->dc->clip.h = ch;
203}
diff --git a/libraries/evas/src/modules/engines/gl_common/evas_gl_image.c b/libraries/evas/src/modules/engines/gl_common/evas_gl_image.c
new file mode 100644
index 0000000..1d4b1f8
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/evas_gl_image.c
@@ -0,0 +1,968 @@
1#include "evas_gl_private.h"
2
3void
4evas_gl_common_image_all_unload(Evas_Engine_GL_Context *gc)
5{
6 Eina_List *l;
7 Evas_GL_Image *im;
8
9 EINA_LIST_FOREACH(gc->shared->images, l, im)
10 {
11 if (im->im) evas_cache_image_unload_data(&im->im->cache_entry);
12 if (im->tex)
13 {
14 if (!im->tex->pt->dyn.img)
15 {
16 evas_gl_common_texture_free(im->tex);
17 im->tex = NULL;
18 }
19 }
20 }
21}
22
23static void
24_evas_gl_image_cache_trim(Evas_Engine_GL_Context *gc)
25{
26 int size = evas_common_image_get_cache();
27
28 while (gc->shared->images_size > size)
29 {
30 Evas_GL_Image *im2;
31 Eina_List *l = NULL;
32
33 EINA_LIST_REVERSE_FOREACH(gc->shared->images, l, im2)
34 {
35 if (im2->references == 0)
36 {
37 im2->cached = 0;
38 im2->gc->shared->images =
39 eina_list_remove_list(im2->gc->shared->images, l);
40 im2->gc->shared->images_size -= (im2->csize);
41 evas_gl_common_image_free(im2);
42 l = NULL;
43 break;
44 }
45 }
46 if ((gc->shared->images_size > size) && (l))
47 {
48// printf("EEK %i > %i, no 0 ref imgs\n",
49// gc->shared->images_size, size);
50 break;
51 }
52 if (!gc->shared->images)
53 {
54// printf("EEK %i > %i, no imgs\n",
55// gc->shared->images_size, size);
56 break;
57 }
58 }
59}
60
61static Eina_Bool
62_evas_gl_image_cache_add(Evas_GL_Image *im)
63{
64 if (im->references == 0)
65 {
66 im->csize = im->w * im->h * 4;
67 im->gc->shared->images_size += im->csize;
68 _evas_gl_image_cache_trim(im->gc);
69 return EINA_TRUE;
70 }
71 else
72 {
73 im->gc->shared->images = eina_list_remove(im->gc->shared->images, im);
74 im->cached = 0;
75 }
76 return EINA_FALSE;
77}
78
79void
80evas_gl_common_image_ref(Evas_GL_Image *im)
81{
82 if (im->references == 0)
83 {
84 im->gc->shared->images_size -= (im->csize);
85 }
86 im->references++;
87}
88
89void
90evas_gl_common_image_unref(Evas_GL_Image *im)
91{
92 im->references--;
93 if (im->references == 0)
94 {
95 _evas_gl_image_cache_add(im);
96 }
97}
98
99Evas_GL_Image *
100evas_gl_common_image_load(Evas_Engine_GL_Context *gc, const char *file, const char *key, Evas_Image_Load_Opts *lo, int *error)
101{
102 Evas_GL_Image *im;
103 RGBA_Image *im_im;
104 Eina_List *l;
105
106 im_im = evas_common_load_image_from_file(file, key, lo, error);
107 if (!im_im) return NULL;
108
109 /* i'd LOVe to do this, but we can't because we load to load header
110 * to get image size to know if its too big or not! so this disallows
111 * us to know that - photocam thus suffers
112 if (((int)im_im->cache_entry.w > gc->shared->info.max_texture_size) ||
113 ((int)im_im->cache_entry.h > gc->shared->info.max_texture_size))
114 {
115 evas_cache_image_drop(&(im_im->cache_entry));
116 *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
117 return NULL;
118 }
119 */
120
121 // FIXME: keep unreffed shared images around
122 EINA_LIST_FOREACH(gc->shared->images, l, im)
123 {
124 if (im->im == im_im)
125 {
126// why did i put this here? i think to free the rgba pixel data once a texture
127// exists.
128// evas_cache_image_drop(&(im_im->cache_entry));
129 gc->shared->images = eina_list_remove_list(gc->shared->images, l);
130 gc->shared->images = eina_list_prepend(gc->shared->images, im);
131 evas_gl_common_image_ref(im);
132 *error = EVAS_LOAD_ERROR_NONE;
133 return im;
134 }
135 }
136
137 im = calloc(1, sizeof(Evas_GL_Image));
138 if (!im)
139 {
140 evas_cache_image_drop(&(im_im->cache_entry));
141 *error = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
142 return NULL;
143 }
144 im->references = 1;
145 im->im = im_im;
146 im->gc = gc;
147 im->cached = 1;
148 im->cs.space = EVAS_COLORSPACE_ARGB8888;
149 im->alpha = im->im->cache_entry.flags.alpha;
150 im->w = im->im->cache_entry.w;
151 im->h = im->im->cache_entry.h;
152 if (lo) im->load_opts = *lo;
153 gc->shared->images = eina_list_prepend(gc->shared->images, im);
154 return im;
155}
156
157Evas_GL_Image *
158evas_gl_common_image_new_from_data(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, DATA32 *data, int alpha, int cspace)
159{
160 Evas_GL_Image *im;
161 Eina_List *l;
162
163 if (((int)w > gc->shared->info.max_texture_size) ||
164 ((int)h > gc->shared->info.max_texture_size))
165 return NULL;
166
167 if (data)
168 {
169 EINA_LIST_FOREACH(gc->shared->images, l, im)
170 {
171 if (((void *)(im->im->image.data) == (void *)data) &&
172 (im->im->cache_entry.w == w) &&
173 (im->im->cache_entry.h == h))
174 {
175 gc->shared->images = eina_list_remove_list(gc->shared->images, l);
176 gc->shared->images = eina_list_prepend(gc->shared->images, im);
177 evas_gl_common_image_ref(im);
178 return im;
179 }
180 }
181 }
182 im = calloc(1, sizeof(Evas_GL_Image));
183 if (!im) return NULL;
184 im->references = 1;
185 im->im = (RGBA_Image *) evas_cache_image_data(evas_common_image_cache_get(),
186 w, h, data, alpha, cspace);
187 if (!im->im)
188 {
189 free(im);
190 return NULL;
191 }
192 im->gc = gc;
193 im->cs.space = cspace;
194 im->alpha = im->im->cache_entry.flags.alpha;
195 im->w = im->im->cache_entry.w;
196 im->h = im->im->cache_entry.h;
197 switch (cspace)
198 {
199 case EVAS_COLORSPACE_ARGB8888:
200 break;
201 case EVAS_COLORSPACE_YCBCR422P601_PL:
202 case EVAS_COLORSPACE_YCBCR422P709_PL:
203 if (im->tex) evas_gl_common_texture_free(im->tex);
204 im->tex = NULL;
205 im->cs.data = data;
206 im->cs.no_free = 1;
207 break;
208 default:
209 abort();
210 break;
211 }
212 return im;
213}
214
215Evas_GL_Image *
216evas_gl_common_image_new_from_copied_data(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, DATA32 *data, int alpha, int cspace)
217{
218 Evas_GL_Image *im;
219
220 if (((int)w > gc->shared->info.max_texture_size) ||
221 ((int)h > gc->shared->info.max_texture_size))
222 return NULL;
223
224 im = calloc(1, sizeof(Evas_GL_Image));
225 if (!im) return NULL;
226 im->references = 1;
227 im->im = (RGBA_Image *) evas_cache_image_copied_data(evas_common_image_cache_get(),
228 w, h, data, alpha, cspace);
229 if (!im->im)
230 {
231 free(im);
232 return NULL;
233 }
234 im->gc = gc;
235 im->cs.space = cspace;
236 im->alpha = im->im->cache_entry.flags.alpha;
237 im->w = im->im->cache_entry.w;
238 im->h = im->im->cache_entry.h;
239 switch (cspace)
240 {
241 case EVAS_COLORSPACE_ARGB8888:
242 break;
243 case EVAS_COLORSPACE_YCBCR422P601_PL:
244 case EVAS_COLORSPACE_YCBCR422P709_PL:
245 if (im->tex) evas_gl_common_texture_free(im->tex);
246 im->tex = NULL;
247 im->cs.no_free = 0;
248 if (im->im->cache_entry.h > 0)
249 im->cs.data = calloc(1, im->im->cache_entry.h * sizeof(unsigned char *) * 2);
250 if ((data) && (im->cs.data))
251 memcpy(im->cs.data, data, im->im->cache_entry.h * sizeof(unsigned char *) * 2);
252 break;
253 default:
254 abort();
255 break;
256 }
257 return im;
258}
259
260Evas_GL_Image *
261evas_gl_common_image_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, int cspace)
262{
263 Evas_GL_Image *im;
264
265 if (((int)w > gc->shared->info.max_texture_size) ||
266 ((int)h > gc->shared->info.max_texture_size))
267 return NULL;
268
269 im = calloc(1, sizeof(Evas_GL_Image));
270 if (!im) return NULL;
271 im->references = 1;
272 im->im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
273 if (!im->im)
274 {
275 free(im);
276 return NULL;
277 }
278 im->gc = gc;
279 im->im->cache_entry.flags.alpha = alpha ? 1 : 0;
280 im->cs.space = cspace;
281 im->alpha = im->im->cache_entry.flags.alpha;
282 im->im->cache_entry.w = w;
283 im->im->cache_entry.h = h;
284 im->w = im->im->cache_entry.w;
285 im->h = im->im->cache_entry.h;
286 evas_cache_image_colorspace(&im->im->cache_entry, cspace);
287 im->im = (RGBA_Image *)evas_cache_image_size_set(&im->im->cache_entry, w, h);
288 switch (cspace)
289 {
290 case EVAS_COLORSPACE_ARGB8888:
291 break;
292 case EVAS_COLORSPACE_YCBCR422P601_PL:
293 case EVAS_COLORSPACE_YCBCR422P709_PL:
294 case EVAS_COLORSPACE_YCBCR422601_PL:
295 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
296 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
297// if (im->tex) evas_gl_common_texture_free(im->tex);
298 im->tex = NULL;
299 im->cs.no_free = 0;
300 if (im->im->cache_entry.h > 0)
301 im->cs.data = calloc(1, im->im->cache_entry.h * sizeof(unsigned char *) * 2);
302 break;
303 default:
304 abort();
305 break;
306 }
307 return im;
308}
309
310Evas_GL_Image *
311evas_gl_common_image_alpha_set(Evas_GL_Image *im, int alpha)
312{
313 if (!im) return NULL;
314 if (im->alpha == alpha) return im;
315 im->alpha = alpha;
316 if (!im->im) return im;
317 im->im->cache_entry.flags.alpha = alpha ? 1 : 0;
318 if (im->tex)
319 {
320 evas_gl_common_texture_free(im->tex);
321 im->tex = NULL;
322 }
323 if (!im->tex)
324 im->tex = evas_gl_common_texture_new(im->gc, im->im);
325 return im;
326}
327
328void
329evas_gl_common_image_native_enable(Evas_GL_Image *im)
330{
331 if (im->cs.data)
332 {
333 if (!im->cs.no_free) free(im->cs.data);
334 im->cs.data = NULL;
335 }
336 im->cs.no_free = 0;
337 if (im->cached)
338 {
339 if (im->references == 0)
340 im->gc->shared->images_size -= (im->csize);
341 im->gc->shared->images = eina_list_remove(im->gc->shared->images, im);
342 im->cached = 0;
343 }
344 if (im->im)
345 {
346 evas_cache_image_drop(&im->im->cache_entry);
347 im->im = NULL;
348 }
349 if (im->tex)
350 {
351 evas_gl_common_texture_free(im->tex);
352 im->tex = NULL;
353 }
354
355 im->cs.space = EVAS_COLORSPACE_ARGB8888;
356 im->tex = evas_gl_common_texture_native_new(im->gc, im->w, im->h, im->alpha, im);
357 im->tex_only = 1;
358}
359
360void
361evas_gl_common_image_native_disable(Evas_GL_Image *im)
362{
363 if (im->im)
364 {
365 evas_cache_image_drop(&im->im->cache_entry);
366 im->im = NULL;
367 }
368 if (im->tex)
369 {
370 evas_gl_common_texture_free(im->tex);
371 im->tex = NULL;
372 }
373 im->tex_only = 0;
374
375 im->im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
376 im->im->cache_entry.flags.alpha = im->alpha;
377 im->cs.space = EVAS_COLORSPACE_ARGB8888;
378 evas_cache_image_colorspace(&im->im->cache_entry, im->cs.space);
379 im->im = (RGBA_Image *)evas_cache_image_size_set(&im->im->cache_entry, im->w, im->h);
380 if (!im->tex)
381 im->tex = evas_gl_common_texture_new(im->gc, im->im);
382}
383
384void
385evas_gl_common_image_scale_hint_set(Evas_GL_Image *im, int hint)
386{
387 im->scale_hint = hint;
388 // FIXME: take advantage of this even in gl (eg if image is
389 // 1600x1200 but we always use it at 800x600 or even less - drop
390 // the texture res down for "non dynamic" stuff to save memory)
391}
392
393void
394evas_gl_common_image_content_hint_set(Evas_GL_Image *im, int hint)
395{
396 if (im->content_hint == hint) return;
397 im->content_hint = hint;
398 if (!im->gc) return;
399 if (!im->gc->shared->info.sec_image_map) return;
400 if (!im->gc->shared->info.bgra) return;
401 // does not handle yuv yet.
402 if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return;
403 if (im->content_hint == EVAS_IMAGE_CONTENT_HINT_DYNAMIC)
404 {
405 if (im->cs.data)
406 {
407 if (!im->cs.no_free) free(im->cs.data);
408 im->cs.data = NULL;
409 }
410 im->cs.no_free = 0;
411 if (im->cached)
412 {
413 if (im->references == 0)
414 im->gc->shared->images_size -= im->csize;
415 im->gc->shared->images = eina_list_remove(im->gc->shared->images, im);
416 im->cached = 0;
417 }
418 if (im->im)
419 {
420 evas_cache_image_drop(&im->im->cache_entry);
421 im->im = NULL;
422 }
423 if (im->tex)
424 {
425 evas_gl_common_texture_free(im->tex);
426 im->tex = NULL;
427 }
428 im->tex = evas_gl_common_texture_dynamic_new(im->gc, im);
429 im->tex_only = 1;
430 }
431 else
432 {
433 if (im->im)
434 {
435 evas_cache_image_drop(&im->im->cache_entry);
436 im->im = NULL;
437 }
438 if (im->tex)
439 {
440 evas_gl_common_texture_free(im->tex);
441 im->tex = NULL;
442 }
443 im->tex_only = 0;
444
445 im->im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
446 im->im->cache_entry.flags.alpha = im->alpha;
447 im->cs.space = EVAS_COLORSPACE_ARGB8888;
448 evas_cache_image_colorspace(&im->im->cache_entry, im->cs.space);
449 im->im = (RGBA_Image *)evas_cache_image_size_set(&im->im->cache_entry, im->w, im->h);
450 if (!im->tex)
451 im->tex = evas_gl_common_texture_new(im->gc, im->im);
452 }
453}
454
455void
456evas_gl_common_image_cache_flush(Evas_Engine_GL_Context *gc)
457{
458 _evas_gl_image_cache_trim(gc);
459}
460
461void
462evas_gl_common_image_free(Evas_GL_Image *im)
463{
464#if 0 // filtering disabled
465 Filtered_Image *fi;
466#endif
467
468 evas_gl_common_context_flush(im->gc);
469 im->references--;
470 if (im->references > 0) return;
471
472 if (im->native.func.free)
473 im->native.func.free(im->native.func.data, im);
474
475 if (im->cs.data)
476 {
477 if (!im->cs.no_free) free(im->cs.data);
478 }
479 if (im->cached)
480 {
481 if (_evas_gl_image_cache_add(im)) return;
482 }
483 if (im->im) evas_cache_image_drop(&im->im->cache_entry);
484 if (im->tex) evas_gl_common_texture_free(im->tex);
485
486#if 0 // filtering disabled
487 EINA_LIST_FREE(im->filtered, fi)
488 {
489 free(fi->key);
490 evas_gl_common_image_free((Evas_GL_Image *)fi->image);
491 free(fi);
492 }
493#endif
494
495 free(im);
496}
497
498Evas_GL_Image *
499evas_gl_common_image_surface_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha)
500{
501 Evas_GL_Image *im;
502
503 if (((int)w > gc->shared->info.max_texture_size) ||
504 ((int)h > gc->shared->info.max_texture_size))
505 return NULL;
506
507 im = calloc(1, sizeof(Evas_GL_Image));
508 if (!im) return NULL;
509 im->references = 1;
510 im->gc = gc;
511 im->cs.space = EVAS_COLORSPACE_ARGB8888;
512 im->alpha = alpha;
513 im->w = w;
514 im->h = h;
515 im->tex = evas_gl_common_texture_render_new(gc, w, h, alpha);
516 im->tex_only = 1;
517 return im;
518}
519
520void
521evas_gl_common_image_dirty(Evas_GL_Image *im, unsigned int x, unsigned int y, unsigned int w, unsigned int h)
522{
523 if ((w == 0) && (h == 0) && (x == 0) && (y == 0))
524 {
525 w = im->w;
526 h = im->h;
527 }
528 if (im->im)
529 {
530 im->im = (RGBA_Image *)evas_cache_image_dirty(&im->im->cache_entry, x, y, w, h);
531 }
532 im->dirty = 1;
533}
534
535void
536evas_gl_common_image_update(Evas_Engine_GL_Context *gc, Evas_GL_Image *im)
537{
538 Image_Entry *ie;
539 if (!im->im) return;
540 ie = (Image_Entry *)(im->im);
541/*
542 if ((im->cs.space == EVAS_COLORSPACE_YCBCR422P601_PL) ||
543 (im->cs.space == EVAS_COLORSPACE_YCBCR422P709_PL))
544 {
545 // SOFTWARE convert. do multi texture later
546 if ((im->cs.data) && (*((unsigned char **)im->cs.data)))
547 {
548 if (im->dirty || !im->im->image.data)
549 {
550 free(im->im->image.data);
551 im->im->image.data = malloc(im->im->cache_entry.w * im->im->cache_entry.h * sizeof(DATA32));
552 if (im->im->image.data)
553 evas_common_convert_yuv_420p_601_rgba(im->cs.data,
554 (void *)im->im->image.data,
555 im->im->cache_entry.w, im->im->cache_entry.h);
556 }
557 }
558 space = EVAS_COLORSPACE_ARGB8888;
559 }
560 else
561 */
562 switch (im->cs.space)
563 {
564 case EVAS_COLORSPACE_ARGB8888:
565 if ((im->tex) &&
566 ((im->dirty) || (ie->flags.animated)))
567 {
568 evas_cache_image_load_data(&im->im->cache_entry);
569 evas_gl_common_texture_update(im->tex, im->im);
570 evas_cache_image_unload_data(&im->im->cache_entry);
571 }
572 if (!im->tex)
573 {
574 evas_cache_image_load_data(&im->im->cache_entry);
575 im->tex = evas_gl_common_texture_new(gc, im->im);
576 evas_cache_image_unload_data(&im->im->cache_entry);
577 }
578 im->dirty = 0;
579 if (!im->tex) return;
580 break;
581 case EVAS_COLORSPACE_YCBCR422P601_PL:
582 case EVAS_COLORSPACE_YCBCR422P709_PL:
583 if ((im->tex) && (im->dirty))
584 {
585 evas_gl_common_texture_yuv_update(im->tex, im->cs.data,
586 im->im->cache_entry.w,
587 im->im->cache_entry.h);
588 im->dirty = 0;
589 }
590 if ((!im->tex) && (im->cs.data) && (*((unsigned char **)im->cs.data)))
591 {
592 im->tex = evas_gl_common_texture_yuv_new(gc, im->cs.data,
593 im->im->cache_entry.w,
594 im->im->cache_entry.h);
595 im->dirty = 0;
596 }
597 if (!im->tex) return;
598 break;
599 case EVAS_COLORSPACE_YCBCR422601_PL:
600 if ((im->tex) && (im->dirty))
601 {
602 evas_gl_common_texture_yuy2_update(im->tex, im->cs.data,
603 im->im->cache_entry.w,
604 im->im->cache_entry.h);
605 im->dirty = 0;
606 }
607 if ((!im->tex) && (im->cs.data) && (*((unsigned char **)im->cs.data)))
608 {
609 im->tex = evas_gl_common_texture_yuy2_new(gc, im->cs.data,
610 im->im->cache_entry.w,
611 im->im->cache_entry.h);
612 im->dirty = 0;
613 }
614 if (!im->tex) return;
615 break;
616 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
617 if ((im->tex) && (im->dirty))
618 {
619 evas_gl_common_texture_nv12_update(im->tex, im->cs.data,
620 im->im->cache_entry.w,
621 im->im->cache_entry.h);
622 im->dirty = 0;
623 }
624 if ((!im->tex) && (im->cs.data) && (*((unsigned char **)im->cs.data)))
625 {
626 im->tex = evas_gl_common_texture_nv12_new(gc, im->cs.data,
627 im->im->cache_entry.w,
628 im->im->cache_entry.h);
629 im->dirty = 0;
630 }
631 if (!im->tex) return;
632 break;
633 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
634 if ((im->tex) && (im->dirty))
635 {
636 evas_gl_common_texture_nv12tiled_update(im->tex, im->cs.data,
637 im->im->cache_entry.w,
638 im->im->cache_entry.h);
639 im->dirty = 0;
640 }
641 if ((!im->tex) && (im->cs.data) && (*((unsigned char **)im->cs.data)))
642 {
643 im->tex = evas_gl_common_texture_nv12tiled_new(gc, im->cs.data,
644 im->im->cache_entry.w,
645 im->im->cache_entry.h);
646 im->dirty = 0;
647 }
648 if (!im->tex) return;
649 break;
650 default:
651 ERR("unhandled img format colorspace=%d", im->cs.space);
652 break;
653 }
654}
655
656void
657evas_gl_common_image_map_draw(Evas_Engine_GL_Context *gc, Evas_GL_Image *im,
658 int npoints, RGBA_Map_Point *p, int smooth, int level __UNUSED__)
659{
660 RGBA_Draw_Context *dc;
661 int r, g, b, a;
662 int c, cx, cy, cw, ch;
663
664 dc = gc->dc;
665 if (dc->mul.use)
666 {
667 a = (dc->mul.col >> 24) & 0xff;
668 r = (dc->mul.col >> 16) & 0xff;
669 g = (dc->mul.col >> 8 ) & 0xff;
670 b = (dc->mul.col ) & 0xff;
671 }
672 else
673 {
674 r = g = b = a = 255;
675 }
676
677 evas_gl_common_image_update(gc, im);
678
679 c = gc->dc->clip.use;
680 cx = gc->dc->clip.x; cy = gc->dc->clip.y;
681 cw = gc->dc->clip.w; ch = gc->dc->clip.h;
682 im->tex->im = im;
683
684 evas_gl_common_context_image_map_push(gc, im->tex, npoints, p,
685 c, cx, cy, cw, ch,
686 r, g, b, a, smooth, im->tex_only,
687 im->cs.space);
688}
689
690void
691evas_gl_common_image_draw(Evas_Engine_GL_Context *gc, Evas_GL_Image *im, int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, int smooth)
692{
693 RGBA_Draw_Context *dc;
694 Evas_GL_Image *imm;
695 int r, g, b, a;
696 double ssx, ssy, ssw, ssh;
697 double mssx, mssy, mssw, mssh;
698 Cutout_Rects *rects;
699 Cutout_Rect *rct;
700 int c, cx, cy, cw, ch;
701 int i;
702 int yuv = 0;
703 int yuy2 = 0;
704 int nv12 = 0;
705
706 if (sw < 1) sw = 1;
707 if (sh < 1) sh = 1;
708 dc = gc->dc;
709 imm = (Evas_GL_Image *)dc->mask.mask;
710 if (dc->mul.use)
711 {
712 a = (dc->mul.col >> 24) & 0xff;
713 r = (dc->mul.col >> 16) & 0xff;
714 g = (dc->mul.col >> 8 ) & 0xff;
715 b = (dc->mul.col ) & 0xff;
716 }
717 else
718 {
719 r = g = b = a = 255;
720 }
721
722 evas_gl_common_image_update(gc, im);
723 if (!im->tex)
724 {
725 evas_gl_common_rect_draw(gc, dx, dy, dw, dh);
726 return;
727 }
728 if (imm)
729 {
730 evas_gl_common_image_update(gc, imm);
731 if (!imm->tex) imm = NULL; /* Turn of mask on error */
732 }
733
734 if ((im->cs.space == EVAS_COLORSPACE_YCBCR422P601_PL) ||
735 (im->cs.space == EVAS_COLORSPACE_YCBCR422P709_PL))
736 yuv = 1;
737 if (im->cs.space == EVAS_COLORSPACE_YCBCR422601_PL)
738 yuy2 = 1;
739 if ((im->cs.space == EVAS_COLORSPACE_YCBCR420NV12601_PL) ||
740 (im->cs.space == EVAS_COLORSPACE_YCBCR420TM12601_PL))
741 nv12 = 1;
742
743 im->tex->im = im;
744 if (imm) imm->tex->im = imm;
745 if ((!gc->dc->cutout.rects) ||
746 ((gc->shared->info.tune.cutout.max > 0) &&
747 (gc->dc->cutout.active > gc->shared->info.tune.cutout.max)))
748 {
749 if (gc->dc->clip.use)
750 {
751 int nx, ny, nw, nh;
752 double scalex,scaley;
753
754 nx = dx; ny = dy; nw = dw; nh = dh;
755 RECTS_CLIP_TO_RECT(nx, ny, nw, nh,
756 gc->dc->clip.x, gc->dc->clip.y,
757 gc->dc->clip.w, gc->dc->clip.h);
758 if ((nw < 1) || (nh < 1)) return;
759 if ((!imm) && (nx == dx) && (ny == dy) && (nw == dw) && (nh == dh))
760 {
761 if (yuv)
762 evas_gl_common_context_yuv_push(gc,
763 im->tex,
764 sx, sy, sw, sh,
765 dx, dy, dw, dh,
766 r, g, b, a,
767 smooth);
768 else if (yuy2)
769 evas_gl_common_context_yuy2_push(gc,
770 im->tex,
771 sx, sy, sw, sh,
772 dx, dy, dw, dh,
773 r, g, b, a,
774 smooth);
775 else if (nv12)
776 evas_gl_common_context_nv12_push(gc,
777 im->tex,
778 sx, sy, sw, sh,
779 dx, dy, dw, dh,
780 r, g, b, a,
781 smooth);
782 else
783
784 evas_gl_common_context_image_push(gc,
785 im->tex,
786 sx, sy, sw, sh,
787 dx, dy, dw, dh,
788 r, g, b, a,
789 smooth, im->tex_only);
790 return;
791 }
792
793 ssx = (double)sx + ((double)(sw * (nx - dx)) / (double)(dw));
794 ssy = (double)sy + ((double)(sh * (ny - dy)) / (double)(dh));
795 ssw = ((double)sw * (double)(nw)) / (double)(dw);
796 ssh = ((double)sh * (double)(nh)) / (double)(dh);
797 if (imm)
798 {
799 /* Correct ones here */
800 scalex = imm->w / (double)dc->mask.w;
801 scaley = imm->h / (double)dc->mask.h;
802 mssx = scalex * (nx - dc->mask.x);
803 mssy = scaley * (ny - dc->mask.y);
804 mssw = scalex * nw;
805 mssh = scaley * nh;
806
807 /* No yuv + imm I'm afraid */
808 evas_gl_common_context_image_mask_push(gc,
809 im->tex,
810 imm->tex,
811 ssx, ssy, ssw, ssh,
812 mssx, mssy, mssw, mssh,
813 //dc->mask.x, dc->mask.y, dc->mask.w, dc->mask.h,
814 nx, ny, nw, nh,
815 r, g, b, a,
816 smooth);
817 }
818 else if (yuv)
819 evas_gl_common_context_yuv_push(gc,
820 im->tex,
821 ssx, ssy, ssw, ssh,
822 nx, ny, nw, nh,
823 r, g, b, a,
824 smooth);
825 else if (yuy2)
826 evas_gl_common_context_yuy2_push(gc,
827 im->tex,
828 ssx, ssy, ssw, ssh,
829 nx, ny, nw, nh,
830 r, g, b, a,
831 smooth);
832 else if (nv12)
833 evas_gl_common_context_nv12_push(gc,
834 im->tex,
835 ssx, ssy, ssw, ssh,
836 nx, ny, nw, nh,
837 r, g, b, a,
838 smooth);
839 else
840 evas_gl_common_context_image_push(gc,
841 im->tex,
842 ssx, ssy, ssw, ssh,
843 nx, ny, nw, nh,
844 r, g, b, a,
845 smooth, im->tex_only);
846 }
847 else
848 {
849 if (yuv)
850 evas_gl_common_context_yuv_push(gc,
851 im->tex,
852 sx, sy, sw, sh,
853 dx, dy, dw, dh,
854 r, g, b, a,
855 smooth);
856 else if (yuy2)
857 evas_gl_common_context_yuy2_push(gc,
858 im->tex,
859 sx, sy, sw, sh,
860 dx, dy, dw, dh,
861 r, g, b, a,
862 smooth);
863 else if (nv12)
864 evas_gl_common_context_nv12_push(gc,
865 im->tex,
866 sx, sy, sw, sh,
867 dx, dy, dw, dh,
868 r, g, b, a,
869 smooth);
870 else
871 evas_gl_common_context_image_push(gc,
872 im->tex,
873 sx, sy, sw, sh,
874 dx, dy, dw, dh,
875 r, g, b, a,
876 smooth, im->tex_only);
877 }
878 return;
879 }
880
881 /* save out clip info */
882 c = gc->dc->clip.use; cx = gc->dc->clip.x; cy = gc->dc->clip.y; cw = gc->dc->clip.w; ch = gc->dc->clip.h;
883 evas_common_draw_context_clip_clip(gc->dc, 0, 0, gc->w, gc->h);
884 evas_common_draw_context_clip_clip(gc->dc, dx, dy, dw, dh);
885 /* our clip is 0 size.. abort */
886 if ((gc->dc->clip.w <= 0) || (gc->dc->clip.h <= 0))
887 {
888 gc->dc->clip.use = c; gc->dc->clip.x = cx; gc->dc->clip.y = cy; gc->dc->clip.w = cw; gc->dc->clip.h = ch;
889 return;
890 }
891 rects = evas_common_draw_context_apply_cutouts(dc);
892 for (i = 0; i < rects->active; ++i)
893 {
894 int nx, ny, nw, nh;
895
896 rct = rects->rects + i;
897 nx = dx; ny = dy; nw = dw; nh = dh;
898 RECTS_CLIP_TO_RECT(nx, ny, nw, nh, rct->x, rct->y, rct->w, rct->h);
899 if ((nw < 1) || (nh < 1)) continue;
900 if ((nx == dx) && (ny == dy) && (nw == dw) && (nh == dh))
901 {
902 if (yuv)
903 evas_gl_common_context_yuv_push(gc,
904 im->tex,
905 sx, sy, sw, sh,
906 dx, dy, dw, dh,
907 r, g, b, a,
908 smooth);
909 else if (yuy2)
910 evas_gl_common_context_yuy2_push(gc,
911 im->tex,
912 sx, sy, sw, sh,
913 dx, dy, dw, dh,
914 r, g, b, a,
915 smooth);
916 else if (nv12)
917 evas_gl_common_context_nv12_push(gc,
918 im->tex,
919 sx, sy, sw, sh,
920 dx, dy, dw, dh,
921 r, g, b, a,
922 smooth);
923 else
924 evas_gl_common_context_image_push(gc,
925 im->tex,
926 sx, sy, sw, sh,
927 dx, dy, dw, dh,
928 r, g, b, a,
929 smooth, im->tex_only);
930 continue;
931 }
932 ssx = (double)sx + ((double)(sw * (nx - dx)) / (double)(dw));
933 ssy = (double)sy + ((double)(sh * (ny - dy)) / (double)(dh));
934 ssw = ((double)sw * (double)(nw)) / (double)(dw);
935 ssh = ((double)sh * (double)(nh)) / (double)(dh);
936 if (yuv)
937 evas_gl_common_context_yuv_push(gc,
938 im->tex,
939 ssx, ssy, ssw, ssh,
940 nx, ny, nw, nh,
941 r, g, b, a,
942 smooth);
943 else if (yuy2)
944 evas_gl_common_context_yuy2_push(gc,
945 im->tex,
946 ssx, ssy, ssw, ssh,
947 nx, ny, nw, nh,
948 r, g, b, a,
949 smooth);
950 else if (nv12)
951 evas_gl_common_context_nv12_push(gc,
952 im->tex,
953 ssx, ssy, ssw, ssh,
954 nx, ny, nw, nh,
955 r, g, b, a,
956 smooth);
957 else
958 evas_gl_common_context_image_push(gc,
959 im->tex,
960 ssx, ssy, ssw, ssh,
961 nx, ny, nw, nh,
962 r, g, b, a,
963 smooth, im->tex_only);
964 }
965 evas_common_draw_context_apply_clear_cutouts(rects);
966 /* restore clip info */
967 gc->dc->clip.use = c; gc->dc->clip.x = cx; gc->dc->clip.y = cy; gc->dc->clip.w = cw; gc->dc->clip.h = ch;
968}
diff --git a/libraries/evas/src/modules/engines/gl_common/evas_gl_line.c b/libraries/evas/src/modules/engines/gl_common/evas_gl_line.c
new file mode 100644
index 0000000..48499ea
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/evas_gl_line.c
@@ -0,0 +1,32 @@
1#include "evas_gl_private.h"
2
3void
4evas_gl_common_line_draw(Evas_Engine_GL_Context *gc, int x1, int y1, int x2, int y2)
5{
6 RGBA_Draw_Context *dc;
7 int r, g, b, a;
8 int c, cx, cy, cw, ch;
9
10 dc = gc->dc;
11 if (dc->mul.use)
12 {
13 a = (dc->mul.col >> 24) & 0xff;
14 r = (dc->mul.col >> 16) & 0xff;
15 g = (dc->mul.col >> 8 ) & 0xff;
16 b = (dc->mul.col ) & 0xff;
17 }
18 else
19 {
20 r = g = b = a = 255;
21 }
22
23 glFlush();
24
25 c = gc->dc->clip.use;
26 cx = gc->dc->clip.x; cy = gc->dc->clip.y;
27 cw = gc->dc->clip.w; ch = gc->dc->clip.h;
28
29 evas_gl_common_context_line_push(gc, x1, y1, x2, y2,
30 c, cx, cy, cw, ch,
31 r, g, b, a);
32}
diff --git a/libraries/evas/src/modules/engines/gl_common/evas_gl_polygon.c b/libraries/evas/src/modules/engines/gl_common/evas_gl_polygon.c
new file mode 100644
index 0000000..06647cd
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/evas_gl_polygon.c
@@ -0,0 +1,307 @@
1#include "evas_gl_private.h"
2
3// FIXME: this is a verbatim copy of the software poly renderer. it just
4// use gl to draw 1 pixel high spans like software does. this is to make
5// sure rendering correctness matches the software engine but also to save
6// time in coming up with a good triangulation algorithm. if you want to
7// feel free to turn this into a real triangulation system and use gl to its
8// fullest, but as such polygons are used so little, it's not worth it.
9
10typedef struct _RGBA_Span RGBA_Span;
11typedef struct _RGBA_Edge RGBA_Edge;
12typedef struct _RGBA_Vertex RGBA_Vertex;
13
14struct _RGBA_Span
15{
16 EINA_INLIST;
17 int x, y, w;
18};
19
20struct _RGBA_Edge
21{
22 double x, dx;
23 int i;
24};
25
26struct _RGBA_Vertex
27{
28 double x, y;
29 int i;
30};
31
32#define POLY_EDGE_DEL(_i) \
33 { \
34 int _j; \
35 \
36 for (_j = 0; (_j < num_active_edges) && (edges[_j].i != _i); _j++); \
37 if (_j < num_active_edges) \
38 { \
39 num_active_edges--; \
40 memmove(&(edges[_j]), &(edges[_j + 1]), \
41 (num_active_edges - _j) * sizeof(RGBA_Edge)); \
42 } \
43 }
44
45#define POLY_EDGE_ADD(_i, _y) \
46 { \
47 int _j; \
48 float _dx; \
49 RGBA_Vertex *_p, *_q; \
50 if (_i < (n - 1)) _j = _i + 1; \
51 else _j = 0; \
52 if (point[_i].y < point[_j].y) \
53 { \
54 _p = &(point[_i]); \
55 _q = &(point[_j]); \
56 } \
57 else \
58 { \
59 _p = &(point[_j]); \
60 _q = &(point[_i]); \
61 } \
62 edges[num_active_edges].dx = _dx = (_q->x - _p->x) / (_q->y - _p->y); \
63 edges[num_active_edges].x = (_dx * ((float)_y + 0.5 - _p->y)) + _p->x; \
64 edges[num_active_edges].i = _i; \
65 num_active_edges++; \
66 }
67
68Evas_GL_Polygon *
69evas_gl_common_poly_point_add(Evas_GL_Polygon *poly, int x, int y)
70{
71 Evas_GL_Polygon_Point *pt;
72
73 if (!poly) poly = calloc(1, sizeof(Evas_GL_Polygon));
74 if (!poly) return NULL;
75 pt = calloc(1, sizeof(Evas_GL_Polygon_Point));
76 if (!pt) return NULL;
77 pt->x = x;
78 pt->y = y;
79 poly->points = eina_list_append(poly->points, pt);
80 poly->changed = 1;
81 return poly;
82}
83
84Evas_GL_Polygon *
85evas_gl_common_poly_points_clear(Evas_GL_Polygon *poly)
86{
87 if (!poly) return NULL;
88 while (poly->points)
89 {
90 Evas_GL_Polygon_Point *pt;
91
92 pt = poly->points->data;
93 poly->points = eina_list_remove(poly->points, pt);
94 free(pt);
95 }
96 free(poly);
97 return NULL;
98}
99
100static int
101polygon_point_sorter(const void *a, const void *b)
102{
103 RGBA_Vertex *p, *q;
104
105 p = (RGBA_Vertex *)a;
106 q = (RGBA_Vertex *)b;
107 if (p->y <= q->y) return -1;
108 return 1;
109}
110
111static int
112polygon_edge_sorter(const void *a, const void *b)
113{
114 RGBA_Edge *p, *q;
115
116 p = (RGBA_Edge *)a;
117 q = (RGBA_Edge *)b;
118 if (p->x <= q->x) return -1;
119 return 1;
120}
121
122void
123evas_gl_common_poly_draw(Evas_Engine_GL_Context *gc, Evas_GL_Polygon *poly, int dx, int dy)
124{
125 Cutout_Rects *rects;
126 Cutout_Rect *r;
127 int c, cx, cy, cw, ch, cr, cg, cb, ca, i;
128 int x = 0, y = 0, w = 0, h = 0;
129
130 Eina_List *l;
131 int n, k, num_active_edges, y0, y1, *sorted_index, j;
132 RGBA_Edge *edges;
133 RGBA_Vertex *point;
134 Evas_GL_Polygon_Point *pt;
135 Eina_Inlist *spans;
136
137 /* save out clip info */
138 c = gc->dc->clip.use; cx = gc->dc->clip.x; cy = gc->dc->clip.y; cw = gc->dc->clip.w; ch = gc->dc->clip.h;
139
140 ca = (gc->dc->col.col >> 24) & 0xff;
141 if (ca <= 0) return;
142 cr = (gc->dc->col.col >> 16) & 0xff;
143 cg = (gc->dc->col.col >> 8 ) & 0xff;
144 cb = (gc->dc->col.col ) & 0xff;
145
146 n = eina_list_count(poly->points);
147 if (n < 3) return;
148 edges = malloc(sizeof(RGBA_Edge) * n);
149 if (!edges) return;
150 point = malloc(sizeof(RGBA_Vertex) * n);
151 if (!point)
152 {
153 free(edges);
154 return;
155 }
156 sorted_index = malloc(sizeof(int) * n);
157 if (!sorted_index)
158 {
159 free(edges);
160 free(point);
161 return;
162 }
163
164 k = 0;
165 EINA_LIST_FOREACH(poly->points, l, pt)
166 {
167 point[k].x = pt->x + dx;
168 point[k].y = pt->y + dy;
169 point[k].i = k;
170 k++;
171 }
172 qsort(point, n, sizeof(RGBA_Vertex), polygon_point_sorter);
173 for (k = 0; k < n; k++) sorted_index[k] = point[k].i;
174 k = 0;
175
176 EINA_LIST_FOREACH(poly->points, l, pt)
177 {
178 point[k].x = pt->x + dx;
179 point[k].y = pt->y + dy;
180 point[k].i = k;
181 k++;
182 }
183
184 y0 = MAX(cy, ceil(point[sorted_index[0]].y - 0.5));
185 y1 = MIN(cy + ch - 1, floor(point[sorted_index[n - 1]].y - 0.5));
186
187 k = 0;
188 num_active_edges = 0;
189 spans = NULL;
190
191 for (y = y0; y <= y1; y++)
192 {
193 for (; (k < n) && (point[sorted_index[k]].y <= ((double)y + 0.5)); k++)
194 {
195 i = sorted_index[k];
196
197 if (i > 0) j = i - 1;
198 else j = n - 1;
199 if (point[j].y <= ((double)y - 0.5))
200 {
201 POLY_EDGE_DEL(j)
202 }
203 else if (point[j].y > ((double)y + 0.5))
204 {
205 POLY_EDGE_ADD(j, y)
206 }
207 if (i < (n - 1)) j = i + 1;
208 else j = 0;
209 if (point[j].y <= ((double)y - 0.5))
210 {
211 POLY_EDGE_DEL(i)
212 }
213 else if (point[j].y > ((double)y + 0.5))
214 {
215 POLY_EDGE_ADD(i, y)
216 }
217 }
218
219 qsort(edges, num_active_edges, sizeof(RGBA_Edge), polygon_edge_sorter);
220
221 for (j = 0; j < num_active_edges; j += 2)
222 {
223 int x0, x1;
224
225 x0 = ceil(edges[j].x - 0.5);
226 if (j < (num_active_edges - 1))
227 x1 = floor(edges[j + 1].x - 0.5);
228 else
229 x1 = x0;
230 if ((x1 >= cx) && (x0 < (cx + cw)) && (x0 <= x1))
231 {
232 RGBA_Span *span;
233
234 if (x0 < cx) x0 = cx;
235 if (x1 >= (cx + cw)) x1 = cx + cw - 1;
236 span = malloc(sizeof(RGBA_Span));
237 spans = eina_inlist_append(spans, EINA_INLIST_GET(span));
238 span->y = y;
239 span->x = x0;
240 span->w = (x1 - x0) + 1;
241 }
242 edges[j].x += edges[j].dx;
243 edges[j + 1].x += edges[j + 1].dx;
244 }
245 }
246
247 free(edges);
248 free(point);
249 free(sorted_index);
250
251 evas_common_draw_context_clip_clip(gc->dc, 0, 0, gc->w, gc->h);
252
253 if (spans)
254 {
255 RGBA_Span *span;
256
257 /* no cutouts - cut right to the chase */
258 if (!gc->dc->cutout.rects)
259 {
260 EINA_INLIST_FOREACH(spans, span)
261 {
262 x = span->x;
263 y = span->y;
264 w = span->w;
265 h = 1;
266 evas_gl_common_context_rectangle_push(gc, x, y, w, h, cr, cg, cb, ca);
267 }
268 }
269 else
270 {
271 evas_common_draw_context_clip_clip(gc->dc, x, y, w, h);
272 /* our clip is 0 size.. abort */
273 if ((gc->dc->clip.w > 0) && (gc->dc->clip.h > 0))
274 {
275 rects = evas_common_draw_context_apply_cutouts(gc->dc);
276 for (i = 0; i < rects->active; ++i)
277 {
278 r = rects->rects + i;
279 if ((r->w > 0) && (r->h > 0))
280 {
281 EINA_INLIST_FOREACH(spans, span)
282 {
283 x = span->x;
284 y = span->y;
285 w = span->w;
286 h = 1;
287 RECTS_CLIP_TO_RECT(x, y, w, h, r->x, r->y, r->w, r->h);
288 if ((w > 0) && (h > 0))
289 evas_gl_common_context_rectangle_push(gc, x, y, w, h, cr, cg, cb, ca);
290 }
291 }
292 }
293 evas_common_draw_context_apply_clear_cutouts(rects);
294 }
295 }
296 while (spans)
297 {
298 span = (RGBA_Span *)spans;
299 spans = eina_inlist_remove(spans, spans);
300 free(span);
301 }
302 }
303
304 /* restore clip info */
305 gc->dc->clip.use = c; gc->dc->clip.x = cx; gc->dc->clip.y = cy; gc->dc->clip.w = cw; gc->dc->clip.h = ch;
306
307}
diff --git a/libraries/evas/src/modules/engines/gl_common/evas_gl_private.h b/libraries/evas/src/modules/engines/gl_common/evas_gl_private.h
new file mode 100644
index 0000000..a178823
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/evas_gl_private.h
@@ -0,0 +1,32 @@
1#ifndef _EVAS_GL_PRIVATE_H
2#define _EVAS_GL_PRIVATE_H
3#include "evas_gl_common.h"
4
5extern int _evas_engine_GL_common_log_dom;
6
7#ifdef ERR
8# undef ERR
9#endif
10#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_GL_common_log_dom, __VA_ARGS__)
11
12#ifdef DBG
13# undef DBG
14#endif
15#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_GL_common_log_dom, __VA_ARGS__)
16
17#ifdef INF
18# undef INF
19#endif
20#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_GL_common_log_dom, __VA_ARGS__)
21
22#ifdef WRN
23# undef WRN
24#endif
25#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_GL_common_log_dom, __VA_ARGS__)
26
27#ifdef CRIT
28# undef CRIT
29#endif
30#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_GL_common_log_dom, __VA_ARGS__)
31
32#endif
diff --git a/libraries/evas/src/modules/engines/gl_common/evas_gl_rectangle.c b/libraries/evas/src/modules/engines/gl_common/evas_gl_rectangle.c
new file mode 100644
index 0000000..1903314
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/evas_gl_rectangle.c
@@ -0,0 +1,53 @@
1#include "evas_gl_private.h"
2
3void
4evas_gl_common_rect_draw(Evas_Engine_GL_Context *gc, int x, int y, int w, int h)
5{
6 Cutout_Rects *rects;
7 Cutout_Rect *r;
8 int c, cx, cy, cw, ch, cr, cg, cb, ca, i;
9
10 if ((w <= 0) || (h <= 0)) return;
11 if (!(RECTS_INTERSECT(x, y, w, h, 0, 0, gc->w, gc->h))) return;
12 /* save out clip info */
13 c = gc->dc->clip.use; cx = gc->dc->clip.x; cy = gc->dc->clip.y; cw = gc->dc->clip.w; ch = gc->dc->clip.h;
14
15 ca = (gc->dc->col.col >> 24) & 0xff;
16 if ((gc->dc->render_op != EVAS_RENDER_COPY) && (ca <= 0)) return;
17 cr = (gc->dc->col.col >> 16) & 0xff;
18 cg = (gc->dc->col.col >> 8 ) & 0xff;
19 cb = (gc->dc->col.col ) & 0xff;
20 evas_common_draw_context_clip_clip(gc->dc, 0, 0, gc->w, gc->h);
21 /* no cutouts - cut right to the chase */
22 if ((gc->dc) && (gc->dc->clip.use))
23 {
24 RECTS_CLIP_TO_RECT(x, y, w, h,
25 gc->dc->clip.x, gc->dc->clip.y,
26 gc->dc->clip.w, gc->dc->clip.h);
27 }
28
29 if (!gc->dc->cutout.rects)
30 {
31 evas_gl_common_context_rectangle_push(gc, x, y, w, h, cr, cg, cb, ca);
32 }
33 else
34 {
35 evas_common_draw_context_clip_clip(gc->dc, x, y, w, h);
36 /* our clip is 0 size.. abort */
37 if ((gc->dc->clip.w > 0) && (gc->dc->clip.h > 0))
38 {
39 rects = evas_common_draw_context_apply_cutouts(gc->dc);
40 for (i = 0; i < rects->active; ++i)
41 {
42 r = rects->rects + i;
43 if ((r->w > 0) && (r->h > 0))
44 {
45 evas_gl_common_context_rectangle_push(gc, r->x, r->y, r->w, r->h, cr, cg, cb, ca);
46 }
47 }
48 evas_common_draw_context_apply_clear_cutouts(rects);
49 }
50 }
51 /* restore clip info */
52 gc->dc->clip.use = c; gc->dc->clip.x = cx; gc->dc->clip.y = cy; gc->dc->clip.w = cw; gc->dc->clip.h = ch;
53}
diff --git a/libraries/evas/src/modules/engines/gl_common/evas_gl_shader.c b/libraries/evas/src/modules/engines/gl_common/evas_gl_shader.c
new file mode 100644
index 0000000..6666ac5
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/evas_gl_shader.c
@@ -0,0 +1,1262 @@
1#include "evas_gl_private.h"
2
3/////////////////////////////////////////////
4#if defined (GLES_VARIETY_S3C6410)
5const unsigned int rect_frag_bin[] =
6{
7# include "shader/rect_frag_bin_s3c6410.h"
8};
9#endif
10
11const char rect_frag_glsl[] =
12#include "shader/rect_frag.h"
13 ;
14Evas_GL_Program_Source shader_rect_frag_src =
15{
16 rect_frag_glsl,
17#if defined (GLES_VARIETY_S3C6410)
18 rect_frag_bin, sizeof(rect_frag_bin)
19#else
20 NULL, 0
21#endif
22};
23
24#if defined (GLES_VARIETY_S3C6410)
25const unsigned int rect_vert_bin[] =
26{
27# include "shader/rect_vert_bin_s3c6410.h"
28};
29#endif
30const char rect_vert_glsl[] =
31#include "shader/rect_vert.h"
32 ;
33Evas_GL_Program_Source shader_rect_vert_src =
34{
35 rect_vert_glsl,
36#if defined (GLES_VARIETY_S3C6410)
37 rect_vert_bin, sizeof(rect_vert_bin)
38#else
39 NULL, 0
40#endif
41};
42
43/////////////////////////////////////////////
44#if defined (GLES_VARIETY_S3C6410)
45const unsigned int font_frag_bin[] =
46{
47# include "shader/font_frag_bin_s3c6410.h"
48};
49#endif
50
51const char font_frag_glsl[] =
52#include "shader/font_frag.h"
53 ;
54Evas_GL_Program_Source shader_font_frag_src =
55{
56 font_frag_glsl,
57#if defined (GLES_VARIETY_S3C6410)
58 font_frag_bin, sizeof(font_frag_bin)
59#else
60 NULL, 0
61#endif
62};
63
64#if defined (GLES_VARIETY_S3C6410)
65const unsigned int font_vert_bin[] =
66{
67# include "shader/font_vert_bin_s3c6410.h"
68};
69#endif
70const char font_vert_glsl[] =
71#include "shader/font_vert.h"
72 ;
73Evas_GL_Program_Source shader_font_vert_src =
74{
75 font_vert_glsl,
76#if defined (GLES_VARIETY_S3C6410)
77 font_vert_bin, sizeof(font_vert_bin)
78#else
79 NULL, 0
80#endif
81};
82
83/////////////////////////////////////////////
84#if defined (GLES_VARIETY_S3C6410)
85const unsigned int yuv_frag_bin[] =
86{
87# include "shader/yuv_frag_bin_s3c6410.h"
88};
89#endif
90
91const char yuv_frag_glsl[] =
92#include "shader/yuv_frag.h"
93 ;
94Evas_GL_Program_Source shader_yuv_frag_src =
95{
96 yuv_frag_glsl,
97#if defined (GLES_VARIETY_S3C6410)
98 yuv_frag_bin, sizeof(yuv_frag_bin)
99#else
100 NULL, 0
101#endif
102};
103
104#if defined (GLES_VARIETY_S3C6410)
105const unsigned int yuv_vert_bin[] =
106{
107# include "shader/yuv_vert_bin_s3c6410.h"
108};
109#endif
110const char yuv_vert_glsl[] =
111#include "shader/yuv_vert.h"
112 ;
113Evas_GL_Program_Source shader_yuv_vert_src =
114{
115 yuv_vert_glsl,
116#if defined (GLES_VARIETY_S3C6410)
117 yuv_vert_bin, sizeof(yuv_vert_bin)
118#else
119 NULL, 0
120#endif
121};
122
123/////////////////////////////////////////////
124#if defined (GLES_VARIETY_S3C6410)
125const unsigned int yuy2_frag_bin[] =
126{
127# include "shader/yuy2_frag_bin_s3c6410.h"
128};
129#endif
130
131const char yuy2_frag_glsl[] =
132#include "shader/yuy2_frag.h"
133 ;
134Evas_GL_Program_Source shader_yuy2_frag_src =
135{
136 yuy2_frag_glsl,
137#if defined (GLES_VARIETY_S3C6410)
138 yuy2_frag_bin, sizeof(yuy2_frag_bin)
139#else
140 NULL, 0
141#endif
142};
143
144#if defined (GLES_VARIETY_S3C6410)
145const unsigned int yuy2_vert_bin[] =
146{
147# include "shader/yuy2_vert_bin_s3c6410.h"
148};
149#endif
150const char yuy2_vert_glsl[] =
151#include "shader/yuy2_vert.h"
152 ;
153Evas_GL_Program_Source shader_yuy2_vert_src =
154{
155 yuy2_vert_glsl,
156#if defined (GLES_VARIETY_S3C6410)
157 yuy2_vert_bin, sizeof(yuy2_vert_bin)
158#else
159 NULL, 0
160#endif
161};
162
163/////////////////////////////////////////////
164#if defined (GLES_VARIETY_S3C6410)
165const unsigned int yuy2_nomul_frag_bin[] =
166{
167# include "shader/yuy2_nomul_frag_bin_s3c6410.h"
168};
169#endif
170
171const char yuy2_nomul_frag_glsl[] =
172#include "shader/yuy2_nomul_frag.h"
173 ;
174Evas_GL_Program_Source shader_yuy2_nomul_frag_src =
175{
176 yuy2_nomul_frag_glsl,
177#if defined (GLES_VARIETY_S3C6410)
178 yuy2_nomul_frag_bin, sizeof(yuy2_nomul_frag_bin)
179#else
180 NULL, 0
181#endif
182};
183
184#if defined (GLES_VARIETY_S3C6410)
185const unsigned int yuy2_nomul_vert_bin[] =
186{
187# include "shader/yuy2_nomul_vert_bin_s3c6410.h"
188};
189#endif
190const char yuy2_nomul_vert_glsl[] =
191#include "shader/yuy2_nomul_vert.h"
192 ;
193Evas_GL_Program_Source shader_yuy2_nomul_vert_src =
194{
195 yuy2_nomul_vert_glsl,
196#if defined (GLES_VARIETY_S3C6410)
197 yuy2_nomul_vert_bin, sizeof(yuy2_nomul_vert_bin)
198#else
199 NULL, 0
200#endif
201};
202
203/////////////////////////////////////////////
204#if defined (GLES_VARIETY_S3C6410)
205const unsigned int nv12_nomul_vert_bin[] =
206{
207# include "shader/nv12_nomul_vert_bin_s3c6410.h"
208};
209#endif
210const char nv12_nomul_vert_glsl[] =
211#include "shader/nv12_nomul_vert.h"
212 ;
213Evas_GL_Program_Source shader_nv12_nomul_vert_src =
214{
215 nv12_nomul_vert_glsl,
216#if defined (GLES_VARIETY_S3C6410)
217 nv12_nomul_vert_bin, sizeof(nv12_nomul_vert_bin)
218#else
219 NULL, 0
220#endif
221};
222
223#if defined (GLES_VARIETY_S3C6410)
224const unsigned int nv12_vert_bin[] =
225{
226# include "shader/nv12_vert_bin_s3c6410.h"
227};
228#endif
229const char nv12_vert_glsl[] =
230#include "shader/nv12_vert.h"
231 ;
232Evas_GL_Program_Source shader_nv12_vert_src =
233{
234 nv12_vert_glsl,
235#if defined (GLES_VARIETY_S3C6410)
236 nv12_vert_bin, sizeof(nv12_vert_bin)
237#else
238 NULL, 0
239#endif
240};
241
242#if defined (GLES_VARIETY_S3C6410)
243const unsigned int nv12_nomul_frag_bin[] =
244{
245# include "shader/nv12_nomul_frag_bin_s3c6410.h"
246};
247#endif
248
249const char nv12_frag_glsl[] =
250#include "shader/nv12_frag.h"
251 ;
252Evas_GL_Program_Source shader_nv12_frag_src =
253{
254 nv12_frag_glsl,
255#if defined (GLES_VARIETY_S3C6410)
256 nv12_frag_bin, sizeof(nv12_frag_bin)
257#else
258 NULL, 0
259#endif
260};
261
262#if defined (GLES_VARIETY_S3C6410)
263const unsigned int nv12_nomul_frag_bin[] =
264{
265# include "shader/nv12_nomul_frag_bin_s3c6410.h"
266};
267#endif
268
269const char nv12_nomul_frag_glsl[] =
270#include "shader/nv12_nomul_frag.h"
271 ;
272Evas_GL_Program_Source shader_nv12_nomul_frag_src =
273{
274 nv12_nomul_frag_glsl,
275#if defined (GLES_VARIETY_S3C6410)
276 nv12_nomul_frag_bin, sizeof(nv12_nomul_frag_bin)
277#else
278 NULL, 0
279#endif
280};
281
282/////////////////////////////////////////////
283#if defined (GLES_VARIETY_S3C6410)
284const unsigned int yuv_nomul_frag_bin[] =
285{
286# include "shader/yuv_nomul_frag_bin_s3c6410.h"
287};
288#endif
289
290const char yuv_nomul_frag_glsl[] =
291#include "shader/yuv_nomul_frag.h"
292 ;
293Evas_GL_Program_Source shader_yuv_nomul_frag_src =
294{
295 yuv_nomul_frag_glsl,
296#if defined (GLES_VARIETY_S3C6410)
297 yuv_nomul_frag_bin, sizeof(yuv_nomul_frag_bin)
298#else
299 NULL, 0
300#endif
301};
302
303#if defined (GLES_VARIETY_S3C6410)
304const unsigned int yuv_nomul_vert_bin[] =
305{
306# include "shader/yuv_nomul_vert_bin_s3c6410.h"
307};
308#endif
309const char yuv_nomul_vert_glsl[] =
310#include "shader/yuv_nomul_vert.h"
311 ;
312Evas_GL_Program_Source shader_yuv_nomul_vert_src =
313{
314 yuv_nomul_vert_glsl,
315#if defined (GLES_VARIETY_S3C6410)
316 yuv_nomul_vert_bin, sizeof(yuv_nomul_vert_bin)
317#else
318 NULL, 0
319#endif
320};
321
322/////////////////////////////////////////////
323#if defined (GLES_VARIETY_S3C6410)
324const unsigned int tex_frag_bin[] =
325{
326# include "shader/tex_frag_bin_s3c6410.h"
327};
328#endif
329
330const char tex_frag_glsl[] =
331#include "shader/tex_frag.h"
332 ;
333Evas_GL_Program_Source shader_tex_frag_src =
334{
335 tex_frag_glsl,
336#if defined (GLES_VARIETY_S3C6410)
337 tex_frag_bin, sizeof(tex_frag_bin)
338#else
339 NULL, 0
340#endif
341};
342
343#if defined (GLES_VARIETY_S3C6410)
344const unsigned int tex_vert_bin[] =
345{
346# include "shader/tex_vert_bin_s3c6410.h"
347};
348#endif
349const char tex_vert_glsl[] =
350#include "shader/tex_vert.h"
351 ;
352Evas_GL_Program_Source shader_tex_vert_src =
353{
354 tex_vert_glsl,
355#if defined (GLES_VARIETY_S3C6410)
356 tex_vert_bin, sizeof(tex_vert_bin)
357#else
358 NULL, 0
359#endif
360};
361
362/////////////////////////////////////////////
363#if defined (GLES_VARIETY_S3C6410)
364const unsigned int tex_nomul_frag_bin[] =
365{
366# include "shader/tex_nomul_frag_bin_s3c6410.h"
367};
368#endif
369
370const char tex_nomul_frag_glsl[] =
371#include "shader/tex_nomul_frag.h"
372 ;
373Evas_GL_Program_Source shader_tex_nomul_frag_src =
374{
375 tex_nomul_frag_glsl,
376#if defined (GLES_VARIETY_S3C6410)
377 tex_nomul_frag_bin, sizeof(tex_nomul_frag_bin)
378#else
379 NULL, 0
380#endif
381};
382
383#if defined (GLES_VARIETY_S3C6410)
384const unsigned int tex_nomul_vert_bin[] =
385{
386# include "shader/tex_nomul_vert_bin_s3c6410.h"
387};
388#endif
389const char tex_nomul_vert_glsl[] =
390#include "shader/tex_nomul_vert.h"
391 ;
392Evas_GL_Program_Source shader_tex_nomul_vert_src =
393{
394 tex_nomul_vert_glsl,
395#if defined (GLES_VARIETY_S3C6410)
396 tex_nomul_vert_bin, sizeof(tex_nomul_vert_bin)
397#else
398 NULL, 0
399#endif
400};
401
402/////////////////////////////////////////////
403#if defined (GLES_VARIETY_S3C6410)
404const unsigned int img_frag_bin[] =
405{
406# include "shader/img_frag_bin_s3c6410.h"
407};
408#endif
409
410const char img_frag_glsl[] =
411#include "shader/img_frag.h"
412 ;
413Evas_GL_Program_Source shader_img_frag_src =
414{
415 img_frag_glsl,
416#if defined (GLES_VARIETY_S3C6410)
417 img_frag_bin, sizeof(img_frag_bin)
418#else
419 NULL, 0
420#endif
421};
422
423#if defined (GLES_VARIETY_S3C6410)
424const unsigned int img_vert_bin[] =
425{
426# include "shader/img_vert_bin_s3c6410.h"
427};
428#endif
429const char img_vert_glsl[] =
430#include "shader/img_vert.h"
431 ;
432Evas_GL_Program_Source shader_img_vert_src =
433{
434 img_vert_glsl,
435#if defined (GLES_VARIETY_S3C6410)
436 img_vert_bin, sizeof(img_vert_bin)
437#else
438 NULL, 0
439#endif
440};
441
442/////////////////////////////////////////////
443#if defined (GLES_VARIETY_S3C6410)
444const unsigned int img_nomul_frag_bin[] =
445{
446# include "shader/img_nomul_frag_bin_s3c6410.h"
447};
448#endif
449
450const char img_nomul_frag_glsl[] =
451#include "shader/img_nomul_frag.h"
452 ;
453Evas_GL_Program_Source shader_img_nomul_frag_src =
454{
455 img_nomul_frag_glsl,
456#if defined (GLES_VARIETY_S3C6410)
457 img_nomul_frag_bin, sizeof(img_nomul_frag_bin)
458#else
459 NULL, 0
460#endif
461};
462
463#if defined (GLES_VARIETY_S3C6410)
464const unsigned int img_nomul_vert_bin[] =
465{
466# include "shader/img_nomul_vert_bin_s3c6410.h"
467};
468#endif
469const char img_nomul_vert_glsl[] =
470#include "shader/img_nomul_vert.h"
471 ;
472Evas_GL_Program_Source shader_img_nomul_vert_src =
473{
474 img_nomul_vert_glsl,
475#if defined (GLES_VARIETY_S3C6410)
476 img_nomul_vert_bin, sizeof(img_nomul_vert_bin)
477#else
478 NULL, 0
479#endif
480};
481
482/////////////////////////////////////////////
483#if defined (GLES_VARIETY_S3C6410)
484const unsigned int img_bgra_frag_bin[] =
485{
486# include "shader/img_bgra_frag_bin_s3c6410.h"
487};
488#endif
489
490const char img_bgra_frag_glsl[] =
491#include "shader/img_bgra_frag.h"
492 ;
493Evas_GL_Program_Source shader_img_bgra_frag_src =
494{
495 img_bgra_frag_glsl,
496#if defined (GLES_VARIETY_S3C6410)
497 img_bgra_frag_bin, sizeof(img_bgra_frag_bin)
498#else
499 NULL, 0
500#endif
501};
502
503#if defined (GLES_VARIETY_S3C6410)
504const unsigned int img_bgra_vert_bin[] =
505{
506# include "shader/img_bgra_vert_bin_s3c6410.h"
507};
508#endif
509const char img_bgra_vert_glsl[] =
510#include "shader/img_bgra_vert.h"
511 ;
512Evas_GL_Program_Source shader_img_bgra_vert_src =
513{
514 img_bgra_vert_glsl,
515#if defined (GLES_VARIETY_S3C6410)
516 img_bgra_vert_bin, sizeof(img_bgra_vert_bin)
517#else
518 NULL, 0
519#endif
520};
521
522
523/////////////////////////////////////////////
524#if defined (GLES_VARIETY_S3C6410)
525const unsigned int img_mask_frag_bin[] =
526{
527# include "shader/img_mask_frag_bin_s3c6410.h"
528};
529#endif
530
531const char img_mask_frag_glsl[] =
532#include "shader/img_mask_frag.h"
533 ;
534Evas_GL_Program_Source shader_img_mask_frag_src =
535{
536 img_mask_frag_glsl,
537#if defined (GLES_VARIETY_S3C6410)
538 img_mask_frag_bin, sizeof(img_mask_frag_bin)
539#else
540 NULL, 0
541#endif
542};
543
544#if defined (GLES_VARIETY_S3C6410)
545const unsigned int img_mask_vert_bin[] =
546{
547# include "shader/img_mask_vert_bin_s3c6410.h"
548};
549#endif
550const char img_mask_vert_glsl[] =
551#include "shader/img_mask_vert.h"
552 ;
553Evas_GL_Program_Source shader_img_mask_vert_src =
554{
555 img_mask_vert_glsl,
556#if defined (GLES_VARIETY_S3C6410)
557 img_mask_vert_bin, sizeof(img_mask_vert_bin)
558#else
559 NULL, 0
560#endif
561};
562
563
564/////////////////////////////////////////////
565#if defined (GLES_VARIETY_S3C6410)
566const unsigned int img_bgra_nomul_frag_bin[] =
567{
568# include "shader/img_bgra_nomul_frag_bin_s3c6410.h"
569};
570#endif
571
572const char img_bgra_nomul_frag_glsl[] =
573#include "shader/img_bgra_nomul_frag.h"
574 ;
575Evas_GL_Program_Source shader_img_bgra_nomul_frag_src =
576{
577 img_bgra_nomul_frag_glsl,
578#if defined (GLES_VARIETY_S3C6410)
579 img_bgra_nomul_frag_bin, sizeof(img_bgra_nomul_frag_bin)
580#else
581 NULL, 0
582#endif
583};
584
585#if defined (GLES_VARIETY_S3C6410)
586const unsigned int img_bgra_nomul_vert_bin[] =
587{
588# include "shader/img_bgra_nomul_vert_bin_s3c6410.h"
589};
590#endif
591const char img_bgra_nomul_vert_glsl[] =
592#include "shader/img_bgra_nomul_vert.h"
593 ;
594Evas_GL_Program_Source shader_img_bgra_nomul_vert_src =
595{
596 img_bgra_nomul_vert_glsl,
597#if defined (GLES_VARIETY_S3C6410)
598 img_bgra_nomul_vert_bin, sizeof(img_bgra_nomul_vert_bin)
599#else
600 NULL, 0
601#endif
602};
603
604/////////////////////////////////////////////
605const char filter_invert_frag_glsl[] =
606#include "shader/filter_invert.h"
607 ;
608Evas_GL_Program_Source shader_filter_invert_frag_src =
609{
610 filter_invert_frag_glsl,
611 NULL, 0
612};
613
614const char filter_invert_nomul_frag_glsl[] =
615#include "shader/filter_invert_nomul.h"
616 ;
617Evas_GL_Program_Source shader_filter_invert_nomul_frag_src =
618{
619 filter_invert_nomul_frag_glsl,
620 NULL, 0
621};
622
623const char filter_invert_bgra_frag_glsl[] =
624#include "shader/filter_invert_bgra.h"
625 ;
626Evas_GL_Program_Source shader_filter_invert_bgra_frag_src =
627{
628 filter_invert_bgra_frag_glsl,
629 NULL, 0
630};
631const char filter_invert_bgra_nomul_frag_glsl[] =
632#include "shader/filter_invert_bgra_nomul.h"
633 ;
634Evas_GL_Program_Source shader_filter_invert_bgra_nomul_frag_src =
635{
636 filter_invert_bgra_nomul_frag_glsl,
637 NULL, 0
638};
639
640/////////////////////////////////////////////
641const char filter_greyscale_frag_glsl[] =
642#include "shader/filter_greyscale.h"
643 ;
644Evas_GL_Program_Source shader_filter_greyscale_frag_src =
645{
646 filter_greyscale_frag_glsl,
647 NULL, 0
648};
649
650const char filter_greyscale_nomul_frag_glsl[] =
651#include "shader/filter_greyscale_nomul.h"
652 ;
653Evas_GL_Program_Source shader_filter_greyscale_nomul_frag_src =
654{
655 filter_greyscale_nomul_frag_glsl,
656 NULL, 0
657};
658
659const char filter_greyscale_bgra_frag_glsl[] =
660#include "shader/filter_greyscale_bgra.h"
661 ;
662Evas_GL_Program_Source shader_filter_greyscale_bgra_frag_src =
663{
664 filter_greyscale_bgra_frag_glsl,
665 NULL, 0
666};
667const char filter_greyscale_bgra_nomul_frag_glsl[] =
668#include "shader/filter_greyscale_bgra_nomul.h"
669 ;
670Evas_GL_Program_Source shader_filter_greyscale_bgra_nomul_frag_src =
671{
672 filter_greyscale_bgra_nomul_frag_glsl,
673 NULL, 0
674};
675
676/////////////////////////////////////////////
677const char filter_sepia_frag_glsl[] =
678#include "shader/filter_sepia.h"
679 ;
680Evas_GL_Program_Source shader_filter_sepia_frag_src =
681{
682 filter_sepia_frag_glsl,
683 NULL, 0
684};
685
686const char filter_sepia_nomul_frag_glsl[] =
687#include "shader/filter_sepia_nomul.h"
688 ;
689Evas_GL_Program_Source shader_filter_sepia_nomul_frag_src =
690{
691 filter_sepia_nomul_frag_glsl,
692 NULL, 0
693};
694
695const char filter_sepia_bgra_frag_glsl[] =
696#include "shader/filter_sepia_bgra.h"
697 ;
698Evas_GL_Program_Source shader_filter_sepia_bgra_frag_src =
699{
700 filter_sepia_bgra_frag_glsl,
701 NULL, 0
702};
703const char filter_sepia_bgra_nomul_frag_glsl[] =
704#include "shader/filter_sepia_bgra_nomul.h"
705 ;
706Evas_GL_Program_Source shader_filter_sepia_bgra_nomul_frag_src =
707{
708 filter_sepia_bgra_nomul_frag_glsl,
709 NULL, 0
710};
711
712/////////////////////////////////////////////
713#if 0
714 Blur is a work in progress currently.
715 Mostly because GPUs are so hopeless.
716const char filter_blur_vert_glsl[] =
717#include "shader/filter_blur_vert.h"
718 ;
719
720Evas_GL_Program_Source shader_filter_blur_vert_src =
721{
722 filter_blur_vert_glsl,
723 NULL, 0
724};
725
726const char filter_blur_frag_glsl[] =
727#include "shader/filter_blur.h"
728 ;
729Evas_GL_Program_Source shader_filter_blur_frag_src =
730{
731 filter_blur_frag_glsl,
732 NULL, 0
733};
734
735const char filter_blur_nomul_frag_glsl[] =
736#include "shader/filter_blur_nomul.h"
737 ;
738Evas_GL_Program_Source shader_filter_blur_nomul_frag_src =
739{
740 filter_blur_nomul_frag_glsl,
741 NULL, 0
742};
743
744const char filter_blur_bgra_frag_glsl[] =
745#include "shader/filter_blur_bgra.h"
746 ;
747Evas_GL_Program_Source shader_filter_blur_bgra_frag_src =
748{
749 filter_blur_bgra_frag_glsl,
750 NULL, 0
751};
752const char filter_blur_bgra_nomul_frag_glsl[] =
753#include "shader/filter_blur_bgra_nomul.h"
754 ;
755Evas_GL_Program_Source shader_filter_blur_bgra_nomul_frag_src =
756{
757 filter_blur_bgra_nomul_frag_glsl,
758 NULL, 0
759};
760
761#endif
762
763
764
765/////////////////////////////////////////////
766static void
767gl_compile_link_error(GLuint target, const char *action)
768{
769 int loglen = 0, chars = 0;
770 char *logtxt;
771
772 /* Shader info log */
773 glGetShaderiv(target, GL_INFO_LOG_LENGTH, &loglen);
774 if (loglen > 0)
775 {
776 logtxt = calloc(loglen, sizeof(char));
777 if (logtxt)
778 {
779 glGetShaderInfoLog(target, loglen, &chars, logtxt);
780 ERR("Failed to %s: %s", action, logtxt);
781 free(logtxt);
782 }
783 }
784
785 /* Program info log */
786 glGetProgramiv(target, GL_INFO_LOG_LENGTH, &loglen);
787 if (loglen > 0)
788 {
789 logtxt = calloc(loglen, sizeof(char));
790 if (logtxt)
791 {
792 glGetProgramInfoLog(target, loglen, &chars, logtxt);
793 ERR("Failed to %s: %s", action, logtxt);
794 free(logtxt);
795 }
796 }
797}
798
799static mode_t default_mode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
800
801static Eina_Bool
802_evas_gl_shader_file_is_dir(const char *file)
803{
804 struct stat st;
805
806 if (stat(file, &st) < 0) return EINA_FALSE;
807 if (S_ISDIR(st.st_mode)) return EINA_TRUE;
808 return EINA_FALSE;
809}
810
811static Eina_Bool
812_evas_gl_shader_file_mkdir(const char *dir)
813{
814 /* evas gl shader only call this function when the dir is not exist */
815 if (mkdir(dir, default_mode) < 0) return EINA_FALSE;
816 return EINA_TRUE;
817}
818
819static Eina_Bool
820_evas_gl_shader_file_exists(const char *file)
821{
822 struct stat st;
823 if (!file) return EINA_FALSE;
824 if (stat(file, &st) < 0) return EINA_FALSE;
825 return EINA_TRUE;
826}
827
828static inline Eina_Bool
829_evas_gl_shader_file_mkpath_if_not_exists(const char *path)
830{
831 struct stat st;
832
833 if (stat(path, &st) < 0)
834 return _evas_gl_shader_file_mkdir(path);
835 else if (!S_ISDIR(st.st_mode))
836 return EINA_FALSE;
837 else
838 return EINA_TRUE;
839}
840
841static Eina_Bool
842_evas_gl_shader_file_mkpath(const char *path)
843{
844 char ss[PATH_MAX];
845 unsigned int i;
846
847 if (_evas_gl_shader_file_is_dir(path)) return EINA_TRUE;
848
849 for (i = 0; path[i]; ss[i] = path[i], i++)
850 {
851 if (i == sizeof(ss) - 1) return EINA_FALSE;
852 if ((path[i] == '/') && (i > 0))
853 {
854 ss[i] = 0;
855 if (!_evas_gl_shader_file_mkpath_if_not_exists(ss))
856 return EINA_FALSE;
857 }
858 }
859 ss[i] = 0;
860 return _evas_gl_shader_file_mkpath_if_not_exists(ss);
861}
862
863static int
864_evas_gl_shader_dir_check(char *bin_shader_dir, int num)
865{
866 char *home = NULL;
867 char *subdir = ".cache/evas_gl_common_shaders";
868
869 home = getenv("HOME");
870 if ((!home) || (!home[0])) return 0;
871
872 snprintf(bin_shader_dir, num, "%s/%s", home, subdir);
873 return _evas_gl_shader_file_exists(bin_shader_dir);
874}
875
876static int
877_evas_gl_shader_file_check(const char *bin_shader_dir, char *bin_shader_file, int dir_num)
878{
879 char before_name[PATH_MAX];
880 char after_name[PATH_MAX];
881 int new_path_len = 0;
882 int i = 0, j = 0;
883
884 char *vendor = NULL;
885 char *driver = NULL;
886 char *version = NULL;
887
888 vendor = (char *)glGetString(GL_VENDOR);
889 driver = (char *)glGetString(GL_RENDERER);
890 version = (char *)glGetString(GL_VERSION);
891
892 new_path_len = snprintf(before_name, sizeof(before_name), "%s::%s::%s::%s::binary_shader.eet", vendor, version, driver, MODULE_ARCH);
893
894 /* remove '/' from file name */
895 for (i = 0; i < new_path_len; i++)
896 {
897 if (before_name[i] != '/')
898 {
899 after_name[j] = before_name[i];
900 j++;
901 }
902 }
903 after_name[j] = 0;
904
905 snprintf(bin_shader_file, dir_num, "%s/%s", bin_shader_dir, after_name);
906
907 return _evas_gl_shader_file_exists(bin_shader_file);
908}
909
910static int
911_evas_gl_common_shader_program_binary_init(Evas_GL_Program *p,
912 const char *pname,
913 Eet_File *ef)
914{
915 int res = 0, num = 0, length = 0;
916 int *formats = NULL;
917 void *data = NULL;
918 GLint ok = 0;
919
920 if (!ef) return res;
921
922 data = eet_read(ef, pname, &length);
923 if ((!data) || (length <= 0)) goto finish;
924
925 glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &num);
926 if (num <= 0) goto finish;
927
928 formats = calloc(num, sizeof(int));
929 if (!formats) goto finish;
930
931 glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, formats);
932 if (!formats[0]) goto finish;
933
934 p->prog = glCreateProgram();
935
936 glsym_glProgramBinary(p->prog, formats[0], data, length);
937
938 glBindAttribLocation(p->prog, SHAD_VERTEX, "vertex");
939 glBindAttribLocation(p->prog, SHAD_COLOR, "color");
940 glBindAttribLocation(p->prog, SHAD_TEXUV, "tex_coord");
941 glBindAttribLocation(p->prog, SHAD_TEXUV2, "tex_coord2");
942 glBindAttribLocation(p->prog, SHAD_TEXUV3, "tex_coord3");
943 glBindAttribLocation(p->prog, SHAD_TEXM, "tex_coordm");
944
945 glGetProgramiv(p->prog, GL_LINK_STATUS, &ok);
946 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
947 if (!ok)
948 {
949 gl_compile_link_error(p->prog, "load a program object");
950 ERR("Abort load of program (%s)", pname);
951 goto finish;
952 }
953
954 res = 1;
955
956finish:
957 if (formats) free(formats);
958 if (data) free(data);
959 if ((!res) && (p->prog))
960 {
961 glDeleteProgram(p->prog);
962 p->prog = 0;
963 }
964 return res;
965}
966
967static int
968_evas_gl_common_shader_program_binary_save(Evas_GL_Program *p,
969 const char *pname,
970 Eet_File *ef)
971{
972 void* data = NULL;
973 GLenum format;
974 int length = 0, size = 0;
975
976 if (!glsym_glGetProgramBinary) return 0;
977
978 glGetProgramiv(p->prog, GL_PROGRAM_BINARY_LENGTH, &length);
979 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
980 if (length <= 0) return 0;
981
982 data = malloc(length);
983 if (!data) return 0;
984
985 glsym_glGetProgramBinary(p->prog, length, &size, &format, data);
986 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
987
988 if (length != size)
989 {
990 free(data);
991 return 0;
992 }
993
994 if (eet_write(ef, pname, data, length, 0) < 0)
995 {
996 if (data) free(data);
997 return 0;
998 }
999 if (data) free(data);
1000 return 1;
1001}
1002
1003static int
1004_evas_gl_common_shader_program_source_init(Evas_GL_Program *p,
1005 Evas_GL_Program_Source *vert,
1006 Evas_GL_Program_Source *frag,
1007 const char *name)
1008{
1009 GLint ok;
1010
1011 p->vert = glCreateShader(GL_VERTEX_SHADER);
1012 p->frag = glCreateShader(GL_FRAGMENT_SHADER);
1013#if defined (GLES_VARIETY_S3C6410)
1014 glShaderBinary(1, &(p->vert), 0, vert->bin, vert->bin_size);
1015 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1016 glShaderBinary(1, &(p->frag), 0, frag->bin, frag->bin_size);
1017 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1018#else
1019 glShaderSource(p->vert, 1,
1020 (const char **)&(vert->src), NULL);
1021 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1022 glCompileShader(p->vert);
1023 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1024 ok = 0;
1025 glGetShaderiv(p->vert, GL_COMPILE_STATUS, &ok);
1026 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1027 if (!ok)
1028 {
1029 gl_compile_link_error(p->vert, "compile vertex shader");
1030 ERR("Abort compile of shader vert (%s): %s", name, vert->src);
1031 return 0;
1032 }
1033 glShaderSource(p->frag, 1,
1034 (const char **)&(frag->src), NULL);
1035 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1036 glCompileShader(p->frag);
1037 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1038 ok = 0;
1039 glGetShaderiv(p->frag, GL_COMPILE_STATUS, &ok);
1040 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1041 if (!ok)
1042 {
1043 gl_compile_link_error(p->frag, "compile fragment shader");
1044 ERR("Abort compile of shader frag (%s): %s", name, frag->src);
1045 return 0;
1046 }
1047#endif
1048 p->prog = glCreateProgram();
1049#if defined(GLES_VARIETY_S3C6410) || defined(GLES_VARIETY_SGX)
1050#else
1051 if ((glsym_glGetProgramBinary) && (glsym_glProgramParameteri))
1052 glsym_glProgramParameteri(p->prog, GL_PROGRAM_BINARY_RETRIEVABLE_HINT,
1053 GL_TRUE);
1054#endif
1055 glAttachShader(p->prog, p->vert);
1056 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1057 glAttachShader(p->prog, p->frag);
1058 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1059
1060 glBindAttribLocation(p->prog, SHAD_VERTEX, "vertex");
1061 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1062 glBindAttribLocation(p->prog, SHAD_COLOR, "color");
1063 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1064 glBindAttribLocation(p->prog, SHAD_TEXUV, "tex_coord");
1065 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1066 glBindAttribLocation(p->prog, SHAD_TEXUV2, "tex_coord2");
1067 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1068 glBindAttribLocation(p->prog, SHAD_TEXUV3, "tex_coord3");
1069 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1070 glBindAttribLocation(p->prog, SHAD_TEXM, "tex_coordm");
1071 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1072
1073 glLinkProgram(p->prog);
1074 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1075 ok = 0;
1076 glGetProgramiv(p->prog, GL_LINK_STATUS, &ok);
1077 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1078 if (!ok)
1079 {
1080 gl_compile_link_error(p->prog, "link fragment and vertex shaders");
1081 ERR("Abort compile of shader frag (%s): %s", name, frag->src);
1082 ERR("Abort compile of shader vert (%s): %s", name, vert->src);
1083 return 0;
1084 }
1085 return 1;
1086}
1087
1088#define SHADER_SOURCE_LINE(Big, Small) \
1089 { SHADER_##Big, &(shader_##Small##_vert_src), &(shader_##Small##_frag_src), #Small }
1090
1091#define SHADER_SOURCE_FILTER_LINE(Big, Small) \
1092 { SHADER_##Big, &(shader_img_vert_src), &(shader_##Small##_frag_src), #Small }
1093
1094static const struct {
1095 Evas_GL_Shader id;
1096 Evas_GL_Program_Source *vert;
1097 Evas_GL_Program_Source *frag;
1098 const char *name;
1099} _shaders_source[] = {
1100 SHADER_SOURCE_LINE(RECT, rect),
1101 SHADER_SOURCE_LINE(FONT, font),
1102 SHADER_SOURCE_LINE(IMG, img),
1103 SHADER_SOURCE_LINE(IMG_NOMUL, img_nomul),
1104 SHADER_SOURCE_LINE(IMG_BGRA, img_bgra),
1105 SHADER_SOURCE_LINE(IMG_BGRA_NOMUL, img_bgra_nomul),
1106 SHADER_SOURCE_LINE(IMG_MASK, img_mask),
1107 SHADER_SOURCE_LINE(YUV, yuv),
1108 SHADER_SOURCE_LINE(YUV_NOMUL, yuv_nomul),
1109 SHADER_SOURCE_LINE(YUY2, yuy2),
1110 SHADER_SOURCE_LINE(YUY2_NOMUL, yuy2_nomul),
1111 SHADER_SOURCE_LINE(NV12, nv12),
1112 SHADER_SOURCE_LINE(NV12_NOMUL, nv12_nomul),
1113 SHADER_SOURCE_LINE(TEX, tex),
1114 SHADER_SOURCE_LINE(TEX_NOMUL, tex_nomul),
1115 /* Most of the filters use the image fragment shader */
1116 SHADER_SOURCE_FILTER_LINE(FILTER_INVERT, filter_invert),
1117 SHADER_SOURCE_FILTER_LINE(FILTER_INVERT_NOMUL, filter_invert_nomul),
1118 SHADER_SOURCE_FILTER_LINE(FILTER_INVERT_BGRA, filter_invert_bgra),
1119 SHADER_SOURCE_FILTER_LINE(FILTER_INVERT_BGRA_NOMUL, filter_invert_bgra_nomul),
1120 SHADER_SOURCE_FILTER_LINE(FILTER_GREYSCALE, filter_greyscale),
1121 SHADER_SOURCE_FILTER_LINE(FILTER_GREYSCALE_NOMUL, filter_greyscale_nomul),
1122 SHADER_SOURCE_FILTER_LINE(FILTER_GREYSCALE_BGRA, filter_greyscale_bgra),
1123 SHADER_SOURCE_FILTER_LINE(FILTER_GREYSCALE_BGRA_NOMUL, filter_greyscale_bgra_nomul),
1124 SHADER_SOURCE_FILTER_LINE(FILTER_SEPIA, filter_sepia),
1125 SHADER_SOURCE_FILTER_LINE(FILTER_SEPIA_NOMUL, filter_sepia_nomul),
1126 SHADER_SOURCE_FILTER_LINE(FILTER_SEPIA_BGRA, filter_sepia_bgra),
1127 SHADER_SOURCE_FILTER_LINE(FILTER_SEPIA_BGRA_NOMUL, filter_sepia_bgra_nomul)/* , */
1128 /* SHADER_SOURCE_LINE(FILTER_BLUR, filter_blur), */
1129 /* SHADER_SOURCE_LINE(FILTER_BLUR_NOMUL, filter_blur_nomul), */
1130 /* SHADER_SOURCE_LINE(FILTER_BLUR_BGRA, filter_blur_bgra), */
1131 /* SHADER_SOURCE_LINE(FILTER_BLUR_BGRA_NOMUL, filter_blur_bgra_nomul) */
1132};
1133
1134static int
1135_evas_gl_common_shader_source_init(Evas_GL_Shared *shared)
1136{
1137 unsigned int i;
1138
1139 for (i = 0; i < sizeof (_shaders_source) / sizeof (_shaders_source[0]); ++i)
1140 if (!_evas_gl_common_shader_program_source_init(&(shared->shader[_shaders_source[i].id]),
1141 _shaders_source[i].vert,
1142 _shaders_source[i].frag,
1143 _shaders_source[i].name))
1144 return 0;
1145
1146 return 1;
1147}
1148
1149static int
1150_evas_gl_common_shader_binary_init(Evas_GL_Shared *shared)
1151{
1152 /* check eet */
1153 Eet_File *et = NULL;
1154 char bin_dir_path[PATH_MAX];
1155 char bin_file_path[PATH_MAX];
1156 unsigned int i;
1157
1158 if (!_evas_gl_shader_dir_check(bin_dir_path, sizeof(bin_dir_path)))
1159 return 0;
1160
1161 if (!_evas_gl_shader_file_check(bin_dir_path, bin_file_path,
1162 sizeof(bin_dir_path)))
1163 return 0;
1164
1165 /* use eet */
1166 if (!eet_init()) return 0;
1167 et = eet_open(bin_file_path, EET_FILE_MODE_READ);
1168 if (!et) goto error;
1169
1170 for (i = 0; i < sizeof (_shaders_source) / sizeof (_shaders_source[0]); ++i)
1171 if (!_evas_gl_common_shader_program_binary_init(&(shared->shader[_shaders_source[i].id]),
1172 _shaders_source[i].name,
1173 et))
1174 goto error;
1175
1176 if (et) eet_close(et);
1177 eet_shutdown();
1178 return 1;
1179
1180error:
1181 if (et) eet_close(et);
1182 eet_shutdown();
1183 return 0;
1184}
1185
1186static int
1187_evas_gl_common_shader_binary_save(Evas_GL_Shared *shared)
1188{
1189 /* check eet */
1190 Eet_File *et = NULL; //check eet file
1191 int tmpfd;
1192 int res = 0;
1193 char bin_dir_path[PATH_MAX];
1194 char bin_file_path[PATH_MAX];
1195 char tmp_file[PATH_MAX];
1196 unsigned int i;
1197
1198 if (!_evas_gl_shader_dir_check(bin_dir_path, sizeof(bin_dir_path)))
1199 res = _evas_gl_shader_file_mkpath(bin_dir_path);
1200 if (!res) return 0; /* we can't make directory */
1201
1202 _evas_gl_shader_file_check(bin_dir_path, bin_file_path,
1203 sizeof(bin_dir_path));
1204
1205 /* use mkstemp for writing */
1206 snprintf(tmp_file, sizeof(tmp_file), "%s.XXXXXX", bin_file_path);
1207 tmpfd = mkstemp(tmp_file);
1208 if (tmpfd < 0) goto error;
1209 close(tmpfd);
1210
1211 /* use eet */
1212 if (!eet_init()) goto error;
1213
1214 et = eet_open(tmp_file, EET_FILE_MODE_WRITE);
1215 if (!et) goto error;
1216
1217 for (i = 0; i < sizeof (_shaders_source) / sizeof (_shaders_source[0]); ++i)
1218 if (!_evas_gl_common_shader_program_binary_save(&(shared->shader[_shaders_source[i].id]),
1219 _shaders_source[i].name,
1220 et))
1221 goto error;
1222
1223 if (eet_close(et) != EET_ERROR_NONE) goto error;
1224 if (rename(tmp_file,bin_file_path) < 0) goto error;
1225 eet_shutdown();
1226 return 1;
1227
1228error:
1229 if (et) eet_close(et);
1230 if (_evas_gl_shader_file_exists(tmp_file)) unlink(tmp_file);
1231 eet_shutdown();
1232 return 0;
1233}
1234
1235int
1236evas_gl_common_shader_program_init(Evas_GL_Shared *shared)
1237{
1238 // gl support binary shader and get env of binary shader path
1239 if (shared->info.bin_program &&
1240 _evas_gl_common_shader_binary_init(shared)) return 1;
1241 /* compile all shader.*/
1242 if (!_evas_gl_common_shader_source_init(shared)) return 0;
1243 /* success compile all shader. if gl support binary shader, we need to save */
1244 if (shared->info.bin_program) _evas_gl_common_shader_binary_save(shared);
1245 return 1;
1246}
1247
1248void
1249evas_gl_common_shader_program_init_done(void)
1250{
1251#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1252 glReleaseShaderCompiler();
1253#endif
1254}
1255
1256void
1257evas_gl_common_shader_program_shutdown(Evas_GL_Program *p)
1258{
1259 if (p->vert) glDeleteShader(p->vert);
1260 if (p->frag) glDeleteShader(p->frag);
1261 if (p->prog) glDeleteProgram(p->prog);
1262}
diff --git a/libraries/evas/src/modules/engines/gl_common/evas_gl_texture.c b/libraries/evas/src/modules/engines/gl_common/evas_gl_texture.c
new file mode 100644
index 0000000..c99f4bd
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/evas_gl_texture.c
@@ -0,0 +1,1668 @@
1#include "evas_gl_private.h"
2
3static const GLenum rgba_fmt = GL_RGBA;
4static const GLenum rgba_ifmt = GL_RGBA;
5//#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
6//static const GLenum rgb_fmt = GL_RGBA;
7//static const GLenum rgb_ifmt = GL_RGBA;
8//#else
9static const GLenum rgb_fmt = GL_RGBA;
10static const GLenum rgb_ifmt = GL_RGB;
11//#endif
12#ifdef GL_BGRA
13# if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
14static const GLenum bgra_fmt = GL_BGRA;
15static const GLenum bgra_ifmt = GL_BGRA;
16static const GLenum bgr_fmt = GL_BGRA;
17static const GLenum bgr_ifmt = GL_BGRA;
18# else
19static const GLenum bgra_fmt = GL_BGRA;
20static const GLenum bgra_ifmt = GL_RGBA;
21static const GLenum bgr_fmt = GL_BGRA;
22static const GLenum bgr_ifmt = GL_RGB;
23# endif
24#endif
25static const GLenum alpha_fmt = GL_ALPHA;
26static const GLenum alpha_ifmt = GL_ALPHA;
27static const GLenum lum_fmt = GL_LUMINANCE;
28static const GLenum lum_ifmt = GL_LUMINANCE;
29static const GLenum lum_alpha_fmt = GL_LUMINANCE_ALPHA;
30static const GLenum lum_alpha_ifmt = GL_LUMINANCE_ALPHA;
31static const GLenum rgba8_ifmt = GL_RGBA;
32static const GLenum rgba8_fmt = GL_BGRA;
33
34static struct {
35 struct {
36 int num, pix;
37 } c, a, v, r, n, d;
38} texinfo = {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}};
39
40static void
41_print_tex_count(void)
42{
43 if (getenv("EVAS_GL_MEMINFO"))
44 {
45 fprintf(stderr,
46 "T: c:%i/%ik | a:%i/%ik | v:%i/%ik | r:%i/%ik | n:%i/%ik | d:%i/%ik\n",
47 texinfo.c.num, (texinfo.c.pix * 4) / 1024,
48 texinfo.a.num, (texinfo.a.pix ) / 1024,
49 texinfo.v.num, (texinfo.v.pix ) / 1024,
50 texinfo.r.num, (texinfo.r.pix * 4) / 1024,
51 texinfo.n.num, (texinfo.n.pix * 4) / 1024,
52 texinfo.d.num, (texinfo.d.pix * 4) / 1024
53 );
54 }
55}
56
57static int
58_nearest_pow2(int num)
59{
60 unsigned int n = num - 1;
61 n |= n >> 1;
62 n |= n >> 2;
63 n |= n >> 4;
64 n |= n >> 8;
65 n |= n >> 16;
66 return n + 1;
67}
68
69static void
70_tex_adjust(Evas_Engine_GL_Context *gc, int *w, int *h)
71{
72 if (gc->shared->info.tex_npo2) return;
73 /*if (gc->shared->info.tex_rect) return;*/
74 *w = _nearest_pow2(*w);
75 *h = _nearest_pow2(*h);
76}
77
78static int
79_tex_round_slot(Evas_Engine_GL_Context *gc, int h)
80{
81 if (!gc->shared->info.tex_npo2)
82 h = _nearest_pow2(h);
83 return (h + gc->shared->info.tune.atlas.slot_size - 1) /
84 gc->shared->info.tune.atlas.slot_size;
85}
86
87static int
88_tex_format_index(GLuint format)
89{
90 switch (format)
91 {
92 case GL_RGBA:
93#ifdef GL_BGRA
94 case GL_BGRA:
95#endif
96 return 0;
97 case GL_RGB:
98 return 1;
99 case GL_ALPHA:
100 return 2;
101 case GL_LUMINANCE: // never used in atlas
102 return 3;
103 default:
104 return 0;
105 }
106 return 0;
107}
108
109static void
110_tex_2d(int intfmt, int w, int h, int fmt, int type)
111{
112 int intfmtret = -1;
113 glTexImage2D(GL_TEXTURE_2D, 0, intfmt, w, h, 0, fmt, type, NULL);
114 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
115#ifdef GL_TEXTURE_INTERNAL_FORMAT
116// this is not in opengles!!! hrrrm
117 glGetTexLevelParameteriv(GL_TEXTURE_2D, 0,
118 GL_TEXTURE_INTERNAL_FORMAT, &intfmtret);
119 if (intfmtret != intfmt)
120 {
121 ERR("Fail tex alloc %ix%i", w, h);
122// XXX send async err to evas
123 }
124#endif
125}
126
127static void
128_tex_sub_2d(int x, int y, int w, int h, int fmt, int type, const void *pix)
129{
130 glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, fmt, type, pix);
131 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
132}
133
134static Evas_GL_Texture_Pool *
135_pool_tex_new(Evas_Engine_GL_Context *gc, int w, int h, int intformat, GLenum format)
136{
137 Evas_GL_Texture_Pool *pt;
138
139 pt = calloc(1, sizeof(Evas_GL_Texture_Pool));
140 if (!pt) return NULL;
141 h = _tex_round_slot(gc, h) * gc->shared->info.tune.atlas.slot_size;
142 _tex_adjust(gc, &w, &h);
143 pt->gc = gc;
144 pt->w = w;
145 pt->h = h;
146 pt->intformat = intformat;
147 pt->format = format;
148 pt->dataformat = GL_UNSIGNED_BYTE;
149 pt->references = 0;
150
151 if (format == alpha_fmt)
152 {
153 texinfo.a.num++;
154 texinfo.a.pix += pt->w * pt->h;
155 }
156 else if (format == lum_fmt)
157 {
158 texinfo.v.num++;
159 texinfo.v.pix += pt->w * pt->h;
160 }
161 else
162 {
163 texinfo.c.num++;
164 texinfo.c.pix += pt->w * pt->h;
165 }
166
167 _print_tex_count();
168
169 glGenTextures(1, &(pt->texture));
170 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
171 glBindTexture(GL_TEXTURE_2D, pt->texture);
172 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
173 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
174 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
175 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
176 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
177 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
178 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
179 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
180 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
181 _tex_2d(pt->intformat, w, h, pt->format, pt->dataformat);
182 glBindTexture(GL_TEXTURE_2D, gc->pipe[0].shader.cur_tex);
183 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
184 return pt;
185}
186
187static int
188_pool_tex_alloc(Evas_GL_Texture_Pool *pt, int w, int h __UNUSED__, int *u, int *v, Eina_List **l_after)
189{
190 Eina_List *l;
191 Evas_GL_Texture *tex, *tex2;
192 int nx, d, b;
193
194 if (pt->allocations)
195 {
196 tex = pt->allocations->data;
197 // if firest tex is not at left edge...
198 if (tex->x > (0 + 1))
199 {
200 if ((tex->x - 1) >= w)
201 {
202 *u = 0;
203 *v = 0;
204 *l_after = NULL;
205 return 1;
206 }
207 }
208 }
209 EINA_LIST_FOREACH(pt->allocations, l, tex)
210 {
211 b = tex->x + tex->w + 2;
212 if (l->next)
213 {
214 tex2 = l->next->data;
215 nx = tex2->x - 1;
216 }
217 else
218 nx = pt->w - 1;
219 d = nx - b;
220 if (d >= w)
221 {
222 *u = b;
223 *v = 0;
224 *l_after = l;
225 return 1;
226 }
227 }
228 *l_after = NULL;
229 return 0;
230}
231
232static Evas_GL_Texture_Pool *
233_pool_tex_find(Evas_Engine_GL_Context *gc, int w, int h,
234 int intformat, int format, int *u, int *v,
235 Eina_List **l_after, int atlas_w)
236{
237 Evas_GL_Texture_Pool *pt = NULL;
238 Eina_List *l;
239 int th, th2;
240
241 if (atlas_w > gc->shared->info.max_texture_size)
242 atlas_w = gc->shared->info.max_texture_size;
243 if ((w > gc->shared->info.tune.atlas.max_w) ||
244 (h > gc->shared->info.tune.atlas.max_h))
245 {
246 pt = _pool_tex_new(gc, w, h, intformat, format);
247 gc->shared->tex.whole = eina_list_prepend(gc->shared->tex.whole, pt);
248 pt->slot = -1;
249 pt->fslot = -1;
250 pt->whole = 1;
251 *u = 0;
252 *v = 0;
253 *l_after = NULL;
254 return pt;
255 }
256
257 th = _tex_round_slot(gc, h);
258 th2 = _tex_format_index(intformat);
259 EINA_LIST_FOREACH(gc->shared->tex.atlas[th][th2], l, pt)
260 {
261 if (_pool_tex_alloc(pt, w, h, u, v, l_after))
262 {
263 gc->shared->tex.atlas[th][th2] =
264 eina_list_remove_list(gc->shared->tex.atlas[th][th2], l);
265 gc->shared->tex.atlas[th][th2] =
266 eina_list_prepend(gc->shared->tex.atlas[th][th2], pt);
267 return pt;
268 }
269 }
270 pt = _pool_tex_new(gc, atlas_w, h, intformat, format);
271 gc->shared->tex.atlas[th][th2] =
272 eina_list_prepend(gc->shared->tex.atlas[th][th2], pt);
273 pt->slot = th;
274 pt->fslot = th2;
275 *u = 0;
276 *v = 0;
277 *l_after = NULL;
278 return pt;
279}
280
281Evas_GL_Texture *
282evas_gl_common_texture_new(Evas_Engine_GL_Context *gc, RGBA_Image *im)
283{
284 Evas_GL_Texture *tex;
285 Eina_List *l_after = NULL;
286 int u = 0, v = 0;
287
288 tex = calloc(1, sizeof(Evas_GL_Texture));
289 if (!tex) return NULL;
290
291 tex->gc = gc;
292 tex->references = 1;
293
294 if (im->cache_entry.flags.alpha)
295 {
296 if (gc->shared->info.bgra)
297 tex->pt = _pool_tex_find(gc, im->cache_entry.w + 2,
298 im->cache_entry.h + 1, bgra_ifmt, bgra_fmt,
299 &u, &v, &l_after,
300 gc->shared->info.tune.atlas.max_alloc_size);
301 else
302 tex->pt = _pool_tex_find(gc, im->cache_entry.w + 2,
303 im->cache_entry.h + 1, rgba_ifmt, rgba_fmt,
304 &u, &v, &l_after,
305 gc->shared->info.tune.atlas.max_alloc_size);
306 tex->alpha = 1;
307 }
308 else
309 {
310 if (gc->shared->info.bgra)
311 tex->pt = _pool_tex_find(gc, im->cache_entry.w + 3,
312 im->cache_entry.h + 1, bgr_ifmt, bgr_fmt,
313 &u, &v, &l_after,
314 gc->shared->info.tune.atlas.max_alloc_size);
315 else
316#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
317 tex->pt = _pool_tex_find(gc, im->cache_entry.w + 3,
318 im->cache_entry.h + 1, rgba_ifmt, rgba_fmt,
319 &u, &v, &l_after,
320 gc->shared->info.tune.atlas.max_alloc_size);
321#else
322 tex->pt = _pool_tex_find(gc, im->cache_entry.w + 3,
323 im->cache_entry.h + 1, rgb_ifmt, rgb_fmt,
324 &u, &v, &l_after,
325 gc->shared->info.tune.atlas.max_alloc_size);
326#endif
327 }
328 if (!tex->pt)
329 {
330 free(tex);
331 return NULL;
332 }
333 tex->x = u + 1;
334 tex->y = v;
335 tex->w = im->cache_entry.w;
336 tex->h = im->cache_entry.h;
337 if (l_after)
338 tex->pt->allocations =
339 eina_list_append_relative_list(tex->pt->allocations, tex, l_after);
340 else
341 tex->pt->allocations =
342 eina_list_prepend(tex->pt->allocations, tex);
343 tex->pt->references++;
344 evas_gl_common_texture_update(tex, im);
345 return tex;
346}
347
348static Evas_GL_Texture_Pool *
349_pool_tex_render_new(Evas_Engine_GL_Context *gc, int w, int h, int intformat, int format)
350{
351 Evas_GL_Texture_Pool *pt;
352
353 pt = calloc(1, sizeof(Evas_GL_Texture_Pool));
354 if (!pt) return NULL;
355 h = _tex_round_slot(gc, h) * gc->shared->info.tune.atlas.slot_size;
356 _tex_adjust(gc, &w, &h);
357 pt->gc = gc;
358 pt->w = w;
359 pt->h = h;
360 pt->intformat = intformat;
361 pt->format = format;
362 pt->dataformat = GL_UNSIGNED_BYTE;
363 pt->render = 1;
364 pt->references = 0;
365#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
366# ifndef GL_FRAMEBUFFER
367# define GL_FRAMEBUFFER GL_FRAMEBUFFER_OES
368# endif
369# ifndef GL_COLOR_ATTACHMENT0
370# define GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_OES
371# endif
372#else
373# ifndef GL_FRAMEBUFFER
374# define GL_FRAMEBUFFER GL_FRAMEBUFFER_EXT
375# endif
376# ifndef GL_COLOR_ATTACHMENT0
377# define GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT
378# endif
379#endif
380 texinfo.r.num++;
381 texinfo.r.pix += pt->w * pt->h;
382
383 _print_tex_count();
384
385 glGenTextures(1, &(pt->texture));
386 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
387 glBindTexture(GL_TEXTURE_2D, pt->texture);
388 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
389 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
390 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
391 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
392 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
393 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
394 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
395 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
396 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
397 _tex_2d(pt->intformat, w, h, pt->format, pt->dataformat);
398
399 glsym_glGenFramebuffers(1, &(pt->fb));
400 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
401 glsym_glBindFramebuffer(GL_FRAMEBUFFER, pt->fb);
402 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
403 glsym_glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, pt->texture, 0);
404 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
405 glsym_glBindFramebuffer(GL_FRAMEBUFFER, 0);
406 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
407
408 glBindTexture(GL_TEXTURE_2D, gc->pipe[0].shader.cur_tex);
409 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
410 return pt;
411}
412
413static Evas_GL_Texture_Pool *
414_pool_tex_native_new(Evas_Engine_GL_Context *gc, int w, int h, int intformat, int format, Evas_GL_Image *im)
415{
416 Evas_GL_Texture_Pool *pt;
417
418 pt = calloc(1, sizeof(Evas_GL_Texture_Pool));
419 if (!pt) return NULL;
420 pt->gc = gc;
421#ifdef GL_TEXTURE_RECTANGLE_ARB
422 if (im->native.target == GL_TEXTURE_RECTANGLE_ARB)
423 {
424 printf("REEEEEEEEECT\n");
425 pt->w = w;
426 pt->h = h;
427 }
428 else
429#endif
430 {
431 // FIXME: handle po2 only textures
432 pt->w = w;
433 pt->h = h;
434 }
435 pt->intformat = intformat;
436 pt->format = format;
437 pt->dataformat = GL_UNSIGNED_BYTE;
438 pt->references = 0;
439 pt->native = 1;
440 texinfo.n.num++;
441 texinfo.n.pix += pt->w * pt->h;
442
443 _print_tex_count();
444
445 glGenTextures(1, &(pt->texture));
446 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
447 glBindTexture(im->native.target, pt->texture);
448 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
449
450#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
451#else
452 if (im->native.loose)
453 {
454 if (im->native.func.bind)
455 im->native.func.bind(im->native.func.data, im);
456 }
457#endif
458
459 glTexParameteri(im->native.target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
460 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
461 glTexParameteri(im->native.target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
462 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
463 glTexParameteri(im->native.target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
464 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
465 glTexParameteri(im->native.target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
466 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
467 glBindTexture(im->native.target, 0);
468 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
469 glBindTexture(im->native.target, gc->pipe[0].shader.cur_tex);
470 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
471 return pt;
472}
473
474static Evas_GL_Texture_Pool *
475_pool_tex_dynamic_new(Evas_Engine_GL_Context *gc, int w, int h, int intformat, int format)
476{
477 Evas_GL_Texture_Pool *pt = NULL;
478
479#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
480 int fmt; // EGL_MAP_GL_TEXTURE_RGBA_SEC or EGL_MAP_GL_TEXTURE_RGB_SEC or bust
481 int pixtype; // EGL_MAP_GL_TEXTURE_UNSIGNED_BYTE_SEC or bust
482 int glformat;
483 int attr[] =
484 {
485 EGL_MAP_GL_TEXTURE_WIDTH_SEC, 32,
486 EGL_MAP_GL_TEXTURE_HEIGHT_SEC, 32,
487 EGL_MAP_GL_TEXTURE_FORMAT_SEC, EGL_MAP_GL_TEXTURE_RGBA_SEC,
488 EGL_MAP_GL_TEXTURE_PIXEL_TYPE_SEC, EGL_MAP_GL_TEXTURE_UNSIGNED_BYTE_SEC,
489 EGL_NONE
490 };
491 void *egldisplay;
492
493 if (intformat != format) return NULL;
494
495 switch (intformat)
496 {
497#ifdef EGL_MAP_GL_TEXTURE_LUMINANCE_SEC
498 case GL_LUMINANCE: attr[5] = EGL_MAP_GL_TEXTURE_LUMINANCE_SEC; break;
499#endif
500#ifdef EGL_MAP_GL_TEXTURE_LUMINANCE_ALPHA_SEC
501 case GL_LUMINANCE_ALPHA: attr[5] = EGL_MAP_GL_TEXTURE_LUMINANCE_ALPHA_SEC; break;
502#endif
503 case GL_RGBA: attr[5] = EGL_MAP_GL_TEXTURE_RGBA_SEC; break;
504 case GL_BGRA: attr[5] = EGL_MAP_GL_TEXTURE_BGRA_SEC; break;
505 default: fprintf(stderr, "unknown format\n"); return NULL;
506 }
507
508 pt = calloc(1, sizeof(Evas_GL_Texture_Pool));
509 if (!pt) return NULL;
510 h = _tex_round_slot(gc, h) * gc->shared->info.tune.atlas.slot_size;
511 _tex_adjust(gc, &w, &h);
512 pt->gc = gc;
513 pt->w = w;
514 pt->h = h;
515 pt->intformat = intformat;
516 pt->format = format;
517 pt->dataformat = GL_UNSIGNED_BYTE;
518 pt->render = 1;
519 pt->references = 0;
520 texinfo.d.num++;
521 texinfo.d.pix += pt->w * pt->h;
522
523 _print_tex_count();
524
525 glGenTextures(1, &(pt->texture));
526 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
527 glBindTexture(GL_TEXTURE_2D, pt->texture);
528 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
529 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
530 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
531 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
532 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
533 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
534 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
535 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
536 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
537
538 egldisplay = pt->gc->egldisp;
539
540 attr[1] = pt->w;
541 attr[3] = pt->h;
542
543 // FIXME: seems a bit slower than i'd like - maybe too many flushes?
544 // FIXME: YCbCr no support as yet
545 pt->dyn.img = secsym_eglCreateImage(egldisplay,
546 EGL_NO_CONTEXT,
547 EGL_MAP_GL_TEXTURE_2D_SEC,
548 0, attr);
549 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
550 if (!pt->dyn.img)
551 {
552 glBindTexture(GL_TEXTURE_2D, 0);
553 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
554 glDeleteTextures(1, &(pt->texture));
555 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
556 free(pt);
557 return NULL;
558 }
559 if (secsym_eglGetImageAttribSEC(egldisplay,
560 pt->dyn.img,
561 EGL_MAP_GL_TEXTURE_WIDTH_SEC,
562 &(pt->dyn.w)) != EGL_TRUE) goto error;
563 if (secsym_eglGetImageAttribSEC(egldisplay,
564 pt->dyn.img,
565 EGL_MAP_GL_TEXTURE_HEIGHT_SEC,
566 &(pt->dyn.h)) != EGL_TRUE) goto error;
567 if (secsym_eglGetImageAttribSEC(egldisplay,
568 pt->dyn.img,
569 EGL_MAP_GL_TEXTURE_STRIDE_IN_BYTES_SEC,
570 &(pt->dyn.stride)) != EGL_TRUE) goto error;
571 if (secsym_eglGetImageAttribSEC(egldisplay,
572 pt->dyn.img,
573 EGL_MAP_GL_TEXTURE_FORMAT_SEC,
574 &(fmt)) != EGL_TRUE) goto error;
575
576 if (secsym_eglGetImageAttribSEC(egldisplay,
577 pt->dyn.img,
578 EGL_MAP_GL_TEXTURE_PIXEL_TYPE_SEC,
579 &(pixtype)) != EGL_TRUE) goto error;
580
581 if (pixtype != EGL_MAP_GL_TEXTURE_UNSIGNED_BYTE_SEC) goto error;
582
583 glBindTexture(GL_TEXTURE_2D, gc->pipe[0].shader.cur_tex);
584 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
585#else
586 gc = NULL;
587 w = 0;
588 h = 0;
589 intformat = 0;
590 format = 0;
591#endif
592 return pt;
593
594/* ERROR HANDLING */
595#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
596error:
597 secsym_eglDestroyImage(egldisplay, pt->dyn.img);
598 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
599 pt->dyn.img = NULL;
600 glBindTexture(GL_TEXTURE_2D, 0);
601 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
602 glDeleteTextures(1, &(pt->texture));
603 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
604 free(pt);
605 return NULL;
606#endif
607}
608
609void
610evas_gl_texture_pool_empty(Evas_GL_Texture_Pool *pt)
611{
612 if (!pt->gc) return;
613
614 if (pt->format == alpha_fmt)
615 {
616 texinfo.a.num--;
617 texinfo.a.pix -= pt->w * pt->h;
618 }
619 else if (pt->format == lum_fmt)
620 {
621 texinfo.v.num--;
622 texinfo.v.pix -= pt->w * pt->h;
623 }
624 else if (pt->dyn.img)
625 {
626 texinfo.d.num--;
627 texinfo.d.pix -= pt->w * pt->h;
628 }
629 else if (pt->render)
630 {
631 texinfo.r.num--;
632 texinfo.r.pix -= pt->w * pt->h;
633 }
634 else if (pt->native)
635 {
636 texinfo.n.num--;
637 texinfo.n.pix -= pt->w * pt->h;
638 }
639 else
640 {
641 texinfo.c.num--;
642 texinfo.c.pix -= pt->w * pt->h;
643 }
644
645 _print_tex_count();
646
647#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
648 if (pt->dyn.img)
649 {
650 if (pt->dyn.checked_out > 0)
651 secsym_eglUnmapImageSEC(pt->gc->egldisp, pt->dyn.img);
652 secsym_eglDestroyImage(pt->gc->egldisp, pt->dyn.img);
653 pt->dyn.img = NULL;
654 pt->dyn.data = NULL;
655 pt->dyn.w = 0;
656 pt->dyn.h = 0;
657 pt->dyn.stride = 0;
658 pt->dyn.checked_out = 0;
659 }
660#endif
661
662 glDeleteTextures(1, &(pt->texture));
663 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
664 if (pt->fb)
665 {
666 glsym_glDeleteFramebuffers(1, &(pt->fb));
667 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
668 pt->fb = 0;
669 }
670 while (pt->allocations)
671 pt->allocations =
672 eina_list_remove_list(pt->allocations, pt->allocations);
673 pt->texture = 0;
674 pt->gc = NULL;
675 pt->w = 0;
676 pt->h = 0;
677}
678
679static void
680pt_unref(Evas_GL_Texture_Pool *pt)
681{
682 if (!pt) return;
683 if (!pt->gc) return;
684 pt->references--;
685 if (pt->references != 0) return;
686
687 if (!((pt->render) || (pt->native)))
688 {
689 if (pt->whole)
690 pt->gc->shared->tex.whole =
691 eina_list_remove(pt->gc->shared->tex.whole, pt);
692 else
693 pt->gc->shared->tex.atlas [pt->slot][pt->fslot] =
694 eina_list_remove(pt->gc->shared->tex.atlas[pt->slot][pt->fslot], pt);
695 }
696 evas_gl_texture_pool_empty(pt);
697 free(pt);
698}
699
700static void
701pt_link(Evas_Engine_GL_Context *gc, Evas_GL_Texture *tex, Evas_GL_Texture_Pool *pt)
702{
703 gc->shared->tex.whole = eina_list_prepend(gc->shared->tex.whole, pt);
704 pt->slot = -1;
705 pt->fslot = -1;
706 pt->whole = 1;
707 pt->allocations = eina_list_prepend(pt->allocations, tex);
708 pt->references++;
709}
710
711Evas_GL_Texture *
712evas_gl_common_texture_native_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, Evas_GL_Image *im)
713{
714 Evas_GL_Texture *tex;
715
716 tex = calloc(1, sizeof(Evas_GL_Texture));
717 if (!tex) return NULL;
718
719 tex->gc = gc;
720 tex->references = 1;
721 tex->alpha = alpha;
722 if (alpha)
723 {
724 if (gc->shared->info.bgra)
725 tex->pt = _pool_tex_native_new(gc, w, h, rgba_ifmt, rgba_fmt, im);
726 else
727 tex->pt = _pool_tex_native_new(gc, w, h, rgba_ifmt, rgba_fmt, im);
728 }
729 else
730 {
731 if (gc->shared->info.bgra)
732 tex->pt = _pool_tex_native_new(gc, w, h, rgb_ifmt, rgb_fmt, im);
733 else
734 tex->pt = _pool_tex_native_new(gc, w, h, rgb_ifmt, rgb_fmt, im);
735 }
736 if (!tex->pt)
737 {
738 free(tex);
739 return NULL;
740 }
741 tex->x = 0;
742 tex->y = 0;
743 tex->w = w;
744 tex->h = h;
745 tex->pt->references++;
746 return tex;
747}
748
749Evas_GL_Texture *
750evas_gl_common_texture_render_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha)
751{
752 Evas_GL_Texture *tex;
753
754 tex = calloc(1, sizeof(Evas_GL_Texture));
755 if (!tex) return NULL;
756
757 tex->gc = gc;
758 tex->references = 1;
759 tex->alpha = alpha;
760 if (alpha)
761 {
762 if (gc->shared->info.bgra)
763 tex->pt = _pool_tex_render_new(gc, w, h, rgba_ifmt, rgba_fmt);
764 else
765 tex->pt = _pool_tex_render_new(gc, w, h, rgba_ifmt, rgba_fmt);
766 }
767 else
768 {
769 if (gc->shared->info.bgra)
770 tex->pt = _pool_tex_render_new(gc, w, h, rgb_ifmt, rgb_fmt);
771 else
772 tex->pt = _pool_tex_render_new(gc, w, h, rgb_ifmt, rgb_fmt);
773 }
774 if (!tex->pt)
775 {
776 free(tex);
777 return NULL;
778 }
779 tex->x = 0;
780 tex->y = 0;
781 tex->w = w;
782 tex->h = h;
783 tex->pt->references++;
784 return tex;
785}
786
787Evas_GL_Texture *
788evas_gl_common_texture_dynamic_new(Evas_Engine_GL_Context *gc, Evas_GL_Image *im)
789{
790 Evas_GL_Texture *tex;
791
792 tex = calloc(1, sizeof(Evas_GL_Texture));
793 if (!tex) return NULL;
794
795 tex->gc = gc;
796 tex->references = 1;
797 tex->alpha = im->alpha;
798 tex->x = 0;
799 tex->y = 0;
800 tex->w = im->w;
801 tex->h = im->h;
802 if (tex->alpha)
803 {
804 if (gc->shared->info.bgra)
805 tex->pt = _pool_tex_dynamic_new(gc, tex->w, tex->h, bgra_ifmt, bgra_fmt);
806 else
807 tex->pt = _pool_tex_dynamic_new(gc, tex->w, tex->h, bgra_ifmt, bgra_fmt);
808 }
809 else
810 {
811 if (gc->shared->info.bgra)
812 tex->pt = _pool_tex_dynamic_new(gc, tex->w, tex->h, bgra_ifmt, bgra_fmt);
813 else
814 tex->pt = _pool_tex_dynamic_new(gc, tex->w, tex->h, bgra_ifmt, bgra_fmt);
815 }
816 if (!tex->pt)
817 {
818 free(tex);
819 return NULL;
820 }
821 tex->pt->references++;
822 return tex;
823}
824
825void
826evas_gl_common_texture_update(Evas_GL_Texture *tex, RGBA_Image *im)
827{
828 GLuint fmt;
829
830 if (tex->alpha != im->cache_entry.flags.alpha)
831 {
832 tex->pt->allocations = eina_list_remove(tex->pt->allocations, tex);
833 pt_unref(tex->pt);
834 tex->alpha = im->cache_entry.flags.alpha;
835 if (tex->alpha)
836 {
837 if (tex->gc->shared->info.bgra)
838 tex->pt = _pool_tex_render_new(tex->gc, tex->w, tex->h, bgra_ifmt, bgra_fmt);
839 else
840 tex->pt = _pool_tex_render_new(tex->gc, tex->w, tex->h, rgba_ifmt, rgba_fmt);
841 }
842 else
843 {
844 if (tex->gc->shared->info.bgra)
845 tex->pt = _pool_tex_render_new(tex->gc, tex->w, tex->h, bgr_ifmt, bgr_fmt);
846 else
847 tex->pt = _pool_tex_render_new(tex->gc, tex->w, tex->h, rgb_ifmt, rgb_fmt);
848 }
849 }
850 if (!tex->pt) return;
851 if (!im->image.data) return;
852
853 fmt = tex->pt->format;
854 glBindTexture(GL_TEXTURE_2D, tex->pt->texture);
855 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
856#ifdef GL_UNPACK_ROW_LENGTH
857 glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
858 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
859#endif
860 glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
861 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
862
863// printf("tex upload %ix%i\n", im->cache_entry.w, im->cache_entry.h);
864 // +-+
865 // +-+
866 //
867 _tex_sub_2d(tex->x, tex->y,
868 im->cache_entry.w, im->cache_entry.h,
869 fmt, tex->pt->dataformat,
870 im->image.data);
871 // xxx
872 // xxx
873 // ---
874 _tex_sub_2d(tex->x, tex->y + im->cache_entry.h,
875 im->cache_entry.w, 1,
876 fmt, tex->pt->dataformat,
877 im->image.data + ((im->cache_entry.h - 1) * im->cache_entry.w));
878 // xxx
879 // xxx
880 // o
881 _tex_sub_2d(tex->x - 1, tex->y + im->cache_entry.h,
882 1, 1,
883 fmt, tex->pt->dataformat,
884 im->image.data + ((im->cache_entry.h - 1) * im->cache_entry.w));
885 // xxx
886 // xxx
887 // o
888 _tex_sub_2d(tex->x + im->cache_entry.w, tex->y + im->cache_entry.h,
889 1, 1,
890 fmt, tex->pt->dataformat,
891 im->image.data + ((im->cache_entry.h - 1) * im->cache_entry.w) + (im->cache_entry.w - 1));
892#ifdef GL_UNPACK_ROW_LENGTH
893 glPixelStorei(GL_UNPACK_ROW_LENGTH, im->cache_entry.w);
894 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
895 // |xxx
896 // |xxx
897 //
898 _tex_sub_2d(tex->x - 1, tex->y,
899 1, im->cache_entry.h,
900 fmt, tex->pt->dataformat,
901 im->image.data);
902 // xxx|
903 // xxx|
904 //
905 _tex_sub_2d(tex->x + im->cache_entry.w, tex->y,
906 1, im->cache_entry.h,
907 fmt, tex->pt->dataformat,
908 im->image.data + (im->cache_entry.w - 1));
909#else
910 {
911 DATA32 *tpix, *ps, *pd;
912 int i;
913
914 tpix = alloca(im->cache_entry.h * sizeof(DATA32));
915 pd = tpix;
916 ps = im->image.data;
917 for (i = 0; i < im->cache_entry.h; i++)
918 {
919 *pd = *ps;
920 pd++;
921 ps += im->cache_entry.w;
922 }
923 // |xxx
924 // |xxx
925 //
926 _tex_sub_2d(tex->x - 1, tex->y,
927 1, im->cache_entry.h,
928 fmt, tex->pt->dataformat,
929 tpix);
930 pd = tpix;
931 ps = im->image.data + (im->cache_entry.w - 1);
932 for (i = 0; i < im->cache_entry.h; i++)
933 {
934 *pd = *ps;
935 pd++;
936 ps += im->cache_entry.w;
937 }
938 // xxx|
939 // xxx|
940 //
941 _tex_sub_2d(tex->x + im->cache_entry.w, tex->y,
942 1, im->cache_entry.h,
943 fmt, tex->pt->dataformat,
944 tpix);
945 }
946#endif
947 if (tex->pt->texture != tex->gc->pipe[0].shader.cur_tex)
948 {
949 glBindTexture(GL_TEXTURE_2D, tex->gc->pipe[0].shader.cur_tex);
950 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
951 }
952}
953
954void
955evas_gl_common_texture_free(Evas_GL_Texture *tex)
956{
957 if (!tex) return;
958 tex->references--;
959 if (tex->references != 0) return;
960 if (tex->double_buffer.pt[0])
961 {
962 tex->double_buffer.pt[0]->allocations = eina_list_remove(tex->double_buffer.pt[0]->allocations, tex);
963 tex->double_buffer.pt[1]->allocations = eina_list_remove(tex->double_buffer.pt[1]->allocations, tex);
964 tex->double_buffer.ptuv[0]->allocations = eina_list_remove(tex->double_buffer.ptuv[0]->allocations, tex);
965 tex->double_buffer.ptuv[1]->allocations = eina_list_remove(tex->double_buffer.ptuv[1]->allocations, tex);
966 }
967 else
968 {
969 if (tex->pt)
970 {
971 tex->pt->allocations = eina_list_remove(tex->pt->allocations, tex);
972 pt_unref(tex->pt);
973 }
974 if (tex->ptu)
975 {
976 tex->ptu->allocations = eina_list_remove(tex->ptu->allocations, tex);
977 pt_unref(tex->ptu);
978 }
979 if (tex->ptv)
980 {
981 tex->ptv->allocations = eina_list_remove(tex->ptv->allocations, tex);
982 pt_unref(tex->ptv);
983 }
984 if (tex->ptuv)
985 {
986 tex->ptuv->allocations = eina_list_remove(tex->ptuv->allocations, tex);
987 pt_unref(tex->ptuv);
988 }
989 }
990 free(tex);
991}
992
993Evas_GL_Texture *
994evas_gl_common_texture_alpha_new(Evas_Engine_GL_Context *gc, DATA8 *pixels,
995 unsigned int w, unsigned int h, int fh)
996{
997 Evas_GL_Texture *tex;
998 Eina_List *l_after = NULL;
999 int u = 0, v = 0;
1000
1001 tex = calloc(1, sizeof(Evas_GL_Texture));
1002 if (!tex) return NULL;
1003
1004 tex->gc = gc;
1005 tex->references = 1;
1006 tex->pt = _pool_tex_find(gc, w + 3, fh, alpha_ifmt, alpha_fmt, &u, &v,
1007 &l_after,
1008 gc->shared->info.tune.atlas.max_alloc_alpha_size);
1009 if (!tex->pt)
1010 {
1011 free(tex);
1012 return NULL;
1013 }
1014 tex->x = u + 1;
1015 tex->y = v;
1016 tex->w = w;
1017 tex->h = h;
1018 if (l_after)
1019 tex->pt->allocations =
1020 eina_list_append_relative_list(tex->pt->allocations, tex, l_after);
1021 else
1022 tex->pt->allocations = eina_list_prepend(tex->pt->allocations, tex);
1023 tex->pt->references++;
1024 evas_gl_common_texture_alpha_update(tex, pixels, w, h, fh);
1025 return tex;
1026}
1027
1028void
1029evas_gl_common_texture_alpha_update(Evas_GL_Texture *tex, DATA8 *pixels,
1030 unsigned int w, unsigned int h, int fh __UNUSED__)
1031{
1032 if (!tex->pt) return;
1033 glBindTexture(GL_TEXTURE_2D, tex->pt->texture);
1034 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1035#ifdef GL_UNPACK_ROW_LENGTH
1036 glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
1037 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1038#endif
1039 glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
1040 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1041 _tex_sub_2d(tex->x, tex->y, w, h, tex->pt->format, tex->pt->dataformat,
1042 pixels);
1043 if (tex->pt->texture != tex->gc->pipe[0].shader.cur_tex)
1044 {
1045 glBindTexture(GL_TEXTURE_2D, tex->gc->pipe[0].shader.cur_tex);
1046 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1047 }
1048}
1049
1050Evas_GL_Texture *
1051evas_gl_common_texture_yuv_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h)
1052{
1053 Evas_GL_Texture *tex;
1054
1055 tex = calloc(1, sizeof(Evas_GL_Texture));
1056 if (!tex) return NULL;
1057
1058 tex->gc = gc;
1059 tex->references = 1;
1060 tex->ptu = _pool_tex_new(gc, w / 2 + 1, h / 2 + 1, lum_ifmt, lum_fmt);
1061 if (!tex->ptu)
1062 {
1063 free(tex);
1064 return NULL;
1065 }
1066 gc->shared->tex.whole = eina_list_prepend(gc->shared->tex.whole, tex->ptu);
1067 tex->ptu->slot = -1;
1068 tex->ptu->fslot = -1;
1069 tex->ptu->whole = 1;
1070 tex->ptv = _pool_tex_new(gc, tex->ptu->w, tex->ptu->h, lum_ifmt, lum_fmt);
1071 if (!tex->ptv)
1072 {
1073 pt_unref(tex->pt);
1074 pt_unref(tex->ptu);
1075 free(tex);
1076 return NULL;
1077 }
1078 gc->shared->tex.whole = eina_list_prepend(gc->shared->tex.whole, tex->ptv);
1079 tex->ptv->slot = -1;
1080 tex->ptv->fslot = -1;
1081 tex->ptv->whole = 1;
1082 tex->pt = _pool_tex_new(gc, tex->ptu->w * 2, tex->ptu->h * 2, lum_ifmt, lum_fmt);
1083 if (!tex->pt)
1084 {
1085 free(tex);
1086 return NULL;
1087 }
1088 gc->shared->tex.whole = eina_list_prepend(gc->shared->tex.whole, tex->pt);
1089 tex->pt->slot = -1;
1090 tex->pt->fslot = -1;
1091 tex->pt->whole = 1;
1092 tex->x = 0;
1093 tex->y = 0;
1094 tex->w = w;
1095 tex->h = h;
1096 tex->pt->allocations = eina_list_prepend(tex->pt->allocations, tex);
1097 tex->ptu->allocations = eina_list_prepend(tex->ptu->allocations, tex);
1098 tex->ptv->allocations = eina_list_prepend(tex->ptv->allocations, tex);
1099 tex->pt->references++;
1100 tex->ptu->references++;
1101 tex->ptv->references++;
1102 evas_gl_common_texture_yuv_update(tex, rows, w, h);
1103 return tex;
1104}
1105
1106void
1107evas_gl_common_texture_yuv_update(Evas_GL_Texture *tex, DATA8 **rows, unsigned int w, unsigned int h)
1108{
1109 if (!tex->pt) return;
1110 // FIXME: works on lowest size 4 pixel high buffers. must also be multiple of 2
1111#ifdef GL_UNPACK_ROW_LENGTH
1112 glPixelStorei(GL_UNPACK_ROW_LENGTH, rows[1] - rows[0]);
1113 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1114 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
1115 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1116 glBindTexture(GL_TEXTURE_2D, tex->pt->texture);
1117 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1118 _tex_2d(tex->pt->intformat, w, h, tex->pt->format, tex->pt->dataformat);
1119 _tex_sub_2d(0, 0, w, h, tex->pt->format, tex->pt->dataformat, rows[0]);
1120 glBindTexture(GL_TEXTURE_2D, tex->ptu->texture);
1121 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1122 glPixelStorei(GL_UNPACK_ROW_LENGTH, rows[h + 1] - rows[h]);
1123 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1124 _tex_2d(tex->ptu->intformat, w / 2, h / 2, tex->ptu->format, tex->ptu->dataformat);
1125 _tex_sub_2d(0, 0, w / 2, h / 2, tex->ptu->format, tex->ptu->dataformat, rows[h]);
1126 glBindTexture(GL_TEXTURE_2D, tex->ptv->texture);
1127 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1128 glPixelStorei(GL_UNPACK_ROW_LENGTH, rows[h + (h / 2) + 1] - rows[h + (h / 2)]);
1129 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1130 _tex_2d(tex->ptv->intformat, w / 2, h / 2, tex->ptv->format, tex->ptv->dataformat);
1131 _tex_sub_2d(0, 0, w / 2, h / 2, tex->ptv->format, tex->ptv->dataformat, rows[h + (h / 2)]);
1132#else
1133 unsigned int y;
1134
1135 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
1136 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1137 glBindTexture(GL_TEXTURE_2D, tex->pt->texture);
1138 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1139 _tex_2d(tex->pt->intformat, w, h, tex->pt->format, tex->pt->dataformat);
1140 if ((rows[1] - rows[0]) == (int)w)
1141 _tex_sub_2d(0, 0, w, h, tex->pt->format, tex->pt->dataformat, rows[0]);
1142 else
1143 {
1144 for (y = 0; y < h; y++)
1145 _tex_sub_2d(0, y, w, 1, tex->pt->format, tex->pt->dataformat, rows[y]);
1146 }
1147
1148 glBindTexture(GL_TEXTURE_2D, tex->ptu->texture);
1149 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1150 _tex_2d(tex->ptu->intformat, w / 2, h / 2, tex->ptu->format, tex->ptu->dataformat);
1151 if ((rows[h + 1] - rows[h]) == (int)(w / 2))
1152 _tex_sub_2d(0, 0, w / 2, h / 2, tex->ptu->format, tex->ptu->dataformat, rows[h]);
1153 else
1154 {
1155 for (y = 0; y < (h / 2); y++)
1156 _tex_sub_2d(0, y, w / 2, 1, tex->ptu->format, tex->ptu->dataformat, rows[h + y]);
1157 }
1158
1159 glBindTexture(GL_TEXTURE_2D, tex->ptv->texture);
1160 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1161 _tex_2d(tex->ptv->intformat, w / 2, h / 2, tex->ptv->format, tex->ptv->dataformat);
1162 if ((rows[h + (h / 2) + 1] - rows[h + (h / 2)]) == (int)(w / 2))
1163 _tex_sub_2d(0, 0, w / 2, h / 2, tex->ptv->format, tex->ptv->dataformat, rows[h + (h / 2)]);
1164 else
1165 {
1166 for (y = 0; y < (h / 2); y++)
1167 _tex_sub_2d(0, y, w / 2, 1, tex->ptv->format, tex->ptv->dataformat, rows[h + (h / 2) + y]);
1168 }
1169#endif
1170 if (tex->pt->texture != tex->gc->pipe[0].shader.cur_tex)
1171 {
1172 glBindTexture(GL_TEXTURE_2D, tex->gc->pipe[0].shader.cur_tex);
1173 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1174 }
1175}
1176
1177static Evas_GL_Texture *
1178_evas_gl_common_texture_y2uv_new(Evas_Engine_GL_Context *gc,
1179 unsigned int yw, unsigned int yh,
1180 Eina_Bool uv2w, Eina_Bool uv2h,
1181 GLenum y_ifmt, GLenum y_fmt,
1182 GLenum uv_ifmt, GLenum uv_fmt,
1183 Eina_Bool dynamic)
1184{
1185 Evas_GL_Texture_Pool *pt[2] = { NULL, NULL };
1186 Evas_GL_Texture_Pool *ptuv[2] = { NULL, NULL };
1187 Evas_GL_Texture *tex;
1188 unsigned int uvw, uvh;
1189
1190 uvw = uv2w ? yw / 2 + 1 : yw + 1;
1191 uvh = uv2h ? yh / 2 + 1 : yh + 1;
1192
1193 if (!dynamic)
1194 {
1195 ptuv[0] = _pool_tex_new(gc, uvw, uvh, uv_ifmt, uv_fmt);
1196 ptuv[1] = _pool_tex_new(gc, uvw, uvh, uv_ifmt, uv_fmt);
1197
1198 if (ptuv[0] && ptuv[1])
1199 {
1200 pt[0] = _pool_tex_new(gc,
1201 ptuv[0]->w * (uv2w ? 2 : 1),
1202 ptuv[0]->h * (uv2h ? 2 : 1),
1203 y_ifmt, y_fmt);
1204 pt[1] = _pool_tex_new(gc,
1205 ptuv[1]->w * (uv2w ? 2 : 1),
1206 ptuv[1]->h * (uv2h ? 2 : 1),
1207 y_ifmt, y_fmt);
1208 }
1209 }
1210 else
1211 {
1212 ptuv[0] = _pool_tex_dynamic_new(gc, uvw, uvh, uv_ifmt, uv_fmt);
1213 ptuv[1] = _pool_tex_dynamic_new(gc, uvw, uvh, uv_ifmt, uv_fmt);
1214
1215 if (ptuv[0] && ptuv[1])
1216 {
1217 pt[0] = _pool_tex_dynamic_new(gc,
1218 ptuv[0]->w * (uv2w ? 2 : 1),
1219 ptuv[0]->h * (uv2h ? 2 : 1),
1220 y_ifmt, y_fmt);
1221 pt[1] = _pool_tex_dynamic_new(gc,
1222 ptuv[1]->w * (uv2w ? 2 : 1),
1223 ptuv[1]->h * (uv2h ? 2 : 1),
1224 y_ifmt, y_fmt);
1225 }
1226 }
1227
1228 if (!pt[0] || !pt[1] || !ptuv[0] || !ptuv[1])
1229 goto on_error;
1230
1231 INF("YUV [%i, %i] => Y[%i, %i], UV[%i, %i]",
1232 yw, yh,
1233 pt[0]->w, pt[0]->h,
1234 ptuv[0]->w, ptuv[0]->h);
1235 tex = calloc(1, sizeof(Evas_GL_Texture));
1236 if (!tex)
1237 goto on_error;
1238
1239 tex->gc = gc;
1240 tex->references = 1;
1241 tex->pt = pt[0];
1242 tex->ptuv = ptuv[0];
1243 tex->dyn = dynamic;
1244
1245 pt_link(gc, tex, pt[0]);
1246 pt_link(gc, tex, pt[1]);
1247 pt_link(gc, tex, ptuv[0]);
1248 pt_link(gc, tex, ptuv[1]);
1249
1250 tex->x = 0;
1251 tex->y = 0;
1252 tex->w = yw;
1253 tex->h = yh;
1254 tex->double_buffer.source = 0;
1255 memcpy(tex->double_buffer.pt, pt, sizeof (Evas_GL_Texture_Pool *) * 2);
1256 memcpy(tex->double_buffer.ptuv, ptuv, sizeof (Evas_GL_Texture_Pool *) * 2);
1257
1258 return tex;
1259
1260 on_error:
1261 pt_unref(pt[0]);
1262 pt_unref(pt[1]);
1263 pt_unref(ptuv[0]);
1264 pt_unref(ptuv[1]);
1265 return NULL;
1266}
1267
1268Evas_GL_Texture *
1269evas_gl_common_texture_yuy2_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h)
1270{
1271 Evas_GL_Texture *tex;
1272
1273 tex = _evas_gl_common_texture_y2uv_new(gc, w, h, EINA_TRUE, EINA_FALSE, lum_alpha_ifmt, lum_alpha_fmt, rgba8_ifmt, rgba8_fmt, 0);
1274 evas_gl_common_texture_yuy2_update(tex, rows, w, h);
1275 return tex;
1276}
1277
1278Evas_GL_Texture *
1279evas_gl_common_texture_nv12_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h)
1280{
1281 Evas_GL_Texture *tex;
1282
1283#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1284 tex = _evas_gl_common_texture_y2uv_new(gc, w, h, EINA_TRUE, EINA_TRUE, lum_ifmt, lum_fmt, lum_alpha_ifmt, lum_alpha_fmt, 1);
1285 if (!tex)
1286#endif
1287 tex = _evas_gl_common_texture_y2uv_new(gc, w, h, EINA_TRUE, EINA_TRUE, lum_ifmt, lum_fmt, lum_alpha_ifmt, lum_alpha_fmt, 0);
1288
1289 evas_gl_common_texture_nv12_update(tex, rows, w, h);
1290 return tex;
1291}
1292
1293Evas_GL_Texture *
1294evas_gl_common_texture_nv12tiled_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h)
1295{
1296 Evas_GL_Texture *tex = NULL;
1297
1298#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1299 tex = _evas_gl_common_texture_y2uv_new(gc, w, h, EINA_TRUE, EINA_TRUE, lum_ifmt, lum_fmt, lum_alpha_ifmt, lum_alpha_fmt, 1);
1300 if (!tex)
1301#endif
1302 tex = _evas_gl_common_texture_y2uv_new(gc, w, h, EINA_TRUE, EINA_TRUE, lum_ifmt, lum_fmt, lum_alpha_ifmt, lum_alpha_fmt, 0);
1303
1304 evas_gl_common_texture_nv12tiled_update(tex, rows, w, h);
1305 return tex;
1306}
1307
1308void
1309evas_gl_common_texture_yuy2_update(Evas_GL_Texture *tex, DATA8 **rows, unsigned int w, unsigned int h)
1310{
1311 if (!tex->pt) return;
1312 // FIXME: works on lowest size 4 pixel high buffers. must also be multiple of 2
1313 unsigned int y;
1314
1315 tex->double_buffer.source = 1 - tex->double_buffer.source;
1316 tex->pt = tex->double_buffer.pt[tex->double_buffer.source];
1317 tex->ptuv = tex->double_buffer.ptuv[tex->double_buffer.source];
1318
1319 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
1320 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1321 glBindTexture(GL_TEXTURE_2D, tex->pt->texture);
1322 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1323 _tex_2d(tex->pt->intformat, w, h, tex->pt->format, tex->pt->dataformat);
1324 if ((rows[1] - rows[0]) == (int)w * 4)
1325 _tex_sub_2d(0, 0, w, h, tex->pt->format, tex->pt->dataformat, rows[0]);
1326 else
1327 {
1328 for (y = 0; y < h; y++)
1329 _tex_sub_2d(0, y, w, 1, tex->pt->format, tex->pt->dataformat, rows[y]);
1330 }
1331
1332 glBindTexture(GL_TEXTURE_2D, tex->ptuv->texture);
1333 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1334 _tex_2d(tex->ptuv->intformat, w / 2, h, tex->ptuv->format, tex->ptuv->dataformat);
1335#if 0
1336 /*
1337 FIXME: this piece of code doesn't work anymore since texture width
1338 is not anymore exactly w / 2. I don't understand why.
1339 */
1340 if ((rows[1] - rows[0]) == (int)(w * 2))
1341 _tex_sub_2d(0, 0, w / 2, h, tex->ptuv->format, tex->ptuv->dataformat, rows[0]);
1342 else
1343#endif
1344 {
1345 for (y = 0; y < h; y++)
1346 _tex_sub_2d(0, y, w / 2, 1, tex->ptuv->format, tex->ptuv->dataformat, rows[y]);
1347 }
1348
1349 if (tex->pt->texture != tex->gc->pipe[0].shader.cur_tex)
1350 {
1351 glBindTexture(GL_TEXTURE_2D, tex->gc->pipe[0].shader.cur_tex);
1352 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1353 }
1354}
1355
1356void
1357evas_gl_common_texture_nv12_update(Evas_GL_Texture *tex, DATA8 **rows, unsigned int w, unsigned int h)
1358{
1359 if (!tex->pt) return;
1360
1361 tex->double_buffer.source = 1 - tex->double_buffer.source;
1362 tex->pt = tex->double_buffer.pt[tex->double_buffer.source];
1363 tex->ptuv = tex->double_buffer.ptuv[tex->double_buffer.source];
1364
1365 // FIXME: works on lowest size 4 pixel high buffers. must also be multiple of 2
1366#ifdef GL_UNPACK_ROW_LENGTH
1367 glPixelStorei(GL_UNPACK_ROW_LENGTH, rows[1] - rows[0]);
1368 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1369 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
1370 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1371 glBindTexture(GL_TEXTURE_2D, tex->pt->texture);
1372 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1373 _tex_2d(tex->pt->intformat, w, h, tex->pt->format, tex->pt->dataformat);
1374 _tex_sub_2d(0, 0, w, h, tex->pt->format, tex->pt->dataformat, rows[0]);
1375 glBindTexture(GL_TEXTURE_2D, tex->ptuv->texture);
1376 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1377 glPixelStorei(GL_UNPACK_ROW_LENGTH, rows[h + 1] - rows[h]);
1378 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1379 _tex_2d(tex->ptuv->intformat, w / 2, h / 2, tex->ptuv->format, tex->ptuv->dataformat);
1380 _tex_sub_2d(0, 0, w / 2, h / 2, tex->ptuv->format, tex->ptuv->dataformat, rows[h]);
1381#else
1382 unsigned int y;
1383
1384 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
1385 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1386 glBindTexture(GL_TEXTURE_2D, tex->pt->texture);
1387 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1388 _tex_2d(tex->pt->intformat, w, h, tex->pt->format, tex->pt->dataformat);
1389 if ((rows[1] - rows[0]) == (int)w)
1390 _tex_sub_2d(0, 0, w, h, tex->pt->format, tex->pt->dataformat, rows[0]);
1391 else
1392 {
1393 for (y = 0; y < h; y++)
1394 _tex_sub_2d(0, y, w, 1, tex->pt->format, tex->pt->dataformat, rows[y]);
1395 }
1396
1397 glBindTexture(GL_TEXTURE_2D, tex->ptuv->texture);
1398 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1399 _tex_2d(tex->ptuv->intformat, w / 2, h / 2, tex->ptuv->format, tex->ptuv->dataformat);
1400 if ((rows[h + 1] - rows[h]) == (int)(w / 2))
1401 _tex_sub_2d(0, 0, w / 2, h / 2, tex->ptuv->format, tex->ptuv->dataformat, rows[h]);
1402 else
1403 {
1404 for (y = 0; y < (h / 2); y++)
1405 _tex_sub_2d(0, y, w / 2, 1, tex->ptuv->format, tex->ptuv->dataformat, rows[h + y]);
1406 }
1407#endif
1408 if (tex->pt->texture != tex->gc->pipe[0].shader.cur_tex)
1409 {
1410 glBindTexture(GL_TEXTURE_2D, tex->gc->pipe[0].shader.cur_tex);
1411 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1412 }
1413}
1414
1415void
1416evas_gl_common_texture_nv12tiled_update(Evas_GL_Texture *tex, DATA8 **rows, unsigned int w, unsigned int h)
1417{
1418 unsigned int mb_x, mb_y, mb_w, mb_h;
1419 unsigned int base_h;
1420
1421 if (!tex->pt) return;
1422
1423 tex->double_buffer.source = 1 - tex->double_buffer.source;
1424 tex->pt = tex->double_buffer.pt[tex->double_buffer.source];
1425 tex->ptuv = tex->double_buffer.ptuv[tex->double_buffer.source];
1426
1427 mb_w = w / 64 + (w % 64 ? 1 : 0);
1428 mb_h = h / 32 + (h % 32 ? 1 : 0);
1429
1430#if ( defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX) )
1431 if (tex->dyn)
1432 {
1433 char *texture_addr;
1434 char *tmp;
1435
1436 texture_addr = secsym_eglMapImageSEC(tex->gc->egldisp, tex->pt->dyn.img);
1437
1438 /* Iterate each Y macroblock like we do in evas_convert_yuv.c */
1439 for (mb_y = 0; mb_y < (mb_h >> 1); mb_y++)
1440 {
1441 int step = 2;
1442 int offset = 0;
1443 int x = 0;
1444 int rmb_x = 0;
1445 int ry[2];
1446
1447 ry[0] = mb_y * 2 * 32 * tex->pt->dyn.stride;
1448 ry[1] = ry[0] + 32 * tex->pt->dyn.stride;
1449
1450 for (mb_x = 0; mb_x < mb_w * 2; mb_x++, rmb_x += 64 * 32)
1451 {
1452 unsigned int i;
1453
1454 tmp = texture_addr + x + ry[offset];
1455
1456 for (i = 0; i < 32 * 64; i += 64, tmp += tex->pt->dyn.stride)
1457 memcpy(tmp, rows[mb_y] + rmb_x + i, 64);
1458
1459 step++;
1460 if ((step & 0x3) == 0)
1461 {
1462 offset = 1 - offset;
1463 x -= 64;
1464 }
1465 else
1466 {
1467 x += 64;
1468 }
1469 }
1470 }
1471
1472 if (mb_h & 0x1)
1473 {
1474 int rmb_x = 0;
1475 int x = 0;
1476 int ry;
1477
1478 ry = mb_y * 2 * 32 * tex->pt->dyn.stride;
1479
1480 for (mb_x = 0; mb_x < mb_w; mb_x++, x += 64, rmb_x += 64 * 32)
1481 {
1482 unsigned int i;
1483
1484 tmp = texture_addr + x + ry;
1485
1486 for (i = 0; i < 32 * 64; i += 64, tmp += tex->pt->dyn.stride)
1487 memcpy(tmp, rows[mb_y] + rmb_x + i, 64);
1488 }
1489 }
1490
1491 secsym_eglUnmapImageSEC(tex->gc->egldisp, tex->pt->dyn.img);
1492
1493 texture_addr = secsym_eglMapImageSEC(tex->gc->egldisp, tex->ptuv->dyn.img);
1494
1495 /* Iterate each UV macroblock like we do in evas_convert_yuv.c */
1496 base_h = (mb_h >> 1) + (mb_h & 0x1);
1497
1498 /* h is always a multiple of 32 */
1499 mb_h = h / 2;
1500 mb_h = (mb_h / 32 + (mb_h % 32 ? 1 : 0));
1501
1502 mb_w = w / 2;
1503 mb_w = (mb_w / 32 + (mb_w % 32 ? 1 : 0));
1504
1505 for (mb_y = 0; mb_y < (mb_h >> 1); mb_y++)
1506 {
1507 int step = 2;
1508 int offset = 0;
1509 int x = 0;
1510 int rmb_x = 0;
1511 int ry[2];
1512
1513 ry[0] = mb_y * 2 * 32 * tex->ptuv->dyn.stride;
1514 ry[1] = ry[0] + 32 * tex->ptuv->dyn.stride;
1515
1516 for (mb_x = 0; mb_x < mb_w * 4; mb_x++, rmb_x += 64 * 32)
1517 {
1518 unsigned int i = 0;
1519
1520 tmp = texture_addr + x + ry[offset];
1521
1522 for (i = 0; i < 32 * 64; i += 64, tmp += tex->ptuv->dyn.stride)
1523 memcpy(tmp, rows[mb_y + base_h] + rmb_x + i, 64);
1524
1525 step++;
1526 if ((step & 0x3) == 0)
1527 {
1528 offset = 1 - offset;
1529 x -= 64;
1530 }
1531 else
1532 {
1533 x += 64;
1534 }
1535 }
1536 }
1537
1538 if (mb_h & 0x1)
1539 {
1540 int rmb_x = 0;
1541 int x = 0;
1542 int ry;
1543
1544 ry = mb_y * 2 * 32 * tex->ptuv->dyn.stride;
1545
1546 for (mb_x = 0; mb_x < mb_w * 2; mb_x++, x += 64, rmb_x += 64 * 32)
1547 {
1548 unsigned int i;
1549
1550 tmp = texture_addr + x + ry;
1551
1552 /* It has horizontaly half the pixels, but they are double the size*/
1553 for (i = 0; i < 32 * 64; i += 64, tmp += tex->ptuv->dyn.stride)
1554 memcpy(tmp, rows[mb_y + base_h] + rmb_x + i, 64);
1555 }
1556 }
1557
1558 secsym_eglUnmapImageSEC(tex->gc->egldisp, tex->ptuv->dyn.img);
1559 return ;
1560 }
1561#endif
1562
1563 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
1564 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1565
1566 glBindTexture(GL_TEXTURE_2D, tex->pt->texture);
1567 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1568
1569 // We are telling the driver to not swizzle back the buffer as we are going to replace all pixel
1570 _tex_2d(tex->pt->intformat, w, h, tex->pt->format, tex->pt->dataformat);
1571
1572 /* Iterate each Y macroblock like we do in evas_convert_yuv.c */
1573 for (mb_y = 0; mb_y < (mb_h >> 1); mb_y++)
1574 {
1575 int step = 2;
1576 int offset = 0;
1577 int x = 0;
1578 int rmb_x = 0;
1579 int ry[2];
1580
1581 ry[0] = mb_y * 2 * 32;
1582 ry[1] = ry[0] + 32;
1583
1584 for (mb_x = 0; mb_x < mb_w * 2; mb_x++, rmb_x += 64 * 32)
1585 {
1586 _tex_sub_2d(x, ry[offset], 64, 32, tex->pt->format, tex->pt->dataformat, rows[mb_y] + rmb_x);
1587
1588 step++;
1589 if ((step & 0x3) == 0)
1590 {
1591 offset = 1 - offset;
1592 x -= 64;
1593 }
1594 else
1595 {
1596 x += 64;
1597 }
1598 }
1599 }
1600
1601 if (mb_h & 0x1)
1602 {
1603 int rmb_x = 0;
1604 int x = 0;
1605 int ry;
1606
1607 ry = mb_y * 2 * 32;
1608
1609 for (mb_x = 0; mb_x < mb_w; mb_x++, x += 64, rmb_x += 64 * 32)
1610 _tex_sub_2d(x, ry, 64, 32, tex->pt->format, tex->pt->dataformat, rows[mb_y] + rmb_x);
1611 }
1612
1613 glBindTexture(GL_TEXTURE_2D, tex->ptuv->texture);
1614 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1615
1616 _tex_2d(tex->ptuv->intformat, w, h, tex->ptuv->format, tex->ptuv->dataformat);
1617
1618 /* Iterate each UV macroblock like we do in evas_convert_yuv.c */
1619 base_h = (mb_h >> 1) + (mb_h & 0x1);
1620
1621 /* h is always a multiple of 32 */
1622 mb_h = h / 2;
1623 mb_h = (mb_h / 32 + (mb_h % 32 ? 1 : 0));
1624
1625 mb_w = w / 2;
1626 mb_w = (mb_w / 32 + (mb_w % 32 ? 1 : 0));
1627
1628 for (mb_y = 0; mb_y < (mb_h >> 1); mb_y++)
1629 {
1630 int step = 2;
1631 int offset = 0;
1632 int x = 0;
1633 int rmb_x = 0;
1634 int ry[2];
1635
1636 ry[0] = mb_y * 2 * 32;
1637 ry[1] = ry[0] + 32;
1638
1639 for (mb_x = 0; mb_x < mb_w * 2; mb_x++, rmb_x += 64 * 32)
1640 {
1641 _tex_sub_2d(x, ry[offset], 32, 32,
1642 tex->ptuv->format, tex->ptuv->dataformat,
1643 rows[mb_y + base_h] + rmb_x);
1644 step++;
1645 if ((step & 0x3) == 0)
1646 {
1647 offset = 1 - offset;
1648 x -= 32;
1649 }
1650 else
1651 {
1652 x += 32;
1653 }
1654 }
1655 }
1656
1657 if (mb_h & 0x1)
1658 {
1659 int rmb_x = 0;
1660 int x = 0;
1661 int ry;
1662
1663 ry = mb_y * 2 * 32;
1664
1665 for (mb_x = 0; mb_x < mb_w; mb_x++, x += 32, rmb_x += 64 * 32)
1666 _tex_sub_2d(x, ry, 64, 32, tex->ptuv->format, tex->ptuv->dataformat, rows[mb_y + base_h] + rmb_x);
1667 }
1668}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/compile-s3c6410.sh b/libraries/evas/src/modules/engines/gl_common/shader/compile-s3c6410.sh
new file mode 100755
index 0000000..450e5de
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/compile-s3c6410.sh
@@ -0,0 +1,47 @@
1#!/bin/sh
2ORIONEXE=/home/raster/Data/orion/orion.exe
3OPTS="-O --nolodcalc -lp"
4
5function compile()
6{
7 F=$1
8
9 make-c-str.sh $F"_frag.shd" > $F"_frag.h"
10 if test -f $F"_frag_s3c6410.asm"; then
11 wine $ORIONEXE -a $OPTS -f $F"_frag_s3c6410.asm"
12 make-c-bin.sh $F"_frag_s3c6410.bin" > $F"_frag_bin_s3c6410.h"
13 rm -f $F"_frag_s3c6410.bin" $F"_frag_s3c6410.h"
14 else
15 wine $ORIONEXE $OPTS -f $F"_frag.shd"
16 make-c-bin.sh $F"_frag.shd.bin" > $F"_frag_bin_s3c6410.h"
17 rm -f $F"_frag.shd.bin" $F"_frag.shd.asm" $F"_frag.shd.h"
18 fi
19
20 make-c-str.sh $F"_vert.shd" > $F"_vert.h"
21 if test -f $F"_vert_s3c6410.asm"; then
22 wine $ORIONEXE -a $OPTS -v $F"_vert_s3c6410.asm"
23 make-c-bin.sh $F"_vert_s3c6410.bin" > $F"_vert_bin_s3c6410.h"
24 rm -f $F"_vert_s3c6410.bin" $F"_vert_s3c6410.h"
25 else
26 wine $ORIONEXE $OPTS -v $F"_vert.shd"
27 make-c-bin.sh $F"_vert.shd.bin" > $F"_vert_bin_s3c6410.h"
28 rm -f $F"_vert.shd.bin" $F"_vert.shd.asm" $F"_vert.shd.h"
29 fi
30}
31
32compile rect
33compile font
34compile img
35compile img_nomul
36compile img_bgra
37compile img_bgra_nomul
38compile img_mask
39compile yuv
40compile yuv_nomul
41compile tex
42compile tex_nomul
43compile nv12
44compile nv12_nomul
45compile yuy2
46compile yuy2_nomul
47## FIXME: compile filter_*
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/compile-sgx.sh b/libraries/evas/src/modules/engines/gl_common/shader/compile-sgx.sh
new file mode 100755
index 0000000..a96b58c
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/compile-sgx.sh
@@ -0,0 +1,48 @@
1#!/bin/bash
2function compile()
3{
4 F=$1
5
6 if [ -f $F".shd" ]; then
7 make-c-str.sh $F".shd" > $F".h"
8 fi
9 if [ -f $F"_frag.shd" ]; then
10 make-c-str.sh $F"_frag.shd" > $F"_frag.h"
11 fi
12 if [ -f $F"_vert.shd" ]; then
13 make-c-str.sh $F"_vert.shd" > $F"_vert.h"
14 fi
15}
16
17compile rect
18compile font
19compile img
20compile img_nomul
21compile img_bgra
22compile img_bgra_nomul
23compile img_mask
24compile yuv
25compile yuv_nomul
26compile tex
27compile tex_nomul
28compile filter_blur_bgra
29compile filter_blur_bgra_nomul
30compile filter_blur
31compile filter_blur_nomul
32compile filter_greyscale_bgra
33compile filter_greyscale_bgra_nomul
34compile filter_greyscale
35compile filter_greyscale_nomul
36compile filter_invert_bgra
37compile filter_invert_bgra_nomul
38compile filter_invert
39compile filter_invert_nomul
40compile filter_sepia_bgra
41compile filter_sepia_bgra_nomul
42compile filter_sepia
43compile filter_sepia_nomul
44compile nv12
45compile nv12_nomul
46compile yuy2
47compile yuy2_nomul
48
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_blur.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur.h
new file mode 100644
index 0000000..7c3a369
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur.h
@@ -0,0 +1,24 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"uniform sampler1D gaussian;\n"
10"varying vec4 col;\n"
11"varying vec2 tex_c;\n"
12"varying weight;\n"
13"uniform radius;\n"
14"void main()\n"
15"{\n"
16" int i;\n"
17" vec4 fc = vec4(0,0,0,0);\n"
18" \n"
19" for (i = 0 ; i < radius ; i ++){\n"
20" fc += texture2D(tex, tex_c.xy).rgba *\n"
21" texture1D(gaussian,i/radius).aaaa;\n"
22" }\n"
23" gl_FragColor = fc / 4 * col;\n"
24"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_blur.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur.shd
new file mode 100644
index 0000000..5f13a47
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur.shd
@@ -0,0 +1,24 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9uniform sampler1D gaussian;
10varying vec4 col;
11varying vec2 tex_c;
12varying weight;
13uniform radius;
14void main()
15{
16 int i;
17 vec4 fc = vec4(0,0,0,0);
18
19 for (i = 0 ; i < radius ; i ++){
20 fc += texture2D(tex, tex_c.xy).rgba *
21 texture1D(gaussian,i/radius).aaaa;
22 }
23 gl_FragColor = fc / 4 * col;
24}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra.h
new file mode 100644
index 0000000..0862e4f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra.h
@@ -0,0 +1,24 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"uniform sampler1D gaussian;\n"
10"varying vec4 col;\n"
11"varying vec2 tex_c;\n"
12"varying weight;\n"
13"uniform radius;\n"
14"void main()\n"
15"{\n"
16" int i;\n"
17" vec4 fc = vec4(0,0,0,0);\n"
18" \n"
19" for (i = 0 ; i < radius ; i ++){\n"
20" fc += texture2D(tex, tex_c.xy).rgba *\n"
21" texture1D(gaussian,i/radius).aaaa;\n"
22" }\n"
23" gl_FragColor = fc / 4;\n"
24"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra.shd
new file mode 100644
index 0000000..a9134df
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra.shd
@@ -0,0 +1,24 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9uniform sampler1D gaussian;
10varying vec4 col;
11varying vec2 tex_c;
12varying weight;
13uniform radius;
14void main()
15{
16 int i;
17 vec4 fc = vec4(0,0,0,0);
18
19 for (i = 0 ; i < radius ; i ++){
20 fc += texture2D(tex, tex_c.xy).rgba *
21 texture1D(gaussian,i/radius).aaaa;
22 }
23 gl_FragColor = fc / 4;
24}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra_nomul.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra_nomul.h
new file mode 100644
index 0000000..0862e4f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra_nomul.h
@@ -0,0 +1,24 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"uniform sampler1D gaussian;\n"
10"varying vec4 col;\n"
11"varying vec2 tex_c;\n"
12"varying weight;\n"
13"uniform radius;\n"
14"void main()\n"
15"{\n"
16" int i;\n"
17" vec4 fc = vec4(0,0,0,0);\n"
18" \n"
19" for (i = 0 ; i < radius ; i ++){\n"
20" fc += texture2D(tex, tex_c.xy).rgba *\n"
21" texture1D(gaussian,i/radius).aaaa;\n"
22" }\n"
23" gl_FragColor = fc / 4;\n"
24"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra_nomul.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra_nomul.shd
new file mode 100644
index 0000000..a9134df
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_bgra_nomul.shd
@@ -0,0 +1,24 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9uniform sampler1D gaussian;
10varying vec4 col;
11varying vec2 tex_c;
12varying weight;
13uniform radius;
14void main()
15{
16 int i;
17 vec4 fc = vec4(0,0,0,0);
18
19 for (i = 0 ; i < radius ; i ++){
20 fc += texture2D(tex, tex_c.xy).rgba *
21 texture1D(gaussian,i/radius).aaaa;
22 }
23 gl_FragColor = fc / 4;
24}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_nomul.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_nomul.h
new file mode 100644
index 0000000..0862e4f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_nomul.h
@@ -0,0 +1,24 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"uniform sampler1D gaussian;\n"
10"varying vec4 col;\n"
11"varying vec2 tex_c;\n"
12"varying weight;\n"
13"uniform radius;\n"
14"void main()\n"
15"{\n"
16" int i;\n"
17" vec4 fc = vec4(0,0,0,0);\n"
18" \n"
19" for (i = 0 ; i < radius ; i ++){\n"
20" fc += texture2D(tex, tex_c.xy).rgba *\n"
21" texture1D(gaussian,i/radius).aaaa;\n"
22" }\n"
23" gl_FragColor = fc / 4;\n"
24"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_nomul.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_nomul.shd
new file mode 100644
index 0000000..a9134df
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_blur_nomul.shd
@@ -0,0 +1,24 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9uniform sampler1D gaussian;
10varying vec4 col;
11varying vec2 tex_c;
12varying weight;
13uniform radius;
14void main()
15{
16 int i;
17 vec4 fc = vec4(0,0,0,0);
18
19 for (i = 0 ; i < radius ; i ++){
20 fc += texture2D(tex, tex_c.xy).rgba *
21 texture1D(gaussian,i/radius).aaaa;
22 }
23 gl_FragColor = fc / 4;
24}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale.h
new file mode 100644
index 0000000..850538a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale.h
@@ -0,0 +1,15 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" float inten = dot(texture2D(tex,tex_c.xy).agb,vec3(.3, .59, .11));\n"
14" gl_FragColor = vec4(inten, inten, inten, texture2D(tex,tex_c.xy).r) * col;\n"
15"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale.shd
new file mode 100644
index 0000000..78ecf08
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale.shd
@@ -0,0 +1,15 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 float inten = dot(texture2D(tex,tex_c.xy).agb,vec3(.3, .59, .11));
14 gl_FragColor = vec4(inten, inten, inten, texture2D(tex,tex_c.xy).r) * col;
15}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra.h
new file mode 100644
index 0000000..3caef35
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra.h
@@ -0,0 +1,15 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" float inten = dot(texture2D(tex,tex_c.xy).rgb,vec3(.3, .59, .11));\n"
14" gl_FragColor = vec4(inten, inten, inten, texture2D(tex,tex_c.xy).a) * col;\n"
15"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra.shd
new file mode 100644
index 0000000..5dca381
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra.shd
@@ -0,0 +1,15 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 float inten = dot(texture2D(tex,tex_c.xy).rgb,vec3(.3, .59, .11));
14 gl_FragColor = vec4(inten, inten, inten, texture2D(tex,tex_c.xy).a) * col;
15}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra_nomul.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra_nomul.h
new file mode 100644
index 0000000..4cb36a8
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra_nomul.h
@@ -0,0 +1,14 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec2 tex_c;\n"
10"void main()\n"
11"{\n"
12" float inten = dot(texture2D(tex,tex_c.xy).rgb,vec3(.3, .59, .11));\n"
13" gl_FragColor = vec4(inten, inten, inten, texture2D(tex,tex_c.xy).a);\n"
14"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra_nomul.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra_nomul.shd
new file mode 100644
index 0000000..a077eea
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_bgra_nomul.shd
@@ -0,0 +1,14 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec2 tex_c;
10void main()
11{
12 float inten = dot(texture2D(tex,tex_c.xy).rgb,vec3(.3, .59, .11));
13 gl_FragColor = vec4(inten, inten, inten, texture2D(tex,tex_c.xy).a);
14}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_nomul.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_nomul.h
new file mode 100644
index 0000000..f501a02
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_nomul.h
@@ -0,0 +1,14 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec2 tex_c;\n"
10"void main()\n"
11"{\n"
12" float inten = dot(texture2D(tex,tex_c.xy).abg,vec3(.3, .59, .11));\n"
13" gl_FragColor = vec4(inten, inten, inten, texture2D(tex,tex_c.xy).r);\n"
14"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_nomul.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_nomul.shd
new file mode 100644
index 0000000..b5b8ec6
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_greyscale_nomul.shd
@@ -0,0 +1,14 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec2 tex_c;
10void main()
11{
12 float inten = dot(texture2D(tex,tex_c.xy).abg,vec3(.3, .59, .11));
13 gl_FragColor = vec4(inten, inten, inten, texture2D(tex,tex_c.xy).r);
14}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_invert.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert.h
new file mode 100644
index 0000000..46373e0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert.h
@@ -0,0 +1,14 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" gl_FragColor = (vec4(0, 1.0, 1.0, 1.0) - texture2D(tex, tex_c.xy).bgra)*col;\n"
14"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_invert.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert.shd
new file mode 100644
index 0000000..a75b058
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert.shd
@@ -0,0 +1,14 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 gl_FragColor = (vec4(0, 1.0, 1.0, 1.0) - texture2D(tex, tex_c.xy).bgra)*col;
14}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra.h
new file mode 100644
index 0000000..3e3011d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra.h
@@ -0,0 +1,14 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" gl_FragColor = (vec4(1.0, 1.0, 1.0, 1.0) - texture2D(tex, tex_c.xy))*col;\n"
14"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra.shd
new file mode 100644
index 0000000..8d7df2d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra.shd
@@ -0,0 +1,14 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 gl_FragColor = (vec4(1.0, 1.0, 1.0, 1.0) - texture2D(tex, tex_c.xy))*col;
14}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra_nomul.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra_nomul.h
new file mode 100644
index 0000000..b9f1e25
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra_nomul.h
@@ -0,0 +1,15 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" vec3 inv = vec3(1.0, 1.0, 1.0) - texture2D(tex,tex_c.xy).rgb;\n"
14" gl_FragColor = vec4(inv.r, inv.g, inv.b, 1.0);\n"
15"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra_nomul.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra_nomul.shd
new file mode 100644
index 0000000..682acb2
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_bgra_nomul.shd
@@ -0,0 +1,15 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 vec3 inv = vec3(1.0, 1.0, 1.0) - texture2D(tex,tex_c.xy).rgb;
14 gl_FragColor = vec4(inv.r, inv.g, inv.b, 1.0);
15}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_nomul.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_nomul.h
new file mode 100644
index 0000000..46373e0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_nomul.h
@@ -0,0 +1,14 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" gl_FragColor = (vec4(0, 1.0, 1.0, 1.0) - texture2D(tex, tex_c.xy).bgra)*col;\n"
14"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_nomul.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_nomul.shd
new file mode 100644
index 0000000..a75b058
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_invert_nomul.shd
@@ -0,0 +1,14 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 gl_FragColor = (vec4(0, 1.0, 1.0, 1.0) - texture2D(tex, tex_c.xy).bgra)*col;
14}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia.h
new file mode 100644
index 0000000..50fbf12
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia.h
@@ -0,0 +1,20 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" vec3 inp = texture2D(tex,tex_c.xy).abg;\n"
14" vec4 sep;\n"
15" sep.r = dot(inp, vec3(.393, .769, .189));\n"
16" sep.g = dot(inp, vec3(.349, .686, .168));\n"
17" sep.b = dot(inp, vec3(.272, .534, .131));\n"
18" sep.a = texture2D(tex,tex_c.xy).r;\n"
19" gl_FragColor = sep * col;\n"
20"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia.shd
new file mode 100644
index 0000000..027ecfb
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia.shd
@@ -0,0 +1,20 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 vec3 inp = texture2D(tex,tex_c.xy).abg;
14 vec4 sep;
15 sep.r = dot(inp, vec3(.393, .769, .189));
16 sep.g = dot(inp, vec3(.349, .686, .168));
17 sep.b = dot(inp, vec3(.272, .534, .131));
18 sep.a = texture2D(tex,tex_c.xy).r;
19 gl_FragColor = sep * col;
20}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra.h
new file mode 100644
index 0000000..41e4283
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra.h
@@ -0,0 +1,20 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" vec3 inp = texture2D(tex,tex_c.xy).rgb;\n"
14" vec4 sep;\n"
15" sep.r = dot(inp, vec3(.393, .769, .189));\n"
16" sep.g = dot(inp, vec3(.349, .686, .168));\n"
17" sep.b = dot(inp, vec3(.272, .534, .131));\n"
18" sep.a = texture2D(tex,tex_c.xy).a;\n"
19" gl_FragColor = sep * col;\n"
20"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra.shd
new file mode 100644
index 0000000..caed378
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra.shd
@@ -0,0 +1,20 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 vec3 inp = texture2D(tex,tex_c.xy).rgb;
14 vec4 sep;
15 sep.r = dot(inp, vec3(.393, .769, .189));
16 sep.g = dot(inp, vec3(.349, .686, .168));
17 sep.b = dot(inp, vec3(.272, .534, .131));
18 sep.a = texture2D(tex,tex_c.xy).a;
19 gl_FragColor = sep * col;
20}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra_nomul.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra_nomul.h
new file mode 100644
index 0000000..0c4fe1b
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra_nomul.h
@@ -0,0 +1,18 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" vec3 inp = texture2D(tex,tex_c.xy).rgb;\n"
14" gl_FragColor.r = dot(inp, vec3(.393, .769, .189));\n"
15" gl_FragColor.g = dot(inp, vec3(.349, .686, .168));\n"
16" gl_FragColor.b = dot(inp, vec3(.272, .534, .131));\n"
17" gl_FragColor.a = texture2D(tex,tex_c.xy).a;\n"
18"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra_nomul.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra_nomul.shd
new file mode 100644
index 0000000..9c6c1d4
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_bgra_nomul.shd
@@ -0,0 +1,18 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 vec3 inp = texture2D(tex,tex_c.xy).rgb;
14 gl_FragColor.r = dot(inp, vec3(.393, .769, .189));
15 gl_FragColor.g = dot(inp, vec3(.349, .686, .168));
16 gl_FragColor.b = dot(inp, vec3(.272, .534, .131));
17 gl_FragColor.a = texture2D(tex,tex_c.xy).a;
18}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_nomul.h b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_nomul.h
new file mode 100644
index 0000000..23af9ec
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_nomul.h
@@ -0,0 +1,18 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" vec3 inp = texture2D(tex,tex_c.xy).abg;\n"
14" gl_FragColor.r = dot(inp, vec3(.393, .769, .189));\n"
15" gl_FragColor.g = dot(inp, vec3(.349, .686, .168));\n"
16" gl_FragColor.b = dot(inp, vec3(.272, .534, .131));\n"
17" gl_FragColor.a = texture2D(tex,tex_c.xy).r;\n"
18"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_nomul.shd b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_nomul.shd
new file mode 100644
index 0000000..f9871bd
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/filter_sepia_nomul.shd
@@ -0,0 +1,18 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 vec3 inp = texture2D(tex,tex_c.xy).abg;
14 gl_FragColor.r = dot(inp, vec3(.393, .769, .189));
15 gl_FragColor.g = dot(inp, vec3(.349, .686, .168));
16 gl_FragColor.b = dot(inp, vec3(.272, .534, .131));
17 gl_FragColor.a = texture2D(tex,tex_c.xy).r;
18}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/font_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/font_frag.h
new file mode 100644
index 0000000..f27dcdc
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/font_frag.h
@@ -0,0 +1,14 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" gl_FragColor = texture2D(tex, tex_c.xy).aaaa * col;\n"
14"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/font_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/font_frag.shd
new file mode 100644
index 0000000..a8eb9b7
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/font_frag.shd
@@ -0,0 +1,14 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 gl_FragColor = texture2D(tex, tex_c.xy).aaaa * col;
14}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/font_frag_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/font_frag_bin_s3c6410.h
new file mode 100644
index 0000000..daca692
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/font_frag_bin_s3c6410.h
@@ -0,0 +1,9 @@
10x20205350, 0xffff0008, 0x00000048, 0x01020000, 0x00000003, 0x00000000,
20x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000001,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000e, 0x00000000,
40x00000000, 0x0000e407, 0x307820e4, 0x00000000, 0x01000000, 0x0100e400,
50x237a10ff, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
60x00000004, 0x00000003, 0x00000009, 0x00000000, 0x00000004, 0x00000008,
70x00000005, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
80x0000000f, 0x00030005, 0x00000000, 0x00786574, 0x006c6f63, 0x5f786574,
90x00000063, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/font_frag_s3c6410.asm b/libraries/evas/src/modules/engines/gl_common/shader/font_frag_s3c6410.asm
new file mode 100644
index 0000000..4ed116f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/font_frag_s3c6410.asm
@@ -0,0 +1,26 @@
1#-------------------------------------------------
2# ORION - OpenGL ES 2.0 Shading Language Compiler
3# SAMSUNG INDIA SOFTWARE OPERATIONS PVT. LTD.
4# Compiler Version : v04.00.09
5# Release Date : 19.01.2009
6# FIMG VERSION : FIMGv1.5
7# Optimizer Options : -O --nolodcalc
8#-------------------------------------------------
9
10# hand optimised - removed useless ops
11
12ps_3_0
13
14fimg_version 0x01020000
15
16dcl_s2_tex s0
17dcl_f4_col v1.x
18dcl_f2_tex_c v0.x
19
20label start
21label main_
22texld r0.xyzw, v0.xyzw, s0 # tex=s0
23mul_sat oColor.xyzw, r0.wwww, v1.xyzw # gl_FragColor=oColor.xyzw, col=v1.xyzw
24label main_end
25ret
26# 4 instructions, 4 C regs, 1 R regs
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/font_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/font_vert.h
new file mode 100644
index 0000000..8921d9d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/font_vert.h
@@ -0,0 +1,15 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec4 color;\n"
6"attribute vec2 tex_coord;\n"
7"uniform mat4 mvp;\n"
8"varying vec4 col;\n"
9"varying vec2 tex_c;\n"
10"void main()\n"
11"{\n"
12" gl_Position = mvp * vertex;\n"
13" col = color;\n"
14" tex_c = tex_coord;\n"
15"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/font_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/font_vert.shd
new file mode 100644
index 0000000..606c297
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/font_vert.shd
@@ -0,0 +1,15 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec4 color;
6attribute vec2 tex_coord;
7uniform mat4 mvp;
8varying vec4 col;
9varying vec2 tex_c;
10void main()
11{
12 gl_Position = mvp * vertex;
13 col = color;
14 tex_c = tex_coord;
15}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/font_vert_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/font_vert_bin_s3c6410.h
new file mode 100644
index 0000000..1402448
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/font_vert_bin_s3c6410.h
@@ -0,0 +1,20 @@
10x20205356, 0xffff0008, 0x00000048, 0x01020000, 0x00000007, 0x00000006,
20x00000000, 0x00000000, 0x00000003, 0x00000003, 0x00000001, 0x00000000,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000031, 0x00000000,
40x00000000, 0x02020000, 0x237820e4, 0x00000000, 0x00e40100, 0x02035500,
50x2ef820e4, 0x00000000, 0x00e40100, 0x0204aa00, 0x2ef820e4, 0x00000000,
60x00e40100, 0x0205ff00, 0x2ef800e4, 0x00000000, 0x00000000, 0x00010000,
70x20f801e4, 0x00000000, 0x00000000, 0x00020000, 0x20980254, 0x00000000,
80x00000000, 0x00000000, 0x1e000000, 0x00000000, 0x00000000, 0x00000000,
90x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000,
100x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
110x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
120x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000c, 0x00000006,
130x00000009, 0x00000000, 0x00000000, 0x00000013, 0x00000005, 0x00000009,
140x00000000, 0x00000004, 0x00000019, 0x00000009, 0x00000003, 0x00000000,
150x00000008, 0x00000000, 0x0000000b, 0x00000009, 0x00010004, 0x00000000,
160x00000027, 0x00000003, 0x00000009, 0x00010004, 0x00000004, 0x0000002b,
170x00000005, 0x00000003, 0x00010004, 0x00000008, 0x00000023, 0x00000003,
180x0000000e, 0x00020001, 0x00000008, 0x505f6c67, 0x7469736f, 0x006e6f69,
190x74726576, 0x63007865, 0x726f6c6f, 0x78657400, 0x6f6f635f, 0x6d006472,
200x63007076, 0x74006c6f, 0x635f7865, 0x00000000, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag.h
new file mode 100644
index 0000000..1ced5e0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag.h
@@ -0,0 +1,14 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" gl_FragColor = texture2D(tex, tex_c.xy) * col;\n"
14"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag.shd
new file mode 100644
index 0000000..2bc8d79
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag.shd
@@ -0,0 +1,14 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 gl_FragColor = texture2D(tex, tex_c.xy) * col;
14}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag_bin_s3c6410.h
new file mode 100644
index 0000000..feb5bf5
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_frag_bin_s3c6410.h
@@ -0,0 +1,11 @@
10x20205350, 0xffff0008, 0x00000048, 0x01020000, 0x00000004, 0x00000003,
20x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000001,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000e, 0x00000000,
40x00000000, 0x02025400, 0x23782050, 0x00000000, 0x00000000, 0x0100e407,
50x307820e4, 0x00000000, 0x01000000, 0x0100e400, 0x237a10e4, 0x00000000,
60x00000000, 0x00000000, 0x1e000000, 0x00000000, 0x00000000, 0x00000000,
70x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000,
80x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000003,
90x00000009, 0x00000000, 0x00000004, 0x00000008, 0x00000005, 0x00000003,
100x00000000, 0x00000000, 0x00000000, 0x00000003, 0x0000000f, 0x00030005,
110x00000000, 0x00786574, 0x006c6f63, 0x5f786574, 0x00000063,
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag.h
new file mode 100644
index 0000000..459611f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag.h
@@ -0,0 +1,13 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec2 tex_c;\n"
10"void main()\n"
11"{\n"
12" gl_FragColor = texture2D(tex, tex_c.xy);\n"
13"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag.shd
new file mode 100644
index 0000000..877df62
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag.shd
@@ -0,0 +1,13 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec2 tex_c;
10void main()
11{
12 gl_FragColor = texture2D(tex, tex_c.xy);
13}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag_bin_s3c6410.h
new file mode 100644
index 0000000..b89eeb1
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_frag_bin_s3c6410.h
@@ -0,0 +1,10 @@
10x20205350, 0xffff0008, 0x00000048, 0x01020000, 0x00000003, 0x00000003,
20x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000001,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000a, 0x00000000,
40x00000000, 0x02025400, 0x23782050, 0x00000000, 0x00000000, 0x0100e407,
50x307a10e4, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
60x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000,
70x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000,
80x00000004, 0x00000005, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
90x00000003, 0x0000000f, 0x00030005, 0x00000000, 0x00786574, 0x5f786574,
100x00000063, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert.h
new file mode 100644
index 0000000..13d5edd
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert.h
@@ -0,0 +1,12 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec2 tex_coord;\n"
6"uniform mat4 mvp;\n"
7"varying vec2 tex_c;\n"
8"void main()\n"
9"{\n"
10" gl_Position = mvp * vertex;\n"
11" tex_c = tex_coord;\n"
12"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert.shd
new file mode 100644
index 0000000..74f3207
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert.shd
@@ -0,0 +1,12 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec2 tex_coord;
6uniform mat4 mvp;
7varying vec2 tex_c;
8void main()
9{
10 gl_Position = mvp * vertex;
11 tex_c = tex_coord;
12}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert_bin_s3c6410.h
new file mode 100644
index 0000000..314b5f3
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_nomul_vert_bin_s3c6410.h
@@ -0,0 +1,17 @@
10x20205356, 0xffff0008, 0x00000048, 0x01020000, 0x00000006, 0x00000006,
20x00000000, 0x00000000, 0x00000002, 0x00000002, 0x00000001, 0x00000000,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000027, 0x00000000,
40x00000000, 0x02020000, 0x237820e4, 0x00000000, 0x00e40100, 0x02035500,
50x2ef820e4, 0x00000000, 0x00e40100, 0x0204aa00, 0x2ef820e4, 0x00000000,
60x00e40100, 0x0205ff00, 0x2ef800e4, 0x00000000, 0x00000000, 0x00010000,
70x20980154, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
80x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000,
90x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
100x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
110x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
120x0000000c, 0x00000006, 0x00000009, 0x00000000, 0x00000000, 0x00000013,
130x00000009, 0x00000003, 0x00000000, 0x00000004, 0x00000000, 0x0000000b,
140x00000009, 0x00010004, 0x00000000, 0x00000021, 0x00000005, 0x00000003,
150x00010004, 0x00000004, 0x0000001d, 0x00000003, 0x0000000e, 0x00020001,
160x00000008, 0x505f6c67, 0x7469736f, 0x006e6f69, 0x74726576, 0x74007865,
170x635f7865, 0x64726f6f, 0x70766d00, 0x78657400, 0x0000635f,
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert.h
new file mode 100644
index 0000000..8921d9d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert.h
@@ -0,0 +1,15 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec4 color;\n"
6"attribute vec2 tex_coord;\n"
7"uniform mat4 mvp;\n"
8"varying vec4 col;\n"
9"varying vec2 tex_c;\n"
10"void main()\n"
11"{\n"
12" gl_Position = mvp * vertex;\n"
13" col = color;\n"
14" tex_c = tex_coord;\n"
15"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert.shd
new file mode 100644
index 0000000..606c297
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert.shd
@@ -0,0 +1,15 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec4 color;
6attribute vec2 tex_coord;
7uniform mat4 mvp;
8varying vec4 col;
9varying vec2 tex_c;
10void main()
11{
12 gl_Position = mvp * vertex;
13 col = color;
14 tex_c = tex_coord;
15}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert_bin_s3c6410.h
new file mode 100644
index 0000000..1402448
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_bgra_vert_bin_s3c6410.h
@@ -0,0 +1,20 @@
10x20205356, 0xffff0008, 0x00000048, 0x01020000, 0x00000007, 0x00000006,
20x00000000, 0x00000000, 0x00000003, 0x00000003, 0x00000001, 0x00000000,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000031, 0x00000000,
40x00000000, 0x02020000, 0x237820e4, 0x00000000, 0x00e40100, 0x02035500,
50x2ef820e4, 0x00000000, 0x00e40100, 0x0204aa00, 0x2ef820e4, 0x00000000,
60x00e40100, 0x0205ff00, 0x2ef800e4, 0x00000000, 0x00000000, 0x00010000,
70x20f801e4, 0x00000000, 0x00000000, 0x00020000, 0x20980254, 0x00000000,
80x00000000, 0x00000000, 0x1e000000, 0x00000000, 0x00000000, 0x00000000,
90x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000,
100x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
110x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
120x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000c, 0x00000006,
130x00000009, 0x00000000, 0x00000000, 0x00000013, 0x00000005, 0x00000009,
140x00000000, 0x00000004, 0x00000019, 0x00000009, 0x00000003, 0x00000000,
150x00000008, 0x00000000, 0x0000000b, 0x00000009, 0x00010004, 0x00000000,
160x00000027, 0x00000003, 0x00000009, 0x00010004, 0x00000004, 0x0000002b,
170x00000005, 0x00000003, 0x00010004, 0x00000008, 0x00000023, 0x00000003,
180x0000000e, 0x00020001, 0x00000008, 0x505f6c67, 0x7469736f, 0x006e6f69,
190x74726576, 0x63007865, 0x726f6c6f, 0x78657400, 0x6f6f635f, 0x6d006472,
200x63007076, 0x74006c6f, 0x635f7865, 0x00000000, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/img_frag.h
new file mode 100644
index 0000000..0a95502
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_frag.h
@@ -0,0 +1,14 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" gl_FragColor = texture2D(tex, tex_c.xy).bgra * col;\n"
14"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/img_frag.shd
new file mode 100644
index 0000000..9faa414
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_frag.shd
@@ -0,0 +1,14 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 gl_FragColor = texture2D(tex, tex_c.xy).bgra * col;
14}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_frag_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/img_frag_bin_s3c6410.h
new file mode 100644
index 0000000..3518e8d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_frag_bin_s3c6410.h
@@ -0,0 +1,9 @@
10x20205350, 0xffff0008, 0x00000048, 0x01020000, 0x00000003, 0x00000000,
20x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000001,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000e, 0x00000000,
40x00000000, 0x0000e407, 0x307820e4, 0x00000000, 0x01000000, 0x0100e400,
50x237a10c6, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
60x00000004, 0x00000003, 0x00000009, 0x00000000, 0x00000004, 0x00000008,
70x00000005, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
80x0000000f, 0x00030005, 0x00000000, 0x00786574, 0x006c6f63, 0x5f786574,
90x00000063, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_frag_s3c6410.asm b/libraries/evas/src/modules/engines/gl_common/shader/img_frag_s3c6410.asm
new file mode 100644
index 0000000..3716bce
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_frag_s3c6410.asm
@@ -0,0 +1,26 @@
1
2#-------------------------------------------------
3# ORION - OpenGL ES 2.0 Shading Language Compiler
4# SAMSUNG INDIA SOFTWARE OPERATIONS PVT. LTD.
5# Compiler Version : v04.00.09
6# Release Date : 19.01.2009
7# FIMG VERSION : FIMGv1.5
8# Optimizer Options : -O --nolodcalc
9#-------------------------------------------------
10
11# hand optimised - removed useless ops
12
13ps_3_0
14
15fimg_version 0x01020000
16
17dcl_s2_tex s0
18dcl_f4_col v1.x
19dcl_f2_tex_c v0.x
20
21label start
22label main_
23texld r0.xyzw, v0.xyzw, s0 # tex=s0
24mul_sat oColor.xyzw, r0.zyxw, v1.xyzw # gl_FragColor=oColor.xyzw, col=v1.xyzw
25label main_end
26ret
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_mask_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/img_mask_frag.h
new file mode 100644
index 0000000..1b28128
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_mask_frag.h
@@ -0,0 +1,15 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex, texm;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c, tex_cm;\n"
11"void main()\n"
12"{\n"
13" gl_FragColor = texture2D(texm, tex_cm.xy).aaaa * texture2D(tex, tex_c.xy).rgba * col;\n"
14"}\n"
15"\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_mask_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/img_mask_vert.h
new file mode 100644
index 0000000..7508c98
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_mask_vert.h
@@ -0,0 +1,16 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec4 color;\n"
6"attribute vec2 tex_coord, tex_coordm;\n"
7"uniform mat4 mvp;\n"
8"varying vec4 col;\n"
9"varying vec2 tex_c, tex_cm;\n"
10"void main()\n"
11"{\n"
12" gl_Position = mvp * vertex;\n"
13" col = color;\n"
14" tex_c = tex_coord;\n"
15" tex_cm = tex_coordm;\n"
16"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag.h
new file mode 100644
index 0000000..0343b34
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag.h
@@ -0,0 +1,13 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec2 tex_c;\n"
10"void main()\n"
11"{\n"
12" gl_FragColor = texture2D(tex, tex_c.xy).bgra;\n"
13"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag.shd
new file mode 100644
index 0000000..222d635
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag.shd
@@ -0,0 +1,13 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec2 tex_c;
10void main()
11{
12 gl_FragColor = texture2D(tex, tex_c.xy).bgra;
13}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag_bin_s3c6410.h
new file mode 100644
index 0000000..61662c8
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_frag_bin_s3c6410.h
@@ -0,0 +1,10 @@
10x20205350, 0xffff0008, 0x00000048, 0x01020000, 0x00000003, 0x00000003,
20x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000001,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000a, 0x00000000,
40x00000000, 0x02025400, 0x23782050, 0x00000000, 0x00000000, 0x0100e407,
50x307a10c6, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
60x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000,
70x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000,
80x00000004, 0x00000005, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
90x00000003, 0x0000000f, 0x00030005, 0x00000000, 0x00786574, 0x5f786574,
100x00000063, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert.h
new file mode 100644
index 0000000..13d5edd
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert.h
@@ -0,0 +1,12 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec2 tex_coord;\n"
6"uniform mat4 mvp;\n"
7"varying vec2 tex_c;\n"
8"void main()\n"
9"{\n"
10" gl_Position = mvp * vertex;\n"
11" tex_c = tex_coord;\n"
12"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert.shd
new file mode 100644
index 0000000..74f3207
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert.shd
@@ -0,0 +1,12 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec2 tex_coord;
6uniform mat4 mvp;
7varying vec2 tex_c;
8void main()
9{
10 gl_Position = mvp * vertex;
11 tex_c = tex_coord;
12}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert_bin_s3c6410.h
new file mode 100644
index 0000000..314b5f3
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_nomul_vert_bin_s3c6410.h
@@ -0,0 +1,17 @@
10x20205356, 0xffff0008, 0x00000048, 0x01020000, 0x00000006, 0x00000006,
20x00000000, 0x00000000, 0x00000002, 0x00000002, 0x00000001, 0x00000000,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000027, 0x00000000,
40x00000000, 0x02020000, 0x237820e4, 0x00000000, 0x00e40100, 0x02035500,
50x2ef820e4, 0x00000000, 0x00e40100, 0x0204aa00, 0x2ef820e4, 0x00000000,
60x00e40100, 0x0205ff00, 0x2ef800e4, 0x00000000, 0x00000000, 0x00010000,
70x20980154, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
80x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000,
90x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
100x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
110x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
120x0000000c, 0x00000006, 0x00000009, 0x00000000, 0x00000000, 0x00000013,
130x00000009, 0x00000003, 0x00000000, 0x00000004, 0x00000000, 0x0000000b,
140x00000009, 0x00010004, 0x00000000, 0x00000021, 0x00000005, 0x00000003,
150x00010004, 0x00000004, 0x0000001d, 0x00000003, 0x0000000e, 0x00020001,
160x00000008, 0x505f6c67, 0x7469736f, 0x006e6f69, 0x74726576, 0x74007865,
170x635f7865, 0x64726f6f, 0x70766d00, 0x78657400, 0x0000635f,
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/img_vert.h
new file mode 100644
index 0000000..8921d9d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_vert.h
@@ -0,0 +1,15 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec4 color;\n"
6"attribute vec2 tex_coord;\n"
7"uniform mat4 mvp;\n"
8"varying vec4 col;\n"
9"varying vec2 tex_c;\n"
10"void main()\n"
11"{\n"
12" gl_Position = mvp * vertex;\n"
13" col = color;\n"
14" tex_c = tex_coord;\n"
15"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/img_vert.shd
new file mode 100644
index 0000000..606c297
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_vert.shd
@@ -0,0 +1,15 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec4 color;
6attribute vec2 tex_coord;
7uniform mat4 mvp;
8varying vec4 col;
9varying vec2 tex_c;
10void main()
11{
12 gl_Position = mvp * vertex;
13 col = color;
14 tex_c = tex_coord;
15}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/img_vert_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/img_vert_bin_s3c6410.h
new file mode 100644
index 0000000..1402448
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/img_vert_bin_s3c6410.h
@@ -0,0 +1,20 @@
10x20205356, 0xffff0008, 0x00000048, 0x01020000, 0x00000007, 0x00000006,
20x00000000, 0x00000000, 0x00000003, 0x00000003, 0x00000001, 0x00000000,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000031, 0x00000000,
40x00000000, 0x02020000, 0x237820e4, 0x00000000, 0x00e40100, 0x02035500,
50x2ef820e4, 0x00000000, 0x00e40100, 0x0204aa00, 0x2ef820e4, 0x00000000,
60x00e40100, 0x0205ff00, 0x2ef800e4, 0x00000000, 0x00000000, 0x00010000,
70x20f801e4, 0x00000000, 0x00000000, 0x00020000, 0x20980254, 0x00000000,
80x00000000, 0x00000000, 0x1e000000, 0x00000000, 0x00000000, 0x00000000,
90x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000,
100x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
110x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
120x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000c, 0x00000006,
130x00000009, 0x00000000, 0x00000000, 0x00000013, 0x00000005, 0x00000009,
140x00000000, 0x00000004, 0x00000019, 0x00000009, 0x00000003, 0x00000000,
150x00000008, 0x00000000, 0x0000000b, 0x00000009, 0x00010004, 0x00000000,
160x00000027, 0x00000003, 0x00000009, 0x00010004, 0x00000004, 0x0000002b,
170x00000005, 0x00000003, 0x00010004, 0x00000008, 0x00000023, 0x00000003,
180x0000000e, 0x00020001, 0x00000008, 0x505f6c67, 0x7469736f, 0x006e6f69,
190x74726576, 0x63007865, 0x726f6c6f, 0x78657400, 0x6f6f635f, 0x6d006472,
200x63007076, 0x74006c6f, 0x635f7865, 0x00000000, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/make-c-bin.sh b/libraries/evas/src/modules/engines/gl_common/shader/make-c-bin.sh
new file mode 100755
index 0000000..2902df6
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/make-c-bin.sh
@@ -0,0 +1,3 @@
1#!/bin/sh
2od --width=4 -t x4 -v $1 | \
3awk '{ if (NF > 1) printf("0x%s, ", $2); L = L + 1; if (L > 5) { L = 0; printf("\n");}}'
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/make-c-str.sh b/libraries/evas/src/modules/engines/gl_common/shader/make-c-str.sh
new file mode 100755
index 0000000..fe7e80a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/make-c-str.sh
@@ -0,0 +1,3 @@
1#!/bin/sh
2
3awk '{printf("\"%s\\n\"\n", $0);}' $1
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/nv12_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/nv12_frag.h
new file mode 100644
index 0000000..fec4b23
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/nv12_frag.h
@@ -0,0 +1,31 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex, texuv;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c, tex_cuv;\n"
11"void main()\n"
12"{\n"
13" float y,u,v,vmu,r,g,b;\n"
14" y=texture2D(tex,tex_c).g;\n"
15" u=texture2D(texuv,tex_cuv).g;\n"
16" v=texture2D(texuv,tex_cuv).a;\n"
17"\n"
18" u=u-0.5;\n"
19" v=v-0.5;\n"
20" vmu=v*0.813+u*0.391;\n"
21" u=u*2.018;\n"
22" v=v*1.596;\n"
23" y=(y-0.062)*1.164;\n"
24"\n"
25" r=y+v;\n"
26" g=y-vmu;\n"
27" b=y+u;\n"
28"\n"
29" gl_FragColor=vec4(r,g,b,1.0) * col;\n"
30"}\n"
31"\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/nv12_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/nv12_frag.shd
new file mode 100644
index 0000000..34748fc
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/nv12_frag.shd
@@ -0,0 +1,31 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex, texuv;
9varying vec4 col;
10varying vec2 tex_c, tex_cuv;
11void main()
12{
13 float y,u,v,vmu,r,g,b;
14 y=texture2D(tex,tex_c).g;
15 u=texture2D(texuv,tex_cuv).g;
16 v=texture2D(texuv,tex_cuv).a;
17
18 u=u-0.5;
19 v=v-0.5;
20 vmu=v*0.813+u*0.391;
21 u=u*2.018;
22 v=v*1.596;
23 y=(y-0.062)*1.164;
24
25 r=y+v;
26 g=y-vmu;
27 b=y+u;
28
29 gl_FragColor=vec4(r,g,b,1.0) * col;
30}
31
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_frag.h
new file mode 100644
index 0000000..df52d19
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_frag.h
@@ -0,0 +1,31 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex, texuv;\n"
9"varying vec2 tex_c, tex_cuv;\n"
10"void main()\n"
11"{\n"
12" float y,u,v,vmu,r,g,b;\n"
13" y=texture2D(tex,tex_c).g;\n"
14" u=texture2D(texuv,tex_cuv).g;\n"
15" v=texture2D(texuv,tex_cuv).a;\n"
16"\n"
17" u=u-0.5;\n"
18" v=v-0.5;\n"
19" vmu=v*0.813+u*0.391;\n"
20" u=u*2.018;\n"
21" v=v*1.596;\n"
22" y=(y-0.062)*1.164;\n"
23"\n"
24" r=y+v;\n"
25" g=y-vmu;\n"
26" b=y+u;\n"
27"\n"
28" gl_FragColor=vec4(r,g,b,1.0);\n"
29"}\n"
30"\n"
31"\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_frag.shd
new file mode 100644
index 0000000..6910933
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_frag.shd
@@ -0,0 +1,31 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex, texuv;
9varying vec2 tex_c, tex_cuv;
10void main()
11{
12 float y,u,v,vmu,r,g,b;
13 y=texture2D(tex,tex_c).g;
14 u=texture2D(texuv,tex_cuv).g;
15 v=texture2D(texuv,tex_cuv).a;
16
17 u=u-0.5;
18 v=v-0.5;
19 vmu=v*0.813+u*0.391;
20 u=u*2.018;
21 v=v*1.596;
22 y=(y-0.062)*1.164;
23
24 r=y+v;
25 g=y-vmu;
26 b=y+u;
27
28 gl_FragColor=vec4(r,g,b,1.0);
29}
30
31
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_vert.h
new file mode 100644
index 0000000..6ff1040
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_vert.h
@@ -0,0 +1,14 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec4 color;\n"
6"attribute vec2 tex_coord, tex_coord2;\n"
7"uniform mat4 mvp;\n"
8"varying vec2 tex_c, tex_cuv;\n"
9"void main()\n"
10"{\n"
11" gl_Position = mvp * vertex;\n"
12" tex_c = tex_coord;\n"
13" tex_cuv = tex_coord2 * 0.25;\n"
14"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_vert.shd
new file mode 100644
index 0000000..994f5e6
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/nv12_nomul_vert.shd
@@ -0,0 +1,14 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec4 color;
6attribute vec2 tex_coord, tex_coord2;
7uniform mat4 mvp;
8varying vec2 tex_c, tex_cuv;
9void main()
10{
11 gl_Position = mvp * vertex;
12 tex_c = tex_coord;
13 tex_cuv = tex_coord2 * 0.25;
14}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/nv12_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/nv12_vert.h
new file mode 100644
index 0000000..38d6d9e
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/nv12_vert.h
@@ -0,0 +1,16 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec4 color;\n"
6"attribute vec2 tex_coord, tex_coord2;\n"
7"uniform mat4 mvp;\n"
8"varying vec4 col;\n"
9"varying vec2 tex_c, tex_cuv;\n"
10"void main()\n"
11"{\n"
12" gl_Position = mvp * vertex;\n"
13" col = color;\n"
14" tex_c = tex_coord;\n"
15" tex_cuv = tex_coord2 * 0.25;\n"
16"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/nv12_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/nv12_vert.shd
new file mode 100644
index 0000000..eb7cc36
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/nv12_vert.shd
@@ -0,0 +1,16 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec4 color;
6attribute vec2 tex_coord, tex_coord2;
7uniform mat4 mvp;
8varying vec4 col;
9varying vec2 tex_c, tex_cuv;
10void main()
11{
12 gl_Position = mvp * vertex;
13 col = color;
14 tex_c = tex_coord;
15 tex_cuv = tex_coord2 * 0.25;
16}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/rect_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/rect_frag.h
new file mode 100644
index 0000000..4a102a4
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/rect_frag.h
@@ -0,0 +1,13 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"void main()\n"
11"{\n"
12" gl_FragColor = col;\n"
13"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/rect_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/rect_frag.shd
new file mode 100644
index 0000000..02251ee
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/rect_frag.shd
@@ -0,0 +1,13 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10void main()
11{
12 gl_FragColor = col;
13}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/rect_frag_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/rect_frag_bin_s3c6410.h
new file mode 100644
index 0000000..ee94467
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/rect_frag_bin_s3c6410.h
@@ -0,0 +1,6 @@
10x20205350, 0xffff0008, 0x00000048, 0x01020000, 0x00000002, 0x00000000,
20x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x00000000,
40x00000000, 0x00000000, 0x20fa10e4, 0x00000000, 0x00000000, 0x00000000,
50x1e000000, 0x00000000, 0x00000000, 0x00000003, 0x00000009, 0x00000000,
60x00000000, 0x006c6f63, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/rect_frag_s3c6410.asm b/libraries/evas/src/modules/engines/gl_common/shader/rect_frag_s3c6410.asm
new file mode 100644
index 0000000..24c47ac
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/rect_frag_s3c6410.asm
@@ -0,0 +1,24 @@
1
2#-------------------------------------------------
3# ORION - OpenGL ES 2.0 Shading Language Compiler
4# SAMSUNG INDIA SOFTWARE OPERATIONS PVT. LTD.
5# Compiler Version : v04.00.09
6# Release Date : 19.01.2009
7# FIMG VERSION : FIMGv1.5
8# Optimizer Options : -O --nolodcalc
9#-------------------------------------------------
10
11# hand optimised - removed useless ops
12
13ps_3_0
14
15fimg_version 0x01020000
16
17dcl_f4_col v0.x
18
19label start
20label main_
21label main_end
22mov_sat oColor.xyzw, v0.xyzw
23ret
24
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/rect_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/rect_vert.h
new file mode 100644
index 0000000..51d41aa
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/rect_vert.h
@@ -0,0 +1,12 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec4 color;\n"
6"uniform mat4 mvp;\n"
7"varying vec4 col;\n"
8"void main()\n"
9"{\n"
10" gl_Position = mvp * vertex;\n"
11" col = color;\n"
12"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/rect_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/rect_vert.shd
new file mode 100644
index 0000000..63fea5d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/rect_vert.shd
@@ -0,0 +1,12 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec4 color;
6uniform mat4 mvp;
7varying vec4 col;
8void main()
9{
10 gl_Position = mvp * vertex;
11 col = color;
12}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/rect_vert_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/rect_vert_bin_s3c6410.h
new file mode 100644
index 0000000..3130684
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/rect_vert_bin_s3c6410.h
@@ -0,0 +1,17 @@
10x20205356, 0xffff0008, 0x00000048, 0x01020000, 0x00000006, 0x00000006,
20x00000000, 0x00000000, 0x00000002, 0x00000002, 0x00000001, 0x00000000,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000021, 0x00000000,
40x00000000, 0x02020000, 0x237820e4, 0x00000000, 0x00e40100, 0x02035500,
50x2ef820e4, 0x00000000, 0x00e40100, 0x0204aa00, 0x2ef820e4, 0x00000000,
60x00e40100, 0x0205ff00, 0x2ef800e4, 0x00000000, 0x00000000, 0x00010000,
70x20f801e4, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
80x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000,
90x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
100x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
110x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
120x0000000c, 0x00000006, 0x00000009, 0x00000000, 0x00000000, 0x00000013,
130x00000005, 0x00000009, 0x00000000, 0x00000004, 0x00000000, 0x0000000b,
140x00000009, 0x00010004, 0x00000000, 0x0000001d, 0x00000003, 0x00000009,
150x00010004, 0x00000004, 0x00000019, 0x00000003, 0x0000000e, 0x00020001,
160x00000008, 0x505f6c67, 0x7469736f, 0x006e6f69, 0x74726576, 0x63007865,
170x726f6c6f, 0x70766d00, 0x6c6f6300, 0x00000000, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/tex_frag.h
new file mode 100644
index 0000000..1ced5e0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_frag.h
@@ -0,0 +1,14 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c;\n"
11"void main()\n"
12"{\n"
13" gl_FragColor = texture2D(tex, tex_c.xy) * col;\n"
14"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/tex_frag.shd
new file mode 100644
index 0000000..2bc8d79
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_frag.shd
@@ -0,0 +1,14 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec4 col;
10varying vec2 tex_c;
11void main()
12{
13 gl_FragColor = texture2D(tex, tex_c.xy) * col;
14}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_frag_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/tex_frag_bin_s3c6410.h
new file mode 100644
index 0000000..24af537
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_frag_bin_s3c6410.h
@@ -0,0 +1,9 @@
10x20205350, 0xffff0008, 0x00000048, 0x01020000, 0x00000003, 0x00000000,
20x00000000, 0x00000000, 0x00000002, 0x00000000, 0x00000000, 0x00000001,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000e, 0x00000000,
40x00000000, 0x0000e407, 0x307820e4, 0x00000000, 0x01000000, 0x0100e400,
50x237a10e4, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
60x00000004, 0x00000003, 0x00000009, 0x00000000, 0x00000004, 0x00000008,
70x00000005, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000003,
80x0000000f, 0x00030005, 0x00000000, 0x00786574, 0x006c6f63, 0x5f786574,
90x00000063, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_frag_s3c6410.asm b/libraries/evas/src/modules/engines/gl_common/shader/tex_frag_s3c6410.asm
new file mode 100644
index 0000000..14bbfa1
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_frag_s3c6410.asm
@@ -0,0 +1,26 @@
1
2#-------------------------------------------------
3# ORION - OpenGL ES 2.0 Shading Language Compiler
4# SAMSUNG INDIA SOFTWARE OPERATIONS PVT. LTD.
5# Compiler Version : v04.00.09
6# Release Date : 19.01.2009
7# FIMG VERSION : FIMGv1.5
8# Optimizer Options : -O --nolodcalc
9#-------------------------------------------------
10
11# hand optimised - removed useless ops
12
13ps_3_0
14
15fimg_version 0x01020000
16
17dcl_s2_tex s0
18dcl_f4_col v1.x
19dcl_f2_tex_c v0.x
20
21label start
22label main_
23texld r0.xyzw, v0.xyzw, s0 # tex=s0
24mul_sat oColor.xyzw, r0.xyzw, v1.xyzw # gl_FragColor=oColor.xyzw, col=v1.xyzw
25label main_end
26ret
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag.h
new file mode 100644
index 0000000..459611f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag.h
@@ -0,0 +1,13 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex;\n"
9"varying vec2 tex_c;\n"
10"void main()\n"
11"{\n"
12" gl_FragColor = texture2D(tex, tex_c.xy);\n"
13"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag.shd
new file mode 100644
index 0000000..877df62
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag.shd
@@ -0,0 +1,13 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex;
9varying vec2 tex_c;
10void main()
11{
12 gl_FragColor = texture2D(tex, tex_c.xy);
13}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag_bin_s3c6410.h
new file mode 100644
index 0000000..b89eeb1
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_frag_bin_s3c6410.h
@@ -0,0 +1,10 @@
10x20205350, 0xffff0008, 0x00000048, 0x01020000, 0x00000003, 0x00000003,
20x00000000, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000001,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000a, 0x00000000,
40x00000000, 0x02025400, 0x23782050, 0x00000000, 0x00000000, 0x0100e407,
50x307a10e4, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
60x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000,
70x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000,
80x00000004, 0x00000005, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
90x00000003, 0x0000000f, 0x00030005, 0x00000000, 0x00786574, 0x5f786574,
100x00000063, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert.h
new file mode 100644
index 0000000..13d5edd
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert.h
@@ -0,0 +1,12 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec2 tex_coord;\n"
6"uniform mat4 mvp;\n"
7"varying vec2 tex_c;\n"
8"void main()\n"
9"{\n"
10" gl_Position = mvp * vertex;\n"
11" tex_c = tex_coord;\n"
12"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert.shd
new file mode 100644
index 0000000..74f3207
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert.shd
@@ -0,0 +1,12 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec2 tex_coord;
6uniform mat4 mvp;
7varying vec2 tex_c;
8void main()
9{
10 gl_Position = mvp * vertex;
11 tex_c = tex_coord;
12}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert_bin_s3c6410.h
new file mode 100644
index 0000000..314b5f3
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_nomul_vert_bin_s3c6410.h
@@ -0,0 +1,17 @@
10x20205356, 0xffff0008, 0x00000048, 0x01020000, 0x00000006, 0x00000006,
20x00000000, 0x00000000, 0x00000002, 0x00000002, 0x00000001, 0x00000000,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000027, 0x00000000,
40x00000000, 0x02020000, 0x237820e4, 0x00000000, 0x00e40100, 0x02035500,
50x2ef820e4, 0x00000000, 0x00e40100, 0x0204aa00, 0x2ef820e4, 0x00000000,
60x00e40100, 0x0205ff00, 0x2ef800e4, 0x00000000, 0x00000000, 0x00010000,
70x20980154, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
80x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000,
90x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
100x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
110x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
120x0000000c, 0x00000006, 0x00000009, 0x00000000, 0x00000000, 0x00000013,
130x00000009, 0x00000003, 0x00000000, 0x00000004, 0x00000000, 0x0000000b,
140x00000009, 0x00010004, 0x00000000, 0x00000021, 0x00000005, 0x00000003,
150x00010004, 0x00000004, 0x0000001d, 0x00000003, 0x0000000e, 0x00020001,
160x00000008, 0x505f6c67, 0x7469736f, 0x006e6f69, 0x74726576, 0x74007865,
170x635f7865, 0x64726f6f, 0x70766d00, 0x78657400, 0x0000635f,
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/tex_vert.h
new file mode 100644
index 0000000..8921d9d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_vert.h
@@ -0,0 +1,15 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec4 color;\n"
6"attribute vec2 tex_coord;\n"
7"uniform mat4 mvp;\n"
8"varying vec4 col;\n"
9"varying vec2 tex_c;\n"
10"void main()\n"
11"{\n"
12" gl_Position = mvp * vertex;\n"
13" col = color;\n"
14" tex_c = tex_coord;\n"
15"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/tex_vert.shd
new file mode 100644
index 0000000..606c297
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_vert.shd
@@ -0,0 +1,15 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec4 color;
6attribute vec2 tex_coord;
7uniform mat4 mvp;
8varying vec4 col;
9varying vec2 tex_c;
10void main()
11{
12 gl_Position = mvp * vertex;
13 col = color;
14 tex_c = tex_coord;
15}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/tex_vert_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/tex_vert_bin_s3c6410.h
new file mode 100644
index 0000000..1402448
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/tex_vert_bin_s3c6410.h
@@ -0,0 +1,20 @@
10x20205356, 0xffff0008, 0x00000048, 0x01020000, 0x00000007, 0x00000006,
20x00000000, 0x00000000, 0x00000003, 0x00000003, 0x00000001, 0x00000000,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000031, 0x00000000,
40x00000000, 0x02020000, 0x237820e4, 0x00000000, 0x00e40100, 0x02035500,
50x2ef820e4, 0x00000000, 0x00e40100, 0x0204aa00, 0x2ef820e4, 0x00000000,
60x00e40100, 0x0205ff00, 0x2ef800e4, 0x00000000, 0x00000000, 0x00010000,
70x20f801e4, 0x00000000, 0x00000000, 0x00020000, 0x20980254, 0x00000000,
80x00000000, 0x00000000, 0x1e000000, 0x00000000, 0x00000000, 0x00000000,
90x00000000, 0x00000000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000,
100x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
110x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
120x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000c, 0x00000006,
130x00000009, 0x00000000, 0x00000000, 0x00000013, 0x00000005, 0x00000009,
140x00000000, 0x00000004, 0x00000019, 0x00000009, 0x00000003, 0x00000000,
150x00000008, 0x00000000, 0x0000000b, 0x00000009, 0x00010004, 0x00000000,
160x00000027, 0x00000003, 0x00000009, 0x00010004, 0x00000004, 0x0000002b,
170x00000005, 0x00000003, 0x00010004, 0x00000008, 0x00000023, 0x00000003,
180x0000000e, 0x00020001, 0x00000008, 0x505f6c67, 0x7469736f, 0x006e6f69,
190x74726576, 0x63007865, 0x726f6c6f, 0x78657400, 0x6f6f635f, 0x6d006472,
200x63007076, 0x74006c6f, 0x635f7865, 0x00000000, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag.h
new file mode 100644
index 0000000..de9acf8
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag.h
@@ -0,0 +1,20 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex, texu, texv;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c, tex_c2, tex_c3;\n"
11"void main()\n"
12"{\n"
13" const mat4 yuv2rgb = mat4( 1.16400, 1.16400, 1.16400, 0.00000,\n"
14" 0.00000, -0.34410, 1.77200, 0.00000,\n"
15" 1.40200, -0.71410, 0.00000, 0.00000,\n"
16" -0.77380, 0.45630, -0.95880, 1.00000);\n"
17" gl_FragColor = (yuv2rgb * vec4(texture2D(tex, tex_c.xy).r,\n"
18" texture2D(texu, tex_c2.xy).r,\n"
19" texture2D(texv, tex_c3.xy).r, 1.0)) * col;\n"
20"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag.shd
new file mode 100644
index 0000000..8e55d14
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag.shd
@@ -0,0 +1,20 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex, texu, texv;
9varying vec4 col;
10varying vec2 tex_c, tex_c2, tex_c3;
11void main()
12{
13 const mat4 yuv2rgb = mat4( 1.16400, 1.16400, 1.16400, 0.00000,
14 0.00000, -0.34410, 1.77200, 0.00000,
15 1.40200, -0.71410, 0.00000, 0.00000,
16 -0.77380, 0.45630, -0.95880, 1.00000);
17 gl_FragColor = (yuv2rgb * vec4(texture2D(tex, tex_c.xy).r,
18 texture2D(texu, tex_c2.xy).r,
19 texture2D(texv, tex_c3.xy).r, 1.0)) * col;
20}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag_bin_s3c6410.h
new file mode 100644
index 0000000..cd301dc
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag_bin_s3c6410.h
@@ -0,0 +1,24 @@
10x20205350, 0xffff0008, 0x00000048, 0x01020000, 0x0000000d, 0x00000007,
20x00000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000003,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000026, 0x00000000,
40x00000000, 0x02065400, 0x23782050, 0x00000000, 0x00000000, 0x0100e407,
50x307820e4, 0x00000000, 0x01000000, 0x02065400, 0x23782150, 0x00000000,
60x01000000, 0x0101e407, 0x307821e4, 0x00000000, 0x02000000, 0x02065400,
70x23782250, 0x00000000, 0x02000000, 0x0102e407, 0x307822e4, 0x00000000,
80x00000000, 0x02020001, 0x237823e4, 0x00000000, 0x01e40103, 0x02030001,
90x2ef823e4, 0x00000000, 0x02e40103, 0x02040001, 0x2ef823e4, 0x00000000,
100x00000000, 0x02050000, 0x20f824e4, 0x00000000, 0x06e40103, 0x01040002,
110x2ef823e4, 0x00000000, 0x03000000, 0x0103e400, 0x237a10e4, 0x00000000,
120x00000000, 0x00000000, 0x1e000000, 0x00000000, 0x00000000, 0x00000000,
130x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
140x3f94fdf4, 0x3f94fdf4, 0x3f94fdf4, 0x00000000, 0x00000000, 0xbeb02de0,
150x3fe2d0e5, 0x00000000, 0x3fb374bc, 0xbf36cf42, 0x00000000, 0x00000000,
160xbf4617c2, 0x3ee9a027, 0xbf7573eb, 0x3f800000, 0x3f800000, 0x00000000,
170x00000000, 0x00000000, 0x0000000e, 0x00000003, 0x00000009, 0x00000000,
180x0000000c, 0x00000012, 0x00000005, 0x00000003, 0x00000000, 0x00000000,
190x00000018, 0x00000006, 0x00000003, 0x00000000, 0x00000004, 0x0000001f,
200x00000006, 0x00000003, 0x00000000, 0x00000008, 0x00000000, 0x00000003,
210x0000000f, 0x00030005, 0x00000000, 0x00000004, 0x00000004, 0x0000000f,
220x00030005, 0x00000004, 0x00000009, 0x00000004, 0x0000000f, 0x00030005,
230x00000008, 0x00786574, 0x75786574, 0x78657400, 0x6f630076, 0x6574006c,
240x00635f78, 0x5f786574, 0x74003263, 0x635f7865, 0x00000033,
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag_s3c6410.asm b/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag_s3c6410.asm
new file mode 100644
index 0000000..9a10bf0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_frag_s3c6410.asm
@@ -0,0 +1,46 @@
1
2#-------------------------------------------------
3# ORION - OpenGL ES 2.0 Shading Language Compiler
4# SAMSUNG INDIA SOFTWARE OPERATIONS PVT. LTD.
5# Compiler Version : v04.00.09
6# Release Date : 19.01.2009
7# FIMG VERSION : FIMGv1.5
8# Optimizer Options : -O --nolodcalc
9#-------------------------------------------------
10
11# hand optimised - removed useless ops
12
13ps_3_0
14
15fimg_version 0x01020000
16
17dcl_s2_tex s0
18dcl_s2_texu s1
19dcl_s2_texv s2
20dcl_f4_col v3.x
21dcl_f2_tex_c v0.x
22dcl_f2_tex_c2 v1.x
23dcl_f2_tex_c3 v2.x
24
25def c2, 1.164000, 1.164000, 1.164000, 0.000000
26def c3, 0.000000, -0.344100, 1.772000, 0.000000
27def c4, 1.402000, -0.714100, 0.000000, 0.000000
28def c5, -0.773800, 0.456300, -0.958800, 1.000000
29def c6, 1.000000, 0.000000, 0.000000, 0.000000
30
31label start
32label main_
33mul r0.xyzw, c6.xxyy, v0.xyyy # tex_c=v0.xyyy
34texld r0.xyzw, r0.xyzw, s0 # tex=s0
35mul r1.xyzw, c6.xxyy, v1.xyyy # tex_c2=v1.xyyy
36texld r1.xyzw, r1.xyzw, s1 # texu=s1
37mul r2.xyzw, c6.xxyy, v2.xyyy # tex_c3=v2.xyyy
38texld r2.xyzw, r2.xyzw, s2 # texv=s2
39mul r3.xyzw, c2.xyzw, r0.xxxx # yuv=r0.xxxx
40mad r3.xyzw, c3.xyzw, r1.xxxx, r3.xyzw # yuv=r1.xxxx
41mad r3.xyzw, c4.xyzw, r2.xxxx, r3.xyzw # yuv=r2.xxxx
42mov r4.xyzw, c5.xyzw
43mad r3.xyzw, r4.xyzw, c6.xxxx, r3.xyzw # yuv=c6.xxxx
44mul_sat oColor.xyzw, r3.xyzw, v3.xyzw # gl_FragColor=oColor.xyzw, col=v3.xyzw
45label main_end
46ret
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag.h
new file mode 100644
index 0000000..ee5855c
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag.h
@@ -0,0 +1,19 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex, texu, texv;\n"
9"varying vec2 tex_c, tex_c2, tex_c3;\n"
10"void main()\n"
11"{\n"
12" const mat4 yuv2rgb = mat4( 1.16400, 1.16400, 1.16400, 0.00000,\n"
13" 0.00000, -0.34410, 1.77200, 0.00000,\n"
14" 1.40200, -0.71410, 0.00000, 0.00000,\n"
15" -0.77380, 0.45630, -0.95880, 1.00000);\n"
16" gl_FragColor = yuv2rgb * vec4(texture2D(tex, tex_c.xy).r,\n"
17" texture2D(texu, tex_c2.xy).r,\n"
18" texture2D(texv, tex_c3.xy).r, 1.0);\n"
19"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag.shd
new file mode 100644
index 0000000..3ec4311
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag.shd
@@ -0,0 +1,19 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex, texu, texv;
9varying vec2 tex_c, tex_c2, tex_c3;
10void main()
11{
12 const mat4 yuv2rgb = mat4( 1.16400, 1.16400, 1.16400, 0.00000,
13 0.00000, -0.34410, 1.77200, 0.00000,
14 1.40200, -0.71410, 0.00000, 0.00000,
15 -0.77380, 0.45630, -0.95880, 1.00000);
16 gl_FragColor = yuv2rgb * vec4(texture2D(tex, tex_c.xy).r,
17 texture2D(texu, tex_c2.xy).r,
18 texture2D(texv, tex_c3.xy).r, 1.0);
19}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag_bin_s3c6410.h
new file mode 100644
index 0000000..45aa66d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_frag_bin_s3c6410.h
@@ -0,0 +1,23 @@
10x20205350, 0xffff0008, 0x00000048, 0x01020000, 0x0000000c, 0x00000007,
20x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000003,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000022, 0x00000000,
40x00000000, 0x02065400, 0x23782050, 0x00000000, 0x00000000, 0x0100e407,
50x307820e4, 0x00000000, 0x01000000, 0x02065400, 0x23782150, 0x00000000,
60x01000000, 0x0101e407, 0x307821e4, 0x00000000, 0x02000000, 0x02065400,
70x23782250, 0x00000000, 0x02000000, 0x0102e407, 0x307822e4, 0x00000000,
80x00000000, 0x02020001, 0x237823e4, 0x00000000, 0x01e40103, 0x02030001,
90x2ef823e4, 0x00000000, 0x02e40103, 0x02040001, 0x2ef823e4, 0x00000000,
100x00000000, 0x02050000, 0x20f824e4, 0x00000000, 0x06e40103, 0x01040002,
110x2efa10e4, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
120x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000,
130x3f800000, 0x3f800000, 0x3f94fdf4, 0x3f94fdf4, 0x3f94fdf4, 0x00000000,
140x00000000, 0xbeb02de0, 0x3fe2d0e5, 0x00000000, 0x3fb374bc, 0xbf36cf42,
150x00000000, 0x00000000, 0xbf4617c2, 0x3ee9a027, 0xbf7573eb, 0x3f800000,
160x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x0000000e, 0x00000005,
170x00000003, 0x00000000, 0x00000000, 0x00000014, 0x00000006, 0x00000003,
180x00000000, 0x00000004, 0x0000001b, 0x00000006, 0x00000003, 0x00000000,
190x00000008, 0x00000000, 0x00000003, 0x0000000f, 0x00030005, 0x00000000,
200x00000004, 0x00000004, 0x0000000f, 0x00030005, 0x00000004, 0x00000009,
210x00000004, 0x0000000f, 0x00030005, 0x00000008, 0x00786574, 0x75786574,
220x78657400, 0x65740076, 0x00635f78, 0x5f786574, 0x74003263, 0x635f7865,
230x00000033, \ No newline at end of file
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert.h
new file mode 100644
index 0000000..c3f585f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert.h
@@ -0,0 +1,14 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec2 tex_coord, tex_coord2, tex_coord3;\n"
6"uniform mat4 mvp;\n"
7"varying vec2 tex_c, tex_c2, tex_c3;\n"
8"void main()\n"
9"{\n"
10" gl_Position = mvp * vertex;\n"
11" tex_c = tex_coord;\n"
12" tex_c2 = tex_coord2;\n"
13" tex_c3 = tex_coord3;\n"
14"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert.shd
new file mode 100644
index 0000000..a83d505
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert.shd
@@ -0,0 +1,14 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec2 tex_coord, tex_coord2, tex_coord3;
6uniform mat4 mvp;
7varying vec2 tex_c, tex_c2, tex_c3;
8void main()
9{
10 gl_Position = mvp * vertex;
11 tex_c = tex_coord;
12 tex_c2 = tex_coord2;
13 tex_c3 = tex_coord3;
14}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert_bin_s3c6410.h
new file mode 100644
index 0000000..5942b4b
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_nomul_vert_bin_s3c6410.h
@@ -0,0 +1,23 @@
10x20205356, 0xffff0008, 0x00000048, 0x01020000, 0x00000008, 0x00000006,
20x00000000, 0x00000000, 0x00000004, 0x00000004, 0x00000001, 0x00000000,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000004b, 0x00000000,
40x00000000, 0x02020000, 0x237820e4, 0x00000000, 0x00e40100, 0x02035500,
50x2ef820e4, 0x00000000, 0x00e40100, 0x0204aa00, 0x2ef820e4, 0x00000000,
60x00e40100, 0x0205ff00, 0x2ef800e4, 0x00000000, 0x00000000, 0x00010000,
70x20980154, 0x00000000, 0x00000000, 0x00020000, 0x20980254, 0x00000000,
80x00000000, 0x00030000, 0x20980354, 0x00000000, 0x00000000, 0x00000000,
90x1e000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
100x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x00000000, 0x00000000,
110x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
120x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
130x00000000, 0x00000000, 0x0000000c, 0x00000006, 0x00000009, 0x00000000,
140x00000000, 0x00000013, 0x00000009, 0x00000003, 0x00000000, 0x00000004,
150x0000001d, 0x0000000a, 0x00000003, 0x00000000, 0x00000008, 0x00000028,
160x0000000a, 0x00000003, 0x00000000, 0x0000000c, 0x00000000, 0x0000000b,
170x00000009, 0x00010004, 0x00000000, 0x00000037, 0x00000005, 0x00000003,
180x00010004, 0x00000004, 0x0000003d, 0x00000006, 0x00000003, 0x00010004,
190x00000008, 0x00000044, 0x00000006, 0x00000003, 0x00010004, 0x0000000c,
200x00000033, 0x00000003, 0x0000000e, 0x00020001, 0x00000008, 0x505f6c67,
210x7469736f, 0x006e6f69, 0x74726576, 0x74007865, 0x635f7865, 0x64726f6f,
220x78657400, 0x6f6f635f, 0x00326472, 0x5f786574, 0x726f6f63, 0x6d003364,
230x74007076, 0x635f7865, 0x78657400, 0x0032635f, 0x5f786574, 0x00003363,
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/yuv_vert.h
new file mode 100644
index 0000000..6ccf06d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_vert.h
@@ -0,0 +1,17 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec4 color;\n"
6"attribute vec2 tex_coord, tex_coord2, tex_coord3;\n"
7"uniform mat4 mvp;\n"
8"varying vec4 col;\n"
9"varying vec2 tex_c, tex_c2, tex_c3;\n"
10"void main()\n"
11"{\n"
12" gl_Position = mvp * vertex;\n"
13" col = color;\n"
14" tex_c = tex_coord;\n"
15" tex_c2 = tex_coord2;\n"
16" tex_c3 = tex_coord3;\n"
17"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/yuv_vert.shd
new file mode 100644
index 0000000..0ea0b2f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_vert.shd
@@ -0,0 +1,17 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec4 color;
6attribute vec2 tex_coord, tex_coord2, tex_coord3;
7uniform mat4 mvp;
8varying vec4 col;
9varying vec2 tex_c, tex_c2, tex_c3;
10void main()
11{
12 gl_Position = mvp * vertex;
13 col = color;
14 tex_c = tex_coord;
15 tex_c2 = tex_coord2;
16 tex_c3 = tex_coord3;
17}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuv_vert_bin_s3c6410.h b/libraries/evas/src/modules/engines/gl_common/shader/yuv_vert_bin_s3c6410.h
new file mode 100644
index 0000000..e757b6d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuv_vert_bin_s3c6410.h
@@ -0,0 +1,26 @@
10x20205356, 0xffff0008, 0x00000048, 0x01020000, 0x00000009, 0x00000006,
20x00000000, 0x00000000, 0x00000005, 0x00000005, 0x00000001, 0x00000000,
30x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000055, 0x00000000,
40x00000000, 0x02020000, 0x237820e4, 0x00000000, 0x00e40100, 0x02035500,
50x2ef820e4, 0x00000000, 0x00e40100, 0x0204aa00, 0x2ef820e4, 0x00000000,
60x00e40100, 0x0205ff00, 0x2ef800e4, 0x00000000, 0x00000000, 0x00010000,
70x20f801e4, 0x00000000, 0x00000000, 0x00020000, 0x20980254, 0x00000000,
80x00000000, 0x00030000, 0x20980354, 0x00000000, 0x00000000, 0x00040000,
90x20980454, 0x00000000, 0x00000000, 0x00000000, 0x1e000000, 0x00000000,
100x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3f800000, 0x3f800000,
110x3f800000, 0x3f800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
120x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
130x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
140x0000000c, 0x00000006, 0x00000009, 0x00000000, 0x00000000, 0x00000013,
150x00000005, 0x00000009, 0x00000000, 0x00000004, 0x00000019, 0x00000009,
160x00000003, 0x00000000, 0x00000008, 0x00000023, 0x0000000a, 0x00000003,
170x00000000, 0x0000000c, 0x0000002e, 0x0000000a, 0x00000003, 0x00000000,
180x00000010, 0x00000000, 0x0000000b, 0x00000009, 0x00010004, 0x00000000,
190x0000003d, 0x00000003, 0x00000009, 0x00010004, 0x00000004, 0x00000041,
200x00000005, 0x00000003, 0x00010004, 0x00000008, 0x00000047, 0x00000006,
210x00000003, 0x00010004, 0x0000000c, 0x0000004e, 0x00000006, 0x00000003,
220x00010004, 0x00000010, 0x00000039, 0x00000003, 0x0000000e, 0x00020001,
230x00000008, 0x505f6c67, 0x7469736f, 0x006e6f69, 0x74726576, 0x63007865,
240x726f6c6f, 0x78657400, 0x6f6f635f, 0x74006472, 0x635f7865, 0x64726f6f,
250x65740032, 0x6f635f78, 0x3364726f, 0x70766d00, 0x6c6f6300, 0x78657400,
260x7400635f, 0x635f7865, 0x65740032, 0x33635f78, 0x00000000,
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuy2_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_frag.h
new file mode 100644
index 0000000..abe4b03
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_frag.h
@@ -0,0 +1,30 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex, texuv;\n"
9"varying vec4 col;\n"
10"varying vec2 tex_c, tex_cuv;\n"
11"void main()\n"
12"{\n"
13" float y,u,v,vmu,r,g,b;\n"
14" y=texture2D(tex,tex_c).r;\n"
15" u=texture2D(texuv,tex_cuv).g;\n"
16" v=texture2D(texuv,tex_cuv).a;\n"
17"\n"
18" u=u-0.5;\n"
19" v=v-0.5;\n"
20" vmu=v*0.813+u*0.391;\n"
21" u=u*2.018;\n"
22" v=v*1.596;\n"
23"\n"
24" r=y+v;\n"
25" g=y-vmu;\n"
26" b=y+u;\n"
27"\n"
28" gl_FragColor=vec4(r,g,b,1.0) * col;\n"
29"}\n"
30"\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuy2_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_frag.shd
new file mode 100644
index 0000000..98dd91b
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_frag.shd
@@ -0,0 +1,30 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex, texuv;
9varying vec4 col;
10varying vec2 tex_c, tex_cuv;
11void main()
12{
13 float y,u,v,vmu,r,g,b;
14 y=texture2D(tex,tex_c).r;
15 u=texture2D(texuv,tex_cuv).g;
16 v=texture2D(texuv,tex_cuv).a;
17
18 u=u-0.5;
19 v=v-0.5;
20 vmu=v*0.813+u*0.391;
21 u=u*2.018;
22 v=v*1.596;
23
24 r=y+v;
25 g=y-vmu;
26 b=y+u;
27
28 gl_FragColor=vec4(r,g,b,1.0) * col;
29}
30
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_frag.h b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_frag.h
new file mode 100644
index 0000000..618fa50
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_frag.h
@@ -0,0 +1,30 @@
1"#ifdef GL_ES\n"
2"#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
3"precision highp float;\n"
4"#else\n"
5"precision mediump float;\n"
6"#endif\n"
7"#endif\n"
8"uniform sampler2D tex, texuv;\n"
9"varying vec2 tex_c, tex_cuv;\n"
10"void main()\n"
11"{\n"
12" float y,u,v,vmu,r,g,b;\n"
13" y=texture2D(tex,tex_c).r;\n"
14" u=texture2D(texuv,tex_cuv).g;\n"
15" v=texture2D(texuv,tex_cuv).a;\n"
16"\n"
17" u=u-0.5;\n"
18" v=v-0.5;\n"
19" vmu=v*0.813+u*0.391;\n"
20" u=u*2.018;\n"
21" v=v*1.596;\n"
22" y=(y-0.062)*1.164;\n"
23"\n"
24" r=y+v;\n"
25" g=y-vmu;\n"
26" b=y+u;\n"
27"\n"
28" gl_FragColor=vec4(r,g,b,1.0);\n"
29"}\n"
30"\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_frag.shd b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_frag.shd
new file mode 100644
index 0000000..fd82e2a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_frag.shd
@@ -0,0 +1,30 @@
1#ifdef GL_ES
2#ifdef GL_FRAGMENT_PRECISION_HIGH
3precision highp float;
4#else
5precision mediump float;
6#endif
7#endif
8uniform sampler2D tex, texuv;
9varying vec2 tex_c, tex_cuv;
10void main()
11{
12 float y,u,v,vmu,r,g,b;
13 y=texture2D(tex,tex_c).r;
14 u=texture2D(texuv,tex_cuv).g;
15 v=texture2D(texuv,tex_cuv).a;
16
17 u=u-0.5;
18 v=v-0.5;
19 vmu=v*0.813+u*0.391;
20 u=u*2.018;
21 v=v*1.596;
22 y=(y-0.062)*1.164;
23
24 r=y+v;
25 g=y-vmu;
26 b=y+u;
27
28 gl_FragColor=vec4(r,g,b,1.0);
29}
30
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_vert.h
new file mode 100644
index 0000000..4620b66
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_vert.h
@@ -0,0 +1,13 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec2 tex_coord, tex_coord2;\n"
6"uniform mat4 mvp;\n"
7"varying vec2 tex_c, tex_cuv;\n"
8"void main()\n"
9"{\n"
10" gl_Position = mvp * vertex;\n"
11" tex_c = tex_coord;\n"
12" tex_cuv = vec2(tex_coord2.x * 0.5, tex_coord2.y);\n"
13"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_vert.shd
new file mode 100644
index 0000000..05acc9c
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_nomul_vert.shd
@@ -0,0 +1,13 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec2 tex_coord, tex_coord2;
6uniform mat4 mvp;
7varying vec2 tex_c, tex_cuv;
8void main()
9{
10 gl_Position = mvp * vertex;
11 tex_c = tex_coord;
12 tex_cuv = vec2(tex_coord2.x * 0.5, tex_coord2.y);
13}
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuy2_vert.h b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_vert.h
new file mode 100644
index 0000000..1e49018
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_vert.h
@@ -0,0 +1,16 @@
1"#ifdef GL_ES\n"
2"precision highp float;\n"
3"#endif\n"
4"attribute vec4 vertex;\n"
5"attribute vec4 color;\n"
6"attribute vec2 tex_coord, tex_coord2;\n"
7"uniform mat4 mvp;\n"
8"varying vec4 col;\n"
9"varying vec2 tex_c, tex_cuv;\n"
10"void main()\n"
11"{\n"
12" gl_Position = mvp * vertex;\n"
13" col = color;\n"
14" tex_c = tex_coord;\n"
15" tex_cuv = vec2(tex_coord2.x * 0.5, tex_coord2.y);\n"
16"}\n"
diff --git a/libraries/evas/src/modules/engines/gl_common/shader/yuy2_vert.shd b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_vert.shd
new file mode 100644
index 0000000..54efb1e
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_common/shader/yuy2_vert.shd
@@ -0,0 +1,16 @@
1#ifdef GL_ES
2precision highp float;
3#endif
4attribute vec4 vertex;
5attribute vec4 color;
6attribute vec2 tex_coord, tex_coord2;
7uniform mat4 mvp;
8varying vec4 col;
9varying vec2 tex_c, tex_cuv;
10void main()
11{
12 gl_Position = mvp * vertex;
13 col = color;
14 tex_c = tex_coord;
15 tex_cuv = vec2(tex_coord2.x * 0.5, tex_coord2.y);
16}
diff --git a/libraries/evas/src/modules/engines/gl_sdl/Evas_Engine_GL_SDL.h b/libraries/evas/src/modules/engines/gl_sdl/Evas_Engine_GL_SDL.h
new file mode 100644
index 0000000..3804aa0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_sdl/Evas_Engine_GL_SDL.h
@@ -0,0 +1,24 @@
1#ifndef _EVAS_ENGINE_GL_SDL_H
2#define _EVAS_ENGINE_GL_SDL_H
3
4#include <SDL/SDL.h>
5
6typedef struct _Evas_Engine_Info_GL_SDL Evas_Engine_Info_GL_SDL;
7
8struct _Evas_Engine_Info_GL_SDL
9{
10 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
11 /* at you and make nasty noises */
12 Evas_Engine_Info magic;
13
14 /* engine specific data & parameters it needs to set up */
15 struct {
16 int rotation;
17 int fullscreen : 1;
18 int noframe : 1;
19 } flags;
20
21};
22#endif
23
24
diff --git a/libraries/evas/src/modules/engines/gl_sdl/Makefile.am b/libraries/evas/src/modules/engines/gl_sdl/Makefile.am
new file mode 100644
index 0000000..abdeaf0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_sdl/Makefile.am
@@ -0,0 +1,46 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines/gl_common \
9@FREETYPE_CFLAGS@ \
10@PIXMAN_CFLAGS@ \
11@EINA_CFLAGS@ \
12@GL_EET_CFLAGS@ \
13@evas_engine_gl_sdl_cflags@
14
15if BUILD_ENGINE_GL_SDL
16
17GL_SDL_SOURCES = \
18evas_engine.c
19
20GL_SDL_LIBADD = @evas_engine_gl_sdl_libs@ $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
21
22
23includes_HEADERS = Evas_Engine_GL_SDL.h
24includesdir = $(includedir)/evas-@VMAJ@
25
26if !EVAS_STATIC_BUILD_GL_SDL
27
28pkgdir = $(libdir)/evas/modules/engines/gl_sdl/$(MODULE_ARCH)
29pkg_LTLIBRARIES = module.la
30
31module_la_SOURCES = $(GL_SDL_SOURCES)
32module_la_LIBADD = @EINA_LIBS@ $(GL_SDL_LIBADD) $(top_builddir)/src/lib/libevas.la @dlopen_libs@
33module_la_LDFLAGS = -module -avoid-version
34module_la_LIBTOOLFLAGS = --tag=disable-static
35
36else
37
38noinst_LTLIBRARIES = libevas_engine_gl_sdl.la
39
40libevas_engine_gl_sdl_la_SOURCES = $(GL_SDL_SOURCES)
41libevas_engine_gl_sdl_la_LIBADD = $(GL_SDL_LIBADD)
42
43endif
44endif
45
46EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/gl_sdl/Makefile.in b/libraries/evas/src/modules/engines/gl_sdl/Makefile.in
new file mode 100644
index 0000000..5d4135d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_sdl/Makefile.in
@@ -0,0 +1,796 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/gl_sdl
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84@BUILD_ENGINE_GL_SDL_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
85@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_TRUE@libevas_engine_gl_sdl_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_gl_sdl_la_SOURCES_DIST = evas_engine.c
87@BUILD_ENGINE_GL_SDL_TRUE@am__objects_1 = evas_engine.lo
88@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_TRUE@am_libevas_engine_gl_sdl_la_OBJECTS = $(am__objects_1)
89libevas_engine_gl_sdl_la_OBJECTS = \
90 $(am_libevas_engine_gl_sdl_la_OBJECTS)
91AM_V_lt = $(am__v_lt_$(V))
92am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
93am__v_lt_0 = --silent
94@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_TRUE@am_libevas_engine_gl_sdl_la_rpath =
95@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_FALSE@module_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
96@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_FALSE@ $(top_builddir)/src/lib/libevas.la
97am__module_la_SOURCES_DIST = evas_engine.c
98@BUILD_ENGINE_GL_SDL_TRUE@am__objects_2 = module_la-evas_engine.lo
99@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_FALSE@am_module_la_OBJECTS = $(am__objects_2)
100module_la_OBJECTS = $(am_module_la_OBJECTS)
101module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
102 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
103 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
104@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_FALSE@am_module_la_rpath = -rpath \
105@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_FALSE@ $(pkgdir)
106DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
107depcomp = $(SHELL) $(top_srcdir)/depcomp
108am__depfiles_maybe = depfiles
109am__mv = mv -f
110COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
111 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
112LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
113 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
114 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
115 $(AM_CFLAGS) $(CFLAGS)
116AM_V_CC = $(am__v_CC_$(V))
117am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
118am__v_CC_0 = @echo " CC " $@;
119AM_V_at = $(am__v_at_$(V))
120am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
121am__v_at_0 = @
122CCLD = $(CC)
123LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
124 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
125 $(AM_LDFLAGS) $(LDFLAGS) -o $@
126AM_V_CCLD = $(am__v_CCLD_$(V))
127am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
128am__v_CCLD_0 = @echo " CCLD " $@;
129AM_V_GEN = $(am__v_GEN_$(V))
130am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
131am__v_GEN_0 = @echo " GEN " $@;
132SOURCES = $(libevas_engine_gl_sdl_la_SOURCES) $(module_la_SOURCES)
133DIST_SOURCES = $(am__libevas_engine_gl_sdl_la_SOURCES_DIST) \
134 $(am__module_la_SOURCES_DIST)
135am__includes_HEADERS_DIST = Evas_Engine_GL_SDL.h
136HEADERS = $(includes_HEADERS)
137ETAGS = etags
138CTAGS = ctags
139DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
140ACLOCAL = @ACLOCAL@
141ALLOCA = @ALLOCA@
142AMTAR = @AMTAR@
143AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
144AR = @AR@
145AS = @AS@
146AUTOCONF = @AUTOCONF@
147AUTOHEADER = @AUTOHEADER@
148AUTOMAKE = @AUTOMAKE@
149AWK = @AWK@
150CC = @CC@
151CCDEPMODE = @CCDEPMODE@
152CFLAGS = @CFLAGS@
153CHECK_CFLAGS = @CHECK_CFLAGS@
154CHECK_LIBS = @CHECK_LIBS@
155CPP = @CPP@
156CPPFLAGS = @CPPFLAGS@
157CXX = @CXX@
158CXXCPP = @CXXCPP@
159CXXDEPMODE = @CXXDEPMODE@
160CXXFLAGS = @CXXFLAGS@
161CYGPATH_W = @CYGPATH_W@
162DEFS = @DEFS@
163DEPDIR = @DEPDIR@
164DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
165DIRECTFB_LIBS = @DIRECTFB_LIBS@
166DLLTOOL = @DLLTOOL@
167DSYMUTIL = @DSYMUTIL@
168DUMPBIN = @DUMPBIN@
169ECHO_C = @ECHO_C@
170ECHO_N = @ECHO_N@
171ECHO_T = @ECHO_T@
172ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
173ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
174EDB_CFLAGS = @EDB_CFLAGS@
175EDB_LIBS = @EDB_LIBS@
176EDJE_CFLAGS = @EDJE_CFLAGS@
177EDJE_LIBS = @EDJE_LIBS@
178EET_CFLAGS = @EET_CFLAGS@
179EET_LIBS = @EET_LIBS@
180EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
181EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
182EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
183EGREP = @EGREP@
184EINA_CFLAGS = @EINA_CFLAGS@
185EINA_LIBS = @EINA_LIBS@
186EVAS_CFLAGS = @EVAS_CFLAGS@
187EVAS_LIBS = @EVAS_LIBS@
188EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
189EVIL_CFLAGS = @EVIL_CFLAGS@
190EVIL_LIBS = @EVIL_LIBS@
191EXEEXT = @EXEEXT@
192FGREP = @FGREP@
193FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
194FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
195FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
196FREETYPE_LIBS = @FREETYPE_LIBS@
197FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
198FRIBIDI_LIBS = @FRIBIDI_LIBS@
199GL_EET_CFLAGS = @GL_EET_CFLAGS@
200GL_EET_LIBS = @GL_EET_LIBS@
201GREP = @GREP@
202HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
203HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
204INSTALL = @INSTALL@
205INSTALL_DATA = @INSTALL_DATA@
206INSTALL_PROGRAM = @INSTALL_PROGRAM@
207INSTALL_SCRIPT = @INSTALL_SCRIPT@
208INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
209LD = @LD@
210LDFLAGS = @LDFLAGS@
211LIBOBJS = @LIBOBJS@
212LIBS = @LIBS@
213LIBTOOL = @LIBTOOL@
214LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
215LINEBREAK_LIBS = @LINEBREAK_LIBS@
216LIPO = @LIPO@
217LN_S = @LN_S@
218LTLIBOBJS = @LTLIBOBJS@
219MAKEINFO = @MAKEINFO@
220MKDIR_P = @MKDIR_P@
221MODULE_ARCH = @MODULE_ARCH@
222NM = @NM@
223NMEDIT = @NMEDIT@
224OBJC = @OBJC@
225OBJCDEPMODE = @OBJCDEPMODE@
226OBJCFLAGS = @OBJCFLAGS@
227OBJDUMP = @OBJDUMP@
228OBJEXT = @OBJEXT@
229OTOOL = @OTOOL@
230OTOOL64 = @OTOOL64@
231PACKAGE = @PACKAGE@
232PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
233PACKAGE_NAME = @PACKAGE_NAME@
234PACKAGE_STRING = @PACKAGE_STRING@
235PACKAGE_TARNAME = @PACKAGE_TARNAME@
236PACKAGE_URL = @PACKAGE_URL@
237PACKAGE_VERSION = @PACKAGE_VERSION@
238PATH_SEPARATOR = @PATH_SEPARATOR@
239PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
240PIXMAN_LIBS = @PIXMAN_LIBS@
241PKG_CONFIG = @PKG_CONFIG@
242PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
243PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
244PNG_CFLAGS = @PNG_CFLAGS@
245PNG_LIBS = @PNG_LIBS@
246RANLIB = @RANLIB@
247SDL_CFLAGS = @SDL_CFLAGS@
248SDL_LIBS = @SDL_LIBS@
249SED = @SED@
250SET_MAKE = @SET_MAKE@
251SHELL = @SHELL@
252SHM_OPEN_LINK = @SHM_OPEN_LINK@
253STRIP = @STRIP@
254SVG_CFLAGS = @SVG_CFLAGS@
255SVG_LIBS = @SVG_LIBS@
256VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
257VALGRIND_LIBS = @VALGRIND_LIBS@
258VERSION = @VERSION@
259VMAJ = @VMAJ@
260WIN32_CFLAGS = @WIN32_CFLAGS@
261WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
262XCB_CFLAGS = @XCB_CFLAGS@
263XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
264XCB_GL_LIBS = @XCB_GL_LIBS@
265XCB_LIBS = @XCB_LIBS@
266XEXT_CFLAGS = @XEXT_CFLAGS@
267XEXT_LIBS = @XEXT_LIBS@
268XMKMF = @XMKMF@
269X_CFLAGS = @X_CFLAGS@
270X_EXTRA_LIBS = @X_EXTRA_LIBS@
271X_LIBS = @X_LIBS@
272X_PRE_LIBS = @X_PRE_LIBS@
273abs_builddir = @abs_builddir@
274abs_srcdir = @abs_srcdir@
275abs_top_builddir = @abs_top_builddir@
276abs_top_srcdir = @abs_top_srcdir@
277ac_ct_CC = @ac_ct_CC@
278ac_ct_CXX = @ac_ct_CXX@
279ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
280ac_ct_OBJC = @ac_ct_OBJC@
281altivec_cflags = @altivec_cflags@
282am__include = @am__include@
283am__leading_dot = @am__leading_dot@
284am__quote = @am__quote@
285am__tar = @am__tar@
286am__untar = @am__untar@
287bindir = @bindir@
288build = @build@
289build_alias = @build_alias@
290build_cpu = @build_cpu@
291build_os = @build_os@
292build_vendor = @build_vendor@
293builddir = @builddir@
294datadir = @datadir@
295datarootdir = @datarootdir@
296dlopen_libs = @dlopen_libs@
297docdir = @docdir@
298dvidir = @dvidir@
299edje_cc = @edje_cc@
300efl_doxygen = @efl_doxygen@
301efl_have_doxygen = @efl_have_doxygen@
302evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
303evas_engine_buffer_libs = @evas_engine_buffer_libs@
304evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
305evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
306evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
307evas_engine_directfb_libs = @evas_engine_directfb_libs@
308evas_engine_fb_cflags = @evas_engine_fb_cflags@
309evas_engine_fb_libs = @evas_engine_fb_libs@
310evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
311evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
312evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
313evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
314evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
315evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
316evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
317evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
318evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
319evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
320evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
321evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
322evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
323evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
324evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
325evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
326evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
327evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
328evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
329evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
330evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
331evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
332evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
333evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
334evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
335evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
336evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
337evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
338evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
339evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
340evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
341evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
342evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
343evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
344evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
345evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
346evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
347evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
348evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
349evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
350evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
351evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
352evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
353evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
354evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
355evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
356evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
357evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
358evas_image_loader_png_libs = @evas_image_loader_png_libs@
359evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
360evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
361evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
362evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
363evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
364evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
365evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
366evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
367evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
368evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
369evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
370evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
371exec_prefix = @exec_prefix@
372have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
373have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
374have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
375have_evas_engine_software_x11 = @have_evas_engine_software_x11@
376have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
377have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
378have_lcov = @have_lcov@
379host = @host@
380host_alias = @host_alias@
381host_cpu = @host_cpu@
382host_os = @host_os@
383host_vendor = @host_vendor@
384htmldir = @htmldir@
385includedir = @includedir@
386infodir = @infodir@
387install_sh = @install_sh@
388libdir = @libdir@
389libexecdir = @libexecdir@
390localedir = @localedir@
391localstatedir = @localstatedir@
392lt_ECHO = @lt_ECHO@
393lt_enable_auto_import = @lt_enable_auto_import@
394mandir = @mandir@
395mkdir_p = @mkdir_p@
396oldincludedir = @oldincludedir@
397pdfdir = @pdfdir@
398pkgconfig_requires_private = @pkgconfig_requires_private@
399prefix = @prefix@
400program_transform_name = @program_transform_name@
401psdir = @psdir@
402pthread_cflags = @pthread_cflags@
403pthread_libs = @pthread_libs@
404release_info = @release_info@
405requirement_evas = @requirement_evas@
406sbindir = @sbindir@
407sharedstatedir = @sharedstatedir@
408srcdir = @srcdir@
409sysconfdir = @sysconfdir@
410target_alias = @target_alias@
411top_build_prefix = @top_build_prefix@
412top_builddir = @top_builddir@
413top_srcdir = @top_srcdir@
414version_info = @version_info@
415MAINTAINERCLEANFILES = Makefile.in
416AM_CPPFLAGS = \
417-I. \
418-I$(top_srcdir)/src/lib \
419-I$(top_srcdir)/src/lib/include \
420-I$(top_srcdir)/src/modules/engines/gl_common \
421@FREETYPE_CFLAGS@ \
422@PIXMAN_CFLAGS@ \
423@EINA_CFLAGS@ \
424@GL_EET_CFLAGS@ \
425@evas_engine_gl_sdl_cflags@
426
427@BUILD_ENGINE_GL_SDL_TRUE@GL_SDL_SOURCES = \
428@BUILD_ENGINE_GL_SDL_TRUE@evas_engine.c
429
430@BUILD_ENGINE_GL_SDL_TRUE@GL_SDL_LIBADD = @evas_engine_gl_sdl_libs@ $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
431@BUILD_ENGINE_GL_SDL_TRUE@includes_HEADERS = Evas_Engine_GL_SDL.h
432@BUILD_ENGINE_GL_SDL_TRUE@includesdir = $(includedir)/evas-@VMAJ@
433@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_FALSE@pkgdir = $(libdir)/evas/modules/engines/gl_sdl/$(MODULE_ARCH)
434@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_FALSE@pkg_LTLIBRARIES = module.la
435@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_FALSE@module_la_SOURCES = $(GL_SDL_SOURCES)
436@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_FALSE@module_la_LIBADD = @EINA_LIBS@ $(GL_SDL_LIBADD) $(top_builddir)/src/lib/libevas.la @dlopen_libs@
437@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_FALSE@module_la_LDFLAGS = -module -avoid-version
438@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
439@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_TRUE@noinst_LTLIBRARIES = libevas_engine_gl_sdl.la
440@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_TRUE@libevas_engine_gl_sdl_la_SOURCES = $(GL_SDL_SOURCES)
441@BUILD_ENGINE_GL_SDL_TRUE@@EVAS_STATIC_BUILD_GL_SDL_TRUE@libevas_engine_gl_sdl_la_LIBADD = $(GL_SDL_LIBADD)
442EXTRA_DIST = evas_engine.h
443all: all-am
444
445.SUFFIXES:
446.SUFFIXES: .c .lo .o .obj
447$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
448 @for dep in $?; do \
449 case '$(am__configure_deps)' in \
450 *$$dep*) \
451 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
452 && { if test -f $@; then exit 0; else break; fi; }; \
453 exit 1;; \
454 esac; \
455 done; \
456 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/gl_sdl/Makefile'; \
457 $(am__cd) $(top_srcdir) && \
458 $(AUTOMAKE) --gnu src/modules/engines/gl_sdl/Makefile
459.PRECIOUS: Makefile
460Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
461 @case '$?' in \
462 *config.status*) \
463 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
464 *) \
465 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
466 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
467 esac;
468
469$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
470 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
471
472$(top_srcdir)/configure: $(am__configure_deps)
473 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
474$(ACLOCAL_M4): $(am__aclocal_m4_deps)
475 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
476$(am__aclocal_m4_deps):
477
478clean-noinstLTLIBRARIES:
479 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
480 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
481 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
482 test "$$dir" != "$$p" || dir=.; \
483 echo "rm -f \"$${dir}/so_locations\""; \
484 rm -f "$${dir}/so_locations"; \
485 done
486install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
487 @$(NORMAL_INSTALL)
488 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
489 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
490 list2=; for p in $$list; do \
491 if test -f $$p; then \
492 list2="$$list2 $$p"; \
493 else :; fi; \
494 done; \
495 test -z "$$list2" || { \
496 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
497 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
498 }
499
500uninstall-pkgLTLIBRARIES:
501 @$(NORMAL_UNINSTALL)
502 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
503 for p in $$list; do \
504 $(am__strip_dir) \
505 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
506 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
507 done
508
509clean-pkgLTLIBRARIES:
510 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
511 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
512 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
513 test "$$dir" != "$$p" || dir=.; \
514 echo "rm -f \"$${dir}/so_locations\""; \
515 rm -f "$${dir}/so_locations"; \
516 done
517libevas_engine_gl_sdl.la: $(libevas_engine_gl_sdl_la_OBJECTS) $(libevas_engine_gl_sdl_la_DEPENDENCIES)
518 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_gl_sdl_la_rpath) $(libevas_engine_gl_sdl_la_OBJECTS) $(libevas_engine_gl_sdl_la_LIBADD) $(LIBS)
519module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
520 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
521
522mostlyclean-compile:
523 -rm -f *.$(OBJEXT)
524
525distclean-compile:
526 -rm -f *.tab.c
527
528@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
529@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
530
531.c.o:
532@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
533@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
534@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
535@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
536@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
537@am__fastdepCC_FALSE@ $(COMPILE) -c $<
538
539.c.obj:
540@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
541@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
542@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
543@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
544@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
545@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
546
547.c.lo:
548@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
549@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
550@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
551@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
552@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
553@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
554
555module_la-evas_engine.lo: evas_engine.c
556@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
557@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
558@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
559@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
560@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
561@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
562
563mostlyclean-libtool:
564 -rm -f *.lo
565
566clean-libtool:
567 -rm -rf .libs _libs
568install-includesHEADERS: $(includes_HEADERS)
569 @$(NORMAL_INSTALL)
570 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
571 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
572 for p in $$list; do \
573 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
574 echo "$$d$$p"; \
575 done | $(am__base_list) | \
576 while read files; do \
577 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
578 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
579 done
580
581uninstall-includesHEADERS:
582 @$(NORMAL_UNINSTALL)
583 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
584 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
585 test -n "$$files" || exit 0; \
586 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
587 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
588
589ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
590 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
591 unique=`for i in $$list; do \
592 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
593 done | \
594 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
595 END { if (nonempty) { for (i in files) print i; }; }'`; \
596 mkid -fID $$unique
597tags: TAGS
598
599TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
600 $(TAGS_FILES) $(LISP)
601 set x; \
602 here=`pwd`; \
603 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
604 unique=`for i in $$list; do \
605 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
606 done | \
607 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
608 END { if (nonempty) { for (i in files) print i; }; }'`; \
609 shift; \
610 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
611 test -n "$$unique" || unique=$$empty_fix; \
612 if test $$# -gt 0; then \
613 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
614 "$$@" $$unique; \
615 else \
616 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
617 $$unique; \
618 fi; \
619 fi
620ctags: CTAGS
621CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
622 $(TAGS_FILES) $(LISP)
623 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
624 unique=`for i in $$list; do \
625 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
626 done | \
627 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
628 END { if (nonempty) { for (i in files) print i; }; }'`; \
629 test -z "$(CTAGS_ARGS)$$unique" \
630 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
631 $$unique
632
633GTAGS:
634 here=`$(am__cd) $(top_builddir) && pwd` \
635 && $(am__cd) $(top_srcdir) \
636 && gtags -i $(GTAGS_ARGS) "$$here"
637
638distclean-tags:
639 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
640
641distdir: $(DISTFILES)
642 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
643 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
644 list='$(DISTFILES)'; \
645 dist_files=`for file in $$list; do echo $$file; done | \
646 sed -e "s|^$$srcdirstrip/||;t" \
647 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
648 case $$dist_files in \
649 */*) $(MKDIR_P) `echo "$$dist_files" | \
650 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
651 sort -u` ;; \
652 esac; \
653 for file in $$dist_files; do \
654 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
655 if test -d $$d/$$file; then \
656 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
657 if test -d "$(distdir)/$$file"; then \
658 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
659 fi; \
660 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
661 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
662 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
663 fi; \
664 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
665 else \
666 test -f "$(distdir)/$$file" \
667 || cp -p $$d/$$file "$(distdir)/$$file" \
668 || exit 1; \
669 fi; \
670 done
671check-am: all-am
672check: check-am
673all-am: Makefile $(LTLIBRARIES) $(HEADERS)
674installdirs:
675 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
676 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
677 done
678install: install-am
679install-exec: install-exec-am
680install-data: install-data-am
681uninstall: uninstall-am
682
683install-am: all-am
684 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
685
686installcheck: installcheck-am
687install-strip:
688 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
689 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
690 `test -z '$(STRIP)' || \
691 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
692mostlyclean-generic:
693
694clean-generic:
695
696distclean-generic:
697 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
698 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
699
700maintainer-clean-generic:
701 @echo "This command is intended for maintainers to use"
702 @echo "it deletes files that may require special tools to rebuild."
703 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
704clean: clean-am
705
706clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
707 clean-pkgLTLIBRARIES mostlyclean-am
708
709distclean: distclean-am
710 -rm -rf ./$(DEPDIR)
711 -rm -f Makefile
712distclean-am: clean-am distclean-compile distclean-generic \
713 distclean-tags
714
715dvi: dvi-am
716
717dvi-am:
718
719html: html-am
720
721html-am:
722
723info: info-am
724
725info-am:
726
727install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
728
729install-dvi: install-dvi-am
730
731install-dvi-am:
732
733install-exec-am:
734
735install-html: install-html-am
736
737install-html-am:
738
739install-info: install-info-am
740
741install-info-am:
742
743install-man:
744
745install-pdf: install-pdf-am
746
747install-pdf-am:
748
749install-ps: install-ps-am
750
751install-ps-am:
752
753installcheck-am:
754
755maintainer-clean: maintainer-clean-am
756 -rm -rf ./$(DEPDIR)
757 -rm -f Makefile
758maintainer-clean-am: distclean-am maintainer-clean-generic
759
760mostlyclean: mostlyclean-am
761
762mostlyclean-am: mostlyclean-compile mostlyclean-generic \
763 mostlyclean-libtool
764
765pdf: pdf-am
766
767pdf-am:
768
769ps: ps-am
770
771ps-am:
772
773uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
774
775.MAKE: install-am install-strip
776
777.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
778 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
779 ctags distclean distclean-compile distclean-generic \
780 distclean-libtool distclean-tags distdir dvi dvi-am html \
781 html-am info info-am install install-am install-data \
782 install-data-am install-dvi install-dvi-am install-exec \
783 install-exec-am install-html install-html-am \
784 install-includesHEADERS install-info install-info-am \
785 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
786 install-ps install-ps-am install-strip installcheck \
787 installcheck-am installdirs maintainer-clean \
788 maintainer-clean-generic mostlyclean mostlyclean-compile \
789 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
790 tags uninstall uninstall-am uninstall-includesHEADERS \
791 uninstall-pkgLTLIBRARIES
792
793
794# Tell versions [3.59,3.63) of GNU make to not export all variables.
795# Otherwise a system limit (for SysV at least) may be exceeded.
796.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/gl_sdl/evas_engine.c b/libraries/evas/src/modules/engines/gl_sdl/evas_engine.c
new file mode 100644
index 0000000..46588d9
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_sdl/evas_engine.c
@@ -0,0 +1,1081 @@
1#include "evas_common.h" /* Also includes international specific stuff */
2#include "evas_engine.h"
3
4static void* _sdl_output_setup (int w, int h, int fullscreen, int noframe);
5
6int _evas_engine_GL_SDL_log_dom = -1;
7/* function tables - filled in later (func and parent func) */
8static Evas_Func func, pfunc;
9
10static void *
11eng_info(Evas *e)
12{
13 Evas_Engine_Info_GL_SDL *info;
14
15 info = calloc(1, sizeof(Evas_Engine_Info_GL_SDL));
16 if (!info) return NULL;
17 info->magic.magic = rand();
18 return info;
19}
20
21static void
22eng_info_free(Evas *e __UNUSED__, void *info)
23{
24 Evas_Engine_Info_GL_SDL *in;
25 in = (Evas_Engine_Info_GL_SDL *)info;
26 free(in);
27}
28
29static int
30eng_setup(Evas *e, void *in)
31{
32 Render_Engine *re;
33 Evas_Engine_Info_GL_SDL *info;
34
35 info = (Evas_Engine_Info_GL_SDL *)in;
36
37 SDL_Init(SDL_INIT_NOPARACHUTE);
38
39 if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
40 {
41 ERR("SDL_Init failed with %s", SDL_GetError());
42 SDL_Quit();
43 return 0;
44 }
45
46 re = _sdl_output_setup(e->output.w, e->output.h,
47 info->flags.fullscreen,
48 info->flags.noframe);
49 re->info = info;
50 e->engine.data.output = re;
51 if (!e->engine.data.output)
52 return 0;
53
54 e->engine.func = &func;
55 e->engine.data.context = e->engine.func->context_new(e->engine.data.output);
56
57 return 1;
58}
59
60static void
61eng_output_free(void *data)
62{
63 Render_Engine *re;
64
65 re = (Render_Engine *)data;
66 evas_gl_common_context_free(re->gl_context);
67 free(re);
68
69 evas_common_font_shutdown();
70 evas_common_image_shutdown();
71
72 SDL_QuitSubSystem(SDL_INIT_VIDEO);
73}
74
75static void
76eng_output_resize(void *data, int w, int h)
77{
78 Render_Engine *re;
79 SDL_Surface *surface;
80
81 re = (Render_Engine *)data;
82 re->w = w;
83 re->h = h;
84
85 if(SDL_GetVideoSurface()->flags & SDL_RESIZABLE)
86 {
87 surface = SDL_SetVideoMode(w, h, 32, EVAS_SDL_GL_FLAG
88 | (re->info->flags.fullscreen ? SDL_FULLSCREEN : 0)
89 | (re->info->flags.noframe ? SDL_NOFRAME : 0));
90 if (!surface)
91 {
92 ERR("Unable to change the resolution to : %ix%i", w, h);
93 SDL_Quit();
94 exit(-1);
95 }
96 }
97
98 evas_gl_common_context_resize(re->gl_context, w, h, re->gl_context->rot);
99}
100
101static void
102eng_output_tile_size_set(void *data, int w __UNUSED__, int h __UNUSED__)
103{
104// Render_Engine *re;
105//
106// re = (Render_Engine *)data;
107}
108
109static void
110eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
111{
112 Render_Engine *re;
113
114 re = (Render_Engine *)data;
115 evas_gl_common_context_resize(re->gl_context, re->w, re->h, re->gl_context->rot);
116 /* smple bounding box */
117 if (!re->draw.redraw)
118 {
119#if 0
120 re->draw.x1 = x;
121 re->draw.y1 = y;
122 re->draw.x2 = x + w - 1;
123 re->draw.y2 = y + h - 1;
124#else
125 re->draw.x1 = 0;
126 re->draw.y1 = 0;
127 re->draw.x2 = re->w - 1;
128 re->draw.y2 = re->h - 1;
129#endif
130 }
131 else
132 {
133 if (x < re->draw.x1) re->draw.x1 = x;
134 if (y < re->draw.y1) re->draw.y1 = y;
135 if ((x + w - 1) > re->draw.x2) re->draw.x2 = x + w - 1;
136 if ((y + h - 1) > re->draw.y2) re->draw.y2 = y + h - 1;
137 }
138 re->draw.redraw = 1;
139}
140
141static void
142eng_output_redraws_rect_del(void *data, int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
143{
144// Render_Engine *re;
145//
146// re = (Render_Engine *)data;
147}
148
149static void
150eng_output_redraws_clear(void *data)
151{
152 Render_Engine *re;
153
154 re = (Render_Engine *)data;
155 re->draw.redraw = 0;
156// INF("GL: finish update cycle!");
157}
158
159/* at least the nvidia drivers are so abysmal that copying from the backbuffer
160 * to the front using glCopyPixels() that you literally can WATCH it draw the
161 * pixels slowly across the screen with a window update taking multiple
162 * seconds - so workaround by doing a full buffer render as frankly GL isn't
163 * up to doing anything that isn't done by quake (etc.)
164 */
165#define SLOW_GL_COPY_RECT 1
166/* vsync games - not for now though */
167//#define VSYNC_TO_SCREEN 1
168
169static void *
170eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
171{
172 Render_Engine *re;
173
174 re = (Render_Engine *)data;
175 evas_gl_common_context_flush(re->gl_context);
176 evas_gl_common_context_newframe(re->gl_context);
177 /* get the upate rect surface - return engine data as dummy */
178 if (!re->draw.redraw)
179 {
180// printf("GL: NO updates!\n");
181 return NULL;
182 }
183// printf("GL: update....!\n");
184#ifdef SLOW_GL_COPY_RECT
185 /* if any update - just return the whole canvas - works with swap
186 * buffers then */
187 if (x) *x = 0;
188 if (y) *y = 0;
189 if (w) *w = re->w;
190 if (h) *h = re->h;
191 if (cx) *cx = 0;
192 if (cy) *cy = 0;
193 if (cw) *cw = re->w;
194 if (ch) *ch = re->h;
195#else
196 /* 1 update - INCREDIBLY SLOW if combined with swap_rect in flush. a gl
197 * problem where there just is no hardware path for somethnig that
198 * obviously SHOULD be there */
199 /* only 1 update to minimise gl context games and rendering multiple update
200 * regions as evas does with other engines
201 */
202 if (x) *x = re->draw.x1;
203 if (y) *y = re->draw.y1;
204 if (w) *w = re->draw.x2 - re->draw.x1 + 1;
205 if (h) *h = re->draw.y2 - re->draw.y1 + 1;
206 if (cx) *cx = re->draw.x1;
207 if (cy) *cy = re->draw.y1;
208 if (cw) *cw = re->draw.x2 - re->draw.x1 + 1;
209 if (ch) *ch = re->draw.y2 - re->draw.y1 + 1;
210#endif
211// clear buffer. only needed for dest alpha
212// glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
213// glClear(GL_COLOR_BUFFER_BIT);
214//x// printf("frame -> new\n");
215 return re->gl_context->def_surface;
216}
217
218static void
219eng_output_redraws_next_update_push(void *data, void *surface __UNUSED__, int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
220{
221 Render_Engine *re;
222
223 re = (Render_Engine *)data;
224 /* put back update surface.. in this case just unflag redraw */
225 re->draw.redraw = 0;
226 re->draw.drew = 1;
227 evas_gl_common_context_flush(re->gl_context);
228//x// printf("frame -> push\n");
229}
230
231static void
232eng_output_flush(void *data)
233{
234 Render_Engine *re;
235
236 re = (Render_Engine *)data;
237 if (!re->draw.drew) return;
238//x// printf("frame -> flush\n");
239 re->draw.drew = 0;
240
241#if 0
242#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
243// glFlush();
244 eglSwapBuffers(re->egl_disp, re->egl_surface[0]);
245#else
246 glXSwapBuffers(re->win->disp, re->win);
247#endif
248#else
249 SDL_GL_SwapBuffers();
250#endif
251}
252
253static void
254eng_output_idle_flush(void *data)
255{
256 Render_Engine *re;
257
258 re = (Render_Engine *)data;
259}
260
261static void
262eng_output_dump(void *data)
263{
264 Render_Engine *re;
265
266 re = (Render_Engine *)data;
267 evas_common_image_image_all_unload();
268 evas_common_font_font_all_unload();
269 evas_gl_common_image_all_unload(re->gl_context);
270}
271
272static void
273eng_context_cutout_add(void *data, void *context, int x, int y, int w, int h)
274{
275// Render_Engine *re;
276//
277// re = (Render_Engine *)data;
278// re->gl_context->dc = context;
279 evas_common_draw_context_add_cutout(context, x, y, w, h);
280}
281
282static void
283eng_context_cutout_clear(void *data, void *context)
284{
285// Render_Engine *re;
286//
287// re = (Render_Engine *)data;
288// re->gl_context->dc = context;
289 evas_common_draw_context_clear_cutouts(context);
290}
291
292static void
293eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h)
294{
295 Render_Engine *re;
296
297 re = (Render_Engine *)data;
298 evas_gl_common_context_target_surface_set(re->gl_context, surface);
299 re->gl_context->dc = context;
300 evas_gl_common_rect_draw(re->gl_context, x, y, w, h);
301}
302
303static void
304eng_line_draw(void *data, void *context, void *surface, int x1, int y1, int x2, int y2)
305{
306 Render_Engine *re;
307
308 re = (Render_Engine *)data;
309 evas_gl_common_context_target_surface_set(re->gl_context, surface);
310 re->gl_context->dc = context;
311 evas_gl_common_line_draw(re->gl_context, x1, y1, x2, y2);
312}
313
314static void *
315eng_polygon_point_add(void *data, void *context __UNUSED__, void *polygon, int x, int y)
316{
317 Render_Engine *re;
318
319 re = (Render_Engine *)data;
320 return evas_gl_common_poly_point_add(polygon, x, y);
321}
322
323static void *
324eng_polygon_points_clear(void *data, void *context __UNUSED__, void *polygon)
325{
326 Render_Engine *re;
327
328 re = (Render_Engine *)data;
329 return evas_gl_common_poly_points_clear(polygon);
330}
331
332static void
333eng_polygon_draw(void *data, void *context, void *surface, void *polygon, int x, int y)
334{
335 Render_Engine *re;
336
337 re = (Render_Engine *)data;
338 evas_gl_common_context_target_surface_set(re->gl_context, surface);
339 re->gl_context->dc = context;
340 evas_gl_common_poly_draw(re->gl_context, polygon, x, y);
341}
342
343static int
344eng_image_alpha_get(void *data, void *image)
345{
346// Render_Engine *re;
347 Evas_GL_Image *im;
348
349// re = (Render_Engine *)data;
350 if (!image) return 1;
351 im = image;
352 return im->alpha;
353}
354
355static int
356eng_image_colorspace_get(void *data, void *image)
357{
358// Render_Engine *re;
359 Evas_GL_Image *im;
360
361// re = (Render_Engine *)data;
362 if (!image) return EVAS_COLORSPACE_ARGB8888;
363 im = image;
364 return im->cs.space;
365}
366
367static void *
368eng_image_alpha_set(void *data, void *image, int has_alpha)
369{
370 Render_Engine *re;
371 Evas_GL_Image *im;
372
373 re = (Render_Engine *)data;
374 if (!image) return NULL;
375 im = image;
376 if (im->native.data)
377 {
378 im->alpha = has_alpha;
379 return image;
380 }
381 /* FIXME: can move to gl_common */
382 if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return im;
383 if ((has_alpha) && (im->im->cache_entry.flags.alpha)) return image;
384 else if ((!has_alpha) && (!im->im->cache_entry.flags.alpha)) return image;
385 if (im->references > 1)
386 {
387 Evas_GL_Image *im_new;
388
389 im_new = evas_gl_common_image_new_from_copied_data(im->gc, im->im->cache_entry.w, im->im->cache_entry.h, im->im->image.data,
390 eng_image_alpha_get(data, image),
391 eng_image_colorspace_get(data, image));
392 if (!im_new) return im;
393 evas_gl_common_image_free(im);
394 im = im_new;
395 }
396 else
397 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
398 im->im->cache_entry.flags.alpha = has_alpha ? 1 : 0;
399 return image;
400}
401
402static void *
403eng_image_border_set(void *data, void *image, int l __UNUSED__, int r __UNUSED__, int t __UNUSED__, int b __UNUSED__)
404{
405// Render_Engine *re;
406//
407// re = (Render_Engine *)data;
408 return image;
409}
410
411static void
412eng_image_border_get(void *data, void *image __UNUSED__, int *l __UNUSED__, int *r __UNUSED__, int *t __UNUSED__, int *b __UNUSED__)
413{
414// Render_Engine *re;
415//
416// re = (Render_Engine *)data;
417}
418
419static char *
420eng_image_comment_get(void *data, void *image, char *key __UNUSED__)
421{
422// Render_Engine *re;
423 Evas_GL_Image *im;
424
425// re = (Render_Engine *)data;
426 if (!image) return NULL;
427 im = image;
428 if (!im->im) return NULL;
429 return im->im->info.comment;
430}
431
432static char *
433eng_image_format_get(void *data, void *image)
434{
435// Render_Engine *re;
436 Evas_GL_Image *im;
437
438// re = (Render_Engine *)data;
439 im = image;
440 return NULL;
441}
442
443static void
444eng_image_colorspace_set(void *data, void *image, int cspace)
445{
446 Render_Engine *re;
447 Evas_GL_Image *im;
448
449 re = (Render_Engine *)data;
450 if (!image) return;
451 im = image;
452 if (im->native.data) return;
453 /* FIXME: can move to gl_common */
454 if (im->cs.space == cspace) return;
455 evas_cache_image_colorspace(&im->im->cache_entry, cspace);
456 switch (cspace)
457 {
458 case EVAS_COLORSPACE_ARGB8888:
459 if (im->cs.data)
460 {
461 if (!im->cs.no_free) free(im->cs.data);
462 im->cs.data = NULL;
463 im->cs.no_free = 0;
464 }
465 break;
466 case EVAS_COLORSPACE_YCBCR422P601_PL:
467 case EVAS_COLORSPACE_YCBCR422P709_PL:
468 case EVAS_COLORSPACE_YCBCR422601_PL:
469 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
470 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
471 if (im->tex) evas_gl_common_texture_free(im->tex);
472 im->tex = NULL;
473 if (im->cs.data)
474 {
475 if (!im->cs.no_free) free(im->cs.data);
476 }
477 im->cs.data = calloc(1, im->im->cache_entry.h * sizeof(unsigned char *) * 2);
478 im->cs.no_free = 0;
479 break;
480 default:
481 abort();
482 break;
483 }
484 im->cs.space = cspace;
485}
486
487/////////////////////////////////////////////////////////////////////////
488//
489//
490typedef struct _Native Native;
491
492struct _Native
493{
494 Evas_Native_Surface ns;
495
496#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
497 EGLSurface egl_surface;
498#endif
499};
500
501static void
502_native_bind_cb(void *data, void *image)
503{
504}
505
506static void
507_native_unbind_cb(void *data, void *image)
508{
509}
510
511static void
512_native_free_cb(void *data, void *image)
513{
514}
515
516static void *
517eng_image_native_set(void *data, void *image, void *native)
518{
519 return NULL;
520}
521
522static void *
523eng_image_native_get(void *data, void *image)
524{
525 return NULL;
526}
527
528//
529//
530/////////////////////////////////////////////////////////////////////////
531
532static void *
533eng_image_load(void *data, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
534{
535 Render_Engine *re;
536
537 re = (Render_Engine *)data;
538 *error = EVAS_LOAD_ERROR_NONE;
539 return evas_gl_common_image_load(re->gl_context, file, key, lo, error);
540}
541
542static void *
543eng_image_new_from_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace)
544{
545 Render_Engine *re;
546
547 re = (Render_Engine *)data;
548 return evas_gl_common_image_new_from_data(re->gl_context, w, h, image_data, alpha, cspace);
549}
550
551static void *
552eng_image_new_from_copied_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace)
553{
554 Render_Engine *re;
555
556 re = (Render_Engine *)data;
557 return evas_gl_common_image_new_from_copied_data(re->gl_context, w, h, image_data, alpha, cspace);
558}
559
560static void
561eng_image_free(void *data, void *image)
562{
563 Render_Engine *re;
564
565 re = (Render_Engine *)data;
566 if (!image) return;
567 evas_gl_common_image_free(image);
568}
569
570static void
571eng_image_size_get(void *data, void *image, int *w, int *h)
572{
573// Render_Engine *re;
574//
575// re = (Render_Engine *)data;
576 if (!image)
577 {
578 *w = 0;
579 *h = 0;
580 return;
581 }
582 if (w) *w = ((Evas_GL_Image *)image)->w;
583 if (h) *h = ((Evas_GL_Image *)image)->h;
584}
585
586static void *
587eng_image_size_set(void *data, void *image, int w, int h)
588{
589 Render_Engine *re;
590 Evas_GL_Image *im = image;
591 Evas_GL_Image *im_old;
592
593 re = (Render_Engine *)data;
594 if (!im) return NULL;
595 if (im->native.data)
596 {
597 im->w = w;
598 im->h = h;
599 return image;
600 }
601 im_old = image;
602
603 switch (eng_image_colorspace_get(data, image))
604 {
605 case EVAS_COLORSPACE_YCBCR422P601_PL:
606 case EVAS_COLORSPACE_YCBCR422P709_PL:
607 case EVAS_COLORSPACE_YCBCR422601_PL:
608 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
609 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
610 w &= ~0x1;
611 break;
612 }
613
614 if ((im_old) && (im_old->im->cache_entry.w == w) && (im_old->im->cache_entry.h == h))
615 return image;
616 if (im_old)
617 {
618 im = evas_gl_common_image_new(re->gl_context, w, h,
619 eng_image_alpha_get(data, image),
620 eng_image_colorspace_get(data, image));
621/*
622 evas_common_load_image_data_from_file(im_old->im);
623 if (im_old->im->image->data)
624 {
625 evas_common_blit_rectangle(im_old->im, im->im, 0, 0, w, h, 0, 0);
626 evas_common_cpu_end_opt();
627 }
628 */
629 evas_gl_common_image_free(im_old);
630 }
631 else
632 im = evas_gl_common_image_new(re->gl_context, w, h, 1, EVAS_COLORSPACE_ARGB8888);
633 return im;
634}
635
636static void *
637eng_image_dirty_region(void *data, void *image, int x, int y, int w, int h)
638{
639 Render_Engine *re;
640 Evas_GL_Image *im = image;
641
642 re = (Render_Engine *)data;
643 if (!image) return NULL;
644 if (im->native.data) return image;
645 evas_gl_common_image_dirty(image, x, y, w, h);
646 return image;
647}
648
649static void *
650eng_image_data_get(void *data, void *image, int to_write, DATA32 **image_data, int *err)
651{
652 Render_Engine *re;
653 Evas_GL_Image *im;
654 int error;
655
656 re = (Render_Engine *)data;
657 if (!image)
658 {
659 *image_data = NULL;
660 if (err) *err = EVAS_LOAD_ERROR_GENERIC;
661 return NULL;
662 }
663 im = image;
664 if (im->native.data)
665 {
666 *image_data = NULL;
667 if (err) *err = EVAS_LOAD_ERROR_NONE;
668 return im;
669 }
670 error = evas_cache_image_load_data(&im->im->cache_entry);
671 switch (im->cs.space)
672 {
673 case EVAS_COLORSPACE_ARGB8888:
674 if (to_write)
675 {
676 if (im->references > 1)
677 {
678 Evas_GL_Image *im_new;
679
680 im_new = evas_gl_common_image_new_from_copied_data(im->gc, im->im->cache_entry.w, im->im->cache_entry.h, im->im->image.data,
681 eng_image_alpha_get(data, image),
682 eng_image_colorspace_get(data, image));
683 if (!im_new)
684 {
685 *image_data = NULL;
686 if (err) *err = error;
687 return im;
688 }
689 evas_gl_common_image_free(im);
690 im = im_new;
691 }
692 else
693 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
694 }
695 *image_data = im->im->image.data;
696 break;
697 case EVAS_COLORSPACE_YCBCR422P601_PL:
698 case EVAS_COLORSPACE_YCBCR422P709_PL:
699 case EVAS_COLORSPACE_YCBCR422601_PL:
700 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
701 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
702 *image_data = im->cs.data;
703 break;
704 default:
705 abort();
706 break;
707 }
708 if (err) *err = error;
709 return im;
710}
711
712static void *
713eng_image_data_put(void *data, void *image, DATA32 *image_data)
714{
715 Render_Engine *re;
716 Evas_GL_Image *im, *im2;
717
718 re = (Render_Engine *)data;
719 if (!image) return NULL;
720 im = image;
721 if (im->native.data) return image;
722 switch (im->cs.space)
723 {
724 case EVAS_COLORSPACE_ARGB8888:
725 if (image_data != im->im->image.data)
726 {
727 int w, h;
728
729 w = im->im->cache_entry.w;
730 h = im->im->cache_entry.h;
731 im2 = eng_image_new_from_data(data, w, h, image_data,
732 eng_image_alpha_get(data, image),
733 eng_image_colorspace_get(data, image));
734 if (!im2) return im;
735 evas_gl_common_image_free(im);
736 im = im2;
737 }
738 break;
739 case EVAS_COLORSPACE_YCBCR422P601_PL:
740 case EVAS_COLORSPACE_YCBCR422P709_PL:
741 case EVAS_COLORSPACE_YCBCR422601_PL:
742 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
743 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
744 if (image_data != im->cs.data)
745 {
746 if (im->cs.data)
747 {
748 if (!im->cs.no_free) free(im->cs.data);
749 }
750 im->cs.data = image_data;
751 }
752 break;
753 default:
754 abort();
755 break;
756 }
757 /* hmmm - but if we wrote... why bother? */
758 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
759 return im;
760}
761
762static void
763eng_image_data_preload_request(void *data __UNUSED__, void *image, const void *target)
764{
765 Evas_GL_Image *gim = image;
766 RGBA_Image *im;
767
768 if (!gim) return;
769 if (gim->native.data) return;
770 im = (RGBA_Image *)gim->im;
771 if (!im) return;
772 evas_cache_image_preload_data(&im->cache_entry, target);
773}
774
775static void
776eng_image_data_preload_cancel(void *data __UNUSED__, void *image, const void *target)
777{
778 Evas_GL_Image *gim = image;
779 RGBA_Image *im;
780
781 if (!gim) return;
782 if (gim->native.data) return;
783 im = (RGBA_Image *)gim->im;
784 if (!im) return;
785 evas_cache_image_preload_cancel(&im->cache_entry, target);
786}
787
788static void
789eng_image_draw(void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth)
790{
791 Render_Engine *re;
792
793 re = (Render_Engine *)data;
794 if (!image) return;
795 evas_gl_common_context_target_surface_set(re->gl_context, surface);
796 re->gl_context->dc = context;
797 evas_gl_common_image_draw(re->gl_context, image,
798 src_x, src_y, src_w, src_h,
799 dst_x, dst_y, dst_w, dst_h,
800 smooth);
801}
802
803static void
804eng_image_scale_hint_set(void *data __UNUSED__, void *image, int hint)
805{
806}
807
808static void
809eng_image_map_draw(void *data __UNUSED__, void *context, void *surface, void *image, int npoints, RGBA_Map_Point *p, int smooth, int level)
810{
811 Render_Engine *re;
812
813 re = (Render_Engine *)data;
814 evas_gl_common_context_target_surface_set(re->gl_context, surface);
815 re->gl_context->dc = context;
816 evas_gl_common_image_map_draw(re->gl_context, image, npoints, p, smooth, level);
817}
818
819static void *
820eng_image_map_surface_new(void *data __UNUSED__, int w, int h, int alpha)
821{
822 Render_Engine *re;
823
824 re = (Render_Engine *)data;
825 return evas_gl_common_image_surface_new(re->gl_context, w, h, alpha);
826}
827
828static void
829eng_image_map_surface_free(void *data __UNUSED__, void *surface)
830{
831 evas_gl_common_image_free(surface);
832}
833
834static int
835eng_image_scale_hint_get(void *data __UNUSED__, void *image)
836{
837 return EVAS_IMAGE_SCALE_HINT_NONE;
838}
839
840static void
841eng_font_draw(void *data, void *context, void *surface, Evas_Font_Set *font, int x, int y, int w __UNUSED__, int h __UNUSED__, int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *intl_props)
842{
843 Render_Engine *re;
844
845 re = (Render_Engine *)data;
846 evas_gl_common_context_target_surface_set(re->gl_context, surface);
847 re->gl_context->dc = context;
848 {
849 // FIXME: put im into context so we can free it
850 static RGBA_Image *im = NULL;
851
852 if (!im)
853 im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
854 im->cache_entry.w = re->w;
855 im->cache_entry.h = re->h;
856 evas_common_draw_context_font_ext_set(context,
857 re->gl_context,
858 evas_gl_font_texture_new,
859 evas_gl_font_texture_free,
860 evas_gl_font_texture_draw);
861 evas_common_font_draw(im, context, (RGBA_Font *) font, x, y,
862 intl_props);
863 evas_common_draw_context_font_ext_set(context,
864 NULL,
865 NULL,
866 NULL,
867 NULL);
868 }
869}
870
871static Eina_Bool
872eng_canvas_alpha_get(void *data __UNUSED__, void *info __UNUSED__)
873{
874 // FIXME: support ARGB gl targets!!!
875 return EINA_FALSE;
876}
877
878static int
879eng_image_load_error_get(void *data __UNUSED__, void *image)
880{
881 Evas_GL_Image *im;
882
883 if (!image) return EVAS_LOAD_ERROR_NONE;
884 im = image;
885 return im->im->cache_entry.load_error;
886}
887
888
889static int
890module_open(Evas_Module *em)
891{
892 if (!em) return 0;
893 if (!evas_gl_common_module_open()) return 0;
894 /* get whatever engine module we inherit from */
895 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
896 if (_evas_engine_GL_SDL_log_dom < 0)
897 _evas_engine_GL_SDL_log_dom = eina_log_domain_register
898 ("evas-gl_sdl", EVAS_DEFAULT_LOG_COLOR);
899 if (_evas_engine_GL_SDL_log_dom < 0)
900 {
901 EINA_LOG_ERR("Can not create a module log domain.");
902 return 0;
903 }
904 /* store it for later use */
905 func = pfunc;
906 /* now to override methods */
907 #define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
908 ORD(info);
909 ORD(info_free);
910 ORD(setup);
911 ORD(canvas_alpha_get);
912 ORD(output_free);
913 ORD(output_resize);
914 ORD(output_tile_size_set);
915 ORD(output_redraws_rect_add);
916 ORD(output_redraws_rect_del);
917 ORD(output_redraws_clear);
918 ORD(output_redraws_next_update_get);
919 ORD(output_redraws_next_update_push);
920 ORD(context_cutout_add);
921 ORD(context_cutout_clear);
922 ORD(output_flush);
923 ORD(output_idle_flush);
924 ORD(output_dump);
925 ORD(rectangle_draw);
926 ORD(line_draw);
927 ORD(polygon_point_add);
928 ORD(polygon_points_clear);
929 ORD(polygon_draw);
930
931 ORD(image_load);
932 ORD(image_new_from_data);
933 ORD(image_new_from_copied_data);
934 ORD(image_free);
935 ORD(image_size_get);
936 ORD(image_size_set);
937 ORD(image_dirty_region);
938 ORD(image_data_get);
939 ORD(image_data_put);
940 ORD(image_data_preload_request);
941 ORD(image_data_preload_cancel);
942 ORD(image_alpha_set);
943 ORD(image_alpha_get);
944 ORD(image_border_set);
945 ORD(image_border_get);
946 ORD(image_draw);
947 ORD(image_comment_get);
948 ORD(image_format_get);
949 ORD(image_colorspace_set);
950 ORD(image_colorspace_get);
951 ORD(image_native_set);
952 ORD(image_native_get);
953#if 0 // filtering disabled
954// ORD(image_draw_filtered);
955// ORD(image_filtered_get);
956// ORD(image_filtered_save);
957// ORD(image_filtered_free);
958#endif
959 ORD(font_draw);
960
961 ORD(image_scale_hint_set);
962 ORD(image_scale_hint_get);
963
964 ORD(image_map_draw);
965 ORD(image_map_surface_new);
966 ORD(image_map_surface_free);
967
968// ORD(image_content_hint_set);
969// ORD(image_content_hint_get);
970
971// ORD(image_cache_flush);
972// ORD(image_cache_set);
973// ORD(image_cache_get);
974
975// ORD(gl_surface_create);
976// ORD(gl_surface_destroy);
977// ORD(gl_context_create);
978// ORD(gl_context_destroy);
979// ORD(gl_make_current);
980// ORD(gl_proc_address_get);
981// ORD(gl_native_surface_get);
982
983// ORD(gl_api_get);
984
985 ORD(image_load_error_get);
986
987 /* now advertise out own api */
988 em->functions = (void *)(&func);
989 return 1;
990}
991
992static void
993module_close(Evas_Module *em)
994{
995 eina_log_domain_unregister(_evas_engine_GL_SDL_log_dom);
996 evas_gl_common_module_close();
997}
998
999static Evas_Module_Api evas_modapi =
1000{
1001 EVAS_MODULE_API_VERSION,
1002 "gl_sdl",
1003 "none",
1004 {
1005 module_open,
1006 module_close
1007 }
1008};
1009
1010EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, gl_sdl);
1011
1012#ifndef EVAS_STATIC_BUILD_GL_SDL
1013EVAS_EINA_MODULE_DEFINE(engine, gl_sdl);
1014#endif
1015
1016static void*
1017_sdl_output_setup (int w, int h, int fullscreen, int noframe)
1018{
1019 Render_Engine *re = calloc(1, sizeof(Render_Engine));
1020 SDL_Surface *surface;
1021 int context_attrs[3];
1022 int config_attrs[20];
1023 int major_version, minor_version;
1024 int num_config;
1025
1026 /* if we haven't initialized - init (automatic abort if already done) */
1027 evas_common_cpu_init();
1028 evas_common_blend_init();
1029 evas_common_image_init();
1030 evas_common_convert_init();
1031 evas_common_scale_init();
1032 evas_common_rectangle_init();
1033 evas_common_polygon_init();
1034 evas_common_line_init();
1035 evas_common_font_init();
1036 evas_common_draw_init();
1037 evas_common_tilebuf_init();
1038
1039 if (w <= 0) w = 640;
1040 if (h <= 0) h = 480;
1041
1042 /* GL Initialization */
1043#ifdef HAVE_SDL_GL_CONTEXT_VERSION
1044 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
1045 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
1046#endif
1047 SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
1048 SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
1049 SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
1050 SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
1051 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
1052 SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 0);
1053
1054 surface = SDL_SetVideoMode(w, h, 32, EVAS_SDL_GL_FLAG
1055 | (fullscreen ? SDL_FULLSCREEN : 0)
1056 | (noframe ? SDL_NOFRAME : 0));
1057
1058 if (!surface)
1059 {
1060 CRIT("SDL_SetVideoMode [ %i x %i x 32 ] failed. %s", w, h, SDL_GetError());
1061 SDL_Quit();
1062 exit(-1);
1063 }
1064
1065 INF("Screen Depth: %d, Vendor: '%s', Renderer: '%s', Version: '%s'", SDL_GetVideoSurface()->format->BitsPerPixel, glGetString(GL_VENDOR), glGetString(GL_RENDERER), glGetString(GL_VERSION));
1066
1067 re->gl_context = evas_gl_common_context_new();
1068 if (!re->gl_context)
1069 {
1070 free(re);
1071 return NULL;
1072 }
1073 evas_gl_common_context_use(re->gl_context);
1074 evas_gl_common_context_resize(re->gl_context, w, h, re->gl_context->rot);
1075
1076 /* End GL Initialization */
1077 re->w = w;
1078 re->h = h;
1079 return re;
1080}
1081
diff --git a/libraries/evas/src/modules/engines/gl_sdl/evas_engine.h b/libraries/evas/src/modules/engines/gl_sdl/evas_engine.h
new file mode 100644
index 0000000..7d46720
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_sdl/evas_engine.h
@@ -0,0 +1,73 @@
1#ifndef EVAS_ENGINE_H
2#define EVAS_ENGINE_H
3
4#define _EVAS_ENGINE_SDL_H
5
6#include "config.h"
7#include <SDL/SDL.h>
8#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
9# include <EGL/egl.h>
10# include <SDL/SDL_opengles.h>
11# ifdef HAVE_SDL_FLAG_OPENGLES
12# define EVAS_SDL_GL_FLAG SDL_OPENGLES
13# else
14# define EVAS_SDL_GL_FLAG SDL_OPENGL /* This probably won't work? */
15# endif
16#else
17# include <SDL/SDL_opengl.h>
18# define EVAS_SDL_GL_FLAG SDL_OPENGL
19#endif
20#include "evas_common.h"
21#include "evas_private.h"
22#include "evas_gl_common.h"
23#include "Evas.h"
24#include "Evas_Engine_GL_SDL.h"
25
26extern int _evas_engine_GL_SDL_log_dom ;
27#ifdef ERR
28# undef ERR
29#endif
30#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_GL_SDL_log_dom, __VA_ARGS__)
31
32#ifdef DBG
33# undef DBG
34#endif
35#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_GL_SDL_log_dom, __VA_ARGS__)
36
37#ifdef INF
38# undef INF
39#endif
40#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_GL_SDL_log_dom, __VA_ARGS__)
41
42#ifdef WRN
43# undef WRN
44#endif
45#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_GL_SDL_log_dom, __VA_ARGS__)
46
47#ifdef CRIT
48# undef CRIT
49#endif
50#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_GL_SDL_log_dom, __VA_ARGS__)
51
52typedef struct _Render_Engine Render_Engine;
53struct _Render_Engine
54{
55 Evas_Engine_Info_GL_SDL *info;
56 int w, h;
57
58 Evas_Engine_GL_Context *gl_context;
59 struct {
60 int redraw : 1;
61 int drew : 1;
62 int x1, y1, x2, y2;
63 } draw;
64#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
65 EGLContext egl_context[1];
66 EGLSurface egl_surface[1];
67 EGLConfig egl_config;
68 EGLDisplay egl_disp;
69#endif
70
71};
72
73#endif
diff --git a/libraries/evas/src/modules/engines/gl_x11/Evas_Engine_GL_X11.h b/libraries/evas/src/modules/engines/gl_x11/Evas_Engine_GL_X11.h
new file mode 100644
index 0000000..fb2c81c
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_x11/Evas_Engine_GL_X11.h
@@ -0,0 +1,46 @@
1#ifndef _EVAS_ENGINE_GL_X11_H
2#define _EVAS_ENGINE_GL_X11_H
3
4#include <X11/Xlib.h>
5
6typedef struct _Evas_Engine_Info_GL_X11 Evas_Engine_Info_GL_X11;
7
8struct _Evas_Engine_Info_GL_X11
9{
10 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
11 /* at you and make nasty noises */
12 Evas_Engine_Info magic;
13
14 /* engine specific data & parameters it needs to set up */
15 struct {
16 Display *display;
17 Drawable drawable;
18 Visual *visual;
19 Colormap colormap;
20 int depth;
21 int screen;
22 int rotation;
23 unsigned int destination_alpha : 1;
24 } info;
25 /* engine specific function calls to query stuff about the destination */
26 /* engine (what visual & colormap & depth to use, performance info etc. */
27 struct {
28 Visual * (*best_visual_get) (Evas_Engine_Info_GL_X11 *einfo);
29 Colormap (*best_colormap_get) (Evas_Engine_Info_GL_X11 *einfo);
30 int (*best_depth_get) (Evas_Engine_Info_GL_X11 *einfo);
31 } func;
32
33 struct {
34 void (*pre_swap) (void *data, Evas *e);
35 void (*post_swap) (void *data, Evas *e);
36
37 void *data; // data for callback calls
38 } callback;
39
40 /* non-blocking or blocking mode */
41 Evas_Engine_Render_Mode render_mode;
42
43 unsigned char vsync : 1; // does nothing right now
44 unsigned char indirect : 1; // use indirect rendering
45};
46#endif
diff --git a/libraries/evas/src/modules/engines/gl_x11/Makefile.am b/libraries/evas/src/modules/engines/gl_x11/Makefile.am
new file mode 100644
index 0000000..8b0e622
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_x11/Makefile.am
@@ -0,0 +1,47 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines/gl_common \
9@FREETYPE_CFLAGS@ \
10@PIXMAN_CFLAGS@ \
11@EINA_CFLAGS@ \
12@GL_EET_CFLAGS@ \
13@evas_engine_gl_xlib_cflags@
14
15if BUILD_ENGINE_GL_X11
16
17GL_X11_SOURCES = \
18evas_engine.c \
19evas_x_main.c
20
21GL_X11_LIBADD = @evas_engine_gl_xlib_libs@ $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
22
23
24includes_HEADERS = Evas_Engine_GL_X11.h
25includesdir = $(includedir)/evas-@VMAJ@
26
27if !EVAS_STATIC_BUILD_GL_X11
28
29pkgdir = $(libdir)/evas/modules/engines/gl_x11/$(MODULE_ARCH)
30pkg_LTLIBRARIES = module.la
31
32module_la_SOURCES = $(GL_X11_SOURCES)
33module_la_LIBADD = @EINA_LIBS@ @GL_EET_LIBS@ $(GL_X11_LIBADD) $(top_builddir)/src/lib/libevas.la @dlopen_libs@
34module_la_LDFLAGS = -module -avoid-version
35module_la_LIBTOOLFLAGS = --tag=disable-static
36
37else
38
39noinst_LTLIBRARIES = libevas_engine_gl_x11.la
40
41libevas_engine_gl_x11_la_SOURCES = $(GL_X11_SOURCES)
42libevas_engine_gl_x11_la_LIBADD = $(GL_X11_LIBADD)
43
44endif
45endif
46
47EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/gl_x11/Makefile.in b/libraries/evas/src/modules/engines/gl_x11/Makefile.in
new file mode 100644
index 0000000..f589e61
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_x11/Makefile.in
@@ -0,0 +1,810 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/gl_x11
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84@BUILD_ENGINE_GL_X11_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
85@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_TRUE@libevas_engine_gl_x11_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_gl_x11_la_SOURCES_DIST = evas_engine.c \
87 evas_x_main.c
88@BUILD_ENGINE_GL_X11_TRUE@am__objects_1 = evas_engine.lo \
89@BUILD_ENGINE_GL_X11_TRUE@ evas_x_main.lo
90@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_TRUE@am_libevas_engine_gl_x11_la_OBJECTS = $(am__objects_1)
91libevas_engine_gl_x11_la_OBJECTS = \
92 $(am_libevas_engine_gl_x11_la_OBJECTS)
93AM_V_lt = $(am__v_lt_$(V))
94am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
95am__v_lt_0 = --silent
96@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_TRUE@am_libevas_engine_gl_x11_la_rpath =
97@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_FALSE@module_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
98@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_FALSE@ $(top_builddir)/src/lib/libevas.la
99am__module_la_SOURCES_DIST = evas_engine.c evas_x_main.c
100@BUILD_ENGINE_GL_X11_TRUE@am__objects_2 = module_la-evas_engine.lo \
101@BUILD_ENGINE_GL_X11_TRUE@ module_la-evas_x_main.lo
102@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_FALSE@am_module_la_OBJECTS = $(am__objects_2)
103module_la_OBJECTS = $(am_module_la_OBJECTS)
104module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
105 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
106 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
107@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_FALSE@am_module_la_rpath = -rpath \
108@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_FALSE@ $(pkgdir)
109DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
110depcomp = $(SHELL) $(top_srcdir)/depcomp
111am__depfiles_maybe = depfiles
112am__mv = mv -f
113COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
114 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
115LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
116 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
117 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
118 $(AM_CFLAGS) $(CFLAGS)
119AM_V_CC = $(am__v_CC_$(V))
120am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
121am__v_CC_0 = @echo " CC " $@;
122AM_V_at = $(am__v_at_$(V))
123am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
124am__v_at_0 = @
125CCLD = $(CC)
126LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
127 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
128 $(AM_LDFLAGS) $(LDFLAGS) -o $@
129AM_V_CCLD = $(am__v_CCLD_$(V))
130am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
131am__v_CCLD_0 = @echo " CCLD " $@;
132AM_V_GEN = $(am__v_GEN_$(V))
133am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
134am__v_GEN_0 = @echo " GEN " $@;
135SOURCES = $(libevas_engine_gl_x11_la_SOURCES) $(module_la_SOURCES)
136DIST_SOURCES = $(am__libevas_engine_gl_x11_la_SOURCES_DIST) \
137 $(am__module_la_SOURCES_DIST)
138am__includes_HEADERS_DIST = Evas_Engine_GL_X11.h
139HEADERS = $(includes_HEADERS)
140ETAGS = etags
141CTAGS = ctags
142DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
143ACLOCAL = @ACLOCAL@
144ALLOCA = @ALLOCA@
145AMTAR = @AMTAR@
146AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
147AR = @AR@
148AS = @AS@
149AUTOCONF = @AUTOCONF@
150AUTOHEADER = @AUTOHEADER@
151AUTOMAKE = @AUTOMAKE@
152AWK = @AWK@
153CC = @CC@
154CCDEPMODE = @CCDEPMODE@
155CFLAGS = @CFLAGS@
156CHECK_CFLAGS = @CHECK_CFLAGS@
157CHECK_LIBS = @CHECK_LIBS@
158CPP = @CPP@
159CPPFLAGS = @CPPFLAGS@
160CXX = @CXX@
161CXXCPP = @CXXCPP@
162CXXDEPMODE = @CXXDEPMODE@
163CXXFLAGS = @CXXFLAGS@
164CYGPATH_W = @CYGPATH_W@
165DEFS = @DEFS@
166DEPDIR = @DEPDIR@
167DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
168DIRECTFB_LIBS = @DIRECTFB_LIBS@
169DLLTOOL = @DLLTOOL@
170DSYMUTIL = @DSYMUTIL@
171DUMPBIN = @DUMPBIN@
172ECHO_C = @ECHO_C@
173ECHO_N = @ECHO_N@
174ECHO_T = @ECHO_T@
175ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
176ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
177EDB_CFLAGS = @EDB_CFLAGS@
178EDB_LIBS = @EDB_LIBS@
179EDJE_CFLAGS = @EDJE_CFLAGS@
180EDJE_LIBS = @EDJE_LIBS@
181EET_CFLAGS = @EET_CFLAGS@
182EET_LIBS = @EET_LIBS@
183EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
184EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
185EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
186EGREP = @EGREP@
187EINA_CFLAGS = @EINA_CFLAGS@
188EINA_LIBS = @EINA_LIBS@
189EVAS_CFLAGS = @EVAS_CFLAGS@
190EVAS_LIBS = @EVAS_LIBS@
191EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
192EVIL_CFLAGS = @EVIL_CFLAGS@
193EVIL_LIBS = @EVIL_LIBS@
194EXEEXT = @EXEEXT@
195FGREP = @FGREP@
196FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
197FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
198FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
199FREETYPE_LIBS = @FREETYPE_LIBS@
200FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
201FRIBIDI_LIBS = @FRIBIDI_LIBS@
202GL_EET_CFLAGS = @GL_EET_CFLAGS@
203GL_EET_LIBS = @GL_EET_LIBS@
204GREP = @GREP@
205HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
206HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
207INSTALL = @INSTALL@
208INSTALL_DATA = @INSTALL_DATA@
209INSTALL_PROGRAM = @INSTALL_PROGRAM@
210INSTALL_SCRIPT = @INSTALL_SCRIPT@
211INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
212LD = @LD@
213LDFLAGS = @LDFLAGS@
214LIBOBJS = @LIBOBJS@
215LIBS = @LIBS@
216LIBTOOL = @LIBTOOL@
217LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
218LINEBREAK_LIBS = @LINEBREAK_LIBS@
219LIPO = @LIPO@
220LN_S = @LN_S@
221LTLIBOBJS = @LTLIBOBJS@
222MAKEINFO = @MAKEINFO@
223MKDIR_P = @MKDIR_P@
224MODULE_ARCH = @MODULE_ARCH@
225NM = @NM@
226NMEDIT = @NMEDIT@
227OBJC = @OBJC@
228OBJCDEPMODE = @OBJCDEPMODE@
229OBJCFLAGS = @OBJCFLAGS@
230OBJDUMP = @OBJDUMP@
231OBJEXT = @OBJEXT@
232OTOOL = @OTOOL@
233OTOOL64 = @OTOOL64@
234PACKAGE = @PACKAGE@
235PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
236PACKAGE_NAME = @PACKAGE_NAME@
237PACKAGE_STRING = @PACKAGE_STRING@
238PACKAGE_TARNAME = @PACKAGE_TARNAME@
239PACKAGE_URL = @PACKAGE_URL@
240PACKAGE_VERSION = @PACKAGE_VERSION@
241PATH_SEPARATOR = @PATH_SEPARATOR@
242PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
243PIXMAN_LIBS = @PIXMAN_LIBS@
244PKG_CONFIG = @PKG_CONFIG@
245PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
246PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
247PNG_CFLAGS = @PNG_CFLAGS@
248PNG_LIBS = @PNG_LIBS@
249RANLIB = @RANLIB@
250SDL_CFLAGS = @SDL_CFLAGS@
251SDL_LIBS = @SDL_LIBS@
252SED = @SED@
253SET_MAKE = @SET_MAKE@
254SHELL = @SHELL@
255SHM_OPEN_LINK = @SHM_OPEN_LINK@
256STRIP = @STRIP@
257SVG_CFLAGS = @SVG_CFLAGS@
258SVG_LIBS = @SVG_LIBS@
259VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
260VALGRIND_LIBS = @VALGRIND_LIBS@
261VERSION = @VERSION@
262VMAJ = @VMAJ@
263WIN32_CFLAGS = @WIN32_CFLAGS@
264WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
265XCB_CFLAGS = @XCB_CFLAGS@
266XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
267XCB_GL_LIBS = @XCB_GL_LIBS@
268XCB_LIBS = @XCB_LIBS@
269XEXT_CFLAGS = @XEXT_CFLAGS@
270XEXT_LIBS = @XEXT_LIBS@
271XMKMF = @XMKMF@
272X_CFLAGS = @X_CFLAGS@
273X_EXTRA_LIBS = @X_EXTRA_LIBS@
274X_LIBS = @X_LIBS@
275X_PRE_LIBS = @X_PRE_LIBS@
276abs_builddir = @abs_builddir@
277abs_srcdir = @abs_srcdir@
278abs_top_builddir = @abs_top_builddir@
279abs_top_srcdir = @abs_top_srcdir@
280ac_ct_CC = @ac_ct_CC@
281ac_ct_CXX = @ac_ct_CXX@
282ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
283ac_ct_OBJC = @ac_ct_OBJC@
284altivec_cflags = @altivec_cflags@
285am__include = @am__include@
286am__leading_dot = @am__leading_dot@
287am__quote = @am__quote@
288am__tar = @am__tar@
289am__untar = @am__untar@
290bindir = @bindir@
291build = @build@
292build_alias = @build_alias@
293build_cpu = @build_cpu@
294build_os = @build_os@
295build_vendor = @build_vendor@
296builddir = @builddir@
297datadir = @datadir@
298datarootdir = @datarootdir@
299dlopen_libs = @dlopen_libs@
300docdir = @docdir@
301dvidir = @dvidir@
302edje_cc = @edje_cc@
303efl_doxygen = @efl_doxygen@
304efl_have_doxygen = @efl_have_doxygen@
305evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
306evas_engine_buffer_libs = @evas_engine_buffer_libs@
307evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
308evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
309evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
310evas_engine_directfb_libs = @evas_engine_directfb_libs@
311evas_engine_fb_cflags = @evas_engine_fb_cflags@
312evas_engine_fb_libs = @evas_engine_fb_libs@
313evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
314evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
315evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
316evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
317evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
318evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
319evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
320evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
321evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
322evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
323evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
324evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
325evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
326evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
327evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
328evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
329evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
330evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
331evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
332evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
333evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
334evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
335evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
336evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
337evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
338evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
339evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
340evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
341evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
342evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
343evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
344evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
345evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
346evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
347evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
348evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
349evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
350evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
351evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
352evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
353evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
354evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
355evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
356evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
357evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
358evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
359evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
360evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
361evas_image_loader_png_libs = @evas_image_loader_png_libs@
362evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
363evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
364evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
365evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
366evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
367evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
368evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
369evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
370evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
371evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
372evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
373evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
374exec_prefix = @exec_prefix@
375have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
376have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
377have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
378have_evas_engine_software_x11 = @have_evas_engine_software_x11@
379have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
380have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
381have_lcov = @have_lcov@
382host = @host@
383host_alias = @host_alias@
384host_cpu = @host_cpu@
385host_os = @host_os@
386host_vendor = @host_vendor@
387htmldir = @htmldir@
388includedir = @includedir@
389infodir = @infodir@
390install_sh = @install_sh@
391libdir = @libdir@
392libexecdir = @libexecdir@
393localedir = @localedir@
394localstatedir = @localstatedir@
395lt_ECHO = @lt_ECHO@
396lt_enable_auto_import = @lt_enable_auto_import@
397mandir = @mandir@
398mkdir_p = @mkdir_p@
399oldincludedir = @oldincludedir@
400pdfdir = @pdfdir@
401pkgconfig_requires_private = @pkgconfig_requires_private@
402prefix = @prefix@
403program_transform_name = @program_transform_name@
404psdir = @psdir@
405pthread_cflags = @pthread_cflags@
406pthread_libs = @pthread_libs@
407release_info = @release_info@
408requirement_evas = @requirement_evas@
409sbindir = @sbindir@
410sharedstatedir = @sharedstatedir@
411srcdir = @srcdir@
412sysconfdir = @sysconfdir@
413target_alias = @target_alias@
414top_build_prefix = @top_build_prefix@
415top_builddir = @top_builddir@
416top_srcdir = @top_srcdir@
417version_info = @version_info@
418MAINTAINERCLEANFILES = Makefile.in
419AM_CPPFLAGS = \
420-I. \
421-I$(top_srcdir)/src/lib \
422-I$(top_srcdir)/src/lib/include \
423-I$(top_srcdir)/src/modules/engines/gl_common \
424@FREETYPE_CFLAGS@ \
425@PIXMAN_CFLAGS@ \
426@EINA_CFLAGS@ \
427@GL_EET_CFLAGS@ \
428@evas_engine_gl_xlib_cflags@
429
430@BUILD_ENGINE_GL_X11_TRUE@GL_X11_SOURCES = \
431@BUILD_ENGINE_GL_X11_TRUE@evas_engine.c \
432@BUILD_ENGINE_GL_X11_TRUE@evas_x_main.c
433
434@BUILD_ENGINE_GL_X11_TRUE@GL_X11_LIBADD = @evas_engine_gl_xlib_libs@ $(top_builddir)/src/modules/engines/gl_common/libevas_engine_gl_common.la
435@BUILD_ENGINE_GL_X11_TRUE@includes_HEADERS = Evas_Engine_GL_X11.h
436@BUILD_ENGINE_GL_X11_TRUE@includesdir = $(includedir)/evas-@VMAJ@
437@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_FALSE@pkgdir = $(libdir)/evas/modules/engines/gl_x11/$(MODULE_ARCH)
438@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_FALSE@pkg_LTLIBRARIES = module.la
439@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_FALSE@module_la_SOURCES = $(GL_X11_SOURCES)
440@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_FALSE@module_la_LIBADD = @EINA_LIBS@ @GL_EET_LIBS@ $(GL_X11_LIBADD) $(top_builddir)/src/lib/libevas.la @dlopen_libs@
441@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_FALSE@module_la_LDFLAGS = -module -avoid-version
442@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
443@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_TRUE@noinst_LTLIBRARIES = libevas_engine_gl_x11.la
444@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_TRUE@libevas_engine_gl_x11_la_SOURCES = $(GL_X11_SOURCES)
445@BUILD_ENGINE_GL_X11_TRUE@@EVAS_STATIC_BUILD_GL_X11_TRUE@libevas_engine_gl_x11_la_LIBADD = $(GL_X11_LIBADD)
446EXTRA_DIST = evas_engine.h
447all: all-am
448
449.SUFFIXES:
450.SUFFIXES: .c .lo .o .obj
451$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
452 @for dep in $?; do \
453 case '$(am__configure_deps)' in \
454 *$$dep*) \
455 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
456 && { if test -f $@; then exit 0; else break; fi; }; \
457 exit 1;; \
458 esac; \
459 done; \
460 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/gl_x11/Makefile'; \
461 $(am__cd) $(top_srcdir) && \
462 $(AUTOMAKE) --gnu src/modules/engines/gl_x11/Makefile
463.PRECIOUS: Makefile
464Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
465 @case '$?' in \
466 *config.status*) \
467 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
468 *) \
469 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
470 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
471 esac;
472
473$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
474 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
475
476$(top_srcdir)/configure: $(am__configure_deps)
477 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
478$(ACLOCAL_M4): $(am__aclocal_m4_deps)
479 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
480$(am__aclocal_m4_deps):
481
482clean-noinstLTLIBRARIES:
483 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
484 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
485 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
486 test "$$dir" != "$$p" || dir=.; \
487 echo "rm -f \"$${dir}/so_locations\""; \
488 rm -f "$${dir}/so_locations"; \
489 done
490install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
491 @$(NORMAL_INSTALL)
492 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
493 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
494 list2=; for p in $$list; do \
495 if test -f $$p; then \
496 list2="$$list2 $$p"; \
497 else :; fi; \
498 done; \
499 test -z "$$list2" || { \
500 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
501 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
502 }
503
504uninstall-pkgLTLIBRARIES:
505 @$(NORMAL_UNINSTALL)
506 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
507 for p in $$list; do \
508 $(am__strip_dir) \
509 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
510 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
511 done
512
513clean-pkgLTLIBRARIES:
514 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
515 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
516 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
517 test "$$dir" != "$$p" || dir=.; \
518 echo "rm -f \"$${dir}/so_locations\""; \
519 rm -f "$${dir}/so_locations"; \
520 done
521libevas_engine_gl_x11.la: $(libevas_engine_gl_x11_la_OBJECTS) $(libevas_engine_gl_x11_la_DEPENDENCIES)
522 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_gl_x11_la_rpath) $(libevas_engine_gl_x11_la_OBJECTS) $(libevas_engine_gl_x11_la_LIBADD) $(LIBS)
523module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
524 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
525
526mostlyclean-compile:
527 -rm -f *.$(OBJEXT)
528
529distclean-compile:
530 -rm -f *.tab.c
531
532@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
533@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_x_main.Plo@am__quote@
534@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
535@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_x_main.Plo@am__quote@
536
537.c.o:
538@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
539@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
540@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
541@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
542@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
543@am__fastdepCC_FALSE@ $(COMPILE) -c $<
544
545.c.obj:
546@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
547@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
548@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
549@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
550@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
551@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
552
553.c.lo:
554@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
555@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
556@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
557@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
558@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
559@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
560
561module_la-evas_engine.lo: evas_engine.c
562@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
563@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
564@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
565@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
566@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
567@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
568
569module_la-evas_x_main.lo: evas_x_main.c
570@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_x_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_x_main.Tpo -c -o module_la-evas_x_main.lo `test -f 'evas_x_main.c' || echo '$(srcdir)/'`evas_x_main.c
571@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_x_main.Tpo $(DEPDIR)/module_la-evas_x_main.Plo
572@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
573@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_x_main.c' object='module_la-evas_x_main.lo' libtool=yes @AMDEPBACKSLASH@
574@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
575@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_x_main.lo `test -f 'evas_x_main.c' || echo '$(srcdir)/'`evas_x_main.c
576
577mostlyclean-libtool:
578 -rm -f *.lo
579
580clean-libtool:
581 -rm -rf .libs _libs
582install-includesHEADERS: $(includes_HEADERS)
583 @$(NORMAL_INSTALL)
584 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
585 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
586 for p in $$list; do \
587 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
588 echo "$$d$$p"; \
589 done | $(am__base_list) | \
590 while read files; do \
591 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
592 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
593 done
594
595uninstall-includesHEADERS:
596 @$(NORMAL_UNINSTALL)
597 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
598 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
599 test -n "$$files" || exit 0; \
600 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
601 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
602
603ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
604 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
605 unique=`for i in $$list; do \
606 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
607 done | \
608 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
609 END { if (nonempty) { for (i in files) print i; }; }'`; \
610 mkid -fID $$unique
611tags: TAGS
612
613TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
614 $(TAGS_FILES) $(LISP)
615 set x; \
616 here=`pwd`; \
617 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
618 unique=`for i in $$list; do \
619 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
620 done | \
621 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
622 END { if (nonempty) { for (i in files) print i; }; }'`; \
623 shift; \
624 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
625 test -n "$$unique" || unique=$$empty_fix; \
626 if test $$# -gt 0; then \
627 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
628 "$$@" $$unique; \
629 else \
630 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
631 $$unique; \
632 fi; \
633 fi
634ctags: CTAGS
635CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
636 $(TAGS_FILES) $(LISP)
637 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
638 unique=`for i in $$list; do \
639 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
640 done | \
641 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
642 END { if (nonempty) { for (i in files) print i; }; }'`; \
643 test -z "$(CTAGS_ARGS)$$unique" \
644 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
645 $$unique
646
647GTAGS:
648 here=`$(am__cd) $(top_builddir) && pwd` \
649 && $(am__cd) $(top_srcdir) \
650 && gtags -i $(GTAGS_ARGS) "$$here"
651
652distclean-tags:
653 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
654
655distdir: $(DISTFILES)
656 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
657 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
658 list='$(DISTFILES)'; \
659 dist_files=`for file in $$list; do echo $$file; done | \
660 sed -e "s|^$$srcdirstrip/||;t" \
661 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
662 case $$dist_files in \
663 */*) $(MKDIR_P) `echo "$$dist_files" | \
664 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
665 sort -u` ;; \
666 esac; \
667 for file in $$dist_files; do \
668 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
669 if test -d $$d/$$file; then \
670 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
671 if test -d "$(distdir)/$$file"; then \
672 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
673 fi; \
674 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
675 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
676 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
677 fi; \
678 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
679 else \
680 test -f "$(distdir)/$$file" \
681 || cp -p $$d/$$file "$(distdir)/$$file" \
682 || exit 1; \
683 fi; \
684 done
685check-am: all-am
686check: check-am
687all-am: Makefile $(LTLIBRARIES) $(HEADERS)
688installdirs:
689 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
690 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
691 done
692install: install-am
693install-exec: install-exec-am
694install-data: install-data-am
695uninstall: uninstall-am
696
697install-am: all-am
698 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
699
700installcheck: installcheck-am
701install-strip:
702 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
703 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
704 `test -z '$(STRIP)' || \
705 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
706mostlyclean-generic:
707
708clean-generic:
709
710distclean-generic:
711 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
712 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
713
714maintainer-clean-generic:
715 @echo "This command is intended for maintainers to use"
716 @echo "it deletes files that may require special tools to rebuild."
717 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
718clean: clean-am
719
720clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
721 clean-pkgLTLIBRARIES mostlyclean-am
722
723distclean: distclean-am
724 -rm -rf ./$(DEPDIR)
725 -rm -f Makefile
726distclean-am: clean-am distclean-compile distclean-generic \
727 distclean-tags
728
729dvi: dvi-am
730
731dvi-am:
732
733html: html-am
734
735html-am:
736
737info: info-am
738
739info-am:
740
741install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
742
743install-dvi: install-dvi-am
744
745install-dvi-am:
746
747install-exec-am:
748
749install-html: install-html-am
750
751install-html-am:
752
753install-info: install-info-am
754
755install-info-am:
756
757install-man:
758
759install-pdf: install-pdf-am
760
761install-pdf-am:
762
763install-ps: install-ps-am
764
765install-ps-am:
766
767installcheck-am:
768
769maintainer-clean: maintainer-clean-am
770 -rm -rf ./$(DEPDIR)
771 -rm -f Makefile
772maintainer-clean-am: distclean-am maintainer-clean-generic
773
774mostlyclean: mostlyclean-am
775
776mostlyclean-am: mostlyclean-compile mostlyclean-generic \
777 mostlyclean-libtool
778
779pdf: pdf-am
780
781pdf-am:
782
783ps: ps-am
784
785ps-am:
786
787uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
788
789.MAKE: install-am install-strip
790
791.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
792 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
793 ctags distclean distclean-compile distclean-generic \
794 distclean-libtool distclean-tags distdir dvi dvi-am html \
795 html-am info info-am install install-am install-data \
796 install-data-am install-dvi install-dvi-am install-exec \
797 install-exec-am install-html install-html-am \
798 install-includesHEADERS install-info install-info-am \
799 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
800 install-ps install-ps-am install-strip installcheck \
801 installcheck-am installdirs maintainer-clean \
802 maintainer-clean-generic mostlyclean mostlyclean-compile \
803 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
804 tags uninstall uninstall-am uninstall-includesHEADERS \
805 uninstall-pkgLTLIBRARIES
806
807
808# Tell versions [3.59,3.63) of GNU make to not export all variables.
809# Otherwise a system limit (for SysV at least) may be exceeded.
810.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/gl_x11/evas_engine.c b/libraries/evas/src/modules/engines/gl_x11/evas_engine.c
new file mode 100644
index 0000000..38e0c13
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_x11/evas_engine.c
@@ -0,0 +1,3993 @@
1#include "evas_common.h" /* Also includes international specific stuff */
2#include "evas_engine.h"
3
4#ifdef HAVE_DLSYM
5# include <dlfcn.h> /* dlopen,dlclose,etc */
6#else
7# error gl_x11 should not get compiled if dlsym is not found on the system!
8#endif
9
10#define EVAS_GL_NO_GL_H_CHECK 1
11#include "Evas_GL.h"
12
13#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
14// EGL / GLES
15# if defined(GLES_VARIETY_S3C6410)
16# elif defined(GLES_VARIETY_SGX)
17# endif
18#else
19// GLX
20#endif
21
22typedef struct _Render_Engine Render_Engine;
23typedef struct _Render_Engine_GL_Surface Render_Engine_GL_Surface;
24typedef struct _Render_Engine_GL_Context Render_Engine_GL_Context;
25typedef struct _Render_Engine_GL_Resource Render_Engine_GL_Resource;
26typedef struct _Extension_Entry Extension_Entry;
27
28struct _Render_Engine
29{
30 Evas_GL_X11_Window *win;
31 Evas_Engine_Info_GL_X11 *info;
32 Evas *evas;
33 Tilebuf *tb;
34 int end;
35/*
36 XrmDatabase xrdb; // xres - dpi
37 struct { // xres - dpi
38 int dpi; // xres - dpi
39 } xr; // xres - dpi
40 */
41 int w, h;
42 int vsync;
43
44};
45
46struct _Render_Engine_GL_Surface
47{
48 int initialized;
49 int fbo_attached;
50 int w, h;
51 int depth_bits;
52 int stencil_bits;
53
54 // Render target texture/buffers
55 GLuint rt_tex;
56 GLint rt_internal_fmt;
57 GLenum rt_fmt;
58 GLuint rb_depth;
59 GLenum rb_depth_fmt;
60 GLuint rb_stencil;
61 GLenum rb_stencil_fmt;
62
63 Render_Engine_GL_Context *current_ctx;
64};
65
66struct _Render_Engine_GL_Context
67{
68 int initialized;
69#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
70 EGLContext context;
71#else
72 GLXContext context;
73#endif
74 GLuint context_fbo;
75 GLuint current_fbo;
76
77 Render_Engine_GL_Surface *current_sfc;
78};
79
80// Resources used per thread
81struct _Render_Engine_GL_Resource
82{
83 // Resource context/surface per Thread in TLS for evasgl use
84#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
85 EGLContext context;
86 EGLSurface surface;
87#else
88 GLXContext context;
89#endif
90};
91
92// Extension Handling
93struct _Extension_Entry
94{
95 const char *name;
96 const char *real_name;
97 int supported;
98};
99
100static int initted = 0;
101static int gl_wins = 0;
102static Render_Engine_GL_Context *current_evgl_ctx;
103static Render_Engine *current_engine;
104
105static char _gl_ext_string[1024];
106static char _evasgl_ext_string[1024];
107
108// Resource context/surface per Thread in TLS for evasgl use
109static Eina_TLS resource_key;
110static Eina_List *resource_list;
111LK(resource_lock);
112
113typedef void (*_eng_fn) (void);
114typedef _eng_fn (*glsym_func_eng_fn) ();
115typedef void (*glsym_func_void) ();
116typedef void *(*glsym_func_void_ptr) ();
117typedef int (*glsym_func_int) ();
118typedef unsigned int (*glsym_func_uint) ();
119typedef unsigned char (*glsym_func_uchar) ();
120typedef unsigned char *(*glsym_func_uchar_ptr) ();
121typedef const char *(*glsym_func_const_char_ptr) ();
122
123#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
124
125#ifndef EGL_NATIVE_PIXMAP_KHR
126# define EGL_NATIVE_PIXMAP_KHR 0x30b0
127#endif
128_eng_fn (*glsym_eglGetProcAddress) (const char *a) = NULL;
129void (*glsym_eglBindTexImage) (EGLDisplay a, EGLSurface b, int c) = NULL;
130void (*glsym_eglReleaseTexImage) (EGLDisplay a, EGLSurface b, int c) = NULL;
131void *(*glsym_eglCreateImage) (EGLDisplay a, EGLContext b, EGLenum c, EGLClientBuffer d, const int *e) = NULL;
132void (*glsym_eglDestroyImage) (EGLDisplay a, void *b) = NULL;
133void (*glsym_glEGLImageTargetTexture2DOES) (int a, void *b) = NULL;
134void (*glsym_glEGLImageTargetRenderbufferStorageOES) (int a, void *b) = NULL;
135void *(*glsym_eglMapImageSEC) (void *a, void *b) = NULL;
136unsigned int (*glsym_eglUnmapImageSEC) (void *a, void *b) = NULL;
137const char *(*glsym_eglQueryString) (EGLDisplay a, int name) = NULL;
138
139unsigned int (*glsym_eglLockSurface) (EGLDisplay a, EGLSurface b, const int *attrib_list) = NULL;
140unsigned int (*glsym_eglUnlockSurface) (EGLDisplay a, EGLSurface b) = NULL;
141
142#else
143typedef XID (*glsym_func_xid) ();
144
145_eng_fn (*glsym_glXGetProcAddress) (const char *a) = NULL;
146void (*glsym_glXBindTexImage) (Display *a, GLXDrawable b, int c, int *d) = NULL;
147void (*glsym_glXReleaseTexImage) (Display *a, GLXDrawable b, int c) = NULL;
148int (*glsym_glXGetVideoSync) (unsigned int *a) = NULL;
149int (*glsym_glXWaitVideoSync) (int a, int b, unsigned int *c) = NULL;
150XID (*glsym_glXCreatePixmap) (Display *a, void *b, Pixmap c, const int *d) = NULL;
151void (*glsym_glXDestroyPixmap) (Display *a, XID b) = NULL;
152void (*glsym_glXQueryDrawable) (Display *a, XID b, int c, unsigned int *d) = NULL;
153int (*glsym_glXSwapIntervalSGI) (int a) = NULL;
154void (*glsym_glXSwapIntervalEXT) (Display *s, GLXDrawable b, int c) = NULL;
155
156const char *(*glsym_glXQueryExtensionsString) (Display *a, int screen) = NULL;
157#endif
158
159// GLES2 Extensions
160void (*glsym_glGetProgramBinaryOES) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary) = NULL;
161void (*glsym_glProgramBinaryOES) (GLuint program, GLenum binaryFormat, const void *binary, GLint length) = NULL;
162void* (*glsym_glMapBufferOES) (GLenum target, GLenum access) = NULL;
163unsigned char (*glsym_glUnmapBufferOES) (GLenum target) = NULL;
164void (*glsym_glGetBufferPointervOES) (GLenum target, GLenum pname, void** params) = NULL;
165void (*glsym_glTexImage3DOES) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels) = NULL;
166void (*glsym_glTexSubImage3DOES) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels) = NULL;
167void (*glsym_glCopyTexSubImage3DOES) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) = NULL;
168void (*glsym_glCompressedTexImage3DOES) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data) = NULL;
169void (*glsym_glCompressedTexSubImage3DOES) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data) = NULL;
170void (*glsym_glFramebufferTexture3DOES) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) = NULL;
171void (*glsym_glGetPerfMonitorGroupsAMD) (GLint* numGroups, GLsizei groupsSize, GLuint* groups) = NULL;
172void (*glsym_glGetPerfMonitorCountersAMD) (GLuint group, GLint* numCounters, GLint* maxActiveCounters, GLsizei counterSize, GLuint* counters) = NULL;
173void (*glsym_glGetPerfMonitorGroupStringAMD) (GLuint group, GLsizei bufSize, GLsizei* length, char* groupString) = NULL;
174void (*glsym_glGetPerfMonitorCounterStringAMD) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, char* counterString) = NULL;
175void (*glsym_glGetPerfMonitorCounterInfoAMD) (GLuint group, GLuint counter, GLenum pname, void* data) = NULL;
176void (*glsym_glGenPerfMonitorsAMD) (GLsizei n, GLuint* monitors) = NULL;
177void (*glsym_glDeletePerfMonitorsAMD) (GLsizei n, GLuint* monitors) = NULL;
178void (*glsym_glSelectPerfMonitorCountersAMD) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint* countersList) = NULL;
179void (*glsym_glBeginPerfMonitorAMD) (GLuint monitor) = NULL;
180void (*glsym_glEndPerfMonitorAMD) (GLuint monitor) = NULL;
181void (*glsym_glGetPerfMonitorCounterDataAMD) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint* bytesWritten) = NULL;
182void (*glsym_glDiscardFramebufferEXT) (GLenum target, GLsizei numAttachments, const GLenum* attachments) = NULL;
183void (*glsym_glMultiDrawArraysEXT) (GLenum mode, GLint* first, GLsizei* count, GLsizei primcount) = NULL;
184void (*glsym_glMultiDrawElementsEXT) (GLenum mode, const GLsizei* count, GLenum type, const GLvoid** indices, GLsizei primcount) = NULL;
185void (*glsym_glDeleteFencesNV) (GLsizei n, const GLuint* fences) = NULL;
186void (*glsym_glGenFencesNV) (GLsizei n, GLuint* fences) = NULL;
187unsigned char (*glsym_glIsFenceNV) (GLuint fence) = NULL;
188unsigned char (*glsym_glTestFenceNV) (GLuint fence) = NULL;
189void (*glsym_glGetFenceivNV) (GLuint fence, GLenum pname, GLint* params) = NULL;
190void (*glsym_glFinishFenceNV) (GLuint fence) = NULL;
191void (*glsym_glSetFenceNV) (GLuint, GLenum) = NULL;
192void (*glsym_glGetDriverControlsQCOM) (GLint* num, GLsizei size, GLuint* driverControls) = NULL;
193void (*glsym_glGetDriverControlStringQCOM) (GLuint driverControl, GLsizei bufSize, GLsizei* length, char* driverControlString) = NULL;
194void (*glsym_glEnableDriverControlQCOM) (GLuint driverControl) = NULL;
195void (*glsym_glDisableDriverControlQCOM) (GLuint driverControl) = NULL;
196void (*glsym_glExtGetTexturesQCOM) (GLuint* textures, GLint maxTextures, GLint* numTextures) = NULL;
197void (*glsym_glExtGetBuffersQCOM) (GLuint* buffers, GLint maxBuffers, GLint* numBuffers) = NULL;
198void (*glsym_glExtGetRenderbuffersQCOM) (GLuint* renderbuffers, GLint maxRenderbuffers, GLint* numRenderbuffers) = NULL;
199void (*glsym_glExtGetFramebuffersQCOM) (GLuint* framebuffers, GLint maxFramebuffers, GLint* numFramebuffers) = NULL;
200void (*glsym_glExtGetTexLevelParameterivQCOM) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint* params) = NULL;
201void (*glsym_glExtTexObjectStateOverrideiQCOM) (GLenum target, GLenum pname, GLint param) = NULL;
202void (*glsym_glExtGetTexSubImageQCOM) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void* texels) = NULL;
203void (*glsym_glExtGetBufferPointervQCOM) (GLenum target, void** params) = NULL;
204void (*glsym_glExtGetShadersQCOM) (GLuint* shaders, GLint maxShaders, GLint* numShaders) = NULL;
205void (*glsym_glExtGetProgramsQCOM) (GLuint* programs, GLint maxPrograms, GLint* numPrograms) = NULL;
206unsigned char (*glsym_glExtIsProgramBinaryQCOM) (GLuint program) = NULL;
207void (*glsym_glExtGetProgramBinarySourceQCOM) (GLuint program, GLenum shadertype, char* source, GLint* length) = NULL;
208
209
210//------ GLES 2.0 Extensions supported in EvasGL -----//
211static Extension_Entry _gl_ext_entries[] = {
212#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
213 //--- Function Extensions ---//
214 { "GL_OES_get_program_binary", "get_program_binary", 0 },
215 { "GL_OES_mapbuffer", "mapbuffer", 0 },
216 { "GL_OES_texture_3D", "texture_3D", 0 },
217 { "AMD_performance_monitor", "AMD_performance_monitor", 0 },
218 { "GL_EXT_discard_framebuffer", "discard_framebuffer", 0 },
219 { "GL_EXT_multi_draw_arrays", "multi_draw_arrays", 0 },
220 { "GL_NV_fence", "NV_fence", 0 },
221 { "GL_QCOM_driver_control", "QCOM_driver_control", 0 },
222 { "GL_QCOM_extended_get", "QCOM_extended_get", 0 },
223 { "GL_QCOM_extended_get2", "QCOM_extended_get2", 0 },
224
225 //--- Define Extensions ---//
226 { "GL_OES_compressed_ETC1_RGB8_texture", "compressed_ETC1_RGB8_texture", 0 },
227 { "GL_OES_compressed_paletted_texture", "compressed_paletted_texture", 0 },
228 { "GL_OES_depth24", "depth24", 0 },
229 { "GL_OES_depth32", "depth32", 0 },
230 { "GL_OES_EvasGL_image", "EGL_image", 0 },
231 { "GL_OES_packed_depth_stencil", "packed_depth_stencil", 0 },
232 { "GL_OES_rgb8_rgba8", "rgb8_rgba8", 0 },
233 { "GL_OES_standard_derivatives", "standard_derivatives", 0 },
234 { "GL_OES_stencil1", "stencil1", 0 },
235 { "GL_OES_stencil4", "stencil4", 0 },
236 { "GL_OES_texture_float", "texture_float", 0 },
237 { "GL_OES_texture_half_float", "texture_half_float", 0 },
238 { "GL_OES_texture_half_float_linear", "texture_half_float_linear", 0 },
239 { "GL_OES_texture_npot", "texture_npot", 0 },
240 { "GL_OES_vertex_half_float", "vertex_half_float", 0 },
241 { "GL_OES_vertex_type_10_10_10_2", "vertex_type_10_10_10_2", 0 },
242 { "GL_AMD_compressed_3DC_texture", "compressed_3DC_texture", 0 },
243 { "GL_AMD_compressed_ATC_texture", "compressed_ATC_texture", 0 },
244 { "GL_AMD_program_binary_Z400", "program_binary_Z400", 0 },
245 { "GL_EXT_blend_minmax", "blend_minmax", 0 },
246 { "GL_EXT_read_format_bgra", "read_format_bgra", 0 },
247 { "GL_EXT_texture_filter_anisotropic", "texture_filter_anisotrophic", 0 },
248 { "GL_EXT_texture_format_BGRA8888", "texture_format_BGRA8888", 0 },
249 { "GL_EXT_texture_type_2_10_10_10_REV", "texture_type_2_10_10_10_rev", 0 },
250 { "GL_IMG_program_binary", "IMG_program_binary", 0 },
251 { "GL_IMG_read_format", "IMG_read_format", 0 },
252 { "GL_IMG_shader_binary", "IMG_shader_binary", 0 },
253 { "GL_IMG_texture_compression_pvrtc", "IMG_texture_compression_pvrtc", 0 },
254 { "GL_QCOM_perfmon_global_mode", "QCOM_perfmon_global_mode", 0 },
255 { "GL_QCOM_writeonly_rendering", "QCOM_writeonly_rendering", 0 },
256#else
257 //--- Function Extensions ---//
258 { "GL_OES_get_program_binary", "get_program_binary", 0 },
259 { "GL_OES_mapbuffer", "mapbuffer", 0 },
260 { "GL_OES_texture_3D", "texture_3D", 0 },
261 { "AMD_performance_monitor", "AMD_performance_monitor", 0 },
262 { "GL_EXT_discard_framebuffer", "discard_framebuffer", 0 },
263 { "GL_EXT_multi_draw_arrays", "multi_draw_arrays", 0 },
264 { "GL_NV_fence", "NV_fence", 0 },
265 { "GL_QCOM_driver_control", "QCOM_driver_control", 0 },
266 { "GL_QCOM_extended_get", "QCOM_extended_get", 0 },
267 { "GL_QCOM_extended_get2", "QCOM_extended_get2", 0 },
268
269 //--- Define Extensions ---//
270 { "GL_OES_compressed_ETC1_RGB8_texture", "compressed_ETC1_RGB8_texture", 0 },
271 { "GL_OES_compressed_paletted_texture", "compressed_paletted_texture", 0 },
272 { "GL_OES_depth24", "depth24", 0 },
273 { "GL_OES_depth32", "depth32", 0 },
274 { "GL_OES_EvasGL_image", "EGL_image", 0 },
275 { "GL_OES_packed_depth_stencil", "packed_depth_stencil", 0 },
276 { "GL_OES_rgb8_rgba8", "rgb8_rgba8", 0 },
277 { "GL_OES_standard_derivatives", "standard_derivatives", 0 },
278 { "GL_OES_stencil1", "stencil1", 0 },
279 { "GL_OES_stencil4", "stencil4", 0 },
280 { "GL_OES_texture_float", "texture_float", 0 },
281 { "GL_OES_texture_half_float", "texture_half_float", 0 },
282 { "GL_OES_texture_half_float_linear", "texture_half_float_linear", 0 },
283 { "GL_OES_texture_npot", "texture_non_power_of_two", 0 }, // Desktop differs
284 { "GL_OES_vertex_half_float", "half_float_vertex", 0 }, // Desktop differs
285 { "GL_OES_vertex_type_10_10_10_2", "vertex_type_10_10_10_2", 0 },
286 { "GL_AMD_compressed_3DC_texture", "compressed_3DC_texture", 0 },
287 { "GL_AMD_compressed_ATC_texture", "compressed_ATC_texture", 0 },
288 { "GL_AMD_program_binary_Z400", "program_binary_Z400", 0 },
289 { "GL_EXT_blend_minmax", "blend_minmax", 0 },
290 { "GL_EXT_read_format_bgra", "bgra", 0 }, // Desktop differs
291 { "GL_EXT_texture_filter_anisotropic", "texture_filter_anisotrophic", 0 },
292 { "GL_EXT_texture_format_BGRA8888", "bgra", 0 }, // Desktop differs
293 { "GL_EXT_texture_type_2_10_10_10_REV", "vertex_type_2_10_10_10_rev", 0 }, // Desktop differs ???
294 { "GL_IMG_program_binary", "IMG_program_binary", 0 },
295 { "GL_IMG_read_format", "IMG_read_format", 0 },
296 { "GL_IMG_shader_binary", "IMG_shader_binary", 0 },
297 { "GL_IMG_texture_compression_pvrtc", "IMG_texture_compression_pvrtc", 0 },
298 { "GL_QCOM_perfmon_global_mode", "QCOM_perfmon_global_mode", 0 },
299 { "GL_QCOM_writeonly_rendering", "QCOM_writeonly_rendering", 0 },
300
301#endif
302 { NULL, NULL, 0}
303};
304
305//------ Extensions supported in EvasGL -----//
306static Extension_Entry _evasgl_ext_entries[] = {
307#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
308 { "EvasGL_KHR_image", "EGL_KHR_image", 0 },
309 { "EvasGL_KHR_vg_parent_image", "EGL_KHR_vg_parent_image", 0 },
310 { "EvasGL_KHR_gl_texture_2D_image", "EGL_KHR_gl_texture_2D_image", 0 },
311 { "EvasGL_KHR_gl_texture_cubemap_image", "EGL_KHR_gl_texture_cubemap_image", 0 },
312 { "EvasGL_KHR_gl_texture_3D_image", "EGL_KHR_gl_texture_3D_image", 0 },
313 { "EvasGL_KHR_gl_renderbuffer_image", "EGL_KHR_gl_renderbuffer_image", 0 },
314#else
315#endif
316 { NULL, NULL, 0 }
317};
318
319static void
320_sym_init(void)
321{
322 static int done = 0;
323
324 if (done) return;
325
326#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
327#define FINDSYM(dst, sym, typ) \
328 if ((!dst) && (glsym_eglGetProcAddress)) dst = (typ)glsym_eglGetProcAddress(sym); \
329 if (!dst) dst = (typ)dlsym(RTLD_DEFAULT, sym)
330
331 FINDSYM(glsym_eglGetProcAddress, "eglGetProcAddress", glsym_func_eng_fn);
332 FINDSYM(glsym_eglGetProcAddress, "eglGetProcAddressEXT", glsym_func_eng_fn);
333 FINDSYM(glsym_eglGetProcAddress, "eglGetProcAddressARB", glsym_func_eng_fn);
334 FINDSYM(glsym_eglGetProcAddress, "eglGetProcAddressKHR", glsym_func_eng_fn);
335
336 FINDSYM(glsym_eglBindTexImage, "eglBindTexImage", glsym_func_void);
337 FINDSYM(glsym_eglBindTexImage, "eglBindTexImageEXT", glsym_func_void);
338 FINDSYM(glsym_eglBindTexImage, "eglBindTexImageARB", glsym_func_void);
339 FINDSYM(glsym_eglBindTexImage, "eglBindTexImageKHR", glsym_func_void);
340
341 FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImage", glsym_func_void);
342 FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageEXT", glsym_func_void);
343 FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageARB", glsym_func_void);
344 FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageKHR", glsym_func_void);
345
346 FINDSYM(glsym_eglCreateImage, "eglCreateImage", glsym_func_void_ptr);
347 FINDSYM(glsym_eglCreateImage, "eglCreateImageEXT", glsym_func_void_ptr);
348 FINDSYM(glsym_eglCreateImage, "eglCreateImageARB", glsym_func_void_ptr);
349 FINDSYM(glsym_eglCreateImage, "eglCreateImageKHR", glsym_func_void_ptr);
350
351 FINDSYM(glsym_eglDestroyImage, "eglDestroyImage", glsym_func_void);
352 FINDSYM(glsym_eglDestroyImage, "eglDestroyImageEXT", glsym_func_void);
353 FINDSYM(glsym_eglDestroyImage, "eglDestroyImageARB", glsym_func_void);
354 FINDSYM(glsym_eglDestroyImage, "eglDestroyImageKHR", glsym_func_void);
355
356 FINDSYM(glsym_glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES", glsym_func_void);
357
358 FINDSYM(glsym_glEGLImageTargetRenderbufferStorageOES, "glEGLImageTargetRenderbufferStorageOES", glsym_func_void);
359
360 FINDSYM(glsym_eglMapImageSEC, "eglMapImageSEC", glsym_func_void_ptr);
361 FINDSYM(glsym_eglUnmapImageSEC, "eglUnmapImageSEC", glsym_func_uint);
362
363 FINDSYM(glsym_eglQueryString, "eglQueryString", glsym_func_const_char_ptr);
364
365 FINDSYM(glsym_eglLockSurface, "eglLockSurface", glsym_func_uint);
366 FINDSYM(glsym_eglLockSurface, "eglLockSurfaceEXT", glsym_func_uint);
367 FINDSYM(glsym_eglLockSurface, "eglLockSurfaceARB", glsym_func_uint);
368 FINDSYM(glsym_eglLockSurface, "eglLockSurfaceKHR", glsym_func_uint);
369
370 FINDSYM(glsym_eglUnlockSurface, "eglUnlockSurface", glsym_func_uint);
371 FINDSYM(glsym_eglUnlockSurface, "eglUnlockSurfaceEXT", glsym_func_uint);
372 FINDSYM(glsym_eglUnlockSurface, "eglUnlockSurfaceARB", glsym_func_uint);
373 FINDSYM(glsym_eglUnlockSurface, "eglUnlockSurfaceKHR", glsym_func_uint);
374
375#else
376#define FINDSYM(dst, sym, typ) \
377 if ((!dst) && (glsym_glXGetProcAddress)) dst = (typ)glsym_glXGetProcAddress(sym); \
378 if (!dst) dst = (typ)dlsym(RTLD_DEFAULT, sym)
379
380 FINDSYM(glsym_glXGetProcAddress, "glXGetProcAddress", glsym_func_eng_fn);
381 FINDSYM(glsym_glXGetProcAddress, "glXGetProcAddressEXT", glsym_func_eng_fn);
382 FINDSYM(glsym_glXGetProcAddress, "glXGetProcAddressARB", glsym_func_eng_fn);
383
384 FINDSYM(glsym_glXBindTexImage, "glXBindTexImage", glsym_func_void);
385 FINDSYM(glsym_glXBindTexImage, "glXBindTexImageEXT", glsym_func_void);
386 FINDSYM(glsym_glXBindTexImage, "glXBindTexImageARB", glsym_func_void);
387
388 FINDSYM(glsym_glXReleaseTexImage, "glXReleaseTexImage", glsym_func_void);
389 FINDSYM(glsym_glXReleaseTexImage, "glXReleaseTexImageEXT", glsym_func_void);
390 FINDSYM(glsym_glXReleaseTexImage, "glXReleaseTexImageARB", glsym_func_void);
391
392 FINDSYM(glsym_glXGetVideoSync, "glXGetVideoSyncSGI", glsym_func_int);
393
394 FINDSYM(glsym_glXWaitVideoSync, "glXWaitVideoSyncSGI", glsym_func_int);
395
396 FINDSYM(glsym_glXCreatePixmap, "glXCreatePixmap", glsym_func_xid);
397 FINDSYM(glsym_glXCreatePixmap, "glXCreatePixmapEXT", glsym_func_xid);
398 FINDSYM(glsym_glXCreatePixmap, "glXCreatePixmapARB", glsym_func_xid);
399
400 FINDSYM(glsym_glXDestroyPixmap, "glXDestroyPixmap", glsym_func_void);
401 FINDSYM(glsym_glXDestroyPixmap, "glXDestroyPixmapEXT", glsym_func_void);
402 FINDSYM(glsym_glXDestroyPixmap, "glXDestroyPixmapARB", glsym_func_void);
403
404 FINDSYM(glsym_glXQueryDrawable, "glXQueryDrawable", glsym_func_void);
405 FINDSYM(glsym_glXQueryDrawable, "glXQueryDrawableEXT", glsym_func_void);
406 FINDSYM(glsym_glXQueryDrawable, "glXQueryDrawableARB", glsym_func_void);
407
408 FINDSYM(glsym_glXSwapIntervalSGI, "glXSwapIntervalMESA", glsym_func_int);
409 FINDSYM(glsym_glXSwapIntervalSGI, "glXSwapIntervalSGI", glsym_func_int);
410
411 FINDSYM(glsym_glXSwapIntervalEXT, "glXSwapIntervalEXT", glsym_func_void);
412
413 FINDSYM(glsym_glXQueryExtensionsString, "glXQueryExtensionsString", glsym_func_const_char_ptr);
414#endif
415
416 //----------- GLES 2.0 Extensions ------------//
417 // If the symbol's not found, they get set to NULL
418 // If one of the functions in the extension exists, the extension in supported
419 /* GL_OES_get_program_binary */
420 FINDSYM(glsym_glGetProgramBinaryOES, "glGetProgramBinary", glsym_func_void);
421 FINDSYM(glsym_glGetProgramBinaryOES, "glGetProgramBinaryEXT", glsym_func_void);
422 FINDSYM(glsym_glGetProgramBinaryOES, "glGetProgramBinaryARB", glsym_func_void);
423 FINDSYM(glsym_glGetProgramBinaryOES, "glGetProgramBinaryOES", glsym_func_void);
424
425 FINDSYM(glsym_glProgramBinaryOES, "glProgramBinary", glsym_func_void);
426 FINDSYM(glsym_glProgramBinaryOES, "glProgramBinaryEXT", glsym_func_void);
427 FINDSYM(glsym_glProgramBinaryOES, "glProgramBinaryARB", glsym_func_void);
428 FINDSYM(glsym_glProgramBinaryOES, "glProgramBinaryOES", glsym_func_void);
429
430 // Check the first function to see if the extension is supported...
431 if (glsym_glGetProgramBinaryOES) _gl_ext_entries[0].supported = 1;
432
433
434 /* GL_OES_mapbuffer */
435 FINDSYM(glsym_glMapBufferOES, "glMapBuffer", glsym_func_void_ptr);
436 FINDSYM(glsym_glMapBufferOES, "glMapBufferEXT", glsym_func_void_ptr);
437 FINDSYM(glsym_glMapBufferOES, "glMapBufferARB", glsym_func_void_ptr);
438 FINDSYM(glsym_glMapBufferOES, "glMapBufferOES", glsym_func_void_ptr);
439
440 FINDSYM(glsym_glUnmapBufferOES, "glUnmapBuffer", glsym_func_uchar);
441 FINDSYM(glsym_glUnmapBufferOES, "glUnmapBufferEXT", glsym_func_uchar);
442 FINDSYM(glsym_glUnmapBufferOES, "glUnmapBufferARB", glsym_func_uchar);
443 FINDSYM(glsym_glUnmapBufferOES, "glUnmapBufferOES", glsym_func_uchar);
444
445 FINDSYM(glsym_glGetBufferPointervOES, "glGetBufferPointerv", glsym_func_void);
446 FINDSYM(glsym_glGetBufferPointervOES, "glGetBufferPointervEXT", glsym_func_void);
447 FINDSYM(glsym_glGetBufferPointervOES, "glGetBufferPointervARB", glsym_func_void);
448 FINDSYM(glsym_glGetBufferPointervOES, "glGetBufferPointervOES", glsym_func_void);
449
450 if (glsym_glMapBufferOES) _gl_ext_entries[1].supported = 1;
451
452 /* GL_OES_texture_3D */
453 FINDSYM(glsym_glTexImage3DOES, "glTexImage3D", glsym_func_void);
454 FINDSYM(glsym_glTexImage3DOES, "glTexImage3DEXT", glsym_func_void);
455 FINDSYM(glsym_glTexImage3DOES, "glTexImage3DARB", glsym_func_void);
456 FINDSYM(glsym_glTexImage3DOES, "glTexImage3DOES", glsym_func_void);
457
458 FINDSYM(glsym_glTexSubImage3DOES, "glTexSubImage3D", glsym_func_void);
459 FINDSYM(glsym_glTexSubImage3DOES, "glTexSubImage3DEXT", glsym_func_void);
460 FINDSYM(glsym_glTexSubImage3DOES, "glTexSubImage3DARB", glsym_func_void);
461 FINDSYM(glsym_glTexSubImage3DOES, "glTexSubImage3DOES", glsym_func_void);
462
463 FINDSYM(glsym_glCopyTexSubImage3DOES, "glCopyTexSubImage3D", glsym_func_void);
464 FINDSYM(glsym_glCopyTexSubImage3DOES, "glCopyTexSubImage3DARB", glsym_func_void);
465 FINDSYM(glsym_glCopyTexSubImage3DOES, "glCopyTexSubImage3DEXT", glsym_func_void);
466 FINDSYM(glsym_glCopyTexSubImage3DOES, "glCopyTexSubImage3DOES", glsym_func_void);
467
468 FINDSYM(glsym_glCompressedTexImage3DOES, "glCompressedTexImage3D", glsym_func_void);
469 FINDSYM(glsym_glCompressedTexImage3DOES, "glCompressedTexImage3DARB", glsym_func_void);
470 FINDSYM(glsym_glCompressedTexImage3DOES, "glCompressedTexImage3DEXT", glsym_func_void);
471 FINDSYM(glsym_glCompressedTexImage3DOES, "glCompressedTexImage3DOES", glsym_func_void);
472
473 FINDSYM(glsym_glCompressedTexSubImage3DOES, "glCompressedTexSubImage3D", glsym_func_void);
474 FINDSYM(glsym_glCompressedTexSubImage3DOES, "glCompressedTexSubImage3DARB", glsym_func_void);
475 FINDSYM(glsym_glCompressedTexSubImage3DOES, "glCompressedTexSubImage3DEXT", glsym_func_void);
476 FINDSYM(glsym_glCompressedTexSubImage3DOES, "glCompressedTexSubImage3DOES", glsym_func_void);
477
478 FINDSYM(glsym_glFramebufferTexture3DOES, "glFramebufferTexture3D", glsym_func_void);
479 FINDSYM(glsym_glFramebufferTexture3DOES, "glFramebufferTexture3DARB", glsym_func_void);
480 FINDSYM(glsym_glFramebufferTexture3DOES, "glFramebufferTexture3DEXT", glsym_func_void);
481 FINDSYM(glsym_glFramebufferTexture3DOES, "glFramebufferTexture3DOES", glsym_func_void);
482
483 if (glsym_glTexSubImage3DOES) _gl_ext_entries[2].supported = 1;
484
485 /* AMD_performance_monitor */
486 FINDSYM(glsym_glGetPerfMonitorGroupsAMD, "glGetPerfMonitorGroupsAMD", glsym_func_void);
487 FINDSYM(glsym_glGetPerfMonitorCountersAMD, "glGetPerfMonitorCountersAMD", glsym_func_void);
488 FINDSYM(glsym_glGetPerfMonitorGroupStringAMD, "glGetPerfMonitorGroupStringAMD", glsym_func_void);
489 FINDSYM(glsym_glGetPerfMonitorCounterStringAMD, "glGetPerfMonitorCounterStringAMD", glsym_func_void);
490 FINDSYM(glsym_glGetPerfMonitorCounterInfoAMD, "glGetPerfMonitorCounterInfoAMD", glsym_func_void);
491 FINDSYM(glsym_glGenPerfMonitorsAMD, "glGenPerfMonitorsAMD", glsym_func_void);
492 FINDSYM(glsym_glDeletePerfMonitorsAMD, "glDeletePerfMonitorsAMD", glsym_func_void);
493 FINDSYM(glsym_glSelectPerfMonitorCountersAMD, "glSelectPerfMonitorCountersAMD", glsym_func_void);
494 FINDSYM(glsym_glBeginPerfMonitorAMD, "glBeginPerfMonitorAMD", glsym_func_void);
495 FINDSYM(glsym_glEndPerfMonitorAMD, "glEndPerfMonitorAMD", glsym_func_void);
496 FINDSYM(glsym_glGetPerfMonitorCounterDataAMD, "glGetPerfMonitorCounterDataAMD", glsym_func_void);
497
498 if (glsym_glGetPerfMonitorGroupsAMD) _gl_ext_entries[3].supported = 1;
499
500 /* GL_EXT_discard_framebuffer */
501 FINDSYM(glsym_glDiscardFramebufferEXT, "glDiscardFramebuffer", glsym_func_void);
502 FINDSYM(glsym_glDiscardFramebufferEXT, "glDiscardFramebufferARB", glsym_func_void);
503 FINDSYM(glsym_glDiscardFramebufferEXT, "glDiscardFramebufferEXT", glsym_func_void);
504
505 if (glsym_glDiscardFramebufferEXT) _gl_ext_entries[4].supported = 1;
506
507 /* GL_EXT_multi_draw_arrays */
508 FINDSYM(glsym_glMultiDrawArraysEXT, "glMultiDrawArrays", glsym_func_void);
509 FINDSYM(glsym_glMultiDrawArraysEXT, "glMultiDrawArraysARB", glsym_func_void);
510 FINDSYM(glsym_glMultiDrawArraysEXT, "glMultiDrawArraysEXT", glsym_func_void);
511
512 FINDSYM(glsym_glMultiDrawElementsEXT, "glMultiDrawElements", glsym_func_void);
513 FINDSYM(glsym_glMultiDrawElementsEXT, "glMultiDrawElementsARB", glsym_func_void);
514 FINDSYM(glsym_glMultiDrawElementsEXT, "glMultiDrawElementsEXT", glsym_func_void);
515
516 if (glsym_glMultiDrawArraysEXT) _gl_ext_entries[5].supported = 1;
517
518 /* GL_NV_fence */
519 FINDSYM(glsym_glDeleteFencesNV, "glDeleteFencesNV", glsym_func_void);
520 FINDSYM(glsym_glGenFencesNV, "glGenFencesNV", glsym_func_void);
521 FINDSYM(glsym_glIsFenceNV, "glIsFenceNV", glsym_func_uchar);
522 FINDSYM(glsym_glTestFenceNV, "glTestFenceNV", glsym_func_uchar);
523 FINDSYM(glsym_glGetFenceivNV, "glGetFenceivNV", glsym_func_void);
524 FINDSYM(glsym_glFinishFenceNV, "glFinishFenceNV", glsym_func_void);
525 FINDSYM(glsym_glSetFenceNV, "glSetFenceNV", glsym_func_void);
526
527 if (glsym_glDeleteFencesNV) _gl_ext_entries[6].supported = 1;
528
529 /* GL_QCOM_driver_control */
530 FINDSYM(glsym_glGetDriverControlsQCOM, "glGetDriverControlsQCOM", glsym_func_void);
531 FINDSYM(glsym_glGetDriverControlStringQCOM, "glGetDriverControlStringQCOM", glsym_func_void);
532 FINDSYM(glsym_glEnableDriverControlQCOM, "glEnableDriverControlQCOM", glsym_func_void);
533 FINDSYM(glsym_glDisableDriverControlQCOM, "glDisableDriverControlQCOM", glsym_func_void);
534
535 if (glsym_glGetDriverControlsQCOM) _gl_ext_entries[7].supported = 1;
536
537 /* GL_QCOM_extended_get */
538 FINDSYM(glsym_glExtGetTexturesQCOM, "glExtGetTexturesQCOM", glsym_func_void);
539 FINDSYM(glsym_glExtGetBuffersQCOM, "glExtGetBuffersQCOM", glsym_func_void);
540 FINDSYM(glsym_glExtGetRenderbuffersQCOM, "glExtGetRenderbuffersQCOM", glsym_func_void);
541 FINDSYM(glsym_glExtGetFramebuffersQCOM, "glExtGetFramebuffersQCOM", glsym_func_void);
542 FINDSYM(glsym_glExtGetTexLevelParameterivQCOM, "glExtGetTexLevelParameterivQCOM", glsym_func_void);
543 FINDSYM(glsym_glExtTexObjectStateOverrideiQCOM, "glExtTexObjectStateOverrideiQCOM", glsym_func_void);
544 FINDSYM(glsym_glExtGetTexSubImageQCOM, "glExtGetTexSubImageQCOM", glsym_func_void);
545 FINDSYM(glsym_glExtGetBufferPointervQCOM, "glExtGetBufferPointervQCOM", glsym_func_void);
546
547 if (glsym_glExtGetTexturesQCOM) _gl_ext_entries[8].supported = 1;
548
549 /* GL_QCOM_extended_get2 */
550 FINDSYM(glsym_glExtGetShadersQCOM, "glExtGetShadersQCOM", glsym_func_void);
551 FINDSYM(glsym_glExtGetProgramsQCOM, "glExtGetProgramsQCOM", glsym_func_void);
552 FINDSYM(glsym_glExtIsProgramBinaryQCOM, "glExtIsProgramBinaryQCOM", glsym_func_uchar);
553 FINDSYM(glsym_glExtGetProgramBinarySourceQCOM, "glExtGetProgramBinarySourceQCOM", glsym_func_void);
554
555 if (glsym_glExtGetShadersQCOM) _gl_ext_entries[9].supported = 1;
556}
557
558static void
559_extensions_init(Render_Engine *re)
560{
561 int i;
562 const char *glexts, *evasglexts;
563
564 memset(_gl_ext_string, 0, 1024);
565 memset(_evasgl_ext_string, 0, 1024);
566
567 // GLES 2.0 Extensions
568 glexts = (const char*)glGetString(GL_EXTENSIONS);
569
570 DBG("--------GLES 2.0 Extensions--------");
571 for (i = 0; _gl_ext_entries[i].name != NULL; i++)
572 {
573 if ( (strstr(glexts, _gl_ext_entries[i].name) != NULL) ||
574 (strstr(glexts, _gl_ext_entries[i].real_name) != NULL) )
575 {
576 _gl_ext_entries[i].supported = 1;
577 strcat(_gl_ext_string, _gl_ext_entries[i].name);
578 strcat(_gl_ext_string, " ");
579 DBG("\t%s", _gl_ext_entries[i].name);
580 }
581
582 }
583 DBG(" ");
584
585#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
586 // EGL Extensions
587 evasglexts = glsym_eglQueryString(re->win->egl_disp, EGL_EXTENSIONS);
588#else
589 evasglexts = glXQueryExtensionsString(re->info->info.display,
590 re->info->info.screen);
591#endif
592
593 DBG("--------EvasGL Extensions----------");
594 for (i = 0; _evasgl_ext_entries[i].name != NULL; i++)
595 {
596 if ( (strstr(evasglexts, _evasgl_ext_entries[i].name) != NULL) ||
597 (strstr(evasglexts, _evasgl_ext_entries[i].real_name) != NULL) )
598 {
599 _evasgl_ext_entries[i].supported = 1;
600 strcat(_evasgl_ext_string, _evasgl_ext_entries[i].name);
601 strcat(_evasgl_ext_string, " ");
602 DBG("\t%s", _evasgl_ext_entries[i].name);
603 }
604 }
605 DBG(" ");
606}
607
608int _evas_engine_GL_X11_log_dom = -1;
609/* function tables - filled in later (func and parent func) */
610static Evas_Func func, pfunc;
611
612/* Function table for GL APIs */
613static Evas_GL_API gl_funcs;
614/*
615struct xrdb_user
616{
617 time_t last_stat;
618 time_t last_mtime;
619 XrmDatabase db;
620};
621static struct xrdb_user xrdb_user = {0, 0, NULL};
622
623static Eina_Bool
624xrdb_user_query(const char *name, const char *cls, char **type, XrmValue *val)
625{
626 time_t last = xrdb_user.last_stat, now = time(NULL);
627
628 xrdb_user.last_stat = now;
629 if (last != now) // don't stat() more than once every second
630 {
631 struct stat st;
632 const char *home = getenv("HOME");
633 char tmp[PATH_MAX];
634
635 if (!home) goto failed;
636 snprintf(tmp, sizeof(tmp), "%s/.Xdefaults", home);
637 if (stat(tmp, &st) != 0) goto failed;
638 if (xrdb_user.last_mtime != st.st_mtime)
639 {
640 if (xrdb_user.db) XrmDestroyDatabase(xrdb_user.db);
641 xrdb_user.db = XrmGetFileDatabase(tmp);
642 if (!xrdb_user.db) goto failed;
643 xrdb_user.last_mtime = st.st_mtime;
644 }
645 }
646
647 if (!xrdb_user.db) return EINA_FALSE;
648 return XrmGetResource(xrdb_user.db, name, cls, type, val);
649
650 failed:
651 if (xrdb_user.db)
652 {
653 XrmDestroyDatabase(xrdb_user.db);
654 xrdb_user.db = NULL;
655 }
656 xrdb_user.last_mtime = 0;
657 return EINA_FALSE;
658}
659*/
660
661static void *
662eng_info(Evas *e)
663{
664 Evas_Engine_Info_GL_X11 *info;
665
666 info = calloc(1, sizeof(Evas_Engine_Info_GL_X11));
667 info->magic.magic = rand();
668 info->func.best_visual_get = eng_best_visual_get;
669 info->func.best_colormap_get = eng_best_colormap_get;
670 info->func.best_depth_get = eng_best_depth_get;
671 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
672 return info;
673 e = NULL;
674}
675
676static void
677eng_info_free(Evas *e __UNUSED__, void *info)
678{
679 Evas_Engine_Info_GL_X11 *in;
680// dont free! why bother? its not worth it
681// eina_log_domain_unregister(_evas_engine_GL_X11_log_dom);
682 in = (Evas_Engine_Info_GL_X11 *)info;
683 free(in);
684}
685
686static int
687_re_wincheck(Render_Engine *re)
688{
689 if (re->win->surf) return 1;
690 eng_window_resurf(re->win);
691 if (!re->win->surf)
692 {
693 ERR("GL engine can't re-create window surface!");
694 }
695 return 0;
696}
697
698static void
699_re_winfree(Render_Engine *re)
700{
701 if (!re->win->surf) return;
702 eng_window_unsurf(re->win);
703}
704
705static Render_Engine_GL_Resource *
706_create_internal_glue_resources(void *data)
707{
708 Render_Engine *re = (Render_Engine *)data;
709 Render_Engine_GL_Resource *rsc;
710
711 rsc = calloc(1, sizeof(Render_Engine_GL_Resource));
712
713 if (!rsc) return NULL;
714
715#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
716 // EGL
717 int context_attrs[3];
718 context_attrs[0] = EGL_CONTEXT_CLIENT_VERSION;
719 context_attrs[1] = 2;
720 context_attrs[2] = EGL_NONE;
721
722 // Create resource surface for EGL
723 rsc->surface = eglCreateWindowSurface(re->win->egl_disp,
724 re->win->egl_config,
725 (EGLNativeWindowType)DefaultRootWindow(re->info->info.display),
726 NULL);
727 if (!rsc->surface)
728 {
729 ERR("Creating internal resource surface failed.");
730 free(rsc);
731 return NULL;
732 }
733
734 // Create a resource context for EGL
735 rsc->context = eglCreateContext(re->win->egl_disp,
736 re->win->egl_config,
737 re->win->egl_context[0], // Evas' GL Context
738 context_attrs);
739 if (!rsc->context)
740 {
741 ERR("Internal Resource Context Creations Failed.");
742 free(rsc);
743 return NULL;
744 }
745
746 // Add to the resource resource list for cleanup
747 LKL(resource_lock);
748 resource_list = eina_list_prepend(resource_list, rsc);
749 LKU(resource_lock);
750
751 // Set the resource in TLS
752 if (eina_tls_set(resource_key, (void*)rsc) == EINA_FALSE)
753 {
754 ERR("Failed setting TLS Resource");
755 free(rsc);
756 return NULL;
757 }
758
759#else
760 // GLX
761 rsc->context = glXCreateContext(re->info->info.display,
762 re->win->visualinfo,
763 re->win->context, // Evas' GL Context
764 1);
765 if (!rsc->context)
766 {
767 ERR("Internal Resource Context Creations Failed.");
768 free(rsc);
769 return NULL;
770 }
771
772 // Add to the resource resource list for cleanup
773 LKL(resource_lock);
774 resource_list = eina_list_prepend(resource_list, rsc);
775 LKU(resource_lock);
776
777 // Set the resource in TLS
778 if (eina_tls_set(resource_key, (void*)rsc) == EINA_FALSE)
779 {
780 ERR("Failed setting TLS Resource");
781 free(rsc);
782 return NULL;
783 }
784
785#endif
786
787
788 return rsc;
789}
790
791static int
792_destroy_internal_glue_resources(void *data)
793{
794 Render_Engine *re = (Render_Engine *)data;
795 Eina_List *l;
796 Render_Engine_GL_Resource *rsc;
797
798#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
799 // EGL
800 // Delete the Resources
801 LKL(resource_lock);
802 EINA_LIST_FOREACH(resource_list, l, rsc)
803 {
804 if (rsc->surface) eglDestroySurface(re->win->egl_disp, rsc->surface);
805 if (rsc->context) eglDestroyContext(re->win->egl_disp, rsc->context);
806 free(rsc);
807 }
808 eina_list_free(resource_list);
809 LKU(resource_lock);
810
811 // Destroy TLS
812 eina_tls_free(resource_key);
813#else
814 // GLX
815 // Delete the Resources
816 LKL(resource_lock);
817 EINA_LIST_FOREACH(resource_list, l, rsc)
818 {
819 if (rsc)
820 {
821 glXDestroyContext(re->info->info.display, rsc->context);
822 free(rsc);
823 }
824 }
825 eina_list_free(resource_list);
826 LKU(resource_lock);
827
828 // Destroy TLS
829 eina_tls_free(resource_key);
830#endif
831
832 return 1;
833}
834
835
836
837static int
838eng_setup(Evas *e, void *in)
839{
840 Render_Engine *re;
841 Evas_Engine_Info_GL_X11 *info;
842
843 info = (Evas_Engine_Info_GL_X11 *)in;
844 if (!e->engine.data.output)
845 {
846#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
847#else
848 int eb, evb;
849
850 if (!glXQueryExtension(info->info.display, &eb, &evb)) return 0;
851#endif
852 re = calloc(1, sizeof(Render_Engine));
853 if (!re) return 0;
854 re->info = info;
855 re->evas = e;
856 e->engine.data.output = re;
857 re->w = e->output.w;
858 re->h = e->output.h;
859 re->win = eng_window_new(re->info->info.display,
860 re->info->info.drawable,
861 re->info->info.screen,
862 re->info->info.visual,
863 re->info->info.colormap,
864 re->info->info.depth,
865 re->w,
866 re->h,
867 re->info->indirect,
868 re->info->info.destination_alpha,
869 re->info->info.rotation);
870 if (!re->win)
871 {
872 free(re);
873 e->engine.data.output = NULL;
874 return 0;
875 }
876
877 gl_wins++;
878/*
879 {
880 int status;
881 char *type = NULL;
882 XrmValue val;
883
884 re->xr.dpi = 75000; // dpy * 1000
885
886 status = xrdb_user_query("Xft.dpi", "Xft.Dpi", &type, &val);
887 if ((!status) || (!type))
888 {
889 if (!re->xrdb) re->xrdb = XrmGetDatabase(re->info->info.display);
890 if (re->xrdb)
891 status = XrmGetResource(re->xrdb,
892 "Xft.dpi", "Xft.Dpi", &type, &val);
893 }
894
895 if ((status) && (type))
896 {
897 if (!strcmp(type, "String"))
898 {
899 const char *str, *dp;
900
901 str = val.addr;
902 dp = strchr(str, '.');
903 if (!dp) dp = strchr(str, ',');
904
905 if (dp)
906 {
907 int subdpi, len, i;
908 char *buf;
909
910 buf = alloca(dp - str + 1);
911 strncpy(buf, str, dp - str);
912 buf[dp - str] = 0;
913 len = strlen(dp + 1);
914 subdpi = atoi(dp + 1);
915
916 if (len < 3)
917 {
918 for (i = len; i < 3; i++) subdpi *= 10;
919 }
920 else if (len > 3)
921 {
922 for (i = len; i > 3; i--) subdpi /= 10;
923 }
924 re->xr.dpi = atoi(buf) * 1000;
925 }
926 else
927 re->xr.dpi = atoi(str) * 1000;
928 evas_common_font_dpi_set(re->xr.dpi / 1000);
929 }
930 }
931 }
932 */
933 if (!initted)
934 {
935 evas_common_cpu_init();
936
937 evas_common_blend_init();
938 evas_common_image_init();
939 evas_common_convert_init();
940 evas_common_scale_init();
941 evas_common_rectangle_init();
942 evas_common_polygon_init();
943 evas_common_line_init();
944 evas_common_font_init();
945 evas_common_draw_init();
946 evas_common_tilebuf_init();
947
948 // Initialize TLS
949 if (eina_tls_new(&resource_key) == EINA_FALSE)
950 ERR("Error creating tls key");
951 DBG("TLS KEY create... %d", resource_key);
952
953 initted = 1;
954 }
955 }
956 else
957 {
958 re = e->engine.data.output;
959 if (_re_wincheck(re))
960 {
961 if ((re->info->info.display != re->win->disp) ||
962 (re->info->info.drawable != re->win->win) ||
963 (re->info->info.screen != re->win->screen) ||
964 (re->info->info.visual != re->win->visual) ||
965 (re->info->info.colormap != re->win->colormap) ||
966 (re->info->info.depth != re->win->depth) ||
967 (re->info->info.destination_alpha != re->win->alpha) ||
968 (re->info->info.rotation != re->win->rot))
969 {
970 int inc = 0;
971
972 if (re->win)
973 {
974 re->win->gl_context->references++;
975 eng_window_free(re->win);
976 inc = 1;
977 gl_wins--;
978 }
979 re->w = e->output.w;
980 re->h = e->output.h;
981 re->win = eng_window_new(re->info->info.display,
982 re->info->info.drawable,
983 re->info->info.screen,
984 re->info->info.visual,
985 re->info->info.colormap,
986 re->info->info.depth,
987 re->w,
988 re->h,
989 re->info->indirect,
990 re->info->info.destination_alpha,
991 re->info->info.rotation);
992 eng_window_use(re->win);
993 if (re->win) gl_wins++;
994 if ((re->win) && (inc))
995 re->win->gl_context->references--;
996 }
997 else if ((re->win->w != e->output.w) ||
998 (re->win->h != e->output.h))
999 {
1000 re->w = e->output.w;
1001 re->h = e->output.h;
1002 re->win->w = e->output.w;
1003 re->win->h = e->output.h;
1004 eng_window_use(re->win);
1005 evas_gl_common_context_resize(re->win->gl_context, re->win->w, re->win->h, re->win->rot);
1006 }
1007 }
1008 }
1009 if (!re->win)
1010 {
1011 free(re);
1012 return 0;
1013 }
1014
1015 if (!e->engine.data.output)
1016 {
1017 if (re->win)
1018 {
1019 eng_window_free(re->win);
1020 gl_wins--;
1021 }
1022 free(re);
1023 return 0;
1024 }
1025 re->tb = evas_common_tilebuf_new(re->win->w, re->win->h);
1026 if (!re->tb)
1027 {
1028 if (re->win)
1029 {
1030 eng_window_free(re->win);
1031 gl_wins--;
1032 }
1033 free(re);
1034 return 0;
1035 }
1036 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
1037
1038 if (!e->engine.data.context)
1039 e->engine.data.context =
1040 e->engine.func->context_new(e->engine.data.output);
1041 eng_window_use(re->win);
1042
1043 re->vsync = 0;
1044 _sym_init();
1045 _extensions_init(re);
1046
1047 // This is used in extensions. Not pretty but can't get display otherwise.
1048 current_engine = re;
1049
1050 return 1;
1051}
1052
1053static void
1054eng_output_free(void *data)
1055{
1056 Render_Engine *re;
1057
1058 re = (Render_Engine *)data;
1059
1060 if (re)
1061 {
1062// NOTE: XrmGetDatabase() result is shared per connection, do not free it.
1063// if (re->xrdb) XrmDestroyDatabase(re->xrdb);
1064
1065#if 0
1066#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1067 // Destroy the resource surface
1068 // Only required for EGL case
1069 if (re->surface)
1070 eglDestroySurface(re->win->egl_disp, re->surface);
1071#endif
1072
1073 // Destroy the resource context
1074 _destroy_internal_context(re, context);
1075#endif
1076 if (re->win)
1077 {
1078 if ((initted == 1) && (gl_wins == 1))
1079 _destroy_internal_glue_resources(re);
1080 eng_window_free(re->win);
1081 gl_wins--;
1082 }
1083 evas_common_tilebuf_free(re->tb);
1084 free(re);
1085 }
1086 if ((initted == 1) && (gl_wins == 0))
1087 {
1088 evas_common_image_shutdown();
1089 evas_common_font_shutdown();
1090 initted = 0;
1091 }
1092}
1093
1094static void
1095eng_output_resize(void *data, int w, int h)
1096{
1097 Render_Engine *re;
1098
1099 re = (Render_Engine *)data;
1100 re->win->w = w;
1101 re->win->h = h;
1102 eng_window_use(re->win);
1103 evas_gl_common_context_resize(re->win->gl_context, w, h, re->win->rot);
1104 evas_common_tilebuf_free(re->tb);
1105 re->tb = evas_common_tilebuf_new(w, h);
1106 if (re->tb)
1107 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
1108}
1109
1110static void
1111eng_output_tile_size_set(void *data, int w, int h)
1112{
1113 Render_Engine *re;
1114
1115 re = (Render_Engine *)data;
1116 evas_common_tilebuf_set_tile_size(re->tb, w, h);
1117}
1118
1119static void
1120eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
1121{
1122 Render_Engine *re;
1123
1124 re = (Render_Engine *)data;
1125 eng_window_use(re->win);
1126 evas_gl_common_context_resize(re->win->gl_context, re->win->w, re->win->h, re->win->rot);
1127 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
1128/*
1129 RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, re->win->w, re->win->h);
1130 if ((w <= 0) || (h <= 0)) return;
1131 if (!re->win->draw.redraw)
1132 {
1133#if 0
1134 re->win->draw.x1 = x;
1135 re->win->draw.y1 = y;
1136 re->win->draw.x2 = x + w - 1;
1137 re->win->draw.y2 = y + h - 1;
1138#else
1139 re->win->draw.x1 = 0;
1140 re->win->draw.y1 = 0;
1141 re->win->draw.x2 = re->win->w - 1;
1142 re->win->draw.y2 = re->win->h - 1;
1143#endif
1144 }
1145 else
1146 {
1147 if (x < re->win->draw.x1) re->win->draw.x1 = x;
1148 if (y < re->win->draw.y1) re->win->draw.y1 = y;
1149 if ((x + w - 1) > re->win->draw.x2) re->win->draw.x2 = x + w - 1;
1150 if ((y + h - 1) > re->win->draw.y2) re->win->draw.y2 = y + h - 1;
1151 }
1152 re->win->draw.redraw = 1;
1153 */
1154}
1155
1156static void
1157eng_output_redraws_rect_del(void *data __UNUSED__, int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
1158{
1159 Render_Engine *re;
1160
1161 re = (Render_Engine *)data;
1162 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
1163}
1164
1165static void
1166eng_output_redraws_clear(void *data)
1167{
1168 Render_Engine *re;
1169
1170 re = (Render_Engine *)data;
1171 evas_common_tilebuf_clear(re->tb);
1172/* re->win->draw.redraw = 0;*/
1173// INF("GL: finish update cycle!");
1174}
1175
1176/* vsync games - not for now though */
1177#define VSYNC_TO_SCREEN 1
1178
1179static void *
1180eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
1181{
1182 Render_Engine *re;
1183 Tilebuf_Rect *rects;
1184
1185 re = (Render_Engine *)data;
1186 /* get the upate rect surface - return engine data as dummy */
1187 rects = evas_common_tilebuf_get_render_rects(re->tb);
1188 if (rects)
1189 {
1190/*
1191 Tilebuf_Rect *r;
1192
1193 printf("REAAAAACCTS\n");
1194 EINA_INLIST_FOREACH(EINA_INLIST_GET(rects), r)
1195 {
1196 printf(" %i %i %ix%i\n", r->x, r->y, r->w, r->h);
1197 }
1198 */
1199 evas_common_tilebuf_free_render_rects(rects);
1200 evas_common_tilebuf_clear(re->tb);
1201#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1202 // dont need to for egl - eng_window_use() can check for other ctxt's
1203#else
1204 eng_window_use(NULL);
1205#endif
1206 eng_window_use(re->win);
1207 if (!_re_wincheck(re)) return NULL;
1208 evas_gl_common_context_flush(re->win->gl_context);
1209 evas_gl_common_context_newframe(re->win->gl_context);
1210 if (x) *x = 0;
1211 if (y) *y = 0;
1212 if (w) *w = re->win->w;
1213 if (h) *h = re->win->h;
1214 if (cx) *cx = 0;
1215 if (cy) *cy = 0;
1216 if (cw) *cw = re->win->w;
1217 if (ch) *ch = re->win->h;
1218 return re->win->gl_context->def_surface;
1219 }
1220 return NULL;
1221/*
1222 if (!re->win->draw.redraw) return NULL;
1223#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1224 // dont need to for egl - eng_window_use() can check for other ctxt's
1225#else
1226 eng_window_use(NULL);
1227#endif
1228 eng_window_use(re->win);
1229 if (!_re_wincheck(re)) return NULL;
1230 evas_gl_common_context_flush(re->win->gl_context);
1231 evas_gl_common_context_newframe(re->win->gl_context);
1232 if (x) *x = re->win->draw.x1;
1233 if (y) *y = re->win->draw.y1;
1234 if (w) *w = re->win->draw.x2 - re->win->draw.x1 + 1;
1235 if (h) *h = re->win->draw.y2 - re->win->draw.y1 + 1;
1236 if (cx) *cx = re->win->draw.x1;
1237 if (cy) *cy = re->win->draw.y1;
1238 if (cw) *cw = re->win->draw.x2 - re->win->draw.x1 + 1;
1239 if (ch) *ch = re->win->draw.y2 - re->win->draw.y1 + 1;
1240 return re->win->gl_context->def_surface;
1241 */
1242}
1243
1244//#define FRAMECOUNT 1
1245
1246#ifdef FRAMECOUNT
1247double
1248get_time(void)
1249{
1250 struct timeval timev;
1251
1252 gettimeofday(&timev, NULL);
1253 return (double)timev.tv_sec + (((double)timev.tv_usec) / 1000000);
1254}
1255#endif
1256
1257static int safe_native = -1;
1258
1259static void
1260eng_output_redraws_next_update_push(void *data, void *surface __UNUSED__, int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
1261{
1262 Render_Engine *re;
1263#ifdef FRAMECOUNT
1264 static double pt = 0.0;
1265 double ta, tb;
1266#endif
1267
1268 re = (Render_Engine *)data;
1269 /* put back update surface.. in this case just unflag redraw */
1270 if (!_re_wincheck(re)) return;
1271 re->win->draw.redraw = 0;
1272 re->win->draw.drew = 1;
1273 evas_gl_common_context_flush(re->win->gl_context);
1274 if (safe_native == -1)
1275 {
1276 const char *s = getenv("EVAS_GL_SAFE_NATIVE");
1277 safe_native = 0;
1278 if (s) safe_native = atoi(s);
1279 else
1280 {
1281 s = (const char *)glGetString(GL_RENDERER);
1282 if (s)
1283 {
1284 if (strstr(s, "PowerVR SGX 540") ||
1285 strstr(s, "Mali-400 MP"))
1286 safe_native = 1;
1287 }
1288 }
1289 }
1290#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1291 // this is needed to make sure all previous rendering is flushed to
1292 // buffers/surfaces
1293#ifdef FRAMECOUNT
1294 double t0 = get_time();
1295 ta = t0 - pt;
1296 pt = t0;
1297#endif
1298 // previous rendering should be done and swapped
1299 if (!safe_native) eglWaitNative(EGL_CORE_NATIVE_ENGINE);
1300#ifdef FRAMECOUNT
1301 double t1 = get_time();
1302 tb = t1 - t0;
1303 printf("... %1.5f -> %1.5f | ", ta, tb);
1304#endif
1305// if (eglGetError() != EGL_SUCCESS)
1306// {
1307// printf("Error: eglWaitNative(EGL_CORE_NATIVE_ENGINE) fail.\n");
1308// }
1309#else
1310 // previous rendering should be done and swapped
1311 if (!safe_native) glXWaitX();
1312#endif
1313//x// printf("frame -> push\n");
1314}
1315
1316static void
1317eng_output_flush(void *data)
1318{
1319 Render_Engine *re;
1320
1321 re = (Render_Engine *)data;
1322 if (!_re_wincheck(re)) return;
1323 if (!re->win->draw.drew) return;
1324//x// printf("frame -> flush\n");
1325 re->win->draw.drew = 0;
1326 eng_window_use(re->win);
1327
1328#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1329#ifdef FRAMECOUNT
1330 double t0 = get_time();
1331#endif
1332 if (!re->vsync)
1333 {
1334 if (re->info->vsync) eglSwapInterval(re->win->egl_disp, 1);
1335 else eglSwapInterval(re->win->egl_disp, 0);
1336 re->vsync = 1;
1337 }
1338 if (re->info->callback.pre_swap)
1339 {
1340 re->info->callback.pre_swap(re->info->callback.data, re->evas);
1341 }
1342 eglSwapBuffers(re->win->egl_disp, re->win->egl_surface[0]);
1343 if (!safe_native) eglWaitGL();
1344 if (re->info->callback.post_swap)
1345 {
1346 re->info->callback.post_swap(re->info->callback.data, re->evas);
1347 }
1348#ifdef FRAMECOUNT
1349 double t1 = get_time();
1350 printf("%1.5f\n", t1 - t0);
1351#endif
1352// if (eglGetError() != EGL_SUCCESS)
1353// {
1354// printf("Error: eglSwapBuffers() fail.\n");
1355// }
1356#else
1357#ifdef VSYNC_TO_SCREEN
1358 if ((re->info->vsync)/* || (1)*/)
1359 {
1360 if (glsym_glXSwapIntervalEXT)
1361 {
1362 if (!re->vsync)
1363 {
1364 if (re->info->vsync) glsym_glXSwapIntervalEXT(re->win->disp, re->win->win, 1);
1365 else glsym_glXSwapIntervalEXT(re->win->disp, re->win->win, 0);
1366 re->vsync = 1;
1367 }
1368 }
1369 if (glsym_glXSwapIntervalSGI)
1370 {
1371 if (!re->vsync)
1372 {
1373 if (re->info->vsync) glsym_glXSwapIntervalSGI(1);
1374 else glsym_glXSwapIntervalSGI(0);
1375 re->vsync = 1;
1376 }
1377 }
1378 else
1379 {
1380 if ((glsym_glXGetVideoSync) && (glsym_glXWaitVideoSync))
1381 {
1382 unsigned int rc;
1383
1384 glsym_glXGetVideoSync(&rc);
1385 glsym_glXWaitVideoSync(1, 0, &rc);
1386 }
1387 }
1388 }
1389# endif
1390 if (re->info->callback.pre_swap)
1391 {
1392 re->info->callback.pre_swap(re->info->callback.data, re->evas);
1393 }
1394/*
1395 if ((1)
1396// (re->win->draw.x1 == 0) &&
1397// (re->win->draw.y1 == 0) &&
1398// (re->win->draw.x2 == (re->win->w - 1)) &&
1399// (re->win->draw.y2 == (re->win->h - 1))
1400 )
1401 */
1402 {
1403 glXSwapBuffers(re->win->disp, re->win->win);
1404 if (!safe_native) glXWaitGL();
1405 }
1406/*
1407 else
1408 {
1409// FIXME: this doesn't work.. why oh why?
1410 int sx, sy, sw, sh;
1411
1412 // fimxe - reset when done
1413// glEnable(GL_SCISSOR_TEST);
1414 glDrawBuffer(GL_FRONT);
1415
1416 sx = re->win->draw.x1;
1417 sy = re->win->draw.y1;
1418 sw = (re->win->draw.x2 - re->win->draw.x1) + 1;
1419 sh = (re->win->draw.y2 - re->win->draw.y1) + 1;
1420 sy = re->win->h - sy - sh;
1421
1422// glScissor(sx, sy, sw, sh);
1423 glRasterPos2i(sx, re->win->h - sy);
1424 glCopyPixels(sx, sy, sw, sh, GL_COLOR);
1425 glRasterPos2i(0, 0);
1426
1427// glDisable(GL_SCISSOR_TEST);
1428 glDrawBuffer(GL_BACK);
1429 glFlush();
1430 }
1431 */
1432 if (re->info->callback.post_swap)
1433 {
1434 re->info->callback.post_swap(re->info->callback.data, re->evas);
1435 }
1436#endif
1437}
1438
1439static void
1440eng_output_idle_flush(void *data)
1441{
1442 Render_Engine *re;
1443
1444 re = (Render_Engine *)data;
1445}
1446
1447static void
1448eng_output_dump(void *data)
1449{
1450 Render_Engine *re;
1451
1452 re = (Render_Engine *)data;
1453 evas_common_image_image_all_unload();
1454 evas_common_font_font_all_unload();
1455 evas_gl_common_image_all_unload(re->win->gl_context);
1456 _re_winfree(re);
1457}
1458
1459static void
1460eng_context_cutout_add(void *data __UNUSED__, void *context, int x, int y, int w, int h)
1461{
1462// Render_Engine *re;
1463//
1464// re = (Render_Engine *)data;
1465// re->win->gl_context->dc = context;
1466 evas_common_draw_context_add_cutout(context, x, y, w, h);
1467}
1468
1469static void
1470eng_context_cutout_clear(void *data __UNUSED__, void *context)
1471{
1472// Render_Engine *re;
1473//
1474// re = (Render_Engine *)data;
1475// re->win->gl_context->dc = context;
1476 evas_common_draw_context_clear_cutouts(context);
1477}
1478
1479static void
1480eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h)
1481{
1482 Render_Engine *re;
1483
1484 re = (Render_Engine *)data;
1485 eng_window_use(re->win);
1486 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
1487 re->win->gl_context->dc = context;
1488 evas_gl_common_rect_draw(re->win->gl_context, x, y, w, h);
1489}
1490
1491static void
1492eng_line_draw(void *data, void *context, void *surface, int x1, int y1, int x2, int y2)
1493{
1494 Render_Engine *re;
1495
1496 re = (Render_Engine *)data;
1497 eng_window_use(re->win);
1498 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
1499 re->win->gl_context->dc = context;
1500 evas_gl_common_line_draw(re->win->gl_context, x1, y1, x2, y2);
1501}
1502
1503static void *
1504eng_polygon_point_add(void *data, void *context __UNUSED__, void *polygon, int x, int y)
1505{
1506 Render_Engine *re;
1507
1508 re = (Render_Engine *)data;
1509 return evas_gl_common_poly_point_add(polygon, x, y);
1510}
1511
1512static void *
1513eng_polygon_points_clear(void *data, void *context __UNUSED__, void *polygon)
1514{
1515 Render_Engine *re;
1516
1517 re = (Render_Engine *)data;
1518 return evas_gl_common_poly_points_clear(polygon);
1519}
1520
1521static void
1522eng_polygon_draw(void *data, void *context, void *surface __UNUSED__, void *polygon, int x, int y)
1523{
1524 Render_Engine *re;
1525
1526 re = (Render_Engine *)data;
1527 eng_window_use(re->win);
1528 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
1529 re->win->gl_context->dc = context;
1530 evas_gl_common_poly_draw(re->win->gl_context, polygon, x, y);
1531}
1532
1533static int
1534eng_image_alpha_get(void *data __UNUSED__, void *image)
1535{
1536// Render_Engine *re;
1537 Evas_GL_Image *im;
1538
1539// re = (Render_Engine *)data;
1540 if (!image) return 1;
1541 im = image;
1542 return im->alpha;
1543}
1544
1545static int
1546eng_image_colorspace_get(void *data __UNUSED__, void *image)
1547{
1548// Render_Engine *re;
1549 Evas_GL_Image *im;
1550
1551// re = (Render_Engine *)data;
1552 if (!image) return EVAS_COLORSPACE_ARGB8888;
1553 im = image;
1554 return im->cs.space;
1555}
1556
1557static void
1558eng_image_mask_create(void *data __UNUSED__, void *image)
1559{
1560 Evas_GL_Image *im;
1561
1562 if (!image) return;
1563 im = image;
1564 if (!im->im->image.data)
1565 evas_cache_image_load_data(&im->im->cache_entry);
1566 if (!im->tex)
1567 im->tex = evas_gl_common_texture_new(im->gc, im->im);
1568}
1569
1570
1571static void *
1572eng_image_alpha_set(void *data, void *image, int has_alpha)
1573{
1574 Render_Engine *re;
1575 Evas_GL_Image *im;
1576
1577 re = (Render_Engine *)data;
1578 if (!image) return NULL;
1579 im = image;
1580 if (im->alpha == has_alpha) return image;
1581 if (im->native.data)
1582 {
1583 im->alpha = has_alpha;
1584 return image;
1585 }
1586 eng_window_use(re->win);
1587 if ((im->tex) && (im->tex->pt->dyn.img))
1588 {
1589 im->alpha = has_alpha;
1590 im->tex->alpha = im->alpha;
1591 return image;
1592 }
1593 /* FIXME: can move to gl_common */
1594 if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return im;
1595 if ((has_alpha) && (im->im->cache_entry.flags.alpha)) return image;
1596 else if ((!has_alpha) && (!im->im->cache_entry.flags.alpha)) return image;
1597 if (im->references > 1)
1598 {
1599 Evas_GL_Image *im_new;
1600
1601 im_new = evas_gl_common_image_new_from_copied_data
1602 (im->gc, im->im->cache_entry.w, im->im->cache_entry.h,
1603 im->im->image.data,
1604 eng_image_alpha_get(data, image),
1605 eng_image_colorspace_get(data, image));
1606 if (!im_new) return im;
1607 evas_gl_common_image_free(im);
1608 im = im_new;
1609 }
1610 else
1611 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
1612 return evas_gl_common_image_alpha_set(im, has_alpha ? 1 : 0);
1613// im->im->cache_entry.flags.alpha = has_alpha ? 1 : 0;
1614// return image;
1615}
1616
1617static void *
1618eng_image_border_set(void *data __UNUSED__, void *image, int l __UNUSED__, int r __UNUSED__, int t __UNUSED__, int b __UNUSED__)
1619{
1620// Render_Engine *re;
1621//
1622// re = (Render_Engine *)data;
1623 return image;
1624}
1625
1626static void
1627eng_image_border_get(void *data __UNUSED__, void *image __UNUSED__, int *l __UNUSED__, int *r __UNUSED__, int *t __UNUSED__, int *b __UNUSED__)
1628{
1629// Render_Engine *re;
1630//
1631// re = (Render_Engine *)data;
1632}
1633
1634static char *
1635eng_image_comment_get(void *data __UNUSED__, void *image, char *key __UNUSED__)
1636{
1637// Render_Engine *re;
1638 Evas_GL_Image *im;
1639
1640// re = (Render_Engine *)data;
1641 if (!image) return NULL;
1642 im = image;
1643 if (!im->im) return NULL;
1644 return im->im->info.comment;
1645}
1646
1647static char *
1648eng_image_format_get(void *data __UNUSED__, void *image)
1649{
1650// Render_Engine *re;
1651 Evas_GL_Image *im;
1652
1653// re = (Render_Engine *)data;
1654 im = image;
1655 return NULL;
1656}
1657
1658static void
1659eng_image_colorspace_set(void *data, void *image, int cspace)
1660{
1661 Render_Engine *re;
1662 Evas_GL_Image *im;
1663
1664 re = (Render_Engine *)data;
1665 if (!image) return;
1666 im = image;
1667 if (im->native.data) return;
1668 /* FIXME: can move to gl_common */
1669 if (im->cs.space == cspace) return;
1670 eng_window_use(re->win);
1671 evas_cache_image_colorspace(&im->im->cache_entry, cspace);
1672 switch (cspace)
1673 {
1674 case EVAS_COLORSPACE_ARGB8888:
1675 if (im->cs.data)
1676 {
1677 if (!im->cs.no_free) free(im->cs.data);
1678 im->cs.data = NULL;
1679 im->cs.no_free = 0;
1680 }
1681 break;
1682 case EVAS_COLORSPACE_YCBCR422P601_PL:
1683 case EVAS_COLORSPACE_YCBCR422P709_PL:
1684 case EVAS_COLORSPACE_YCBCR422601_PL:
1685 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
1686 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
1687 if (im->tex) evas_gl_common_texture_free(im->tex);
1688 im->tex = NULL;
1689 if (im->cs.data)
1690 {
1691 if (!im->cs.no_free) free(im->cs.data);
1692 }
1693 if (im->im->cache_entry.h > 0)
1694 im->cs.data =
1695 calloc(1, im->im->cache_entry.h * sizeof(unsigned char *) * 2);
1696 else
1697 im->cs.data = NULL;
1698 im->cs.no_free = 0;
1699 break;
1700 default:
1701 abort();
1702 break;
1703 }
1704 im->cs.space = cspace;
1705}
1706
1707/////////////////////////////////////////////////////////////////////////
1708//
1709//
1710typedef struct _Native Native;
1711
1712struct _Native
1713{
1714 Evas_Native_Surface ns;
1715 Pixmap pixmap;
1716 Visual *visual;
1717
1718#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1719 void *egl_surface;
1720#else
1721 void *fbc;
1722 XID glx_pixmap;
1723#endif
1724};
1725
1726// FIXME: this is enabled so updates happen - but its SLOOOOOOOOOOOOOOOW
1727// (i am sure this is the reason) not to mention seemingly superfluous. but
1728// i need to enable it for it to work on fglrx at least. havent tried nvidia.
1729//
1730// why is this the case? does anyone know? has anyone tried it on other gfx
1731// drivers?
1732//
1733//#define GLX_TEX_PIXMAP_RECREATE 1
1734
1735static void
1736_native_bind_cb(void *data, void *image)
1737{
1738 Evas_GL_Image *im = image;
1739 Native *n = im->native.data;
1740
1741 if (n->ns.type == EVAS_NATIVE_SURFACE_X11)
1742 {
1743#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1744 if (n->egl_surface)
1745 {
1746 if (glsym_glEGLImageTargetTexture2DOES)
1747 {
1748 glsym_glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, n->egl_surface);
1749 if (eglGetError() != EGL_SUCCESS)
1750 ERR("glEGLImageTargetTexture2DOES() failed.");
1751 }
1752 else
1753 ERR("Try glEGLImageTargetTexture2DOES on EGL with no support");
1754 }
1755#else
1756# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
1757 Render_Engine *re = data;
1758
1759 if (glsym_glXBindTexImage)
1760 {
1761 glsym_glXBindTexImage(re->win->disp, n->glx_pixmap,
1762 GLX_FRONT_LEFT_EXT, NULL);
1763 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1764 }
1765 else
1766 ERR("Try glXBindTexImage on GLX with no support");
1767# endif
1768#endif
1769 }
1770 else if (n->ns.type == EVAS_NATIVE_SURFACE_OPENGL)
1771 {
1772 glBindTexture(GL_TEXTURE_2D, n->ns.data.opengl.texture_id);
1773 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1774 }
1775 return;
1776 data = NULL;
1777}
1778
1779static void
1780_native_unbind_cb(void *data, void *image)
1781{
1782 Evas_GL_Image *im = image;
1783 Native *n = im->native.data;
1784
1785 if (n->ns.type == EVAS_NATIVE_SURFACE_X11)
1786 {
1787#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1788 // nothing
1789#else
1790# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
1791 Render_Engine *re = data;
1792
1793 if (glsym_glXReleaseTexImage)
1794 {
1795 glsym_glXReleaseTexImage(re->win->disp, n->glx_pixmap,
1796 GLX_FRONT_LEFT_EXT);
1797 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1798 }
1799 else
1800 ERR("Try glXReleaseTexImage on GLX with no support");
1801# endif
1802#endif
1803 }
1804 else if (n->ns.type == EVAS_NATIVE_SURFACE_OPENGL)
1805 {
1806 glBindTexture(GL_TEXTURE_2D, 0);
1807 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1808 }
1809 return;
1810 data = NULL;
1811}
1812
1813static void
1814_native_free_cb(void *data, void *image)
1815{
1816 Render_Engine *re = data;
1817 Evas_GL_Image *im = image;
1818 Native *n = im->native.data;
1819 uint32_t pmid, texid;
1820
1821 if (n->ns.type == EVAS_NATIVE_SURFACE_X11)
1822 {
1823 pmid = n->pixmap;
1824 eina_hash_del(re->win->gl_context->shared->native_pm_hash, &pmid, im);
1825#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1826 if (n->egl_surface)
1827 {
1828 if (glsym_eglDestroyImage)
1829 {
1830 glsym_eglDestroyImage(re->win->egl_disp,
1831 n->egl_surface);
1832 if (eglGetError() != EGL_SUCCESS)
1833 ERR("eglDestroyImage() failed.");
1834 }
1835 else
1836 ERR("Try eglDestroyImage on EGL with no support");
1837 }
1838#else
1839# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
1840 if (n->glx_pixmap)
1841 {
1842 if (im->native.loose)
1843 {
1844 if (glsym_glXReleaseTexImage)
1845 {
1846 glsym_glXReleaseTexImage(re->win->disp, n->glx_pixmap,
1847 GLX_FRONT_LEFT_EXT);
1848 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1849 }
1850 else
1851 ERR("Try glXReleaseTexImage on GLX with no support");
1852 }
1853 if (glsym_glXDestroyPixmap)
1854 {
1855 glsym_glXDestroyPixmap(re->win->disp, n->glx_pixmap);
1856 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
1857 }
1858 else
1859 ERR("Try glXDestroyPixmap on GLX with no support");
1860 n->glx_pixmap = 0;
1861 }
1862# endif
1863#endif
1864 }
1865 else if (n->ns.type == EVAS_NATIVE_SURFACE_OPENGL)
1866 {
1867 texid = n->ns.data.opengl.texture_id;
1868 eina_hash_del(re->win->gl_context->shared->native_tex_hash, &texid, im);
1869 }
1870 im->native.data = NULL;
1871 im->native.func.data = NULL;
1872 im->native.func.bind = NULL;
1873 im->native.func.unbind = NULL;
1874 im->native.func.free = NULL;
1875 free(n);
1876}
1877
1878static void *
1879eng_image_native_set(void *data, void *image, void *native)
1880{
1881 Render_Engine *re = (Render_Engine *)data;
1882 Evas_Native_Surface *ns = native;
1883 Evas_GL_Image *im = image, *im2 = NULL;
1884 Visual *vis = NULL;
1885 Pixmap pm = 0;
1886 Native *n = NULL;
1887 uint32_t pmid, texid;
1888 unsigned int tex = 0;
1889 unsigned int fbo = 0;
1890
1891 if (!im)
1892 {
1893 if ((!ns) && (ns->type == EVAS_NATIVE_SURFACE_OPENGL))
1894 {
1895 im = evas_gl_common_image_new_from_data(re->win->gl_context,
1896 ns->data.opengl.w,
1897 ns->data.opengl.h,
1898 NULL, 1,
1899 EVAS_COLORSPACE_ARGB8888);
1900 }
1901 else
1902 return NULL;
1903 }
1904
1905 if (ns)
1906 {
1907 if (ns->type == EVAS_NATIVE_SURFACE_X11)
1908 {
1909 vis = ns->data.x11.visual;
1910 pm = ns->data.x11.pixmap;
1911 if (im->native.data)
1912 {
1913 Evas_Native_Surface *ens = im->native.data;
1914 if ((ens->data.x11.visual == vis) &&
1915 (ens->data.x11.pixmap == pm))
1916 return im;
1917 }
1918 }
1919 else if (ns->type == EVAS_NATIVE_SURFACE_OPENGL)
1920 {
1921 tex = ns->data.opengl.texture_id;
1922 fbo = ns->data.opengl.framebuffer_id;
1923 if (im->native.data)
1924 {
1925 Evas_Native_Surface *ens = im->native.data;
1926 if ((ens->data.opengl.texture_id == tex) &&
1927 (ens->data.opengl.framebuffer_id == fbo))
1928 return im;
1929 }
1930 }
1931 }
1932 if ((!ns) && (!im->native.data)) return im;
1933
1934 eng_window_use(re->win);
1935
1936 if (im->native.data)
1937 {
1938 if (im->native.func.free)
1939 im->native.func.free(im->native.func.data, im);
1940 evas_gl_common_image_native_disable(im);
1941 }
1942
1943 if (!ns) return im;
1944
1945 if (ns->type == EVAS_NATIVE_SURFACE_X11)
1946 {
1947 pmid = pm;
1948 im2 = eina_hash_find(re->win->gl_context->shared->native_pm_hash, &pmid);
1949 if (im2 == im) return im;
1950 if (im2)
1951 {
1952 n = im2->native.data;
1953 if (n)
1954 {
1955 evas_gl_common_image_ref(im2);
1956 evas_gl_common_image_free(im);
1957 return im2;
1958 }
1959 }
1960 }
1961 else if (ns->type == EVAS_NATIVE_SURFACE_OPENGL)
1962 {
1963 texid = tex;
1964 im2 = eina_hash_find(re->win->gl_context->shared->native_tex_hash, &texid);
1965 if (im2 == im) return im;
1966 if (im2)
1967 {
1968 n = im2->native.data;
1969 if (n)
1970 {
1971 evas_gl_common_image_ref(im2);
1972 evas_gl_common_image_free(im);
1973 return im2;
1974 }
1975 }
1976
1977 }
1978 im2 = evas_gl_common_image_new_from_data(re->win->gl_context,
1979 im->w, im->h, NULL, im->alpha,
1980 EVAS_COLORSPACE_ARGB8888);
1981 evas_gl_common_image_free(im);
1982 im = im2;
1983 if (ns->type == EVAS_NATIVE_SURFACE_X11)
1984 {
1985#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
1986 if (native)
1987 {
1988 n = calloc(1, sizeof(Native));
1989 if (n)
1990 {
1991 EGLConfig egl_config;
1992 int config_attrs[20];
1993 int num_config, i = 0;
1994
1995 eina_hash_add(re->win->gl_context->shared->native_pm_hash, &pmid, im);
1996
1997 config_attrs[i++] = EGL_RED_SIZE;
1998 config_attrs[i++] = 8;
1999 config_attrs[i++] = EGL_GREEN_SIZE;
2000 config_attrs[i++] = 8;
2001 config_attrs[i++] = EGL_BLUE_SIZE;
2002 config_attrs[i++] = 8;
2003 config_attrs[i++] = EGL_ALPHA_SIZE;
2004 config_attrs[i++] = 8;
2005 config_attrs[i++] = EGL_DEPTH_SIZE;
2006 config_attrs[i++] = 0;
2007 config_attrs[i++] = EGL_STENCIL_SIZE;
2008 config_attrs[i++] = 0;
2009 config_attrs[i++] = EGL_RENDERABLE_TYPE;
2010 config_attrs[i++] = EGL_OPENGL_ES2_BIT;
2011 config_attrs[i++] = EGL_SURFACE_TYPE;
2012 config_attrs[i++] = EGL_PIXMAP_BIT;
2013 config_attrs[i++] = EGL_NONE;
2014
2015 if (!eglChooseConfig(re->win->egl_disp, config_attrs,
2016 &egl_config, 1, &num_config))
2017 ERR("eglChooseConfig() failed for pixmap 0x%x, num_config = %i", (unsigned int)pm, num_config);
2018 memcpy(&(n->ns), ns, sizeof(Evas_Native_Surface));
2019 n->pixmap = pm;
2020 n->visual = vis;
2021 if (glsym_eglCreateImage)
2022 n->egl_surface = glsym_eglCreateImage(re->win->egl_disp,
2023 EGL_NO_CONTEXT,
2024 EGL_NATIVE_PIXMAP_KHR,
2025 (void *)pm,
2026 NULL);
2027 else
2028 ERR("Try eglCreateImage on EGL with no support");
2029 if (!n->egl_surface)
2030 ERR("eglCreatePixmapSurface() for 0x%x failed", (unsigned int)pm);
2031 im->native.yinvert = 1;
2032 im->native.loose = 0;
2033 im->native.data = n;
2034 im->native.func.data = re;
2035 im->native.func.bind = _native_bind_cb;
2036 im->native.func.unbind = _native_unbind_cb;
2037 im->native.func.free = _native_free_cb;
2038 im->native.target = GL_TEXTURE_2D;
2039 im->native.mipmap = 0;
2040 evas_gl_common_image_native_enable(im);
2041 }
2042 }
2043#else
2044# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
2045 if (native)
2046 {
2047 int dummy;
2048 unsigned int w, h, depth = 32, border;
2049 Window wdummy;
2050
2051 // fixme: round trip :(
2052 XGetGeometry(re->win->disp, pm, &wdummy, &dummy, &dummy,
2053 &w, &h, &border, &depth);
2054 n = calloc(1, sizeof(Native));
2055 if (n)
2056 {
2057 int pixmap_att[20];
2058 unsigned int target = 0;
2059 unsigned int i = 0;
2060
2061 eina_hash_add(re->win->gl_context->shared->native_pm_hash, &pmid, im);
2062 if ((re->win->depth_cfg[depth].tex_target &
2063 GLX_TEXTURE_2D_BIT_EXT)
2064 // && (1) // we assume npo2 for now
2065 // size is pow2 || mnpo2 supported
2066 )
2067 target = GLX_TEXTURE_2D_EXT;
2068 else if ((re->win->depth_cfg[depth].tex_target &
2069 GLX_TEXTURE_RECTANGLE_BIT_EXT))
2070 {
2071 ERR("rect!!! (not handled)");
2072 target = GLX_TEXTURE_RECTANGLE_EXT;
2073 }
2074 if (!target)
2075 {
2076 ERR("broken text-from-pixmap");
2077 if (!(re->win->depth_cfg[depth].tex_target &
2078 GLX_TEXTURE_2D_BIT_EXT))
2079 target = GLX_TEXTURE_RECTANGLE_EXT;
2080 else if (!(re->win->depth_cfg[depth].tex_target &
2081 GLX_TEXTURE_RECTANGLE_BIT_EXT))
2082 target = GLX_TEXTURE_2D_EXT;
2083 }
2084
2085
2086 pixmap_att[i++] = GLX_TEXTURE_FORMAT_EXT;
2087 pixmap_att[i++] = re->win->depth_cfg[depth].tex_format;
2088 pixmap_att[i++] = GLX_MIPMAP_TEXTURE_EXT;
2089 pixmap_att[i++] = re->win->depth_cfg[depth].mipmap;
2090
2091 if (target)
2092 {
2093 pixmap_att[i++] = GLX_TEXTURE_TARGET_EXT;
2094 pixmap_att[i++] = target;
2095 }
2096
2097 pixmap_att[i++] = 0;
2098
2099 memcpy(&(n->ns), ns, sizeof(Evas_Native_Surface));
2100 n->pixmap = pm;
2101 n->visual = vis;
2102 n->fbc = re->win->depth_cfg[depth].fbc;
2103 if (glsym_glXCreatePixmap)
2104 n->glx_pixmap = glsym_glXCreatePixmap(re->win->disp,
2105 n->fbc,
2106 n->pixmap,
2107 pixmap_att);
2108 else
2109 ERR("Try glXCreatePixmap on GLX with no support");
2110 if (n->glx_pixmap)
2111 {
2112// printf("%p: new native texture for %x | %4i x %4i @ %2i = %p\n",
2113// n, pm, w, h, depth, n->glx_pixmap);
2114 if (!target)
2115 {
2116 ERR("no target :(");
2117 if (glsym_glXQueryDrawable)
2118 glsym_glXQueryDrawable(re->win->disp,
2119 n->pixmap,
2120 GLX_TEXTURE_TARGET_EXT,
2121 &target);
2122 }
2123 if (target == GLX_TEXTURE_2D_EXT)
2124 {
2125 im->native.target = GL_TEXTURE_2D;
2126 im->native.mipmap = re->win->depth_cfg[depth].mipmap;
2127 }
2128# ifdef GL_TEXTURE_RECTANGLE_ARB
2129 else if (target == GLX_TEXTURE_RECTANGLE_EXT)
2130 {
2131 im->native.target = GL_TEXTURE_RECTANGLE_ARB;
2132 im->native.mipmap = 0;
2133 }
2134# endif
2135 else
2136 {
2137 im->native.target = GL_TEXTURE_2D;
2138 im->native.mipmap = 0;
2139 ERR("still unknown target");
2140 }
2141 }
2142 else
2143 ERR("GLX Pixmap create fail");
2144 im->native.yinvert = re->win->depth_cfg[depth].yinvert;
2145 im->native.loose = re->win->detected.loose_binding;
2146 im->native.data = n;
2147 im->native.func.data = re;
2148 im->native.func.bind = _native_bind_cb;
2149 im->native.func.unbind = _native_unbind_cb;
2150 im->native.func.free = _native_free_cb;
2151
2152 evas_gl_common_image_native_enable(im);
2153 }
2154 }
2155# endif
2156#endif
2157 }
2158 else if (ns->type == EVAS_NATIVE_SURFACE_OPENGL)
2159 {
2160 if (native)
2161 {
2162 n = calloc(1, sizeof(Native));
2163 if (n)
2164 {
2165 memcpy(&(n->ns), ns, sizeof(Evas_Native_Surface));
2166
2167 eina_hash_add(re->win->gl_context->shared->native_tex_hash, &texid, im);
2168
2169 n->pixmap = 0;
2170 n->visual = 0;
2171#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2172 n->egl_surface = 0;
2173#else
2174 n->fbc = 0;
2175 n->glx_pixmap = 0;
2176#endif
2177
2178 im->native.yinvert = 0;
2179 im->native.loose = 0;
2180 im->native.data = n;
2181 im->native.func.data = re;
2182 im->native.func.bind = _native_bind_cb;
2183 im->native.func.unbind = _native_unbind_cb;
2184 im->native.func.free = _native_free_cb;
2185 im->native.target = GL_TEXTURE_2D;
2186 im->native.mipmap = 0;
2187
2188 // FIXME: need to implement mapping sub texture regions
2189 // x, y, w, h for possible texture atlasing
2190
2191 evas_gl_common_image_native_enable(im);
2192 }
2193 }
2194
2195 }
2196 return im;
2197}
2198
2199static void *
2200eng_image_native_get(void *data __UNUSED__, void *image)
2201{
2202 Evas_GL_Image *im = image;
2203 Native *n;
2204 if (!im) return NULL;
2205 n = im->native.data;
2206 if (!n) return NULL;
2207 return &(n->ns);
2208}
2209
2210#if 0 // filtering disabled
2211static void
2212eng_image_draw_filtered(void *data, void *context, void *surface,
2213 void *image, Evas_Filter_Info *filter)
2214{
2215 Render_Engine *re = data;
2216
2217 if (!image) return;
2218 eng_window_use(re->win);
2219 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
2220 re->win->gl_context->dc = context;
2221
2222 evas_gl_common_filter_draw(re->win->gl_context, image, filter);
2223}
2224
2225static Filtered_Image *
2226eng_image_filtered_get(void *im, uint8_t *key, size_t keylen)
2227{
2228 return evas_gl_common_image_filtered_get(im, key, keylen);
2229}
2230
2231static Filtered_Image *
2232eng_image_filtered_save(void *im, void *fim, uint8_t *key, size_t keylen)
2233{
2234 return evas_gl_common_image_filtered_save(im, fim, key, keylen);
2235}
2236
2237static void
2238eng_image_filtered_free(void *im, Filtered_Image *fim)
2239{
2240 evas_gl_common_image_filtered_free(im, fim);
2241}
2242#endif
2243
2244
2245//
2246//
2247/////////////////////////////////////////////////////////////////////////
2248
2249static void *
2250eng_image_load(void *data, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
2251{
2252 Render_Engine *re;
2253
2254 re = (Render_Engine *)data;
2255 *error = EVAS_LOAD_ERROR_NONE;
2256 eng_window_use(re->win);
2257 return evas_gl_common_image_load(re->win->gl_context, file, key, lo, error);
2258}
2259
2260static void *
2261eng_image_new_from_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace)
2262{
2263 Render_Engine *re;
2264
2265 re = (Render_Engine *)data;
2266 eng_window_use(re->win);
2267 return evas_gl_common_image_new_from_data(re->win->gl_context, w, h, image_data, alpha, cspace);
2268}
2269
2270static void *
2271eng_image_new_from_copied_data(void *data, int w, int h, DATA32 *image_data, int alpha, int cspace)
2272{
2273 Render_Engine *re;
2274
2275 re = (Render_Engine *)data;
2276 eng_window_use(re->win);
2277 return evas_gl_common_image_new_from_copied_data(re->win->gl_context, w, h, image_data, alpha, cspace);
2278}
2279
2280static void
2281eng_image_free(void *data, void *image)
2282{
2283 Render_Engine *re;
2284
2285 re = (Render_Engine *)data;
2286 if (!image) return;
2287 eng_window_use(re->win);
2288 evas_gl_common_image_free(image);
2289}
2290
2291static void
2292eng_image_size_get(void *data __UNUSED__, void *image, int *w, int *h)
2293{
2294 if (!image)
2295 {
2296 *w = 0;
2297 *h = 0;
2298 return;
2299 }
2300 if (w) *w = ((Evas_GL_Image *)image)->w;
2301 if (h) *h = ((Evas_GL_Image *)image)->h;
2302}
2303
2304static void *
2305eng_image_size_set(void *data, void *image, int w, int h)
2306{
2307 Render_Engine *re;
2308 Evas_GL_Image *im = image;
2309 Evas_GL_Image *im_old;
2310
2311 re = (Render_Engine *)data;
2312 if (!im) return NULL;
2313 if (im->native.data)
2314 {
2315 im->w = w;
2316 im->h = h;
2317 return image;
2318 }
2319 eng_window_use(re->win);
2320 if ((im->tex) && (im->tex->pt->dyn.img))
2321 {
2322 evas_gl_common_texture_free(im->tex);
2323 im->tex = NULL;
2324 im->w = w;
2325 im->h = h;
2326 im->tex = evas_gl_common_texture_dynamic_new(im->gc, im);
2327 return image;
2328 }
2329 im_old = image;
2330
2331 switch (eng_image_colorspace_get(data, image))
2332 {
2333 case EVAS_COLORSPACE_YCBCR422P601_PL:
2334 case EVAS_COLORSPACE_YCBCR422P709_PL:
2335 case EVAS_COLORSPACE_YCBCR422601_PL:
2336 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
2337 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
2338 w &= ~0x1;
2339 break;
2340 }
2341
2342 if ((im_old) &&
2343 ((int)im_old->im->cache_entry.w == w) &&
2344 ((int)im_old->im->cache_entry.h == h))
2345 return image;
2346 if (im_old)
2347 {
2348 im = evas_gl_common_image_new(re->win->gl_context, w, h,
2349 eng_image_alpha_get(data, image),
2350 eng_image_colorspace_get(data, image));
2351 /*
2352 evas_common_load_image_data_from_file(im_old->im);
2353 if (im_old->im->image->data)
2354 {
2355 evas_common_blit_rectangle(im_old->im, im->im, 0, 0, w, h, 0, 0);
2356 evas_common_cpu_end_opt();
2357 }
2358 */
2359 evas_gl_common_image_free(im_old);
2360 }
2361 else
2362 im = evas_gl_common_image_new(re->win->gl_context, w, h, 1, EVAS_COLORSPACE_ARGB8888);
2363 return im;
2364}
2365
2366static void *
2367eng_image_dirty_region(void *data, void *image, int x, int y, int w, int h)
2368{
2369 Render_Engine *re;
2370 Evas_GL_Image *im = image;
2371
2372 re = (Render_Engine *)data;
2373 if (!image) return NULL;
2374 if (im->native.data) return image;
2375 eng_window_use(re->win);
2376 evas_gl_common_image_dirty(image, x, y, w, h);
2377 return image;
2378}
2379
2380static void *
2381eng_image_data_get(void *data, void *image, int to_write, DATA32 **image_data, int *err)
2382{
2383 Render_Engine *re;
2384 Evas_GL_Image *im;
2385 int error;
2386
2387 re = (Render_Engine *)data;
2388 if (!image)
2389 {
2390 *image_data = NULL;
2391 if (err) *err = EVAS_LOAD_ERROR_GENERIC;
2392 return NULL;
2393 }
2394 im = image;
2395 if (im->native.data)
2396 {
2397 *image_data = NULL;
2398 if (err) *err = EVAS_LOAD_ERROR_NONE;
2399 return im;
2400 }
2401
2402#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2403 eng_window_use(re->win);
2404
2405 if ((im->tex) && (im->tex->pt) && (im->tex->pt->dyn.img) && (im->cs.space == EVAS_COLORSPACE_ARGB8888))
2406 {
2407 if (im->tex->pt->dyn.checked_out > 0)
2408 {
2409 im->tex->pt->dyn.checked_out++;
2410 *image_data = im->tex->pt->dyn.data;
2411 if (err) *err = EVAS_LOAD_ERROR_NONE;
2412 return im;
2413 }
2414 *image_data = im->tex->pt->dyn.data = glsym_eglMapImageSEC(re->win->egl_disp, im->tex->pt->dyn.img);
2415
2416 if (!im->tex->pt->dyn.data)
2417 {
2418 if (err) *err = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
2419 GLERR(__FUNCTION__, __FILE__, __LINE__, "");
2420 return im;
2421 }
2422 im->tex->pt->dyn.checked_out++;
2423
2424 if (err) *err = EVAS_LOAD_ERROR_NONE;
2425 return im;
2426 }
2427#else
2428 if ((im->tex) && (im->tex->pt) && (im->tex->pt->dyn.data))
2429 {
2430 *image_data = im->tex->pt->dyn.data;
2431 if (err) *err = EVAS_LOAD_ERROR_NONE;
2432 return im;
2433 }
2434
2435 eng_window_use(re->win);
2436#endif
2437
2438 /* Engine can be fail to create texture after cache drop like eng_image_content_hint_set function,
2439 so it is need to add code which check im->im's NULL value*/
2440
2441 if (!im->im)
2442 {
2443 *image_data = NULL;
2444 if (err) *err = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
2445 return NULL;
2446 }
2447
2448 error = evas_cache_image_load_data(&im->im->cache_entry);
2449 switch (im->cs.space)
2450 {
2451 case EVAS_COLORSPACE_ARGB8888:
2452 if (to_write)
2453 {
2454 if (im->references > 1)
2455 {
2456 Evas_GL_Image *im_new;
2457
2458 im_new = evas_gl_common_image_new_from_copied_data
2459 (im->gc, im->im->cache_entry.w, im->im->cache_entry.h,
2460 im->im->image.data,
2461 eng_image_alpha_get(data, image),
2462 eng_image_colorspace_get(data, image));
2463 if (!im_new)
2464 {
2465 *image_data = NULL;
2466 if (err) *err = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
2467 return NULL;
2468 }
2469 evas_gl_common_image_free(im);
2470 im = im_new;
2471 }
2472 else
2473 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
2474 }
2475 *image_data = im->im->image.data;
2476 break;
2477 case EVAS_COLORSPACE_YCBCR422P601_PL:
2478 case EVAS_COLORSPACE_YCBCR422P709_PL:
2479 case EVAS_COLORSPACE_YCBCR422601_PL:
2480 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
2481 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
2482 *image_data = im->cs.data;
2483 break;
2484 default:
2485 abort();
2486 break;
2487 }
2488 if (err) *err = error;
2489 return im;
2490}
2491
2492static void *
2493eng_image_data_put(void *data, void *image, DATA32 *image_data)
2494{
2495 Render_Engine *re;
2496 Evas_GL_Image *im, *im2;
2497
2498 re = (Render_Engine *)data;
2499 if (!image) return NULL;
2500 im = image;
2501 if (im->native.data) return image;
2502 eng_window_use(re->win);
2503 if ((im->tex) && (im->tex->pt)
2504 && (im->tex->pt->dyn.data)
2505 && (im->cs.space == EVAS_COLORSPACE_ARGB8888))
2506 {
2507 int w, h;
2508
2509 if (im->tex->pt->dyn.data == image_data)
2510 {
2511 im->tex->pt->dyn.checked_out--;
2512#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2513 if (im->tex->pt->dyn.checked_out == 0)
2514 glsym_eglUnmapImageSEC(re->win->egl_disp, im->tex->pt->dyn.img);
2515#endif
2516 return image;
2517 }
2518
2519 w = im->im->cache_entry.w;
2520 h = im->im->cache_entry.h;
2521 im2 = eng_image_new_from_data(data, w, h, image_data,
2522 eng_image_alpha_get(data, image),
2523 eng_image_colorspace_get(data, image));
2524 if (!im2) return im;
2525 evas_gl_common_image_free(im);
2526 im = im2;
2527 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
2528 return im;
2529 }
2530 switch (im->cs.space)
2531 {
2532 case EVAS_COLORSPACE_ARGB8888:
2533 if (image_data != im->im->image.data)
2534 {
2535 int w, h;
2536
2537 w = im->im->cache_entry.w;
2538 h = im->im->cache_entry.h;
2539 im2 = eng_image_new_from_data(data, w, h, image_data,
2540 eng_image_alpha_get(data, image),
2541 eng_image_colorspace_get(data, image));
2542 if (!im2) return im;
2543 evas_gl_common_image_free(im);
2544 im = im2;
2545 }
2546 break;
2547 case EVAS_COLORSPACE_YCBCR422P601_PL:
2548 case EVAS_COLORSPACE_YCBCR422P709_PL:
2549 case EVAS_COLORSPACE_YCBCR422601_PL:
2550 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
2551 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
2552 if (image_data != im->cs.data)
2553 {
2554 if (im->cs.data)
2555 {
2556 if (!im->cs.no_free) free(im->cs.data);
2557 }
2558 im->cs.data = image_data;
2559 }
2560 evas_gl_common_image_dirty(im, 0, 0, 0, 0);
2561 break;
2562 default:
2563 abort();
2564 break;
2565 }
2566 return im;
2567}
2568
2569static void
2570eng_image_data_preload_request(void *data __UNUSED__, void *image, const void *target)
2571{
2572 Evas_GL_Image *gim = image;
2573 RGBA_Image *im;
2574
2575 if (!gim) return;
2576 if (gim->native.data) return;
2577 im = (RGBA_Image *)gim->im;
2578 if (!im) return;
2579 evas_cache_image_preload_data(&im->cache_entry, target);
2580}
2581
2582static void
2583eng_image_data_preload_cancel(void *data __UNUSED__, void *image, const void *target)
2584{
2585 Evas_GL_Image *gim = image;
2586 RGBA_Image *im;
2587
2588 if (!gim) return;
2589 if (gim->native.data) return;
2590 im = (RGBA_Image *)gim->im;
2591 if (!im) return;
2592 evas_cache_image_preload_cancel(&im->cache_entry, target);
2593}
2594
2595static void
2596eng_image_draw(void *data, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth)
2597{
2598 Render_Engine *re;
2599
2600 re = (Render_Engine *)data;
2601 if (!image) return;
2602 eng_window_use(re->win);
2603 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
2604 re->win->gl_context->dc = context;
2605 evas_gl_common_image_draw(re->win->gl_context, image,
2606 src_x, src_y, src_w, src_h,
2607 dst_x, dst_y, dst_w, dst_h,
2608 smooth);
2609}
2610
2611static void
2612eng_image_scale_hint_set(void *data __UNUSED__, void *image, int hint)
2613{
2614 if (image) evas_gl_common_image_scale_hint_set(image, hint);
2615}
2616
2617static int
2618eng_image_scale_hint_get(void *data __UNUSED__, void *image)
2619{
2620 Evas_GL_Image *gim = image;
2621 if (!gim) return EVAS_IMAGE_SCALE_HINT_NONE;
2622 return gim->scale_hint;
2623}
2624
2625static void
2626eng_image_map_draw(void *data, void *context, void *surface, void *image, int npoints, RGBA_Map_Point *p, int smooth, int level)
2627{
2628 Evas_GL_Image *gim = image;
2629 Render_Engine *re;
2630
2631 re = (Render_Engine *)data;
2632 if (!image) return;
2633 eng_window_use(re->win);
2634 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
2635 re->win->gl_context->dc = context;
2636 if (npoints != 4)
2637 {
2638 // FIXME: nash - you didn't fix this
2639 abort();
2640 }
2641 if ((p[0].x == p[3].x) &&
2642 (p[1].x == p[2].x) &&
2643 (p[0].y == p[1].y) &&
2644 (p[3].y == p[2].y) &&
2645 (p[0].x <= p[1].x) &&
2646 (p[0].y <= p[2].y) &&
2647 (p[0].u == 0) &&
2648 (p[0].v == 0) &&
2649 (p[1].u == (gim->w << FP)) &&
2650 (p[1].v == 0) &&
2651 (p[2].u == (gim->w << FP)) &&
2652 (p[2].v == (gim->h << FP)) &&
2653 (p[3].u == 0) &&
2654 (p[3].v == (gim->h << FP)) &&
2655 (p[0].col == 0xffffffff) &&
2656 (p[1].col == 0xffffffff) &&
2657 (p[2].col == 0xffffffff) &&
2658 (p[3].col == 0xffffffff))
2659 {
2660 int dx, dy, dw, dh;
2661
2662 dx = p[0].x >> FP;
2663 dy = p[0].y >> FP;
2664 dw = (p[2].x >> FP) - dx;
2665 dh = (p[2].y >> FP) - dy;
2666 eng_image_draw(data, context, surface, image,
2667 0, 0, gim->w, gim->h, dx, dy, dw, dh, smooth);
2668 }
2669 else
2670 {
2671 evas_gl_common_image_map_draw(re->win->gl_context, image, npoints, p,
2672 smooth, level);
2673 }
2674}
2675
2676static void *
2677eng_image_map_surface_new(void *data, int w, int h, int alpha)
2678{
2679 Render_Engine *re;
2680
2681 re = (Render_Engine *)data;
2682 return evas_gl_common_image_surface_new(re->win->gl_context, w, h, alpha);
2683}
2684
2685static void
2686eng_image_map_surface_free(void *data __UNUSED__, void *surface)
2687{
2688 evas_gl_common_image_free(surface);
2689}
2690
2691static void
2692eng_image_content_hint_set(void *data __UNUSED__, void *image, int hint)
2693{
2694 if (image) evas_gl_common_image_content_hint_set(image, hint);
2695}
2696
2697static int
2698eng_image_content_hint_get(void *data __UNUSED__, void *image)
2699{
2700 Evas_GL_Image *gim = image;
2701 if (!gim) return EVAS_IMAGE_CONTENT_HINT_NONE;
2702 return gim->content_hint;
2703}
2704
2705static void
2706eng_image_cache_flush(void *data)
2707{
2708 Render_Engine *re;
2709 int tmp_size;
2710
2711 re = (Render_Engine *)data;
2712
2713 tmp_size = evas_common_image_get_cache();
2714 evas_common_image_set_cache(0);
2715 evas_common_rgba_image_scalecache_flush();
2716 evas_gl_common_image_cache_flush(re->win->gl_context);
2717 evas_common_image_set_cache(tmp_size);
2718}
2719
2720static void
2721eng_image_cache_set(void *data, int bytes)
2722{
2723 Render_Engine *re;
2724
2725 re = (Render_Engine *)data;
2726 evas_common_image_set_cache(bytes);
2727 evas_common_rgba_image_scalecache_size_set(bytes);
2728 evas_gl_common_image_cache_flush(re->win->gl_context);
2729}
2730
2731static int
2732eng_image_cache_get(void *data __UNUSED__)
2733{
2734 return evas_common_image_get_cache();
2735}
2736
2737static void
2738eng_image_stride_get(void *data __UNUSED__, void *image, int *stride)
2739{
2740 Evas_GL_Image *im = image;
2741
2742 if ((im->tex) && (im->tex->pt->dyn.img))
2743 *stride = im->tex->pt->dyn.stride;
2744 else
2745 *stride = im->w * 4;
2746}
2747
2748static void
2749eng_font_draw(void *data, void *context, void *surface, Evas_Font_Set *font, int x, int y, int w __UNUSED__, int h __UNUSED__, int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *intl_props)
2750{
2751 Render_Engine *re;
2752
2753 re = (Render_Engine *)data;
2754 eng_window_use(re->win);
2755 evas_gl_common_context_target_surface_set(re->win->gl_context, surface);
2756 re->win->gl_context->dc = context;
2757 {
2758 // FIXME: put im into context so we can free it
2759 static RGBA_Image *im = NULL;
2760
2761 if (!im)
2762 im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
2763 im->cache_entry.w = re->win->w;
2764 im->cache_entry.h = re->win->h;
2765 evas_common_draw_context_font_ext_set(context,
2766 re->win->gl_context,
2767 evas_gl_font_texture_new,
2768 evas_gl_font_texture_free,
2769 evas_gl_font_texture_draw);
2770 evas_common_font_draw(im, context, (RGBA_Font *) font, x, y,
2771 intl_props);
2772 evas_common_draw_context_font_ext_set(context,
2773 NULL,
2774 NULL,
2775 NULL,
2776 NULL);
2777 }
2778}
2779
2780static Eina_Bool
2781eng_canvas_alpha_get(void *data, void *info __UNUSED__)
2782{
2783 Render_Engine *re = (Render_Engine *)data;
2784 return re->win->alpha;
2785}
2786
2787static int
2788_set_internal_config(Render_Engine_GL_Surface *sfc, Evas_GL_Config *cfg)
2789{
2790 // Also initialize pixel format here as well...
2791 switch(cfg->color_format)
2792 {
2793 case EVAS_GL_RGB_888:
2794 sfc->rt_fmt = GL_RGB;
2795 sfc->rt_internal_fmt = GL_RGB;
2796 break;
2797 case EVAS_GL_RGBA_8888:
2798 sfc->rt_fmt = GL_RGBA;
2799 sfc->rt_internal_fmt = GL_RGBA;
2800 break;
2801 default:
2802 ERR("Invalid Color Format!");
2803 return 0;
2804 }
2805
2806 switch(cfg->depth_bits)
2807 {
2808 case EVAS_GL_DEPTH_NONE:
2809 break;
2810 case EVAS_GL_DEPTH_BIT_8:
2811 case EVAS_GL_DEPTH_BIT_16:
2812 case EVAS_GL_DEPTH_BIT_24:
2813#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2814 // 24 bit doesn't work... just cover it with 16 for now..
2815 sfc->rb_depth_fmt = GL_DEPTH_COMPONENT16;
2816#else
2817 sfc->rb_depth_fmt = GL_DEPTH_COMPONENT;
2818#endif
2819 break;
2820 case EVAS_GL_DEPTH_BIT_32:
2821 default:
2822 ERR("Unsupported Depth Bits Format!");
2823 return 0;
2824 }
2825
2826 switch(cfg->stencil_bits)
2827 {
2828 case EVAS_GL_STENCIL_NONE:
2829 break;
2830 case EVAS_GL_STENCIL_BIT_1:
2831 case EVAS_GL_STENCIL_BIT_2:
2832 case EVAS_GL_STENCIL_BIT_4:
2833 case EVAS_GL_STENCIL_BIT_8:
2834#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2835 sfc->rb_stencil_fmt = GL_STENCIL_INDEX8;
2836#else
2837 sfc->rb_stencil_fmt = GL_STENCIL_INDEX;
2838#endif
2839 break;
2840 case EVAS_GL_STENCIL_BIT_16:
2841 default:
2842 ERR("Unsupported Stencil Bits Format!");
2843 return 0;
2844 }
2845
2846 // Do Packed Depth24_Stencil8 Later...
2847
2848 return 1;
2849}
2850
2851static int
2852_create_rt_buffers(Render_Engine *data __UNUSED__,
2853 Render_Engine_GL_Surface *sfc)
2854{
2855 // Render Target texture
2856 glGenTextures(1, &sfc->rt_tex );
2857
2858 // Depth RenderBuffer - Create storage here...
2859 if (sfc->depth_bits != EVAS_GL_DEPTH_NONE)
2860 glGenRenderbuffers(1, &sfc->rb_depth);
2861
2862 // Stencil RenderBuffer - Create Storage here...
2863 if (sfc->stencil_bits != EVAS_GL_STENCIL_NONE)
2864 glGenRenderbuffers(1, &sfc->rb_stencil);
2865
2866 return 1;
2867}
2868
2869static int
2870_attach_fbo_surface(Render_Engine *data __UNUSED__,
2871 Render_Engine_GL_Surface *sfc,
2872 Render_Engine_GL_Context *ctx)
2873{
2874 int fb_status;
2875
2876 // Initialize Texture
2877 glBindTexture(GL_TEXTURE_2D, sfc->rt_tex );
2878 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
2879 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
2880 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
2881 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
2882 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, sfc->w, sfc->h, 0,
2883 GL_RGBA, GL_UNSIGNED_BYTE, NULL);
2884 glBindTexture(GL_TEXTURE_2D, 0);
2885
2886
2887 // Attach texture to FBO
2888 glBindFramebuffer(GL_FRAMEBUFFER, ctx->context_fbo);
2889 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
2890 GL_TEXTURE_2D, sfc->rt_tex, 0);
2891
2892 // Depth RenderBuffer - Attach it to FBO
2893 if (sfc->depth_bits != EVAS_GL_DEPTH_NONE)
2894 {
2895 glBindRenderbuffer(GL_RENDERBUFFER, sfc->rb_depth);
2896 glRenderbufferStorage(GL_RENDERBUFFER, sfc->rb_depth_fmt,
2897 sfc->w, sfc->h);
2898 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
2899 GL_RENDERBUFFER, sfc->rb_depth);
2900 glBindRenderbuffer(GL_RENDERBUFFER, 0);
2901 }
2902
2903 // Stencil RenderBuffer - Attach it to FBO
2904 if (sfc->stencil_bits != EVAS_GL_STENCIL_NONE)
2905 {
2906 glBindRenderbuffer(GL_RENDERBUFFER, sfc->rb_stencil);
2907 glRenderbufferStorage(GL_RENDERBUFFER, sfc->rb_stencil_fmt,
2908 sfc->w, sfc->h);
2909 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
2910 GL_RENDERBUFFER, sfc->rb_stencil);
2911 glBindRenderbuffer(GL_RENDERBUFFER, 0);
2912 }
2913
2914 // Check FBO for completeness
2915 fb_status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
2916 if (fb_status != GL_FRAMEBUFFER_COMPLETE)
2917 {
2918 ERR("FBO not complete!");
2919 return 0;
2920 }
2921
2922 return 1;
2923}
2924
2925
2926static void *
2927eng_gl_surface_create(void *data, void *config, int w, int h)
2928{
2929 Render_Engine *re;
2930 Render_Engine_GL_Surface *sfc;
2931 Render_Engine_GL_Resource *rsc;
2932 Evas_GL_Config *cfg;
2933 int ret;
2934
2935 sfc = calloc(1, sizeof(Render_Engine_GL_Surface));
2936 if (!sfc) return NULL;
2937
2938 re = (Render_Engine *)data;
2939 cfg = (Evas_GL_Config *)config;
2940
2941 sfc->initialized = 0;
2942 sfc->fbo_attached = 0;
2943 sfc->w = w;
2944 sfc->h = h;
2945 sfc->depth_bits = cfg->depth_bits;
2946 sfc->stencil_bits = cfg->stencil_bits;
2947 sfc->rt_tex = 0;
2948 sfc->rb_depth = 0;
2949 sfc->rb_stencil = 0;
2950
2951 // Set the internal format based on the config
2952 if (!_set_internal_config(sfc, cfg))
2953 {
2954 ERR("Unsupported Format!");
2955 free(sfc);
2956 return NULL;
2957 }
2958
2959 // Create internal resource context if it hasn't been created already
2960 if ((rsc = eina_tls_get(resource_key)) == NULL)
2961 {
2962 if ((rsc = _create_internal_glue_resources(re)) == NULL)
2963 {
2964 ERR("Error creating internal resources.");
2965 free(sfc);
2966 return NULL;
2967 }
2968 }
2969
2970 // I'm using evas's original context to create the render target texture
2971 // This is to prevent awkwardness in using native_surface_get() function
2972 // If the rt texture creation is deferred till the context is created and
2973 // make_current called, the user can't call native_surface_get() right
2974 // after the surface is created. hence this is done here using evas' context.
2975#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2976 ret = eglMakeCurrent(re->win->egl_disp, rsc->surface, rsc->surface, rsc->context);
2977#else
2978 ret = glXMakeCurrent(re->info->info.display, re->win->win, rsc->context);
2979#endif
2980 if (!ret)
2981 {
2982 ERR("xxxMakeCurrent() failed!");
2983 free(sfc);
2984 return NULL;
2985 }
2986
2987 // Create Render texture
2988 if (!_create_rt_buffers(re, sfc))
2989 {
2990 ERR("_create_rt_buffers() failed.");
2991 free(sfc);
2992 return NULL;
2993 }
2994
2995#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
2996 ret = eglMakeCurrent(re->win->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
2997#else
2998 ret = glXMakeCurrent(re->info->info.display, None, NULL);
2999#endif
3000 if (!ret)
3001 {
3002 ERR("xxxMakeCurrent() failed!");
3003 free(sfc);
3004 return NULL;
3005 }
3006
3007 return sfc;
3008}
3009
3010static int
3011eng_gl_surface_destroy(void *data, void *surface)
3012{
3013 Render_Engine *re;
3014 Render_Engine_GL_Surface *sfc;
3015 Render_Engine_GL_Resource *rsc;
3016 int ret;
3017
3018 re = (Render_Engine *)data;
3019 sfc = (Render_Engine_GL_Surface*)surface;
3020
3021 if (!sfc) return 0;
3022
3023 if ((rsc = eina_tls_get(resource_key)) == EINA_FALSE) return 0;
3024
3025#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3026 ret = eglMakeCurrent(re->win->egl_disp, rsc->surface, rsc->surface, rsc->context);
3027#else
3028 ret = glXMakeCurrent(re->info->info.display, re->win->win, rsc->context);
3029#endif
3030 if (!ret)
3031 {
3032 ERR("xxxMakeCurrent() failed!");
3033 return 0;
3034 }
3035
3036 // Delete FBO/RBO and Texture here
3037 if (sfc->rt_tex)
3038 glDeleteTextures(1, &sfc->rt_tex);
3039
3040 if (sfc->rb_depth)
3041 glDeleteRenderbuffers(1, &sfc->rb_depth);
3042
3043 if (sfc->rb_stencil)
3044 glDeleteRenderbuffers(1, &sfc->rb_stencil);
3045
3046#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3047 ret = eglMakeCurrent(re->win->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
3048#else
3049 ret = glXMakeCurrent(re->info->info.display, None, NULL);
3050#endif
3051 if (!ret)
3052 {
3053 ERR("xxxMakeCurrent() failed!");
3054 free(sfc);
3055 return 0;
3056 }
3057
3058 free(sfc);
3059 surface = NULL;
3060
3061 return 1;
3062}
3063
3064static void *
3065eng_gl_context_create(void *data, void *share_context)
3066{
3067 Render_Engine *re;
3068 Render_Engine_GL_Context *ctx;
3069 Render_Engine_GL_Context *share_ctx;
3070#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3071 int context_attrs[3];
3072#endif
3073
3074 ctx = calloc(1, sizeof(Render_Engine_GL_Context));
3075
3076 if (!ctx) return NULL;
3077
3078 re = (Render_Engine *)data;
3079 share_ctx = (Render_Engine_GL_Context *)share_context;
3080
3081 // Set the share context to Evas' GL context if share_context is NULL.
3082 // Otherwise set it to the given share_context.
3083#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3084 // EGL
3085 context_attrs[0] = EGL_CONTEXT_CLIENT_VERSION;
3086 context_attrs[1] = 2;
3087 context_attrs[2] = EGL_NONE;
3088
3089 if (share_ctx)
3090 {
3091 ctx->context = eglCreateContext(re->win->egl_disp,
3092 re->win->egl_config,
3093 share_ctx->context, // Share Context
3094 context_attrs);
3095 }
3096 else
3097 {
3098 ctx->context = eglCreateContext(re->win->egl_disp,
3099 re->win->egl_config,
3100 re->win->egl_context[0], // Evas' GL Context
3101 context_attrs);
3102 }
3103
3104 if (!ctx->context)
3105 {
3106 ERR("eglCreateContext() fail. code=%#x", eglGetError());
3107 return NULL;
3108 }
3109#else
3110 // GLX
3111 if (share_context)
3112 {
3113 ctx->context = glXCreateContext(re->info->info.display,
3114 re->win->visualinfo,
3115 share_ctx->context, // Share Context
3116 1);
3117 }
3118 else
3119 {
3120 ctx->context = glXCreateContext(re->info->info.display,
3121 re->win->visualinfo,
3122 re->win->context, // Evas' GL Context
3123 1);
3124 }
3125
3126 if (!ctx->context)
3127 {
3128 ERR("glXCreateContext() fail.");
3129 return NULL;
3130 }
3131#endif
3132
3133 ctx->initialized = 0;
3134 ctx->context_fbo = 0;
3135 ctx->current_sfc = NULL;
3136
3137 return ctx;
3138}
3139
3140static int
3141eng_gl_context_destroy(void *data, void *context)
3142{
3143 Render_Engine *re;
3144 Render_Engine_GL_Context *ctx;
3145 Render_Engine_GL_Resource *rsc;
3146 int ret;
3147
3148 re = (Render_Engine *)data;
3149 ctx = (Render_Engine_GL_Context*)context;
3150
3151 if (!ctx) return 0;
3152
3153 if ((rsc = eina_tls_get(resource_key)) == EINA_FALSE) return 0;
3154
3155 // 1. Do a make current with the given context
3156#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3157 ret = eglMakeCurrent(re->win->egl_disp, rsc->surface,
3158 rsc->surface, ctx->context);
3159#else
3160 ret = glXMakeCurrent(re->info->info.display, re->win->win,
3161 ctx->context);
3162#endif
3163 if (!ret)
3164 {
3165 ERR("xxxMakeCurrent() failed!");
3166 return 0;
3167 }
3168
3169 // 2. Delete the FBO
3170 if (ctx->context_fbo)
3171 glDeleteFramebuffers(1, &ctx->context_fbo);
3172
3173 // 3. Destroy the Context
3174#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3175 eglDestroyContext(re->win->egl_disp, ctx->context);
3176
3177 ctx->context = EGL_NO_CONTEXT;
3178
3179 ret = eglMakeCurrent(re->win->egl_disp, EGL_NO_SURFACE,
3180 EGL_NO_SURFACE, EGL_NO_CONTEXT);
3181#else
3182 glXDestroyContext(re->info->info.display, ctx->context);
3183
3184 ctx->context = 0;
3185
3186 ret = glXMakeCurrent(re->info->info.display, None, NULL);
3187#endif
3188 if (!ret)
3189 {
3190 ERR("xxxMakeCurrent() failed!");
3191 return 0;
3192 }
3193
3194 free(ctx);
3195 context = NULL;
3196
3197 return 1;
3198}
3199
3200static int
3201eng_gl_make_current(void *data __UNUSED__, void *surface, void *context)
3202{
3203 Render_Engine *re;
3204 Render_Engine_GL_Surface *sfc;
3205 Render_Engine_GL_Context *ctx;
3206 int ret = 0;
3207#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3208 Render_Engine_GL_Resource *rsc;
3209#endif
3210
3211 re = (Render_Engine *)data;
3212 sfc = (Render_Engine_GL_Surface*)surface;
3213 ctx = (Render_Engine_GL_Context*)context;
3214
3215 // Unset surface/context
3216 if ((!sfc) || (!ctx))
3217 {
3218#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3219 ret = eglMakeCurrent(re->win->egl_disp, EGL_NO_SURFACE,
3220 EGL_NO_SURFACE, EGL_NO_CONTEXT);
3221#else
3222 ret = glXMakeCurrent(re->info->info.display, None, NULL);
3223#endif
3224 if (!ret)
3225 {
3226 ERR("xxxMakeCurrent() failed!");
3227 return 0;
3228 }
3229
3230 if (ctx) ctx->current_sfc = NULL;
3231 if (sfc) sfc->current_ctx = NULL;
3232 current_evgl_ctx = NULL;
3233 return 1;
3234 }
3235
3236 // Do a make current only if it's not already current
3237#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3238 if ((rsc = eina_tls_get(resource_key)) == EINA_FALSE) return 0;
3239
3240 if ((eglGetCurrentContext() != ctx->context) ||
3241 (eglGetCurrentSurface(EGL_READ) != rsc->surface) ||
3242 (eglGetCurrentSurface(EGL_DRAW) != rsc->surface) )
3243 {
3244 // Flush remainder of what's in Evas' pipeline
3245 if (re->win) eng_window_use(NULL);
3246
3247 // Do a make current
3248 ret = eglMakeCurrent(re->win->egl_disp, rsc->surface,
3249 rsc->surface, ctx->context);
3250 if (!ret)
3251 {
3252 ERR("xxxMakeCurrent() failed!");
3253 return 0;
3254 }
3255 }
3256#else
3257 if ((glXGetCurrentContext() != ctx->context) ||
3258 (glXGetCurrentDrawable() != re->win->win) )
3259 {
3260 // Flush remainder of what's in Evas' pipeline
3261 if (re->win) eng_window_use(NULL);
3262
3263 // Do a make current
3264 ret = glXMakeCurrent(re->info->info.display, re->win->win, ctx->context);
3265 if (!ret)
3266 {
3267 ERR("xxxMakeCurrent() failed!");
3268 return 0;
3269 }
3270 }
3271#endif
3272
3273 // Create FBO if not already created
3274 if (!ctx->initialized)
3275 {
3276 glGenFramebuffers(1, &ctx->context_fbo);
3277 ctx->initialized = 1;
3278 }
3279
3280 // Attach FBO if it hasn't been attached or if surface changed
3281 if ((!sfc->fbo_attached) || (ctx->current_sfc != sfc))
3282 {
3283 if (!_attach_fbo_surface(re, sfc, ctx))
3284 {
3285 ERR("_attach_fbo_surface() failed.");
3286 return 0;
3287 }
3288
3289 if (ctx->current_fbo)
3290 // Bind to the previously bound buffer
3291 glBindFramebuffer(GL_FRAMEBUFFER, ctx->current_fbo);
3292 else
3293 // Bind FBO
3294 glBindFramebuffer(GL_FRAMEBUFFER, ctx->context_fbo);
3295
3296 sfc->fbo_attached = 1;
3297 }
3298
3299 // Set the current surface/context
3300 ctx->current_sfc = sfc;
3301 sfc->current_ctx = ctx;
3302 current_evgl_ctx = ctx;
3303
3304 return 1;
3305}
3306
3307static void *
3308eng_gl_string_query(void *data __UNUSED__, int name)
3309{
3310 switch(name)
3311 {
3312 case EVAS_GL_EXTENSIONS:
3313 return (void*)_evasgl_ext_string;
3314 default:
3315 return NULL;
3316 };
3317}
3318
3319static void *
3320eng_gl_proc_address_get(void *data __UNUSED__, const char *name)
3321{
3322#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3323 if (glsym_eglGetProcAddress) return glsym_eglGetProcAddress(name);
3324 return dlsym(RTLD_DEFAULT, name);
3325#else
3326 if (glsym_glXGetProcAddress) return glsym_glXGetProcAddress(name);
3327 return dlsym(RTLD_DEFAULT, name);
3328#endif
3329}
3330
3331static int
3332eng_gl_native_surface_get(void *data, void *surface, void *native_surface)
3333{
3334 Render_Engine *re;
3335 Render_Engine_GL_Surface *sfc;
3336 Evas_Native_Surface *ns;
3337
3338 re = (Render_Engine *)data;
3339 sfc = (Render_Engine_GL_Surface*)surface;
3340 ns = (Evas_Native_Surface*)native_surface;
3341
3342 ns->type = EVAS_NATIVE_SURFACE_OPENGL;
3343 ns->version = EVAS_NATIVE_SURFACE_VERSION;
3344 ns->data.opengl.texture_id = sfc->rt_tex;
3345 ns->data.opengl.x = 0;
3346 ns->data.opengl.y = 0;
3347 ns->data.opengl.w = sfc->w;
3348 ns->data.opengl.h = sfc->h;
3349
3350 return 1;
3351}
3352
3353
3354static const GLubyte *
3355evgl_glGetString(GLenum name)
3356{
3357 if (name == GL_EXTENSIONS)
3358 return (GLubyte *)_gl_ext_string; //glGetString(GL_EXTENSIONS);
3359 else
3360 return glGetString(name);
3361}
3362
3363static void
3364evgl_glBindFramebuffer(GLenum target, GLuint framebuffer)
3365{
3366 Render_Engine_GL_Context *ctx = current_evgl_ctx;
3367
3368 // Take care of BindFramebuffer 0 issue
3369 if (framebuffer==0)
3370 {
3371 if (ctx)
3372 {
3373 glBindFramebuffer(target, ctx->context_fbo);
3374 ctx->current_fbo = 0;
3375 }
3376 }
3377 else
3378 {
3379 glBindFramebuffer(target, framebuffer);
3380
3381 // Save this for restore when doing make current
3382 if (ctx)
3383 ctx->current_fbo = framebuffer;
3384 }
3385}
3386
3387static void
3388evgl_glBindRenderbuffer(GLenum target, GLuint renderbuffer)
3389{
3390 // Add logic to take care when renderbuffer=0
3391 // On a second thought we don't need this
3392 glBindRenderbuffer(target, renderbuffer);
3393}
3394
3395static void
3396evgl_glClearDepthf(GLclampf depth)
3397{
3398#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3399 glClearDepthf(depth);
3400#else
3401 glClearDepth(depth);
3402#endif
3403}
3404
3405static void
3406evgl_glDepthRangef(GLclampf zNear, GLclampf zFar)
3407{
3408#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3409 glDepthRangef(zNear, zFar);
3410#else
3411 glDepthRange(zNear, zFar);
3412#endif
3413}
3414
3415static void
3416evgl_glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
3417{
3418#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3419 glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
3420#else
3421 if (range)
3422 {
3423 range[0] = -126; // floor(log2(FLT_MIN))
3424 range[1] = 127; // floor(log2(FLT_MAX))
3425 }
3426 if (precision)
3427 {
3428 precision[0] = 24; // floor(-log2((1.0/16777218.0)));
3429 }
3430 return;
3431 shadertype = precisiontype = 0;
3432#endif
3433}
3434
3435static void
3436evgl_glReleaseShaderCompiler(void)
3437{
3438#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3439 glReleaseShaderCompiler();
3440#else
3441#endif
3442}
3443
3444static void
3445evgl_glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length)
3446{
3447#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3448 glShaderBinary(n, shaders, binaryformat, binary, length);
3449#else
3450// FIXME: need to dlsym/getprocaddress for this
3451 return;
3452 n = binaryformat = length = 0;
3453 shaders = binary = 0;
3454#endif
3455}
3456
3457//--------------------------------//
3458#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3459// EGL Extensions
3460static void *
3461evgl_evasglCreateImage(int target, void* buffer, int *attrib_list)
3462{
3463 if (current_engine)
3464 {
3465 return glsym_eglCreateImage(current_engine->win->egl_disp,
3466 EGL_NO_CONTEXT,
3467 target,
3468 buffer,
3469 attrib_list);
3470 }
3471 else
3472 ERR("Invalid Engine... (Can't acccess EGL Display)\n");
3473}
3474
3475static void
3476evgl_evasglDestroyImage(EvasGLImage image)
3477{
3478 if (current_engine)
3479 glsym_eglDestroyImage(current_engine->win->egl_disp, image);
3480 else
3481 ERR("Invalid Engine... (Can't acccess EGL Display)\n");
3482}
3483
3484static void
3485evgl_glEvasGLImageTargetTexture2DOES(GLenum target, EvasGLImage image)
3486{
3487 glsym_glEGLImageTargetTexture2DOES(target, image);
3488}
3489
3490static void
3491evgl_glEvasGLImageTargetRenderbufferStorageOES(GLenum target, EvasGLImage image)
3492{
3493 glsym_glEGLImageTargetTexture2DOES(target, image);
3494}
3495#else
3496#endif
3497
3498//--------------------------------//
3499
3500
3501static void *
3502eng_gl_api_get(void *data)
3503{
3504 Render_Engine *re;
3505
3506 re = (Render_Engine *)data;
3507
3508 gl_funcs.version = EVAS_GL_API_VERSION;
3509
3510#define ORD(f) EVAS_API_OVERRIDE(f, &gl_funcs, )
3511 // GLES 2.0
3512 ORD(glActiveTexture);
3513 ORD(glAttachShader);
3514 ORD(glBindAttribLocation);
3515 ORD(glBindBuffer);
3516 ORD(glBindTexture);
3517 ORD(glBlendColor);
3518 ORD(glBlendEquation);
3519 ORD(glBlendEquationSeparate);
3520 ORD(glBlendFunc);
3521 ORD(glBlendFuncSeparate);
3522 ORD(glBufferData);
3523 ORD(glBufferSubData);
3524 ORD(glCheckFramebufferStatus);
3525 ORD(glClear);
3526 ORD(glClearColor);
3527// ORD(glClearDepthf);
3528 ORD(glClearStencil);
3529 ORD(glColorMask);
3530 ORD(glCompileShader);
3531 ORD(glCompressedTexImage2D);
3532 ORD(glCompressedTexSubImage2D);
3533 ORD(glCopyTexImage2D);
3534 ORD(glCopyTexSubImage2D);
3535 ORD(glCreateProgram);
3536 ORD(glCreateShader);
3537 ORD(glCullFace);
3538 ORD(glDeleteBuffers);
3539 ORD(glDeleteFramebuffers);
3540 ORD(glDeleteProgram);
3541 ORD(glDeleteRenderbuffers);
3542 ORD(glDeleteShader);
3543 ORD(glDeleteTextures);
3544 ORD(glDepthFunc);
3545 ORD(glDepthMask);
3546// ORD(glDepthRangef);
3547 ORD(glDetachShader);
3548 ORD(glDisable);
3549 ORD(glDisableVertexAttribArray);
3550 ORD(glDrawArrays);
3551 ORD(glDrawElements);
3552 ORD(glEnable);
3553 ORD(glEnableVertexAttribArray);
3554 ORD(glFinish);
3555 ORD(glFlush);
3556 ORD(glFramebufferRenderbuffer);
3557 ORD(glFramebufferTexture2D);
3558 ORD(glFrontFace);
3559 ORD(glGenBuffers);
3560 ORD(glGenerateMipmap);
3561 ORD(glGenFramebuffers);
3562 ORD(glGenRenderbuffers);
3563 ORD(glGenTextures);
3564 ORD(glGetActiveAttrib);
3565 ORD(glGetActiveUniform);
3566 ORD(glGetAttachedShaders);
3567 ORD(glGetAttribLocation);
3568 ORD(glGetBooleanv);
3569 ORD(glGetBufferParameteriv);
3570 ORD(glGetError);
3571 ORD(glGetFloatv);
3572 ORD(glGetFramebufferAttachmentParameteriv);
3573 ORD(glGetIntegerv);
3574 ORD(glGetProgramiv);
3575 ORD(glGetProgramInfoLog);
3576 ORD(glGetRenderbufferParameteriv);
3577 ORD(glGetShaderiv);
3578 ORD(glGetShaderInfoLog);
3579// ORD(glGetShaderPrecisionFormat);
3580 ORD(glGetShaderSource);
3581// ORD(glGetString);
3582 ORD(glGetTexParameterfv);
3583 ORD(glGetTexParameteriv);
3584 ORD(glGetUniformfv);
3585 ORD(glGetUniformiv);
3586 ORD(glGetUniformLocation);
3587 ORD(glGetVertexAttribfv);
3588 ORD(glGetVertexAttribiv);
3589 ORD(glGetVertexAttribPointerv);
3590 ORD(glHint);
3591 ORD(glIsBuffer);
3592 ORD(glIsEnabled);
3593 ORD(glIsFramebuffer);
3594 ORD(glIsProgram);
3595 ORD(glIsRenderbuffer);
3596 ORD(glIsShader);
3597 ORD(glIsTexture);
3598 ORD(glLineWidth);
3599 ORD(glLinkProgram);
3600 ORD(glPixelStorei);
3601 ORD(glPolygonOffset);
3602 ORD(glReadPixels);
3603// ORD(glReleaseShaderCompiler);
3604 ORD(glRenderbufferStorage);
3605 ORD(glSampleCoverage);
3606 ORD(glScissor);
3607// ORD(glShaderBinary);
3608 ORD(glShaderSource);
3609 ORD(glStencilFunc);
3610 ORD(glStencilFuncSeparate);
3611 ORD(glStencilMask);
3612 ORD(glStencilMaskSeparate);
3613 ORD(glStencilOp);
3614 ORD(glStencilOpSeparate);
3615 ORD(glTexImage2D);
3616 ORD(glTexParameterf);
3617 ORD(glTexParameterfv);
3618 ORD(glTexParameteri);
3619 ORD(glTexParameteriv);
3620 ORD(glTexSubImage2D);
3621 ORD(glUniform1f);
3622 ORD(glUniform1fv);
3623 ORD(glUniform1i);
3624 ORD(glUniform1iv);
3625 ORD(glUniform2f);
3626 ORD(glUniform2fv);
3627 ORD(glUniform2i);
3628 ORD(glUniform2iv);
3629 ORD(glUniform3f);
3630 ORD(glUniform3fv);
3631 ORD(glUniform3i);
3632 ORD(glUniform3iv);
3633 ORD(glUniform4f);
3634 ORD(glUniform4fv);
3635 ORD(glUniform4i);
3636 ORD(glUniform4iv);
3637 ORD(glUniformMatrix2fv);
3638 ORD(glUniformMatrix3fv);
3639 ORD(glUniformMatrix4fv);
3640 ORD(glUseProgram);
3641 ORD(glValidateProgram);
3642 ORD(glVertexAttrib1f);
3643 ORD(glVertexAttrib1fv);
3644 ORD(glVertexAttrib2f);
3645 ORD(glVertexAttrib2fv);
3646 ORD(glVertexAttrib3f);
3647 ORD(glVertexAttrib3fv);
3648 ORD(glVertexAttrib4f);
3649 ORD(glVertexAttrib4fv);
3650 ORD(glVertexAttribPointer);
3651 ORD(glViewport);
3652#undef ORD
3653
3654#define ORD(f) EVAS_API_OVERRIDE(f, &gl_funcs, glsym_)
3655 // Extensions
3656 ORD(glGetProgramBinaryOES);
3657 ORD(glProgramBinaryOES);
3658 ORD(glMapBufferOES);
3659 ORD(glUnmapBufferOES);
3660 ORD(glGetBufferPointervOES);
3661 ORD(glTexImage3DOES);
3662 ORD(glTexSubImage3DOES);
3663 ORD(glCopyTexSubImage3DOES);
3664 ORD(glCompressedTexImage3DOES);
3665 ORD(glCompressedTexSubImage3DOES);
3666 ORD(glFramebufferTexture3DOES);
3667 ORD(glGetPerfMonitorGroupsAMD);
3668 ORD(glGetPerfMonitorCountersAMD);
3669 ORD(glGetPerfMonitorGroupStringAMD);
3670 ORD(glGetPerfMonitorCounterStringAMD);
3671 ORD(glGetPerfMonitorCounterInfoAMD);
3672 ORD(glGenPerfMonitorsAMD);
3673 ORD(glDeletePerfMonitorsAMD);
3674 ORD(glSelectPerfMonitorCountersAMD);
3675 ORD(glBeginPerfMonitorAMD);
3676 ORD(glEndPerfMonitorAMD);
3677 ORD(glGetPerfMonitorCounterDataAMD);
3678 ORD(glDiscardFramebufferEXT);
3679 ORD(glMultiDrawArraysEXT);
3680 ORD(glMultiDrawElementsEXT);
3681 ORD(glDeleteFencesNV);
3682 ORD(glGenFencesNV);
3683 ORD(glIsFenceNV);
3684 ORD(glTestFenceNV);
3685 ORD(glGetFenceivNV);
3686 ORD(glFinishFenceNV);
3687 ORD(glSetFenceNV);
3688 ORD(glGetDriverControlsQCOM);
3689 ORD(glGetDriverControlStringQCOM);
3690 ORD(glEnableDriverControlQCOM);
3691 ORD(glDisableDriverControlQCOM);
3692 ORD(glExtGetTexturesQCOM);
3693 ORD(glExtGetBuffersQCOM);
3694 ORD(glExtGetRenderbuffersQCOM);
3695 ORD(glExtGetFramebuffersQCOM);
3696 ORD(glExtGetTexLevelParameterivQCOM);
3697 ORD(glExtTexObjectStateOverrideiQCOM);
3698 ORD(glExtGetTexSubImageQCOM);
3699 ORD(glExtGetBufferPointervQCOM);
3700 ORD(glExtGetShadersQCOM);
3701 ORD(glExtGetProgramsQCOM);
3702 ORD(glExtIsProgramBinaryQCOM);
3703 ORD(glExtGetProgramBinarySourceQCOM);
3704#undef ORD
3705
3706// Override functions wrapped by Evas_GL
3707#define ORD(f) EVAS_API_OVERRIDE(f, &gl_funcs, evgl_)
3708 ORD(glBindFramebuffer);
3709 ORD(glBindRenderbuffer);
3710
3711 // GLES2.0 API compat on top of desktop gl
3712 ORD(glClearDepthf);
3713 ORD(glDepthRangef);
3714 ORD(glGetShaderPrecisionFormat);
3715 ORD(glReleaseShaderCompiler);
3716 ORD(glShaderBinary);
3717
3718 ORD(glGetString);
3719
3720#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
3721 // GLES 2.0 Extensions that needs wrapping
3722 ORD(evasglCreateImage);
3723 ORD(evasglDestroyImage);
3724 ORD(glEvasGLImageTargetTexture2DOES);
3725 ORD(glEvasGLImageTargetRenderbufferStorageOES);
3726#endif
3727
3728#undef ORD
3729
3730 return &gl_funcs;
3731}
3732
3733static int
3734eng_image_load_error_get(void *data __UNUSED__, void *image)
3735{
3736 Evas_GL_Image *im;
3737
3738 if (!image) return EVAS_LOAD_ERROR_NONE;
3739 im = image;
3740 return im->im->cache_entry.load_error;
3741}
3742
3743static Eina_Bool
3744eng_image_animated_get(void *data __UNUSED__, void *image)
3745{
3746 Evas_GL_Image *gim = image;
3747 Image_Entry *im;
3748
3749 if (!gim) return EINA_FALSE;
3750 im = (Image_Entry *)gim->im;
3751 if (!im) return EINA_FALSE;
3752
3753 return im->flags.animated;
3754}
3755
3756static int
3757eng_image_animated_frame_count_get(void *data __UNUSED__, void *image)
3758{
3759 Evas_GL_Image *gim = image;
3760 Image_Entry *im;
3761
3762 if (!gim) return -1;
3763 im = (Image_Entry *)gim->im;
3764 if (!im) return -1;
3765
3766 if (!im->flags.animated) return -1;
3767 return im->frame_count;
3768}
3769
3770static Evas_Image_Animated_Loop_Hint
3771eng_image_animated_loop_type_get(void *data __UNUSED__, void *image)
3772{
3773 Evas_GL_Image *gim = image;
3774 Image_Entry *im;
3775
3776 if (!gim) return EVAS_IMAGE_ANIMATED_HINT_NONE;
3777 im = (Image_Entry *)gim->im;
3778 if (!im) return EVAS_IMAGE_ANIMATED_HINT_NONE;
3779
3780 if (!im->flags.animated) return EVAS_IMAGE_ANIMATED_HINT_NONE;
3781 return im->loop_hint;
3782}
3783
3784static int
3785eng_image_animated_loop_count_get(void *data __UNUSED__, void *image)
3786{
3787 Evas_GL_Image *gim = image;
3788 Image_Entry *im;
3789
3790 if (!gim) return -1;
3791 im = (Image_Entry *)gim->im;
3792 if (!im) return -1;
3793
3794 if (!im->flags.animated) return -1;
3795 return im->loop_count;
3796}
3797
3798static double
3799eng_image_animated_frame_duration_get(void *data __UNUSED__, void *image, int start_frame, int frame_num)
3800{
3801 Evas_GL_Image *gim = image;
3802 Image_Entry *im;
3803
3804 if (!gim) return -1;
3805 im = (Image_Entry *)gim->im;
3806 if (!im) return -1;
3807
3808 if (!im->flags.animated) return -1;
3809 return evas_common_load_rgba_image_frame_duration_from_file(im, start_frame, frame_num);
3810}
3811
3812static Eina_Bool
3813eng_image_animated_frame_set(void *data __UNUSED__, void *image, int frame_index)
3814{
3815 Evas_GL_Image *gim = image;
3816 Image_Entry *im;
3817
3818 if (!gim) return EINA_FALSE;
3819 im = (Image_Entry *)gim->im;
3820 if (!im) return EINA_FALSE;
3821
3822 if (!im->flags.animated) return EINA_FALSE;
3823 if (im->cur_frame == frame_index) return EINA_FALSE;
3824
3825 im->cur_frame = frame_index;
3826 return EINA_TRUE;
3827}
3828
3829static void
3830eng_image_max_size_get(void *data, int *maxw, int *maxh)
3831{
3832 Render_Engine *re = (Render_Engine *)data;
3833 if (maxw) *maxw = re->win->gl_context->shared->info.max_texture_size;
3834 if (maxh) *maxh = re->win->gl_context->shared->info.max_texture_size;
3835}
3836
3837static int
3838module_open(Evas_Module *em)
3839{
3840 static Eina_Bool xrm_inited = EINA_FALSE;
3841 if (!xrm_inited)
3842 {
3843 xrm_inited = EINA_TRUE;
3844 XrmInitialize();
3845 }
3846
3847 if (!em) return 0;
3848 if (!evas_gl_common_module_open()) return 0;
3849 /* get whatever engine module we inherit from */
3850 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
3851 if (_evas_engine_GL_X11_log_dom < 0)
3852 _evas_engine_GL_X11_log_dom = eina_log_domain_register
3853 ("evas-gl_x11", EVAS_DEFAULT_LOG_COLOR);
3854 if (_evas_engine_GL_X11_log_dom < 0)
3855 {
3856 EINA_LOG_ERR("Can not create a module log domain.");
3857 return 0;
3858 }
3859 /* store it for later use */
3860 func = pfunc;
3861 /* now to override methods */
3862 #define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
3863 ORD(info);
3864 ORD(info_free);
3865 ORD(setup);
3866 ORD(canvas_alpha_get);
3867 ORD(output_free);
3868 ORD(output_resize);
3869 ORD(output_tile_size_set);
3870 ORD(output_redraws_rect_add);
3871 ORD(output_redraws_rect_del);
3872 ORD(output_redraws_clear);
3873 ORD(output_redraws_next_update_get);
3874 ORD(output_redraws_next_update_push);
3875 ORD(context_cutout_add);
3876 ORD(context_cutout_clear);
3877 ORD(output_flush);
3878 ORD(output_idle_flush);
3879 ORD(output_dump);
3880 ORD(rectangle_draw);
3881 ORD(line_draw);
3882 ORD(polygon_point_add);
3883 ORD(polygon_points_clear);
3884 ORD(polygon_draw);
3885
3886 ORD(image_load);
3887 ORD(image_new_from_data);
3888 ORD(image_new_from_copied_data);
3889 ORD(image_free);
3890 ORD(image_size_get);
3891 ORD(image_size_set);
3892 ORD(image_dirty_region);
3893 ORD(image_data_get);
3894 ORD(image_data_put);
3895 ORD(image_data_preload_request);
3896 ORD(image_data_preload_cancel);
3897 ORD(image_alpha_set);
3898 ORD(image_alpha_get);
3899 ORD(image_border_set);
3900 ORD(image_border_get);
3901 ORD(image_draw);
3902 ORD(image_comment_get);
3903 ORD(image_format_get);
3904 ORD(image_colorspace_set);
3905 ORD(image_colorspace_get);
3906 ORD(image_mask_create);
3907 ORD(image_native_set);
3908 ORD(image_native_get);
3909#if 0 // filtering disabled
3910 ORD(image_draw_filtered);
3911 ORD(image_filtered_get);
3912 ORD(image_filtered_save);
3913 ORD(image_filtered_free);
3914#endif
3915
3916 ORD(font_draw);
3917
3918 ORD(image_scale_hint_set);
3919 ORD(image_scale_hint_get);
3920 ORD(image_stride_get);
3921
3922 ORD(image_map_draw);
3923 ORD(image_map_surface_new);
3924 ORD(image_map_surface_free);
3925
3926 ORD(image_content_hint_set);
3927 ORD(image_content_hint_get);
3928
3929 ORD(image_cache_flush);
3930 ORD(image_cache_set);
3931 ORD(image_cache_get);
3932
3933 ORD(gl_surface_create);
3934 ORD(gl_surface_destroy);
3935 ORD(gl_context_create);
3936 ORD(gl_context_destroy);
3937 ORD(gl_make_current);
3938 ORD(gl_string_query);
3939 ORD(gl_proc_address_get);
3940 ORD(gl_native_surface_get);
3941 ORD(gl_api_get);
3942
3943 ORD(image_load_error_get);
3944
3945 /* now advertise out own api */
3946 ORD(image_animated_get);
3947 ORD(image_animated_frame_count_get);
3948 ORD(image_animated_loop_type_get);
3949 ORD(image_animated_loop_count_get);
3950 ORD(image_animated_frame_duration_get);
3951 ORD(image_animated_frame_set);
3952
3953 ORD(image_max_size_get);
3954
3955 /* now advertise out own api */
3956 em->functions = (void *)(&func);
3957 return 1;
3958}
3959
3960static void
3961module_close(Evas_Module *em __UNUSED__)
3962{
3963 eina_log_domain_unregister(_evas_engine_GL_X11_log_dom);
3964/*
3965 if (xrdb_user.db)
3966 {
3967 XrmDestroyDatabase(xrdb_user.db);
3968 xrdb_user.last_stat = 0;
3969 xrdb_user.last_mtime = 0;
3970 xrdb_user.db = NULL;
3971 }
3972 */
3973 evas_gl_common_module_close();
3974}
3975
3976static Evas_Module_Api evas_modapi =
3977{
3978 EVAS_MODULE_API_VERSION,
3979 "gl_x11",
3980 "none",
3981 {
3982 module_open,
3983 module_close
3984 }
3985};
3986
3987EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, gl_x11);
3988
3989#ifndef EVAS_STATIC_BUILD_GL_XLIB
3990EVAS_EINA_MODULE_DEFINE(engine, gl_x11);
3991#endif
3992
3993/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/
diff --git a/libraries/evas/src/modules/engines/gl_x11/evas_engine.h b/libraries/evas/src/modules/engines/gl_x11/evas_engine.h
new file mode 100644
index 0000000..4f62c58
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_x11/evas_engine.h
@@ -0,0 +1,126 @@
1#ifndef EVAS_ENGINE_H
2#define EVAS_ENGINE_H
3
4#include "config.h"
5#include "evas_common.h"
6#include "evas_private.h"
7#include "evas_gl_common.h"
8#include "Evas.h"
9#include "Evas_Engine_GL_X11.h"
10
11#define GL_GLEXT_PROTOTYPES
12
13#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
14# if defined(GLES_VARIETY_S3C6410)
15# include <EGL/egl.h>
16# include <GLES2/gl2.h>
17# include <X11/Xlib.h>
18# include <X11/Xatom.h>
19# include <X11/Xutil.h>
20# include <X11/extensions/Xrender.h>
21# include <X11/Xresource.h> // xres - dpi
22# elif defined(GLES_VARIETY_SGX)
23# define SUPPORT_X11 1
24# include <EGL/egl.h>
25# include <GLES2/gl2.h>
26# include <GLES2/gl2ext.h>
27# include <X11/Xlib.h>
28# include <X11/Xatom.h>
29# include <X11/Xutil.h>
30# include <X11/extensions/Xrender.h>
31# include <X11/Xresource.h> // xres - dpi
32# endif
33#else
34# include <X11/Xlib.h>
35# include <X11/Xatom.h>
36# include <X11/Xutil.h>
37# include <X11/extensions/Xrender.h>
38# include <X11/Xresource.h> // xres - dpi
39# include <GL/gl.h>
40# include <GL/glext.h>
41# include <GL/glx.h>
42#endif
43
44extern int _evas_engine_GL_X11_log_dom ;
45#ifdef ERR
46# undef ERR
47#endif
48#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_GL_X11_log_dom, __VA_ARGS__)
49
50#ifdef DBG
51# undef DBG
52#endif
53#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_GL_X11_log_dom, __VA_ARGS__)
54
55#ifdef INF
56# undef INF
57#endif
58#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_GL_X11_log_dom, __VA_ARGS__)
59
60#ifdef WRN
61# undef WRN
62#endif
63#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_GL_X11_log_dom, __VA_ARGS__)
64
65#ifdef CRIT
66# undef CRIT
67#endif
68#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_GL_X11_log_dom, __VA_ARGS__)
69
70typedef struct _Evas_GL_X11_Window Evas_GL_X11_Window;
71
72struct _Evas_GL_X11_Window
73{
74 Display *disp;
75 Window win;
76 int w, h;
77 int screen;
78 XVisualInfo *visualinfo;
79 Visual *visual;
80 Colormap colormap;
81 int depth;
82 int alpha;
83 int rot;
84 Evas_Engine_GL_Context *gl_context;
85 struct {
86 int redraw : 1;
87 int drew : 1;
88 int x1, y1, x2, y2;
89 } draw;
90#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
91 EGLContext egl_context[1];
92 EGLSurface egl_surface[1];
93 EGLConfig egl_config;
94 EGLDisplay egl_disp;
95#else
96 GLXContext context;
97 GLXWindow glxwin;
98 struct {
99 GLXFBConfig fbc;
100 int tex_format;
101 int tex_target;
102 int mipmap;
103 unsigned char yinvert : 1;
104 } depth_cfg[33]; // config for all 32 possible depths!
105
106 struct {
107 unsigned int loose_binding : 1;
108 } detected;
109#endif
110 int surf : 1;
111};
112
113Evas_GL_X11_Window *eng_window_new(Display *disp, Window win, int screen,
114 Visual *vis, Colormap cmap,
115 int depth, int w, int h, int indirect,
116 int alpha, int rot);
117void eng_window_free(Evas_GL_X11_Window *gw);
118void eng_window_use(Evas_GL_X11_Window *gw);
119void eng_window_unsurf(Evas_GL_X11_Window *gw);
120void eng_window_resurf(Evas_GL_X11_Window *gw);
121
122Visual *eng_best_visual_get(Evas_Engine_Info_GL_X11 *einfo);
123Colormap eng_best_colormap_get(Evas_Engine_Info_GL_X11 *einfo);
124int eng_best_depth_get(Evas_Engine_Info_GL_X11 *einfo);
125
126#endif
diff --git a/libraries/evas/src/modules/engines/gl_x11/evas_x_main.c b/libraries/evas/src/modules/engines/gl_x11/evas_x_main.c
new file mode 100644
index 0000000..323c976
--- /dev/null
+++ b/libraries/evas/src/modules/engines/gl_x11/evas_x_main.c
@@ -0,0 +1,901 @@
1#include "evas_engine.h"
2
3static Evas_GL_X11_Window *_evas_gl_x11_window = NULL;
4
5#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
6static EGLContext context = EGL_NO_CONTEXT;
7#else
8// FIXME: this will only work for 1 display connection (glx land can have > 1)
9static GLXContext context = 0;
10static GLXContext rgba_context = 0;
11static GLXFBConfig fbconf = 0;
12static GLXFBConfig rgba_fbconf = 0;
13#endif
14
15// fixme: something is up/wrong here - dont know what tho...
16//#define NEWGL 1
17
18static XVisualInfo *_evas_gl_x11_vi = NULL;
19static XVisualInfo *_evas_gl_x11_rgba_vi = NULL;
20static Colormap _evas_gl_x11_cmap = 0;
21static Colormap _evas_gl_x11_rgba_cmap = 0;
22
23static int win_count = 0;
24
25Evas_GL_X11_Window *
26eng_window_new(Display *disp,
27 Window win,
28 int screen,
29 Visual *vis,
30 Colormap cmap,
31 int depth,
32 int w,
33 int h,
34 int indirect,
35 int alpha,
36 int rot)
37{
38 Evas_GL_X11_Window *gw;
39#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
40 int context_attrs[3];
41 int config_attrs[40];
42 int major_version, minor_version;
43 int num_config, n = 0;
44#endif
45 XVisualInfo *vi_use;
46 const GLubyte *vendor, *renderer, *version;
47
48 if (!_evas_gl_x11_vi) return NULL;
49
50 gw = calloc(1, sizeof(Evas_GL_X11_Window));
51 if (!gw) return NULL;
52
53 win_count++;
54 gw->disp = disp;
55 gw->win = win;
56 gw->screen = screen;
57 gw->visual = vis;
58 gw->colormap = cmap;
59 gw->depth = depth;
60 gw->alpha = alpha;
61 gw->w = w;
62 gw->h = h;
63 gw->rot = rot;
64
65 vi_use = _evas_gl_x11_vi;
66 if (gw->alpha)
67 {
68#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
69 if (_evas_gl_x11_rgba_vi)
70 {
71 vi_use = _evas_gl_x11_rgba_vi;
72 }
73#else
74//#ifdef NEWGL
75 if (_evas_gl_x11_rgba_vi)
76 {
77 vi_use = _evas_gl_x11_rgba_vi;
78 }
79//#endif
80#endif
81 }
82 gw->visualinfo = vi_use;
83
84// EGL / GLES
85#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
86 context_attrs[0] = EGL_CONTEXT_CLIENT_VERSION;
87 context_attrs[1] = 2;
88 context_attrs[2] = EGL_NONE;
89
90# if defined(GLES_VARIETY_S3C6410)
91 if (gw->visualinfo->depth == 16) // 16bpp
92 {
93 config_attrs[n++] = EGL_SURFACE_TYPE;
94 config_attrs[n++] = EGL_WINDOW_BIT;
95 config_attrs[n++] = EGL_RENDERABLE_TYPE;
96 config_attrs[n++] = EGL_OPENGL_ES2_BIT;
97 config_attrs[n++] = EGL_RED_SIZE;
98 config_attrs[n++] = 5;
99 config_attrs[n++] = EGL_GREEN_SIZE;
100 config_attrs[n++] = 6;
101 config_attrs[n++] = EGL_BLUE_SIZE;
102 config_attrs[n++] = 5;
103 config_attrs[n++] = EGL_DEPTH_SIZE;
104 config_attrs[n++] = 0;
105 config_attrs[n++] = EGL_STENCIL_SIZE;
106 config_attrs[n++] = 0;
107 config_attrs[n++] = EGL_NONE;
108 }
109 else // 24/32bit. no one does 8bpp anymore. and 15bpp... dead
110 {
111 config_attrs[n++] = EGL_SURFACE_TYPE;
112 config_attrs[n++] = EGL_WINDOW_BIT;
113 config_attrs[n++] = EGL_RENDERABLE_TYPE;
114 config_attrs[n++] = EGL_OPENGL_ES2_BIT;
115 config_attrs[n++] = EGL_RED_SIZE;
116 config_attrs[n++] = 8;
117 config_attrs[n++] = EGL_GREEN_SIZE;
118 config_attrs[n++] = 8;
119 config_attrs[n++] = EGL_BLUE_SIZE;
120 config_attrs[n++] = 8;
121 config_attrs[n++] = EGL_DEPTH_SIZE;
122 config_attrs[n++] = 0;
123 config_attrs[n++] = EGL_STENCIL_SIZE;
124 config_attrs[n++] = 0;
125 config_attrs[n++] = EGL_NONE;
126 }
127# elif defined(GLES_VARIETY_SGX)
128 config_attrs[n++] = EGL_SURFACE_TYPE;
129 config_attrs[n++] = EGL_WINDOW_BIT;
130 config_attrs[n++] = EGL_RENDERABLE_TYPE;
131 config_attrs[n++] = EGL_OPENGL_ES2_BIT;
132#if 0
133// FIXME: n900 - omap3 sgx libs break here
134 config_attrs[n++] = EGL_RED_SIZE;
135 config_attrs[n++] = 1;
136 config_attrs[n++] = EGL_GREEN_SIZE;
137 config_attrs[n++] = 1;
138 config_attrs[n++] = EGL_BLUE_SIZE;
139 config_attrs[n++] = 1;
140// FIXME: end n900 breakage
141#endif
142 if (gw->alpha)
143 {
144 config_attrs[n++] = EGL_ALPHA_SIZE;
145 config_attrs[n++] = 1;
146 }
147 else
148 {
149 config_attrs[n++] = EGL_ALPHA_SIZE;
150 config_attrs[n++] = 0;
151 }
152 config_attrs[n++] = EGL_DEPTH_SIZE;
153 config_attrs[n++] = 0;
154 config_attrs[n++] = EGL_STENCIL_SIZE;
155 config_attrs[n++] = 0;
156 config_attrs[n++] = EGL_NONE;
157# endif
158
159 gw->egl_disp = eglGetDisplay((EGLNativeDisplayType)(gw->disp));
160 if (!gw->egl_disp)
161 {
162 ERR("eglGetDisplay() fail. code=%#x", eglGetError());
163 eng_window_free(gw);
164 return NULL;
165 }
166 if (!eglInitialize(gw->egl_disp, &major_version, &minor_version))
167 {
168 ERR("eglInitialize() fail. code=%#x", eglGetError());
169 eng_window_free(gw);
170 return NULL;
171 }
172 eglBindAPI(EGL_OPENGL_ES_API);
173 if (eglGetError() != EGL_SUCCESS)
174 {
175 ERR("eglBindAPI() fail. code=%#x", eglGetError());
176 eng_window_free(gw);
177 return NULL;
178 }
179
180 num_config = 0;
181 if (!eglChooseConfig(gw->egl_disp, config_attrs, &gw->egl_config,
182 1, &num_config) || (num_config != 1))
183 {
184 ERR("eglChooseConfig() fail. code=%#x", eglGetError());
185 eng_window_free(gw);
186 return NULL;
187 }
188 gw->egl_surface[0] = eglCreateWindowSurface(gw->egl_disp, gw->egl_config,
189 (EGLNativeWindowType)gw->win,
190 NULL);
191 if (gw->egl_surface[0] == EGL_NO_SURFACE)
192 {
193 ERR("eglCreateWindowSurface() fail for %#x. code=%#x",
194 (unsigned int)gw->win, eglGetError());
195 eng_window_free(gw);
196 return NULL;
197 }
198 if (context == EGL_NO_CONTEXT)
199 context = eglCreateContext(gw->egl_disp, gw->egl_config, NULL,
200 context_attrs);
201 gw->egl_context[0] = context;
202 if (gw->egl_context[0] == EGL_NO_CONTEXT)
203 {
204 ERR("eglCreateContext() fail. code=%#x", eglGetError());
205 eng_window_free(gw);
206 return NULL;
207 }
208 if (eglMakeCurrent(gw->egl_disp,
209 gw->egl_surface[0],
210 gw->egl_surface[0],
211 gw->egl_context[0]) == EGL_FALSE)
212 {
213 ERR("eglMakeCurrent() fail. code=%#x", eglGetError());
214 eng_window_free(gw);
215 return NULL;
216 }
217
218 vendor = glGetString(GL_VENDOR);
219 renderer = glGetString(GL_RENDERER);
220 version = glGetString(GL_VERSION);
221 if (!vendor) vendor = (unsigned char *)"-UNKNOWN-";
222 if (!renderer) renderer = (unsigned char *)"-UNKNOWN-";
223 if (!version) version = (unsigned char *)"-UNKNOWN-";
224 if (getenv("EVAS_GL_INFO"))
225 {
226 fprintf(stderr, "vendor: %s\n", vendor);
227 fprintf(stderr, "renderer: %s\n", renderer);
228 fprintf(stderr, "version: %s\n", version);
229 }
230// GLX
231#else
232 if (!context)
233 {
234#ifdef NEWGL
235 if (indirect)
236 context = glXCreateNewContext(gw->disp, fbconf,
237 GLX_RGBA_TYPE, NULL,
238 GL_FALSE);
239 else
240 context = glXCreateNewContext(gw->disp, fbconf,
241 GLX_RGBA_TYPE, NULL,
242 GL_TRUE);
243#else
244 if (indirect)
245 context = glXCreateContext(gw->disp, gw->visualinfo, NULL, GL_FALSE);
246 else
247 context = glXCreateContext(gw->disp, gw->visualinfo, NULL, GL_TRUE);
248#endif
249 }
250#ifdef NEWGL
251 if ((gw->alpha) && (!rgba_context))
252 {
253 if (indirect)
254 rgba_context = glXCreateNewContext(gw->disp, rgba_fbconf,
255 GLX_RGBA_TYPE, context,
256 GL_FALSE);
257 else
258 rgba_context = glXCreateNewContext(gw->disp, rgba_fbconf,
259 GLX_RGBA_TYPE, context,
260 GL_TRUE);
261 }
262 if (gw->alpha)
263 gw->glxwin = glXCreateWindow(gw->disp, rgba_fbconf, gw->win, NULL);
264 else
265 gw->glxwin = glXCreateWindow(gw->disp, fbconf, gw->win, NULL);
266 if (!gw->glxwin)
267 {
268 eng_window_free(gw);
269 return NULL;
270 }
271
272 if (gw->alpha) gw->context = rgba_context;
273 else gw->context = context;
274#else
275 gw->context = context;
276#endif
277
278 if (!gw->context)
279 {
280 eng_window_free(gw);
281 return NULL;
282 }
283 if (gw->context)
284 {
285 int i, j, num;
286 GLXFBConfig *fbc;
287 int blacklist = 0;
288
289 if (gw->glxwin)
290 {
291 if (!glXMakeContextCurrent(gw->disp, gw->glxwin, gw->glxwin,
292 gw->context))
293 {
294 printf("Error: glXMakeContextCurrent(%p, %p, %p, %p)\n", (void *)gw->disp, (void *)gw->glxwin, (void *)gw->glxwin, (void *)gw->context);
295 eng_window_free(gw);
296 return NULL;
297 }
298 }
299 else
300 {
301 if (!glXMakeCurrent(gw->disp, gw->win, gw->context))
302 {
303 printf("Error: glXMakeCurrent(%p, 0x%x, %p) failed\n", (void *)gw->disp, (unsigned int)gw->win, (void *)gw->context);
304 eng_window_free(gw);
305 return NULL;
306 }
307 }
308
309 // FIXME: move this up to context creation
310
311 vendor = glGetString(GL_VENDOR);
312 renderer = glGetString(GL_RENDERER);
313 version = glGetString(GL_VERSION);
314 if (getenv("EVAS_GL_INFO"))
315 {
316 fprintf(stderr, "vendor: %s\n", vendor);
317 fprintf(stderr, "renderer: %s\n", renderer);
318 fprintf(stderr, "version: %s\n", version);
319 }
320 // examples:
321 // vendor: NVIDIA Corporation
322 // renderer: NVIDIA Tegra
323 // version: OpenGL ES 2.0
324 // or
325 // vendor: Imagination Technologies
326 // renderer: PowerVR SGX 540
327 // version: OpenGL ES 2.0
328 // or
329 // vendor: NVIDIA Corporation
330 // renderer: GeForce GT 330M/PCI/SSE2
331 // version: 3.3.0 NVIDIA 256.53
332 // or
333 // vendor: NVIDIA Corporation
334 // renderer: GeForce GT 220/PCI/SSE2
335 // version: 3.2.0 NVIDIA 195.36.24
336 // or
337 // vendor: NVIDIA Corporation
338 // renderer: GeForce 8600 GTS/PCI/SSE2
339 // version: 3.3.0 NVIDIA 260.19.36
340 // or
341 // vendor: ATI Technologies Inc.
342 // renderer: ATI Mobility Radeon HD 4650
343 // version: 3.2.9756 Compatibility Profile Context
344 // or
345 // vendor: Tungsten Graphics, Inc
346 // renderer: Mesa DRI Mobile Intel® GM45 Express Chipset GEM 20100330 DEVELOPMENT x86/MMX/SSE2
347 // version: 2.1 Mesa 7.9-devel
348 // or
349 // vendor: Advanced Micro Devices, Inc.
350 // renderer: Mesa DRI R600 (RS780 9610) 20090101 TCL DRI2
351 // version: 2.1 Mesa 7.9-devel
352 // or
353 // vendor: NVIDIA Corporation
354 // renderer: GeForce 9600 GT/PCI/SSE2
355 // version: 3.3.0 NVIDIA 260.19.29
356 // or
357 // vendor: ATI Technologies Inc.
358 // renderer: ATI Radeon HD 4800 Series
359 // version: 3.3.10237 Compatibility Profile Context
360 // or
361 // vendor: Advanced Micro Devices, Inc.
362 // renderer: Mesa DRI R600 (RV770 9442) 20090101 TCL DRI2
363 // version: 2.0 Mesa 7.8.2
364 // or
365 // vendor: Tungsten Graphics, Inc
366 // renderer: Mesa DRI Mobile Intel® GM45 Express Chipset GEM 20100330 DEVELOPMENT
367 // version: 2.1 Mesa 7.9-devel
368 // or (bad - software renderer)
369 // vendor: Mesa Project
370 // renderer: Software Rasterizer
371 // version: 2.1 Mesa 7.9-devel
372 // or (bad - software renderer)
373 // vendor: VMware, Inc.
374 // renderer: Gallium 0.4 on softpipe
375 // version: 2.1 Mesa 7.9-devel
376
377 if (strstr((const char *)vendor, "Mesa Project"))
378 {
379 if (strstr((const char *)renderer, "Software Rasterizer"))
380 blacklist = 1;
381 }
382 if (strstr((const char *)renderer, "softpipe"))
383 blacklist = 1;
384 if (blacklist)
385 {
386 ERR("OpenGL Driver blacklisted:");
387 ERR("Vendor: %s", (const char *)vendor);
388 ERR("Renderer: %s", (const char *)renderer);
389 ERR("Version: %s", (const char *)version);
390 eng_window_free(gw);
391 return NULL;
392 }
393 if (strstr((const char *)vendor, "NVIDIA"))
394 {
395 if (!strstr((const char *)renderer, "NVIDIA Tegra"))
396 {
397 int v1 = 0, v2 = 0, v3 = 0;
398
399 if (sscanf((const char *)version,
400 "%*s %*s %i.%i.%i",
401 &v1, &v2, &v3) != 3)
402 {
403 v1 = v2 = v3 = 0;
404 if (sscanf((const char *)version,
405 "%*s %*s %i.%i",
406 &v1, &v2) != 2)
407 v1 = 0;
408 }
409 // ALSO as of some nvidia driver version loose binding is
410 // probably not needed
411 if (v1 < 195) gw->detected.loose_binding = 1;
412 }
413 }
414 else
415 {
416 // noothing yet. add more cases and options over time
417 }
418
419 fbc = glXGetFBConfigs(gw->disp, screen, &num);
420 if (!fbc)
421 {
422 ERR("glXGetFBConfigs() returned no fb configs");
423 eng_window_free(gw);
424 return NULL;
425 }
426 for (i = 0; i <= 32; i++)
427 {
428 for (j = 0; j < num; j++)
429 {
430 XVisualInfo *vi;
431 int vd;
432 int alph, val, dbuf, stencil, tdepth;
433 int rgba;
434
435 vi = glXGetVisualFromFBConfig(gw->disp, fbc[j]);
436 if (!vi) continue;
437 vd = vi->depth;
438 XFree(vi);
439
440 if (vd != i) continue;
441
442 glXGetFBConfigAttrib(gw->disp, fbc[j], GLX_ALPHA_SIZE, &alph);
443 glXGetFBConfigAttrib(gw->disp, fbc[j], GLX_BUFFER_SIZE, &val);
444
445 if ((val != i) && ((val - alph) != i)) continue;
446
447 val = 0;
448 rgba = 0;
449
450 if (i == 32)
451 {
452 glXGetFBConfigAttrib(gw->disp, fbc[j], GLX_BIND_TO_TEXTURE_RGBA_EXT, &val);
453 if (val)
454 {
455 rgba = 1;
456 gw->depth_cfg[i].tex_format = GLX_TEXTURE_FORMAT_RGBA_EXT;
457 }
458 }
459 if (!val)
460 {
461 if (rgba) continue;
462 glXGetFBConfigAttrib(gw->disp, fbc[j], GLX_BIND_TO_TEXTURE_RGB_EXT, &val);
463 if (!val) continue;
464 gw->depth_cfg[i].tex_format = GLX_TEXTURE_FORMAT_RGB_EXT;
465 }
466
467 dbuf = 0x7fff;
468 glXGetFBConfigAttrib(gw->disp, fbc[j], GLX_DOUBLEBUFFER, &val);
469 if (val > dbuf) continue;
470 dbuf = val;
471
472 stencil = 0x7fff;
473 glXGetFBConfigAttrib(gw->disp, fbc[j], GLX_STENCIL_SIZE, &val);
474 if (val > stencil) continue;
475 stencil = val;
476
477 tdepth = 0x7fff;
478 glXGetFBConfigAttrib(gw->disp, fbc[j], GLX_DEPTH_SIZE, &val);
479 if (val > tdepth) continue;
480 tdepth = val;
481
482 glXGetFBConfigAttrib(gw->disp, fbc[j], GLX_BIND_TO_MIPMAP_TEXTURE_EXT, &val);
483 if (val < 0) continue;
484 gw->depth_cfg[i].mipmap = val;
485
486 glXGetFBConfigAttrib(gw->disp, fbc[j], GLX_Y_INVERTED_EXT, &val);
487 gw->depth_cfg[i].yinvert = val;
488
489 glXGetFBConfigAttrib(gw->disp, fbc[j], GLX_BIND_TO_TEXTURE_TARGETS_EXT, &val);
490 gw->depth_cfg[i].tex_target = val;
491
492 gw->depth_cfg[i].fbc = fbc[j];
493 }
494 }
495 XFree(fbc);
496 if (!gw->depth_cfg[DefaultDepth(gw->disp, screen)].fbc)
497 {
498 WRN("texture from pixmap not going to work");
499 }
500 }
501#endif
502
503 gw->gl_context = evas_gl_common_context_new();
504 if (!gw->gl_context)
505 {
506 eng_window_free(gw);
507 return NULL;
508 }
509#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
510 gw->gl_context->egldisp = gw->egl_disp;
511#endif
512 eng_window_use(gw);
513 evas_gl_common_context_resize(gw->gl_context, w, h, rot);
514 gw->surf = 1;
515 return gw;
516 indirect = 0;
517}
518
519void
520eng_window_free(Evas_GL_X11_Window *gw)
521{
522 int ref = 0;
523 win_count--;
524 eng_window_use(gw);
525 if (gw == _evas_gl_x11_window) _evas_gl_x11_window = NULL;
526 if (gw->gl_context)
527 {
528 ref = gw->gl_context->references - 1;
529 evas_gl_common_context_free(gw->gl_context);
530 }
531#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
532 if (gw->egl_surface[0] != EGL_NO_SURFACE)
533 eglDestroySurface(gw->egl_disp, gw->egl_surface[0]);
534 if (ref == 0)
535 {
536 if (context) eglDestroyContext(gw->egl_disp, context);
537 eglTerminate(gw->egl_disp);
538 context = EGL_NO_CONTEXT;
539 }
540 eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
541#else
542 if (gw->glxwin) glXDestroyWindow(gw->disp, gw->glxwin);
543 if (ref == 0)
544 {
545 if (context) glXDestroyContext(gw->disp, context);
546 if (rgba_context) glXDestroyContext(gw->disp, rgba_context);
547 context = 0;
548 rgba_context = 0;
549 fbconf = 0;
550 rgba_fbconf = 0;
551 }
552#endif
553 free(gw);
554}
555
556void
557eng_window_use(Evas_GL_X11_Window *gw)
558{
559 Eina_Bool force_use = EINA_FALSE;
560
561#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
562 if (_evas_gl_x11_window)
563 {
564 if ((eglGetCurrentContext() !=
565 _evas_gl_x11_window->egl_context[0]) ||
566 (eglGetCurrentSurface(EGL_READ) !=
567 _evas_gl_x11_window->egl_surface[0]) ||
568 (eglGetCurrentSurface(EGL_DRAW) !=
569 _evas_gl_x11_window->egl_surface[0]))
570 force_use = EINA_TRUE;
571 }
572#else
573 if (_evas_gl_x11_window)
574 {
575 if (glXGetCurrentContext() != _evas_gl_x11_window->context)
576 force_use = EINA_TRUE;
577 }
578#endif
579 if ((_evas_gl_x11_window != gw) || (force_use))
580 {
581 if (_evas_gl_x11_window)
582 {
583 evas_gl_common_context_use(_evas_gl_x11_window->gl_context);
584 evas_gl_common_context_flush(_evas_gl_x11_window->gl_context);
585 }
586 _evas_gl_x11_window = gw;
587 if (gw)
588 {
589// EGL / GLES
590#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
591 if (gw->egl_surface[0] != EGL_NO_SURFACE)
592 {
593 if (eglMakeCurrent(gw->egl_disp,
594 gw->egl_surface[0],
595 gw->egl_surface[0],
596 gw->egl_context[0]) == EGL_FALSE)
597 {
598 ERR("eglMakeCurrent() failed!");
599 }
600 }
601// GLX
602#else
603 if (gw->glxwin)
604 {
605 if (!glXMakeContextCurrent(gw->disp, gw->glxwin, gw->glxwin,
606 gw->context))
607 {
608 ERR("glXMakeContextCurrent(%p, %p, %p, %p)", (void *)gw->disp, (void *)gw->glxwin, (void *)gw->glxwin, (void *)gw->context);
609 }
610 }
611 else
612 {
613 if (!glXMakeCurrent(gw->disp, gw->win, gw->context))
614 {
615 ERR("glXMakeCurrent(%p, 0x%x, %p) failed", gw->disp, (unsigned int)gw->win, (void *)gw->context);
616 }
617 }
618#endif
619 }
620 }
621 if (gw) evas_gl_common_context_use(gw->gl_context);
622}
623
624void
625eng_window_unsurf(Evas_GL_X11_Window *gw)
626{
627 if (!gw->surf) return;
628 if (!getenv("EVAS_GL_WIN_RESURF")) return;
629 if (getenv("EVAS_GL_INFO"))
630 printf("unsurf %p\n", gw);
631#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
632 if (_evas_gl_x11_window)
633 evas_gl_common_context_flush(_evas_gl_x11_window->gl_context);
634 if (_evas_gl_x11_window == gw)
635 {
636 eglMakeCurrent(gw->egl_disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
637 if (gw->egl_surface[0] != EGL_NO_SURFACE)
638 eglDestroySurface(gw->egl_disp, gw->egl_surface[0]);
639 gw->egl_surface[0] = EGL_NO_SURFACE;
640 _evas_gl_x11_window = NULL;
641 }
642#else
643 if (gw->glxwin)
644 {
645 glXDestroyWindow(gw->disp, gw->glxwin);
646 }
647 else
648 {
649 }
650#endif
651 gw->surf = 0;
652}
653
654void
655eng_window_resurf(Evas_GL_X11_Window *gw)
656{
657 if (gw->surf) return;
658 if (getenv("EVAS_GL_INFO"))
659 printf("resurf %p\n", gw);
660#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
661 gw->egl_surface[0] = eglCreateWindowSurface(gw->egl_disp, gw->egl_config,
662 (EGLNativeWindowType)gw->win,
663 NULL);
664 if (gw->egl_surface[0] == EGL_NO_SURFACE)
665 {
666 ERR("eglCreateWindowSurface() fail for %#x. code=%#x",
667 (unsigned int)gw->win, eglGetError());
668 return;
669 }
670 if (eglMakeCurrent(gw->egl_disp,
671 gw->egl_surface[0],
672 gw->egl_surface[0],
673 gw->egl_context[0]) == EGL_FALSE)
674 {
675 ERR("eglMakeCurrent() failed!");
676 }
677#else
678#ifdef NEWGL
679 if (gw->alpha)
680 gw->glxwin = glXCreateWindow(gw->disp, rgba_fbconf, gw->win, NULL);
681 else
682 gw->glxwin = glXCreateWindow(gw->disp, fbconf, gw->win, NULL);
683 if (!glXMakeContextCurrent(gw->disp, gw->glxwin, gw->glxwin,
684 gw->context))
685 {
686 ERR("glXMakeContextCurrent(%p, %p, %p, %p)", (void *)gw->disp, (void *)gw->glxwin, (void *)gw->glxwin, (void *)gw->context);
687 }
688#else
689 if (!glXMakeCurrent(gw->disp, gw->win, gw->context))
690 {
691 ERR("glXMakeCurrent(%p, 0x%x, %p) failed", (void *)gw->disp, (unsigned int)gw->win, (void *)gw->context);
692 }
693#endif
694#endif
695 gw->surf = 1;
696}
697
698Visual *
699eng_best_visual_get(Evas_Engine_Info_GL_X11 *einfo)
700{
701 if (!einfo) return NULL;
702 if (!einfo->info.display) return NULL;
703 if (!_evas_gl_x11_vi)
704 {
705 int alpha;
706
707// EGL / GLES
708#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
709 for (alpha = 0; alpha < 2; alpha++)
710 {
711 int depth = DefaultDepth(einfo->info.display,
712 einfo->info.screen);
713 if (alpha)
714 {
715 XVisualInfo *xvi, vi_in;
716 int nvi, i;
717 XRenderPictFormat *fmt;
718
719 vi_in.screen = einfo->info.screen;
720 vi_in.depth = 32;
721 vi_in.class = TrueColor;
722 xvi = XGetVisualInfo(einfo->info.display,
723 VisualScreenMask | VisualDepthMask |
724 VisualClassMask,
725 &vi_in, &nvi);
726 if (xvi)
727 {
728 for (i = 0; i < nvi; i++)
729 {
730 fmt = XRenderFindVisualFormat(einfo->info.display,
731 xvi[i].visual);
732 if ((fmt->type == PictTypeDirect) &&
733 (fmt->direct.alphaMask))
734 {
735 _evas_gl_x11_rgba_vi =
736 calloc(1, sizeof(XVisualInfo));
737 if (_evas_gl_x11_rgba_vi)
738 memcpy(_evas_gl_x11_rgba_vi,
739 &(xvi[i]), sizeof(XVisualInfo));
740 break;
741 }
742 }
743 XFree (xvi);
744 }
745 }
746 else
747 {
748 _evas_gl_x11_vi = calloc(1, sizeof(XVisualInfo));
749 XMatchVisualInfo(einfo->info.display,
750 einfo->info.screen, depth, TrueColor,
751 _evas_gl_x11_vi);
752 }
753 }
754// GLX
755#else
756 for (alpha = 0; alpha < 2; alpha++)
757 {
758 int config_attrs[40];
759 GLXFBConfig *configs = NULL, config = 0;
760 int i, num;
761
762 i = 0;
763 config_attrs[i++] = GLX_DRAWABLE_TYPE;
764 config_attrs[i++] = GLX_WINDOW_BIT;
765 config_attrs[i++] = GLX_DOUBLEBUFFER;
766 config_attrs[i++] = 1;
767 config_attrs[i++] = GLX_RED_SIZE;
768 config_attrs[i++] = 1;
769 config_attrs[i++] = GLX_GREEN_SIZE;
770 config_attrs[i++] =1;
771 config_attrs[i++] = GLX_BLUE_SIZE;
772 config_attrs[i++] = 1;
773 if (alpha)
774 {
775 config_attrs[i++] = GLX_RENDER_TYPE;
776 config_attrs[i++] = GLX_RGBA_BIT;
777 config_attrs[i++] = GLX_ALPHA_SIZE;
778 config_attrs[i++] = 1;
779 }
780 else
781 {
782 config_attrs[i++] = GLX_ALPHA_SIZE;
783 config_attrs[i++] = 0;
784 }
785 config_attrs[i++] = GLX_DEPTH_SIZE;
786 config_attrs[i++] = 0;
787 config_attrs[i++] = GLX_STENCIL_SIZE;
788 config_attrs[i++] = 0;
789 config_attrs[i++] = GLX_AUX_BUFFERS;
790 config_attrs[i++] = 0;
791 config_attrs[i++] = GLX_STEREO;
792 config_attrs[i++] = 0;
793 config_attrs[i++] = GLX_TRANSPARENT_TYPE;
794 config_attrs[i++] = GLX_NONE;//GLX_NONE;//GLX_TRANSPARENT_INDEX//GLX_TRANSPARENT_RGB;
795 config_attrs[i++] = 0;
796
797 configs = glXChooseFBConfig(einfo->info.display,
798 einfo->info.screen,
799 config_attrs, &num);
800 if ((!configs) || (num < 1))
801 {
802 ERR("glXChooseFBConfig returned no configs");
803 return NULL;
804 }
805 for (i = 0; i < num; i++)
806 {
807 XVisualInfo *visinfo;
808 XRenderPictFormat *format = NULL;
809
810 visinfo = glXGetVisualFromFBConfig(einfo->info.display,
811 configs[i]);
812 if (!visinfo) continue;
813 if (!alpha)
814 {
815 config = configs[i];
816 _evas_gl_x11_vi = malloc(sizeof(XVisualInfo));
817 memcpy(_evas_gl_x11_vi, visinfo, sizeof(XVisualInfo));
818 fbconf = config;
819 XFree(visinfo);
820 break;
821 }
822 else
823 {
824 format = XRenderFindVisualFormat
825 (einfo->info.display, visinfo->visual);
826 if (!format)
827 {
828 XFree(visinfo);
829 continue;
830 }
831 if (format->direct.alphaMask > 0)
832 {
833 config = configs[i];
834 _evas_gl_x11_rgba_vi = malloc(sizeof(XVisualInfo));
835 memcpy(_evas_gl_x11_rgba_vi, visinfo, sizeof(XVisualInfo));
836 rgba_fbconf = config;
837 XFree(visinfo);
838 break;
839 }
840 }
841 XFree(visinfo);
842 }
843 }
844#endif
845 }
846 if (!_evas_gl_x11_vi) return NULL;
847 if (einfo->info.destination_alpha)
848 {
849// EGL / GLES
850#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
851 if (_evas_gl_x11_rgba_vi) return _evas_gl_x11_rgba_vi->visual;
852#else
853//# ifdef NEWGL
854 if (_evas_gl_x11_rgba_vi) return _evas_gl_x11_rgba_vi->visual;
855//# endif
856#endif
857 }
858 return _evas_gl_x11_vi->visual;
859}
860
861Colormap
862eng_best_colormap_get(Evas_Engine_Info_GL_X11 *einfo)
863{
864 if (!einfo) return 0;
865 if (!einfo->info.display) return 0;
866 if (!_evas_gl_x11_vi) eng_best_visual_get(einfo);
867 if (!_evas_gl_x11_vi) return 0;
868 if (einfo->info.destination_alpha)
869 {
870 if (!_evas_gl_x11_rgba_cmap)
871 _evas_gl_x11_rgba_cmap =
872 XCreateColormap(einfo->info.display,
873 RootWindow(einfo->info.display,
874 einfo->info.screen),
875 _evas_gl_x11_rgba_vi->visual,
876 0);
877 return _evas_gl_x11_rgba_cmap;
878 }
879 if (!_evas_gl_x11_cmap)
880 _evas_gl_x11_cmap =
881 XCreateColormap(einfo->info.display,
882 RootWindow(einfo->info.display,
883 einfo->info.screen),
884 _evas_gl_x11_vi->visual,
885 0);
886 return _evas_gl_x11_cmap;
887}
888
889int
890eng_best_depth_get(Evas_Engine_Info_GL_X11 *einfo)
891{
892 if (!einfo) return 0;
893 if (!einfo->info.display) return 0;
894 if (!_evas_gl_x11_vi) eng_best_visual_get(einfo);
895 if (!_evas_gl_x11_vi) return 0;
896 if (einfo->info.destination_alpha)
897 {
898 if (_evas_gl_x11_rgba_vi) return _evas_gl_x11_rgba_vi->depth;
899 }
900 return _evas_gl_x11_vi->depth;
901}
diff --git a/libraries/evas/src/modules/engines/psl1ght/Evas_Engine_PSL1GHT.h b/libraries/evas/src/modules/engines/psl1ght/Evas_Engine_PSL1GHT.h
new file mode 100644
index 0000000..f1d5636
--- /dev/null
+++ b/libraries/evas/src/modules/engines/psl1ght/Evas_Engine_PSL1GHT.h
@@ -0,0 +1,16 @@
1#ifndef _EVAS_ENGINE_PSL1GHT_H
2#define _EVAS_ENGINE_PSL1GHT_H
3
4typedef struct _Evas_Engine_Info_PSL1GHT Evas_Engine_Info_PSL1GHT;
5
6struct _Evas_Engine_Info_PSL1GHT
7{
8 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
9 /* at you and make nasty noises */
10 Evas_Engine_Info magic;
11
12 /* non-blocking or blocking mode */
13 Evas_Engine_Render_Mode render_mode;
14};
15#endif
16
diff --git a/libraries/evas/src/modules/engines/psl1ght/Makefile.am b/libraries/evas/src/modules/engines/psl1ght/Makefile.am
new file mode 100644
index 0000000..92ccea7
--- /dev/null
+++ b/libraries/evas/src/modules/engines/psl1ght/Makefile.am
@@ -0,0 +1,47 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9@FREETYPE_CFLAGS@ \
10@PIXMAN_CFLAGS@ \
11@EINA_CFLAGS@ \
12@evas_engine_psl1ght_cflags@
13
14if BUILD_ENGINE_PSL1GHT
15
16PSL1GHT_SOURCES = \
17evas_engine.c \
18rsxutil.c
19
20PSL1GHT_LIBADD = @evas_engine_psl1ght_libs@
21
22
23includes_HEADERS = Evas_Engine_PSL1GHT.h
24includesdir = $(includedir)/evas-@VMAJ@
25
26if !EVAS_STATIC_BUILD_PSL1GHT
27
28pkgdir = $(libdir)/evas/modules/engines/psl1ght/$(MODULE_ARCH)
29pkg_LTLIBRARIES = module.la
30module_la_SOURCES = $(PSL1GHT_SOURCES)
31module_la_LIBADD = @EINA_LIBS@ $(PSL1GHT_LIBADD) $(top_builddir)/src/lib/libevas.la
32module_la_LDFLAGS = -module -avoid-version
33module_la_LIBTOOLFLAGS = --tag=disable-static
34
35else
36
37noinst_LTLIBRARIES = libevas_engine_psl1ght.la
38
39libevas_engine_psl1ght_la_SOURCES = $(PSL1GHT_SOURCES)
40libevas_engine_psl1ght_la_LIBADD = $(PSL1GHT_LIBADD)
41
42endif
43endif
44
45EXTRA_DIST = \
46evas_engine.h \
47rsxutil.h
diff --git a/libraries/evas/src/modules/engines/psl1ght/Makefile.in b/libraries/evas/src/modules/engines/psl1ght/Makefile.in
new file mode 100644
index 0000000..6b553ac
--- /dev/null
+++ b/libraries/evas/src/modules/engines/psl1ght/Makefile.in
@@ -0,0 +1,810 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/psl1ght
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84am__DEPENDENCIES_1 =
85@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_TRUE@libevas_engine_psl1ght_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_psl1ght_la_SOURCES_DIST = evas_engine.c rsxutil.c
87@BUILD_ENGINE_PSL1GHT_TRUE@am__objects_1 = evas_engine.lo rsxutil.lo
88@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_TRUE@am_libevas_engine_psl1ght_la_OBJECTS = $(am__objects_1)
89libevas_engine_psl1ght_la_OBJECTS = \
90 $(am_libevas_engine_psl1ght_la_OBJECTS)
91AM_V_lt = $(am__v_lt_$(V))
92am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
93am__v_lt_0 = --silent
94@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_TRUE@am_libevas_engine_psl1ght_la_rpath =
95@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_FALSE@module_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
96@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_FALSE@ $(top_builddir)/src/lib/libevas.la
97am__module_la_SOURCES_DIST = evas_engine.c rsxutil.c
98@BUILD_ENGINE_PSL1GHT_TRUE@am__objects_2 = module_la-evas_engine.lo \
99@BUILD_ENGINE_PSL1GHT_TRUE@ module_la-rsxutil.lo
100@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_FALSE@am_module_la_OBJECTS = $(am__objects_2)
101module_la_OBJECTS = $(am_module_la_OBJECTS)
102module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
103 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
104 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
105@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_FALSE@am_module_la_rpath = -rpath \
106@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_FALSE@ $(pkgdir)
107DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
108depcomp = $(SHELL) $(top_srcdir)/depcomp
109am__depfiles_maybe = depfiles
110am__mv = mv -f
111COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
112 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
113LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
114 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
115 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
116 $(AM_CFLAGS) $(CFLAGS)
117AM_V_CC = $(am__v_CC_$(V))
118am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
119am__v_CC_0 = @echo " CC " $@;
120AM_V_at = $(am__v_at_$(V))
121am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
122am__v_at_0 = @
123CCLD = $(CC)
124LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
125 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
126 $(AM_LDFLAGS) $(LDFLAGS) -o $@
127AM_V_CCLD = $(am__v_CCLD_$(V))
128am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
129am__v_CCLD_0 = @echo " CCLD " $@;
130AM_V_GEN = $(am__v_GEN_$(V))
131am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
132am__v_GEN_0 = @echo " GEN " $@;
133SOURCES = $(libevas_engine_psl1ght_la_SOURCES) $(module_la_SOURCES)
134DIST_SOURCES = $(am__libevas_engine_psl1ght_la_SOURCES_DIST) \
135 $(am__module_la_SOURCES_DIST)
136am__includes_HEADERS_DIST = Evas_Engine_PSL1GHT.h
137HEADERS = $(includes_HEADERS)
138ETAGS = etags
139CTAGS = ctags
140DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
141ACLOCAL = @ACLOCAL@
142ALLOCA = @ALLOCA@
143AMTAR = @AMTAR@
144AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
145AR = @AR@
146AS = @AS@
147AUTOCONF = @AUTOCONF@
148AUTOHEADER = @AUTOHEADER@
149AUTOMAKE = @AUTOMAKE@
150AWK = @AWK@
151CC = @CC@
152CCDEPMODE = @CCDEPMODE@
153CFLAGS = @CFLAGS@
154CHECK_CFLAGS = @CHECK_CFLAGS@
155CHECK_LIBS = @CHECK_LIBS@
156CPP = @CPP@
157CPPFLAGS = @CPPFLAGS@
158CXX = @CXX@
159CXXCPP = @CXXCPP@
160CXXDEPMODE = @CXXDEPMODE@
161CXXFLAGS = @CXXFLAGS@
162CYGPATH_W = @CYGPATH_W@
163DEFS = @DEFS@
164DEPDIR = @DEPDIR@
165DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
166DIRECTFB_LIBS = @DIRECTFB_LIBS@
167DLLTOOL = @DLLTOOL@
168DSYMUTIL = @DSYMUTIL@
169DUMPBIN = @DUMPBIN@
170ECHO_C = @ECHO_C@
171ECHO_N = @ECHO_N@
172ECHO_T = @ECHO_T@
173ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
174ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
175EDB_CFLAGS = @EDB_CFLAGS@
176EDB_LIBS = @EDB_LIBS@
177EDJE_CFLAGS = @EDJE_CFLAGS@
178EDJE_LIBS = @EDJE_LIBS@
179EET_CFLAGS = @EET_CFLAGS@
180EET_LIBS = @EET_LIBS@
181EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
182EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
183EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
184EGREP = @EGREP@
185EINA_CFLAGS = @EINA_CFLAGS@
186EINA_LIBS = @EINA_LIBS@
187EVAS_CFLAGS = @EVAS_CFLAGS@
188EVAS_LIBS = @EVAS_LIBS@
189EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
190EVIL_CFLAGS = @EVIL_CFLAGS@
191EVIL_LIBS = @EVIL_LIBS@
192EXEEXT = @EXEEXT@
193FGREP = @FGREP@
194FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
195FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
196FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
197FREETYPE_LIBS = @FREETYPE_LIBS@
198FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
199FRIBIDI_LIBS = @FRIBIDI_LIBS@
200GL_EET_CFLAGS = @GL_EET_CFLAGS@
201GL_EET_LIBS = @GL_EET_LIBS@
202GREP = @GREP@
203HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
204HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
205INSTALL = @INSTALL@
206INSTALL_DATA = @INSTALL_DATA@
207INSTALL_PROGRAM = @INSTALL_PROGRAM@
208INSTALL_SCRIPT = @INSTALL_SCRIPT@
209INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
210LD = @LD@
211LDFLAGS = @LDFLAGS@
212LIBOBJS = @LIBOBJS@
213LIBS = @LIBS@
214LIBTOOL = @LIBTOOL@
215LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
216LINEBREAK_LIBS = @LINEBREAK_LIBS@
217LIPO = @LIPO@
218LN_S = @LN_S@
219LTLIBOBJS = @LTLIBOBJS@
220MAKEINFO = @MAKEINFO@
221MKDIR_P = @MKDIR_P@
222MODULE_ARCH = @MODULE_ARCH@
223NM = @NM@
224NMEDIT = @NMEDIT@
225OBJC = @OBJC@
226OBJCDEPMODE = @OBJCDEPMODE@
227OBJCFLAGS = @OBJCFLAGS@
228OBJDUMP = @OBJDUMP@
229OBJEXT = @OBJEXT@
230OTOOL = @OTOOL@
231OTOOL64 = @OTOOL64@
232PACKAGE = @PACKAGE@
233PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
234PACKAGE_NAME = @PACKAGE_NAME@
235PACKAGE_STRING = @PACKAGE_STRING@
236PACKAGE_TARNAME = @PACKAGE_TARNAME@
237PACKAGE_URL = @PACKAGE_URL@
238PACKAGE_VERSION = @PACKAGE_VERSION@
239PATH_SEPARATOR = @PATH_SEPARATOR@
240PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
241PIXMAN_LIBS = @PIXMAN_LIBS@
242PKG_CONFIG = @PKG_CONFIG@
243PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
244PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
245PNG_CFLAGS = @PNG_CFLAGS@
246PNG_LIBS = @PNG_LIBS@
247RANLIB = @RANLIB@
248SDL_CFLAGS = @SDL_CFLAGS@
249SDL_LIBS = @SDL_LIBS@
250SED = @SED@
251SET_MAKE = @SET_MAKE@
252SHELL = @SHELL@
253SHM_OPEN_LINK = @SHM_OPEN_LINK@
254STRIP = @STRIP@
255SVG_CFLAGS = @SVG_CFLAGS@
256SVG_LIBS = @SVG_LIBS@
257VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
258VALGRIND_LIBS = @VALGRIND_LIBS@
259VERSION = @VERSION@
260VMAJ = @VMAJ@
261WIN32_CFLAGS = @WIN32_CFLAGS@
262WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
263XCB_CFLAGS = @XCB_CFLAGS@
264XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
265XCB_GL_LIBS = @XCB_GL_LIBS@
266XCB_LIBS = @XCB_LIBS@
267XEXT_CFLAGS = @XEXT_CFLAGS@
268XEXT_LIBS = @XEXT_LIBS@
269XMKMF = @XMKMF@
270X_CFLAGS = @X_CFLAGS@
271X_EXTRA_LIBS = @X_EXTRA_LIBS@
272X_LIBS = @X_LIBS@
273X_PRE_LIBS = @X_PRE_LIBS@
274abs_builddir = @abs_builddir@
275abs_srcdir = @abs_srcdir@
276abs_top_builddir = @abs_top_builddir@
277abs_top_srcdir = @abs_top_srcdir@
278ac_ct_CC = @ac_ct_CC@
279ac_ct_CXX = @ac_ct_CXX@
280ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
281ac_ct_OBJC = @ac_ct_OBJC@
282altivec_cflags = @altivec_cflags@
283am__include = @am__include@
284am__leading_dot = @am__leading_dot@
285am__quote = @am__quote@
286am__tar = @am__tar@
287am__untar = @am__untar@
288bindir = @bindir@
289build = @build@
290build_alias = @build_alias@
291build_cpu = @build_cpu@
292build_os = @build_os@
293build_vendor = @build_vendor@
294builddir = @builddir@
295datadir = @datadir@
296datarootdir = @datarootdir@
297dlopen_libs = @dlopen_libs@
298docdir = @docdir@
299dvidir = @dvidir@
300edje_cc = @edje_cc@
301efl_doxygen = @efl_doxygen@
302efl_have_doxygen = @efl_have_doxygen@
303evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
304evas_engine_buffer_libs = @evas_engine_buffer_libs@
305evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
306evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
307evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
308evas_engine_directfb_libs = @evas_engine_directfb_libs@
309evas_engine_fb_cflags = @evas_engine_fb_cflags@
310evas_engine_fb_libs = @evas_engine_fb_libs@
311evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
312evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
313evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
314evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
315evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
316evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
317evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
318evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
319evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
320evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
321evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
322evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
323evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
324evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
325evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
326evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
327evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
328evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
329evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
330evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
331evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
332evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
333evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
334evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
335evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
336evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
337evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
338evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
339evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
340evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
341evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
342evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
343evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
344evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
345evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
346evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
347evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
348evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
349evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
350evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
351evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
352evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
353evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
354evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
355evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
356evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
357evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
358evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
359evas_image_loader_png_libs = @evas_image_loader_png_libs@
360evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
361evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
362evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
363evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
364evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
365evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
366evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
367evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
368evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
369evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
370evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
371evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
372exec_prefix = @exec_prefix@
373have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
374have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
375have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
376have_evas_engine_software_x11 = @have_evas_engine_software_x11@
377have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
378have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
379have_lcov = @have_lcov@
380host = @host@
381host_alias = @host_alias@
382host_cpu = @host_cpu@
383host_os = @host_os@
384host_vendor = @host_vendor@
385htmldir = @htmldir@
386includedir = @includedir@
387infodir = @infodir@
388install_sh = @install_sh@
389libdir = @libdir@
390libexecdir = @libexecdir@
391localedir = @localedir@
392localstatedir = @localstatedir@
393lt_ECHO = @lt_ECHO@
394lt_enable_auto_import = @lt_enable_auto_import@
395mandir = @mandir@
396mkdir_p = @mkdir_p@
397oldincludedir = @oldincludedir@
398pdfdir = @pdfdir@
399pkgconfig_requires_private = @pkgconfig_requires_private@
400prefix = @prefix@
401program_transform_name = @program_transform_name@
402psdir = @psdir@
403pthread_cflags = @pthread_cflags@
404pthread_libs = @pthread_libs@
405release_info = @release_info@
406requirement_evas = @requirement_evas@
407sbindir = @sbindir@
408sharedstatedir = @sharedstatedir@
409srcdir = @srcdir@
410sysconfdir = @sysconfdir@
411target_alias = @target_alias@
412top_build_prefix = @top_build_prefix@
413top_builddir = @top_builddir@
414top_srcdir = @top_srcdir@
415version_info = @version_info@
416MAINTAINERCLEANFILES = Makefile.in
417AM_CPPFLAGS = \
418-I. \
419-I$(top_srcdir)/src/lib \
420-I$(top_srcdir)/src/lib/include \
421-I$(top_srcdir)/src/modules/engines \
422@FREETYPE_CFLAGS@ \
423@PIXMAN_CFLAGS@ \
424@EINA_CFLAGS@ \
425@evas_engine_psl1ght_cflags@
426
427@BUILD_ENGINE_PSL1GHT_TRUE@PSL1GHT_SOURCES = \
428@BUILD_ENGINE_PSL1GHT_TRUE@evas_engine.c \
429@BUILD_ENGINE_PSL1GHT_TRUE@rsxutil.c
430
431@BUILD_ENGINE_PSL1GHT_TRUE@PSL1GHT_LIBADD = @evas_engine_psl1ght_libs@
432@BUILD_ENGINE_PSL1GHT_TRUE@includes_HEADERS = Evas_Engine_PSL1GHT.h
433@BUILD_ENGINE_PSL1GHT_TRUE@includesdir = $(includedir)/evas-@VMAJ@
434@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_FALSE@pkgdir = $(libdir)/evas/modules/engines/psl1ght/$(MODULE_ARCH)
435@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_FALSE@pkg_LTLIBRARIES = module.la
436@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_FALSE@module_la_SOURCES = $(PSL1GHT_SOURCES)
437@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_FALSE@module_la_LIBADD = @EINA_LIBS@ $(PSL1GHT_LIBADD) $(top_builddir)/src/lib/libevas.la
438@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_FALSE@module_la_LDFLAGS = -module -avoid-version
439@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
440@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_TRUE@noinst_LTLIBRARIES = libevas_engine_psl1ght.la
441@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_TRUE@libevas_engine_psl1ght_la_SOURCES = $(PSL1GHT_SOURCES)
442@BUILD_ENGINE_PSL1GHT_TRUE@@EVAS_STATIC_BUILD_PSL1GHT_TRUE@libevas_engine_psl1ght_la_LIBADD = $(PSL1GHT_LIBADD)
443EXTRA_DIST = \
444evas_engine.h \
445rsxutil.h
446
447all: all-am
448
449.SUFFIXES:
450.SUFFIXES: .c .lo .o .obj
451$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
452 @for dep in $?; do \
453 case '$(am__configure_deps)' in \
454 *$$dep*) \
455 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
456 && { if test -f $@; then exit 0; else break; fi; }; \
457 exit 1;; \
458 esac; \
459 done; \
460 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/psl1ght/Makefile'; \
461 $(am__cd) $(top_srcdir) && \
462 $(AUTOMAKE) --gnu src/modules/engines/psl1ght/Makefile
463.PRECIOUS: Makefile
464Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
465 @case '$?' in \
466 *config.status*) \
467 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
468 *) \
469 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
470 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
471 esac;
472
473$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
474 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
475
476$(top_srcdir)/configure: $(am__configure_deps)
477 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
478$(ACLOCAL_M4): $(am__aclocal_m4_deps)
479 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
480$(am__aclocal_m4_deps):
481
482clean-noinstLTLIBRARIES:
483 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
484 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
485 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
486 test "$$dir" != "$$p" || dir=.; \
487 echo "rm -f \"$${dir}/so_locations\""; \
488 rm -f "$${dir}/so_locations"; \
489 done
490install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
491 @$(NORMAL_INSTALL)
492 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
493 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
494 list2=; for p in $$list; do \
495 if test -f $$p; then \
496 list2="$$list2 $$p"; \
497 else :; fi; \
498 done; \
499 test -z "$$list2" || { \
500 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
501 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
502 }
503
504uninstall-pkgLTLIBRARIES:
505 @$(NORMAL_UNINSTALL)
506 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
507 for p in $$list; do \
508 $(am__strip_dir) \
509 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
510 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
511 done
512
513clean-pkgLTLIBRARIES:
514 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
515 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
516 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
517 test "$$dir" != "$$p" || dir=.; \
518 echo "rm -f \"$${dir}/so_locations\""; \
519 rm -f "$${dir}/so_locations"; \
520 done
521libevas_engine_psl1ght.la: $(libevas_engine_psl1ght_la_OBJECTS) $(libevas_engine_psl1ght_la_DEPENDENCIES)
522 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_psl1ght_la_rpath) $(libevas_engine_psl1ght_la_OBJECTS) $(libevas_engine_psl1ght_la_LIBADD) $(LIBS)
523module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
524 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
525
526mostlyclean-compile:
527 -rm -f *.$(OBJEXT)
528
529distclean-compile:
530 -rm -f *.tab.c
531
532@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
533@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
534@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-rsxutil.Plo@am__quote@
535@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsxutil.Plo@am__quote@
536
537.c.o:
538@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
539@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
540@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
541@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
542@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
543@am__fastdepCC_FALSE@ $(COMPILE) -c $<
544
545.c.obj:
546@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
547@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
548@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
549@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
550@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
551@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
552
553.c.lo:
554@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
555@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
556@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
557@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
558@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
559@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
560
561module_la-evas_engine.lo: evas_engine.c
562@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
563@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
564@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
565@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
566@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
567@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
568
569module_la-rsxutil.lo: rsxutil.c
570@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-rsxutil.lo -MD -MP -MF $(DEPDIR)/module_la-rsxutil.Tpo -c -o module_la-rsxutil.lo `test -f 'rsxutil.c' || echo '$(srcdir)/'`rsxutil.c
571@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-rsxutil.Tpo $(DEPDIR)/module_la-rsxutil.Plo
572@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
573@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rsxutil.c' object='module_la-rsxutil.lo' libtool=yes @AMDEPBACKSLASH@
574@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
575@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-rsxutil.lo `test -f 'rsxutil.c' || echo '$(srcdir)/'`rsxutil.c
576
577mostlyclean-libtool:
578 -rm -f *.lo
579
580clean-libtool:
581 -rm -rf .libs _libs
582install-includesHEADERS: $(includes_HEADERS)
583 @$(NORMAL_INSTALL)
584 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
585 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
586 for p in $$list; do \
587 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
588 echo "$$d$$p"; \
589 done | $(am__base_list) | \
590 while read files; do \
591 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
592 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
593 done
594
595uninstall-includesHEADERS:
596 @$(NORMAL_UNINSTALL)
597 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
598 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
599 test -n "$$files" || exit 0; \
600 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
601 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
602
603ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
604 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
605 unique=`for i in $$list; do \
606 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
607 done | \
608 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
609 END { if (nonempty) { for (i in files) print i; }; }'`; \
610 mkid -fID $$unique
611tags: TAGS
612
613TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
614 $(TAGS_FILES) $(LISP)
615 set x; \
616 here=`pwd`; \
617 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
618 unique=`for i in $$list; do \
619 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
620 done | \
621 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
622 END { if (nonempty) { for (i in files) print i; }; }'`; \
623 shift; \
624 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
625 test -n "$$unique" || unique=$$empty_fix; \
626 if test $$# -gt 0; then \
627 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
628 "$$@" $$unique; \
629 else \
630 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
631 $$unique; \
632 fi; \
633 fi
634ctags: CTAGS
635CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
636 $(TAGS_FILES) $(LISP)
637 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
638 unique=`for i in $$list; do \
639 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
640 done | \
641 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
642 END { if (nonempty) { for (i in files) print i; }; }'`; \
643 test -z "$(CTAGS_ARGS)$$unique" \
644 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
645 $$unique
646
647GTAGS:
648 here=`$(am__cd) $(top_builddir) && pwd` \
649 && $(am__cd) $(top_srcdir) \
650 && gtags -i $(GTAGS_ARGS) "$$here"
651
652distclean-tags:
653 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
654
655distdir: $(DISTFILES)
656 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
657 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
658 list='$(DISTFILES)'; \
659 dist_files=`for file in $$list; do echo $$file; done | \
660 sed -e "s|^$$srcdirstrip/||;t" \
661 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
662 case $$dist_files in \
663 */*) $(MKDIR_P) `echo "$$dist_files" | \
664 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
665 sort -u` ;; \
666 esac; \
667 for file in $$dist_files; do \
668 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
669 if test -d $$d/$$file; then \
670 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
671 if test -d "$(distdir)/$$file"; then \
672 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
673 fi; \
674 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
675 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
676 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
677 fi; \
678 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
679 else \
680 test -f "$(distdir)/$$file" \
681 || cp -p $$d/$$file "$(distdir)/$$file" \
682 || exit 1; \
683 fi; \
684 done
685check-am: all-am
686check: check-am
687all-am: Makefile $(LTLIBRARIES) $(HEADERS)
688installdirs:
689 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
690 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
691 done
692install: install-am
693install-exec: install-exec-am
694install-data: install-data-am
695uninstall: uninstall-am
696
697install-am: all-am
698 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
699
700installcheck: installcheck-am
701install-strip:
702 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
703 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
704 `test -z '$(STRIP)' || \
705 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
706mostlyclean-generic:
707
708clean-generic:
709
710distclean-generic:
711 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
712 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
713
714maintainer-clean-generic:
715 @echo "This command is intended for maintainers to use"
716 @echo "it deletes files that may require special tools to rebuild."
717 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
718clean: clean-am
719
720clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
721 clean-pkgLTLIBRARIES mostlyclean-am
722
723distclean: distclean-am
724 -rm -rf ./$(DEPDIR)
725 -rm -f Makefile
726distclean-am: clean-am distclean-compile distclean-generic \
727 distclean-tags
728
729dvi: dvi-am
730
731dvi-am:
732
733html: html-am
734
735html-am:
736
737info: info-am
738
739info-am:
740
741install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
742
743install-dvi: install-dvi-am
744
745install-dvi-am:
746
747install-exec-am:
748
749install-html: install-html-am
750
751install-html-am:
752
753install-info: install-info-am
754
755install-info-am:
756
757install-man:
758
759install-pdf: install-pdf-am
760
761install-pdf-am:
762
763install-ps: install-ps-am
764
765install-ps-am:
766
767installcheck-am:
768
769maintainer-clean: maintainer-clean-am
770 -rm -rf ./$(DEPDIR)
771 -rm -f Makefile
772maintainer-clean-am: distclean-am maintainer-clean-generic
773
774mostlyclean: mostlyclean-am
775
776mostlyclean-am: mostlyclean-compile mostlyclean-generic \
777 mostlyclean-libtool
778
779pdf: pdf-am
780
781pdf-am:
782
783ps: ps-am
784
785ps-am:
786
787uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
788
789.MAKE: install-am install-strip
790
791.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
792 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
793 ctags distclean distclean-compile distclean-generic \
794 distclean-libtool distclean-tags distdir dvi dvi-am html \
795 html-am info info-am install install-am install-data \
796 install-data-am install-dvi install-dvi-am install-exec \
797 install-exec-am install-html install-html-am \
798 install-includesHEADERS install-info install-info-am \
799 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
800 install-ps install-ps-am install-strip installcheck \
801 installcheck-am installdirs maintainer-clean \
802 maintainer-clean-generic mostlyclean mostlyclean-compile \
803 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
804 tags uninstall uninstall-am uninstall-includesHEADERS \
805 uninstall-pkgLTLIBRARIES
806
807
808# Tell versions [3.59,3.63) of GNU make to not export all variables.
809# Otherwise a system limit (for SysV at least) may be exceeded.
810.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/psl1ght/evas_engine.c b/libraries/evas/src/modules/engines/psl1ght/evas_engine.c
new file mode 100644
index 0000000..750c098
--- /dev/null
+++ b/libraries/evas/src/modules/engines/psl1ght/evas_engine.c
@@ -0,0 +1,511 @@
1#include "evas_common.h"
2#include "evas_private.h"
3#include "evas_engine.h"
4#include "rsxutil.h"
5#include "Evas_Engine_PSL1GHT.h"
6
7#include <malloc.h>
8
9int _evas_engine_psl1ght_log_dom = -1;
10
11/* function tables - filled in later (func and parent func) */
12static Evas_Func func, pfunc;
13
14/* engine struct data */
15typedef struct _Render_Engine Render_Engine;
16
17#define MAX_BUFFERS 2
18
19struct _Render_Engine
20{
21 Tilebuf *tb;
22 Tilebuf_Rect *rects;
23 Eina_Inlist *cur_rect;
24
25 /* RSX device context */
26 gcmContextData *context;
27 void *host_addr;
28
29 /* The buffers we will be drawing into. */
30 rsxBuffer buffers[MAX_BUFFERS];
31 int currentBuffer;
32 int width;
33 int height;
34 RGBA_Image *rgba_image;
35 uint32_t rgba_image_offset;
36
37 int end : 1;
38};
39
40/* prototypes we will use here */
41static void *_output_setup(int w, int h);
42
43static void *eng_info(Evas *e);
44static void
45 eng_info_free(Evas *e, void *info);
46static int
47 eng_setup(Evas *e, void *info);
48static void
49 eng_output_free(void *data);
50static void
51 eng_output_resize(void *data, int w, int h);
52static void
53 eng_output_tile_size_set(void *data, int w, int h);
54static void
55 eng_output_redraws_rect_add(void *data, int x, int y, int w, int h);
56static void
57 eng_output_redraws_rect_del(void *data, int x, int y, int w, int h);
58static void
59 eng_output_redraws_clear(void *data);
60static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
61static void
62 eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
63static void
64 eng_output_flush(void *data);
65static void
66 eng_output_idle_flush(void *data);
67
68/* internal engine routines */
69static void *
70_output_setup(int w, int h)
71{
72 Render_Engine *re;
73 int i;
74 u16 width, height;
75 DATA32 *image_data = NULL;
76 int image_size;
77
78 printf ("_output_setup called : %dx%d\n", w, h);
79 re = calloc(1, sizeof(Render_Engine));
80 if (!re)
81 return NULL;
82
83 /* Allocate a 1Mb buffer, alligned to a 1Mb boundary
84 * to be our shared IO memory with the RSX. */
85 re->host_addr = memalign (1024 * 1024, HOST_SIZE);
86 if (re->host_addr == NULL)
87 {
88 free (re);
89 return NULL;
90 }
91 re->context = initScreen (re->host_addr, HOST_SIZE);
92 if (re->context == NULL)
93 {
94 free (re->host_addr);
95 free (re);
96 return NULL;
97 }
98 width = w;
99 height = h;
100 setResolution (re->context, &width, &height);
101 re->currentBuffer = 0;
102 re->width = width;
103 re->height = height;
104
105 for (i = 0; i < MAX_BUFFERS; i++)
106 makeBuffer (&re->buffers[i], width, height, i);
107
108 flipBuffer(re->context, MAX_BUFFERS - 1);
109
110 /* if we haven't initialized - init (automatic abort if already done) */
111 evas_common_cpu_init();
112 evas_common_blend_init();
113 evas_common_image_init();
114 evas_common_convert_init();
115 evas_common_scale_init();
116 evas_common_rectangle_init();
117 evas_common_polygon_init();
118 evas_common_line_init();
119 evas_common_font_init();
120 evas_common_draw_init();
121 evas_common_tilebuf_init();
122
123 re->tb = evas_common_tilebuf_new(w, h);
124
125 /* in preliminary tests 16x16 gave highest framerates */
126 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
127
128 /* Allocate our memaligned backbuffer */
129 image_size = ((w * h * sizeof(u32)) + 0xfffff) & - 0x100000;
130 image_data = memalign (1024 * 1024, image_size);
131 re->rgba_image = (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
132 w, h, image_data, 1, EVAS_COLORSPACE_ARGB8888);
133 gcmMapMainMemory(image_data, image_size, &re->rgba_image_offset);
134
135 return re;
136}
137
138/* engine api this module provides */
139static void *
140eng_info(Evas *e)
141{
142 Evas_Engine_Info_PSL1GHT *info;
143
144 printf ("eng_info called\n");
145 info = calloc(1, sizeof(Evas_Engine_Info_PSL1GHT));
146 if (!info)
147 return NULL;
148
149 info->magic.magic = rand();
150 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
151
152 return info;
153}
154
155static void
156eng_info_free(Evas *e __UNUSED__, void *info)
157{
158 Evas_Engine_Info_PSL1GHT *in;
159
160 printf ("eng_info_free called\n");
161 in = (Evas_Engine_Info_PSL1GHT *)info;
162 free(in);
163}
164
165static int
166eng_setup(Evas *e, void *in)
167{
168 Evas_Engine_Info_PSL1GHT *info;
169
170 printf ("eng_setup called\n");
171 info = (Evas_Engine_Info_PSL1GHT *)in;
172
173 e->engine.data.output = _output_setup(e->output.w, e->output.h);
174 if (!e->engine.data.output)
175 return 0;
176
177 e->engine.func = &func;
178 e->engine.data.context = e->engine.func->context_new(e->engine.data.output);
179
180 return 1;
181}
182
183static void
184eng_output_free(void *data)
185{
186 Render_Engine *re;
187 int i;
188
189 printf ("eng_output_free called\n");
190 re = (Render_Engine *)data;
191
192 gcmSetWaitFlip(re->context);
193 for (i = 0; i < MAX_BUFFERS; i++)
194 rsxFree (re->buffers[i].ptr);
195
196 if (re->rgba_image)
197 {
198 DATA32 *image_data;
199
200 image_data = re->rgba_image->image.data;
201 evas_cache_image_drop(&re->rgba_image->cache_entry);
202 free (image_data);
203 }
204
205 freeScreen (re->context);
206 free (re->host_addr);
207
208 evas_common_tilebuf_free(re->tb);
209 if (re->rects)
210 evas_common_tilebuf_free_render_rects(re->rects);
211
212 free(re);
213
214 evas_common_font_shutdown();
215 evas_common_image_shutdown();
216}
217
218static void
219eng_output_resize(void *data, int w, int h)
220{
221 Render_Engine *re;
222 int i;
223 u16 width, height;
224 DATA32 *image_data;
225 int image_size;
226
227 printf ("eng_output_resize called : %dx%d\n", w, h);
228 re = (Render_Engine *)data;
229
230 width = w;
231 height = h;
232 if (setResolution (re->context, &width, &height))
233 {
234 re->width = width;
235 re->height = height;
236
237 gcmSetWaitFlip(re->context);
238 for (i = 0; i < MAX_BUFFERS; i++) {
239 rsxFree (re->buffers[i].ptr);
240 makeBuffer (&re->buffers[i], width, height, i);
241 }
242
243 flipBuffer(re->context, MAX_BUFFERS - 1);
244
245 evas_common_tilebuf_free(re->tb);
246 re->tb = evas_common_tilebuf_new(w, h);
247 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
248
249 /* Realloc our backbuf image */
250 if (re->rgba_image)
251 {
252 image_data = re->rgba_image->image.data;
253 evas_cache_image_drop(&re->rgba_image->cache_entry);
254 free (image_data);
255 }
256 image_size = ((w * h * sizeof(u32)) + 0xfffff) & - 0x100000;
257 image_data = memalign (1024 * 1024, image_size);
258 re->rgba_image = (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
259 w, h, image_data, 1, EVAS_COLORSPACE_ARGB8888);
260 gcmMapMainMemory(image_data, image_size, &re->rgba_image_offset);
261 }
262}
263
264static void
265eng_output_tile_size_set(void *data, int w, int h)
266{
267 Render_Engine *re;
268
269 printf ("eng_output_tile_size_set called : %dx%d\n", w, h);
270 re = (Render_Engine *)data;
271 evas_common_tilebuf_set_tile_size(re->tb, w, h);
272}
273
274static void
275eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
276{
277 Render_Engine *re;
278
279 //printf ("eng_output_redraws_rect_add called : %d,%d %dx%d\n", x, y, w, h);
280 re = (Render_Engine *)data;
281 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
282}
283
284static void
285eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
286{
287 Render_Engine *re;
288
289 //printf ("eng_output_redraws_rect_del called : %d,%d %dx%d\n", x, y, w, h);
290 re = (Render_Engine *)data;
291 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
292}
293
294static void
295eng_output_redraws_clear(void *data)
296{
297 Render_Engine *re;
298
299 //printf ("eng_output_redraws_clear called\n");
300 re = (Render_Engine *)data;
301 evas_common_tilebuf_clear(re->tb);
302}
303
304static void *
305eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
306{
307 Render_Engine *re;
308 Tilebuf_Rect *rect;
309 int ux, uy, uw, uh;
310
311 re = (Render_Engine *)data;
312 /*printf ("eng_output_redraws_next_update_get called : %d,%d %dx%d -- %d,%d %dx%d\n",
313 *x, *y, *w, *h, *cx, *cy, *cw, *ch);*/
314 if (re->end)
315 {
316 re->end = 0;
317 return NULL;
318 }
319 if (!re->rects)
320 {
321 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
322 re->cur_rect = EINA_INLIST_GET(re->rects);
323 }
324 if (!re->cur_rect)
325 return NULL;
326
327 rect = (Tilebuf_Rect *)re->cur_rect;
328 ux = rect->x; uy = rect->y; uw = rect->w; uh = rect->h;
329 re->cur_rect = re->cur_rect->next;
330 if (!re->cur_rect)
331 {
332 evas_common_tilebuf_free_render_rects(re->rects);
333 re->rects = NULL;
334 re->end = 1;
335 }
336
337 *x = *cx = ux;
338 *y = *cy = uy;
339 *w = *cw = uw;
340 *h = *ch = uh;
341 /*printf ("eng_output_redraws_next_update_get returning : %d,%d %dx%d -- %d,%d %dx%d\n",
342 *x, *y, *w, *h, *cx, *cy, *cw, *ch);*/
343
344 return re->rgba_image;
345}
346
347static void
348eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
349{
350 /* Don't do anything, we'll just coy the whole buffer when it's time to flush */
351}
352
353static void
354eng_output_flush(void *data)
355{
356 Render_Engine *re;
357 rsxBuffer *buffer;
358 int width;
359 int height;
360
361 //printf ("eng_output_flush called\n");
362 re = (Render_Engine *)data;
363 buffer = &re->buffers[re->currentBuffer];
364 width = re->rgba_image->cache_entry.w;
365 height = re->rgba_image->cache_entry.h;
366
367 /* Wait for the flip before copying the buffer */
368 waitFlip ();
369
370 if (re->width == width &&
371 re->height == height)
372 {
373 /* DMA the back buffer into the rsx buffer */
374 rsxSetTransferImage (re->context,
375 GCM_TRANSFER_MAIN_TO_LOCAL,
376 buffer->offset, buffer->width * sizeof(u32),
377 0, 0,
378 re->rgba_image_offset, re->width * sizeof(u32),
379 0, 0, re->width, re->height, sizeof(u32));
380 }
381 else
382 {
383 gcmTransferScale gcm_scale;
384 gcmTransferSurface gcm_surface;
385
386 gcm_surface.format = GCM_TRANSFER_SURFACE_FORMAT_A8R8G8B8;
387 gcm_surface.pitch = buffer->width * sizeof(u32);
388 gcm_surface._pad0[0] = gcm_surface._pad0[1] = 0;
389 gcm_surface.offset = buffer->offset;
390
391 gcm_scale.interp = GCM_TRANSFER_INTERPOLATOR_LINEAR;
392 gcm_scale.conversion = GCM_TRANSFER_CONVERSION_TRUNCATE;
393 gcm_scale.format = GCM_TRANSFER_SCALE_FORMAT_A8R8G8B8;
394 gcm_scale.origin = GCM_TRANSFER_ORIGIN_CORNER;
395 gcm_scale.operation = GCM_TRANSFER_OPERATION_SRCCOPY;
396 gcm_scale.offset = re->rgba_image_offset;
397 gcm_scale.clipX = 0;
398 gcm_scale.clipY = 0;
399 gcm_scale.clipW = re->width;
400 gcm_scale.clipH = re->height;
401 gcm_scale.outX = 0;
402 gcm_scale.outY = 0;
403 gcm_scale.outW = re->width;
404 gcm_scale.outH = re->height;
405 gcm_scale.ratioX = rsxGetFixedSint32 ((float)width / (float)re->width);
406 gcm_scale.ratioY = rsxGetFixedSint32 ((float)height / (float)re->height);
407 gcm_scale.inX = 0;
408 gcm_scale.inY = 0;
409 gcm_scale.inW = (width & ~1); // Width must be a multiple of 2
410 gcm_scale.inH = height;
411 if (gcm_scale.inW < 2) // Minimum inW value is 2
412 gcm_scale.inW = 2;
413 if (gcm_scale.inW > 2046) // Maximum inW value is 2046
414 gcm_scale.inW = 2046;
415 if (gcm_scale.inH < 1) // Minimum inH value is 1
416 gcm_scale.inH = 1;
417 if (gcm_scale.inH > 2047) // Maximum inW value is 2047
418 gcm_scale.inH = 2047;
419 gcm_scale.pitch = sizeof(u32) * width;
420
421 rsxSetTransferScaleMode (re->context, GCM_TRANSFER_MAIN_TO_LOCAL, GCM_TRANSFER_SURFACE);
422 rsxSetTransferScaleSurface (re->context, &gcm_scale, &gcm_surface);
423 }
424 /* Wait for the DMA to finish */
425 flushRSX (re->context);
426
427 /* Flip buffer onto screen */
428 flipBuffer (re->context, re->currentBuffer);
429 re->currentBuffer = (re->currentBuffer + 1) % MAX_BUFFERS;
430}
431
432static void
433eng_output_idle_flush(void *data)
434{
435 Render_Engine *re;
436
437 printf ("eng_output_idle_flush called\n");
438 re = (Render_Engine *)data;
439}
440
441static Eina_Bool
442eng_canvas_alpha_get(void *data, void *context __UNUSED__)
443{
444 Render_Engine *re;
445
446 // printf ("eng_output_alpha_get called\n");
447 re = (Render_Engine *)data;
448 return EINA_TRUE;
449}
450
451/* module advertising code */
452static int
453module_open(Evas_Module *em)
454{
455 if (!em) return 0;
456 /* get whatever engine module we inherit from */
457 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
458 _evas_engine_psl1ght_log_dom = eina_log_domain_register
459 ("evas-psl1ght", EVAS_DEFAULT_LOG_COLOR);
460 if (_evas_engine_psl1ght_log_dom < 0)
461 {
462 EINA_LOG_ERR("Can not create a module log domain.");
463 return 0;
464 }
465
466 /* store it for later use */
467 func = pfunc;
468 /* now to override methods */
469#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
470 ORD(info);
471 ORD(info_free);
472 ORD(setup);
473 ORD(canvas_alpha_get);
474 ORD(output_free);
475 ORD(output_resize);
476 ORD(output_tile_size_set);
477 ORD(output_redraws_rect_add);
478 ORD(output_redraws_rect_del);
479 ORD(output_redraws_clear);
480 ORD(output_redraws_next_update_get);
481 ORD(output_redraws_next_update_push);
482 ORD(output_flush);
483 ORD(output_idle_flush);
484
485 /* now advertise out own api */
486 em->functions = (void *)(&func);
487 return 1;
488}
489
490static void
491module_close(Evas_Module *em __UNUSED__)
492{
493 eina_log_domain_unregister(_evas_engine_psl1ght_log_dom);
494}
495
496static Evas_Module_Api evas_modapi =
497{
498 EVAS_MODULE_API_VERSION,
499 "psl1ght",
500 "none",
501 {
502 module_open,
503 module_close
504 }
505};
506
507EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, psl1ght);
508
509#ifndef EVAS_STATIC_BUILD_PSL1GHT
510EVAS_EINA_MODULE_DEFINE(engine, psl1ght);
511#endif
diff --git a/libraries/evas/src/modules/engines/psl1ght/evas_engine.h b/libraries/evas/src/modules/engines/psl1ght/evas_engine.h
new file mode 100644
index 0000000..0ea6cb1
--- /dev/null
+++ b/libraries/evas/src/modules/engines/psl1ght/evas_engine.h
@@ -0,0 +1,30 @@
1#ifndef EVAS_ENGINE_H
2#define EVAS_ENGINE_H
3
4extern int _evas_engine_psl1ght_log_dom;
5#ifdef ERR
6# undef ERR
7#endif
8#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_psl1ght_log_dom, __VA_ARGS__)
9
10#ifdef DBG
11# undef DBG
12#endif
13#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_psl1ght_log_dom, __VA_ARGS__)
14
15#ifdef INF
16# undef INF
17#endif
18#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_psl1ght_log_dom, __VA_ARGS__)
19
20#ifdef WRN
21# undef WRN
22#endif
23#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_psl1ght_log_dom, __VA_ARGS__)
24
25#ifdef CRIT
26# undef CRIT
27#endif
28#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_psl1ght_log_dom, __VA_ARGS__)
29
30#endif
diff --git a/libraries/evas/src/modules/engines/psl1ght/rsxutil.c b/libraries/evas/src/modules/engines/psl1ght/rsxutil.c
new file mode 100644
index 0000000..7567a8c
--- /dev/null
+++ b/libraries/evas/src/modules/engines/psl1ght/rsxutil.c
@@ -0,0 +1,275 @@
1/*
2 * This software is distributed under the terms of the MIT License
3 */
4
5#include <ppu-lv2.h>
6#include <stdio.h>
7#include <malloc.h>
8#include <string.h>
9#include <unistd.h>
10#include <sysutil/video.h>
11#include <rsx/gcm_sys.h>
12#include <rsx/rsx.h>
13#include <io/pad.h>
14#include <time.h>
15#include <cairo/cairo.h>
16#include <math.h>
17
18#include "rsxutil.h"
19
20#define GCM_LABEL_INDEX 255
21
22static void
23waitRSXIdle(gcmContextData *context);
24
25static int flipped = FALSE;
26
27void
28waitFlip()
29{
30 if (flipped)
31 {
32 while (gcmGetFlipStatus () != 0)
33 usleep (200); /* Sleep, to not stress the cpu. */
34 gcmResetFlipStatus ();
35 flipped = FALSE;
36 }
37}
38
39int
40flipBuffer(gcmContextData *context, s32 buffer)
41{
42 if (gcmSetFlip (context, buffer) == 0)
43 {
44 rsxFlushBuffer (context);
45 // Prevent the RSX from continuing until the flip has finished.
46 gcmSetWaitFlip (context);
47
48 flipped = TRUE;
49 return TRUE;
50 }
51 return FALSE;
52}
53
54int
55makeBuffer(rsxBuffer *buffer, u16 width, u16 height, int id)
56{
57 int depth = sizeof(u32);
58 int pitch = depth * width;
59 int size = depth * width * height;
60
61 buffer->ptr = (uint32_t *)rsxMemalign (64, size);
62
63 if (buffer->ptr == NULL)
64 goto error;
65
66 if (rsxAddressToOffset (buffer->ptr, &buffer->offset) != 0)
67 goto error;
68
69 /* Register the display buffer with the RSX */
70 if (gcmSetDisplayBuffer (id, buffer->offset, pitch, width, height) != 0)
71 goto error;
72
73 buffer->width = width;
74 buffer->height = height;
75 buffer->id = id;
76
77 return TRUE;
78
79error:
80 if (buffer->ptr != NULL)
81 rsxFree (buffer->ptr);
82
83 return FALSE;
84}
85
86int
87copyBuffer(gcmContextData *context, rsxBuffer *source, rsxBuffer *destination)
88{
89 rsxSetTransferData(context, GCM_TRANSFER_LOCAL_TO_LOCAL,
90 destination->offset,
91 destination->width * sizeof(u32),
92 source->offset,
93 source->width * sizeof(u32),
94 source->width * sizeof(u32),
95 source->height);
96}
97
98int
99getResolution(u16 *width, u16 *height)
100{
101 videoState state;
102 videoResolution resolution;
103
104 /* Get the state of the display */
105 if (videoGetState (0, 0, &state) == 0 &&
106 videoGetResolution (state.displayMode.resolution, &resolution) == 0)
107 {
108 if (width)
109 *width = resolution.width;
110 if (height)
111 *height = resolution.height;
112
113 return TRUE;
114 }
115 return FALSE;
116}
117
118static u8
119getPreferredResolution(u16 width, u16 height)
120{
121 videoDeviceInfo info;
122 videoResolution res;
123 int area = width * height;
124 int mode_area;
125 int min_area_diff = abs (area - (720 * 480));
126 int area_diff;
127 u8 resolution = VIDEO_RESOLUTION_480;
128 int i;
129
130 videoGetDeviceInfo(0, 0, &info);
131
132 for (i = 0; i < info.availableModeCount; i++) {
133 videoGetResolution (info.availableModes[i].resolution, &res);
134 mode_area = res.width * res.height;
135 area_diff = abs (area - mode_area);
136 if (area_diff < min_area_diff)
137 {
138 min_area_diff = area_diff;
139 resolution = info.availableModes[i].resolution;
140 }
141 }
142
143 return resolution;
144}
145
146int
147setResolution(gcmContextData *context, u16 *width, u16 *height)
148{
149 videoState state;
150 videoConfiguration vconfig;
151 videoResolution res;
152 u8 resolution;
153
154 resolution = getPreferredResolution (*width, *height);
155
156 /* Get the state of the display */
157 if (videoGetState (0, 0, &state) != 0)
158 return FALSE;
159
160 /* Make sure display is enabled */
161 if (state.state != 0)
162 return FALSE;
163
164 if (videoGetResolution (resolution, &res) != 0)
165 return FALSE;
166
167 /* Configure the buffer format to xRGB */
168 memset (&vconfig, 0, sizeof(videoConfiguration));
169 vconfig.resolution = resolution;
170 vconfig.format = VIDEO_BUFFER_FORMAT_XRGB;
171 vconfig.pitch = res.width * sizeof(u32);
172 vconfig.aspect = VIDEO_ASPECT_AUTO;
173
174 flushRSX(context);
175
176 if (videoConfigure (0, &vconfig, NULL, 0) != 0)
177 return FALSE;
178
179 *width = res.width;
180 *height = res.height;
181
182 return TRUE;
183}
184
185gcmContextData *
186initScreen(void *host_addr, u32 size)
187{
188 gcmContextData *context = NULL; /* Context to keep track of the RSX buffer. */
189 videoState state;
190 videoConfiguration vconfig;
191 videoResolution res; /* Screen Resolution */
192
193 /* Initilise Reality, which sets up the command buffer and shared IO memory */
194 context = rsxInit (CB_SIZE, size, host_addr);
195 if (context == NULL)
196 goto error;
197
198 /* Get the state of the display */
199 if (videoGetState (0, 0, &state) != 0)
200 goto error;
201
202 /* Make sure display is enabled */
203 if (state.state != 0)
204 goto error;
205
206 /* Get the current resolution */
207 if (videoGetResolution (state.displayMode.resolution, &res) != 0)
208 goto error;
209
210 /* Configure the buffer format to xRGB */
211 memset (&vconfig, 0, sizeof(videoConfiguration));
212 vconfig.resolution = state.displayMode.resolution;
213 vconfig.format = VIDEO_BUFFER_FORMAT_XRGB;
214 vconfig.pitch = res.width * sizeof(u32);
215 vconfig.aspect = state.displayMode.aspect;
216
217 flushRSX(context);
218
219 if (videoConfigure (0, &vconfig, NULL, 0) != 0)
220 goto error;
221
222 if (videoGetState (0, 0, &state) != 0)
223 goto error;
224
225 gcmSetFlipMode (GCM_FLIP_VSYNC); // Wait for VSYNC to flip
226
227 gcmResetFlipStatus();
228
229 return context;
230
231error:
232 if (context)
233 rsxFinish (context, 0);
234
235 return NULL;
236}
237
238void
239freeScreen(gcmContextData *context)
240{
241 rsxFinish (context, 0);
242}
243
244static void
245waitFinish(gcmContextData *context, u32 sLabelVal)
246{
247 rsxSetWriteBackendLabel (context, GCM_LABEL_INDEX, sLabelVal);
248
249 rsxFlushBuffer (context);
250
251 while (*(vu32 *)gcmGetLabelAddress (GCM_LABEL_INDEX) != sLabelVal)
252 usleep(30);
253}
254
255static void
256waitRSXIdle(gcmContextData *context)
257{
258 static u32 sLabelVal = 1;
259
260 rsxSetWriteBackendLabel (context, GCM_LABEL_INDEX, sLabelVal);
261 rsxSetWaitLabel (context, GCM_LABEL_INDEX, sLabelVal);
262
263 sLabelVal++;
264
265 waitFinish(context, sLabelVal++);
266}
267
268void
269flushRSX(gcmContextData *context)
270{
271 if (flipped)
272 waitFlip ();
273 waitRSXIdle(context);
274}
275
diff --git a/libraries/evas/src/modules/engines/psl1ght/rsxutil.h b/libraries/evas/src/modules/engines/psl1ght/rsxutil.h
new file mode 100644
index 0000000..838a751
--- /dev/null
+++ b/libraries/evas/src/modules/engines/psl1ght/rsxutil.h
@@ -0,0 +1,43 @@
1/*
2 * This software is distributed under the terms of the MIT License
3 */
4
5#ifndef __RSXUTIL_H__
6#define __RSXUTIL_H__
7
8#include <rsx/rsx.h>
9#include <ppu-types.h>
10
11#define CB_SIZE 0x100000
12#define HOST_SIZE (32 * 1024 * 1024)
13
14typedef struct
15{
16 int height;
17 int width;
18 int id;
19 uint32_t *ptr;
20 // Internal stuff
21 uint32_t offset;
22} rsxBuffer;
23
24/* Initilize the RSX properly. Returns NULL on error */
25gcmContextData *initScreen(void *host_addr, u32 size);
26/* Block the PPU thread untill the previous flip operation has finished. */
27void waitFlip(void);
28/* Flip a buffer onto the screen. Returns TRUE on success */
29int flipBuffer(gcmContextData *context, s32 buffer);
30/* Create a buffer to draw into and assign it to @id. Returns NULL on error */
31int makeBuffer(rsxBuffer *buffer, u16 width, u16 height, int id);
32/* Copy the contents of a buffer to another buffer */
33int copyBuffer(gcmContextData *context, rsxBuffer *source, rsxBuffer *destination);
34/* Get current screen resolution. returns TRUE on success */
35int getResolution(u16 *width, u16 *height);
36/* Set screen resolution to closest matching and. returns TRUE on success */
37int setResolution(gcmContextData *context, u16 *width, u16 *height);
38/* Initilize the RSX properly. Returns NULL on error */
39void freeScreen(gcmContextData *context);
40/* Flush the RSX pipeline (any commands and wait for flip) */
41void flushRSX(gcmContextData *context);
42
43#endif /* __RSXUTIL_H__ */
diff --git a/libraries/evas/src/modules/engines/software_16/Makefile.am b/libraries/evas/src/modules/engines/software_16/Makefile.am
new file mode 100644
index 0000000..070d610
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16/Makefile.am
@@ -0,0 +1,39 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9@FREETYPE_CFLAGS@ \
10@PIXMAN_CFLAGS@ \
11@EINA_CFLAGS@
12
13AM_CFLAGS = @WIN32_CFLAGS@
14
15if BUILD_ENGINE_SOFTWARE_16
16
17SOFTWARE_16_SOURCES = evas_engine.c
18
19
20if !EVAS_STATIC_BUILD_SOFTWARE_16
21
22pkgdir = $(libdir)/evas/modules/engines/software_16/$(MODULE_ARCH)
23pkg_LTLIBRARIES = module.la
24module_la_SOURCES = $(SOFTWARE_16_SOURCES)
25module_la_LIBADD = @EINA_LIBS@ $(top_builddir)/src/lib/libevas.la
26module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
27module_la_LIBTOOLFLAGS = --tag=disable-static
28
29else
30
31noinst_LTLIBRARIES = libevas_engine_software_16.la
32
33libevas_engine_software_16_la_SOURCES = $(SOFTWARE_16_SOURCES)
34
35endif
36endif
37
38EXTRA_DIST = \
39evas_engine.c
diff --git a/libraries/evas/src/modules/engines/software_16/Makefile.in b/libraries/evas/src/modules/engines/software_16/Makefile.in
new file mode 100644
index 0000000..1fc95cf
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16/Makefile.in
@@ -0,0 +1,765 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/modules/engines/software_16
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_coverage.m4 \
42 $(top_srcdir)/m4/efl_doxygen.m4 \
43 $(top_srcdir)/m4/efl_fnmatch.m4 \
44 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
45 $(top_srcdir)/m4/evas_check_engine.m4 \
46 $(top_srcdir)/m4/evas_check_loader.m4 \
47 $(top_srcdir)/m4/evas_converter.m4 \
48 $(top_srcdir)/m4/evas_dither.m4 \
49 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
50 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
51 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
52 $(top_srcdir)/configure.ac
53am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
54 $(ACLOCAL_M4)
55mkinstalldirs = $(install_sh) -d
56CONFIG_HEADER = $(top_builddir)/config.h
57CONFIG_CLEAN_FILES =
58CONFIG_CLEAN_VPATH_FILES =
59am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
60am__vpath_adj = case $$p in \
61 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
62 *) f=$$p;; \
63 esac;
64am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
65am__install_max = 40
66am__nobase_strip_setup = \
67 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
68am__nobase_strip = \
69 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
70am__nobase_list = $(am__nobase_strip_setup); \
71 for p in $$list; do echo "$$p $$p"; done | \
72 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
73 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
74 if (++n[$$2] == $(am__install_max)) \
75 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
76 END { for (dir in files) print dir, files[dir] }'
77am__base_list = \
78 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
79 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
80am__installdirs = "$(DESTDIR)$(pkgdir)"
81LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
82libevas_engine_software_16_la_LIBADD =
83am__libevas_engine_software_16_la_SOURCES_DIST = evas_engine.c
84@BUILD_ENGINE_SOFTWARE_16_TRUE@am__objects_1 = evas_engine.lo
85@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_TRUE@am_libevas_engine_software_16_la_OBJECTS = $(am__objects_1)
86libevas_engine_software_16_la_OBJECTS = \
87 $(am_libevas_engine_software_16_la_OBJECTS)
88AM_V_lt = $(am__v_lt_$(V))
89am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
90am__v_lt_0 = --silent
91@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_TRUE@am_libevas_engine_software_16_la_rpath =
92@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la
93am__module_la_SOURCES_DIST = evas_engine.c
94@BUILD_ENGINE_SOFTWARE_16_TRUE@am__objects_2 = \
95@BUILD_ENGINE_SOFTWARE_16_TRUE@ module_la-evas_engine.lo
96@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_FALSE@am_module_la_OBJECTS = $(am__objects_2)
97module_la_OBJECTS = $(am_module_la_OBJECTS)
98module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
99 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
100 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
101@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_FALSE@am_module_la_rpath = -rpath \
102@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_FALSE@ $(pkgdir)
103DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
104depcomp = $(SHELL) $(top_srcdir)/depcomp
105am__depfiles_maybe = depfiles
106am__mv = mv -f
107COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
108 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
109LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
110 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
111 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
112 $(AM_CFLAGS) $(CFLAGS)
113AM_V_CC = $(am__v_CC_$(V))
114am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
115am__v_CC_0 = @echo " CC " $@;
116AM_V_at = $(am__v_at_$(V))
117am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
118am__v_at_0 = @
119CCLD = $(CC)
120LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
121 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
122 $(AM_LDFLAGS) $(LDFLAGS) -o $@
123AM_V_CCLD = $(am__v_CCLD_$(V))
124am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
125am__v_CCLD_0 = @echo " CCLD " $@;
126AM_V_GEN = $(am__v_GEN_$(V))
127am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
128am__v_GEN_0 = @echo " GEN " $@;
129SOURCES = $(libevas_engine_software_16_la_SOURCES) \
130 $(module_la_SOURCES)
131DIST_SOURCES = $(am__libevas_engine_software_16_la_SOURCES_DIST) \
132 $(am__module_la_SOURCES_DIST)
133ETAGS = etags
134CTAGS = ctags
135DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
136ACLOCAL = @ACLOCAL@
137ALLOCA = @ALLOCA@
138AMTAR = @AMTAR@
139AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
140AR = @AR@
141AS = @AS@
142AUTOCONF = @AUTOCONF@
143AUTOHEADER = @AUTOHEADER@
144AUTOMAKE = @AUTOMAKE@
145AWK = @AWK@
146CC = @CC@
147CCDEPMODE = @CCDEPMODE@
148CFLAGS = @CFLAGS@
149CHECK_CFLAGS = @CHECK_CFLAGS@
150CHECK_LIBS = @CHECK_LIBS@
151CPP = @CPP@
152CPPFLAGS = @CPPFLAGS@
153CXX = @CXX@
154CXXCPP = @CXXCPP@
155CXXDEPMODE = @CXXDEPMODE@
156CXXFLAGS = @CXXFLAGS@
157CYGPATH_W = @CYGPATH_W@
158DEFS = @DEFS@
159DEPDIR = @DEPDIR@
160DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
161DIRECTFB_LIBS = @DIRECTFB_LIBS@
162DLLTOOL = @DLLTOOL@
163DSYMUTIL = @DSYMUTIL@
164DUMPBIN = @DUMPBIN@
165ECHO_C = @ECHO_C@
166ECHO_N = @ECHO_N@
167ECHO_T = @ECHO_T@
168ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
169ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
170EDB_CFLAGS = @EDB_CFLAGS@
171EDB_LIBS = @EDB_LIBS@
172EDJE_CFLAGS = @EDJE_CFLAGS@
173EDJE_LIBS = @EDJE_LIBS@
174EET_CFLAGS = @EET_CFLAGS@
175EET_LIBS = @EET_LIBS@
176EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
177EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
178EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
179EGREP = @EGREP@
180EINA_CFLAGS = @EINA_CFLAGS@
181EINA_LIBS = @EINA_LIBS@
182EVAS_CFLAGS = @EVAS_CFLAGS@
183EVAS_LIBS = @EVAS_LIBS@
184EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
185EVIL_CFLAGS = @EVIL_CFLAGS@
186EVIL_LIBS = @EVIL_LIBS@
187EXEEXT = @EXEEXT@
188FGREP = @FGREP@
189FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
190FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
191FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
192FREETYPE_LIBS = @FREETYPE_LIBS@
193FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
194FRIBIDI_LIBS = @FRIBIDI_LIBS@
195GL_EET_CFLAGS = @GL_EET_CFLAGS@
196GL_EET_LIBS = @GL_EET_LIBS@
197GREP = @GREP@
198HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
199HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
200INSTALL = @INSTALL@
201INSTALL_DATA = @INSTALL_DATA@
202INSTALL_PROGRAM = @INSTALL_PROGRAM@
203INSTALL_SCRIPT = @INSTALL_SCRIPT@
204INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
205LD = @LD@
206LDFLAGS = @LDFLAGS@
207LIBOBJS = @LIBOBJS@
208LIBS = @LIBS@
209LIBTOOL = @LIBTOOL@
210LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
211LINEBREAK_LIBS = @LINEBREAK_LIBS@
212LIPO = @LIPO@
213LN_S = @LN_S@
214LTLIBOBJS = @LTLIBOBJS@
215MAKEINFO = @MAKEINFO@
216MKDIR_P = @MKDIR_P@
217MODULE_ARCH = @MODULE_ARCH@
218NM = @NM@
219NMEDIT = @NMEDIT@
220OBJC = @OBJC@
221OBJCDEPMODE = @OBJCDEPMODE@
222OBJCFLAGS = @OBJCFLAGS@
223OBJDUMP = @OBJDUMP@
224OBJEXT = @OBJEXT@
225OTOOL = @OTOOL@
226OTOOL64 = @OTOOL64@
227PACKAGE = @PACKAGE@
228PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
229PACKAGE_NAME = @PACKAGE_NAME@
230PACKAGE_STRING = @PACKAGE_STRING@
231PACKAGE_TARNAME = @PACKAGE_TARNAME@
232PACKAGE_URL = @PACKAGE_URL@
233PACKAGE_VERSION = @PACKAGE_VERSION@
234PATH_SEPARATOR = @PATH_SEPARATOR@
235PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
236PIXMAN_LIBS = @PIXMAN_LIBS@
237PKG_CONFIG = @PKG_CONFIG@
238PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
239PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
240PNG_CFLAGS = @PNG_CFLAGS@
241PNG_LIBS = @PNG_LIBS@
242RANLIB = @RANLIB@
243SDL_CFLAGS = @SDL_CFLAGS@
244SDL_LIBS = @SDL_LIBS@
245SED = @SED@
246SET_MAKE = @SET_MAKE@
247SHELL = @SHELL@
248SHM_OPEN_LINK = @SHM_OPEN_LINK@
249STRIP = @STRIP@
250SVG_CFLAGS = @SVG_CFLAGS@
251SVG_LIBS = @SVG_LIBS@
252VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
253VALGRIND_LIBS = @VALGRIND_LIBS@
254VERSION = @VERSION@
255VMAJ = @VMAJ@
256WIN32_CFLAGS = @WIN32_CFLAGS@
257WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
258XCB_CFLAGS = @XCB_CFLAGS@
259XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
260XCB_GL_LIBS = @XCB_GL_LIBS@
261XCB_LIBS = @XCB_LIBS@
262XEXT_CFLAGS = @XEXT_CFLAGS@
263XEXT_LIBS = @XEXT_LIBS@
264XMKMF = @XMKMF@
265X_CFLAGS = @X_CFLAGS@
266X_EXTRA_LIBS = @X_EXTRA_LIBS@
267X_LIBS = @X_LIBS@
268X_PRE_LIBS = @X_PRE_LIBS@
269abs_builddir = @abs_builddir@
270abs_srcdir = @abs_srcdir@
271abs_top_builddir = @abs_top_builddir@
272abs_top_srcdir = @abs_top_srcdir@
273ac_ct_CC = @ac_ct_CC@
274ac_ct_CXX = @ac_ct_CXX@
275ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
276ac_ct_OBJC = @ac_ct_OBJC@
277altivec_cflags = @altivec_cflags@
278am__include = @am__include@
279am__leading_dot = @am__leading_dot@
280am__quote = @am__quote@
281am__tar = @am__tar@
282am__untar = @am__untar@
283bindir = @bindir@
284build = @build@
285build_alias = @build_alias@
286build_cpu = @build_cpu@
287build_os = @build_os@
288build_vendor = @build_vendor@
289builddir = @builddir@
290datadir = @datadir@
291datarootdir = @datarootdir@
292dlopen_libs = @dlopen_libs@
293docdir = @docdir@
294dvidir = @dvidir@
295edje_cc = @edje_cc@
296efl_doxygen = @efl_doxygen@
297efl_have_doxygen = @efl_have_doxygen@
298evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
299evas_engine_buffer_libs = @evas_engine_buffer_libs@
300evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
301evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
302evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
303evas_engine_directfb_libs = @evas_engine_directfb_libs@
304evas_engine_fb_cflags = @evas_engine_fb_cflags@
305evas_engine_fb_libs = @evas_engine_fb_libs@
306evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
307evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
308evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
309evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
310evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
311evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
312evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
313evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
314evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
315evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
316evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
317evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
318evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
319evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
320evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
321evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
322evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
323evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
324evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
325evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
326evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
327evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
328evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
329evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
330evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
331evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
332evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
333evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
334evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
335evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
336evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
337evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
338evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
339evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
340evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
341evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
342evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
343evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
344evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
345evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
346evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
347evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
348evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
349evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
350evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
351evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
352evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
353evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
354evas_image_loader_png_libs = @evas_image_loader_png_libs@
355evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
356evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
357evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
358evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
359evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
360evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
361evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
362evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
363evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
364evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
365evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
366evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
367exec_prefix = @exec_prefix@
368have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
369have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
370have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
371have_evas_engine_software_x11 = @have_evas_engine_software_x11@
372have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
373have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
374have_lcov = @have_lcov@
375host = @host@
376host_alias = @host_alias@
377host_cpu = @host_cpu@
378host_os = @host_os@
379host_vendor = @host_vendor@
380htmldir = @htmldir@
381includedir = @includedir@
382infodir = @infodir@
383install_sh = @install_sh@
384libdir = @libdir@
385libexecdir = @libexecdir@
386localedir = @localedir@
387localstatedir = @localstatedir@
388lt_ECHO = @lt_ECHO@
389lt_enable_auto_import = @lt_enable_auto_import@
390mandir = @mandir@
391mkdir_p = @mkdir_p@
392oldincludedir = @oldincludedir@
393pdfdir = @pdfdir@
394pkgconfig_requires_private = @pkgconfig_requires_private@
395prefix = @prefix@
396program_transform_name = @program_transform_name@
397psdir = @psdir@
398pthread_cflags = @pthread_cflags@
399pthread_libs = @pthread_libs@
400release_info = @release_info@
401requirement_evas = @requirement_evas@
402sbindir = @sbindir@
403sharedstatedir = @sharedstatedir@
404srcdir = @srcdir@
405sysconfdir = @sysconfdir@
406target_alias = @target_alias@
407top_build_prefix = @top_build_prefix@
408top_builddir = @top_builddir@
409top_srcdir = @top_srcdir@
410version_info = @version_info@
411MAINTAINERCLEANFILES = Makefile.in
412AM_CPPFLAGS = \
413-I. \
414-I$(top_srcdir)/src/lib \
415-I$(top_srcdir)/src/lib/include \
416-I$(top_srcdir)/src/modules/engines \
417@FREETYPE_CFLAGS@ \
418@PIXMAN_CFLAGS@ \
419@EINA_CFLAGS@
420
421AM_CFLAGS = @WIN32_CFLAGS@
422@BUILD_ENGINE_SOFTWARE_16_TRUE@SOFTWARE_16_SOURCES = evas_engine.c
423@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_16/$(MODULE_ARCH)
424@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_FALSE@pkg_LTLIBRARIES = module.la
425@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_FALSE@module_la_SOURCES = $(SOFTWARE_16_SOURCES)
426@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_FALSE@module_la_LIBADD = @EINA_LIBS@ $(top_builddir)/src/lib/libevas.la
427@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_FALSE@module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
428@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
429@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_TRUE@noinst_LTLIBRARIES = libevas_engine_software_16.la
430@BUILD_ENGINE_SOFTWARE_16_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_TRUE@libevas_engine_software_16_la_SOURCES = $(SOFTWARE_16_SOURCES)
431EXTRA_DIST = \
432evas_engine.c
433
434all: all-am
435
436.SUFFIXES:
437.SUFFIXES: .c .lo .o .obj
438$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
439 @for dep in $?; do \
440 case '$(am__configure_deps)' in \
441 *$$dep*) \
442 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
443 && { if test -f $@; then exit 0; else break; fi; }; \
444 exit 1;; \
445 esac; \
446 done; \
447 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_16/Makefile'; \
448 $(am__cd) $(top_srcdir) && \
449 $(AUTOMAKE) --gnu src/modules/engines/software_16/Makefile
450.PRECIOUS: Makefile
451Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
452 @case '$?' in \
453 *config.status*) \
454 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
455 *) \
456 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
457 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
458 esac;
459
460$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
461 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
462
463$(top_srcdir)/configure: $(am__configure_deps)
464 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
465$(ACLOCAL_M4): $(am__aclocal_m4_deps)
466 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
467$(am__aclocal_m4_deps):
468
469clean-noinstLTLIBRARIES:
470 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
471 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
472 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
473 test "$$dir" != "$$p" || dir=.; \
474 echo "rm -f \"$${dir}/so_locations\""; \
475 rm -f "$${dir}/so_locations"; \
476 done
477install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
478 @$(NORMAL_INSTALL)
479 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
480 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
481 list2=; for p in $$list; do \
482 if test -f $$p; then \
483 list2="$$list2 $$p"; \
484 else :; fi; \
485 done; \
486 test -z "$$list2" || { \
487 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
488 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
489 }
490
491uninstall-pkgLTLIBRARIES:
492 @$(NORMAL_UNINSTALL)
493 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
494 for p in $$list; do \
495 $(am__strip_dir) \
496 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
497 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
498 done
499
500clean-pkgLTLIBRARIES:
501 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
502 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
503 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
504 test "$$dir" != "$$p" || dir=.; \
505 echo "rm -f \"$${dir}/so_locations\""; \
506 rm -f "$${dir}/so_locations"; \
507 done
508libevas_engine_software_16.la: $(libevas_engine_software_16_la_OBJECTS) $(libevas_engine_software_16_la_DEPENDENCIES)
509 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_software_16_la_rpath) $(libevas_engine_software_16_la_OBJECTS) $(libevas_engine_software_16_la_LIBADD) $(LIBS)
510module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
511 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
512
513mostlyclean-compile:
514 -rm -f *.$(OBJEXT)
515
516distclean-compile:
517 -rm -f *.tab.c
518
519@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
520@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
521
522.c.o:
523@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
524@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
525@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
526@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
527@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
528@am__fastdepCC_FALSE@ $(COMPILE) -c $<
529
530.c.obj:
531@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
532@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
533@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
534@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
535@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
536@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
537
538.c.lo:
539@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
540@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
541@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
542@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
543@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
544@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
545
546module_la-evas_engine.lo: evas_engine.c
547@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
548@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
549@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
550@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
551@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
552@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
553
554mostlyclean-libtool:
555 -rm -f *.lo
556
557clean-libtool:
558 -rm -rf .libs _libs
559
560ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
561 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
562 unique=`for i in $$list; do \
563 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
564 done | \
565 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
566 END { if (nonempty) { for (i in files) print i; }; }'`; \
567 mkid -fID $$unique
568tags: TAGS
569
570TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
571 $(TAGS_FILES) $(LISP)
572 set x; \
573 here=`pwd`; \
574 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
575 unique=`for i in $$list; do \
576 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
577 done | \
578 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
579 END { if (nonempty) { for (i in files) print i; }; }'`; \
580 shift; \
581 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
582 test -n "$$unique" || unique=$$empty_fix; \
583 if test $$# -gt 0; then \
584 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
585 "$$@" $$unique; \
586 else \
587 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
588 $$unique; \
589 fi; \
590 fi
591ctags: CTAGS
592CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
593 $(TAGS_FILES) $(LISP)
594 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
595 unique=`for i in $$list; do \
596 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
597 done | \
598 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
599 END { if (nonempty) { for (i in files) print i; }; }'`; \
600 test -z "$(CTAGS_ARGS)$$unique" \
601 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
602 $$unique
603
604GTAGS:
605 here=`$(am__cd) $(top_builddir) && pwd` \
606 && $(am__cd) $(top_srcdir) \
607 && gtags -i $(GTAGS_ARGS) "$$here"
608
609distclean-tags:
610 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
611
612distdir: $(DISTFILES)
613 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
614 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
615 list='$(DISTFILES)'; \
616 dist_files=`for file in $$list; do echo $$file; done | \
617 sed -e "s|^$$srcdirstrip/||;t" \
618 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
619 case $$dist_files in \
620 */*) $(MKDIR_P) `echo "$$dist_files" | \
621 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
622 sort -u` ;; \
623 esac; \
624 for file in $$dist_files; do \
625 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
626 if test -d $$d/$$file; then \
627 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
628 if test -d "$(distdir)/$$file"; then \
629 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
630 fi; \
631 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
632 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
633 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
634 fi; \
635 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
636 else \
637 test -f "$(distdir)/$$file" \
638 || cp -p $$d/$$file "$(distdir)/$$file" \
639 || exit 1; \
640 fi; \
641 done
642check-am: all-am
643check: check-am
644all-am: Makefile $(LTLIBRARIES)
645installdirs:
646 for dir in "$(DESTDIR)$(pkgdir)"; do \
647 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
648 done
649install: install-am
650install-exec: install-exec-am
651install-data: install-data-am
652uninstall: uninstall-am
653
654install-am: all-am
655 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
656
657installcheck: installcheck-am
658install-strip:
659 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
660 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
661 `test -z '$(STRIP)' || \
662 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
663mostlyclean-generic:
664
665clean-generic:
666
667distclean-generic:
668 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
669 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
670
671maintainer-clean-generic:
672 @echo "This command is intended for maintainers to use"
673 @echo "it deletes files that may require special tools to rebuild."
674 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
675clean: clean-am
676
677clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
678 clean-pkgLTLIBRARIES mostlyclean-am
679
680distclean: distclean-am
681 -rm -rf ./$(DEPDIR)
682 -rm -f Makefile
683distclean-am: clean-am distclean-compile distclean-generic \
684 distclean-tags
685
686dvi: dvi-am
687
688dvi-am:
689
690html: html-am
691
692html-am:
693
694info: info-am
695
696info-am:
697
698install-data-am: install-pkgLTLIBRARIES
699
700install-dvi: install-dvi-am
701
702install-dvi-am:
703
704install-exec-am:
705
706install-html: install-html-am
707
708install-html-am:
709
710install-info: install-info-am
711
712install-info-am:
713
714install-man:
715
716install-pdf: install-pdf-am
717
718install-pdf-am:
719
720install-ps: install-ps-am
721
722install-ps-am:
723
724installcheck-am:
725
726maintainer-clean: maintainer-clean-am
727 -rm -rf ./$(DEPDIR)
728 -rm -f Makefile
729maintainer-clean-am: distclean-am maintainer-clean-generic
730
731mostlyclean: mostlyclean-am
732
733mostlyclean-am: mostlyclean-compile mostlyclean-generic \
734 mostlyclean-libtool
735
736pdf: pdf-am
737
738pdf-am:
739
740ps: ps-am
741
742ps-am:
743
744uninstall-am: uninstall-pkgLTLIBRARIES
745
746.MAKE: install-am install-strip
747
748.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
749 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
750 ctags distclean distclean-compile distclean-generic \
751 distclean-libtool distclean-tags distdir dvi dvi-am html \
752 html-am info info-am install install-am install-data \
753 install-data-am install-dvi install-dvi-am install-exec \
754 install-exec-am install-html install-html-am install-info \
755 install-info-am install-man install-pdf install-pdf-am \
756 install-pkgLTLIBRARIES install-ps install-ps-am install-strip \
757 installcheck installcheck-am installdirs maintainer-clean \
758 maintainer-clean-generic mostlyclean mostlyclean-compile \
759 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
760 tags uninstall uninstall-am uninstall-pkgLTLIBRARIES
761
762
763# Tell versions [3.59,3.63) of GNU make to not export all variables.
764# Otherwise a system limit (for SysV at least) may be exceeded.
765.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_16/evas_engine.c b/libraries/evas/src/modules/engines/software_16/evas_engine.c
new file mode 100644
index 0000000..643e24f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16/evas_engine.c
@@ -0,0 +1,399 @@
1#include "evas_common.h"/* Also includes international specific stuff */
2#include "evas_common_soft16.h"
3
4/*
5 *****
6 **
7 ** ENGINE ROUTINES
8 **
9 *****
10 */
11int _evas_soft16_log_dom = -1;
12/* function tables - filled in later (func and parent func) */
13static Evas_Func func, pfunc;
14#ifdef ERR
15#undef ERR
16#endif
17#define ERR(...) EINA_LOG_DOM_ERR( _evas_soft16_log_dom, __VA_ARGS__)
18
19#ifdef DBG
20#undef DBG
21#endif
22#define DBG(...) EINA_LOG_DOM_DBG(_evas_soft16_log_dom, __VA_ARGS__)
23
24#ifdef INF
25#undef INF
26#endif
27#define INF(...) EINA_LOG_DOM_INFO(_evas_soft16_log_dom, __VA_ARGS__)
28
29#ifdef WRN
30#undef WRN
31#endif
32#define WRN(...) EINA_LOG_DOM_WARN(_evas_soft16_log_dom, __VA_ARGS__)
33
34#ifdef CRIT
35#undef CRIT
36#endif
37#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_soft16_log_dom, __VA_ARGS__)
38
39#define NOT_IMPLEMENTED() \
40 WRN("NOT_IMPLEMENTED: %s() at %s:%d", \
41 __FUNCTION__, __FILE__, __LINE__)
42
43static void
44eng_rectangle_draw(void *data __UNUSED__, void *context, void *surface, int x, int y, int w, int h)
45{
46 evas_common_soft16_rectangle_draw(surface, context, x, y, w, h);
47}
48
49static void
50eng_line_draw(void *data __UNUSED__, void *context, void *surface, int x1, int y1, int x2, int y2)
51{
52 evas_common_soft16_line_draw(surface, context, x1, y1, x2, y2);
53}
54
55static void
56eng_polygon_draw(void *data __UNUSED__, void *context, void *surface, void *polygon, int x, int y)
57{
58 evas_common_soft16_polygon_draw(surface, context, polygon, x, y);
59}
60
61static int
62eng_image_alpha_get(void *data __UNUSED__, void *image)
63{
64 Soft16_Image *im;
65
66 if (!image) return 0;
67 im = image;
68 return im->cache_entry.flags.alpha;
69}
70
71static void *
72eng_image_alpha_set(void *data __UNUSED__, void *image, int have_alpha)
73{
74 if (!image) return NULL;
75 have_alpha = !!have_alpha;
76 image = evas_common_soft16_image_alpha_set(image, have_alpha);
77 return image;
78}
79
80static char *
81eng_image_comment_get(void *data __UNUSED__, void *image __UNUSED__, char *key __UNUSED__)
82{
83 return NULL;
84}
85
86static char *
87eng_image_format_get(void *data __UNUSED__, void *image __UNUSED__)
88{
89 NOT_IMPLEMENTED();
90 return NULL;
91}
92
93static int
94eng_image_colorspace_get(void *data __UNUSED__, void *image __UNUSED__)
95{
96 return EVAS_COLORSPACE_RGB565_A5P;
97}
98
99
100static void
101eng_image_colorspace_set(void *data __UNUSED__, void *image __UNUSED__, int cspace __UNUSED__)
102{
103 NOT_IMPLEMENTED();
104}
105
106static void *
107eng_image_native_set(void *data __UNUSED__, void *image __UNUSED__, void *native __UNUSED__)
108{
109 NOT_IMPLEMENTED();
110 return NULL;
111}
112
113static void *
114eng_image_native_get(void *data __UNUSED__, void *image __UNUSED__)
115{
116 NOT_IMPLEMENTED();
117 return NULL;
118}
119
120static void *
121eng_image_load(void *data __UNUSED__, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
122{
123 return evas_cache_image_request(evas_common_soft16_image_cache_get(), file, key, lo, error);
124}
125
126static void *
127eng_image_new_from_data(void *data __UNUSED__, int w, int h, DATA32 *image_data, int alpha, int cspace)
128{
129 if ((image_data) && (cspace != EVAS_COLORSPACE_RGB565_A5P))
130 {
131 WRN("Unsupported colorspace %d in %s() (%s:%d)",
132 cspace, __FUNCTION__, __FILE__, __LINE__);
133 return NULL;
134 }
135 return evas_cache_image_data(evas_common_soft16_image_cache_get(), w, h, image_data, alpha, EVAS_COLORSPACE_RGB565_A5P);
136}
137
138static void *
139eng_image_new_from_copied_data(void *data __UNUSED__, int w, int h, DATA32 *image_data, int alpha, int cspace)
140{
141 if ((image_data) && (cspace != EVAS_COLORSPACE_RGB565_A5P))
142 {
143 WRN("Unsupported colorspace %d in %s() (%s:%d)",
144 cspace, __FUNCTION__, __FILE__, __LINE__);
145 return NULL;
146 }
147 return evas_cache_image_copied_data(evas_common_soft16_image_cache_get(), w, h, image_data, alpha, EVAS_COLORSPACE_RGB565_A5P);
148}
149
150static void
151eng_image_size_get(void *data __UNUSED__, void *image, int *w, int *h)
152{
153 Soft16_Image *im;
154
155 if (w) *w = 0;
156 if (h) *h = 0;
157 if (!image) return;
158 im = image;
159 if (w) *w = im->cache_entry.w;
160 if (h) *h = im->cache_entry.h;
161}
162
163static void *
164eng_image_size_set(void *data __UNUSED__, void *image, int w, int h)
165{
166 if (!image) return NULL;
167 if ((w <= 0) || (h <= 0))
168 {
169 evas_cache_image_drop((Image_Entry *) image);
170 return NULL;
171 }
172 return evas_cache_image_size_set((Image_Entry *) image, w, h);
173}
174
175static void
176eng_image_stride_get(void *data __UNUSED__, void *image, int *stride)
177{
178 Soft16_Image *im;
179
180 if (stride) *stride = 0;
181 if (!image) return;
182 im = image;
183 if (stride) *stride = im->stride;
184}
185
186static void *
187eng_image_dirty_region(void *data __UNUSED__, void *image, int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
188{
189 /* FIXME: is this required? */
190 //NOT_IMPLEMENTED();
191 return image;
192}
193
194static void *
195eng_image_data_get(void *data __UNUSED__, void *image, int to_write, DATA32 **image_data, int *err)
196{
197 Soft16_Image *im;
198 int error;
199
200 if (!image)
201 {
202 *image_data = NULL;
203 return NULL;
204 }
205
206 im = image;
207 error = evas_cache_image_load_data(&im->cache_entry);
208
209 if (to_write)
210 im = (Soft16_Image *) evas_cache_image_alone(&im->cache_entry);
211
212 if (image_data) *image_data = (DATA32 *) im->pixels;
213
214 if (err) *err = error;
215 return im;
216}
217
218static void *
219eng_image_data_put(void *data __UNUSED__, void *image, DATA32 *image_data)
220{
221 Soft16_Image *old_im, *new_im;
222
223 if (!image) return NULL;
224
225 old_im = image;
226 if ((DATA16 *)image_data == old_im->pixels) return old_im;
227
228 new_im = (Soft16_Image *) evas_cache_image_data(evas_common_soft16_image_cache_get(), old_im->cache_entry.w, old_im->cache_entry.h, image_data, old_im->cache_entry.flags.alpha, EVAS_COLORSPACE_RGB565_A5P);
229 evas_cache_image_drop(&old_im->cache_entry);
230 return new_im;
231}
232
233static void
234eng_image_data_preload_request(void *data __UNUSED__, void *image, const void *target)
235{
236 Soft16_Image *im = image;
237
238 if (!im) return ;
239 evas_cache_image_preload_data(&im->cache_entry, target);
240}
241
242static void
243eng_image_data_preload_cancel(void *data __UNUSED__, void *image, const void *target)
244{
245 Soft16_Image *im = image;
246
247 if (!im) return ;
248 evas_cache_image_preload_cancel(&im->cache_entry, target);
249}
250
251static void
252eng_image_draw(void *data __UNUSED__, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth)
253{
254 Soft16_Image *im;
255
256 im = (Soft16_Image *) image;
257
258 evas_cache_image_load_data(&im->cache_entry);
259 evas_common_soft16_image_draw(im, surface, context,
260 src_x, src_y, src_w, src_h,
261 dst_x, dst_y, dst_w, dst_h,
262 smooth);
263}
264
265static void
266eng_image_scale_hint_set(void *data __UNUSED__, void *image __UNUSED__, int hint __UNUSED__)
267{
268}
269
270static int
271eng_image_scale_hint_get(void *data __UNUSED__, void *image __UNUSED__)
272{
273 return EVAS_IMAGE_SCALE_HINT_NONE;
274}
275
276static void
277eng_image_cache_flush(void *data __UNUSED__)
278{
279 evas_cache_image_flush(evas_common_soft16_image_cache_get());
280}
281
282static void
283eng_image_cache_set(void *data __UNUSED__, int bytes)
284{
285 evas_cache_image_set(evas_common_soft16_image_cache_get(), bytes);
286}
287
288static int
289eng_image_cache_get(void *data __UNUSED__)
290{
291 return evas_cache_image_get(evas_common_soft16_image_cache_get());
292}
293
294static void
295eng_font_draw(void *data __UNUSED__, void *context, void *surface, Evas_Font_Set *font, int x, int y, int w __UNUSED__, int h __UNUSED__, int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *text_props)
296{
297 static RGBA_Image *im = NULL;
298 Soft16_Image *dst = surface;
299
300 if (!im)
301 im = (RGBA_Image *) evas_cache_image_empty(evas_common_image_cache_get());
302 evas_cache_image_surface_alloc(&im->cache_entry, dst->cache_entry.w, dst->cache_entry.h);
303 evas_common_draw_context_font_ext_set(context,
304 surface,
305 evas_common_soft16_font_glyph_new,
306 evas_common_soft16_font_glyph_free,
307 evas_common_soft16_font_glyph_draw);
308 evas_common_font_draw(im, context, (RGBA_Font *) font, x, y, text_props);
309 evas_common_draw_context_font_ext_set(context,
310 NULL,
311 NULL,
312 NULL,
313 NULL);
314}
315
316/*
317 *****
318 **
319 ** MODULE ACCESSIBLE API API
320 **
321 *****
322 */
323
324static int
325module_open(Evas_Module *em)
326{
327 if (!em) return 0;
328 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
329 _evas_soft16_log_dom = eina_log_domain_register
330 ("evas-software_16", EVAS_DEFAULT_LOG_COLOR);
331 if (_evas_soft16_log_dom < 0)
332 {
333 EINA_LOG_ERR("Can not create a module log domain.");
334 return 0;
335 }
336 /* store it for later use */
337 func = pfunc;
338 /* now to override methods */
339 EVAS_API_RESET(info, &func);
340 EVAS_API_RESET(info_free, &func);
341 EVAS_API_RESET(setup, &func);
342#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
343 ORD(rectangle_draw);
344 ORD(line_draw);
345 ORD(polygon_draw);
346 ORD(image_load);
347 ORD(image_new_from_data);
348 ORD(image_new_from_copied_data);
349 ORD(image_size_get);
350 ORD(image_size_set);
351 ORD(image_stride_get);
352 ORD(image_dirty_region);
353 ORD(image_data_get);
354 ORD(image_data_put);
355 ORD(image_data_preload_request);
356 ORD(image_data_preload_cancel);
357 ORD(image_alpha_set);
358 ORD(image_alpha_get);
359 ORD(image_draw);
360 ORD(image_comment_get);
361 ORD(image_format_get);
362 ORD(image_colorspace_set);
363 ORD(image_colorspace_get);
364 ORD(image_native_set);
365 ORD(image_native_get);
366 ORD(image_cache_flush);
367 ORD(image_cache_set);
368 ORD(image_cache_get);
369 ORD(font_draw);
370 ORD(image_scale_hint_set);
371 ORD(image_scale_hint_get);
372
373 em->functions = (void *)(&func);
374
375 return 1;
376}
377
378static void
379module_close(Evas_Module *em __UNUSED__)
380{
381 eina_log_domain_unregister(_evas_soft16_log_dom);
382}
383
384static Evas_Module_Api evas_modapi =
385{
386 EVAS_MODULE_API_VERSION,
387 "software_16",
388 "none",
389 {
390 module_open,
391 module_close
392 }
393};
394
395EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_16);
396
397#ifndef EVAS_STATIC_BUILD_SOFTWARE_16
398EVAS_EINA_MODULE_DEFINE(engine, software_16);
399#endif
diff --git a/libraries/evas/src/modules/engines/software_16_ddraw/Evas_Engine_Software_16_DDraw.h b/libraries/evas/src/modules/engines/software_16_ddraw/Evas_Engine_Software_16_DDraw.h
new file mode 100644
index 0000000..3c1547a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_ddraw/Evas_Engine_Software_16_DDraw.h
@@ -0,0 +1,32 @@
1#ifndef __EVAS_ENGINE_SOFTWARE_16_DDRAW_H__
2#define __EVAS_ENGINE_SOFTWARE_16_DDRAW_H__
3
4
5#include <windows.h>
6#include <ddraw.h>
7
8typedef struct _Evas_Engine_Info_Software_16_DDraw Evas_Engine_Info_Software_16_DDraw;
9
10struct _Evas_Engine_Info_Software_16_DDraw
11{
12 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
13 /* at you and make nasty noises */
14 Evas_Engine_Info magic;
15
16 struct {
17 HWND window;
18 LPDIRECTDRAW object; /* DirectDraw object */
19 LPDIRECTDRAWSURFACE surface_primary; /* DirectDraw primary surface */
20 LPDIRECTDRAWSURFACE surface_back; /* DirectDraw back surface */
21 LPDIRECTDRAWSURFACE surface_source; /* DirectDraw source surface */
22 int depth;
23
24 int rotation;
25 } info;
26
27 /* non-blocking or blocking mode */
28 Evas_Engine_Render_Mode render_mode;
29};
30
31
32#endif /* __EVAS_ENGINE_SOFTWARE_16_DDRAW_H__ */
diff --git a/libraries/evas/src/modules/engines/software_16_ddraw/Makefile.am b/libraries/evas/src/modules/engines/software_16_ddraw/Makefile.am
new file mode 100644
index 0000000..adbf477
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_ddraw/Makefile.am
@@ -0,0 +1,49 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9-I$(top_srcdir)/src/modules/engines/software_16 \
10@EINA_CFLAGS@ \
11@FREETYPE_CFLAGS@ \
12@PIXMAN_CFLAGS@ \
13@evas_engine_software_16_ddraw_cflags@
14
15if BUILD_ENGINE_SOFTWARE_16_DDRAW
16
17SOFTWARE_16_DDRAW_SOURCES = \
18evas_engine.c \
19evas_ddraw_buffer.cpp \
20evas_ddraw_main.cpp
21
22SOFTWARE_16_DDRAW_LIBADD = @evas_engine_software_16_ddraw_libs@
23
24
25includes_HEADERS = Evas_Engine_Software_16_DDraw.h
26includesdir = $(includedir)/evas-@VMAJ@
27
28if !EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW
29
30pkgdir = $(libdir)/evas/modules/engines/software_16_ddraw/$(MODULE_ARCH)
31pkg_LTLIBRARIES = module.la
32
33module_la_SOURCES = $(SOFTWARE_16_DDRAW_SOURCES)
34module_la_CXXFLAGS = -fno-rtti -fno-exceptions
35module_la_LIBADD = $(top_builddir)/src/lib/libevas.la @EINA_LIBS@ $(SOFTWARE_16_DDRAW_LIBADD)
36module_la_LDFLAGS = @lt_enable_auto_import@ -no-undefined -module -avoid-version
37module_la_LIBTOOLFLAGS = --tag=disable-static
38
39else
40
41noinst_LTLIBRARIES = libevas_engine_software_16_ddraw.la
42
43libevas_engine_software_16_ddraw_la_SOURCES = $(SOFTWARE_16_DDRAW_SOURCES)
44libevas_engine_software_16_ddraw_la_LIBADD = $(SOFTWARE_16_DDRAW_LIBADD)
45
46endif
47endif
48
49EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/software_16_ddraw/Makefile.in b/libraries/evas/src/modules/engines/software_16_ddraw/Makefile.in
new file mode 100644
index 0000000..f588c4f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_ddraw/Makefile.in
@@ -0,0 +1,869 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/software_16_ddraw
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84am__DEPENDENCIES_1 =
85@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_TRUE@libevas_engine_software_16_ddraw_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_software_16_ddraw_la_SOURCES_DIST = evas_engine.c \
87 evas_ddraw_buffer.cpp evas_ddraw_main.cpp
88@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@am__objects_1 = evas_engine.lo \
89@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@ evas_ddraw_buffer.lo \
90@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@ evas_ddraw_main.lo
91@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_TRUE@am_libevas_engine_software_16_ddraw_la_OBJECTS = $(am__objects_1)
92libevas_engine_software_16_ddraw_la_OBJECTS = \
93 $(am_libevas_engine_software_16_ddraw_la_OBJECTS)
94AM_V_lt = $(am__v_lt_$(V))
95am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
96am__v_lt_0 = --silent
97@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_TRUE@am_libevas_engine_software_16_ddraw_la_rpath =
98@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la \
99@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@ $(am__DEPENDENCIES_1)
100am__module_la_SOURCES_DIST = evas_engine.c evas_ddraw_buffer.cpp \
101 evas_ddraw_main.cpp
102@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@am__objects_2 = \
103@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@ module_la-evas_engine.lo \
104@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@ module_la-evas_ddraw_buffer.lo \
105@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@ module_la-evas_ddraw_main.lo
106@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@am_module_la_OBJECTS = $(am__objects_2)
107module_la_OBJECTS = $(am_module_la_OBJECTS)
108module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
109 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
110 $(module_la_CXXFLAGS) $(CXXFLAGS) $(module_la_LDFLAGS) \
111 $(LDFLAGS) -o $@
112@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@am_module_la_rpath = -rpath \
113@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@ $(pkgdir)
114DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
115depcomp = $(SHELL) $(top_srcdir)/depcomp
116am__depfiles_maybe = depfiles
117am__mv = mv -f
118COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
119 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
120LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
121 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
122 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
123 $(AM_CFLAGS) $(CFLAGS)
124AM_V_CC = $(am__v_CC_$(V))
125am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
126am__v_CC_0 = @echo " CC " $@;
127AM_V_at = $(am__v_at_$(V))
128am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
129am__v_at_0 = @
130CCLD = $(CC)
131LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
132 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
133 $(AM_LDFLAGS) $(LDFLAGS) -o $@
134AM_V_CCLD = $(am__v_CCLD_$(V))
135am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
136am__v_CCLD_0 = @echo " CCLD " $@;
137CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
138 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
139LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
140 $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
141 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
142 $(AM_CXXFLAGS) $(CXXFLAGS)
143AM_V_CXX = $(am__v_CXX_$(V))
144am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
145am__v_CXX_0 = @echo " CXX " $@;
146CXXLD = $(CXX)
147CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
148 $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
149 $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
150AM_V_CXXLD = $(am__v_CXXLD_$(V))
151am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
152am__v_CXXLD_0 = @echo " CXXLD " $@;
153AM_V_GEN = $(am__v_GEN_$(V))
154am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
155am__v_GEN_0 = @echo " GEN " $@;
156SOURCES = $(libevas_engine_software_16_ddraw_la_SOURCES) \
157 $(module_la_SOURCES)
158DIST_SOURCES = \
159 $(am__libevas_engine_software_16_ddraw_la_SOURCES_DIST) \
160 $(am__module_la_SOURCES_DIST)
161am__includes_HEADERS_DIST = Evas_Engine_Software_16_DDraw.h
162HEADERS = $(includes_HEADERS)
163ETAGS = etags
164CTAGS = ctags
165DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
166ACLOCAL = @ACLOCAL@
167ALLOCA = @ALLOCA@
168AMTAR = @AMTAR@
169AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
170AR = @AR@
171AS = @AS@
172AUTOCONF = @AUTOCONF@
173AUTOHEADER = @AUTOHEADER@
174AUTOMAKE = @AUTOMAKE@
175AWK = @AWK@
176CC = @CC@
177CCDEPMODE = @CCDEPMODE@
178CFLAGS = @CFLAGS@
179CHECK_CFLAGS = @CHECK_CFLAGS@
180CHECK_LIBS = @CHECK_LIBS@
181CPP = @CPP@
182CPPFLAGS = @CPPFLAGS@
183CXX = @CXX@
184CXXCPP = @CXXCPP@
185CXXDEPMODE = @CXXDEPMODE@
186CXXFLAGS = @CXXFLAGS@
187CYGPATH_W = @CYGPATH_W@
188DEFS = @DEFS@
189DEPDIR = @DEPDIR@
190DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
191DIRECTFB_LIBS = @DIRECTFB_LIBS@
192DLLTOOL = @DLLTOOL@
193DSYMUTIL = @DSYMUTIL@
194DUMPBIN = @DUMPBIN@
195ECHO_C = @ECHO_C@
196ECHO_N = @ECHO_N@
197ECHO_T = @ECHO_T@
198ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
199ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
200EDB_CFLAGS = @EDB_CFLAGS@
201EDB_LIBS = @EDB_LIBS@
202EDJE_CFLAGS = @EDJE_CFLAGS@
203EDJE_LIBS = @EDJE_LIBS@
204EET_CFLAGS = @EET_CFLAGS@
205EET_LIBS = @EET_LIBS@
206EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
207EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
208EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
209EGREP = @EGREP@
210EINA_CFLAGS = @EINA_CFLAGS@
211EINA_LIBS = @EINA_LIBS@
212EVAS_CFLAGS = @EVAS_CFLAGS@
213EVAS_LIBS = @EVAS_LIBS@
214EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
215EVIL_CFLAGS = @EVIL_CFLAGS@
216EVIL_LIBS = @EVIL_LIBS@
217EXEEXT = @EXEEXT@
218FGREP = @FGREP@
219FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
220FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
221FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
222FREETYPE_LIBS = @FREETYPE_LIBS@
223FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
224FRIBIDI_LIBS = @FRIBIDI_LIBS@
225GL_EET_CFLAGS = @GL_EET_CFLAGS@
226GL_EET_LIBS = @GL_EET_LIBS@
227GREP = @GREP@
228HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
229HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
230INSTALL = @INSTALL@
231INSTALL_DATA = @INSTALL_DATA@
232INSTALL_PROGRAM = @INSTALL_PROGRAM@
233INSTALL_SCRIPT = @INSTALL_SCRIPT@
234INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
235LD = @LD@
236LDFLAGS = @LDFLAGS@
237LIBOBJS = @LIBOBJS@
238LIBS = @LIBS@
239LIBTOOL = @LIBTOOL@
240LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
241LINEBREAK_LIBS = @LINEBREAK_LIBS@
242LIPO = @LIPO@
243LN_S = @LN_S@
244LTLIBOBJS = @LTLIBOBJS@
245MAKEINFO = @MAKEINFO@
246MKDIR_P = @MKDIR_P@
247MODULE_ARCH = @MODULE_ARCH@
248NM = @NM@
249NMEDIT = @NMEDIT@
250OBJC = @OBJC@
251OBJCDEPMODE = @OBJCDEPMODE@
252OBJCFLAGS = @OBJCFLAGS@
253OBJDUMP = @OBJDUMP@
254OBJEXT = @OBJEXT@
255OTOOL = @OTOOL@
256OTOOL64 = @OTOOL64@
257PACKAGE = @PACKAGE@
258PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
259PACKAGE_NAME = @PACKAGE_NAME@
260PACKAGE_STRING = @PACKAGE_STRING@
261PACKAGE_TARNAME = @PACKAGE_TARNAME@
262PACKAGE_URL = @PACKAGE_URL@
263PACKAGE_VERSION = @PACKAGE_VERSION@
264PATH_SEPARATOR = @PATH_SEPARATOR@
265PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
266PIXMAN_LIBS = @PIXMAN_LIBS@
267PKG_CONFIG = @PKG_CONFIG@
268PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
269PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
270PNG_CFLAGS = @PNG_CFLAGS@
271PNG_LIBS = @PNG_LIBS@
272RANLIB = @RANLIB@
273SDL_CFLAGS = @SDL_CFLAGS@
274SDL_LIBS = @SDL_LIBS@
275SED = @SED@
276SET_MAKE = @SET_MAKE@
277SHELL = @SHELL@
278SHM_OPEN_LINK = @SHM_OPEN_LINK@
279STRIP = @STRIP@
280SVG_CFLAGS = @SVG_CFLAGS@
281SVG_LIBS = @SVG_LIBS@
282VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
283VALGRIND_LIBS = @VALGRIND_LIBS@
284VERSION = @VERSION@
285VMAJ = @VMAJ@
286WIN32_CFLAGS = @WIN32_CFLAGS@
287WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
288XCB_CFLAGS = @XCB_CFLAGS@
289XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
290XCB_GL_LIBS = @XCB_GL_LIBS@
291XCB_LIBS = @XCB_LIBS@
292XEXT_CFLAGS = @XEXT_CFLAGS@
293XEXT_LIBS = @XEXT_LIBS@
294XMKMF = @XMKMF@
295X_CFLAGS = @X_CFLAGS@
296X_EXTRA_LIBS = @X_EXTRA_LIBS@
297X_LIBS = @X_LIBS@
298X_PRE_LIBS = @X_PRE_LIBS@
299abs_builddir = @abs_builddir@
300abs_srcdir = @abs_srcdir@
301abs_top_builddir = @abs_top_builddir@
302abs_top_srcdir = @abs_top_srcdir@
303ac_ct_CC = @ac_ct_CC@
304ac_ct_CXX = @ac_ct_CXX@
305ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
306ac_ct_OBJC = @ac_ct_OBJC@
307altivec_cflags = @altivec_cflags@
308am__include = @am__include@
309am__leading_dot = @am__leading_dot@
310am__quote = @am__quote@
311am__tar = @am__tar@
312am__untar = @am__untar@
313bindir = @bindir@
314build = @build@
315build_alias = @build_alias@
316build_cpu = @build_cpu@
317build_os = @build_os@
318build_vendor = @build_vendor@
319builddir = @builddir@
320datadir = @datadir@
321datarootdir = @datarootdir@
322dlopen_libs = @dlopen_libs@
323docdir = @docdir@
324dvidir = @dvidir@
325edje_cc = @edje_cc@
326efl_doxygen = @efl_doxygen@
327efl_have_doxygen = @efl_have_doxygen@
328evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
329evas_engine_buffer_libs = @evas_engine_buffer_libs@
330evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
331evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
332evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
333evas_engine_directfb_libs = @evas_engine_directfb_libs@
334evas_engine_fb_cflags = @evas_engine_fb_cflags@
335evas_engine_fb_libs = @evas_engine_fb_libs@
336evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
337evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
338evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
339evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
340evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
341evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
342evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
343evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
344evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
345evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
346evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
347evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
348evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
349evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
350evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
351evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
352evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
353evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
354evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
355evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
356evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
357evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
358evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
359evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
360evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
361evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
362evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
363evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
364evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
365evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
366evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
367evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
368evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
369evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
370evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
371evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
372evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
373evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
374evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
375evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
376evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
377evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
378evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
379evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
380evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
381evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
382evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
383evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
384evas_image_loader_png_libs = @evas_image_loader_png_libs@
385evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
386evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
387evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
388evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
389evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
390evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
391evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
392evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
393evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
394evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
395evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
396evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
397exec_prefix = @exec_prefix@
398have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
399have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
400have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
401have_evas_engine_software_x11 = @have_evas_engine_software_x11@
402have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
403have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
404have_lcov = @have_lcov@
405host = @host@
406host_alias = @host_alias@
407host_cpu = @host_cpu@
408host_os = @host_os@
409host_vendor = @host_vendor@
410htmldir = @htmldir@
411includedir = @includedir@
412infodir = @infodir@
413install_sh = @install_sh@
414libdir = @libdir@
415libexecdir = @libexecdir@
416localedir = @localedir@
417localstatedir = @localstatedir@
418lt_ECHO = @lt_ECHO@
419lt_enable_auto_import = @lt_enable_auto_import@
420mandir = @mandir@
421mkdir_p = @mkdir_p@
422oldincludedir = @oldincludedir@
423pdfdir = @pdfdir@
424pkgconfig_requires_private = @pkgconfig_requires_private@
425prefix = @prefix@
426program_transform_name = @program_transform_name@
427psdir = @psdir@
428pthread_cflags = @pthread_cflags@
429pthread_libs = @pthread_libs@
430release_info = @release_info@
431requirement_evas = @requirement_evas@
432sbindir = @sbindir@
433sharedstatedir = @sharedstatedir@
434srcdir = @srcdir@
435sysconfdir = @sysconfdir@
436target_alias = @target_alias@
437top_build_prefix = @top_build_prefix@
438top_builddir = @top_builddir@
439top_srcdir = @top_srcdir@
440version_info = @version_info@
441MAINTAINERCLEANFILES = Makefile.in
442AM_CPPFLAGS = \
443-I. \
444-I$(top_srcdir)/src/lib \
445-I$(top_srcdir)/src/lib/include \
446-I$(top_srcdir)/src/modules/engines \
447-I$(top_srcdir)/src/modules/engines/software_16 \
448@EINA_CFLAGS@ \
449@FREETYPE_CFLAGS@ \
450@PIXMAN_CFLAGS@ \
451@evas_engine_software_16_ddraw_cflags@
452
453@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@SOFTWARE_16_DDRAW_SOURCES = \
454@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@evas_engine.c \
455@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@evas_ddraw_buffer.cpp \
456@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@evas_ddraw_main.cpp
457
458@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@SOFTWARE_16_DDRAW_LIBADD = @evas_engine_software_16_ddraw_libs@
459@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@includes_HEADERS = Evas_Engine_Software_16_DDraw.h
460@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@includesdir = $(includedir)/evas-@VMAJ@
461@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_16_ddraw/$(MODULE_ARCH)
462@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@pkg_LTLIBRARIES = module.la
463@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@module_la_SOURCES = $(SOFTWARE_16_DDRAW_SOURCES)
464@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@module_la_CXXFLAGS = -fno-rtti -fno-exceptions
465@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@module_la_LIBADD = $(top_builddir)/src/lib/libevas.la @EINA_LIBS@ $(SOFTWARE_16_DDRAW_LIBADD)
466@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@module_la_LDFLAGS = @lt_enable_auto_import@ -no-undefined -module -avoid-version
467@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
468@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_TRUE@noinst_LTLIBRARIES = libevas_engine_software_16_ddraw.la
469@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_TRUE@libevas_engine_software_16_ddraw_la_SOURCES = $(SOFTWARE_16_DDRAW_SOURCES)
470@BUILD_ENGINE_SOFTWARE_16_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW_TRUE@libevas_engine_software_16_ddraw_la_LIBADD = $(SOFTWARE_16_DDRAW_LIBADD)
471EXTRA_DIST = evas_engine.h
472all: all-am
473
474.SUFFIXES:
475.SUFFIXES: .c .cpp .lo .o .obj
476$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
477 @for dep in $?; do \
478 case '$(am__configure_deps)' in \
479 *$$dep*) \
480 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
481 && { if test -f $@; then exit 0; else break; fi; }; \
482 exit 1;; \
483 esac; \
484 done; \
485 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_16_ddraw/Makefile'; \
486 $(am__cd) $(top_srcdir) && \
487 $(AUTOMAKE) --gnu src/modules/engines/software_16_ddraw/Makefile
488.PRECIOUS: Makefile
489Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
490 @case '$?' in \
491 *config.status*) \
492 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
493 *) \
494 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
495 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
496 esac;
497
498$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
499 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
500
501$(top_srcdir)/configure: $(am__configure_deps)
502 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
503$(ACLOCAL_M4): $(am__aclocal_m4_deps)
504 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
505$(am__aclocal_m4_deps):
506
507clean-noinstLTLIBRARIES:
508 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
509 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
510 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
511 test "$$dir" != "$$p" || dir=.; \
512 echo "rm -f \"$${dir}/so_locations\""; \
513 rm -f "$${dir}/so_locations"; \
514 done
515install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
516 @$(NORMAL_INSTALL)
517 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
518 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
519 list2=; for p in $$list; do \
520 if test -f $$p; then \
521 list2="$$list2 $$p"; \
522 else :; fi; \
523 done; \
524 test -z "$$list2" || { \
525 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
526 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
527 }
528
529uninstall-pkgLTLIBRARIES:
530 @$(NORMAL_UNINSTALL)
531 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
532 for p in $$list; do \
533 $(am__strip_dir) \
534 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
535 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
536 done
537
538clean-pkgLTLIBRARIES:
539 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
540 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
541 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
542 test "$$dir" != "$$p" || dir=.; \
543 echo "rm -f \"$${dir}/so_locations\""; \
544 rm -f "$${dir}/so_locations"; \
545 done
546libevas_engine_software_16_ddraw.la: $(libevas_engine_software_16_ddraw_la_OBJECTS) $(libevas_engine_software_16_ddraw_la_DEPENDENCIES)
547 $(AM_V_CXXLD)$(CXXLINK) $(am_libevas_engine_software_16_ddraw_la_rpath) $(libevas_engine_software_16_ddraw_la_OBJECTS) $(libevas_engine_software_16_ddraw_la_LIBADD) $(LIBS)
548module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
549 $(AM_V_CXXLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
550
551mostlyclean-compile:
552 -rm -f *.$(OBJEXT)
553
554distclean-compile:
555 -rm -f *.tab.c
556
557@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_ddraw_buffer.Plo@am__quote@
558@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_ddraw_main.Plo@am__quote@
559@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
560@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_ddraw_buffer.Plo@am__quote@
561@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_ddraw_main.Plo@am__quote@
562@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
563
564.c.o:
565@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
566@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
567@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
568@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
569@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
570@am__fastdepCC_FALSE@ $(COMPILE) -c $<
571
572.c.obj:
573@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
574@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
575@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
576@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
577@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
578@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
579
580.c.lo:
581@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
582@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
583@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
584@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
585@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
586@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
587
588module_la-evas_engine.lo: evas_engine.c
589@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
590@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
591@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
592@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
593@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
594@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
595
596.cpp.o:
597@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
598@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
599@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
600@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
601@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
602@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
603
604.cpp.obj:
605@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
606@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
607@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
608@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
609@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
610@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
611
612.cpp.lo:
613@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
614@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
615@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
616@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
617@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
618@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
619
620module_la-evas_ddraw_buffer.lo: evas_ddraw_buffer.cpp
621@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_ddraw_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_ddraw_buffer.Tpo -c -o module_la-evas_ddraw_buffer.lo `test -f 'evas_ddraw_buffer.cpp' || echo '$(srcdir)/'`evas_ddraw_buffer.cpp
622@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_ddraw_buffer.Tpo $(DEPDIR)/module_la-evas_ddraw_buffer.Plo
623@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
624@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_ddraw_buffer.cpp' object='module_la-evas_ddraw_buffer.lo' libtool=yes @AMDEPBACKSLASH@
625@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
626@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_ddraw_buffer.lo `test -f 'evas_ddraw_buffer.cpp' || echo '$(srcdir)/'`evas_ddraw_buffer.cpp
627
628module_la-evas_ddraw_main.lo: evas_ddraw_main.cpp
629@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_ddraw_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_ddraw_main.Tpo -c -o module_la-evas_ddraw_main.lo `test -f 'evas_ddraw_main.cpp' || echo '$(srcdir)/'`evas_ddraw_main.cpp
630@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_ddraw_main.Tpo $(DEPDIR)/module_la-evas_ddraw_main.Plo
631@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
632@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_ddraw_main.cpp' object='module_la-evas_ddraw_main.lo' libtool=yes @AMDEPBACKSLASH@
633@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
634@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_ddraw_main.lo `test -f 'evas_ddraw_main.cpp' || echo '$(srcdir)/'`evas_ddraw_main.cpp
635
636mostlyclean-libtool:
637 -rm -f *.lo
638
639clean-libtool:
640 -rm -rf .libs _libs
641install-includesHEADERS: $(includes_HEADERS)
642 @$(NORMAL_INSTALL)
643 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
644 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
645 for p in $$list; do \
646 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
647 echo "$$d$$p"; \
648 done | $(am__base_list) | \
649 while read files; do \
650 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
651 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
652 done
653
654uninstall-includesHEADERS:
655 @$(NORMAL_UNINSTALL)
656 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
657 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
658 test -n "$$files" || exit 0; \
659 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
660 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
661
662ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
663 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
664 unique=`for i in $$list; do \
665 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
666 done | \
667 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
668 END { if (nonempty) { for (i in files) print i; }; }'`; \
669 mkid -fID $$unique
670tags: TAGS
671
672TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
673 $(TAGS_FILES) $(LISP)
674 set x; \
675 here=`pwd`; \
676 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
677 unique=`for i in $$list; do \
678 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
679 done | \
680 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
681 END { if (nonempty) { for (i in files) print i; }; }'`; \
682 shift; \
683 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
684 test -n "$$unique" || unique=$$empty_fix; \
685 if test $$# -gt 0; then \
686 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
687 "$$@" $$unique; \
688 else \
689 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
690 $$unique; \
691 fi; \
692 fi
693ctags: CTAGS
694CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
695 $(TAGS_FILES) $(LISP)
696 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
697 unique=`for i in $$list; do \
698 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
699 done | \
700 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
701 END { if (nonempty) { for (i in files) print i; }; }'`; \
702 test -z "$(CTAGS_ARGS)$$unique" \
703 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
704 $$unique
705
706GTAGS:
707 here=`$(am__cd) $(top_builddir) && pwd` \
708 && $(am__cd) $(top_srcdir) \
709 && gtags -i $(GTAGS_ARGS) "$$here"
710
711distclean-tags:
712 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
713
714distdir: $(DISTFILES)
715 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
716 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
717 list='$(DISTFILES)'; \
718 dist_files=`for file in $$list; do echo $$file; done | \
719 sed -e "s|^$$srcdirstrip/||;t" \
720 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
721 case $$dist_files in \
722 */*) $(MKDIR_P) `echo "$$dist_files" | \
723 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
724 sort -u` ;; \
725 esac; \
726 for file in $$dist_files; do \
727 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
728 if test -d $$d/$$file; then \
729 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
730 if test -d "$(distdir)/$$file"; then \
731 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
732 fi; \
733 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
734 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
735 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
736 fi; \
737 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
738 else \
739 test -f "$(distdir)/$$file" \
740 || cp -p $$d/$$file "$(distdir)/$$file" \
741 || exit 1; \
742 fi; \
743 done
744check-am: all-am
745check: check-am
746all-am: Makefile $(LTLIBRARIES) $(HEADERS)
747installdirs:
748 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
749 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
750 done
751install: install-am
752install-exec: install-exec-am
753install-data: install-data-am
754uninstall: uninstall-am
755
756install-am: all-am
757 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
758
759installcheck: installcheck-am
760install-strip:
761 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
762 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
763 `test -z '$(STRIP)' || \
764 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
765mostlyclean-generic:
766
767clean-generic:
768
769distclean-generic:
770 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
771 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
772
773maintainer-clean-generic:
774 @echo "This command is intended for maintainers to use"
775 @echo "it deletes files that may require special tools to rebuild."
776 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
777clean: clean-am
778
779clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
780 clean-pkgLTLIBRARIES mostlyclean-am
781
782distclean: distclean-am
783 -rm -rf ./$(DEPDIR)
784 -rm -f Makefile
785distclean-am: clean-am distclean-compile distclean-generic \
786 distclean-tags
787
788dvi: dvi-am
789
790dvi-am:
791
792html: html-am
793
794html-am:
795
796info: info-am
797
798info-am:
799
800install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
801
802install-dvi: install-dvi-am
803
804install-dvi-am:
805
806install-exec-am:
807
808install-html: install-html-am
809
810install-html-am:
811
812install-info: install-info-am
813
814install-info-am:
815
816install-man:
817
818install-pdf: install-pdf-am
819
820install-pdf-am:
821
822install-ps: install-ps-am
823
824install-ps-am:
825
826installcheck-am:
827
828maintainer-clean: maintainer-clean-am
829 -rm -rf ./$(DEPDIR)
830 -rm -f Makefile
831maintainer-clean-am: distclean-am maintainer-clean-generic
832
833mostlyclean: mostlyclean-am
834
835mostlyclean-am: mostlyclean-compile mostlyclean-generic \
836 mostlyclean-libtool
837
838pdf: pdf-am
839
840pdf-am:
841
842ps: ps-am
843
844ps-am:
845
846uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
847
848.MAKE: install-am install-strip
849
850.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
851 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
852 ctags distclean distclean-compile distclean-generic \
853 distclean-libtool distclean-tags distdir dvi dvi-am html \
854 html-am info info-am install install-am install-data \
855 install-data-am install-dvi install-dvi-am install-exec \
856 install-exec-am install-html install-html-am \
857 install-includesHEADERS install-info install-info-am \
858 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
859 install-ps install-ps-am install-strip installcheck \
860 installcheck-am installdirs maintainer-clean \
861 maintainer-clean-generic mostlyclean mostlyclean-compile \
862 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
863 tags uninstall uninstall-am uninstall-includesHEADERS \
864 uninstall-pkgLTLIBRARIES
865
866
867# Tell versions [3.59,3.63) of GNU make to not export all variables.
868# Otherwise a system limit (for SysV at least) may be exceeded.
869.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_16_ddraw/evas_ddraw_buffer.cpp b/libraries/evas/src/modules/engines/software_16_ddraw/evas_ddraw_buffer.cpp
new file mode 100644
index 0000000..7a0a8b7
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_ddraw/evas_ddraw_buffer.cpp
@@ -0,0 +1,87 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4
5DDraw_Output_Buffer *
6evas_software_ddraw_output_buffer_new(HWND window,
7 LPDIRECTDRAW object,
8 LPDIRECTDRAWSURFACE surface_primary,
9 LPDIRECTDRAWSURFACE surface_back,
10 LPDIRECTDRAWSURFACE surface_source,
11 int width,
12 int height)
13{
14 DDSURFACEDESC surface_desc;
15 DDraw_Output_Buffer *ddob;
16
17 ddob = (DDraw_Output_Buffer *)calloc(1, sizeof(DDraw_Output_Buffer));
18 if (!ddob) return NULL;
19
20 ddob->dd.window = window;
21 ddob->dd.object = object;
22 ddob->dd.surface_primary = surface_primary;
23 ddob->dd.surface_back = surface_back;
24 ddob->dd.surface_source = surface_source;
25 ddob->width = width;
26 ddob->height = height;
27 ddob->pitch = width * 2;
28
29 ZeroMemory(&surface_desc, sizeof(surface_desc));
30 surface_desc.dwSize = sizeof(surface_desc);
31
32 if (FAILED(ddob->dd.surface_source->Lock(NULL,
33 &surface_desc,
34 DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR,
35 NULL)))
36 {
37 free(ddob);
38 return NULL;
39 }
40
41 ddob->data = (DATA16 *)surface_desc.lpSurface;
42
43 if (FAILED(ddob->dd.surface_source->Unlock(NULL)))
44 {
45 free(ddob);
46 return NULL;
47 }
48 if (ddob->im)
49 evas_cache_image_drop(&ddob->im->cache_entry);
50
51 ddob->im = (Soft16_Image *) evas_cache_image_data(evas_common_soft16_image_cache_get(), width, height, (DATA32 *) ddob->data, 0, EVAS_COLORSPACE_RGB565_A5P);
52 if (ddob->im)
53 ddob->im->stride = ddob->pitch;
54
55 return ddob;
56}
57
58void
59evas_software_ddraw_output_buffer_free(DDraw_Output_Buffer *ddob, int sync)
60{
61 free(ddob);
62}
63
64void
65evas_software_ddraw_output_buffer_paste(DDraw_Output_Buffer *ddob)
66{
67 RECT dst_rect;
68 RECT src_rect;
69 POINT p;
70
71 SetRect(&src_rect, 0, 0, ddob->width, ddob->height);
72
73 if (FAILED(ddob->dd.surface_back->BltFast(0, 0,
74 ddob->dd.surface_source,
75 &src_rect,
76 DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT)))
77 return;
78
79 p.x = 0;
80 p.y = 0;
81 ClientToScreen(ddob->dd.window, &p);
82 GetClientRect(ddob->dd.window, &dst_rect);
83 OffsetRect(&dst_rect, p.x, p.y);
84 ddob->dd.surface_primary->Blt(&dst_rect,
85 ddob->dd.surface_back, &src_rect,
86 DDBLT_WAIT, NULL);
87}
diff --git a/libraries/evas/src/modules/engines/software_16_ddraw/evas_ddraw_main.cpp b/libraries/evas/src/modules/engines/software_16_ddraw/evas_ddraw_main.cpp
new file mode 100644
index 0000000..7a2eb7f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_ddraw/evas_ddraw_main.cpp
@@ -0,0 +1,71 @@
1#include "evas_engine.h"
2
3
4void *
5evas_software_ddraw_lock(DDraw_Output_Buffer *ddob, int *ddraw_width, int *ddraw_height, int *ddraw_pitch, int *ddraw_depth)
6{
7 DDSURFACEDESC surface_desc;
8
9 ZeroMemory(&surface_desc, sizeof(surface_desc));
10 surface_desc.dwSize = sizeof(surface_desc);
11
12 if (FAILED(ddob->dd.surface_back->Lock(NULL,
13 &surface_desc,
14 DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR | DDLOCK_WRITEONLY,
15 NULL)))
16 return NULL;
17
18 *ddraw_width = surface_desc.dwWidth;
19 *ddraw_height = surface_desc.dwHeight;
20 *ddraw_pitch = surface_desc.lPitch;
21 *ddraw_depth = surface_desc.ddpfPixelFormat.dwRGBBitCount >> 3;
22
23 return surface_desc.lpSurface;
24}
25
26void
27evas_software_ddraw_unlock_and_flip(DDraw_Output_Buffer *ddob)
28{
29 RECT dst_rect;
30 RECT src_rect;
31 POINT p;
32
33 if (FAILED(ddob->dd.surface_back->Unlock(NULL)))
34 return;
35
36 /* we figure out where on the primary surface our window lives */
37 p.x = 0;
38 p.y = 0;
39 ClientToScreen(ddob->dd.window, &p);
40 GetClientRect(ddob->dd.window, &dst_rect);
41 OffsetRect(&dst_rect, p.x, p.y);
42 SetRect(&src_rect, 0, 0, ddob->width, ddob->height);
43
44 /* nothing to do if the function fails, so we don't check the result */
45 ddob->dd.surface_primary->BltFast(0, 0,
46 ddob->dd.surface_back, &dst_rect,
47 DDBLTFAST_WAIT || DDBLTFAST_NOCOLORKEY);
48}
49
50void
51evas_software_ddraw_surface_resize(DDraw_Output_Buffer *ddob)
52{
53 DDSURFACEDESC surface_desc;
54
55 ddob->dd.surface_back->Release();
56 memset (&surface_desc, 0, sizeof (surface_desc));
57 surface_desc.dwSize = sizeof (surface_desc);
58 /* FIXME: that code does not compile. Must know why */
59#if 0
60 surface_desc.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
61 surface_desc.dwWidth = width;
62 surface_desc.dwHeight = height;
63 IDirectDrawSurface7_SetSurfaceDesc(ddob->dd.surface_back, &surface_desc, NULL);
64#else
65 surface_desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
66 surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
67 surface_desc.dwWidth = ddob->width;
68 surface_desc.dwHeight = ddob->height;
69 ddob->dd.object->CreateSurface(&surface_desc, &ddob->dd.surface_back, NULL);
70#endif
71}
diff --git a/libraries/evas/src/modules/engines/software_16_ddraw/evas_engine.c b/libraries/evas/src/modules/engines/software_16_ddraw/evas_engine.c
new file mode 100644
index 0000000..9629781
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_ddraw/evas_engine.c
@@ -0,0 +1,628 @@
1#include "evas_common.h"
2#include "evas_private.h"
3#include "evas_engine.h"
4#include "Evas_Engine_Software_16_DDraw.h"
5#include "evas_common_soft16.h"
6
7int _evas_engine_soft16_ddraw_log_dom = -1;
8/* function tables - filled in later (func and parent func) */
9static Evas_Func func, pfunc;
10
11/* engine struct data */
12typedef struct _Render_Engine Render_Engine;
13
14struct _Render_Engine
15{
16 HWND window;
17 LPDIRECTDRAW object;
18 LPDIRECTDRAWSURFACE surface_primary;
19 LPDIRECTDRAWSURFACE surface_back;
20 LPDIRECTDRAWSURFACE surface_source;
21 int width;
22 int height;
23 int rotation;
24 Tilebuf *tb;
25 Tilebuf_Rect *rects;
26 Tilebuf_Rect *cur_rect;
27 DDraw_Output_Buffer *ddob;
28 Soft16_Image *tmp_out; /* used by indirect render, like rotation */
29 HRGN clip_rects;
30 unsigned char end : 1;
31};
32
33/* prototypes we will use here */
34
35static void *eng_info(Evas *e);
36static void eng_info_free(Evas *e, void *info);
37static int eng_setup(Evas *e, void *info);
38static void eng_output_free(void *data);
39static void eng_output_resize(void *data, int w, int h);
40static void eng_output_tile_size_set(void *data, int w, int h);
41static void eng_output_redraws_rect_add(void *data, int x, int y, int w, int h);
42static void eng_output_redraws_rect_del(void *data, int x, int y, int w, int h);
43static void eng_output_redraws_clear(void *data);
44static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
45static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
46static void eng_output_flush(void *data);
47static void eng_output_idle_flush(void *data);
48
49/* engine api this module provides */
50static void *
51eng_info(Evas *e)
52{
53 Evas_Engine_Info_Software_16_DDraw *info;
54 info = calloc(1, sizeof(Evas_Engine_Info_Software_16_DDraw));
55 if (!info) return NULL;
56 info->magic.magic = rand();
57 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
58 return info;
59 e = NULL;
60}
61
62static void
63eng_info_free(Evas *e, void *info)
64{
65 Evas_Engine_Info_Software_16_DDraw *in;
66 in = (Evas_Engine_Info_Software_16_DDraw *)info;
67 free(in);
68}
69
70static void
71_tmp_out_alloc(Render_Engine *re)
72{
73 Tilebuf_Rect *r;
74 int w = 0, h = 0;
75
76 EINA_INLIST_FOREACH(re->rects, r)
77 {
78 if (r->w > w) w = r->w;
79 if (r->h > h) h = r->h;
80 }
81
82 if (re->tmp_out)
83 {
84 if ((re->tmp_out->cache_entry.w < w) || (re->tmp_out->cache_entry.h < h))
85 {
86 evas_cache_image_drop(&re->tmp_out->cache_entry);
87 re->tmp_out = NULL;
88 }
89 }
90
91 if (!re->tmp_out)
92 {
93 Soft16_Image *im;
94
95 im = (Soft16_Image *) evas_cache_image_empty(evas_common_soft16_image_cache_get());
96 im->cache_entry.flags.alpha = 0;
97 evas_cache_image_surface_alloc(&im->cache_entry, w, h);
98
99 re->tmp_out = im;
100 }
101}
102
103
104static int
105eng_setup(Evas *e, void *in)
106{
107 Render_Engine *re;
108 Evas_Engine_Info_Software_16_DDraw *info;
109
110 info = (Evas_Engine_Info_Software_16_DDraw *)in;
111 if (!e->engine.data.output)
112 {
113 /* the only check - simplistic, i know, but enough for this
114 * "special purpose" engine. Remember it is meant to be used
115 * for limited power devices that have a 16bit display mode
116 * and no real other acceleration, and high resolution so we
117 * can pre-dither into 16bpp. */
118 if (info->info.depth != 16)
119 return 0;
120 /* do common routine init - we wil at least use it for core
121 * image loading and font loading/glyph rendering & placement */
122 evas_common_cpu_init();
123
124 evas_common_blend_init();
125 evas_common_image_init();
126 evas_common_convert_init();
127 evas_common_scale_init();
128 evas_common_rectangle_init();
129 evas_common_polygon_init();
130 evas_common_line_init();
131 evas_common_font_init();
132 evas_common_draw_init();
133 evas_common_tilebuf_init();
134 evas_common_soft16_image_init();
135
136 /* render engine specific data */
137 re = calloc(1, sizeof(Render_Engine));
138 if (!re)
139 return 0;
140 e->engine.data.output = re;
141 re->window = info->info.window;
142 re->object = info->info.object;
143 re->surface_primary = info->info.surface_primary;
144 re->surface_back = info->info.surface_back;
145 re->surface_source = info->info.surface_source;
146 re->width = e->output.w;
147 re->height = e->output.h;
148 re->rotation = info->info.rotation;
149 re->tb = evas_common_tilebuf_new(e->output.w, e->output.h);
150 if (re->tb)
151 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
152 }
153 else
154 {
155 /* we changed the info after first init - do a re-eval where
156 * appropriate */
157 if (info->info.depth != 16)
158 return 0;
159 re = e->engine.data.output;
160 if (re->tb) evas_common_tilebuf_free(re->tb);
161 re->window = info->info.window;
162 re->object = info->info.object;
163 re->surface_primary = info->info.surface_primary;
164 re->surface_back = info->info.surface_back;
165 re->surface_source = info->info.surface_source;
166 re->width = e->output.w;
167 re->height = e->output.h;
168 re->rotation = info->info.rotation;
169 re->tb = evas_common_tilebuf_new(e->output.w, e->output.h);
170 if (re->tb)
171 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
172 if (re->tmp_out)
173 {
174 evas_cache_image_drop(&re->tmp_out->cache_entry);
175 re->tmp_out = NULL;
176 }
177 }
178 if (!e->engine.data.output) return 0;
179 /* add a draw context if we dont have one */
180 if (!e->engine.data.context)
181 e->engine.data.context =
182 e->engine.func->context_new(e->engine.data.output);
183
184 return 1;
185}
186
187static void
188eng_output_free(void *data)
189{
190 Render_Engine *re;
191
192 re = (Render_Engine *)data;
193 if (re->ddob) evas_software_ddraw_output_buffer_free(re->ddob, 0);
194 if (re->clip_rects) DeleteObject(re->clip_rects);
195 if (re->tb) evas_common_tilebuf_free(re->tb);
196 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
197 if (re->tmp_out) evas_cache_image_drop(&re->tmp_out->cache_entry);
198 free(re);
199
200 evas_common_font_shutdown();
201 evas_common_image_shutdown();
202 evas_common_soft16_image_shutdown();
203}
204
205static void
206eng_output_resize(void *data, int w, int h)
207{
208 Render_Engine *re;
209
210 re = (Render_Engine *)data;
211
212 if ((re->width == w) && (re->height == h)) return;
213
214 if (re->ddob)
215 evas_software_ddraw_surface_resize(re->ddob);
216
217 evas_common_tilebuf_free(re->tb);
218 re->width = w;
219 re->height = h;
220 re->tb = evas_common_tilebuf_new(w, h);
221 if (re->tb)
222 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
223 if (re->ddob)
224 {
225 evas_software_ddraw_output_buffer_free(re->ddob, 0);
226 re->ddob = NULL;
227 }
228 if (re->clip_rects)
229 {
230 DeleteObject(re->clip_rects);
231 re->clip_rects = NULL;
232 }
233 if (re->tmp_out)
234 {
235 evas_cache_image_drop(&re->tmp_out->cache_entry);
236 re->tmp_out = NULL;
237 }
238}
239
240static void
241eng_output_tile_size_set(void *data, int w, int h)
242{
243 Render_Engine *re;
244
245 re = (Render_Engine *)data;
246 evas_common_tilebuf_set_tile_size(re->tb, w, h);
247}
248
249static void
250eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
251{
252 Render_Engine *re;
253
254 re = (Render_Engine *)data;
255 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
256}
257
258static void
259eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
260{
261 Render_Engine *re;
262
263 re = (Render_Engine *)data;
264 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
265}
266
267static void
268eng_output_redraws_clear(void *data)
269{
270 Render_Engine *re;
271
272 re = (Render_Engine *)data;
273 evas_common_tilebuf_clear(re->tb);
274}
275
276static inline void
277_output_buffer_alloc(Render_Engine *re)
278{
279 int width;
280 int height;
281
282 if (re->ddob) return;
283
284 if ((re->rotation == 0) || (re->rotation == 180))
285 {
286 width = re->width;
287 height = re->height;
288 }
289 else
290 {
291 width = re->height;
292 height = re->width;
293 }
294
295 re->ddob = evas_software_ddraw_output_buffer_new(re->window,
296 re->object,
297 re->surface_primary,
298 re->surface_back,
299 re->surface_source,
300 width,
301 height);
302}
303
304static void *
305eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
306{
307 Render_Engine *re;
308 Tilebuf_Rect *rect;
309 int ux, uy, uw, uh;
310
311 re = (Render_Engine *)data;
312 if (re->end)
313 {
314 re->end = 0;
315 return NULL;
316 }
317 if (!re->rects)
318 {
319 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
320 if (!re->rects) return NULL;
321
322 re->cur_rect = re->rects;
323 _output_buffer_alloc(re);
324 if (re->rotation != 0) _tmp_out_alloc(re); /* grows if required */
325 }
326 if (!re->cur_rect)
327 {
328 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
329 re->rects = NULL;
330 return NULL;
331 }
332 rect = re->cur_rect;
333 ux = rect->x; uy = rect->y; uw = rect->w; uh = rect->h;
334 re->cur_rect = (Tilebuf_Rect *)((EINA_INLIST_GET(re->cur_rect))->next);
335 if (!re->cur_rect)
336 {
337 evas_common_tilebuf_free_render_rects(re->rects);
338 re->rects = NULL;
339 re->end = 1;
340 }
341
342 *x = ux; *y = uy; *w = uw; *h = uh;
343 if (re->rotation == 0)
344 {
345 *cx = ux; *cy = uy; *cw = uw; *ch = uh;
346 return &re->ddob->im;
347 }
348 else
349 {
350 *cx = 0; *cy = 0; *cw = uw; *ch = uh;
351 return re->tmp_out;
352 }
353}
354
355static void
356_blit_rot_90(Soft16_Image *dst, const Soft16_Image *src,
357 int out_x, int out_y, int w, int h)
358{
359 DATA16 *dp, *sp;
360 int x, y;
361
362 sp = src->pixels;
363 dp = dst->pixels + (out_x +
364 (w + out_y - 1) * dst->stride);
365
366 for (y = 0; y < h; y++)
367 {
368 DATA16 *dp_itr, *sp_itr;
369
370 sp_itr = sp;
371 dp_itr = dp;
372
373 for (x = 0; x < w; x++)
374 {
375 *dp_itr = *sp_itr;
376
377 sp_itr++;
378 dp_itr -= dst->stride;
379 }
380 sp += src->stride;
381 dp++;
382 }
383}
384
385static void
386_blit_rot_180(Soft16_Image *dst, const Soft16_Image *src,
387 int out_x, int out_y, int w, int h)
388{
389 DATA16 *dp, *sp;
390 int x, y;
391
392 sp = src->pixels;
393 dp = dst->pixels + ((w + out_x - 1) +
394 (h + out_y - 1) * dst->stride);
395
396 for (y = 0; y < h; y++)
397 {
398 DATA16 *dp_itr, *sp_itr;
399
400 sp_itr = sp;
401 dp_itr = dp;
402
403 for (x = 0; x < w; x++)
404 {
405 *dp_itr = *sp_itr;
406
407 sp_itr++;
408 dp_itr--;
409 }
410 sp += src->stride;
411 dp -= dst->stride;
412 }
413}
414
415static void
416_blit_rot_270(Soft16_Image *dst, const Soft16_Image *src,
417 int out_x, int out_y, int w, int h)
418{
419 DATA16 *dp, *sp;
420 int x, y;
421
422 sp = src->pixels;
423 dp = dst->pixels + ((h + out_x - 1) +
424 out_y * dst->stride);
425
426 for (y = 0; y < h; y++)
427 {
428 DATA16 *dp_itr, *sp_itr;
429
430 sp_itr = sp;
431 dp_itr = dp;
432
433 for (x = 0; x < w; x++)
434 {
435 *dp_itr = *sp_itr;
436
437 sp_itr++;
438 dp_itr += dst->stride;
439 }
440 sp += src->stride;
441 dp--;
442 }
443}
444
445static void
446_tmp_out_process(Render_Engine *re, int out_x, int out_y, int w, int h)
447{
448 Soft16_Image *d, *s;
449
450 d = &re->ddob->im;
451 s = re->tmp_out;
452
453 if ((w < 1) || (h < 1) || (out_x >= d->cache_entry.w) || (out_y >= d->cache_entry.h))
454 return;
455
456 if (re->rotation == 90)
457 _blit_rot_90(d, s, out_x, out_y, w, h);
458 else if (re->rotation == 180)
459 _blit_rot_180(d, s, out_x, out_y, w, h);
460 else if (re->rotation == 270)
461 _blit_rot_270(d, s, out_x, out_y, w, h);
462}
463
464static void
465eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
466{
467 Render_Engine *re;
468 HRGN region;
469 int xx;
470 int yy;
471 int width;
472 int height;
473
474 re = (Render_Engine *)data;
475
476 if (!re->clip_rects)
477 re->clip_rects = CreateRectRgn(0, 0, 0, 0);
478
479 if (re->rotation == 0)
480 {
481 xx = x;
482 yy = y;
483 width = w;
484 height = h;
485 }
486 else if (re->rotation == 90)
487 {
488 xx = y;
489 yy = re->width - w - x;
490 width = h;
491 height = w;
492 }
493 else if (re->rotation == 180)
494 {
495 xx = re->width - w - x;
496 yy = re->height - h - y;
497 width = w;
498 height = h;
499 }
500 else if (re->rotation == 270)
501 {
502 xx = re->height - h - y;
503 yy = x;
504 width = h;
505 height = w;
506 }
507
508 region = CreateRectRgn(xx, yy, xx + width, yy + height);
509
510 if (re->rotation != 0)
511 _tmp_out_process(re, xx, yy, w, h);
512 CombineRgn(re->clip_rects, re->clip_rects, region, RGN_OR);
513}
514
515static void
516eng_output_flush(void *data)
517{
518 Render_Engine *re;
519 void *ddraw_data;
520 int ddraw_width;
521 int ddraw_height;
522 int ddraw_pitch;
523 int ddraw_depth;
524
525 re = (Render_Engine *)data;
526 if (re->clip_rects)
527 {
528 /* FIXME : i have to manage that */
529/* XSetRegion(re->disp, re->gc, re->clip_rects); */
530 DeleteObject(re->clip_rects);
531 re->clip_rects = NULL;
532 }
533 else return;
534
535 evas_software_ddraw_output_buffer_paste(re->ddob);
536
537 /* FIXME : i have to manage that */
538/* XSetClipMask(re->disp, re->gc, None); */
539}
540
541static void
542eng_output_idle_flush(void *data)
543{
544 Render_Engine *re;
545
546 re = (Render_Engine *)data;
547 if (re->ddob)
548 {
549 evas_software_ddraw_output_buffer_free(re->ddob, 0);
550 re->ddob = NULL;
551 }
552 if (re->clip_rects)
553 {
554 DeleteObject(re->clip_rects);
555 re->clip_rects = NULL;
556 }
557 if (re->tmp_out)
558 {
559 evas_cache_image_drop(&re->tmp_out->cache_entry);
560 re->tmp_out = NULL;
561 }
562}
563
564static Eina_Bool
565eng_canvas_alpha_get(void *data, void *context)
566{
567 return EINA_FALSE;
568}
569
570/* module advertising code */
571static int
572module_open(Evas_Module *em)
573{
574 if (!em) return 0;
575 /* get whatever engine module we inherit from */
576 if (!_evas_module_engine_inherit(&pfunc, "software_16")) return 0;
577 _evas_engine_soft16_ddraw_log_dom = eina_log_domain_register
578 ("evas-software_16_ddraw", EVAS_DEFAULT_LOG_COLOR);
579 if (_evas_engine_soft16_ddraw_log_dom < 0)
580 {
581 EINA_LOG_ERR("Can not create a module log domain.");
582 return 0;
583 }
584 /* store it for later use */
585 func = pfunc;
586 /* now to override methods */
587#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
588 ORD(info);
589 ORD(info_free);
590 ORD(setup);
591 ORD(canvas_alpha_get);
592 ORD(output_free);
593 ORD(output_resize);
594 ORD(output_tile_size_set);
595 ORD(output_redraws_rect_add);
596 ORD(output_redraws_rect_del);
597 ORD(output_redraws_clear);
598 ORD(output_redraws_next_update_get);
599 ORD(output_redraws_next_update_push);
600 ORD(output_flush);
601 ORD(output_idle_flush);
602 /* now advertise out own api */
603 em->functions = (void *)(&func);
604 return 1;
605}
606
607static void
608module_close(Evas_Module *em)
609{
610 eina_log_domain_unregister(_evas_engine_soft16_ddraw_log_dom);
611}
612
613static Evas_Module_Api evas_modapi =
614{
615 EVAS_MODULE_API_VERSION,
616 "software_16_ddraw",
617 "none",
618 {
619 module_open,
620 module_close
621 }
622};
623
624EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_16_ddraw);
625
626#ifndef EVAS_STATIC_BUILD_SOFTWARE_16_DDRAW
627EVAS_EINA_MODULE_DEFINE(engine, software_16_ddraw);
628#endif
diff --git a/libraries/evas/src/modules/engines/software_16_ddraw/evas_engine.h b/libraries/evas/src/modules/engines/software_16_ddraw/evas_engine.h
new file mode 100644
index 0000000..fe85e97
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_ddraw/evas_engine.h
@@ -0,0 +1,85 @@
1#ifndef __EVAS_ENGINE_H__
2#define __EVAS_ENGINE_H__
3
4#include <windows.h>
5#include <ddraw.h>
6
7#include "evas_common_soft16.h"
8
9extern int _evas_engine_soft16_ddraw_log_dom ;
10#ifdef ERR
11# undef ERR
12#endif
13#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_soft16_ddraw_log_dom, __VA_ARGS__)
14
15#ifdef DBG
16# undef DBG
17#endif
18#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_soft16_ddraw_log_dom, __VA_ARGS__)
19
20#ifdef INF
21# undef INF
22#endif
23#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_soft16_ddraw_log_dom, __VA_ARGS__)
24
25#ifdef WRN
26# undef WRN
27#endif
28#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_soft16_ddraw_log_dom, __VA_ARGS__)
29
30#ifdef CRIT
31# undef CRIT
32#endif
33#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_soft16_ddraw_log_dom, __VA_ARGS__)
34
35typedef struct _DDraw_Output_Buffer DDraw_Output_Buffer;
36
37struct _DDraw_Output_Buffer
38{
39 Soft16_Image *im;
40 struct {
41 HWND window;
42 LPDIRECTDRAW object;
43 LPDIRECTDRAWSURFACE surface_primary;
44 LPDIRECTDRAWSURFACE surface_back;
45 LPDIRECTDRAWSURFACE surface_source;
46 } dd;
47 void *data;
48 int x;
49 int y;
50 int width;
51 int height;
52 int depth;
53 int pitch;
54};
55
56/****/
57
58#ifdef __cplusplus
59extern "C" {
60#endif
61
62
63DDraw_Output_Buffer *evas_software_ddraw_output_buffer_new (HWND window,
64 LPDIRECTDRAW object,
65 LPDIRECTDRAWSURFACE surface_primary,
66 LPDIRECTDRAWSURFACE surface_back,
67 LPDIRECTDRAWSURFACE surface_source,
68 int width,
69 int height);
70void evas_software_ddraw_output_buffer_free (DDraw_Output_Buffer *ddob, int sync);
71void evas_software_ddraw_output_buffer_paste (DDraw_Output_Buffer *ddob);
72
73
74void *evas_software_ddraw_lock(DDraw_Output_Buffer *ddob, int *ddraw_width, int *ddraw_height, int *ddraw_pitch, int *ddraw_depth);
75
76void evas_software_ddraw_unlock_and_flip(DDraw_Output_Buffer *ddob);
77
78void evas_software_ddraw_surface_resize(DDraw_Output_Buffer *ddob);
79
80
81#ifdef __cplusplus
82}
83#endif
84
85#endif /* __EVAS_ENGINE_H__ */
diff --git a/libraries/evas/src/modules/engines/software_16_sdl/Evas_Engine_SDL_16.h b/libraries/evas/src/modules/engines/software_16_sdl/Evas_Engine_SDL_16.h
new file mode 100644
index 0000000..5a133fe
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_sdl/Evas_Engine_SDL_16.h
@@ -0,0 +1,25 @@
1#ifndef _EVAS_ENGINE_SDL_16_H
2# define _EVAS_ENGINE_SDL_16_H
3
4#include <SDL/SDL.h>
5
6typedef struct _Evas_Engine_Info_SDL_16 Evas_Engine_Info_SDL_16;
7struct _Evas_Engine_Info_SDL_16
8{
9 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
10 /* at you and make nasty noises */
11 Evas_Engine_Info magic;
12
13 struct {
14 int rotation;
15 int fullscreen : 1;
16 int hwsurface : 1;
17 int noframe : 1;
18 int alpha : 1;
19 } info;
20
21 /* non-blocking or blocking mode */
22 Evas_Engine_Render_Mode render_mode;
23};
24
25#endif
diff --git a/libraries/evas/src/modules/engines/software_16_sdl/Makefile.am b/libraries/evas/src/modules/engines/software_16_sdl/Makefile.am
new file mode 100644
index 0000000..af0197d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_sdl/Makefile.am
@@ -0,0 +1,40 @@
1AUTOMAKE_OPTIONS = 1.4 foreign
2
3MAINTAINERCLEANFILES = Makefile.in
4
5INCLUDES = -I. -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/lib/include @FREETYPE_CFLAGS@ @PIXMAN_CFLAGS@ @SDL_CFLAGS@ @EINA_CFLAGS@
6
7if BUILD_ENGINE_SOFTWARE_SDL
8
9SOFTWARE_SDL_SOURCES = \
10evas_engine.c \
11evas_engine.h
12
13
14includes_HEADERS = Evas_Engine_SDL_16.h
15includesdir = $(includedir)/evas-@VMAJ@
16
17if !EVAS_STATIC_BUILD_SOFTWARE_SDL
18
19pkgdir = $(libdir)/evas/modules/engines/software_16_sdl/$(MODULE_ARCH)
20pkg_LTLIBRARIES = module.la
21
22module_la_SOURCES = $(SOFTWARE_SDL_SOURCES)
23
24module_la_LIBADD = @EINA_LIBS@ @SDL_LIBS@ $(top_builddir)/src/lib/libevas.la
25module_la_LDFLAGS = -no-undefined -module -avoid-version -L$(top_builddir)/src/lib -L$(top_builddir)/src/lib/.libs
26
27else
28
29noinst_LTLIBRARIES = libevas_engine_software_16_sdl.la
30
31libevas_engine_software_16_sdl_la_SOURCES = $(SOFTWARE_SDL_SOURCES)
32libevas_engine_software_16_sdl_la_LIBADD = @SDL_LIBS@
33
34endif
35endif
36
37EXTRA_DIST = \
38evas_engine.c \
39evas_engine.h \
40Evas_Engine_SDL_16.h
diff --git a/libraries/evas/src/modules/engines/software_16_sdl/Makefile.in b/libraries/evas/src/modules/engines/software_16_sdl/Makefile.in
new file mode 100644
index 0000000..219e392
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_sdl/Makefile.in
@@ -0,0 +1,780 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/software_16_sdl
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84libevas_engine_software_16_sdl_la_DEPENDENCIES =
85am__libevas_engine_software_16_sdl_la_SOURCES_DIST = evas_engine.c \
86 evas_engine.h
87@BUILD_ENGINE_SOFTWARE_SDL_TRUE@am__objects_1 = evas_engine.lo
88@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_TRUE@am_libevas_engine_software_16_sdl_la_OBJECTS = $(am__objects_1)
89libevas_engine_software_16_sdl_la_OBJECTS = \
90 $(am_libevas_engine_software_16_sdl_la_OBJECTS)
91AM_V_lt = $(am__v_lt_$(V))
92am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
93am__v_lt_0 = --silent
94@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_TRUE@am_libevas_engine_software_16_sdl_la_rpath =
95@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la
96am__module_la_SOURCES_DIST = evas_engine.c evas_engine.h
97@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@am_module_la_OBJECTS = $(am__objects_1)
98module_la_OBJECTS = $(am_module_la_OBJECTS)
99module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
100 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
101 $(module_la_LDFLAGS) $(LDFLAGS) -o $@
102@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@am_module_la_rpath = -rpath \
103@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@ $(pkgdir)
104DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
105depcomp = $(SHELL) $(top_srcdir)/depcomp
106am__depfiles_maybe = depfiles
107am__mv = mv -f
108COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
109 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
110LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
111 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
112 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
113 $(AM_CFLAGS) $(CFLAGS)
114AM_V_CC = $(am__v_CC_$(V))
115am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
116am__v_CC_0 = @echo " CC " $@;
117AM_V_at = $(am__v_at_$(V))
118am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
119am__v_at_0 = @
120CCLD = $(CC)
121LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
122 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
123 $(AM_LDFLAGS) $(LDFLAGS) -o $@
124AM_V_CCLD = $(am__v_CCLD_$(V))
125am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
126am__v_CCLD_0 = @echo " CCLD " $@;
127AM_V_GEN = $(am__v_GEN_$(V))
128am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
129am__v_GEN_0 = @echo " GEN " $@;
130SOURCES = $(libevas_engine_software_16_sdl_la_SOURCES) \
131 $(module_la_SOURCES)
132DIST_SOURCES = $(am__libevas_engine_software_16_sdl_la_SOURCES_DIST) \
133 $(am__module_la_SOURCES_DIST)
134am__includes_HEADERS_DIST = Evas_Engine_SDL_16.h
135HEADERS = $(includes_HEADERS)
136ETAGS = etags
137CTAGS = ctags
138DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
139ACLOCAL = @ACLOCAL@
140ALLOCA = @ALLOCA@
141AMTAR = @AMTAR@
142AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
143AR = @AR@
144AS = @AS@
145AUTOCONF = @AUTOCONF@
146AUTOHEADER = @AUTOHEADER@
147AUTOMAKE = @AUTOMAKE@
148AWK = @AWK@
149CC = @CC@
150CCDEPMODE = @CCDEPMODE@
151CFLAGS = @CFLAGS@
152CHECK_CFLAGS = @CHECK_CFLAGS@
153CHECK_LIBS = @CHECK_LIBS@
154CPP = @CPP@
155CPPFLAGS = @CPPFLAGS@
156CXX = @CXX@
157CXXCPP = @CXXCPP@
158CXXDEPMODE = @CXXDEPMODE@
159CXXFLAGS = @CXXFLAGS@
160CYGPATH_W = @CYGPATH_W@
161DEFS = @DEFS@
162DEPDIR = @DEPDIR@
163DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
164DIRECTFB_LIBS = @DIRECTFB_LIBS@
165DLLTOOL = @DLLTOOL@
166DSYMUTIL = @DSYMUTIL@
167DUMPBIN = @DUMPBIN@
168ECHO_C = @ECHO_C@
169ECHO_N = @ECHO_N@
170ECHO_T = @ECHO_T@
171ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
172ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
173EDB_CFLAGS = @EDB_CFLAGS@
174EDB_LIBS = @EDB_LIBS@
175EDJE_CFLAGS = @EDJE_CFLAGS@
176EDJE_LIBS = @EDJE_LIBS@
177EET_CFLAGS = @EET_CFLAGS@
178EET_LIBS = @EET_LIBS@
179EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
180EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
181EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
182EGREP = @EGREP@
183EINA_CFLAGS = @EINA_CFLAGS@
184EINA_LIBS = @EINA_LIBS@
185EVAS_CFLAGS = @EVAS_CFLAGS@
186EVAS_LIBS = @EVAS_LIBS@
187EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
188EVIL_CFLAGS = @EVIL_CFLAGS@
189EVIL_LIBS = @EVIL_LIBS@
190EXEEXT = @EXEEXT@
191FGREP = @FGREP@
192FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
193FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
194FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
195FREETYPE_LIBS = @FREETYPE_LIBS@
196FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
197FRIBIDI_LIBS = @FRIBIDI_LIBS@
198GL_EET_CFLAGS = @GL_EET_CFLAGS@
199GL_EET_LIBS = @GL_EET_LIBS@
200GREP = @GREP@
201HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
202HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
203INSTALL = @INSTALL@
204INSTALL_DATA = @INSTALL_DATA@
205INSTALL_PROGRAM = @INSTALL_PROGRAM@
206INSTALL_SCRIPT = @INSTALL_SCRIPT@
207INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
208LD = @LD@
209LDFLAGS = @LDFLAGS@
210LIBOBJS = @LIBOBJS@
211LIBS = @LIBS@
212LIBTOOL = @LIBTOOL@
213LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
214LINEBREAK_LIBS = @LINEBREAK_LIBS@
215LIPO = @LIPO@
216LN_S = @LN_S@
217LTLIBOBJS = @LTLIBOBJS@
218MAKEINFO = @MAKEINFO@
219MKDIR_P = @MKDIR_P@
220MODULE_ARCH = @MODULE_ARCH@
221NM = @NM@
222NMEDIT = @NMEDIT@
223OBJC = @OBJC@
224OBJCDEPMODE = @OBJCDEPMODE@
225OBJCFLAGS = @OBJCFLAGS@
226OBJDUMP = @OBJDUMP@
227OBJEXT = @OBJEXT@
228OTOOL = @OTOOL@
229OTOOL64 = @OTOOL64@
230PACKAGE = @PACKAGE@
231PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
232PACKAGE_NAME = @PACKAGE_NAME@
233PACKAGE_STRING = @PACKAGE_STRING@
234PACKAGE_TARNAME = @PACKAGE_TARNAME@
235PACKAGE_URL = @PACKAGE_URL@
236PACKAGE_VERSION = @PACKAGE_VERSION@
237PATH_SEPARATOR = @PATH_SEPARATOR@
238PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
239PIXMAN_LIBS = @PIXMAN_LIBS@
240PKG_CONFIG = @PKG_CONFIG@
241PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
242PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
243PNG_CFLAGS = @PNG_CFLAGS@
244PNG_LIBS = @PNG_LIBS@
245RANLIB = @RANLIB@
246SDL_CFLAGS = @SDL_CFLAGS@
247SDL_LIBS = @SDL_LIBS@
248SED = @SED@
249SET_MAKE = @SET_MAKE@
250SHELL = @SHELL@
251SHM_OPEN_LINK = @SHM_OPEN_LINK@
252STRIP = @STRIP@
253SVG_CFLAGS = @SVG_CFLAGS@
254SVG_LIBS = @SVG_LIBS@
255VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
256VALGRIND_LIBS = @VALGRIND_LIBS@
257VERSION = @VERSION@
258VMAJ = @VMAJ@
259WIN32_CFLAGS = @WIN32_CFLAGS@
260WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
261XCB_CFLAGS = @XCB_CFLAGS@
262XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
263XCB_GL_LIBS = @XCB_GL_LIBS@
264XCB_LIBS = @XCB_LIBS@
265XEXT_CFLAGS = @XEXT_CFLAGS@
266XEXT_LIBS = @XEXT_LIBS@
267XMKMF = @XMKMF@
268X_CFLAGS = @X_CFLAGS@
269X_EXTRA_LIBS = @X_EXTRA_LIBS@
270X_LIBS = @X_LIBS@
271X_PRE_LIBS = @X_PRE_LIBS@
272abs_builddir = @abs_builddir@
273abs_srcdir = @abs_srcdir@
274abs_top_builddir = @abs_top_builddir@
275abs_top_srcdir = @abs_top_srcdir@
276ac_ct_CC = @ac_ct_CC@
277ac_ct_CXX = @ac_ct_CXX@
278ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
279ac_ct_OBJC = @ac_ct_OBJC@
280altivec_cflags = @altivec_cflags@
281am__include = @am__include@
282am__leading_dot = @am__leading_dot@
283am__quote = @am__quote@
284am__tar = @am__tar@
285am__untar = @am__untar@
286bindir = @bindir@
287build = @build@
288build_alias = @build_alias@
289build_cpu = @build_cpu@
290build_os = @build_os@
291build_vendor = @build_vendor@
292builddir = @builddir@
293datadir = @datadir@
294datarootdir = @datarootdir@
295dlopen_libs = @dlopen_libs@
296docdir = @docdir@
297dvidir = @dvidir@
298edje_cc = @edje_cc@
299efl_doxygen = @efl_doxygen@
300efl_have_doxygen = @efl_have_doxygen@
301evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
302evas_engine_buffer_libs = @evas_engine_buffer_libs@
303evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
304evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
305evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
306evas_engine_directfb_libs = @evas_engine_directfb_libs@
307evas_engine_fb_cflags = @evas_engine_fb_cflags@
308evas_engine_fb_libs = @evas_engine_fb_libs@
309evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
310evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
311evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
312evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
313evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
314evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
315evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
316evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
317evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
318evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
319evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
320evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
321evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
322evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
323evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
324evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
325evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
326evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
327evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
328evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
329evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
330evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
331evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
332evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
333evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
334evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
335evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
336evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
337evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
338evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
339evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
340evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
341evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
342evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
343evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
344evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
345evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
346evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
347evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
348evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
349evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
350evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
351evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
352evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
353evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
354evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
355evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
356evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
357evas_image_loader_png_libs = @evas_image_loader_png_libs@
358evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
359evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
360evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
361evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
362evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
363evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
364evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
365evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
366evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
367evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
368evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
369evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
370exec_prefix = @exec_prefix@
371have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
372have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
373have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
374have_evas_engine_software_x11 = @have_evas_engine_software_x11@
375have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
376have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
377have_lcov = @have_lcov@
378host = @host@
379host_alias = @host_alias@
380host_cpu = @host_cpu@
381host_os = @host_os@
382host_vendor = @host_vendor@
383htmldir = @htmldir@
384includedir = @includedir@
385infodir = @infodir@
386install_sh = @install_sh@
387libdir = @libdir@
388libexecdir = @libexecdir@
389localedir = @localedir@
390localstatedir = @localstatedir@
391lt_ECHO = @lt_ECHO@
392lt_enable_auto_import = @lt_enable_auto_import@
393mandir = @mandir@
394mkdir_p = @mkdir_p@
395oldincludedir = @oldincludedir@
396pdfdir = @pdfdir@
397pkgconfig_requires_private = @pkgconfig_requires_private@
398prefix = @prefix@
399program_transform_name = @program_transform_name@
400psdir = @psdir@
401pthread_cflags = @pthread_cflags@
402pthread_libs = @pthread_libs@
403release_info = @release_info@
404requirement_evas = @requirement_evas@
405sbindir = @sbindir@
406sharedstatedir = @sharedstatedir@
407srcdir = @srcdir@
408sysconfdir = @sysconfdir@
409target_alias = @target_alias@
410top_build_prefix = @top_build_prefix@
411top_builddir = @top_builddir@
412top_srcdir = @top_srcdir@
413version_info = @version_info@
414AUTOMAKE_OPTIONS = 1.4 foreign
415MAINTAINERCLEANFILES = Makefile.in
416INCLUDES = -I. -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/lib/include @FREETYPE_CFLAGS@ @PIXMAN_CFLAGS@ @SDL_CFLAGS@ @EINA_CFLAGS@
417@BUILD_ENGINE_SOFTWARE_SDL_TRUE@SOFTWARE_SDL_SOURCES = \
418@BUILD_ENGINE_SOFTWARE_SDL_TRUE@evas_engine.c \
419@BUILD_ENGINE_SOFTWARE_SDL_TRUE@evas_engine.h
420
421@BUILD_ENGINE_SOFTWARE_SDL_TRUE@includes_HEADERS = Evas_Engine_SDL_16.h
422@BUILD_ENGINE_SOFTWARE_SDL_TRUE@includesdir = $(includedir)/evas-@VMAJ@
423@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_16_sdl/$(MODULE_ARCH)
424@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@pkg_LTLIBRARIES = module.la
425@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@module_la_SOURCES = $(SOFTWARE_SDL_SOURCES)
426@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@module_la_LIBADD = @EINA_LIBS@ @SDL_LIBS@ $(top_builddir)/src/lib/libevas.la
427@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@module_la_LDFLAGS = -no-undefined -module -avoid-version -L$(top_builddir)/src/lib -L$(top_builddir)/src/lib/.libs
428@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_TRUE@noinst_LTLIBRARIES = libevas_engine_software_16_sdl.la
429@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_TRUE@libevas_engine_software_16_sdl_la_SOURCES = $(SOFTWARE_SDL_SOURCES)
430@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_TRUE@libevas_engine_software_16_sdl_la_LIBADD = @SDL_LIBS@
431EXTRA_DIST = \
432evas_engine.c \
433evas_engine.h \
434Evas_Engine_SDL_16.h
435
436all: all-am
437
438.SUFFIXES:
439.SUFFIXES: .c .lo .o .obj
440$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
441 @for dep in $?; do \
442 case '$(am__configure_deps)' in \
443 *$$dep*) \
444 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
445 && { if test -f $@; then exit 0; else break; fi; }; \
446 exit 1;; \
447 esac; \
448 done; \
449 echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/modules/engines/software_16_sdl/Makefile'; \
450 $(am__cd) $(top_srcdir) && \
451 $(AUTOMAKE) --foreign src/modules/engines/software_16_sdl/Makefile
452.PRECIOUS: Makefile
453Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
454 @case '$?' in \
455 *config.status*) \
456 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
457 *) \
458 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
459 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
460 esac;
461
462$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
463 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
464
465$(top_srcdir)/configure: $(am__configure_deps)
466 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
467$(ACLOCAL_M4): $(am__aclocal_m4_deps)
468 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
469$(am__aclocal_m4_deps):
470
471clean-noinstLTLIBRARIES:
472 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
473 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
474 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
475 test "$$dir" != "$$p" || dir=.; \
476 echo "rm -f \"$${dir}/so_locations\""; \
477 rm -f "$${dir}/so_locations"; \
478 done
479install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
480 @$(NORMAL_INSTALL)
481 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
482 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
483 list2=; for p in $$list; do \
484 if test -f $$p; then \
485 list2="$$list2 $$p"; \
486 else :; fi; \
487 done; \
488 test -z "$$list2" || { \
489 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
490 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
491 }
492
493uninstall-pkgLTLIBRARIES:
494 @$(NORMAL_UNINSTALL)
495 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
496 for p in $$list; do \
497 $(am__strip_dir) \
498 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
499 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
500 done
501
502clean-pkgLTLIBRARIES:
503 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
504 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
505 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
506 test "$$dir" != "$$p" || dir=.; \
507 echo "rm -f \"$${dir}/so_locations\""; \
508 rm -f "$${dir}/so_locations"; \
509 done
510libevas_engine_software_16_sdl.la: $(libevas_engine_software_16_sdl_la_OBJECTS) $(libevas_engine_software_16_sdl_la_DEPENDENCIES)
511 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_software_16_sdl_la_rpath) $(libevas_engine_software_16_sdl_la_OBJECTS) $(libevas_engine_software_16_sdl_la_LIBADD) $(LIBS)
512module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
513 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
514
515mostlyclean-compile:
516 -rm -f *.$(OBJEXT)
517
518distclean-compile:
519 -rm -f *.tab.c
520
521@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
522
523.c.o:
524@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
525@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
526@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
527@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
528@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
529@am__fastdepCC_FALSE@ $(COMPILE) -c $<
530
531.c.obj:
532@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
533@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
534@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
535@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
536@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
537@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
538
539.c.lo:
540@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
541@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
542@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
543@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
544@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
545@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
546
547mostlyclean-libtool:
548 -rm -f *.lo
549
550clean-libtool:
551 -rm -rf .libs _libs
552install-includesHEADERS: $(includes_HEADERS)
553 @$(NORMAL_INSTALL)
554 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
555 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
556 for p in $$list; do \
557 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
558 echo "$$d$$p"; \
559 done | $(am__base_list) | \
560 while read files; do \
561 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
562 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
563 done
564
565uninstall-includesHEADERS:
566 @$(NORMAL_UNINSTALL)
567 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
568 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
569 test -n "$$files" || exit 0; \
570 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
571 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
572
573ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
574 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
575 unique=`for i in $$list; do \
576 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
577 done | \
578 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
579 END { if (nonempty) { for (i in files) print i; }; }'`; \
580 mkid -fID $$unique
581tags: TAGS
582
583TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
584 $(TAGS_FILES) $(LISP)
585 set x; \
586 here=`pwd`; \
587 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
588 unique=`for i in $$list; do \
589 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
590 done | \
591 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
592 END { if (nonempty) { for (i in files) print i; }; }'`; \
593 shift; \
594 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
595 test -n "$$unique" || unique=$$empty_fix; \
596 if test $$# -gt 0; then \
597 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
598 "$$@" $$unique; \
599 else \
600 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
601 $$unique; \
602 fi; \
603 fi
604ctags: CTAGS
605CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
606 $(TAGS_FILES) $(LISP)
607 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
608 unique=`for i in $$list; do \
609 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
610 done | \
611 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
612 END { if (nonempty) { for (i in files) print i; }; }'`; \
613 test -z "$(CTAGS_ARGS)$$unique" \
614 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
615 $$unique
616
617GTAGS:
618 here=`$(am__cd) $(top_builddir) && pwd` \
619 && $(am__cd) $(top_srcdir) \
620 && gtags -i $(GTAGS_ARGS) "$$here"
621
622distclean-tags:
623 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
624
625distdir: $(DISTFILES)
626 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
627 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
628 list='$(DISTFILES)'; \
629 dist_files=`for file in $$list; do echo $$file; done | \
630 sed -e "s|^$$srcdirstrip/||;t" \
631 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
632 case $$dist_files in \
633 */*) $(MKDIR_P) `echo "$$dist_files" | \
634 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
635 sort -u` ;; \
636 esac; \
637 for file in $$dist_files; do \
638 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
639 if test -d $$d/$$file; then \
640 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
641 if test -d "$(distdir)/$$file"; then \
642 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
643 fi; \
644 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
645 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
646 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
647 fi; \
648 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
649 else \
650 test -f "$(distdir)/$$file" \
651 || cp -p $$d/$$file "$(distdir)/$$file" \
652 || exit 1; \
653 fi; \
654 done
655check-am: all-am
656check: check-am
657all-am: Makefile $(LTLIBRARIES) $(HEADERS)
658installdirs:
659 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
660 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
661 done
662install: install-am
663install-exec: install-exec-am
664install-data: install-data-am
665uninstall: uninstall-am
666
667install-am: all-am
668 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
669
670installcheck: installcheck-am
671install-strip:
672 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
673 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
674 `test -z '$(STRIP)' || \
675 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
676mostlyclean-generic:
677
678clean-generic:
679
680distclean-generic:
681 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
682 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
683
684maintainer-clean-generic:
685 @echo "This command is intended for maintainers to use"
686 @echo "it deletes files that may require special tools to rebuild."
687 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
688clean: clean-am
689
690clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
691 clean-pkgLTLIBRARIES mostlyclean-am
692
693distclean: distclean-am
694 -rm -rf ./$(DEPDIR)
695 -rm -f Makefile
696distclean-am: clean-am distclean-compile distclean-generic \
697 distclean-tags
698
699dvi: dvi-am
700
701dvi-am:
702
703html: html-am
704
705html-am:
706
707info: info-am
708
709info-am:
710
711install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
712
713install-dvi: install-dvi-am
714
715install-dvi-am:
716
717install-exec-am:
718
719install-html: install-html-am
720
721install-html-am:
722
723install-info: install-info-am
724
725install-info-am:
726
727install-man:
728
729install-pdf: install-pdf-am
730
731install-pdf-am:
732
733install-ps: install-ps-am
734
735install-ps-am:
736
737installcheck-am:
738
739maintainer-clean: maintainer-clean-am
740 -rm -rf ./$(DEPDIR)
741 -rm -f Makefile
742maintainer-clean-am: distclean-am maintainer-clean-generic
743
744mostlyclean: mostlyclean-am
745
746mostlyclean-am: mostlyclean-compile mostlyclean-generic \
747 mostlyclean-libtool
748
749pdf: pdf-am
750
751pdf-am:
752
753ps: ps-am
754
755ps-am:
756
757uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
758
759.MAKE: install-am install-strip
760
761.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
762 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
763 ctags distclean distclean-compile distclean-generic \
764 distclean-libtool distclean-tags distdir dvi dvi-am html \
765 html-am info info-am install install-am install-data \
766 install-data-am install-dvi install-dvi-am install-exec \
767 install-exec-am install-html install-html-am \
768 install-includesHEADERS install-info install-info-am \
769 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
770 install-ps install-ps-am install-strip installcheck \
771 installcheck-am installdirs maintainer-clean \
772 maintainer-clean-generic mostlyclean mostlyclean-compile \
773 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
774 tags uninstall uninstall-am uninstall-includesHEADERS \
775 uninstall-pkgLTLIBRARIES
776
777
778# Tell versions [3.59,3.63) of GNU make to not export all variables.
779# Otherwise a system limit (for SysV at least) may be exceeded.
780.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_16_sdl/evas_engine.c b/libraries/evas/src/modules/engines/software_16_sdl/evas_engine.c
new file mode 100644
index 0000000..02f9341
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_sdl/evas_engine.c
@@ -0,0 +1,1337 @@
1#include <assert.h>
2#include <math.h>
3#include <string.h>
4#include <sys/time.h>
5#include <time.h>
6#include <SDL/SDL.h>
7
8#include "evas_common.h"/* Also includes international specific stuff */
9#include "evas_engine.h"
10int _evas_engine_soft16_sdl_log_dom = -1;
11
12/* function tables - filled in later (func and parent func) */
13static Evas_Func func, pfunc;
14
15static Engine_Image_Entry *_sdl16_image_alloc (void);
16static void _sdl16_image_delete (Engine_Image_Entry *eim);
17
18static int _sdl16_image_constructor (Engine_Image_Entry *ie, void* data);
19static void _sdl16_image_destructor (Engine_Image_Entry *eim);
20
21static void _sdl16_image_dirty_region(Engine_Image_Entry *eim, unsigned int x, unsigned int y, unsigned int w, unsigned int h);
22
23static int _sdl16_image_dirty (Engine_Image_Entry *dst, const Engine_Image_Entry *src);
24
25static int _sdl16_image_size_set (Engine_Image_Entry *dst, const Engine_Image_Entry *src);
26
27static int _sdl16_image_update_data (Engine_Image_Entry* dst, void* engine_data);
28
29static void _sdl16_image_load (Engine_Image_Entry *eim, const Image_Entry* im);
30static int _sdl16_image_mem_size_get(Engine_Image_Entry *eim);
31
32#ifdef DEBUG_SDL
33static void _sdl16_image_debug (const char* context, Engine_Image_Entry* im);
34#endif
35
36static const Evas_Cache_Engine_Image_Func _sdl16_cache_engine_image_cb = {
37 NULL /* key */,
38 _sdl16_image_alloc /* alloc */,
39 _sdl16_image_delete /* dealloc */,
40 _sdl16_image_constructor /* constructor */,
41 _sdl16_image_destructor /* destructor */,
42 _sdl16_image_dirty_region /* dirty_region */,
43 _sdl16_image_dirty /* dirty */,
44 _sdl16_image_size_set /* size_set */,
45 _sdl16_image_update_data /* update_data */,
46 _sdl16_image_load /* load */,
47 _sdl16_image_mem_size_get /* mem_size_get */,
48#ifdef DEBUG_SDL /* debug */
49 _sdl16_image_debug
50#else
51 NULL
52#endif
53};
54
55#define _SDL_UPDATE_PIXELS(EIM) \
56 ((Soft16_Image *) EIM->cache_entry.src)->pixels = EIM->surface->pixels;
57
58#define RMASK565 0xf800
59#define GMASK565 0x07e0
60#define BMASK565 0x001f
61#define AMASK565 0x0000
62
63/* engine api this module provides */
64static void *
65evas_engine_sdl16_info(Evas *e __UNUSED__)
66{
67 Evas_Engine_Info_SDL_16 *info;
68 info = calloc(1, sizeof(Evas_Engine_Info_SDL_16));
69 if (!info) return NULL;
70 info->magic.magic = rand();
71 return info;
72}
73
74static void
75evas_engine_sdl16_info_free(Evas *e __UNUSED__, void *info)
76{
77 Evas_Engine_Info_SDL_16 *in;
78 in = (Evas_Engine_Info_SDL_16 *)info;
79 free(in);
80}
81
82static void
83_tmp_out_alloc(Render_Engine *re)
84{
85 Tilebuf_Rect *r;
86 unsigned int w = 0, h = 0;
87
88 EINA_INLIST_FOREACH(re->rects, r)
89 {
90 if (r->w > (int)w) w = r->w;
91 if (r->h > (int)h) h = r->h;
92 }
93
94 if (re->tmp_out)
95 {
96 if ((re->tmp_out->cache_entry.w < w) || (re->tmp_out->cache_entry.h < h))
97 {
98 evas_cache_image_drop(&re->tmp_out->cache_entry);
99 re->tmp_out = NULL;
100 }
101 }
102
103 if (!re->tmp_out)
104 {
105 Soft16_Image *im;
106
107 im = (Soft16_Image *) evas_cache_image_empty(evas_common_soft16_image_cache_get());
108 im->cache_entry.flags.alpha = 0;
109 evas_cache_image_surface_alloc(&im->cache_entry, w, h);
110
111 re->tmp_out = im;
112 }
113}
114
115static void*
116_sdl16_output_setup(int w, int h, int rotation, int fullscreen, int noframe, int hwsurface)
117{
118 Render_Engine *re;
119 SDL_Surface *surface;
120
121 re = calloc(1, sizeof(Render_Engine));
122 if (!re)
123 return NULL;
124 /* if we haven't initialized - init (automatic abort if already done) */
125 evas_common_cpu_init();
126 evas_common_blend_init();
127 evas_common_image_init();
128 evas_common_convert_init();
129 evas_common_scale_init();
130 evas_common_rectangle_init();
131 evas_common_polygon_init();
132 evas_common_line_init();
133 evas_common_font_init();
134 evas_common_draw_init();
135 evas_common_tilebuf_init();
136 evas_common_soft16_image_init();
137
138 if (w <= 0) w = 640;
139 if (h <= 0) h = 480;
140
141 re->cache = evas_cache_engine_image_init(&_sdl16_cache_engine_image_cb, evas_common_soft16_image_cache_get());
142 if (!re->cache)
143 {
144 ERR("Evas_Cache_Engine_Image allocation failed!");
145 free(re);
146 return NULL;
147 }
148
149 re->tb = evas_common_tilebuf_new(w, h);
150 /* in preliminary tests 16x16 gave highest framerates */
151 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
152 re->w = w;
153 re->h = h;
154 re->rot = rotation;
155 re->flags.hwsurface = hwsurface;
156 re->flags.fullscreen = fullscreen;
157 re->flags.noframe = noframe;
158 re->flags.end = 0;
159
160 re->update_rects_count = 0;
161 re->update_rects_limit = 0;
162 re->update_rects = NULL;
163
164 surface = SDL_SetVideoMode(w, h, 16,
165 (hwsurface ? SDL_HWSURFACE : SDL_SWSURFACE)
166 | (fullscreen ? SDL_FULLSCREEN : 0)
167 | (noframe ? SDL_NOFRAME : 0));
168 if (!surface)
169 {
170 ERR("SDL_SetVideoMode [ %i x %i x 16 ] failed", w, h);
171 evas_cache_engine_image_shutdown(re->cache);
172 free(re);
173 return NULL;
174 }
175
176 SDL_SetAlpha(surface, SDL_RLEACCEL, 0);
177 SDL_FillRect(surface, NULL, 0);
178
179 re->soft16_engine_image = (SDL_Engine_Image_Entry *) evas_cache_engine_image_engine(re->cache, surface);
180 if (!re->soft16_engine_image)
181 {
182 ERR("Soft16_Image allocation from SDL failed");
183 evas_cache_engine_image_shutdown(re->cache);
184 free(re);
185 return NULL;
186 }
187
188 return re;
189}
190
191
192static int
193evas_engine_sdl16_setup(Evas *e, void *in)
194{
195 Evas_Engine_Info_SDL_16 *info = (Evas_Engine_Info_SDL_16 *) in;
196
197 if (evas_output_method_get(e) != evas_render_method_lookup("software_16_sdl"))
198 return 0;
199
200 SDL_Init(SDL_INIT_NOPARACHUTE);
201
202 if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
203 {
204 ERR("SDL_Init failed with %s", SDL_GetError());
205 SDL_Quit();
206 return 0;
207 }
208
209 e->engine.data.output = _sdl16_output_setup(e->output.w, e->output.h,
210 info->info.rotation,
211 info->info.fullscreen,
212 info->info.noframe,
213 info->info.hwsurface);
214 if (!e->engine.data.output)
215 return 0;
216
217 e->engine.func = &func;
218 e->engine.data.context = e->engine.func->context_new(e->engine.data.output);
219
220 return 1;
221}
222
223static void
224evas_engine_sdl16_output_free(void *data)
225{
226 Render_Engine *re;
227
228 re = (Render_Engine *)data;
229 if (re->tb) evas_common_tilebuf_free(re->tb);
230 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
231 if (re->tmp_out) evas_cache_image_drop(&re->tmp_out->cache_entry);
232 if (re->soft16_engine_image)
233 evas_cache_engine_image_drop(&re->soft16_engine_image->cache_entry);
234 if (re->cache) evas_cache_engine_image_shutdown(re->cache);
235
236 if (re->update_rects)
237 free(re->update_rects);
238 free(re);
239
240 evas_common_font_shutdown();
241 evas_common_image_shutdown();
242 evas_common_soft16_image_shutdown();
243
244 SDL_QuitSubSystem(SDL_INIT_VIDEO);
245}
246
247static void
248evas_engine_sdl16_output_resize(void *data, int w, int h)
249{
250 Render_Engine *re = data;
251 SDL_Surface *surface;
252
253 if ((re->tb->outbuf_w == w) && (re->tb->outbuf_h == h)) return;
254
255 evas_cache_engine_image_drop(&re->soft16_engine_image->cache_entry);
256
257 evas_common_tilebuf_free(re->tb);
258 re->w = w;
259 re->h = h;
260 re->tb = evas_common_tilebuf_new(w, h);
261 if (re->tb)
262 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
263
264 surface = SDL_SetVideoMode(w, h, 16,
265 (re->flags.hwsurface ? SDL_HWSURFACE : SDL_SWSURFACE)
266 | (re->flags.fullscreen ? SDL_FULLSCREEN : 0)
267 | (re->flags.noframe ? SDL_NOFRAME : 0));
268 if (!surface)
269 {
270 ERR("Unable to change the resolution to : %ix%i", w, h);
271 exit(-1);
272 }
273 re->soft16_engine_image = (SDL_Engine_Image_Entry *) evas_cache_engine_image_engine(re->cache, surface);
274 if (!re->soft16_engine_image)
275 {
276 ERR("RGBA_Image allocation from SDL failed");
277 exit(-1);
278 }
279
280 SDL_FillRect(surface, NULL, 0);
281
282 if (re->tmp_out)
283 {
284 evas_cache_image_drop(&re->tmp_out->cache_entry);
285 re->tmp_out = NULL;
286 }
287}
288
289static void
290evas_engine_sdl16_output_tile_size_set(void *data, int w, int h)
291{
292 Render_Engine *re;
293
294 re = (Render_Engine *)data;
295 evas_common_tilebuf_set_tile_size(re->tb, w, h);
296}
297
298static void
299evas_engine_sdl16_output_redraws_rect_add(void *data, int x, int y, int w, int h)
300{
301 Render_Engine *re;
302
303 re = (Render_Engine *)data;
304 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
305}
306
307static void
308evas_engine_sdl16_output_redraws_rect_del(void *data, int x, int y, int w, int h)
309{
310 Render_Engine *re;
311
312 re = (Render_Engine *)data;
313 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
314}
315
316static void
317evas_engine_sdl16_output_redraws_clear(void *data)
318{
319 Render_Engine *re;
320
321 re = (Render_Engine *)data;
322 evas_common_tilebuf_clear(re->tb);
323}
324
325static void *
326evas_engine_sdl16_output_redraws_next_update_get(void *data,
327 int *x, int *y, int *w, int *h,
328 int *cx, int *cy, int *cw, int *ch)
329{
330 Render_Engine *re = data;
331 Tilebuf_Rect *tb_rect;
332 SDL_Rect rect;
333
334 if (re->flags.end)
335 {
336 re->flags.end = 0;
337 return NULL;
338 }
339 if (!re->rects)
340 {
341 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
342 re->cur_rect = re->rects;
343 if (re->rot != 0) _tmp_out_alloc(re); /* grows if required */
344 }
345
346 if (!re->cur_rect)
347 {
348 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
349 re->rects = NULL;
350 return NULL;
351 }
352
353 tb_rect = re->cur_rect;
354 *cx = *x = tb_rect->x;
355 *cy = *y = tb_rect->y;
356 *cw = *w = tb_rect->w;
357 *ch = *h = tb_rect->h;
358 re->cur_rect = (Tilebuf_Rect *)((EINA_INLIST_GET(re->cur_rect))->next);
359 if (!re->cur_rect)
360 {
361 evas_common_tilebuf_free_render_rects(re->rects);
362 re->rects = NULL;
363 re->flags.end = 1;
364 }
365
366 if (re->rot != 0)
367 {
368 *cx = 0;
369 *cy = 0;
370 }
371
372 rect.x = *x;
373 rect.y = *y;
374 rect.w = *w;
375 rect.h = *h;
376
377 /* Return the "fake" surface so it is passed to the drawing routines. */
378 return re->soft16_engine_image;
379}
380
381static void
382_blit_rot_90(Soft16_Image *dst, const Soft16_Image *src,
383 int out_x, int out_y, int w, int h)
384{
385 DATA16 *dp, *sp;
386 int x, y;
387
388 sp = src->pixels;
389 dp = dst->pixels + (out_x +
390 (w + out_y - 1) * dst->stride);
391
392 for (y = 0; y < h; y++)
393 {
394 DATA16 *dp_itr, *sp_itr;
395
396 sp_itr = sp;
397 dp_itr = dp;
398
399 for (x = 0; x < w; x++)
400 {
401 *dp_itr = *sp_itr;
402
403 sp_itr++;
404 dp_itr -= dst->stride;
405 }
406 sp += src->stride;
407 dp++;
408 }
409}
410
411static void
412_blit_rot_180(Soft16_Image *dst, const Soft16_Image *src,
413 int out_x, int out_y, int w, int h)
414{
415 DATA16 *dp, *sp;
416 int x, y;
417
418 sp = src->pixels;
419 dp = dst->pixels + ((w + out_x - 1) +
420 (h + out_y - 1) * dst->stride);
421
422 for (y = 0; y < h; y++)
423 {
424 DATA16 *dp_itr, *sp_itr;
425
426 sp_itr = sp;
427 dp_itr = dp;
428
429 for (x = 0; x < w; x++)
430 {
431 *dp_itr = *sp_itr;
432
433 sp_itr++;
434 dp_itr--;
435 }
436 sp += src->stride;
437 dp -= dst->stride;
438 }
439}
440
441static void
442_blit_rot_270(Soft16_Image *dst, const Soft16_Image *src,
443 int out_x, int out_y, int w, int h)
444{
445 DATA16 *dp, *sp;
446 int x, y;
447
448 sp = src->pixels;
449 dp = dst->pixels + ((h + out_x - 1) +
450 out_y * dst->stride);
451
452 for (y = 0; y < h; y++)
453 {
454 DATA16 *dp_itr, *sp_itr;
455
456 sp_itr = sp;
457 dp_itr = dp;
458
459 for (x = 0; x < w; x++)
460 {
461 *dp_itr = *sp_itr;
462
463 sp_itr++;
464 dp_itr += dst->stride;
465 }
466 sp += src->stride;
467 dp--;
468 }
469}
470
471static void
472_tmp_out_process(Render_Engine *re, int out_x, int out_y, int w, int h)
473{
474 Soft16_Image *d, *s;
475
476 d = (Soft16_Image *) re->soft16_engine_image->cache_entry.src;
477 s = re->tmp_out;
478
479 if ((w < 1) || (h < 1) ||
480 (out_x >= (int)d->cache_entry.w) || (out_y >= (int)d->cache_entry.h))
481 return;
482
483 if (re->rot == 90)
484 _blit_rot_90(d, s, out_x, out_y, w, h);
485 else if (re->rot == 180)
486 _blit_rot_180(d, s, out_x, out_y, w, h);
487 else if (re->rot == 270)
488 _blit_rot_270(d, s, out_x, out_y, w, h);
489}
490
491static void
492evas_engine_sdl16_output_redraws_next_update_push(void *data, void *surface __UNUSED__,
493 int x, int y, int w, int h)
494{
495 Render_Engine *re = data;
496 SDL_Rect rect;
497
498 if (re->update_rects_count + 1 > re->update_rects_limit)
499 {
500 re->update_rects_limit += 8;
501 re->update_rects = realloc(re->update_rects, sizeof (SDL_Rect) * re->update_rects_limit);
502 }
503
504 rect.x = x;
505 rect.y = y;
506 rect.w = w;
507 rect.h = h;
508
509 switch (re->rot)
510 {
511 case 0:
512 break;
513 case 90:
514 rect.x = y;
515 rect.y = re->w - w - x;
516 rect.w = h;
517 rect.h = w;
518 break;
519 case 180:
520 rect.x = re->w - w - x;
521 rect.y = re->h - h - y;
522 break;
523 case 270:
524 rect.x = re->h - h - y;
525 rect.y = x;
526 rect.w = h;
527 rect.h = w;
528 break;
529 default:
530 abort();
531 }
532
533 re->update_rects[re->update_rects_count] = rect;
534
535 if (re->rot != 0)
536 _tmp_out_process(re, rect.x, rect.y, w, h);
537
538 ++re->update_rects_count;
539
540 evas_common_cpu_end_opt();
541}
542
543static void
544evas_engine_sdl16_output_flush(void *data)
545{
546 Render_Engine *re = data;
547
548 if (re->update_rects_count > 0)
549 SDL_UpdateRects(re->soft16_engine_image->surface, re->update_rects_count, re->update_rects);
550
551 re->update_rects_count = 0;
552}
553
554static void
555evas_engine_sdl16_output_idle_flush(void *data)
556{
557 Render_Engine *re;
558
559 re = (Render_Engine *)data;
560 if (re->tmp_out)
561 {
562 evas_cache_image_drop(&re->tmp_out->cache_entry);
563 re->tmp_out = NULL;
564 }
565}
566
567static void*
568evas_engine_sdl16_image_load(void *data, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
569{
570 Render_Engine* re = (Render_Engine*) data;;
571
572 *error = 0;
573 return evas_cache_engine_image_request(re->cache, file, key, lo, NULL, error);
574}
575
576static int
577evas_engine_sdl16_image_alpha_get(void *data __UNUSED__, void *image)
578{
579 SDL_Engine_Image_Entry *eim = image;
580 Soft16_Image *im;
581
582 if (!eim) return 1;
583 im = (Soft16_Image *) eim->cache_entry.src;
584 switch (eim->cache_entry.src->space)
585 {
586 case EVAS_COLORSPACE_ARGB8888:
587 if (im->cache_entry.flags.alpha) return 1;
588 default:
589 break;
590 }
591 return 0;
592}
593
594static void
595evas_engine_sdl16_image_size_get(void *data __UNUSED__, void *image, int *w, int *h)
596{
597 SDL_Engine_Image_Entry *eim;
598
599 eim = image;
600 if (w) *w = eim->cache_entry.src->w;
601 if (h) *h = eim->cache_entry.src->h;
602}
603
604static int
605evas_engine_sdl16_image_colorspace_get(void *data __UNUSED__, void *image __UNUSED__)
606{
607 SDL_Engine_Image_Entry *eim = image;
608
609 if (!eim) return EVAS_COLORSPACE_RGB565_A5P;
610 return eim->cache_entry.src->space;
611}
612
613static void
614evas_engine_sdl16_image_colorspace_set(void *data __UNUSED__, void *image __UNUSED__, int cspace __UNUSED__)
615{
616 SDL_Engine_Image_Entry *eim = image;
617
618 if (!eim) return;
619 if (eim->cache_entry.src->space == cspace) return;
620
621 evas_cache_engine_image_colorspace(&eim->cache_entry, cspace, NULL);
622}
623
624static void*
625evas_engine_sdl16_image_new_from_copied_data(void *data,
626 int w, int h,
627 DATA32* image_data,
628 int alpha, int cspace)
629{
630 Render_Engine *re = data;
631
632 if (cspace != EVAS_COLORSPACE_RGB565_A5P)
633 {
634 WRN("Unsupported colorspace %d in %s() (%s:%d)",
635 cspace, __FUNCTION__, __FILE__, __LINE__);
636 return NULL;
637 }
638
639 WRN("s image_data: %p", image_data);
640
641 return evas_cache_engine_image_copied_data(re->cache,
642 w, h,
643 image_data,
644 alpha, cspace, NULL);
645}
646
647static void*
648evas_engine_sdl16_image_new_from_data(void *data, int w, int h, DATA32* image_data, int alpha, int cspace)
649{
650 Render_Engine *re = data;
651
652 if (cspace != EVAS_COLORSPACE_RGB565_A5P)
653 {
654 WRN("Unsupported colorspace %d in %s() (%s:%d)",
655 cspace, __FUNCTION__, __FILE__, __LINE__);
656 return NULL;
657 }
658
659 return evas_cache_engine_image_data(re->cache,
660 w, h,
661 image_data,
662 alpha, cspace, NULL);
663}
664
665static void
666evas_engine_sdl16_image_free(void *data __UNUSED__, void *image)
667{
668 SDL_Engine_Image_Entry *eim = image;
669
670 evas_cache_engine_image_drop(&eim->cache_entry);
671}
672
673static void*
674evas_engine_sdl16_image_size_set(void *data __UNUSED__, void *image, int w, int h)
675{
676 SDL_Engine_Image_Entry *eim = image;
677
678 return evas_cache_engine_image_size_set(&eim->cache_entry, w, h);
679}
680
681static void*
682evas_engine_sdl16_image_dirty_region(void *data __UNUSED__,
683 void *image,
684 int x, int y, int w, int h)
685{
686 SDL_Engine_Image_Entry *eim = image;
687
688 return evas_cache_engine_image_dirty(&eim->cache_entry, x, y, w, h);
689}
690
691static void*
692evas_engine_sdl16_image_data_get(void *data __UNUSED__, void *image,
693 int to_write, DATA32** image_data, int *err)
694{
695 SDL_Engine_Image_Entry *eim = image;
696 Soft16_Image *im;
697 int error;
698
699 if (!eim)
700 {
701 *image_data = NULL;
702 if (err) *err = EVAS_LOAD_ERROR_GENERIC;
703 return NULL;
704 }
705 im = (Soft16_Image *) eim->cache_entry.src;
706
707 if (to_write)
708 eim = (SDL_Engine_Image_Entry *) evas_cache_engine_image_dirty(&eim->cache_entry,
709 0, 0, eim->cache_entry.src->w, eim->cache_entry.src->h);
710
711 error = evas_cache_image_load_data(&im->cache_entry);
712 /* FIXME: Handle colorspace conversion correctly. */
713 if (image_data) *image_data = (DATA32 *) im->pixels;
714
715 if (err) *err = error;
716 return eim;
717}
718
719static void*
720evas_engine_sdl16_image_data_put(void *data, void *image, DATA32* image_data)
721{
722 SDL_Engine_Image_Entry *eim = image;
723 SDL_Engine_Image_Entry *eim_new;
724 Render_Engine *re = data;
725 Soft16_Image *im;
726
727 if (!eim) return NULL;
728 im = (Soft16_Image *) eim->cache_entry.src;
729
730 /* FIXME: Handle colorspace conversion correctly. */
731 if ((DATA16 *) image_data == im->pixels) return eim;
732
733 eim_new = (SDL_Engine_Image_Entry *) evas_cache_engine_image_data(re->cache,
734 eim->cache_entry.w, eim->cache_entry.h,
735 image_data,
736 func.image_alpha_get(data, eim),
737 func.image_colorspace_get(data, eim),
738 NULL);
739 evas_cache_engine_image_drop(&eim->cache_entry);
740
741 return eim_new;
742}
743
744static void
745evas_engine_sdl16_image_data_preload_request(void *data __UNUSED__, void *image, const void *target)
746{
747 SDL_Engine_Image_Entry *eim = image;
748 Soft16_Image *im;
749
750 if (!eim) return ;
751 im = (Soft16_Image *) eim->cache_entry.src;
752 if (!im) return ;
753 evas_cache_image_preload_data(&im->cache_entry, target);
754}
755
756static void
757evas_engine_sdl16_image_data_preload_cancel(void *data __UNUSED__, void *image, const void *target)
758{
759 SDL_Engine_Image_Entry *eim = image;
760 Soft16_Image *im;
761
762 if (!eim) return ;
763 im = (Soft16_Image *) eim->cache_entry.src;
764 if (!im) return ;
765 evas_cache_image_preload_cancel(&im->cache_entry, target);
766}
767
768static void*
769evas_engine_sdl16_image_alpha_set(void *data __UNUSED__, void *image, int has_alpha)
770{
771 SDL_Engine_Image_Entry *eim = image;
772 Soft16_Image *im;
773
774 if (!eim) return NULL;
775
776 im = (Soft16_Image *) eim->cache_entry.src;
777
778 if (im->cache_entry.flags.alpha == has_alpha) return eim;
779
780 //eim = (SDL_Engine_Image_Entry *) evas_cache_engine_image_alone(&eim->cache_entry, NULL);
781 //im = (Soft16_Image *) eim->cache_entry.src;
782
783 im->cache_entry.flags.alpha = has_alpha;
784 eim = (SDL_Engine_Image_Entry *) evas_cache_engine_image_dirty(&eim->cache_entry, 0, 0, eim->cache_entry.w, eim->cache_entry.h);
785
786 return eim;
787}
788
789static void*
790evas_engine_sdl16_image_border_set(void *data __UNUSED__, void *image, int l __UNUSED__, int r __UNUSED__, int t __UNUSED__, int b __UNUSED__)
791{
792 return image;
793}
794
795static void
796evas_engine_sdl16_image_border_get(void *data __UNUSED__, void *image __UNUSED__, int *l __UNUSED__, int *r __UNUSED__, int *t __UNUSED__, int *b __UNUSED__)
797{
798 /* FIXME: need to know what evas expect from this call */
799}
800
801static void
802evas_engine_sdl16_image_draw(void *data __UNUSED__, void *context, void *surface, void *image,
803 int src_region_x, int src_region_y, int src_region_w, int src_region_h,
804 int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h,
805 int smooth)
806{
807 SDL_Engine_Image_Entry *eim = image;
808 SDL_Engine_Image_Entry *dst = surface;
809 int mustlock_im = 0;
810 int mustlock_dst = 0;
811
812 evas_cache_engine_image_load_data(&eim->cache_entry);
813
814 /* Fallback to software method */
815 if (SDL_MUSTLOCK(dst->surface))
816 {
817 mustlock_dst = 1;
818 SDL_LockSurface(dst->surface);
819 _SDL_UPDATE_PIXELS(dst);
820 }
821
822 if (eim->surface && SDL_MUSTLOCK(eim->surface))
823 {
824 mustlock_im = 1;
825 SDL_LockSurface(eim->surface);
826 _SDL_UPDATE_PIXELS(eim);
827 }
828
829 evas_common_soft16_image_draw((Soft16_Image *) eim->cache_entry.src,
830 (Soft16_Image *) dst->cache_entry.src,
831 context,
832 src_region_x, src_region_y, src_region_w, src_region_h,
833 dst_region_x, dst_region_y, dst_region_w, dst_region_h,
834 smooth);
835
836 evas_common_cpu_end_opt ();
837 if (mustlock_im)
838 SDL_UnlockSurface(eim->surface);
839
840 if (mustlock_dst)
841 SDL_UnlockSurface(dst->surface);
842}
843
844static void
845evas_engine_sdl16_image_map_draw(void *data __UNUSED__, void *context __UNUSED__, void *surface __UNUSED__, void *image __UNUSED__, int npoints __UNUSED__, RGBA_Map_Point *p __UNUSED__, int smooth __UNUSED__, int level __UNUSED__)
846{
847}
848
849static void
850evas_engine_sdl16_image_scale_hint_set(void *data __UNUSED__, void *image __UNUSED__, int hint __UNUSED__)
851{
852}
853
854static int
855evas_engine_sdl16_image_scale_hint_get(void *data __UNUSED__, void *image __UNUSED__)
856{
857 return EVAS_IMAGE_SCALE_HINT_NONE;
858}
859
860
861static void
862evas_engine_sdl16_image_cache_flush(void *data)
863{
864 Render_Engine *re = (Render_Engine*) data;
865 int size;
866
867 size = evas_cache_engine_image_get(re->cache);
868 evas_cache_engine_image_set(re->cache, 0);
869 evas_cache_engine_image_set(re->cache, size);
870}
871
872static void
873evas_engine_sdl16_image_cache_set(void *data, int bytes)
874{
875 Render_Engine *re = (Render_Engine*) data;
876
877 evas_cache_engine_image_set(re->cache, bytes);
878}
879
880static int
881evas_engine_sdl16_image_cache_get(void *data)
882{
883 Render_Engine *re = (Render_Engine*) data;
884
885 return evas_cache_engine_image_get(re->cache);
886}
887
888static char*
889evas_engine_sdl16_image_comment_get(void *data __UNUSED__, void *image __UNUSED__, char *key __UNUSED__)
890{
891 return NULL;
892}
893
894static char*
895evas_engine_sdl16_image_format_get(void *data __UNUSED__, void *image __UNUSED__)
896{
897 /* FIXME: need to know what evas expect from this call */
898 return NULL;
899}
900
901static void
902evas_engine_sdl16_font_draw(void *data __UNUSED__, void *context, void *surface, void *font, int x, int y, int w __UNUSED__, int h __UNUSED__, int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *intl_props)
903{
904 static RGBA_Image *im = NULL;
905 SDL_Engine_Image_Entry *eim = surface;
906 Soft16_Image *dst = (Soft16_Image *) eim->cache_entry.src;
907 int mustlock_im = 0;
908
909 if (eim->surface && SDL_MUSTLOCK(eim->surface))
910 {
911 mustlock_im = 1;
912 SDL_LockSurface(eim->surface);
913 _SDL_UPDATE_PIXELS(eim);
914 }
915 evas_common_draw_context_font_ext_set(context,
916 dst,
917 evas_common_soft16_font_glyph_new,
918 evas_common_soft16_font_glyph_free,
919 evas_common_soft16_font_glyph_draw);
920 evas_common_font_draw((RGBA_Image *) eim->cache_entry.src, context, font, x, y, intl_props);
921 evas_common_draw_context_font_ext_set(context,
922 NULL,
923 NULL,
924 NULL,
925 NULL);
926
927 if (mustlock_im)
928 SDL_UnlockSurface(eim->surface);
929}
930
931static void
932evas_engine_sdl16_line_draw(void *data __UNUSED__, void *context, void *surface, int x1, int y1, int x2, int y2)
933{
934 SDL_Engine_Image_Entry *eim = surface;
935 int mustlock_im = 0;
936
937 if (eim->surface && SDL_MUSTLOCK(eim->surface))
938 {
939 mustlock_im = 1;
940 SDL_LockSurface(eim->surface);
941 _SDL_UPDATE_PIXELS(eim);
942 }
943
944 evas_common_soft16_line_draw((Soft16_Image *) eim->cache_entry.src,
945 context,
946 x1, y1, x2, y2);
947 evas_common_cpu_end_opt();
948
949 if (mustlock_im)
950 SDL_UnlockSurface(eim->surface);
951}
952
953static void
954evas_engine_sdl16_rectangle_draw(void *data __UNUSED__, void *context, void *surface, int x, int y, int w, int h)
955{
956 SDL_Engine_Image_Entry *eim = surface;
957#if ENGINE_SDL_PRIMITIVE
958 RGBA_Draw_Context *dc = context;
959#endif
960 Soft16_Image *im;
961 int mustlock_im = 0;
962
963#if ENGINE_SDL_PRIMITIVE
964 if (A_VAL(&dc->col.col) != 0x00)
965 {
966 if (A_VAL(&dc->col.col) != 0xFF)
967 {
968#endif
969 if (eim->surface && SDL_MUSTLOCK(eim->surface))
970 {
971 mustlock_im = 1;
972 SDL_LockSurface(eim->surface);
973 _SDL_UPDATE_PIXELS(eim);
974 }
975
976 im = (Soft16_Image *) eim->cache_entry.src;
977
978 evas_common_soft16_rectangle_draw(im, context, x, y, w, h);
979 evas_common_cpu_end_opt();
980
981 if (mustlock_im)
982 SDL_UnlockSurface(eim->surface);
983#if ENGINE_SDL_PRIMITIVE
984 }
985 else
986 {
987 SDL_Rect dstrect;
988
989 if (dc->clip.use)
990 {
991 SDL_Rect cliprect;
992
993 cliprect.x = dc->clip.x;
994 cliprect.y = dc->clip.y;
995 cliprect.w = dc->clip.w;
996 cliprect.h = dc->clip.h;
997
998 SDL_SetClipRect(eim->surface, &cliprect);
999 }
1000
1001 dstrect.x = x;
1002 dstrect.y = y;
1003 dstrect.w = w;
1004 dstrect.h = h;
1005
1006 SDL_FillRect(eim->surface, &dstrect, SDL_MapRGBA(eim->surface->format, R_VAL(&dc->col.col), G_VAL(&dc->col.col), B_VAL(&dc->col.col), 0xFF));
1007
1008 if (dc->clip.use)
1009 SDL_SetClipRect(eim->surface, NULL);
1010 }
1011 }
1012#endif
1013}
1014
1015static void
1016evas_engine_sdl16_polygon_draw(void *data __UNUSED__, void *context, void *surface, void *polygon, int x, int y)
1017{
1018 SDL_Engine_Image_Entry *eim = surface;
1019 int mustlock_im = 0;
1020
1021 if (eim->surface && SDL_MUSTLOCK(eim->surface))
1022 {
1023 mustlock_im = 1;
1024 SDL_LockSurface(eim->surface);
1025 _SDL_UPDATE_PIXELS(eim);
1026 }
1027
1028 evas_common_soft16_polygon_draw((Soft16_Image *) eim->cache_entry.src, context, polygon, x, y);
1029 evas_common_cpu_end_opt();
1030
1031 if (mustlock_im)
1032 SDL_UnlockSurface(eim->surface);
1033}
1034
1035static void
1036evas_engine_sdl16_image_stride_get(void *data __UNUSED__, void *image, int *stride)
1037{
1038 SDL_Engine_Image_Entry *eim = image;
1039
1040 if (stride) *stride = 0;
1041 if (!image) return;
1042 if (stride) *stride = ((Soft16_Image*) eim->cache_entry.src)->stride;
1043}
1044
1045static Eina_Bool
1046evas_engine_sdl16_canvas_alpha_get(void *data __UNUSED__, void *context __UNUSED__)
1047{
1048 return EINA_FALSE;
1049}
1050
1051/* module advertising code */
1052static int
1053module_open(Evas_Module *em)
1054{
1055 if (!em) return 0;
1056 /* get whatever engine module we inherit from */
1057 if (!_evas_module_engine_inherit(&pfunc, "software_16")) return 0;
1058 _evas_engine_soft16_sdl_log_dom = eina_log_domain_register
1059 ("evas-software_16_sdl", EVAS_DEFAULT_LOG_COLOR);
1060 if (_evas_engine_soft16_sdl_log_dom < 0)
1061 {
1062 EINA_LOG_ERR("Can not create a module log domain.");
1063 return 0;
1064 }
1065
1066 /* store it for later use */
1067 func = pfunc;
1068 /* now to override methods */
1069#define ORD(f) EVAS_API_OVERRIDE(f, &func, evas_engine_sdl16_)
1070 ORD(info);
1071 ORD(info_free);
1072 ORD(setup);
1073 ORD(canvas_alpha_get);
1074 ORD(output_free);
1075 ORD(output_resize);
1076 ORD(output_tile_size_set);
1077 ORD(output_redraws_rect_add);
1078 ORD(output_redraws_rect_del);
1079 ORD(output_redraws_clear);
1080 ORD(output_redraws_next_update_get);
1081 ORD(output_redraws_next_update_push);
1082 ORD(output_flush);
1083 ORD(output_idle_flush);
1084 ORD(image_load);
1085 ORD(image_alpha_get);
1086 ORD(image_size_get);
1087 ORD(image_colorspace_get);
1088 ORD(image_colorspace_set);
1089 ORD(image_new_from_copied_data);
1090 ORD(image_new_from_data);
1091 ORD(image_free);
1092 ORD(image_size_set);
1093 ORD(image_dirty_region);
1094 ORD(image_data_get);
1095 ORD(image_data_put);
1096 ORD(image_data_preload_request);
1097 ORD(image_data_preload_cancel);
1098 ORD(image_alpha_set);
1099 ORD(image_border_set);
1100 ORD(image_border_get);
1101 ORD(image_draw);
1102 ORD(image_map_draw);
1103 ORD(image_cache_flush);
1104 ORD(image_cache_set);
1105 ORD(image_cache_get);
1106 ORD(image_comment_get);
1107 ORD(image_format_get);
1108 ORD(image_stride_get);
1109 ORD(font_draw);
1110 ORD(line_draw);
1111 ORD(rectangle_draw);
1112 ORD(polygon_draw);
1113
1114 ORD(image_scale_hint_set);
1115 ORD(image_scale_hint_get);
1116
1117 /* now advertise out own api */
1118 em->functions = (void *)(&func);
1119 return 1;
1120}
1121
1122static void
1123module_close(Evas_Module *em __UNUSED__)
1124{
1125 eina_log_domain_unregister(_evas_engine_soft16_sdl_log_dom);
1126}
1127
1128static Evas_Module_Api evas_modapi =
1129{
1130 EVAS_MODULE_API_VERSION,
1131 "software_16_sdl",
1132 "none",
1133 {
1134 module_open,
1135 module_close
1136 }
1137};
1138
1139EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_16_sdl);
1140
1141#ifndef EVAS_STATIC_BUILD_SOFTWARE_SDL
1142EVAS_EINA_MODULE_DEFINE(engine, software_16_sdl);
1143#endif
1144
1145static Engine_Image_Entry*
1146_sdl16_image_alloc(void)
1147{
1148 SDL_Engine_Image_Entry *new;
1149
1150 new = calloc(1, sizeof (SDL_Engine_Image_Entry));
1151
1152 return (Engine_Image_Entry *) new;
1153}
1154
1155static void
1156_sdl16_image_delete(Engine_Image_Entry *eim)
1157{
1158 free(eim);
1159}
1160
1161static int
1162_sdl16_image_constructor(Engine_Image_Entry *ie, void* data __UNUSED__)
1163{
1164 SDL_Surface *sdl = NULL;
1165 SDL_Engine_Image_Entry *eim = (SDL_Engine_Image_Entry *) ie;
1166 Soft16_Image *im;
1167
1168 im = (Soft16_Image *) ie->src;
1169
1170 if (im)
1171 {
1172 evas_cache_image_load_data(&im->cache_entry);
1173
1174 if (im->pixels)
1175 {
1176 /* FIXME: Take care of CSPACE */
1177 sdl = SDL_CreateRGBSurfaceFrom(im->pixels,
1178 ie->w, ie->h,
1179 16, ie->w * 2,
1180 RMASK565, GMASK565, BMASK565, AMASK565);
1181 eim->surface = sdl;
1182 eim->flags.engine_surface = 0;
1183 }
1184 }
1185
1186 return EVAS_LOAD_ERROR_NONE;
1187}
1188
1189static void
1190_sdl16_image_destructor(Engine_Image_Entry *eim)
1191{
1192 SDL_Engine_Image_Entry *seie = (SDL_Engine_Image_Entry *) eim;
1193
1194 if (seie->surface && !seie->flags.engine_surface)
1195 SDL_FreeSurface(seie->surface);
1196 seie->surface = NULL;
1197}
1198
1199static void
1200_sdl16_image_dirty_region(Engine_Image_Entry *eim, unsigned int x, unsigned int y, unsigned int w, unsigned int h)
1201{
1202 SDL_Engine_Image_Entry *dst;
1203 RGBA_Image *im;
1204
1205 dst = (SDL_Engine_Image_Entry *) eim;
1206
1207 SDL_UpdateRect(dst->surface, x, y, w, h);
1208
1209 im = (RGBA_Image *)eim->src;
1210 im->flags |= RGBA_IMAGE_IS_DIRTY;
1211}
1212
1213static int
1214_sdl16_image_dirty(Engine_Image_Entry *dst, const Engine_Image_Entry *src __UNUSED__)
1215{
1216 SDL_Engine_Image_Entry *eim = (SDL_Engine_Image_Entry *) dst;
1217 SDL_Surface *sdl = NULL;
1218 Soft16_Image *im;
1219
1220 im = (Soft16_Image *) dst->src;
1221
1222 /* FIXME: Take care of CSPACE */
1223 sdl = SDL_CreateRGBSurfaceFrom(im->pixels,
1224 dst->w, dst->h,
1225 16, dst->w * 2,
1226 RMASK565, GMASK565, BMASK565, AMASK565);
1227 eim->surface = sdl;
1228 eim->flags.engine_surface = 0;
1229
1230 return 0;
1231}
1232
1233static int
1234_sdl16_image_size_set(Engine_Image_Entry *dst, const Engine_Image_Entry *src __UNUSED__)
1235{
1236 SDL_Engine_Image_Entry *eim = (SDL_Engine_Image_Entry *) dst;
1237 SDL_Surface *sdl;
1238 Soft16_Image *im;
1239
1240 im = (Soft16_Image *) dst->src;
1241
1242 /* FIXME: handle im == NULL */
1243 sdl = SDL_CreateRGBSurfaceFrom(im->pixels,
1244 dst->w, dst->h,
1245 16, dst->w * 2,
1246 RMASK565, GMASK565, BMASK565, AMASK565);
1247
1248 eim->surface = sdl;
1249
1250 return 0;
1251}
1252
1253static int
1254_sdl16_image_update_data(Engine_Image_Entry* dst, void* engine_data)
1255{
1256 SDL_Engine_Image_Entry *eim = (SDL_Engine_Image_Entry *) dst;
1257 SDL_Surface *sdl = NULL;
1258 Soft16_Image *im;
1259
1260 im = (Soft16_Image *) dst->src;
1261
1262 if (engine_data)
1263 {
1264 sdl = engine_data;
1265
1266 if (im)
1267 {
1268 im->pixels = sdl->pixels;
1269 im->stride = sdl->pitch / 2;
1270 im->flags.free_pixels = 0;
1271/* im->alpha = calloc(1, sizeof (DATA8) * _calc_stride(sdl->w) * sdl->h); */
1272/* im->flags.free_alpha = 0; */
1273/* im->flags.have_alpha = 1; */
1274 im->alpha = NULL;
1275 im->flags.free_alpha = 0;
1276 im->cache_entry.flags.alpha = 0;
1277
1278 dst->src->w = sdl->w;
1279 dst->src->h = sdl->h;
1280 }
1281 dst->w = sdl->w;
1282 dst->h = sdl->h;
1283 }
1284 else
1285 {
1286 SDL_FreeSurface(eim->surface);
1287 /* FIXME: Take care of CSPACE */
1288 sdl = SDL_CreateRGBSurfaceFrom(im->pixels,
1289 dst->w, dst->h,
1290 16, dst->w * 2,
1291 RMASK565, GMASK565, BMASK565, AMASK565);
1292 }
1293
1294 eim->surface = sdl;
1295
1296 return 0;
1297}
1298
1299static void
1300_sdl16_image_load(Engine_Image_Entry *eim, const Image_Entry* ie_im)
1301{
1302 SDL_Engine_Image_Entry *load = (SDL_Engine_Image_Entry *) eim;
1303 SDL_Surface *sdl;
1304
1305 if (!load->surface)
1306 {
1307 Soft16_Image *im;
1308
1309 im = (Soft16_Image *) ie_im;
1310
1311 sdl = SDL_CreateRGBSurfaceFrom(im->pixels,
1312 eim->w, eim->h,
1313 16, eim->w * 2,
1314 RMASK565, GMASK565, BMASK565, AMASK565);
1315 load->surface = sdl;
1316 }
1317}
1318
1319static int
1320_sdl16_image_mem_size_get(Engine_Image_Entry *eim)
1321{
1322 SDL_Engine_Image_Entry *seie = (SDL_Engine_Image_Entry *) eim;
1323 int size = 0;
1324
1325 /* FIXME: Count surface size. */
1326 if (seie->surface)
1327 size = sizeof (SDL_Surface) + sizeof (SDL_PixelFormat);
1328
1329 return size;
1330}
1331
1332#ifdef DEBUG_SDL
1333static void
1334_sdl16_image_debug(const char* context, Engine_Image_Entry* im)
1335{
1336}
1337#endif
diff --git a/libraries/evas/src/modules/engines/software_16_sdl/evas_engine.h b/libraries/evas/src/modules/engines/software_16_sdl/evas_engine.h
new file mode 100644
index 0000000..a1b0ee0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_sdl/evas_engine.h
@@ -0,0 +1,79 @@
1#ifndef EVAS_ENGINE_SDL_16_H
2#define EVAS_ENGINE_SDL_16_H
3
4#include "evas_common.h"
5#include "evas_private.h"
6#include "evas_common_soft16.h"
7#include "Evas_Engine_SDL_16.h"
8extern int _evas_engine_soft16_sdl_log_dom ;
9#ifdef ERR
10# undef ERR
11#endif
12#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_soft16_sdl_log_dom, __VA_ARGS__)
13
14#ifdef DBG
15# undef DBG
16#endif
17#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_soft16_sdl_log_dom, __VA_ARGS__)
18
19#ifdef INF
20# undef INF
21#endif
22#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_soft16_sdl_log_dom, __VA_ARGS__)
23
24#ifdef WRN
25# undef WRN
26#endif
27#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_soft16_sdl_log_dom, __VA_ARGS__)
28
29#ifdef CRIT
30# undef CRIT
31#endif
32#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_soft16_sdl_log_dom, __VA_ARGS__)
33
34typedef struct _SDL_Engine_Image_Entry SDL_Engine_Image_Entry;
35struct _SDL_Engine_Image_Entry
36{
37 Engine_Image_Entry cache_entry;
38
39 SDL_Surface *surface;
40
41 struct
42 {
43 unsigned int engine_surface : 1;
44 } flags;
45};
46
47
48typedef struct _Render_Engine Render_Engine;
49struct _Render_Engine
50{
51 SDL_Engine_Image_Entry *soft16_engine_image;
52
53 Evas_Cache_Engine_Image *cache;
54
55 Soft16_Image *tmp_out;
56
57 int w;
58 int h;
59 int rot;
60
61 Tilebuf *tb;
62 Tilebuf_Rect *rects;
63 Tilebuf_Rect *cur_rect;
64
65 SDL_Rect *update_rects;
66 int update_rects_count;
67 int update_rects_limit;
68
69 struct
70 {
71 unsigned int fullscreen : 1;
72 unsigned int noframe : 1;
73 unsigned int alpha : 1;
74 unsigned int hwsurface : 1;
75 unsigned int end : 1;
76 } flags;
77};
78
79#endif
diff --git a/libraries/evas/src/modules/engines/software_16_wince/Evas_Engine_Software_16_WinCE.h b/libraries/evas/src/modules/engines/software_16_wince/Evas_Engine_Software_16_WinCE.h
new file mode 100644
index 0000000..e94b7c2
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_wince/Evas_Engine_Software_16_WinCE.h
@@ -0,0 +1,35 @@
1#ifndef __EVAS_ENGINE_SOFTWARE_16_WINCE_H__
2#define __EVAS_ENGINE_SOFTWARE_16_WINCE_H__
3
4
5#include <windows.h>
6
7
8typedef struct _Evas_Engine_Info_Software_16_WinCE Evas_Engine_Info_Software_16_WinCE;
9
10struct _Evas_Engine_Info_Software_16_WinCE
11{
12 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
13 /* at you and make nasty noises */
14 Evas_Engine_Info magic;
15
16 struct {
17 HWND window;
18 int width;
19 int height;
20 int backend; /* 0: auto, 1: raw, 2: gapi, 3: ddraw, 4: gdi */
21 int rotation;
22 unsigned int fullscreen : 1;
23 } info;
24 /* engine specific function calls to query stuff about messages */
25 struct {
26 int (*suspend) (int backend);
27 int (*resume) (int backend);
28 } func;
29
30 /* non-blocking or blocking mode */
31 Evas_Engine_Render_Mode render_mode;
32};
33
34
35#endif /* __EVAS_ENGINE_SOFTWARE_16_WINCE_H__ */
diff --git a/libraries/evas/src/modules/engines/software_16_wince/Makefile.am b/libraries/evas/src/modules/engines/software_16_wince/Makefile.am
new file mode 100644
index 0000000..7f0c666
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_wince/Makefile.am
@@ -0,0 +1,52 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9-I$(top_srcdir)/src/modules/engines/software_16 \
10@EINA_CFLAGS@ \
11@FREETYPE_CFLAGS@ \
12@PIXMAN_CFLAGS@ \
13@evas_engine_software_16_wince_cflags@
14
15if BUILD_ENGINE_SOFTWARE_16_WINCE
16
17SOFTWARE_16_WINCE_SOURCE = \
18evas_engine.c \
19evas_wince_ddraw_buffer.cpp \
20evas_wince_fb_buffer.c \
21evas_wince_gapi_buffer.c \
22evas_wince_gdi_buffer.c
23
24SOFTWARE_16_WINCE_LIBADD = @evas_engine_software_16_wince_libs@
25
26
27includes_HEADERS = Evas_Engine_Software_16_WinCE.h
28includesdir = $(includedir)/evas-@VMAJ@
29
30if !EVAS_STATIC_BUILD_SOFTWARE_16_WINCE
31
32pkgdir = $(libdir)/evas/modules/engines/software_16_wince/$(MODULE_ARCH)
33pkg_LTLIBRARIES = module.la
34
35module_la_SOURCES = $(SOFTWARE_16_WINCE_SOURCE)
36module_la_CFLAGS = @WIN32_CFLAGS@
37module_la_CXXFLAGS = -fno-rtti -fno-exceptions
38module_la_LIBADD = @EINA_LIBS@ $(top_builddir)/src/lib/libevas.la $(SOFTWARE_16_WINCE_LIBADD)
39module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
40module_la_LIBTOOLFLAGS = --tag=disable-static
41
42else
43
44noinst_LTLIBRARIES = libevas_engine_software_16_wince.la
45
46libevas_engine_software_16_wince_la_SOURCES = $(SOFTWARE_16_WINCE_SOURCE)
47libevas_engine_software_16_wince_la_LIBADD = $(SOFTWARE_16_WINCE_LIBADD)
48
49endif
50endif
51
52EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/software_16_wince/Makefile.in b/libraries/evas/src/modules/engines/software_16_wince/Makefile.in
new file mode 100644
index 0000000..571891e
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_wince/Makefile.in
@@ -0,0 +1,898 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/software_16_wince
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84am__DEPENDENCIES_1 =
85@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_TRUE@libevas_engine_software_16_wince_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_software_16_wince_la_SOURCES_DIST = evas_engine.c \
87 evas_wince_ddraw_buffer.cpp evas_wince_fb_buffer.c \
88 evas_wince_gapi_buffer.c evas_wince_gdi_buffer.c
89@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@am__objects_1 = evas_engine.lo \
90@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@ evas_wince_ddraw_buffer.lo \
91@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@ evas_wince_fb_buffer.lo \
92@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@ evas_wince_gapi_buffer.lo \
93@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@ evas_wince_gdi_buffer.lo
94@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_TRUE@am_libevas_engine_software_16_wince_la_OBJECTS = $(am__objects_1)
95libevas_engine_software_16_wince_la_OBJECTS = \
96 $(am_libevas_engine_software_16_wince_la_OBJECTS)
97AM_V_lt = $(am__v_lt_$(V))
98am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
99am__v_lt_0 = --silent
100@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_TRUE@am_libevas_engine_software_16_wince_la_rpath =
101@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la \
102@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@ $(am__DEPENDENCIES_1)
103am__module_la_SOURCES_DIST = evas_engine.c evas_wince_ddraw_buffer.cpp \
104 evas_wince_fb_buffer.c evas_wince_gapi_buffer.c \
105 evas_wince_gdi_buffer.c
106@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@am__objects_2 = \
107@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@ module_la-evas_engine.lo \
108@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@ module_la-evas_wince_ddraw_buffer.lo \
109@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@ module_la-evas_wince_fb_buffer.lo \
110@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@ module_la-evas_wince_gapi_buffer.lo \
111@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@ module_la-evas_wince_gdi_buffer.lo
112@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@am_module_la_OBJECTS = $(am__objects_2)
113module_la_OBJECTS = $(am_module_la_OBJECTS)
114module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
115 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
116 $(module_la_CXXFLAGS) $(CXXFLAGS) $(module_la_LDFLAGS) \
117 $(LDFLAGS) -o $@
118@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@am_module_la_rpath = -rpath \
119@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@ $(pkgdir)
120DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
121depcomp = $(SHELL) $(top_srcdir)/depcomp
122am__depfiles_maybe = depfiles
123am__mv = mv -f
124COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
125 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
126LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
127 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
128 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
129 $(AM_CFLAGS) $(CFLAGS)
130AM_V_CC = $(am__v_CC_$(V))
131am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
132am__v_CC_0 = @echo " CC " $@;
133AM_V_at = $(am__v_at_$(V))
134am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
135am__v_at_0 = @
136CCLD = $(CC)
137LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
138 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
139 $(AM_LDFLAGS) $(LDFLAGS) -o $@
140AM_V_CCLD = $(am__v_CCLD_$(V))
141am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
142am__v_CCLD_0 = @echo " CCLD " $@;
143CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
144 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
145LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
146 $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
147 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
148 $(AM_CXXFLAGS) $(CXXFLAGS)
149AM_V_CXX = $(am__v_CXX_$(V))
150am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
151am__v_CXX_0 = @echo " CXX " $@;
152CXXLD = $(CXX)
153CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
154 $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
155 $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
156AM_V_CXXLD = $(am__v_CXXLD_$(V))
157am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
158am__v_CXXLD_0 = @echo " CXXLD " $@;
159AM_V_GEN = $(am__v_GEN_$(V))
160am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
161am__v_GEN_0 = @echo " GEN " $@;
162SOURCES = $(libevas_engine_software_16_wince_la_SOURCES) \
163 $(module_la_SOURCES)
164DIST_SOURCES = \
165 $(am__libevas_engine_software_16_wince_la_SOURCES_DIST) \
166 $(am__module_la_SOURCES_DIST)
167am__includes_HEADERS_DIST = Evas_Engine_Software_16_WinCE.h
168HEADERS = $(includes_HEADERS)
169ETAGS = etags
170CTAGS = ctags
171DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
172ACLOCAL = @ACLOCAL@
173ALLOCA = @ALLOCA@
174AMTAR = @AMTAR@
175AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
176AR = @AR@
177AS = @AS@
178AUTOCONF = @AUTOCONF@
179AUTOHEADER = @AUTOHEADER@
180AUTOMAKE = @AUTOMAKE@
181AWK = @AWK@
182CC = @CC@
183CCDEPMODE = @CCDEPMODE@
184CFLAGS = @CFLAGS@
185CHECK_CFLAGS = @CHECK_CFLAGS@
186CHECK_LIBS = @CHECK_LIBS@
187CPP = @CPP@
188CPPFLAGS = @CPPFLAGS@
189CXX = @CXX@
190CXXCPP = @CXXCPP@
191CXXDEPMODE = @CXXDEPMODE@
192CXXFLAGS = @CXXFLAGS@
193CYGPATH_W = @CYGPATH_W@
194DEFS = @DEFS@
195DEPDIR = @DEPDIR@
196DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
197DIRECTFB_LIBS = @DIRECTFB_LIBS@
198DLLTOOL = @DLLTOOL@
199DSYMUTIL = @DSYMUTIL@
200DUMPBIN = @DUMPBIN@
201ECHO_C = @ECHO_C@
202ECHO_N = @ECHO_N@
203ECHO_T = @ECHO_T@
204ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
205ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
206EDB_CFLAGS = @EDB_CFLAGS@
207EDB_LIBS = @EDB_LIBS@
208EDJE_CFLAGS = @EDJE_CFLAGS@
209EDJE_LIBS = @EDJE_LIBS@
210EET_CFLAGS = @EET_CFLAGS@
211EET_LIBS = @EET_LIBS@
212EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
213EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
214EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
215EGREP = @EGREP@
216EINA_CFLAGS = @EINA_CFLAGS@
217EINA_LIBS = @EINA_LIBS@
218EVAS_CFLAGS = @EVAS_CFLAGS@
219EVAS_LIBS = @EVAS_LIBS@
220EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
221EVIL_CFLAGS = @EVIL_CFLAGS@
222EVIL_LIBS = @EVIL_LIBS@
223EXEEXT = @EXEEXT@
224FGREP = @FGREP@
225FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
226FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
227FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
228FREETYPE_LIBS = @FREETYPE_LIBS@
229FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
230FRIBIDI_LIBS = @FRIBIDI_LIBS@
231GL_EET_CFLAGS = @GL_EET_CFLAGS@
232GL_EET_LIBS = @GL_EET_LIBS@
233GREP = @GREP@
234HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
235HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
236INSTALL = @INSTALL@
237INSTALL_DATA = @INSTALL_DATA@
238INSTALL_PROGRAM = @INSTALL_PROGRAM@
239INSTALL_SCRIPT = @INSTALL_SCRIPT@
240INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
241LD = @LD@
242LDFLAGS = @LDFLAGS@
243LIBOBJS = @LIBOBJS@
244LIBS = @LIBS@
245LIBTOOL = @LIBTOOL@
246LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
247LINEBREAK_LIBS = @LINEBREAK_LIBS@
248LIPO = @LIPO@
249LN_S = @LN_S@
250LTLIBOBJS = @LTLIBOBJS@
251MAKEINFO = @MAKEINFO@
252MKDIR_P = @MKDIR_P@
253MODULE_ARCH = @MODULE_ARCH@
254NM = @NM@
255NMEDIT = @NMEDIT@
256OBJC = @OBJC@
257OBJCDEPMODE = @OBJCDEPMODE@
258OBJCFLAGS = @OBJCFLAGS@
259OBJDUMP = @OBJDUMP@
260OBJEXT = @OBJEXT@
261OTOOL = @OTOOL@
262OTOOL64 = @OTOOL64@
263PACKAGE = @PACKAGE@
264PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
265PACKAGE_NAME = @PACKAGE_NAME@
266PACKAGE_STRING = @PACKAGE_STRING@
267PACKAGE_TARNAME = @PACKAGE_TARNAME@
268PACKAGE_URL = @PACKAGE_URL@
269PACKAGE_VERSION = @PACKAGE_VERSION@
270PATH_SEPARATOR = @PATH_SEPARATOR@
271PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
272PIXMAN_LIBS = @PIXMAN_LIBS@
273PKG_CONFIG = @PKG_CONFIG@
274PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
275PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
276PNG_CFLAGS = @PNG_CFLAGS@
277PNG_LIBS = @PNG_LIBS@
278RANLIB = @RANLIB@
279SDL_CFLAGS = @SDL_CFLAGS@
280SDL_LIBS = @SDL_LIBS@
281SED = @SED@
282SET_MAKE = @SET_MAKE@
283SHELL = @SHELL@
284SHM_OPEN_LINK = @SHM_OPEN_LINK@
285STRIP = @STRIP@
286SVG_CFLAGS = @SVG_CFLAGS@
287SVG_LIBS = @SVG_LIBS@
288VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
289VALGRIND_LIBS = @VALGRIND_LIBS@
290VERSION = @VERSION@
291VMAJ = @VMAJ@
292WIN32_CFLAGS = @WIN32_CFLAGS@
293WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
294XCB_CFLAGS = @XCB_CFLAGS@
295XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
296XCB_GL_LIBS = @XCB_GL_LIBS@
297XCB_LIBS = @XCB_LIBS@
298XEXT_CFLAGS = @XEXT_CFLAGS@
299XEXT_LIBS = @XEXT_LIBS@
300XMKMF = @XMKMF@
301X_CFLAGS = @X_CFLAGS@
302X_EXTRA_LIBS = @X_EXTRA_LIBS@
303X_LIBS = @X_LIBS@
304X_PRE_LIBS = @X_PRE_LIBS@
305abs_builddir = @abs_builddir@
306abs_srcdir = @abs_srcdir@
307abs_top_builddir = @abs_top_builddir@
308abs_top_srcdir = @abs_top_srcdir@
309ac_ct_CC = @ac_ct_CC@
310ac_ct_CXX = @ac_ct_CXX@
311ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
312ac_ct_OBJC = @ac_ct_OBJC@
313altivec_cflags = @altivec_cflags@
314am__include = @am__include@
315am__leading_dot = @am__leading_dot@
316am__quote = @am__quote@
317am__tar = @am__tar@
318am__untar = @am__untar@
319bindir = @bindir@
320build = @build@
321build_alias = @build_alias@
322build_cpu = @build_cpu@
323build_os = @build_os@
324build_vendor = @build_vendor@
325builddir = @builddir@
326datadir = @datadir@
327datarootdir = @datarootdir@
328dlopen_libs = @dlopen_libs@
329docdir = @docdir@
330dvidir = @dvidir@
331edje_cc = @edje_cc@
332efl_doxygen = @efl_doxygen@
333efl_have_doxygen = @efl_have_doxygen@
334evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
335evas_engine_buffer_libs = @evas_engine_buffer_libs@
336evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
337evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
338evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
339evas_engine_directfb_libs = @evas_engine_directfb_libs@
340evas_engine_fb_cflags = @evas_engine_fb_cflags@
341evas_engine_fb_libs = @evas_engine_fb_libs@
342evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
343evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
344evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
345evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
346evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
347evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
348evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
349evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
350evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
351evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
352evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
353evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
354evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
355evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
356evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
357evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
358evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
359evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
360evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
361evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
362evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
363evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
364evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
365evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
366evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
367evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
368evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
369evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
370evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
371evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
372evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
373evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
374evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
375evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
376evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
377evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
378evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
379evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
380evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
381evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
382evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
383evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
384evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
385evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
386evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
387evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
388evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
389evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
390evas_image_loader_png_libs = @evas_image_loader_png_libs@
391evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
392evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
393evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
394evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
395evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
396evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
397evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
398evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
399evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
400evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
401evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
402evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
403exec_prefix = @exec_prefix@
404have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
405have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
406have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
407have_evas_engine_software_x11 = @have_evas_engine_software_x11@
408have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
409have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
410have_lcov = @have_lcov@
411host = @host@
412host_alias = @host_alias@
413host_cpu = @host_cpu@
414host_os = @host_os@
415host_vendor = @host_vendor@
416htmldir = @htmldir@
417includedir = @includedir@
418infodir = @infodir@
419install_sh = @install_sh@
420libdir = @libdir@
421libexecdir = @libexecdir@
422localedir = @localedir@
423localstatedir = @localstatedir@
424lt_ECHO = @lt_ECHO@
425lt_enable_auto_import = @lt_enable_auto_import@
426mandir = @mandir@
427mkdir_p = @mkdir_p@
428oldincludedir = @oldincludedir@
429pdfdir = @pdfdir@
430pkgconfig_requires_private = @pkgconfig_requires_private@
431prefix = @prefix@
432program_transform_name = @program_transform_name@
433psdir = @psdir@
434pthread_cflags = @pthread_cflags@
435pthread_libs = @pthread_libs@
436release_info = @release_info@
437requirement_evas = @requirement_evas@
438sbindir = @sbindir@
439sharedstatedir = @sharedstatedir@
440srcdir = @srcdir@
441sysconfdir = @sysconfdir@
442target_alias = @target_alias@
443top_build_prefix = @top_build_prefix@
444top_builddir = @top_builddir@
445top_srcdir = @top_srcdir@
446version_info = @version_info@
447MAINTAINERCLEANFILES = Makefile.in
448AM_CPPFLAGS = \
449-I. \
450-I$(top_srcdir)/src/lib \
451-I$(top_srcdir)/src/lib/include \
452-I$(top_srcdir)/src/modules/engines \
453-I$(top_srcdir)/src/modules/engines/software_16 \
454@EINA_CFLAGS@ \
455@FREETYPE_CFLAGS@ \
456@PIXMAN_CFLAGS@ \
457@evas_engine_software_16_wince_cflags@
458
459@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@SOFTWARE_16_WINCE_SOURCE = \
460@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@evas_engine.c \
461@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@evas_wince_ddraw_buffer.cpp \
462@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@evas_wince_fb_buffer.c \
463@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@evas_wince_gapi_buffer.c \
464@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@evas_wince_gdi_buffer.c
465
466@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@SOFTWARE_16_WINCE_LIBADD = @evas_engine_software_16_wince_libs@
467@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@includes_HEADERS = Evas_Engine_Software_16_WinCE.h
468@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@includesdir = $(includedir)/evas-@VMAJ@
469@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_16_wince/$(MODULE_ARCH)
470@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@pkg_LTLIBRARIES = module.la
471@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@module_la_SOURCES = $(SOFTWARE_16_WINCE_SOURCE)
472@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@module_la_CFLAGS = @WIN32_CFLAGS@
473@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@module_la_CXXFLAGS = -fno-rtti -fno-exceptions
474@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@module_la_LIBADD = @EINA_LIBS@ $(top_builddir)/src/lib/libevas.la $(SOFTWARE_16_WINCE_LIBADD)
475@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
476@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
477@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_TRUE@noinst_LTLIBRARIES = libevas_engine_software_16_wince.la
478@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_TRUE@libevas_engine_software_16_wince_la_SOURCES = $(SOFTWARE_16_WINCE_SOURCE)
479@BUILD_ENGINE_SOFTWARE_16_WINCE_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_WINCE_TRUE@libevas_engine_software_16_wince_la_LIBADD = $(SOFTWARE_16_WINCE_LIBADD)
480EXTRA_DIST = evas_engine.h
481all: all-am
482
483.SUFFIXES:
484.SUFFIXES: .c .cpp .lo .o .obj
485$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
486 @for dep in $?; do \
487 case '$(am__configure_deps)' in \
488 *$$dep*) \
489 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
490 && { if test -f $@; then exit 0; else break; fi; }; \
491 exit 1;; \
492 esac; \
493 done; \
494 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_16_wince/Makefile'; \
495 $(am__cd) $(top_srcdir) && \
496 $(AUTOMAKE) --gnu src/modules/engines/software_16_wince/Makefile
497.PRECIOUS: Makefile
498Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
499 @case '$?' in \
500 *config.status*) \
501 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
502 *) \
503 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
504 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
505 esac;
506
507$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
508 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
509
510$(top_srcdir)/configure: $(am__configure_deps)
511 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
512$(ACLOCAL_M4): $(am__aclocal_m4_deps)
513 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
514$(am__aclocal_m4_deps):
515
516clean-noinstLTLIBRARIES:
517 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
518 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
519 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
520 test "$$dir" != "$$p" || dir=.; \
521 echo "rm -f \"$${dir}/so_locations\""; \
522 rm -f "$${dir}/so_locations"; \
523 done
524install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
525 @$(NORMAL_INSTALL)
526 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
527 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
528 list2=; for p in $$list; do \
529 if test -f $$p; then \
530 list2="$$list2 $$p"; \
531 else :; fi; \
532 done; \
533 test -z "$$list2" || { \
534 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
535 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
536 }
537
538uninstall-pkgLTLIBRARIES:
539 @$(NORMAL_UNINSTALL)
540 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
541 for p in $$list; do \
542 $(am__strip_dir) \
543 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
544 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
545 done
546
547clean-pkgLTLIBRARIES:
548 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
549 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
550 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
551 test "$$dir" != "$$p" || dir=.; \
552 echo "rm -f \"$${dir}/so_locations\""; \
553 rm -f "$${dir}/so_locations"; \
554 done
555libevas_engine_software_16_wince.la: $(libevas_engine_software_16_wince_la_OBJECTS) $(libevas_engine_software_16_wince_la_DEPENDENCIES)
556 $(AM_V_CXXLD)$(CXXLINK) $(am_libevas_engine_software_16_wince_la_rpath) $(libevas_engine_software_16_wince_la_OBJECTS) $(libevas_engine_software_16_wince_la_LIBADD) $(LIBS)
557module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
558 $(AM_V_CXXLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
559
560mostlyclean-compile:
561 -rm -f *.$(OBJEXT)
562
563distclean-compile:
564 -rm -f *.tab.c
565
566@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
567@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_wince_ddraw_buffer.Plo@am__quote@
568@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_wince_fb_buffer.Plo@am__quote@
569@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_wince_gapi_buffer.Plo@am__quote@
570@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_wince_gdi_buffer.Plo@am__quote@
571@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
572@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_wince_ddraw_buffer.Plo@am__quote@
573@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_wince_fb_buffer.Plo@am__quote@
574@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_wince_gapi_buffer.Plo@am__quote@
575@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_wince_gdi_buffer.Plo@am__quote@
576
577.c.o:
578@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
579@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
580@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
581@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
582@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
583@am__fastdepCC_FALSE@ $(COMPILE) -c $<
584
585.c.obj:
586@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
587@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
588@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
589@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
590@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
591@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
592
593.c.lo:
594@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
595@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
596@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
597@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
598@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
599@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
600
601module_la-evas_engine.lo: evas_engine.c
602@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
603@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
604@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
605@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
606@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
607@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
608
609module_la-evas_wince_fb_buffer.lo: evas_wince_fb_buffer.c
610@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -MT module_la-evas_wince_fb_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_wince_fb_buffer.Tpo -c -o module_la-evas_wince_fb_buffer.lo `test -f 'evas_wince_fb_buffer.c' || echo '$(srcdir)/'`evas_wince_fb_buffer.c
611@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_wince_fb_buffer.Tpo $(DEPDIR)/module_la-evas_wince_fb_buffer.Plo
612@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
613@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_wince_fb_buffer.c' object='module_la-evas_wince_fb_buffer.lo' libtool=yes @AMDEPBACKSLASH@
614@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
615@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -c -o module_la-evas_wince_fb_buffer.lo `test -f 'evas_wince_fb_buffer.c' || echo '$(srcdir)/'`evas_wince_fb_buffer.c
616
617module_la-evas_wince_gapi_buffer.lo: evas_wince_gapi_buffer.c
618@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -MT module_la-evas_wince_gapi_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_wince_gapi_buffer.Tpo -c -o module_la-evas_wince_gapi_buffer.lo `test -f 'evas_wince_gapi_buffer.c' || echo '$(srcdir)/'`evas_wince_gapi_buffer.c
619@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_wince_gapi_buffer.Tpo $(DEPDIR)/module_la-evas_wince_gapi_buffer.Plo
620@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
621@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_wince_gapi_buffer.c' object='module_la-evas_wince_gapi_buffer.lo' libtool=yes @AMDEPBACKSLASH@
622@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
623@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -c -o module_la-evas_wince_gapi_buffer.lo `test -f 'evas_wince_gapi_buffer.c' || echo '$(srcdir)/'`evas_wince_gapi_buffer.c
624
625module_la-evas_wince_gdi_buffer.lo: evas_wince_gdi_buffer.c
626@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -MT module_la-evas_wince_gdi_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_wince_gdi_buffer.Tpo -c -o module_la-evas_wince_gdi_buffer.lo `test -f 'evas_wince_gdi_buffer.c' || echo '$(srcdir)/'`evas_wince_gdi_buffer.c
627@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_wince_gdi_buffer.Tpo $(DEPDIR)/module_la-evas_wince_gdi_buffer.Plo
628@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
629@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_wince_gdi_buffer.c' object='module_la-evas_wince_gdi_buffer.lo' libtool=yes @AMDEPBACKSLASH@
630@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
631@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -c -o module_la-evas_wince_gdi_buffer.lo `test -f 'evas_wince_gdi_buffer.c' || echo '$(srcdir)/'`evas_wince_gdi_buffer.c
632
633.cpp.o:
634@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
635@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
636@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
637@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
638@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
639@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
640
641.cpp.obj:
642@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
643@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
644@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
645@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
646@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
647@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
648
649.cpp.lo:
650@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
651@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
652@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
653@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
654@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
655@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
656
657module_la-evas_wince_ddraw_buffer.lo: evas_wince_ddraw_buffer.cpp
658@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_wince_ddraw_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_wince_ddraw_buffer.Tpo -c -o module_la-evas_wince_ddraw_buffer.lo `test -f 'evas_wince_ddraw_buffer.cpp' || echo '$(srcdir)/'`evas_wince_ddraw_buffer.cpp
659@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_wince_ddraw_buffer.Tpo $(DEPDIR)/module_la-evas_wince_ddraw_buffer.Plo
660@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
661@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_wince_ddraw_buffer.cpp' object='module_la-evas_wince_ddraw_buffer.lo' libtool=yes @AMDEPBACKSLASH@
662@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
663@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_wince_ddraw_buffer.lo `test -f 'evas_wince_ddraw_buffer.cpp' || echo '$(srcdir)/'`evas_wince_ddraw_buffer.cpp
664
665mostlyclean-libtool:
666 -rm -f *.lo
667
668clean-libtool:
669 -rm -rf .libs _libs
670install-includesHEADERS: $(includes_HEADERS)
671 @$(NORMAL_INSTALL)
672 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
673 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
674 for p in $$list; do \
675 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
676 echo "$$d$$p"; \
677 done | $(am__base_list) | \
678 while read files; do \
679 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
680 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
681 done
682
683uninstall-includesHEADERS:
684 @$(NORMAL_UNINSTALL)
685 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
686 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
687 test -n "$$files" || exit 0; \
688 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
689 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
690
691ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
692 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
693 unique=`for i in $$list; do \
694 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
695 done | \
696 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
697 END { if (nonempty) { for (i in files) print i; }; }'`; \
698 mkid -fID $$unique
699tags: TAGS
700
701TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
702 $(TAGS_FILES) $(LISP)
703 set x; \
704 here=`pwd`; \
705 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
706 unique=`for i in $$list; do \
707 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
708 done | \
709 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
710 END { if (nonempty) { for (i in files) print i; }; }'`; \
711 shift; \
712 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
713 test -n "$$unique" || unique=$$empty_fix; \
714 if test $$# -gt 0; then \
715 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
716 "$$@" $$unique; \
717 else \
718 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
719 $$unique; \
720 fi; \
721 fi
722ctags: CTAGS
723CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
724 $(TAGS_FILES) $(LISP)
725 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
726 unique=`for i in $$list; do \
727 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
728 done | \
729 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
730 END { if (nonempty) { for (i in files) print i; }; }'`; \
731 test -z "$(CTAGS_ARGS)$$unique" \
732 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
733 $$unique
734
735GTAGS:
736 here=`$(am__cd) $(top_builddir) && pwd` \
737 && $(am__cd) $(top_srcdir) \
738 && gtags -i $(GTAGS_ARGS) "$$here"
739
740distclean-tags:
741 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
742
743distdir: $(DISTFILES)
744 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
745 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
746 list='$(DISTFILES)'; \
747 dist_files=`for file in $$list; do echo $$file; done | \
748 sed -e "s|^$$srcdirstrip/||;t" \
749 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
750 case $$dist_files in \
751 */*) $(MKDIR_P) `echo "$$dist_files" | \
752 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
753 sort -u` ;; \
754 esac; \
755 for file in $$dist_files; do \
756 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
757 if test -d $$d/$$file; then \
758 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
759 if test -d "$(distdir)/$$file"; then \
760 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
761 fi; \
762 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
763 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
764 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
765 fi; \
766 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
767 else \
768 test -f "$(distdir)/$$file" \
769 || cp -p $$d/$$file "$(distdir)/$$file" \
770 || exit 1; \
771 fi; \
772 done
773check-am: all-am
774check: check-am
775all-am: Makefile $(LTLIBRARIES) $(HEADERS)
776installdirs:
777 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
778 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
779 done
780install: install-am
781install-exec: install-exec-am
782install-data: install-data-am
783uninstall: uninstall-am
784
785install-am: all-am
786 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
787
788installcheck: installcheck-am
789install-strip:
790 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
791 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
792 `test -z '$(STRIP)' || \
793 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
794mostlyclean-generic:
795
796clean-generic:
797
798distclean-generic:
799 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
800 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
801
802maintainer-clean-generic:
803 @echo "This command is intended for maintainers to use"
804 @echo "it deletes files that may require special tools to rebuild."
805 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
806clean: clean-am
807
808clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
809 clean-pkgLTLIBRARIES mostlyclean-am
810
811distclean: distclean-am
812 -rm -rf ./$(DEPDIR)
813 -rm -f Makefile
814distclean-am: clean-am distclean-compile distclean-generic \
815 distclean-tags
816
817dvi: dvi-am
818
819dvi-am:
820
821html: html-am
822
823html-am:
824
825info: info-am
826
827info-am:
828
829install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
830
831install-dvi: install-dvi-am
832
833install-dvi-am:
834
835install-exec-am:
836
837install-html: install-html-am
838
839install-html-am:
840
841install-info: install-info-am
842
843install-info-am:
844
845install-man:
846
847install-pdf: install-pdf-am
848
849install-pdf-am:
850
851install-ps: install-ps-am
852
853install-ps-am:
854
855installcheck-am:
856
857maintainer-clean: maintainer-clean-am
858 -rm -rf ./$(DEPDIR)
859 -rm -f Makefile
860maintainer-clean-am: distclean-am maintainer-clean-generic
861
862mostlyclean: mostlyclean-am
863
864mostlyclean-am: mostlyclean-compile mostlyclean-generic \
865 mostlyclean-libtool
866
867pdf: pdf-am
868
869pdf-am:
870
871ps: ps-am
872
873ps-am:
874
875uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
876
877.MAKE: install-am install-strip
878
879.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
880 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
881 ctags distclean distclean-compile distclean-generic \
882 distclean-libtool distclean-tags distdir dvi dvi-am html \
883 html-am info info-am install install-am install-data \
884 install-data-am install-dvi install-dvi-am install-exec \
885 install-exec-am install-html install-html-am \
886 install-includesHEADERS install-info install-info-am \
887 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
888 install-ps install-ps-am install-strip installcheck \
889 installcheck-am installdirs maintainer-clean \
890 maintainer-clean-generic mostlyclean mostlyclean-compile \
891 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
892 tags uninstall uninstall-am uninstall-includesHEADERS \
893 uninstall-pkgLTLIBRARIES
894
895
896# Tell versions [3.59,3.63) of GNU make to not export all variables.
897# Otherwise a system limit (for SysV at least) may be exceeded.
898.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_16_wince/evas_engine.c b/libraries/evas/src/modules/engines/software_16_wince/evas_engine.c
new file mode 100644
index 0000000..74d56e6
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_wince/evas_engine.c
@@ -0,0 +1,770 @@
1#include "evas_common.h"
2#include "evas_private.h"
3#include "evas_engine.h"
4#include "Evas_Engine_Software_16_WinCE.h"
5#include "evas_common_soft16.h"
6
7int _evas_engine_soft16_wince_log_dom = -1;
8
9typedef enum
10{
11 EVAS_ENGINE_WINCE_FB,
12 EVAS_ENGINE_WINCE_GAPI,
13 EVAS_ENGINE_WINCE_DDRAW,
14 EVAS_ENGINE_WINCE_GDI
15} Evas_Engine_WinCE_Backend;
16
17
18/* function tables - filled in later (func and parent func) */
19static Evas_Func func, pfunc;
20
21/* engine struct data */
22typedef struct _Render_Engine Render_Engine;
23
24struct _Render_Engine
25{
26 Evas_Engine_WinCE_Backend backend; /* 1: raw, 2: gapi, 3: ddraw, 4: GDI */
27 void *backend_priv;
28 void (*backend_shutdown)(void *priv);
29 FB_Output_Buffer *(*backend_output_buffer_new)(void *priv,
30 int width,
31 int height);
32 void (*backend_output_buffer_free)(FB_Output_Buffer *fbob);
33 void (*backend_output_buffer_paste)(FB_Output_Buffer *fbob);
34 void (*backend_surface_resize)(FB_Output_Buffer *fbob);
35
36 int width;
37 int height;
38 int rotation;
39 Tilebuf *tb;
40 Tilebuf_Rect *rects;
41 Tilebuf_Rect *cur_rect;
42 FB_Output_Buffer *fbob;
43 Soft16_Image *tmp_out; /* used by indirect render, like rotation */
44 HRGN clip_rects;
45 unsigned char end : 1;
46};
47
48/* prototypes we will use here */
49
50static void *eng_info(Evas *e);
51static void eng_info_free(Evas *e, void *info);
52static int eng_setup(Evas *e, void *info);
53static void eng_output_free(void *data);
54static void eng_output_resize(void *data, int w, int h);
55static void eng_output_tile_size_set(void *data, int w, int h);
56static void eng_output_redraws_rect_add(void *data, int x, int y, int w, int h);
57static void eng_output_redraws_rect_del(void *data, int x, int y, int w, int h);
58static void eng_output_redraws_clear(void *data);
59static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
60static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
61static void eng_output_flush(void *data);
62static void eng_output_idle_flush(void *data);
63
64static int
65_suspend(int backend)
66{
67 switch (backend)
68 {
69 case 2: /* gapi */
70 return evas_software_wince_gapi_suspend();
71 default: /* other engines do not need it */
72 return 0;
73 }
74}
75
76static int
77_resume(int backend)
78{
79 switch (backend)
80 {
81 case 2: /* gapi */
82 return evas_software_wince_gapi_resume();
83 default: /* other engines do not need it */
84 return 0;
85 }
86}
87
88/* engine api this module provides */
89static void *
90eng_info(Evas *e)
91{
92 Evas_Engine_Info_Software_16_WinCE *info;
93 info = calloc(1, sizeof(Evas_Engine_Info_Software_16_WinCE));
94 if (!info) return NULL;
95 info->magic.magic = rand();
96 info->func.suspend = _suspend;
97 info->func.resume = _resume;
98 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
99 return info;
100 e = NULL;
101}
102
103static void
104eng_info_free(Evas *e, void *info)
105{
106 Evas_Engine_Info_Software_16_WinCE *in;
107 in = (Evas_Engine_Info_Software_16_WinCE *)info;
108 free(in);
109}
110
111static void
112_tmp_out_alloc(Render_Engine *re)
113{
114 Tilebuf_Rect *r;
115 int w = 0, h = 0;
116
117 EINA_INLIST_FOREACH(re->rects, r)
118 {
119 if (r->w > w) w = r->w;
120 if (r->h > h) h = r->h;
121 }
122
123 if (re->tmp_out)
124 {
125 if ((re->tmp_out->cache_entry.w < w) || (re->tmp_out->cache_entry.h < h))
126 {
127 evas_cache_image_drop(&re->tmp_out->cache_entry);
128 re->tmp_out = NULL;
129 }
130 }
131
132 if (!re->tmp_out)
133 {
134 Soft16_Image *im;
135
136 im = (Soft16_Image *) evas_cache_image_empty(evas_common_soft16_image_cache_get());
137 im->cache_entry.flags.alpha = 0;
138 evas_cache_image_surface_alloc(&im->cache_entry, w, h);
139
140 re->tmp_out = im;
141 }
142}
143
144
145static int
146eng_setup(Evas *e, void *in)
147{
148 Render_Engine *re;
149 Evas_Engine_Info_Software_16_WinCE *info;
150
151 info = (Evas_Engine_Info_Software_16_WinCE *)in;
152 if (!e->engine.data.output)
153 {
154 /* do common routine init - we wil at least use it for core
155 * image loading and font loading/glyph rendering & placement */
156 evas_common_cpu_init();
157
158 evas_common_blend_init();
159 evas_common_image_init();
160 evas_common_convert_init();
161 evas_common_scale_init();
162 evas_common_rectangle_init();
163 evas_common_polygon_init();
164 evas_common_line_init();
165 evas_common_font_init();
166 evas_common_draw_init();
167 evas_common_tilebuf_init();
168 evas_common_soft16_image_init();
169
170 /* render engine specific data */
171 re = calloc(1, sizeof(Render_Engine));
172 if (!re)
173 return 0;
174 e->engine.data.output = re;
175
176 switch(info->info.backend)
177 {
178 case 1: /* FB */
179 re->backend = EVAS_ENGINE_WINCE_FB;
180 re->backend_priv = evas_software_wince_fb_init(info->info.window, info->info.width, info->info.height);
181 if (!re->backend_priv)
182 {
183 free(re);
184 return 0;
185 }
186 re->backend_shutdown = evas_software_wince_fb_shutdown;
187 re->backend_output_buffer_new = evas_software_wince_fb_output_buffer_new;
188 re->backend_output_buffer_free = evas_software_wince_fb_output_buffer_free;
189 re->backend_output_buffer_paste = evas_software_wince_fb_output_buffer_paste;
190 re->backend_surface_resize = evas_software_wince_fb_surface_resize;
191 break;
192 case 2: /* GAPI */
193 re->backend = EVAS_ENGINE_WINCE_GAPI;
194 re->backend_priv = evas_software_wince_gapi_init(info->info.window, info->info.width, info->info.height);
195 if (!re->backend_priv)
196 {
197 free(re);
198 return 0;
199 }
200 re->backend_shutdown = evas_software_wince_gapi_shutdown;
201 re->backend_output_buffer_new = evas_software_wince_gapi_output_buffer_new;
202 re->backend_output_buffer_free = evas_software_wince_gapi_output_buffer_free;
203 re->backend_output_buffer_paste = evas_software_wince_gapi_output_buffer_paste;
204 re->backend_surface_resize = evas_software_wince_gapi_surface_resize;
205 break;
206 case 3: /* DirectDraw */
207 re->backend = EVAS_ENGINE_WINCE_DDRAW;
208 re->backend_priv = evas_software_wince_ddraw_init(info->info.window, info->info.width, info->info.height);
209 if (!re->backend_priv)
210 {
211 free(re);
212 return 0;
213 }
214 re->backend_shutdown = evas_software_wince_ddraw_shutdown;
215 re->backend_output_buffer_new = evas_software_wince_ddraw_output_buffer_new;
216 re->backend_output_buffer_free = evas_software_wince_ddraw_output_buffer_free;
217 re->backend_output_buffer_paste = evas_software_wince_ddraw_output_buffer_paste;
218 re->backend_surface_resize = evas_software_wince_ddraw_surface_resize;
219 break;
220 case 4: /* GDI */
221 re->backend = EVAS_ENGINE_WINCE_GDI;
222 re->backend_priv = evas_software_wince_gdi_init(info->info.window, info->info.width, info->info.height, info->info.fullscreen);
223 if (!re->backend_priv)
224 {
225 free(re);
226 return 0;
227 }
228 re->backend_shutdown = evas_software_wince_gdi_shutdown;
229 re->backend_output_buffer_new = evas_software_wince_gdi_output_buffer_new;
230 re->backend_output_buffer_free = evas_software_wince_gdi_output_buffer_free;
231 re->backend_output_buffer_paste = evas_software_wince_gdi_output_buffer_paste;
232 re->backend_surface_resize = evas_software_wince_gdi_surface_resize;
233 break;
234 default:
235 free(re);
236 return 0;
237 }
238
239 re->width = e->output.w;
240 re->height = e->output.h;
241 re->rotation = info->info.rotation;
242 re->tb = evas_common_tilebuf_new(e->output.w, e->output.h);
243 if (re->tb)
244 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
245 }
246 else
247 {
248 re = e->engine.data.output;
249 if (re->tb) evas_common_tilebuf_free(re->tb);
250
251 switch(info->info.backend)
252 {
253 case 1: /* FB */
254 re->backend = EVAS_ENGINE_WINCE_FB;
255 re->backend_priv = evas_software_wince_fb_init(info->info.window, info->info.width, info->info.height);
256 if (!re->backend_priv)
257 {
258 free(re);
259 return 0;
260 }
261 re->backend_shutdown = evas_software_wince_fb_shutdown;
262 re->backend_output_buffer_new = evas_software_wince_fb_output_buffer_new;
263 re->backend_output_buffer_free = evas_software_wince_fb_output_buffer_free;
264 re->backend_output_buffer_paste = evas_software_wince_fb_output_buffer_paste;
265 re->backend_surface_resize = evas_software_wince_fb_surface_resize;
266 break;
267 case 2: /* GAPI */
268 re->backend = EVAS_ENGINE_WINCE_GAPI;
269 re->backend_priv = evas_software_wince_gapi_init(info->info.window, info->info.width, info->info.height);
270 if (!re->backend_priv)
271 {
272 free(re);
273 return 0;
274 }
275 re->backend_shutdown = evas_software_wince_gapi_shutdown;
276 re->backend_output_buffer_new = evas_software_wince_gapi_output_buffer_new;
277 re->backend_output_buffer_free = evas_software_wince_gapi_output_buffer_free;
278 re->backend_output_buffer_paste = evas_software_wince_gapi_output_buffer_paste;
279 re->backend_surface_resize = evas_software_wince_gapi_surface_resize;
280 break;
281 case 3: /* DirectDraw */
282 re->backend = EVAS_ENGINE_WINCE_DDRAW;
283 re->backend_priv = evas_software_wince_ddraw_init(info->info.window, info->info.width, info->info.height);
284 if (!re->backend_priv)
285 {
286 free(re);
287 return 0;
288 }
289 re->backend_shutdown = evas_software_wince_ddraw_shutdown;
290 re->backend_output_buffer_new = evas_software_wince_ddraw_output_buffer_new;
291 re->backend_output_buffer_free = evas_software_wince_ddraw_output_buffer_free;
292 re->backend_output_buffer_paste = evas_software_wince_ddraw_output_buffer_paste;
293 re->backend_surface_resize = evas_software_wince_ddraw_surface_resize;
294 break;
295 case 4: /* GDI */
296 re->backend = EVAS_ENGINE_WINCE_GDI;
297 re->backend_priv = evas_software_wince_gdi_init(info->info.window, info->info.width, info->info.height, info->info.fullscreen);
298 if (!re->backend_priv)
299 {
300 free(re);
301 return 0;
302 }
303 re->backend_shutdown = evas_software_wince_gdi_shutdown;
304 re->backend_output_buffer_new = evas_software_wince_gdi_output_buffer_new;
305 re->backend_output_buffer_free = evas_software_wince_gdi_output_buffer_free;
306 re->backend_output_buffer_paste = evas_software_wince_gdi_output_buffer_paste;
307 re->backend_surface_resize = evas_software_wince_gdi_surface_resize;
308 break;
309 default:
310 free(re);
311 return 0;
312 }
313
314 re->width = e->output.w;
315 re->height = e->output.h;
316 re->rotation = info->info.rotation;
317 re->tb = evas_common_tilebuf_new(e->output.w, e->output.h);
318 if (re->tb)
319 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
320 if (re->tmp_out)
321 {
322 evas_cache_image_drop(&re->tmp_out->cache_entry);
323 re->tmp_out = NULL;
324 }
325 }
326 if (!e->engine.data.output) return 0;
327 /* add a draw context if we dont have one */
328 if (!e->engine.data.context)
329 e->engine.data.context =
330 e->engine.func->context_new(e->engine.data.output);
331
332 return 1;
333}
334
335static void
336eng_output_free(void *data)
337{
338 Render_Engine *re;
339
340 re = (Render_Engine *)data;
341 if (re->fbob) re->backend_output_buffer_free(re->backend_priv);
342 re->backend_shutdown(re->backend_priv);
343 if (re->clip_rects) DeleteObject(re->clip_rects);
344 if (re->tb) evas_common_tilebuf_free(re->tb);
345 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
346 if (re->tmp_out) evas_cache_image_drop(&re->tmp_out->cache_entry);
347 free(re);
348
349 evas_common_font_shutdown();
350 evas_common_image_shutdown();
351 evas_common_soft16_image_shutdown();
352}
353
354static void
355eng_output_resize(void *data, int w, int h)
356{
357 Render_Engine *re;
358
359 re = (Render_Engine *)data;
360
361 if ((re->width == w) && (re->height == h)) return;
362
363 /* FIXME: is it needed ?? */
364 if (re->fbob)
365 re->backend_surface_resize(re->fbob);
366
367 evas_common_tilebuf_free(re->tb);
368 re->width = w;
369 re->height = h;
370 re->tb = evas_common_tilebuf_new(w, h);
371 if (re->tb)
372 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
373 if (re->fbob)
374 {
375 re->backend_output_buffer_free(re->fbob);
376 re->fbob = NULL;
377 }
378 if (re->clip_rects)
379 {
380 DeleteObject(re->clip_rects);
381 re->clip_rects = NULL;
382 }
383 if (re->tmp_out)
384 {
385 evas_cache_image_drop(&re->tmp_out->cache_entry);
386 re->tmp_out = NULL;
387 }
388}
389
390static void
391eng_output_tile_size_set(void *data, int w, int h)
392{
393 Render_Engine *re;
394
395 re = (Render_Engine *)data;
396 evas_common_tilebuf_set_tile_size(re->tb, w, h);
397}
398
399static void
400eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
401{
402 Render_Engine *re;
403
404 re = (Render_Engine *)data;
405 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
406}
407
408static void
409eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
410{
411 Render_Engine *re;
412
413 re = (Render_Engine *)data;
414 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
415}
416
417static void
418eng_output_redraws_clear(void *data)
419{
420 Render_Engine *re;
421
422 re = (Render_Engine *)data;
423 evas_common_tilebuf_clear(re->tb);
424}
425
426static inline void
427_output_buffer_alloc(Render_Engine *re)
428{
429 int width;
430 int height;
431
432 if (re->fbob) return;
433
434 if ((re->rotation == 0) || (re->rotation == 180))
435 {
436 width = re->width;
437 height = re->height;
438 }
439 else
440 {
441 width = re->height;
442 height = re->width;
443 }
444
445 re->fbob = re->backend_output_buffer_new(re->backend_priv,
446 width,
447 height);
448}
449
450static void *
451eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
452{
453 Render_Engine *re;
454 Tilebuf_Rect *rect;
455 int ux, uy, uw, uh;
456
457 re = (Render_Engine *)data;
458 if (re->end)
459 {
460 re->end = 0;
461 return NULL;
462 }
463 if (!re->rects)
464 {
465 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
466 if (!re->rects) return NULL;
467
468 re->cur_rect = re->rects;
469 _output_buffer_alloc(re);
470 if (re->rotation != 0) _tmp_out_alloc(re); /* grows if required */
471 }
472 if (!re->cur_rect)
473 {
474 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
475 re->rects = NULL;
476 return NULL;
477 }
478 rect = re->cur_rect;
479 ux = rect->x; uy = rect->y; uw = rect->w; uh = rect->h;
480 re->cur_rect = (Tilebuf_Rect *)((EINA_INLIST_GET(re->cur_rect))->next);
481 if (!re->cur_rect)
482 {
483 evas_common_tilebuf_free_render_rects(re->rects);
484 re->rects = NULL;
485 re->end = 1;
486 }
487
488 *x = ux; *y = uy; *w = uw; *h = uh;
489 if (re->rotation == 0)
490 {
491 *cx = ux; *cy = uy; *cw = uw; *ch = uh;
492 return re->fbob->im;
493 }
494 else
495 {
496 *cx = 0; *cy = 0; *cw = uw; *ch = uh;
497 return re->tmp_out;
498 }
499}
500
501static void
502_blit_rot_90(Soft16_Image *dst, const Soft16_Image *src,
503 int out_x, int out_y, int w, int h)
504{
505 DATA16 *dp, *sp;
506 int x, y;
507
508 sp = src->pixels;
509 dp = dst->pixels + (out_x +
510 (w + out_y - 1) * dst->stride);
511
512 for (y = 0; y < h; y++)
513 {
514 DATA16 *dp_itr, *sp_itr;
515
516 sp_itr = sp;
517 dp_itr = dp;
518
519 for (x = 0; x < w; x++)
520 {
521 *dp_itr = *sp_itr;
522
523 sp_itr++;
524 dp_itr -= dst->stride;
525 }
526 sp += src->stride;
527 dp++;
528 }
529}
530
531static void
532_blit_rot_180(Soft16_Image *dst, const Soft16_Image *src,
533 int out_x, int out_y, int w, int h)
534{
535 DATA16 *dp, *sp;
536 int x, y;
537
538 sp = src->pixels;
539 dp = dst->pixels + ((w + out_x - 1) +
540 (h + out_y - 1) * dst->stride);
541
542 for (y = 0; y < h; y++)
543 {
544 DATA16 *dp_itr, *sp_itr;
545
546 sp_itr = sp;
547 dp_itr = dp;
548
549 for (x = 0; x < w; x++)
550 {
551 *dp_itr = *sp_itr;
552
553 sp_itr++;
554 dp_itr--;
555 }
556 sp += src->stride;
557 dp -= dst->stride;
558 }
559}
560
561static void
562_blit_rot_270(Soft16_Image *dst, const Soft16_Image *src,
563 int out_x, int out_y, int w, int h)
564{
565 DATA16 *dp, *sp;
566 int x, y;
567
568 sp = src->pixels;
569 dp = dst->pixels + ((h + out_x - 1) +
570 out_y * dst->stride);
571
572 for (y = 0; y < h; y++)
573 {
574 DATA16 *dp_itr, *sp_itr;
575
576 sp_itr = sp;
577 dp_itr = dp;
578
579 for (x = 0; x < w; x++)
580 {
581 *dp_itr = *sp_itr;
582
583 sp_itr++;
584 dp_itr += dst->stride;
585 }
586 sp += src->stride;
587 dp--;
588 }
589}
590
591static void
592_tmp_out_process(Render_Engine *re, int out_x, int out_y, int w, int h)
593{
594 Soft16_Image *d, *s;
595
596 d = re->fbob->im;
597 s = re->tmp_out;
598
599 if ((w < 1) || (h < 1) || (out_x >= d->cache_entry.w) || (out_y >= d->cache_entry.h))
600 return;
601
602 if (re->rotation == 90)
603 _blit_rot_90(d, s, out_x, out_y, w, h);
604 else if (re->rotation == 180)
605 _blit_rot_180(d, s, out_x, out_y, w, h);
606 else if (re->rotation == 270)
607 _blit_rot_270(d, s, out_x, out_y, w, h);
608}
609
610static void
611eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
612{
613 Render_Engine *re;
614 HRGN region;
615 int xx;
616 int yy;
617 int width;
618 int height;
619
620 re = (Render_Engine *)data;
621
622 if (!re->clip_rects)
623 re->clip_rects = CreateRectRgn(0, 0, 0, 0);
624
625 if (re->rotation == 0)
626 {
627 xx = x;
628 yy = y;
629 width = w;
630 height = h;
631 }
632 else if (re->rotation == 90)
633 {
634 xx = y;
635 yy = re->width - w - x;
636 width = h;
637 height = w;
638 }
639 else if (re->rotation == 180)
640 {
641 xx = re->width - w - x;
642 yy = re->height - h - y;
643 width = w;
644 height = h;
645 }
646 else if (re->rotation == 270)
647 {
648 xx = re->height - h - y;
649 yy = x;
650 width = h;
651 height = w;
652 }
653
654 region = CreateRectRgn(xx, yy, xx + width, yy + height);
655
656 if (re->rotation != 0)
657 _tmp_out_process(re, xx, yy, w, h);
658 CombineRgn(re->clip_rects, re->clip_rects, region, RGN_OR);
659}
660
661static void
662eng_output_flush(void *data)
663{
664 Render_Engine *re;
665
666 re = (Render_Engine *)data;
667 if (re->clip_rects)
668 {
669 /* FIXME : i have to manage that */
670/* XSetRegion(re->disp, re->gc, re->clip_rects); */
671 DeleteObject(re->clip_rects);
672 re->clip_rects = NULL;
673 }
674 else return;
675
676 re->backend_output_buffer_paste(re->fbob);
677
678 /* FIXME : i have to manage that */
679/* XSetClipMask(re->disp, re->gc, None); */
680}
681
682static void
683eng_output_idle_flush(void *data)
684{
685 Render_Engine *re;
686
687 re = (Render_Engine *)data;
688 if (re->fbob)
689 {
690 re->backend_output_buffer_free(re->fbob);
691 re->fbob = NULL;
692 }
693 if (re->clip_rects)
694 {
695 DeleteObject(re->clip_rects);
696 re->clip_rects = NULL;
697 }
698 if (re->tmp_out)
699 {
700 evas_cache_image_drop(&re->tmp_out->cache_entry);
701 re->tmp_out = NULL;
702 }
703}
704
705static Eina_Bool
706eng_canvas_alpha_get(void *data, void *context)
707{
708 return EINA_FALSE;
709}
710
711/* module advertising code */
712static int
713module_open(Evas_Module *em)
714{
715 if (!em) return 0;
716 /* get whatever engine module we inherit from */
717 if (!_evas_module_engine_inherit(&pfunc, "software_16")) return 0;
718 _evas_engine_soft16_wince_log_dom = eina_log_domain_register
719 ("evas-software_16_wince", EVAS_DEFAULT_LOG_COLOR);
720 if (_evas_engine_soft16_wince_log_dom < 0)
721 {
722 EINA_LOG_ERR("Can not create a module log domain.");
723 return 0;
724 }
725
726 /* store it for later use */
727 func = pfunc;
728 /* now to override methods */
729#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
730 ORD(info);
731 ORD(info_free);
732 ORD(setup);
733 ORD(canvas_alpha_get);
734 ORD(output_free);
735 ORD(output_resize);
736 ORD(output_tile_size_set);
737 ORD(output_redraws_rect_add);
738 ORD(output_redraws_rect_del);
739 ORD(output_redraws_clear);
740 ORD(output_redraws_next_update_get);
741 ORD(output_redraws_next_update_push);
742 ORD(output_flush);
743 ORD(output_idle_flush);
744 /* now advertise out own api */
745 em->functions = (void *)(&func);
746 return 1;
747}
748
749static void
750module_close(Evas_Module *em)
751{
752 eina_log_domain_unregister(_evas_engine_soft16_wince_log_dom);
753}
754
755static Evas_Module_Api evas_modapi =
756{
757 EVAS_MODULE_API_VERSION,
758 "software_16_wince",
759 "none",
760 {
761 module_open,
762 module_close
763 }
764};
765
766EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_16_wince);
767
768#ifndef EVAS_STATIC_BUILD_SOFTWARE_16_WINCE
769EVAS_EINA_MODULE_DEFINE(engine, software_16_wince);
770#endif
diff --git a/libraries/evas/src/modules/engines/software_16_wince/evas_engine.h b/libraries/evas/src/modules/engines/software_16_wince/evas_engine.h
new file mode 100644
index 0000000..344e7b9
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_wince/evas_engine.h
@@ -0,0 +1,120 @@
1#ifndef __EVAS_ENGINE_H__
2#define __EVAS_ENGINE_H__
3
4#define WIN32_LEAN_AND_MEAN
5#include <windows.h>
6#undef WIN32_LEAN_AND_MEAN
7#include "evas_common.h"
8#include "evas_common_soft16.h"
9
10extern int _evas_engine_soft16_wince_log_dom;
11#ifdef ERR
12# undef ERR
13#endif
14#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_soft16_wince_log_dom, __VA_ARGS__)
15
16#ifdef DBG
17# undef DBG
18#endif
19#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_soft16_wince_log_dom, __VA_ARGS__)
20
21#ifdef INF
22# undef INF
23#endif
24#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_soft16_wince_log_dom, __VA_ARGS__)
25
26#ifdef WRN
27# undef WRN
28#endif
29#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_soft16_wince_log_dom, __VA_ARGS__)
30
31#ifdef CRIT
32# undef CRIT
33#endif
34#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_soft16_wince_log_dom, __VA_ARGS__)
35
36typedef struct _FB_Output_Buffer FB_Output_Buffer;
37
38struct _FB_Output_Buffer
39{
40 Soft16_Image *im;
41 void *priv;
42};
43
44
45/* Raw FrameBuffer */
46
47void *evas_software_wince_fb_init (HWND window,
48 int width,
49 int height);
50FB_Output_Buffer *evas_software_wince_fb_output_buffer_new (void *priv,
51 int width,
52 int height);
53void evas_software_wince_fb_shutdown(void *priv);
54void evas_software_wince_fb_output_buffer_free (FB_Output_Buffer *fbob);
55void evas_software_wince_fb_output_buffer_paste (FB_Output_Buffer *fbob);
56
57void evas_software_wince_fb_surface_resize(FB_Output_Buffer *fbob);
58
59
60/* GAPI */
61
62void *evas_software_wince_gapi_init (HWND window,
63 int width,
64 int height);
65FB_Output_Buffer *evas_software_wince_gapi_output_buffer_new (void *priv,
66 int width,
67 int height);
68void evas_software_wince_gapi_shutdown(void *priv);
69void evas_software_wince_gapi_output_buffer_free (FB_Output_Buffer *fbob);
70void evas_software_wince_gapi_output_buffer_paste (FB_Output_Buffer *fbob);
71
72void evas_software_wince_gapi_surface_resize(FB_Output_Buffer *fbob);
73
74void *evas_software_wince_gapi_default_keys(void);
75int evas_software_wince_gapi_suspend(void);
76int evas_software_wince_gapi_resume(void);
77
78
79/* DirectDraw */
80
81#ifdef __cplusplus
82extern "C" {
83#endif
84
85
86void *evas_software_wince_ddraw_init (HWND window,
87 int width,
88 int height);
89FB_Output_Buffer *evas_software_wince_ddraw_output_buffer_new (void *priv,
90 int width,
91 int height);
92void evas_software_wince_ddraw_shutdown(void *priv);
93void evas_software_wince_ddraw_output_buffer_free (FB_Output_Buffer *fbob);
94void evas_software_wince_ddraw_output_buffer_paste (FB_Output_Buffer *fbob);
95
96void evas_software_wince_ddraw_surface_resize(FB_Output_Buffer *fbob);
97
98
99#ifdef __cplusplus
100}
101#endif
102
103
104/* GDI */
105
106void *evas_software_wince_gdi_init (HWND window,
107 int width,
108 int height,
109 int fullscreen);
110FB_Output_Buffer *evas_software_wince_gdi_output_buffer_new (void *priv,
111 int width,
112 int height);
113void evas_software_wince_gdi_shutdown(void *priv);
114void evas_software_wince_gdi_output_buffer_free (FB_Output_Buffer *fbob);
115void evas_software_wince_gdi_output_buffer_paste (FB_Output_Buffer *fbob);
116
117void evas_software_wince_gdi_surface_resize(FB_Output_Buffer *fbob);
118
119
120#endif /* __EVAS_ENGINE_H__ */
diff --git a/libraries/evas/src/modules/engines/software_16_wince/evas_wince_ddraw_buffer.cpp b/libraries/evas/src/modules/engines/software_16_wince/evas_wince_ddraw_buffer.cpp
new file mode 100644
index 0000000..944ed53
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_wince/evas_wince_ddraw_buffer.cpp
@@ -0,0 +1,195 @@
1
2#include <cstdio>
3
4#define WIN32_LEAN_AND_MEAN
5#include <windows.h>
6#undef WIN32_LEAN_AND_MEAN
7#include <ddraw.h>
8
9#include "evas_common.h"
10#include "evas_engine.h"
11
12
13typedef LONG (*fct_DirectDrawCreate)(LPGUID, LPUNKNOWN *, LPUNKNOWN *);
14
15fct_DirectDrawCreate lib_DirectDrawCreate;
16
17typedef struct Evas_Engine_WinCE_DDraw_Priv Evas_Engine_WinCE_DDraw_Priv;
18
19struct Evas_Engine_WinCE_DDraw_Priv
20{
21 HMODULE module;
22 LPDIRECTDRAW object;
23 LPDIRECTDRAWSURFACE surface;
24 int width;
25 int height;
26 int stride;
27};
28
29void *
30evas_software_wince_ddraw_init(HWND window,
31 int width,
32 int height)
33{
34 DDSURFACEDESC surface_desc;
35 Evas_Engine_WinCE_DDraw_Priv *priv;
36 HRESULT res;
37
38 priv = (Evas_Engine_WinCE_DDraw_Priv *)malloc(sizeof(Evas_Engine_WinCE_DDraw_Priv));
39 if (!priv)
40 return NULL;
41
42 priv->module = LoadLibrary(L"ddraw.dll");
43 if (!priv->module)
44 {
45 fprintf(stderr, "[Engine] [WinCE DDraw] Can not load ddraw.dll\n");
46 goto free_priv;
47 }
48
49 lib_DirectDrawCreate = (fct_DirectDrawCreate)GetProcAddress(priv->module, L"DirectDrawCreate");
50 if (!lib_DirectDrawCreate)
51 {
52 fprintf(stderr, "[Engine] [WinCE DDraw] Can not initialize DirectDraw\n");
53 goto free_lib;
54 }
55
56 res = lib_DirectDrawCreate(NULL, (IUnknown**)&priv->object, NULL);
57 if (FAILED(res))
58 {
59 fprintf(stderr, "[Engine] [WinCE DDraw] Can not create DirectDraw object\n");
60 goto free_lib;
61 }
62
63 res = priv->object->SetCooperativeLevel(window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
64 if (FAILED(res))
65 {
66 fprintf(stderr, "[Engine] [WinCE DDraw] Can not set window to fullscreen\n");
67 goto release_object;
68 }
69
70 memset(&surface_desc, 0, sizeof(surface_desc));
71 surface_desc.dwSize = sizeof(surface_desc);
72 surface_desc.dwFlags = DDSD_CAPS;
73 surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
74
75 res = priv->object->CreateSurface(&surface_desc, &priv->surface, NULL);
76 if (FAILED(res))
77 {
78 fprintf(stderr, "[Engine] [WinCE DDraw] Can not create surface\n");
79 goto release_object;
80 }
81
82 memset(&surface_desc, 0, sizeof(surface_desc));
83 surface_desc.dwSize = sizeof(surface_desc);
84 res = priv->surface->Lock(NULL, &surface_desc, DDLOCK_READONLY, NULL);
85 if (FAILED(res))
86 {
87 fprintf(stderr, "[Evas] [Engine] [WinCE DDraw] Can not lock surface\n");
88 goto release_surface;
89 }
90
91 priv->width = surface_desc.dwWidth;
92 priv->height = surface_desc.dwHeight;
93 priv->stride = surface_desc.lPitch / 2;
94
95 if ((priv->width != width) ||
96 (priv->height != height))
97 {
98 fprintf(stderr, "[Engine] [WinCE DDraw] Size mismatch\n");
99 fprintf(stderr, "[Engine] [WinCE DDraw] asked : %dx%d\n", width, height);
100 fprintf(stderr, "[Engine] [WinCE DDraw] got : %dx%d\n", priv->width, priv->height);
101 goto release_surface;
102 }
103
104 res = priv->surface->Unlock(NULL);
105 if (FAILED(res))
106 {
107 fprintf(stderr, "[Engine] [WinCE DDraw] Can not unlock surface\n");
108 goto release_surface;
109 }
110
111 return priv;
112
113 release_surface:
114 priv->surface->Release();
115 release_object:
116 priv->object->Release();
117 free_lib:
118 FreeLibrary(priv->module);
119 free_priv:
120 free(priv);
121
122 return 0;
123}
124
125void
126evas_software_wince_ddraw_shutdown(void *priv)
127{
128 ((Evas_Engine_WinCE_DDraw_Priv *)priv)->surface->Release();
129 ((Evas_Engine_WinCE_DDraw_Priv *)priv)->object->Release();
130 FreeLibrary(((Evas_Engine_WinCE_DDraw_Priv *)priv)->module);
131 free(priv);
132}
133
134
135FB_Output_Buffer *
136evas_software_wince_ddraw_output_buffer_new(void *priv,
137 int width,
138 int height)
139{
140 FB_Output_Buffer *fbob;
141 void *buffer;
142
143 fbob = (FB_Output_Buffer *)calloc(1, sizeof(FB_Output_Buffer));
144 if (!fbob) return NULL;
145
146 buffer = malloc (width * height * 2); /* we are sure to have 16bpp */
147 if (!buffer)
148 {
149 free(fbob);
150 return NULL;
151 }
152
153 fbob->priv = priv;
154
155 fbob->im = (Soft16_Image *) evas_cache_image_data(evas_common_soft16_image_cache_get(), width, height, (DATA32 *)buffer, 0, EVAS_COLORSPACE_RGB565_A5P);
156 if (fbob->im)
157 fbob->im->stride = ((Evas_Engine_WinCE_DDraw_Priv *)priv)->stride;
158
159 return fbob;
160}
161
162void
163evas_software_wince_ddraw_output_buffer_free(FB_Output_Buffer *fbob)
164{
165 free(fbob->im->pixels);
166 free(fbob);
167}
168
169void
170evas_software_wince_ddraw_output_buffer_paste(FB_Output_Buffer *fbob)
171{
172 DDSURFACEDESC surface_desc;
173 Evas_Engine_WinCE_DDraw_Priv *priv;
174 HRESULT res;
175
176 priv = (Evas_Engine_WinCE_DDraw_Priv *)fbob->priv;
177
178 memset(&surface_desc, 0, sizeof(surface_desc));
179 surface_desc.dwSize = sizeof(surface_desc);
180 res = priv->surface->Lock(NULL, &surface_desc, DDLOCK_WRITEONLY, NULL);
181 if (FAILED(res))
182 return;
183
184 if ((fbob->im->cache_entry.w == surface_desc.dwWidth) &&
185 (fbob->im->cache_entry.h == surface_desc.dwHeight))
186 memcpy(surface_desc.lpSurface, fbob->im->pixels,
187 surface_desc.dwWidth * surface_desc.dwHeight * 2);
188
189 priv->surface->Unlock(NULL);
190}
191
192void
193evas_software_wince_ddraw_surface_resize(FB_Output_Buffer *fbob)
194{
195}
diff --git a/libraries/evas/src/modules/engines/software_16_wince/evas_wince_fb_buffer.c b/libraries/evas/src/modules/engines/software_16_wince/evas_wince_fb_buffer.c
new file mode 100644
index 0000000..6a81bf4
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_wince/evas_wince_fb_buffer.c
@@ -0,0 +1,210 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4
5#define GETGXINFO 0x00020000
6
7typedef struct GXDeviceInfo
8{
9 long Version; //00 (should filled with 100 before calling ExtEscape)
10 void *pvFrameBuffer; //04
11 unsigned long cbStride; //08
12 unsigned long cxWidth; //0c
13 unsigned long cyHeight; //10
14 unsigned long cBPP; //14
15 unsigned long ffFormat; //18
16 char Unused[0x84 - 7 * 4];
17} GXDeviceInfo;
18
19
20#define GETRAWFRAMEBUFFER 0x00020001
21
22typedef struct _RawFrameBufferInfo
23{
24 WORD wFormat;
25 WORD wBPP;
26 VOID *pFramePointer;
27 int cxStride;
28 int cyStride;
29 int cxPixels;
30 int cyPixels;
31} RawFrameBufferInfo;
32
33
34typedef struct Evas_Engine_WinCE_FB_Priv Evas_Engine_WinCE_FB_Priv;
35
36struct Evas_Engine_WinCE_FB_Priv
37{
38 int width;
39 int height;
40 void *buffer;
41};
42
43static int
44_evas_software_wince_gxinfo_init(HDC dc, int *width, int *height, void **buffer)
45{
46 GXDeviceInfo gxInfo = { 0 };
47 int result;
48
49 gxInfo.Version = 100;
50 result = ExtEscape(dc, GETGXINFO, 0, NULL, sizeof(gxInfo),
51 (char *) &gxInfo);
52 if (result <= 0)
53 {
54 ERR("ExtEscape() with GETGXINFO failed");
55 return 0;
56 }
57
58 *width = gxInfo.cyHeight;
59 *height = gxInfo.cxWidth;
60 *buffer = gxInfo.pvFrameBuffer;
61
62 return 1;
63}
64
65void *
66evas_software_wince_fb_init(HWND window,
67 int width,
68 int height)
69{
70 WCHAR oemstr[100];
71 RawFrameBufferInfo rfbi;
72 HDC dc;
73 Evas_Engine_WinCE_FB_Priv *priv;
74
75 priv = (Evas_Engine_WinCE_FB_Priv *)malloc(sizeof(Evas_Engine_WinCE_FB_Priv));
76 if (!priv)
77 return NULL;
78
79 dc = GetDC (window);
80 if (!dc)
81 {
82 ERR("Can not get DC");
83 free(priv);
84 return NULL;
85 }
86
87 SystemParametersInfo (SPI_GETOEMINFO, sizeof (oemstr), oemstr, 0);
88 if (((oemstr[12] == 'H') &&
89 (oemstr[13] == '3') &&
90 (oemstr[14] == '8')) ||
91 ((oemstr[12] == 'H') &&
92 (oemstr[13] == '3') &&
93 (oemstr[14] == '9')))
94 {
95 if (!_evas_software_wince_gxinfo_init(dc, &priv->width, &priv->height, &priv->buffer))
96 {
97 ReleaseDC(window, dc);
98 free(priv);
99 return NULL;
100 }
101
102 if ((priv->width != width) ||
103 (priv->height != height))
104 {
105 ERR("Size mismatch: asked: %dx%d, got: %dx%d",
106 width, height, priv->width, priv->height);
107 ReleaseDC(window, dc);
108 free(priv);
109 return NULL;
110 }
111
112 ReleaseDC(window, dc);
113
114 return priv;
115 }
116
117 if (!ExtEscape(dc, GETRAWFRAMEBUFFER, 0, 0, sizeof(rfbi), (char *) &rfbi)||
118 (rfbi.wBPP != 16) ||
119 (rfbi.wFormat != 1))
120 {
121 ERR("ExtEscape() with GETRAWFRAMEBUFFER failed. "
122 "Trying ExtEscape() with GETGXINFO");
123 if (!_evas_software_wince_gxinfo_init(dc, &priv->width, &priv->height, &priv->buffer))
124 {
125 ReleaseDC(window, dc);
126 free(priv);
127 return NULL;
128 }
129
130 ReleaseDC(window, dc);
131 return priv;
132 }
133
134 priv->width = rfbi.cxPixels;
135 priv->height = rfbi.cyPixels;
136 priv->buffer = rfbi.pFramePointer;
137
138 if ((priv->width != width) ||
139 (priv->height != height))
140 {
141 ERR("Size mismatch: asked: %dx%d, got: %dx%d",
142 width, height, priv->width, priv->height);
143 ReleaseDC(window, dc);
144 free(priv);
145 return NULL;
146 }
147
148 ReleaseDC(window, dc);
149
150 return priv;
151}
152
153void
154evas_software_wince_fb_shutdown(void *priv)
155{
156 free(priv);
157}
158
159
160FB_Output_Buffer *
161evas_software_wince_fb_output_buffer_new(void *priv,
162 int width,
163 int height)
164{
165 FB_Output_Buffer *fbob;
166 void *buffer;
167
168 fbob = calloc(1, sizeof(FB_Output_Buffer));
169 if (!fbob) return NULL;
170
171 buffer = malloc (width * height * 2); /* we are sure to have 16bpp */
172 if (!buffer)
173 {
174 free(fbob);
175 return NULL;
176 }
177
178 fbob->priv = priv;
179
180 fbob->im = (Soft16_Image *) evas_cache_image_data(evas_common_soft16_image_cache_get(), width, height, (DATA32 *)buffer, 0, EVAS_COLORSPACE_RGB565_A5P);
181 if (fbob->im)
182 fbob->im->stride = width;
183
184 return fbob;
185}
186
187void
188evas_software_wince_fb_output_buffer_free(FB_Output_Buffer *fbob)
189{
190 free(fbob->im->pixels);
191 free(fbob);
192}
193
194void
195evas_software_wince_fb_output_buffer_paste(FB_Output_Buffer *fbob)
196{
197 Evas_Engine_WinCE_FB_Priv *priv;
198
199 priv = (Evas_Engine_WinCE_FB_Priv *)fbob->priv;
200
201 if ((fbob->im->cache_entry.w == priv->width) &&
202 (fbob->im->cache_entry.h == priv->height))
203 memcpy(priv->buffer, fbob->im->pixels,
204 priv->width * priv->height * 2);
205}
206
207void
208evas_software_wince_fb_surface_resize(FB_Output_Buffer *fbob)
209{
210}
diff --git a/libraries/evas/src/modules/engines/software_16_wince/evas_wince_gapi_buffer.c b/libraries/evas/src/modules/engines/software_16_wince/evas_wince_gapi_buffer.c
new file mode 100644
index 0000000..c23c863
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_wince/evas_wince_gapi_buffer.c
@@ -0,0 +1,341 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4
5typedef int (*evas_engine_wince_close_display)();
6
7typedef struct Evas_Engine_WinCE_GAPI_Priv Evas_Engine_WinCE_GAPI_Priv;
8
9
10#define GETGXINFO 0x00020000
11
12typedef struct
13{
14 long Version; //00 (should filled with 100 before calling ExtEscape)
15 void *pvFrameBuffer; //04
16 unsigned long cbStride; //08
17 unsigned long cxWidth; //0c
18 unsigned long cyHeight; //10
19 unsigned long cBPP; //14
20 unsigned long ffFormat; //18
21 char Unused[0x84 - 7 * 4];
22} _GXDeviceInfo;
23
24
25#define LINK(type,name,import) \
26 name = (gapi_##type)GetProcAddress (gapi_lib, import)
27
28#define GX_FULLSCREEN 0x01
29#define GX_NORMALKEYS 0x02
30
31#define kfDirect555 0x40
32#define kfDirect565 0x80
33
34
35typedef struct
36{
37 DWORD cxWidth;
38 DWORD cyHeight;
39 LONG cbxPitch;
40 LONG cbyPitch;
41 LONG cBPP;
42 DWORD ffFormat;
43} _GAPI_Display_Properties;
44
45typedef int (*gapi_display_open)(HWND hWnd, DWORD dwFlags);
46typedef int (*gapi_display_close)();
47typedef _GAPI_Display_Properties (*gapi_display_properties_get)(void);
48typedef void* (*gapi_draw_begin)(void);
49typedef int (*gapi_draw_end)(void);
50typedef int (*gapi_suspend)(void);
51typedef int (*gapi_resume)(void);
52
53gapi_suspend suspend = NULL;
54gapi_resume resume = NULL;
55
56int
57evas_software_wince_gapi_suspend(void)
58{
59 if (suspend)
60 return suspend();
61 else
62 return 0;
63}
64
65int
66evas_software_wince_gapi_resume(void)
67{
68 if (resume)
69 return resume();
70 else
71 return 0;
72}
73
74
75struct Evas_Engine_WinCE_GAPI_Priv
76{
77 HMODULE lib;
78 gapi_display_close close_display;
79 gapi_draw_begin draw_begin;
80 gapi_draw_end draw_end;
81 void *buffer;
82 int width;
83 int height;
84 int stride;
85};
86
87void *
88evas_software_wince_gapi_init(HWND window,
89 int width,
90 int height)
91{
92 WCHAR oemstr[100];
93 _GAPI_Display_Properties prop;
94 HMODULE gapi_lib;
95 Evas_Engine_WinCE_GAPI_Priv *priv;
96
97 gapi_display_open display_open = NULL;
98 gapi_display_close display_close = NULL;
99 gapi_display_properties_get display_properties_get = NULL;
100 gapi_draw_begin draw_begin = NULL;
101 gapi_draw_end draw_end = NULL;
102
103 priv = (Evas_Engine_WinCE_GAPI_Priv *)malloc(sizeof(Evas_Engine_WinCE_GAPI_Priv));
104 if (!priv)
105 return NULL;
106
107 gapi_lib = LoadLibrary(L"\\Windows\\gx.dll");
108 if (!gapi_lib)
109 {
110 gapi_lib = LoadLibrary(L"gx.dll");
111 if (!gapi_lib)
112 {
113 ERR("[Engine] [WinCE GAPI] Can not load gx.dll");
114 goto free_priv;
115 }
116 }
117
118 LINK(display_open, display_open, L"?GXOpenDisplay@@YAHPAUHWND__@@K@Z");
119 LINK(display_close, display_close, L"?GXCloseDisplay@@YAHXZ");
120 LINK(display_properties_get, display_properties_get, L"?GXGetDisplayProperties@@YA?AUGXDisplayProperties@@XZ");
121 LINK(draw_begin, draw_begin, L"?GXBeginDraw@@YAPAXXZ");
122 LINK(draw_end, draw_end, L"?GXEndDraw@@YAHXZ");
123 LINK(suspend, suspend, L"?GXSuspend@@YAHXZ" );
124 LINK(resume, resume, L"?GXResume@@YAHXZ" );
125
126 if (!display_open ||
127 !display_close ||
128 !display_properties_get ||
129 !draw_begin ||
130 !draw_end ||
131 !suspend ||
132 !resume)
133 {
134 ERR("[Engine] [WinCE GAPI] Can not find valid symbols");
135 goto free_lib;
136 }
137
138 if (!display_open(window, GX_FULLSCREEN))
139 {
140 ERR("[Engine] [WinCE GAPI] Can not open display");
141 goto free_lib;
142 }
143
144 prop = display_properties_get();
145
146 // verify pixel format
147 if(!(prop.ffFormat & kfDirect565) || (prop.cBPP != 16))
148 {
149 ERR("display format mismatch");
150 goto close_display;
151 }
152
153 // verify we have a vga device
154 if ((GetSystemMetrics(SM_CXSCREEN) != (int)prop.cxWidth) ||
155 (GetSystemMetrics(SM_CYSCREEN) != (int)prop.cyHeight))
156 {
157 ERR("display size mismatch");
158 goto close_display;
159 }
160
161 priv->lib = gapi_lib;
162 priv->close_display = display_close;
163 priv->draw_begin = draw_begin;
164 priv->draw_end = draw_end;
165
166 /* GAPI on Ipaq H38** and H39** is completely buggy */
167 /* They are detected as portrait device (width = 240 and height = 320) */
168 /* but the framebuffer is managed like a landscape device : */
169 /*
170 240
171 +---------+
172 | |
173 | |
174 | |
175 | |
176 | | 320
177 | ^^^ |
178 | ||| |
179 | ||| |
180 | ||| |
181 +---------+
182 ---->
183
184 */
185 /* So these devices are considered as landscape devices */
186 /* and width and height are switched. */
187 /* Other devices are managed normally : */
188 /*
189 240
190 +---------+
191| |---> |
192| |---> |
193| |---> |
194v | |
195 | | 320
196 | |
197 | |
198 | |
199 | |
200 +---------+
201
202 */
203
204 SystemParametersInfo (SPI_GETOEMINFO, sizeof (oemstr), oemstr, 0);
205
206 if (((oemstr[12] == 'H') &&
207 (oemstr[13] == '3') &&
208 (oemstr[14] == '8')) ||
209 ((oemstr[12] == 'H') &&
210 (oemstr[13] == '3') &&
211 (oemstr[14] == '9')))
212 {
213 _GXDeviceInfo gxInfo = { 0 };
214 HDC dc;
215 int result;
216
217 priv->width = prop.cyHeight;
218 priv->height = prop.cxWidth;
219 priv->stride = prop.cbxPitch;
220
221 dc = GetDC (window);
222 if (!dc)
223 {
224 ERR("Can not get device");
225 goto close_display;
226 }
227
228 gxInfo.Version = 100;
229 result = ExtEscape(dc, GETGXINFO, 0, NULL, sizeof(gxInfo),
230 (char *) &gxInfo);
231 if (result <= 0)
232 {
233 ERR("ExtEscape failed");
234 ReleaseDC(window, dc);
235 goto close_display;
236 }
237
238 priv->buffer = gxInfo.pvFrameBuffer;
239 ReleaseDC(window, dc);
240 }
241 else
242 {
243 priv->width = prop.cxWidth;
244 priv->height = prop.cyHeight;
245 priv->stride = prop.cbyPitch;
246 priv->buffer = NULL;
247 }
248
249 if ((priv->width != width) ||
250 (priv->height != height))
251 {
252 ERR("Size mismatch: asked: %dx%d, got: %dx%d",
253 width, height, priv->width, priv->height);
254 goto close_display;
255 }
256
257 return priv;
258
259 close_display:
260 display_close();
261 free_lib:
262 FreeLibrary(gapi_lib);
263 free_priv:
264 free(priv);
265 return NULL;
266}
267
268void
269evas_software_wince_gapi_shutdown(void *priv)
270{
271 Evas_Engine_WinCE_GAPI_Priv *p;
272
273 p = (Evas_Engine_WinCE_GAPI_Priv *)priv;
274 p->close_display();
275 suspend = NULL;
276 resume = NULL;
277 FreeLibrary(p->lib);
278 free(p);
279}
280
281
282FB_Output_Buffer *
283evas_software_wince_gapi_output_buffer_new(void *priv,
284 int width,
285 int height)
286{
287 FB_Output_Buffer *fbob;
288 void *buffer;
289
290 fbob = calloc(1, sizeof(FB_Output_Buffer));
291 if (!fbob) return NULL;
292
293 buffer = malloc (width * height * 2); /* we are sure to have 16bpp */
294 if (!buffer)
295 {
296 free(fbob);
297 return NULL;
298 }
299
300 fbob->priv = priv;
301
302 fbob->im = (Soft16_Image *) evas_cache_image_data(evas_common_soft16_image_cache_get(), width, height, (DATA32 *)buffer, 0, EVAS_COLORSPACE_RGB565_A5P);
303 if (fbob->im)
304 fbob->im->stride = ((Evas_Engine_WinCE_GAPI_Priv *)priv)->stride >> 1;
305
306 return fbob;
307}
308
309void
310evas_software_wince_gapi_output_buffer_free(FB_Output_Buffer *fbob)
311{
312 free(fbob->im->pixels);
313 free(fbob);
314}
315
316void
317evas_software_wince_gapi_output_buffer_paste(FB_Output_Buffer *fbob)
318{
319 Evas_Engine_WinCE_GAPI_Priv *priv;
320 void *buffer;
321
322 priv = (Evas_Engine_WinCE_GAPI_Priv *)fbob->priv;
323
324 buffer = priv->draw_begin();
325 if (!buffer)
326 return;
327
328 if (priv->buffer) buffer = priv->buffer;
329
330 if ((fbob->im->cache_entry.w == priv->width) &&
331 (fbob->im->cache_entry.h == priv->height))
332 memcpy(buffer, fbob->im->pixels,
333 priv->width * priv->height * 2);
334
335 priv->draw_end();
336}
337
338void
339evas_software_wince_gapi_surface_resize(FB_Output_Buffer *fbob)
340{
341}
diff --git a/libraries/evas/src/modules/engines/software_16_wince/evas_wince_gdi_buffer.c b/libraries/evas/src/modules/engines/software_16_wince/evas_wince_gdi_buffer.c
new file mode 100644
index 0000000..f32db4a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_wince/evas_wince_gdi_buffer.c
@@ -0,0 +1,165 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4
5typedef struct BITMAPINFO_16bpp BITMAPINFO_16bpp;
6typedef struct Evas_Engine_WinCE_GDI_Priv Evas_Engine_WinCE_GDI_Priv;
7
8struct BITMAPINFO_16bpp
9{
10 BITMAPINFOHEADER bih;
11 DWORD masks[3];
12};
13
14struct Evas_Engine_WinCE_GDI_Priv
15{
16 HWND window;
17 HDC dc;
18 BITMAPINFO_16bpp *bitmap_info;
19 HBITMAP bitmap;
20 int width;
21 int height;
22};
23
24void *
25evas_software_wince_gdi_init(HWND window,
26 int width,
27 int height,
28 int fullscreen)
29{
30 Evas_Engine_WinCE_GDI_Priv *priv;
31
32 priv = (Evas_Engine_WinCE_GDI_Priv *)malloc(sizeof(Evas_Engine_WinCE_GDI_Priv));
33 if (!priv)
34 return NULL;
35
36 priv->window = window;
37 priv->dc = GetDC(window);
38 if (!priv->dc)
39 {
40 ERR("Can not get DC");
41 free(priv);
42 return NULL;
43 }
44
45 if (fullscreen)
46 {
47 priv->width = GetSystemMetrics(SM_CXSCREEN);
48 priv->height = GetSystemMetrics(SM_CYSCREEN);
49 }
50 else
51 {
52 priv->width = width;
53 priv->height = height;
54 }
55
56 priv->bitmap_info = (BITMAPINFO_16bpp *)malloc(sizeof(BITMAPINFO_16bpp));
57 if (!priv->bitmap_info)
58 {
59 ERR("Can not allocate bitmap info");
60 ReleaseDC(window, priv->dc);
61 free(priv);
62 return NULL;
63 }
64
65 priv->bitmap_info->bih.biSize = sizeof(BITMAPINFOHEADER);
66 priv->bitmap_info->bih.biWidth = priv->width;
67 priv->bitmap_info->bih.biHeight = -priv->height;
68 priv->bitmap_info->bih.biPlanes = 1;
69 priv->bitmap_info->bih.biSizeImage = 2 * priv->width * priv->height;
70 priv->bitmap_info->bih.biXPelsPerMeter = 0;
71 priv->bitmap_info->bih.biYPelsPerMeter = 0;
72 priv->bitmap_info->bih.biClrUsed = 0;
73 priv->bitmap_info->bih.biClrImportant = 0;
74 priv->bitmap_info->bih.biBitCount = 16;
75 priv->bitmap_info->bih.biCompression = BI_BITFIELDS;
76 priv->bitmap_info->masks[0] = 0x0000f800;
77 priv->bitmap_info->masks[1] = 0x000007e0;
78 priv->bitmap_info->masks[2] = 0x0000001f;
79
80 return priv;
81}
82
83void
84evas_software_wince_gdi_shutdown(void *priv)
85{
86 free(((Evas_Engine_WinCE_GDI_Priv *)priv)->bitmap_info);
87 ReleaseDC(((Evas_Engine_WinCE_GDI_Priv *)priv)->window, ((Evas_Engine_WinCE_GDI_Priv *)priv)->dc);
88 free(priv);
89}
90
91
92FB_Output_Buffer *
93evas_software_wince_gdi_output_buffer_new(void *priv,
94 int width,
95 int height)
96{
97 Evas_Engine_WinCE_GDI_Priv *priv2;
98 FB_Output_Buffer *fbob;
99 void *buffer;
100
101 fbob = calloc(1, sizeof(FB_Output_Buffer));
102 if (!fbob) return NULL;
103
104 fbob->priv = priv;
105
106 priv2 = (Evas_Engine_WinCE_GDI_Priv *)fbob->priv;
107
108 priv2->bitmap = CreateDIBSection(priv2->dc,
109 (const BITMAPINFO *)priv2->bitmap_info,
110 DIB_RGB_COLORS,
111 (void **)(&buffer),
112 NULL,
113 0);
114 if (!priv2->bitmap)
115 {
116 free(fbob);
117 return NULL;
118 }
119
120 fbob->im = (Soft16_Image *) evas_cache_image_data(evas_common_soft16_image_cache_get(), width, height, (DATA32 *)buffer, 0, EVAS_COLORSPACE_RGB565_A5P);
121 if (fbob->im)
122 fbob->im->stride = width;
123
124 return fbob;
125}
126
127void
128evas_software_wince_gdi_output_buffer_free(FB_Output_Buffer *fbob)
129{
130 Evas_Engine_WinCE_GDI_Priv *priv;
131
132 priv = (Evas_Engine_WinCE_GDI_Priv *)fbob->priv;
133 DeleteObject(priv->bitmap);
134 free(fbob);
135}
136
137void
138evas_software_wince_gdi_output_buffer_paste(FB_Output_Buffer *fbob)
139{
140 Evas_Engine_WinCE_GDI_Priv *priv;
141
142 priv = (Evas_Engine_WinCE_GDI_Priv *)fbob->priv;
143
144 if ((fbob->im->cache_entry.w == priv->width) &&
145 (fbob->im->cache_entry.h == priv->height))
146 {
147 HDC dc;
148
149 dc = CreateCompatibleDC(priv->dc);
150 SelectObject(dc, priv->bitmap);
151 BitBlt(priv->dc,
152 0, 0,
153 priv->width, priv->height,
154 dc,
155 0, 0,
156 SRCCOPY);
157 DeleteDC(dc);
158
159 }
160}
161
162void
163evas_software_wince_gdi_surface_resize(FB_Output_Buffer *fbob)
164{
165}
diff --git a/libraries/evas/src/modules/engines/software_16_x11/Evas_Engine_Software_16_X11.h b/libraries/evas/src/modules/engines/software_16_x11/Evas_Engine_Software_16_X11.h
new file mode 100644
index 0000000..9768f0a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_x11/Evas_Engine_Software_16_X11.h
@@ -0,0 +1,26 @@
1#ifndef _EVAS_ENGINE_SOFTWARE_16_X11_H
2#define _EVAS_ENGINE_SOFTWARE_16_X11_H
3
4#include <X11/Xlib.h>
5
6typedef struct _Evas_Engine_Info_Software_16_X11 Evas_Engine_Info_Software_16_X11;
7
8struct _Evas_Engine_Info_Software_16_X11
9{
10 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
11 /* at you and make nasty noises */
12 Evas_Engine_Info magic;
13
14 /* engine specific data & parameters it needs to set up */
15 struct {
16 Display *display;
17 Drawable drawable;
18 int rotation;
19 } info;
20
21 /* non-blocking or blocking mode */
22 Evas_Engine_Render_Mode render_mode;
23};
24#endif
25
26
diff --git a/libraries/evas/src/modules/engines/software_16_x11/Makefile.am b/libraries/evas/src/modules/engines/software_16_x11/Makefile.am
new file mode 100644
index 0000000..812492e
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_x11/Makefile.am
@@ -0,0 +1,47 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9-I$(top_srcdir)/src/modules/engines/software_16 \
10@FREETYPE_CFLAGS@ \
11@EINA_CFLAGS@ \
12@PIXMAN_CFLAGS@ \
13@evas_engine_software_16_x11_cflags@
14
15if BUILD_ENGINE_SOFTWARE_16_X11
16
17SOFTWARE_16_X11_SOURCES = \
18evas_engine.c \
19evas_x_buffer.c
20
21SOFTWARE_16_X11_LIBADD = @evas_engine_software_16_x11_libs@
22
23
24includes_HEADERS = Evas_Engine_Software_16_X11.h
25includesdir = $(includedir)/evas-@VMAJ@
26
27if !EVAS_STATIC_BUILD_SOFTWARE_16_X11
28
29pkgdir = $(libdir)/evas/modules/engines/software_16_x11/$(MODULE_ARCH)
30pkg_LTLIBRARIES = module.la
31
32module_la_SOURCES = $(SOFTWARE_16_X11_SOURCES)
33module_la_LIBADD = @EINA_LIBS@ $(SOFTWARE_16_X11_LIBADD) $(top_builddir)/src/lib/libevas.la
34module_la_LDFLAGS = -no-undefined -module -avoid-version
35module_la_LIBTOOLFLAGS = --tag=disable-static
36
37else
38
39noinst_LTLIBRARIES = libevas_engine_software_16_x11.la
40
41libevas_engine_software_16_x11_la_SOURCES = $(SOFTWARE_16_X11_SOURCES)
42libevas_engine_software_16_x11_la_LIBADD = $(SOFTWARE_16_X11_LIBADD)
43
44endif
45endif
46
47EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/software_16_x11/Makefile.in b/libraries/evas/src/modules/engines/software_16_x11/Makefile.in
new file mode 100644
index 0000000..be43dad
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_x11/Makefile.in
@@ -0,0 +1,812 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/software_16_x11
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84am__DEPENDENCIES_1 =
85@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_TRUE@libevas_engine_software_16_x11_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_software_16_x11_la_SOURCES_DIST = evas_engine.c \
87 evas_x_buffer.c
88@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@am__objects_1 = evas_engine.lo \
89@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@ evas_x_buffer.lo
90@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_TRUE@am_libevas_engine_software_16_x11_la_OBJECTS = $(am__objects_1)
91libevas_engine_software_16_x11_la_OBJECTS = \
92 $(am_libevas_engine_software_16_x11_la_OBJECTS)
93AM_V_lt = $(am__v_lt_$(V))
94am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
95am__v_lt_0 = --silent
96@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_TRUE@am_libevas_engine_software_16_x11_la_rpath =
97@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@module_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
98@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@ $(top_builddir)/src/lib/libevas.la
99am__module_la_SOURCES_DIST = evas_engine.c evas_x_buffer.c
100@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@am__objects_2 = \
101@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@ module_la-evas_engine.lo \
102@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@ module_la-evas_x_buffer.lo
103@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@am_module_la_OBJECTS = $(am__objects_2)
104module_la_OBJECTS = $(am_module_la_OBJECTS)
105module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
106 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
107 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
108@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@am_module_la_rpath = -rpath \
109@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@ $(pkgdir)
110DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
111depcomp = $(SHELL) $(top_srcdir)/depcomp
112am__depfiles_maybe = depfiles
113am__mv = mv -f
114COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
115 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
116LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
117 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
118 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
119 $(AM_CFLAGS) $(CFLAGS)
120AM_V_CC = $(am__v_CC_$(V))
121am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
122am__v_CC_0 = @echo " CC " $@;
123AM_V_at = $(am__v_at_$(V))
124am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
125am__v_at_0 = @
126CCLD = $(CC)
127LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
128 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
129 $(AM_LDFLAGS) $(LDFLAGS) -o $@
130AM_V_CCLD = $(am__v_CCLD_$(V))
131am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
132am__v_CCLD_0 = @echo " CCLD " $@;
133AM_V_GEN = $(am__v_GEN_$(V))
134am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
135am__v_GEN_0 = @echo " GEN " $@;
136SOURCES = $(libevas_engine_software_16_x11_la_SOURCES) \
137 $(module_la_SOURCES)
138DIST_SOURCES = $(am__libevas_engine_software_16_x11_la_SOURCES_DIST) \
139 $(am__module_la_SOURCES_DIST)
140am__includes_HEADERS_DIST = Evas_Engine_Software_16_X11.h
141HEADERS = $(includes_HEADERS)
142ETAGS = etags
143CTAGS = ctags
144DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
145ACLOCAL = @ACLOCAL@
146ALLOCA = @ALLOCA@
147AMTAR = @AMTAR@
148AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
149AR = @AR@
150AS = @AS@
151AUTOCONF = @AUTOCONF@
152AUTOHEADER = @AUTOHEADER@
153AUTOMAKE = @AUTOMAKE@
154AWK = @AWK@
155CC = @CC@
156CCDEPMODE = @CCDEPMODE@
157CFLAGS = @CFLAGS@
158CHECK_CFLAGS = @CHECK_CFLAGS@
159CHECK_LIBS = @CHECK_LIBS@
160CPP = @CPP@
161CPPFLAGS = @CPPFLAGS@
162CXX = @CXX@
163CXXCPP = @CXXCPP@
164CXXDEPMODE = @CXXDEPMODE@
165CXXFLAGS = @CXXFLAGS@
166CYGPATH_W = @CYGPATH_W@
167DEFS = @DEFS@
168DEPDIR = @DEPDIR@
169DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
170DIRECTFB_LIBS = @DIRECTFB_LIBS@
171DLLTOOL = @DLLTOOL@
172DSYMUTIL = @DSYMUTIL@
173DUMPBIN = @DUMPBIN@
174ECHO_C = @ECHO_C@
175ECHO_N = @ECHO_N@
176ECHO_T = @ECHO_T@
177ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
178ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
179EDB_CFLAGS = @EDB_CFLAGS@
180EDB_LIBS = @EDB_LIBS@
181EDJE_CFLAGS = @EDJE_CFLAGS@
182EDJE_LIBS = @EDJE_LIBS@
183EET_CFLAGS = @EET_CFLAGS@
184EET_LIBS = @EET_LIBS@
185EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
186EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
187EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
188EGREP = @EGREP@
189EINA_CFLAGS = @EINA_CFLAGS@
190EINA_LIBS = @EINA_LIBS@
191EVAS_CFLAGS = @EVAS_CFLAGS@
192EVAS_LIBS = @EVAS_LIBS@
193EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
194EVIL_CFLAGS = @EVIL_CFLAGS@
195EVIL_LIBS = @EVIL_LIBS@
196EXEEXT = @EXEEXT@
197FGREP = @FGREP@
198FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
199FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
200FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
201FREETYPE_LIBS = @FREETYPE_LIBS@
202FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
203FRIBIDI_LIBS = @FRIBIDI_LIBS@
204GL_EET_CFLAGS = @GL_EET_CFLAGS@
205GL_EET_LIBS = @GL_EET_LIBS@
206GREP = @GREP@
207HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
208HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
209INSTALL = @INSTALL@
210INSTALL_DATA = @INSTALL_DATA@
211INSTALL_PROGRAM = @INSTALL_PROGRAM@
212INSTALL_SCRIPT = @INSTALL_SCRIPT@
213INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
214LD = @LD@
215LDFLAGS = @LDFLAGS@
216LIBOBJS = @LIBOBJS@
217LIBS = @LIBS@
218LIBTOOL = @LIBTOOL@
219LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
220LINEBREAK_LIBS = @LINEBREAK_LIBS@
221LIPO = @LIPO@
222LN_S = @LN_S@
223LTLIBOBJS = @LTLIBOBJS@
224MAKEINFO = @MAKEINFO@
225MKDIR_P = @MKDIR_P@
226MODULE_ARCH = @MODULE_ARCH@
227NM = @NM@
228NMEDIT = @NMEDIT@
229OBJC = @OBJC@
230OBJCDEPMODE = @OBJCDEPMODE@
231OBJCFLAGS = @OBJCFLAGS@
232OBJDUMP = @OBJDUMP@
233OBJEXT = @OBJEXT@
234OTOOL = @OTOOL@
235OTOOL64 = @OTOOL64@
236PACKAGE = @PACKAGE@
237PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
238PACKAGE_NAME = @PACKAGE_NAME@
239PACKAGE_STRING = @PACKAGE_STRING@
240PACKAGE_TARNAME = @PACKAGE_TARNAME@
241PACKAGE_URL = @PACKAGE_URL@
242PACKAGE_VERSION = @PACKAGE_VERSION@
243PATH_SEPARATOR = @PATH_SEPARATOR@
244PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
245PIXMAN_LIBS = @PIXMAN_LIBS@
246PKG_CONFIG = @PKG_CONFIG@
247PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
248PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
249PNG_CFLAGS = @PNG_CFLAGS@
250PNG_LIBS = @PNG_LIBS@
251RANLIB = @RANLIB@
252SDL_CFLAGS = @SDL_CFLAGS@
253SDL_LIBS = @SDL_LIBS@
254SED = @SED@
255SET_MAKE = @SET_MAKE@
256SHELL = @SHELL@
257SHM_OPEN_LINK = @SHM_OPEN_LINK@
258STRIP = @STRIP@
259SVG_CFLAGS = @SVG_CFLAGS@
260SVG_LIBS = @SVG_LIBS@
261VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
262VALGRIND_LIBS = @VALGRIND_LIBS@
263VERSION = @VERSION@
264VMAJ = @VMAJ@
265WIN32_CFLAGS = @WIN32_CFLAGS@
266WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
267XCB_CFLAGS = @XCB_CFLAGS@
268XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
269XCB_GL_LIBS = @XCB_GL_LIBS@
270XCB_LIBS = @XCB_LIBS@
271XEXT_CFLAGS = @XEXT_CFLAGS@
272XEXT_LIBS = @XEXT_LIBS@
273XMKMF = @XMKMF@
274X_CFLAGS = @X_CFLAGS@
275X_EXTRA_LIBS = @X_EXTRA_LIBS@
276X_LIBS = @X_LIBS@
277X_PRE_LIBS = @X_PRE_LIBS@
278abs_builddir = @abs_builddir@
279abs_srcdir = @abs_srcdir@
280abs_top_builddir = @abs_top_builddir@
281abs_top_srcdir = @abs_top_srcdir@
282ac_ct_CC = @ac_ct_CC@
283ac_ct_CXX = @ac_ct_CXX@
284ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
285ac_ct_OBJC = @ac_ct_OBJC@
286altivec_cflags = @altivec_cflags@
287am__include = @am__include@
288am__leading_dot = @am__leading_dot@
289am__quote = @am__quote@
290am__tar = @am__tar@
291am__untar = @am__untar@
292bindir = @bindir@
293build = @build@
294build_alias = @build_alias@
295build_cpu = @build_cpu@
296build_os = @build_os@
297build_vendor = @build_vendor@
298builddir = @builddir@
299datadir = @datadir@
300datarootdir = @datarootdir@
301dlopen_libs = @dlopen_libs@
302docdir = @docdir@
303dvidir = @dvidir@
304edje_cc = @edje_cc@
305efl_doxygen = @efl_doxygen@
306efl_have_doxygen = @efl_have_doxygen@
307evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
308evas_engine_buffer_libs = @evas_engine_buffer_libs@
309evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
310evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
311evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
312evas_engine_directfb_libs = @evas_engine_directfb_libs@
313evas_engine_fb_cflags = @evas_engine_fb_cflags@
314evas_engine_fb_libs = @evas_engine_fb_libs@
315evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
316evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
317evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
318evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
319evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
320evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
321evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
322evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
323evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
324evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
325evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
326evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
327evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
328evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
329evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
330evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
331evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
332evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
333evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
334evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
335evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
336evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
337evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
338evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
339evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
340evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
341evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
342evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
343evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
344evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
345evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
346evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
347evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
348evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
349evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
350evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
351evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
352evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
353evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
354evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
355evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
356evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
357evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
358evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
359evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
360evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
361evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
362evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
363evas_image_loader_png_libs = @evas_image_loader_png_libs@
364evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
365evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
366evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
367evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
368evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
369evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
370evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
371evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
372evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
373evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
374evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
375evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
376exec_prefix = @exec_prefix@
377have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
378have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
379have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
380have_evas_engine_software_x11 = @have_evas_engine_software_x11@
381have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
382have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
383have_lcov = @have_lcov@
384host = @host@
385host_alias = @host_alias@
386host_cpu = @host_cpu@
387host_os = @host_os@
388host_vendor = @host_vendor@
389htmldir = @htmldir@
390includedir = @includedir@
391infodir = @infodir@
392install_sh = @install_sh@
393libdir = @libdir@
394libexecdir = @libexecdir@
395localedir = @localedir@
396localstatedir = @localstatedir@
397lt_ECHO = @lt_ECHO@
398lt_enable_auto_import = @lt_enable_auto_import@
399mandir = @mandir@
400mkdir_p = @mkdir_p@
401oldincludedir = @oldincludedir@
402pdfdir = @pdfdir@
403pkgconfig_requires_private = @pkgconfig_requires_private@
404prefix = @prefix@
405program_transform_name = @program_transform_name@
406psdir = @psdir@
407pthread_cflags = @pthread_cflags@
408pthread_libs = @pthread_libs@
409release_info = @release_info@
410requirement_evas = @requirement_evas@
411sbindir = @sbindir@
412sharedstatedir = @sharedstatedir@
413srcdir = @srcdir@
414sysconfdir = @sysconfdir@
415target_alias = @target_alias@
416top_build_prefix = @top_build_prefix@
417top_builddir = @top_builddir@
418top_srcdir = @top_srcdir@
419version_info = @version_info@
420MAINTAINERCLEANFILES = Makefile.in
421AM_CPPFLAGS = \
422-I. \
423-I$(top_srcdir)/src/lib \
424-I$(top_srcdir)/src/lib/include \
425-I$(top_srcdir)/src/modules/engines \
426-I$(top_srcdir)/src/modules/engines/software_16 \
427@FREETYPE_CFLAGS@ \
428@EINA_CFLAGS@ \
429@PIXMAN_CFLAGS@ \
430@evas_engine_software_16_x11_cflags@
431
432@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@SOFTWARE_16_X11_SOURCES = \
433@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@evas_engine.c \
434@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@evas_x_buffer.c
435
436@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@SOFTWARE_16_X11_LIBADD = @evas_engine_software_16_x11_libs@
437@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@includes_HEADERS = Evas_Engine_Software_16_X11.h
438@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@includesdir = $(includedir)/evas-@VMAJ@
439@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_16_x11/$(MODULE_ARCH)
440@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@pkg_LTLIBRARIES = module.la
441@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@module_la_SOURCES = $(SOFTWARE_16_X11_SOURCES)
442@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@module_la_LIBADD = @EINA_LIBS@ $(SOFTWARE_16_X11_LIBADD) $(top_builddir)/src/lib/libevas.la
443@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@module_la_LDFLAGS = -no-undefined -module -avoid-version
444@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
445@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_TRUE@noinst_LTLIBRARIES = libevas_engine_software_16_x11.la
446@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_TRUE@libevas_engine_software_16_x11_la_SOURCES = $(SOFTWARE_16_X11_SOURCES)
447@BUILD_ENGINE_SOFTWARE_16_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_16_X11_TRUE@libevas_engine_software_16_x11_la_LIBADD = $(SOFTWARE_16_X11_LIBADD)
448EXTRA_DIST = evas_engine.h
449all: all-am
450
451.SUFFIXES:
452.SUFFIXES: .c .lo .o .obj
453$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
454 @for dep in $?; do \
455 case '$(am__configure_deps)' in \
456 *$$dep*) \
457 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
458 && { if test -f $@; then exit 0; else break; fi; }; \
459 exit 1;; \
460 esac; \
461 done; \
462 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_16_x11/Makefile'; \
463 $(am__cd) $(top_srcdir) && \
464 $(AUTOMAKE) --gnu src/modules/engines/software_16_x11/Makefile
465.PRECIOUS: Makefile
466Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
467 @case '$?' in \
468 *config.status*) \
469 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
470 *) \
471 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
472 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
473 esac;
474
475$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
476 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
477
478$(top_srcdir)/configure: $(am__configure_deps)
479 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
480$(ACLOCAL_M4): $(am__aclocal_m4_deps)
481 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
482$(am__aclocal_m4_deps):
483
484clean-noinstLTLIBRARIES:
485 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
486 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
487 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
488 test "$$dir" != "$$p" || dir=.; \
489 echo "rm -f \"$${dir}/so_locations\""; \
490 rm -f "$${dir}/so_locations"; \
491 done
492install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
493 @$(NORMAL_INSTALL)
494 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
495 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
496 list2=; for p in $$list; do \
497 if test -f $$p; then \
498 list2="$$list2 $$p"; \
499 else :; fi; \
500 done; \
501 test -z "$$list2" || { \
502 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
503 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
504 }
505
506uninstall-pkgLTLIBRARIES:
507 @$(NORMAL_UNINSTALL)
508 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
509 for p in $$list; do \
510 $(am__strip_dir) \
511 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
512 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
513 done
514
515clean-pkgLTLIBRARIES:
516 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
517 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
518 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
519 test "$$dir" != "$$p" || dir=.; \
520 echo "rm -f \"$${dir}/so_locations\""; \
521 rm -f "$${dir}/so_locations"; \
522 done
523libevas_engine_software_16_x11.la: $(libevas_engine_software_16_x11_la_OBJECTS) $(libevas_engine_software_16_x11_la_DEPENDENCIES)
524 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_software_16_x11_la_rpath) $(libevas_engine_software_16_x11_la_OBJECTS) $(libevas_engine_software_16_x11_la_LIBADD) $(LIBS)
525module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
526 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
527
528mostlyclean-compile:
529 -rm -f *.$(OBJEXT)
530
531distclean-compile:
532 -rm -f *.tab.c
533
534@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
535@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_x_buffer.Plo@am__quote@
536@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
537@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_x_buffer.Plo@am__quote@
538
539.c.o:
540@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
541@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
542@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
543@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
544@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
545@am__fastdepCC_FALSE@ $(COMPILE) -c $<
546
547.c.obj:
548@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
549@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
550@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
551@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
552@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
553@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
554
555.c.lo:
556@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
557@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
558@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
559@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
560@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
561@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
562
563module_la-evas_engine.lo: evas_engine.c
564@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
565@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
566@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
567@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
568@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
569@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
570
571module_la-evas_x_buffer.lo: evas_x_buffer.c
572@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_x_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_x_buffer.Tpo -c -o module_la-evas_x_buffer.lo `test -f 'evas_x_buffer.c' || echo '$(srcdir)/'`evas_x_buffer.c
573@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_x_buffer.Tpo $(DEPDIR)/module_la-evas_x_buffer.Plo
574@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
575@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_x_buffer.c' object='module_la-evas_x_buffer.lo' libtool=yes @AMDEPBACKSLASH@
576@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
577@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_x_buffer.lo `test -f 'evas_x_buffer.c' || echo '$(srcdir)/'`evas_x_buffer.c
578
579mostlyclean-libtool:
580 -rm -f *.lo
581
582clean-libtool:
583 -rm -rf .libs _libs
584install-includesHEADERS: $(includes_HEADERS)
585 @$(NORMAL_INSTALL)
586 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
587 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
588 for p in $$list; do \
589 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
590 echo "$$d$$p"; \
591 done | $(am__base_list) | \
592 while read files; do \
593 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
594 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
595 done
596
597uninstall-includesHEADERS:
598 @$(NORMAL_UNINSTALL)
599 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
600 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
601 test -n "$$files" || exit 0; \
602 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
603 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
604
605ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
606 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
607 unique=`for i in $$list; do \
608 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
609 done | \
610 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
611 END { if (nonempty) { for (i in files) print i; }; }'`; \
612 mkid -fID $$unique
613tags: TAGS
614
615TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
616 $(TAGS_FILES) $(LISP)
617 set x; \
618 here=`pwd`; \
619 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
620 unique=`for i in $$list; do \
621 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
622 done | \
623 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
624 END { if (nonempty) { for (i in files) print i; }; }'`; \
625 shift; \
626 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
627 test -n "$$unique" || unique=$$empty_fix; \
628 if test $$# -gt 0; then \
629 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
630 "$$@" $$unique; \
631 else \
632 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
633 $$unique; \
634 fi; \
635 fi
636ctags: CTAGS
637CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
638 $(TAGS_FILES) $(LISP)
639 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
640 unique=`for i in $$list; do \
641 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
642 done | \
643 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
644 END { if (nonempty) { for (i in files) print i; }; }'`; \
645 test -z "$(CTAGS_ARGS)$$unique" \
646 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
647 $$unique
648
649GTAGS:
650 here=`$(am__cd) $(top_builddir) && pwd` \
651 && $(am__cd) $(top_srcdir) \
652 && gtags -i $(GTAGS_ARGS) "$$here"
653
654distclean-tags:
655 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
656
657distdir: $(DISTFILES)
658 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
659 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
660 list='$(DISTFILES)'; \
661 dist_files=`for file in $$list; do echo $$file; done | \
662 sed -e "s|^$$srcdirstrip/||;t" \
663 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
664 case $$dist_files in \
665 */*) $(MKDIR_P) `echo "$$dist_files" | \
666 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
667 sort -u` ;; \
668 esac; \
669 for file in $$dist_files; do \
670 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
671 if test -d $$d/$$file; then \
672 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
673 if test -d "$(distdir)/$$file"; then \
674 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
675 fi; \
676 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
677 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
678 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
679 fi; \
680 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
681 else \
682 test -f "$(distdir)/$$file" \
683 || cp -p $$d/$$file "$(distdir)/$$file" \
684 || exit 1; \
685 fi; \
686 done
687check-am: all-am
688check: check-am
689all-am: Makefile $(LTLIBRARIES) $(HEADERS)
690installdirs:
691 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
692 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
693 done
694install: install-am
695install-exec: install-exec-am
696install-data: install-data-am
697uninstall: uninstall-am
698
699install-am: all-am
700 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
701
702installcheck: installcheck-am
703install-strip:
704 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
705 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
706 `test -z '$(STRIP)' || \
707 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
708mostlyclean-generic:
709
710clean-generic:
711
712distclean-generic:
713 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
714 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
715
716maintainer-clean-generic:
717 @echo "This command is intended for maintainers to use"
718 @echo "it deletes files that may require special tools to rebuild."
719 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
720clean: clean-am
721
722clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
723 clean-pkgLTLIBRARIES mostlyclean-am
724
725distclean: distclean-am
726 -rm -rf ./$(DEPDIR)
727 -rm -f Makefile
728distclean-am: clean-am distclean-compile distclean-generic \
729 distclean-tags
730
731dvi: dvi-am
732
733dvi-am:
734
735html: html-am
736
737html-am:
738
739info: info-am
740
741info-am:
742
743install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
744
745install-dvi: install-dvi-am
746
747install-dvi-am:
748
749install-exec-am:
750
751install-html: install-html-am
752
753install-html-am:
754
755install-info: install-info-am
756
757install-info-am:
758
759install-man:
760
761install-pdf: install-pdf-am
762
763install-pdf-am:
764
765install-ps: install-ps-am
766
767install-ps-am:
768
769installcheck-am:
770
771maintainer-clean: maintainer-clean-am
772 -rm -rf ./$(DEPDIR)
773 -rm -f Makefile
774maintainer-clean-am: distclean-am maintainer-clean-generic
775
776mostlyclean: mostlyclean-am
777
778mostlyclean-am: mostlyclean-compile mostlyclean-generic \
779 mostlyclean-libtool
780
781pdf: pdf-am
782
783pdf-am:
784
785ps: ps-am
786
787ps-am:
788
789uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
790
791.MAKE: install-am install-strip
792
793.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
794 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
795 ctags distclean distclean-compile distclean-generic \
796 distclean-libtool distclean-tags distdir dvi dvi-am html \
797 html-am info info-am install install-am install-data \
798 install-data-am install-dvi install-dvi-am install-exec \
799 install-exec-am install-html install-html-am \
800 install-includesHEADERS install-info install-info-am \
801 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
802 install-ps install-ps-am install-strip installcheck \
803 installcheck-am installdirs maintainer-clean \
804 maintainer-clean-generic mostlyclean mostlyclean-compile \
805 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
806 tags uninstall uninstall-am uninstall-includesHEADERS \
807 uninstall-pkgLTLIBRARIES
808
809
810# Tell versions [3.59,3.63) of GNU make to not export all variables.
811# Otherwise a system limit (for SysV at least) may be exceeded.
812.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_16_x11/evas_engine.c b/libraries/evas/src/modules/engines/software_16_x11/evas_engine.c
new file mode 100644
index 0000000..5378972
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_x11/evas_engine.c
@@ -0,0 +1,741 @@
1#include "evas_common.h"
2#include "evas_private.h"
3#include "evas_engine.h"
4#include "Evas_Engine_Software_16_X11.h"
5#include "evas_common_soft16.h"
6
7int _evas_engine_soft16_x11_log_dom = -1;
8/* function tables - filled in later (func and parent func) */
9static Evas_Func func, pfunc;
10/*
11struct xrdb_user
12{
13 time_t last_stat;
14 time_t last_mtime;
15 XrmDatabase db;
16};
17static struct xrdb_user xrdb_user = {0, 0, NULL};
18
19static Eina_Bool
20xrdb_user_query(const char *name, const char *cls, char **type, XrmValue *val)
21{
22 time_t last = xrdb_user.last_stat, now = time(NULL);
23
24 xrdb_user.last_stat = now;
25 if (last != now) // don't stat() more than once every second
26 {
27 struct stat st;
28 const char *home = getenv("HOME");
29 char tmp[PATH_MAX];
30
31 if (!home) goto failed;
32 snprintf(tmp, sizeof(tmp), "%s/.Xdefaults", home);
33 if (stat(tmp, &st) != 0) goto failed;
34 if (xrdb_user.last_mtime != st.st_mtime)
35 {
36 if (xrdb_user.db) XrmDestroyDatabase(xrdb_user.db);
37 xrdb_user.db = XrmGetFileDatabase(tmp);
38 if (!xrdb_user.db) goto failed;
39 xrdb_user.last_mtime = st.st_mtime;
40 }
41 }
42
43 if (!xrdb_user.db) return EINA_FALSE;
44 return XrmGetResource(xrdb_user.db, name, cls, type, val);
45
46 failed:
47 if (xrdb_user.db)
48 {
49 XrmDestroyDatabase(xrdb_user.db);
50 xrdb_user.db = NULL;
51 }
52 xrdb_user.last_mtime = 0;
53 return EINA_FALSE;
54}
55*/
56
57/* engine struct data */
58typedef struct _Render_Engine Render_Engine;
59
60struct _Render_Engine
61{
62 Display *disp;
63 Drawable draw;
64 GC gc;
65 int w, h, rot;
66 Tilebuf *tb;
67 Tilebuf_Rect *rects;
68 Tilebuf_Rect *cur_rect;
69/*
70 XrmDatabase xrdb; // xres - dpi
71 struct { // xres - dpi
72 int dpi; // xres - dpi
73 } xr; // xres - dpi
74 */
75 X_Output_Buffer *shbuf;
76 Soft16_Image *tmp_out; /* used by indirect render, like rotation */
77 Region clip_rects;
78 unsigned char end : 1;
79 unsigned char shm : 1;
80};
81
82/* prototypes we will use here */
83
84static void *eng_info(Evas *e);
85static void eng_info_free(Evas *e, void *info);
86static int eng_setup(Evas *e, void *info);
87static void eng_output_free(void *data);
88static void eng_output_resize(void *data, int w, int h);
89static void eng_output_tile_size_set(void *data, int w, int h);
90static void eng_output_redraws_rect_add(void *data, int x, int y, int w, int h);
91static void eng_output_redraws_rect_del(void *data, int x, int y, int w, int h);
92static void eng_output_redraws_clear(void *data);
93static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
94static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
95static void eng_output_flush(void *data);
96static void eng_output_idle_flush(void *data);
97
98/* engine api this module provides */
99static void *
100eng_info(Evas *e)
101{
102 Evas_Engine_Info_Software_16_X11 *info;
103
104 info = calloc(1, sizeof(Evas_Engine_Info_Software_16_X11));
105 if (!info) return NULL;
106 info->magic.magic = rand();
107 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
108 return info;
109 e = NULL;
110}
111
112static void
113eng_info_free(Evas *e __UNUSED__, void *info)
114{
115 Evas_Engine_Info_Software_16_X11 *in;
116 in = (Evas_Engine_Info_Software_16_X11 *)info;
117 free(in);
118}
119
120static void
121_tmp_out_alloc(Render_Engine *re)
122{
123 Tilebuf_Rect *r;
124 unsigned int w = 0, h = 0;
125
126 EINA_INLIST_FOREACH(re->rects, r)
127 {
128 if (r->w > (int)w) w = r->w;
129 if (r->h > (int)h) h = r->h;
130 }
131
132 if (re->tmp_out)
133 {
134 if ((re->tmp_out->cache_entry.w < w) || (re->tmp_out->cache_entry.h < h))
135 {
136 evas_cache_image_drop(&re->tmp_out->cache_entry);
137 re->tmp_out = NULL;
138 }
139 }
140
141 if (!re->tmp_out)
142 {
143 Soft16_Image *im;
144
145 im = (Soft16_Image *) evas_cache_image_empty(evas_common_soft16_image_cache_get());
146 im->cache_entry.flags.alpha = 0;
147 evas_cache_image_surface_alloc(&im->cache_entry, w, h);
148
149 re->tmp_out = im;
150 }
151}
152
153
154static int
155eng_setup(Evas *e, void *in)
156{
157 Render_Engine *re;
158 Evas_Engine_Info_Software_16_X11 *info;
159/* X_Output_Buffer *xob; */
160 XGCValues gcv;
161
162 info = (Evas_Engine_Info_Software_16_X11 *)in;
163 if (!e->engine.data.output)
164 {
165 /* the only check - simplistic, i know, but enough for this
166 * "special purpose" engine. Remember it is meant to be used
167 * for limited power devices that have a 16bit display mode
168 * and no real other acceleration, and high resolution so we
169 * can pre-dither into 16bpp. */
170// if (DefaultDepth(info->info.display,
171// DefaultScreen(info->info.display)) != 16)
172// return;
173 /* do common routine init - we wil at least use it for core
174 * image loading and font loading/glyph rendering & placement */
175 evas_common_cpu_init();
176
177 evas_common_blend_init();
178 evas_common_image_init();
179 evas_common_convert_init();
180 evas_common_scale_init();
181 evas_common_rectangle_init();
182 evas_common_polygon_init();
183 evas_common_line_init();
184 evas_common_font_init();
185 evas_common_draw_init();
186 evas_common_tilebuf_init();
187 evas_common_soft16_image_init();
188
189 /* render engine specific data */
190 re = calloc(1, sizeof(Render_Engine));
191 if (!re)
192 return 0;
193 e->engine.data.output = re;
194 re->disp = info->info.display;
195 re->draw = info->info.drawable;
196 re->gc = XCreateGC(re->disp, re->draw, 0, &gcv);
197 re->w = e->output.w;
198 re->h = e->output.h;
199 re->rot = info->info.rotation;
200 re->tb = evas_common_tilebuf_new(e->output.w, e->output.h);
201 if (re->tb)
202 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
203 }
204 else
205 {
206 /* we changed the info after first init - do a re-eval where
207 * appropriate */
208// if (DefaultDepth(info->info.display,
209// DefaultScreen(info->info.display)) != 16)
210// return;
211 re = e->engine.data.output;
212 if (re->tb) evas_common_tilebuf_free(re->tb);
213 re->disp = info->info.display;
214 re->draw = info->info.drawable;
215 XFreeGC(re->disp, re->gc);
216 re->gc = XCreateGC(re->disp, re->draw, 0, &gcv);
217 re->w = e->output.w;
218 re->h = e->output.h;
219 re->rot = info->info.rotation;
220 re->tb = evas_common_tilebuf_new(e->output.w, e->output.h);
221 if (re->tb)
222 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
223 if (re->tmp_out)
224 {
225 evas_cache_image_drop(&re->tmp_out->cache_entry);
226 re->tmp_out = NULL;
227 }
228 }
229 if (!e->engine.data.output) return 0;
230
231/*
232 {
233 int status;
234 char *type = NULL;
235 XrmValue val;
236
237 re->xr.dpi = 75000; // dpy * 1000
238
239 status = xrdb_user_query("Xft.dpi", "Xft.Dpi", &type, &val);
240 if ((!status) || (!type))
241 {
242 if (!re->xrdb) re->xrdb = XrmGetDatabase(re->disp);
243 if (re->xrdb)
244 status = XrmGetResource(re->xrdb,
245 "Xft.dpi", "Xft.Dpi", &type, &val);
246 }
247
248 if ((status) && (type))
249 {
250 if (!strcmp(type, "String"))
251 {
252 const char *str, *dp;
253
254 str = val.addr;
255 dp = strchr(str, '.');
256 if (!dp) dp = strchr(str, ',');
257
258 if (dp)
259 {
260 int subdpi, len, i;
261 char *buf;
262
263 buf = alloca(dp - str + 1);
264 strncpy(buf, str, dp - str);
265 buf[dp - str] = 0;
266 len = strlen(dp + 1);
267 subdpi = atoi(dp + 1);
268
269 if (len < 3)
270 {
271 for (i = len; i < 3; i++) subdpi *= 10;
272 }
273 else if (len > 3)
274 {
275 for (i = len; i > 3; i--) subdpi /= 10;
276 }
277 re->xr.dpi = atoi(buf) * 1000;
278 }
279 else
280 re->xr.dpi = atoi(str) * 1000;
281 }
282 }
283 evas_common_font_dpi_set(re->xr.dpi / 1000);
284 }
285 */
286
287 /* add a draw context if we dont have one */
288 if (!e->engine.data.context)
289 e->engine.data.context =
290 e->engine.func->context_new(e->engine.data.output);
291 /* check if the display can do shm */
292 re->shm = evas_software_16_x11_x_can_do_shm(re->disp);
293
294 return 1;
295}
296
297static void
298eng_output_free(void *data)
299{
300 Render_Engine *re;
301
302 re = (Render_Engine *)data;
303
304// NOTE: XrmGetDatabase() result is shared per connection, do not free it.
305// if (re->xrdb) XrmDestroyDatabase(re->xrdb);
306
307 if (re->shbuf) evas_software_16_x11_x_output_buffer_free(re->shbuf, 0);
308 if (re->clip_rects) XDestroyRegion(re->clip_rects);
309 if (re->gc) XFreeGC(re->disp, re->gc);
310 if (re->tb) evas_common_tilebuf_free(re->tb);
311 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
312 if (re->tmp_out) evas_cache_image_drop(&re->tmp_out->cache_entry);
313 free(re);
314
315 evas_common_font_shutdown();
316 evas_common_image_shutdown();
317 evas_common_soft16_image_shutdown();
318}
319
320static void
321eng_output_resize(void *data, int w, int h)
322{
323 Render_Engine *re;
324
325 re = (Render_Engine *)data;
326
327 if ((re->w == w) && (re->h == h)) return;
328
329 evas_common_tilebuf_free(re->tb);
330 re->w = w;
331 re->h = h;
332 re->tb = evas_common_tilebuf_new(w, h);
333 if (re->tb)
334 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
335 if (re->shbuf)
336 {
337 evas_software_16_x11_x_output_buffer_free(re->shbuf, 0);
338 re->shbuf = NULL;
339 }
340 if (re->clip_rects)
341 {
342 XDestroyRegion(re->clip_rects);
343 re->clip_rects = NULL;
344 }
345 if (re->tmp_out)
346 {
347 evas_cache_image_drop(&re->tmp_out->cache_entry);
348 re->tmp_out = NULL;
349 }
350}
351
352static void
353eng_output_tile_size_set(void *data, int w, int h)
354{
355 Render_Engine *re;
356
357 re = (Render_Engine *)data;
358 evas_common_tilebuf_set_tile_size(re->tb, w, h);
359}
360
361static void
362eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
363{
364 Render_Engine *re;
365
366 re = (Render_Engine *)data;
367 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
368}
369
370static void
371eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
372{
373 Render_Engine *re;
374
375 re = (Render_Engine *)data;
376 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
377}
378
379static void
380eng_output_redraws_clear(void *data)
381{
382 Render_Engine *re;
383
384 re = (Render_Engine *)data;
385 evas_common_tilebuf_clear(re->tb);
386}
387
388static inline void
389_output_buffer_alloc(Render_Engine *re)
390{
391 int w, h;
392 if (re->shbuf) return;
393
394 if ((re->rot == 0) || (re->rot == 180))
395 {
396 w = re->w;
397 h = re->h;
398 }
399 else
400 {
401 w = re->h;
402 h = re->w;
403 }
404
405 re->shbuf = evas_software_16_x11_x_output_buffer_new
406 (re->disp, DefaultVisual(re->disp, DefaultScreen(re->disp)),
407 DefaultDepth(re->disp, DefaultScreen(re->disp)),
408 w, h, 1, NULL);
409}
410
411static void *
412eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
413{
414 Render_Engine *re;
415 Tilebuf_Rect *rect;
416 int ux, uy, uw, uh;
417
418 re = (Render_Engine *)data;
419 if (re->end)
420 {
421 re->end = 0;
422 return NULL;
423 }
424 if (!re->rects)
425 {
426 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
427 if (!re->rects) return NULL;
428
429 re->cur_rect = re->rects;
430 _output_buffer_alloc(re);
431 if (re->rot != 0) _tmp_out_alloc(re); /* grows if required */
432 }
433 if (!re->cur_rect)
434 {
435 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
436 re->rects = NULL;
437 return NULL;
438 }
439 rect = re->cur_rect;
440 ux = rect->x; uy = rect->y; uw = rect->w; uh = rect->h;
441 re->cur_rect = (Tilebuf_Rect *)((EINA_INLIST_GET(re->cur_rect))->next);
442 if (!re->cur_rect)
443 {
444 evas_common_tilebuf_free_render_rects(re->rects);
445 re->rects = NULL;
446 re->end = 1;
447 }
448
449 *x = ux; *y = uy; *w = uw; *h = uh;
450 if (re->rot == 0)
451 {
452 *cx = ux; *cy = uy; *cw = uw; *ch = uh;
453 return re->shbuf->im;
454 }
455 else
456 {
457 *cx = 0; *cy = 0; *cw = uw; *ch = uh;
458 return re->tmp_out;
459 }
460}
461
462static void
463_blit_rot_90(Soft16_Image *dst, const Soft16_Image *src,
464 int out_x, int out_y, int w, int h)
465{
466 DATA16 *dp, *sp;
467 int x, y;
468
469 sp = src->pixels;
470 dp = dst->pixels + (out_x +
471 (w + out_y - 1) * dst->stride);
472
473 for (y = 0; y < h; y++)
474 {
475 DATA16 *dp_itr, *sp_itr;
476
477 sp_itr = sp;
478 dp_itr = dp;
479
480 for (x = 0; x < w; x++)
481 {
482 *dp_itr = *sp_itr;
483
484 sp_itr++;
485 dp_itr -= dst->stride;
486 }
487 sp += src->stride;
488 dp++;
489 }
490}
491
492static void
493_blit_rot_180(Soft16_Image *dst, const Soft16_Image *src,
494 int out_x, int out_y, int w, int h)
495{
496 DATA16 *dp, *sp;
497 int x, y;
498
499 sp = src->pixels;
500 dp = dst->pixels + ((w + out_x - 1) +
501 (h + out_y - 1) * dst->stride);
502
503 for (y = 0; y < h; y++)
504 {
505 DATA16 *dp_itr, *sp_itr;
506
507 sp_itr = sp;
508 dp_itr = dp;
509
510 for (x = 0; x < w; x++)
511 {
512 *dp_itr = *sp_itr;
513
514 sp_itr++;
515 dp_itr--;
516 }
517 sp += src->stride;
518 dp -= dst->stride;
519 }
520}
521
522static void
523_blit_rot_270(Soft16_Image *dst, const Soft16_Image *src,
524 int out_x, int out_y, int w, int h)
525{
526 DATA16 *dp, *sp;
527 int x, y;
528
529 sp = src->pixels;
530 dp = dst->pixels + ((h + out_x - 1) +
531 out_y * dst->stride);
532
533 for (y = 0; y < h; y++)
534 {
535 DATA16 *dp_itr, *sp_itr;
536
537 sp_itr = sp;
538 dp_itr = dp;
539
540 for (x = 0; x < w; x++)
541 {
542 *dp_itr = *sp_itr;
543
544 sp_itr++;
545 dp_itr += dst->stride;
546 }
547 sp += src->stride;
548 dp--;
549 }
550}
551
552static void
553_tmp_out_process(Render_Engine *re, int out_x, int out_y, int w, int h)
554{
555 Soft16_Image *d, *s;
556
557 d = re->shbuf->im;
558 s = re->tmp_out;
559
560 if ((w < 1) || (h < 1) ||
561 (out_x >= (int)d->cache_entry.w) || (out_y >= (int)d->cache_entry.h))
562 return;
563
564 if (re->rot == 90)
565 _blit_rot_90(d, s, out_x, out_y, w, h);
566 else if (re->rot == 180)
567 _blit_rot_180(d, s, out_x, out_y, w, h);
568 else if (re->rot == 270)
569 _blit_rot_270(d, s, out_x, out_y, w, h);
570}
571
572static void
573eng_output_redraws_next_update_push(void *data, void *surface __UNUSED__, int x, int y, int w, int h)
574{
575 Render_Engine *re;
576 XRectangle r = { 0, 0, 0, 0 };
577
578 re = (Render_Engine *)data;
579
580 if (!re->clip_rects)
581 re->clip_rects = XCreateRegion();
582
583 if (re->rot == 0)
584 {
585 r.x = x;
586 r.y = y;
587 r.width = w;
588 r.height = h;
589 }
590 else if (re->rot == 90)
591 {
592 r.x = y;
593 r.y = re->w - w - x;
594 r.width = h;
595 r.height = w;
596 }
597 else if (re->rot == 180)
598 {
599 r.x = re->w - w - x;
600 r.y = re->h - h - y;
601 r.width = w;
602 r.height = h;
603 }
604 else if (re->rot == 270)
605 {
606 r.x = re->h - h - y;
607 r.y = x;
608 r.width = h;
609 r.height = w;
610 }
611
612 if (re->rot != 0)
613 _tmp_out_process(re, r.x, r.y, w, h);
614 XUnionRectWithRegion(&r, re->clip_rects, re->clip_rects);
615}
616
617static void
618eng_output_flush(void *data)
619{
620 Render_Engine *re;
621
622 re = (Render_Engine *)data;
623 if (re->clip_rects)
624 {
625 XSetRegion(re->disp, re->gc, re->clip_rects);
626 XDestroyRegion(re->clip_rects);
627 re->clip_rects = NULL;
628 }
629 else return;
630
631 evas_software_16_x11_x_output_buffer_paste
632 (re->shbuf, re->draw, re->gc, 0, 0, re->shbuf->im->cache_entry.w, re->shbuf->im->cache_entry.h, 1);
633 XSetClipMask(re->disp, re->gc, None);
634}
635
636static void
637eng_output_idle_flush(void *data)
638{
639 Render_Engine *re;
640
641 re = (Render_Engine *)data;
642 if (re->shbuf)
643 {
644 evas_software_16_x11_x_output_buffer_free(re->shbuf, 0);
645 re->shbuf = NULL;
646 }
647 if (re->clip_rects)
648 {
649 XDestroyRegion(re->clip_rects);
650 re->clip_rects = NULL;
651 }
652 if (re->tmp_out)
653 {
654 evas_cache_image_drop(&re->tmp_out->cache_entry);
655 re->tmp_out = NULL;
656 }
657}
658
659static Eina_Bool
660eng_canvas_alpha_get(void *data __UNUSED__, void *context __UNUSED__)
661{
662 return EINA_FALSE;
663}
664
665/* module advertising code */
666static int
667module_open(Evas_Module *em)
668{
669 static Eina_Bool xrm_inited = EINA_FALSE;
670 if (!xrm_inited)
671 {
672 xrm_inited = EINA_TRUE;
673 XrmInitialize();
674 }
675
676 if (!em) return 0;
677 /* get whatever engine module we inherit from */
678 if (!_evas_module_engine_inherit(&pfunc, "software_16")) return 0;
679 _evas_engine_soft16_x11_log_dom = eina_log_domain_register
680 ("evas-software_16_x11", EVAS_DEFAULT_LOG_COLOR);
681 if (_evas_engine_soft16_x11_log_dom < 0)
682 {
683 EINA_LOG_ERR("Can not create a module log domain.");
684 return 0;
685 }
686
687 /* store it for later use */
688 func = pfunc;
689 /* now to override methods */
690#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
691 ORD(info);
692 ORD(info_free);
693 ORD(setup);
694 ORD(canvas_alpha_get);
695 ORD(output_free);
696 ORD(output_resize);
697 ORD(output_tile_size_set);
698 ORD(output_redraws_rect_add);
699 ORD(output_redraws_rect_del);
700 ORD(output_redraws_clear);
701 ORD(output_redraws_next_update_get);
702 ORD(output_redraws_next_update_push);
703 ORD(output_flush);
704 ORD(output_idle_flush);
705 /* now advertise out own api */
706 em->functions = (void *)(&func);
707 return 1;
708}
709
710static void
711module_close(Evas_Module *em __UNUSED__)
712{
713 eina_log_domain_unregister(_evas_engine_soft16_x11_log_dom);
714/*
715 if (xrdb_user.db)
716 {
717 XrmDestroyDatabase(xrdb_user.db);
718 xrdb_user.last_stat = 0;
719 xrdb_user.last_mtime = 0;
720 xrdb_user.db = NULL;
721 }
722 */
723}
724
725static Evas_Module_Api evas_modapi =
726{
727 EVAS_MODULE_API_VERSION,
728 "software_16_x11",
729 "none",
730 {
731 module_open,
732 module_close
733 }
734};
735
736EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_16_x11);
737
738#ifndef EVAS_STATIC_BUILD_SOFTWARE_16_X11
739EVAS_EINA_MODULE_DEFINE(engine, software_16_x11);
740#endif
741
diff --git a/libraries/evas/src/modules/engines/software_16_x11/evas_engine.h b/libraries/evas/src/modules/engines/software_16_x11/evas_engine.h
new file mode 100644
index 0000000..066ef50
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_x11/evas_engine.h
@@ -0,0 +1,63 @@
1#ifndef EVAS_ENGINE_H
2#define EVAS_ENGINE_H
3
4#include <X11/Xlib.h>
5#include <X11/Xutil.h>
6#include <X11/Xatom.h>
7#include <X11/extensions/XShm.h>
8#include <X11/Xresource.h> // xres - dpi
9#include <sys/ipc.h>
10#include <sys/shm.h>
11#include "evas_common.h"
12#include "evas_common_soft16.h"
13
14extern int _evas_engine_soft16_x11_log_dom;
15#ifdef ERR
16# undef ERR
17#endif
18#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_soft16_x11_log_dom, __VA_ARGS__)
19
20#ifdef DBG
21# undef DBG
22#endif
23#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_soft16_x11_log_dom, __VA_ARGS__)
24
25#ifdef INF
26# undef INF
27#endif
28#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_soft16_x11_log_dom, __VA_ARGS__)
29
30#ifdef WRN
31# undef WRN
32#endif
33#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_soft16_x11_log_dom, __VA_ARGS__)
34
35#ifdef CRIT
36# undef CRIT
37#endif
38#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_soft16_x11_log_dom, __VA_ARGS__)
39
40typedef struct _X_Output_Buffer X_Output_Buffer;
41
42struct _X_Output_Buffer
43{
44 Soft16_Image *im;
45 Display *display;
46 XImage *xim;
47 XShmSegmentInfo *shm_info;
48 void *data;
49};
50
51/****/
52void evas_software_16_x11_x_init (void);
53
54int evas_software_16_x11_x_can_do_shm (Display *d);
55X_Output_Buffer *evas_software_16_x11_x_output_buffer_new (Display *d, Visual *v, int depth, int w, int h, int try_shm, void *data);
56void evas_software_16_x11_x_output_buffer_free (X_Output_Buffer *xob, int sync);
57void evas_software_16_x11_x_output_buffer_paste (X_Output_Buffer *xob, Drawable d, GC gc, int x, int y, int w, int h, int sync);
58DATA8 *evas_software_16_x11_x_output_buffer_data (X_Output_Buffer *xob, int *bytes_per_line_ret);
59int evas_software_16_x11_x_output_buffer_depth (X_Output_Buffer *xob);
60int evas_software_16_x11_x_output_buffer_byte_order (X_Output_Buffer *xob);
61int evas_software_16_x11_x_output_buffer_bit_order (X_Output_Buffer *xob);
62
63#endif
diff --git a/libraries/evas/src/modules/engines/software_16_x11/evas_x_buffer.c b/libraries/evas/src/modules/engines/software_16_x11/evas_x_buffer.c
new file mode 100644
index 0000000..32784b0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_16_x11/evas_x_buffer.c
@@ -0,0 +1,186 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4static int _x_err = 0;
5
6int
7evas_software_16_x11_x_can_do_shm(Display *d)
8{
9 static Display *cached_d = NULL;
10 static int cached_result = 0;
11
12 if (d == cached_d) return cached_result;
13 cached_d = d;
14 if (XShmQueryExtension(d))
15 {
16 X_Output_Buffer *xob;
17
18 xob = evas_software_16_x11_x_output_buffer_new
19 (d, DefaultVisual(d, DefaultScreen(d)),
20 DefaultDepth(d, DefaultScreen(d)), 16, 16, 2, NULL);
21 if (!xob)
22 {
23 cached_result = 0;
24 return 0;
25 }
26 evas_software_16_x11_x_output_buffer_free(xob, 1);
27 cached_result = 1;
28 return 1;
29 }
30 cached_result = 0;
31 return 0;
32}
33
34static void
35x_output_tmp_x_err(Display * d __UNUSED__, XErrorEvent * ev __UNUSED__)
36{
37 _x_err = 1;
38 return;
39}
40
41X_Output_Buffer *
42evas_software_16_x11_x_output_buffer_new(Display *d, Visual *v, int depth, int w, int h, int try_shm, void *data)
43{
44 X_Output_Buffer *xob;
45
46 xob = calloc(1, sizeof(X_Output_Buffer));
47 if (!xob) return NULL;
48
49 xob->display = d;
50 xob->xim = NULL;
51 xob->shm_info = NULL;
52
53 if (try_shm > 0)
54 {
55 xob->shm_info = malloc(sizeof(XShmSegmentInfo));
56 if (xob->shm_info)
57 {
58 xob->xim = XShmCreateImage(d, v, depth, ZPixmap, NULL,
59 xob->shm_info, w, h);
60 if (xob->xim)
61 {
62 xob->shm_info->shmid = shmget(IPC_PRIVATE,
63 xob->xim->bytes_per_line *
64 xob->xim->height,
65 IPC_CREAT | 0777);
66 if (xob->shm_info->shmid >= 0)
67 {
68 xob->shm_info->readOnly = False;
69 xob->shm_info->shmaddr = xob->xim->data =
70 shmat(xob->shm_info->shmid, 0, 0);
71 if (xob->shm_info->shmaddr)
72 {
73 XErrorHandler ph;
74
75 XSync(d, False);
76 _x_err = 0;
77 ph = XSetErrorHandler((XErrorHandler)
78 x_output_tmp_x_err);
79 XShmAttach(d, xob->shm_info);
80 XSync(d, False);
81 XSetErrorHandler((XErrorHandler)ph);
82 if (!_x_err)
83 {
84 xob->im = (Soft16_Image *) evas_cache_image_data(evas_common_soft16_image_cache_get(), w, h, (DATA32 *) xob->xim->data, 0, EVAS_COLORSPACE_RGB565_A5P);
85 if (xob->im)
86 xob->im->stride = xob->xim->bytes_per_line / sizeof(DATA16);
87 return xob;
88 }
89 }
90 shmdt(xob->shm_info->shmaddr);
91 shmctl(xob->shm_info->shmid, IPC_RMID, 0);
92 }
93 if (xob->xim) XDestroyImage(xob->xim);
94 xob->xim = NULL;
95 }
96 if (xob->shm_info) free(xob->shm_info);
97 xob->shm_info = NULL;
98 }
99 }
100
101 if (try_shm > 1) return NULL;
102
103 xob->xim = XCreateImage(d, v, depth, ZPixmap, 0, data, w, h, 32, 0);
104 if (!xob->xim)
105 {
106 free(xob);
107 return NULL;
108 }
109
110 xob->data = data;
111
112 if (!xob->xim->data)
113 {
114 xob->xim->data = malloc(xob->xim->bytes_per_line * xob->xim->height);
115 if (!xob->xim->data)
116 {
117 XDestroyImage(xob->xim);
118 free(xob);
119 return NULL;
120 }
121 }
122 if (xob->im)
123 evas_cache_image_drop(&xob->im->cache_entry);
124
125 xob->im = (Soft16_Image *) evas_cache_image_data(evas_common_soft16_image_cache_get(), w, h, (DATA32 *) xob->xim->data, 0, EVAS_COLORSPACE_RGB565_A5P);
126 if (xob->im)
127 xob->im->stride = xob->xim->bytes_per_line / sizeof(DATA16);
128 return xob;
129}
130
131void
132evas_software_16_x11_x_output_buffer_free(X_Output_Buffer *xob, int sync)
133{
134 if (xob->shm_info)
135 {
136 if (sync) XSync(xob->display, False);
137 XShmDetach(xob->display, xob->shm_info);
138 XDestroyImage(xob->xim);
139 shmdt(xob->shm_info->shmaddr);
140 shmctl(xob->shm_info->shmid, IPC_RMID, 0);
141 free(xob->shm_info);
142 }
143 else
144 {
145 if (xob->data) xob->xim->data = NULL;
146 XDestroyImage(xob->xim);
147 }
148 free(xob);
149}
150
151void
152evas_software_16_x11_x_output_buffer_paste(X_Output_Buffer *xob, Drawable d, GC gc, int x, int y, int w, int h, int sync)
153{
154 if (xob->shm_info)
155 {
156 XShmPutImage(xob->display, d, gc, xob->xim, 0, 0, x, y, w, h, False);
157 if (sync) XSync(xob->display, False);
158 }
159 else
160 XPutImage(xob->display, d, gc, xob->xim, 0, 0, x, y, w, h);
161}
162
163DATA8 *
164evas_software_16_x11_x_output_buffer_data(X_Output_Buffer *xob, int *bytes_per_line_ret)
165{
166 if (bytes_per_line_ret) *bytes_per_line_ret = xob->xim->bytes_per_line;
167 return (DATA8*) xob->xim->data;
168}
169
170int
171evas_software_16_x11_x_output_buffer_depth(X_Output_Buffer *xob)
172{
173 return xob->xim->bits_per_pixel;
174}
175
176int
177evas_software_16_x11_x_output_buffer_byte_order(X_Output_Buffer *xob)
178{
179 return xob->xim->byte_order;
180}
181
182int
183evas_software_16_x11_x_output_buffer_bit_order(X_Output_Buffer *xob)
184{
185 return xob->xim->bitmap_bit_order;
186}
diff --git a/libraries/evas/src/modules/engines/software_8/Makefile.am b/libraries/evas/src/modules/engines/software_8/Makefile.am
new file mode 100644
index 0000000..145b766
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_8/Makefile.am
@@ -0,0 +1,39 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9@FREETYPE_CFLAGS@ \
10@PIXMAN_CFLAGS@ \
11@EINA_CFLAGS@
12
13AM_CFLAGS = @WIN32_CFLAGS@
14
15if BUILD_ENGINE_SOFTWARE_8
16
17SOFTWARE_8_SOURCES = evas_engine.c
18
19
20if !EVAS_STATIC_BUILD_SOFTWARE_8_X11
21
22pkgdir = $(libdir)/evas/modules/engines/software_8/$(MODULE_ARCH)
23pkg_LTLIBRARIES = module.la
24module_la_SOURCES = $(SOFTWARE_8_SOURCES)
25module_la_LIBADD = @EINA_LIBS@ $(top_builddir)/src/lib/libevas.la
26module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
27module_la_LIBTOOLFLAGS = --tag=disable-static
28
29else
30
31noinst_LTLIBRARIES = libevas_engine_software_8.la
32
33libevas_engine_software_8_la_SOURCES = $(SOFTWARE_8_SOURCES)
34
35endif
36endif
37
38EXTRA_DIST = \
39evas_engine.c
diff --git a/libraries/evas/src/modules/engines/software_8/Makefile.in b/libraries/evas/src/modules/engines/software_8/Makefile.in
new file mode 100644
index 0000000..bf16fcf
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_8/Makefile.in
@@ -0,0 +1,764 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/modules/engines/software_8
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_coverage.m4 \
42 $(top_srcdir)/m4/efl_doxygen.m4 \
43 $(top_srcdir)/m4/efl_fnmatch.m4 \
44 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
45 $(top_srcdir)/m4/evas_check_engine.m4 \
46 $(top_srcdir)/m4/evas_check_loader.m4 \
47 $(top_srcdir)/m4/evas_converter.m4 \
48 $(top_srcdir)/m4/evas_dither.m4 \
49 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
50 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
51 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
52 $(top_srcdir)/configure.ac
53am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
54 $(ACLOCAL_M4)
55mkinstalldirs = $(install_sh) -d
56CONFIG_HEADER = $(top_builddir)/config.h
57CONFIG_CLEAN_FILES =
58CONFIG_CLEAN_VPATH_FILES =
59am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
60am__vpath_adj = case $$p in \
61 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
62 *) f=$$p;; \
63 esac;
64am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
65am__install_max = 40
66am__nobase_strip_setup = \
67 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
68am__nobase_strip = \
69 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
70am__nobase_list = $(am__nobase_strip_setup); \
71 for p in $$list; do echo "$$p $$p"; done | \
72 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
73 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
74 if (++n[$$2] == $(am__install_max)) \
75 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
76 END { for (dir in files) print dir, files[dir] }'
77am__base_list = \
78 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
79 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
80am__installdirs = "$(DESTDIR)$(pkgdir)"
81LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
82libevas_engine_software_8_la_LIBADD =
83am__libevas_engine_software_8_la_SOURCES_DIST = evas_engine.c
84@BUILD_ENGINE_SOFTWARE_8_TRUE@am__objects_1 = evas_engine.lo
85@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_TRUE@am_libevas_engine_software_8_la_OBJECTS = $(am__objects_1)
86libevas_engine_software_8_la_OBJECTS = \
87 $(am_libevas_engine_software_8_la_OBJECTS)
88AM_V_lt = $(am__v_lt_$(V))
89am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
90am__v_lt_0 = --silent
91@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_TRUE@am_libevas_engine_software_8_la_rpath =
92@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la
93am__module_la_SOURCES_DIST = evas_engine.c
94@BUILD_ENGINE_SOFTWARE_8_TRUE@am__objects_2 = \
95@BUILD_ENGINE_SOFTWARE_8_TRUE@ module_la-evas_engine.lo
96@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@am_module_la_OBJECTS = $(am__objects_2)
97module_la_OBJECTS = $(am_module_la_OBJECTS)
98module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
99 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
100 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
101@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@am_module_la_rpath = -rpath \
102@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@ $(pkgdir)
103DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
104depcomp = $(SHELL) $(top_srcdir)/depcomp
105am__depfiles_maybe = depfiles
106am__mv = mv -f
107COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
108 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
109LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
110 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
111 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
112 $(AM_CFLAGS) $(CFLAGS)
113AM_V_CC = $(am__v_CC_$(V))
114am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
115am__v_CC_0 = @echo " CC " $@;
116AM_V_at = $(am__v_at_$(V))
117am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
118am__v_at_0 = @
119CCLD = $(CC)
120LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
121 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
122 $(AM_LDFLAGS) $(LDFLAGS) -o $@
123AM_V_CCLD = $(am__v_CCLD_$(V))
124am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
125am__v_CCLD_0 = @echo " CCLD " $@;
126AM_V_GEN = $(am__v_GEN_$(V))
127am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
128am__v_GEN_0 = @echo " GEN " $@;
129SOURCES = $(libevas_engine_software_8_la_SOURCES) $(module_la_SOURCES)
130DIST_SOURCES = $(am__libevas_engine_software_8_la_SOURCES_DIST) \
131 $(am__module_la_SOURCES_DIST)
132ETAGS = etags
133CTAGS = ctags
134DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
135ACLOCAL = @ACLOCAL@
136ALLOCA = @ALLOCA@
137AMTAR = @AMTAR@
138AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
139AR = @AR@
140AS = @AS@
141AUTOCONF = @AUTOCONF@
142AUTOHEADER = @AUTOHEADER@
143AUTOMAKE = @AUTOMAKE@
144AWK = @AWK@
145CC = @CC@
146CCDEPMODE = @CCDEPMODE@
147CFLAGS = @CFLAGS@
148CHECK_CFLAGS = @CHECK_CFLAGS@
149CHECK_LIBS = @CHECK_LIBS@
150CPP = @CPP@
151CPPFLAGS = @CPPFLAGS@
152CXX = @CXX@
153CXXCPP = @CXXCPP@
154CXXDEPMODE = @CXXDEPMODE@
155CXXFLAGS = @CXXFLAGS@
156CYGPATH_W = @CYGPATH_W@
157DEFS = @DEFS@
158DEPDIR = @DEPDIR@
159DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
160DIRECTFB_LIBS = @DIRECTFB_LIBS@
161DLLTOOL = @DLLTOOL@
162DSYMUTIL = @DSYMUTIL@
163DUMPBIN = @DUMPBIN@
164ECHO_C = @ECHO_C@
165ECHO_N = @ECHO_N@
166ECHO_T = @ECHO_T@
167ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
168ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
169EDB_CFLAGS = @EDB_CFLAGS@
170EDB_LIBS = @EDB_LIBS@
171EDJE_CFLAGS = @EDJE_CFLAGS@
172EDJE_LIBS = @EDJE_LIBS@
173EET_CFLAGS = @EET_CFLAGS@
174EET_LIBS = @EET_LIBS@
175EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
176EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
177EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
178EGREP = @EGREP@
179EINA_CFLAGS = @EINA_CFLAGS@
180EINA_LIBS = @EINA_LIBS@
181EVAS_CFLAGS = @EVAS_CFLAGS@
182EVAS_LIBS = @EVAS_LIBS@
183EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
184EVIL_CFLAGS = @EVIL_CFLAGS@
185EVIL_LIBS = @EVIL_LIBS@
186EXEEXT = @EXEEXT@
187FGREP = @FGREP@
188FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
189FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
190FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
191FREETYPE_LIBS = @FREETYPE_LIBS@
192FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
193FRIBIDI_LIBS = @FRIBIDI_LIBS@
194GL_EET_CFLAGS = @GL_EET_CFLAGS@
195GL_EET_LIBS = @GL_EET_LIBS@
196GREP = @GREP@
197HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
198HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
199INSTALL = @INSTALL@
200INSTALL_DATA = @INSTALL_DATA@
201INSTALL_PROGRAM = @INSTALL_PROGRAM@
202INSTALL_SCRIPT = @INSTALL_SCRIPT@
203INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
204LD = @LD@
205LDFLAGS = @LDFLAGS@
206LIBOBJS = @LIBOBJS@
207LIBS = @LIBS@
208LIBTOOL = @LIBTOOL@
209LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
210LINEBREAK_LIBS = @LINEBREAK_LIBS@
211LIPO = @LIPO@
212LN_S = @LN_S@
213LTLIBOBJS = @LTLIBOBJS@
214MAKEINFO = @MAKEINFO@
215MKDIR_P = @MKDIR_P@
216MODULE_ARCH = @MODULE_ARCH@
217NM = @NM@
218NMEDIT = @NMEDIT@
219OBJC = @OBJC@
220OBJCDEPMODE = @OBJCDEPMODE@
221OBJCFLAGS = @OBJCFLAGS@
222OBJDUMP = @OBJDUMP@
223OBJEXT = @OBJEXT@
224OTOOL = @OTOOL@
225OTOOL64 = @OTOOL64@
226PACKAGE = @PACKAGE@
227PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
228PACKAGE_NAME = @PACKAGE_NAME@
229PACKAGE_STRING = @PACKAGE_STRING@
230PACKAGE_TARNAME = @PACKAGE_TARNAME@
231PACKAGE_URL = @PACKAGE_URL@
232PACKAGE_VERSION = @PACKAGE_VERSION@
233PATH_SEPARATOR = @PATH_SEPARATOR@
234PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
235PIXMAN_LIBS = @PIXMAN_LIBS@
236PKG_CONFIG = @PKG_CONFIG@
237PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
238PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
239PNG_CFLAGS = @PNG_CFLAGS@
240PNG_LIBS = @PNG_LIBS@
241RANLIB = @RANLIB@
242SDL_CFLAGS = @SDL_CFLAGS@
243SDL_LIBS = @SDL_LIBS@
244SED = @SED@
245SET_MAKE = @SET_MAKE@
246SHELL = @SHELL@
247SHM_OPEN_LINK = @SHM_OPEN_LINK@
248STRIP = @STRIP@
249SVG_CFLAGS = @SVG_CFLAGS@
250SVG_LIBS = @SVG_LIBS@
251VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
252VALGRIND_LIBS = @VALGRIND_LIBS@
253VERSION = @VERSION@
254VMAJ = @VMAJ@
255WIN32_CFLAGS = @WIN32_CFLAGS@
256WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
257XCB_CFLAGS = @XCB_CFLAGS@
258XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
259XCB_GL_LIBS = @XCB_GL_LIBS@
260XCB_LIBS = @XCB_LIBS@
261XEXT_CFLAGS = @XEXT_CFLAGS@
262XEXT_LIBS = @XEXT_LIBS@
263XMKMF = @XMKMF@
264X_CFLAGS = @X_CFLAGS@
265X_EXTRA_LIBS = @X_EXTRA_LIBS@
266X_LIBS = @X_LIBS@
267X_PRE_LIBS = @X_PRE_LIBS@
268abs_builddir = @abs_builddir@
269abs_srcdir = @abs_srcdir@
270abs_top_builddir = @abs_top_builddir@
271abs_top_srcdir = @abs_top_srcdir@
272ac_ct_CC = @ac_ct_CC@
273ac_ct_CXX = @ac_ct_CXX@
274ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
275ac_ct_OBJC = @ac_ct_OBJC@
276altivec_cflags = @altivec_cflags@
277am__include = @am__include@
278am__leading_dot = @am__leading_dot@
279am__quote = @am__quote@
280am__tar = @am__tar@
281am__untar = @am__untar@
282bindir = @bindir@
283build = @build@
284build_alias = @build_alias@
285build_cpu = @build_cpu@
286build_os = @build_os@
287build_vendor = @build_vendor@
288builddir = @builddir@
289datadir = @datadir@
290datarootdir = @datarootdir@
291dlopen_libs = @dlopen_libs@
292docdir = @docdir@
293dvidir = @dvidir@
294edje_cc = @edje_cc@
295efl_doxygen = @efl_doxygen@
296efl_have_doxygen = @efl_have_doxygen@
297evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
298evas_engine_buffer_libs = @evas_engine_buffer_libs@
299evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
300evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
301evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
302evas_engine_directfb_libs = @evas_engine_directfb_libs@
303evas_engine_fb_cflags = @evas_engine_fb_cflags@
304evas_engine_fb_libs = @evas_engine_fb_libs@
305evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
306evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
307evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
308evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
309evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
310evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
311evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
312evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
313evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
314evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
315evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
316evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
317evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
318evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
319evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
320evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
321evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
322evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
323evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
324evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
325evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
326evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
327evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
328evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
329evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
330evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
331evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
332evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
333evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
334evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
335evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
336evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
337evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
338evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
339evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
340evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
341evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
342evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
343evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
344evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
345evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
346evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
347evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
348evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
349evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
350evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
351evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
352evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
353evas_image_loader_png_libs = @evas_image_loader_png_libs@
354evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
355evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
356evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
357evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
358evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
359evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
360evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
361evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
362evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
363evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
364evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
365evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
366exec_prefix = @exec_prefix@
367have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
368have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
369have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
370have_evas_engine_software_x11 = @have_evas_engine_software_x11@
371have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
372have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
373have_lcov = @have_lcov@
374host = @host@
375host_alias = @host_alias@
376host_cpu = @host_cpu@
377host_os = @host_os@
378host_vendor = @host_vendor@
379htmldir = @htmldir@
380includedir = @includedir@
381infodir = @infodir@
382install_sh = @install_sh@
383libdir = @libdir@
384libexecdir = @libexecdir@
385localedir = @localedir@
386localstatedir = @localstatedir@
387lt_ECHO = @lt_ECHO@
388lt_enable_auto_import = @lt_enable_auto_import@
389mandir = @mandir@
390mkdir_p = @mkdir_p@
391oldincludedir = @oldincludedir@
392pdfdir = @pdfdir@
393pkgconfig_requires_private = @pkgconfig_requires_private@
394prefix = @prefix@
395program_transform_name = @program_transform_name@
396psdir = @psdir@
397pthread_cflags = @pthread_cflags@
398pthread_libs = @pthread_libs@
399release_info = @release_info@
400requirement_evas = @requirement_evas@
401sbindir = @sbindir@
402sharedstatedir = @sharedstatedir@
403srcdir = @srcdir@
404sysconfdir = @sysconfdir@
405target_alias = @target_alias@
406top_build_prefix = @top_build_prefix@
407top_builddir = @top_builddir@
408top_srcdir = @top_srcdir@
409version_info = @version_info@
410MAINTAINERCLEANFILES = Makefile.in
411AM_CPPFLAGS = \
412-I. \
413-I$(top_srcdir)/src/lib \
414-I$(top_srcdir)/src/lib/include \
415-I$(top_srcdir)/src/modules/engines \
416@FREETYPE_CFLAGS@ \
417@PIXMAN_CFLAGS@ \
418@EINA_CFLAGS@
419
420AM_CFLAGS = @WIN32_CFLAGS@
421@BUILD_ENGINE_SOFTWARE_8_TRUE@SOFTWARE_8_SOURCES = evas_engine.c
422@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_8/$(MODULE_ARCH)
423@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@pkg_LTLIBRARIES = module.la
424@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@module_la_SOURCES = $(SOFTWARE_8_SOURCES)
425@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@module_la_LIBADD = @EINA_LIBS@ $(top_builddir)/src/lib/libevas.la
426@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
427@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
428@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_TRUE@noinst_LTLIBRARIES = libevas_engine_software_8.la
429@BUILD_ENGINE_SOFTWARE_8_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_TRUE@libevas_engine_software_8_la_SOURCES = $(SOFTWARE_8_SOURCES)
430EXTRA_DIST = \
431evas_engine.c
432
433all: all-am
434
435.SUFFIXES:
436.SUFFIXES: .c .lo .o .obj
437$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
438 @for dep in $?; do \
439 case '$(am__configure_deps)' in \
440 *$$dep*) \
441 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
442 && { if test -f $@; then exit 0; else break; fi; }; \
443 exit 1;; \
444 esac; \
445 done; \
446 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_8/Makefile'; \
447 $(am__cd) $(top_srcdir) && \
448 $(AUTOMAKE) --gnu src/modules/engines/software_8/Makefile
449.PRECIOUS: Makefile
450Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
451 @case '$?' in \
452 *config.status*) \
453 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
454 *) \
455 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
456 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
457 esac;
458
459$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
460 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
461
462$(top_srcdir)/configure: $(am__configure_deps)
463 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
464$(ACLOCAL_M4): $(am__aclocal_m4_deps)
465 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
466$(am__aclocal_m4_deps):
467
468clean-noinstLTLIBRARIES:
469 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
470 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
471 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
472 test "$$dir" != "$$p" || dir=.; \
473 echo "rm -f \"$${dir}/so_locations\""; \
474 rm -f "$${dir}/so_locations"; \
475 done
476install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
477 @$(NORMAL_INSTALL)
478 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
479 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
480 list2=; for p in $$list; do \
481 if test -f $$p; then \
482 list2="$$list2 $$p"; \
483 else :; fi; \
484 done; \
485 test -z "$$list2" || { \
486 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
487 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
488 }
489
490uninstall-pkgLTLIBRARIES:
491 @$(NORMAL_UNINSTALL)
492 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
493 for p in $$list; do \
494 $(am__strip_dir) \
495 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
496 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
497 done
498
499clean-pkgLTLIBRARIES:
500 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
501 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
502 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
503 test "$$dir" != "$$p" || dir=.; \
504 echo "rm -f \"$${dir}/so_locations\""; \
505 rm -f "$${dir}/so_locations"; \
506 done
507libevas_engine_software_8.la: $(libevas_engine_software_8_la_OBJECTS) $(libevas_engine_software_8_la_DEPENDENCIES)
508 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_software_8_la_rpath) $(libevas_engine_software_8_la_OBJECTS) $(libevas_engine_software_8_la_LIBADD) $(LIBS)
509module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
510 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
511
512mostlyclean-compile:
513 -rm -f *.$(OBJEXT)
514
515distclean-compile:
516 -rm -f *.tab.c
517
518@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
519@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
520
521.c.o:
522@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
523@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
524@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
525@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
526@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
527@am__fastdepCC_FALSE@ $(COMPILE) -c $<
528
529.c.obj:
530@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
531@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
532@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
533@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
534@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
535@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
536
537.c.lo:
538@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
539@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
540@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
541@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
542@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
543@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
544
545module_la-evas_engine.lo: evas_engine.c
546@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
547@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
548@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
549@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
550@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
551@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
552
553mostlyclean-libtool:
554 -rm -f *.lo
555
556clean-libtool:
557 -rm -rf .libs _libs
558
559ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
560 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
561 unique=`for i in $$list; do \
562 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
563 done | \
564 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
565 END { if (nonempty) { for (i in files) print i; }; }'`; \
566 mkid -fID $$unique
567tags: TAGS
568
569TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
570 $(TAGS_FILES) $(LISP)
571 set x; \
572 here=`pwd`; \
573 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
574 unique=`for i in $$list; do \
575 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
576 done | \
577 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
578 END { if (nonempty) { for (i in files) print i; }; }'`; \
579 shift; \
580 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
581 test -n "$$unique" || unique=$$empty_fix; \
582 if test $$# -gt 0; then \
583 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
584 "$$@" $$unique; \
585 else \
586 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
587 $$unique; \
588 fi; \
589 fi
590ctags: CTAGS
591CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
592 $(TAGS_FILES) $(LISP)
593 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
594 unique=`for i in $$list; do \
595 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
596 done | \
597 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
598 END { if (nonempty) { for (i in files) print i; }; }'`; \
599 test -z "$(CTAGS_ARGS)$$unique" \
600 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
601 $$unique
602
603GTAGS:
604 here=`$(am__cd) $(top_builddir) && pwd` \
605 && $(am__cd) $(top_srcdir) \
606 && gtags -i $(GTAGS_ARGS) "$$here"
607
608distclean-tags:
609 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
610
611distdir: $(DISTFILES)
612 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
613 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
614 list='$(DISTFILES)'; \
615 dist_files=`for file in $$list; do echo $$file; done | \
616 sed -e "s|^$$srcdirstrip/||;t" \
617 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
618 case $$dist_files in \
619 */*) $(MKDIR_P) `echo "$$dist_files" | \
620 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
621 sort -u` ;; \
622 esac; \
623 for file in $$dist_files; do \
624 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
625 if test -d $$d/$$file; then \
626 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
627 if test -d "$(distdir)/$$file"; then \
628 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
629 fi; \
630 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
631 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
632 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
633 fi; \
634 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
635 else \
636 test -f "$(distdir)/$$file" \
637 || cp -p $$d/$$file "$(distdir)/$$file" \
638 || exit 1; \
639 fi; \
640 done
641check-am: all-am
642check: check-am
643all-am: Makefile $(LTLIBRARIES)
644installdirs:
645 for dir in "$(DESTDIR)$(pkgdir)"; do \
646 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
647 done
648install: install-am
649install-exec: install-exec-am
650install-data: install-data-am
651uninstall: uninstall-am
652
653install-am: all-am
654 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
655
656installcheck: installcheck-am
657install-strip:
658 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
659 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
660 `test -z '$(STRIP)' || \
661 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
662mostlyclean-generic:
663
664clean-generic:
665
666distclean-generic:
667 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
668 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
669
670maintainer-clean-generic:
671 @echo "This command is intended for maintainers to use"
672 @echo "it deletes files that may require special tools to rebuild."
673 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
674clean: clean-am
675
676clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
677 clean-pkgLTLIBRARIES mostlyclean-am
678
679distclean: distclean-am
680 -rm -rf ./$(DEPDIR)
681 -rm -f Makefile
682distclean-am: clean-am distclean-compile distclean-generic \
683 distclean-tags
684
685dvi: dvi-am
686
687dvi-am:
688
689html: html-am
690
691html-am:
692
693info: info-am
694
695info-am:
696
697install-data-am: install-pkgLTLIBRARIES
698
699install-dvi: install-dvi-am
700
701install-dvi-am:
702
703install-exec-am:
704
705install-html: install-html-am
706
707install-html-am:
708
709install-info: install-info-am
710
711install-info-am:
712
713install-man:
714
715install-pdf: install-pdf-am
716
717install-pdf-am:
718
719install-ps: install-ps-am
720
721install-ps-am:
722
723installcheck-am:
724
725maintainer-clean: maintainer-clean-am
726 -rm -rf ./$(DEPDIR)
727 -rm -f Makefile
728maintainer-clean-am: distclean-am maintainer-clean-generic
729
730mostlyclean: mostlyclean-am
731
732mostlyclean-am: mostlyclean-compile mostlyclean-generic \
733 mostlyclean-libtool
734
735pdf: pdf-am
736
737pdf-am:
738
739ps: ps-am
740
741ps-am:
742
743uninstall-am: uninstall-pkgLTLIBRARIES
744
745.MAKE: install-am install-strip
746
747.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
748 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
749 ctags distclean distclean-compile distclean-generic \
750 distclean-libtool distclean-tags distdir dvi dvi-am html \
751 html-am info info-am install install-am install-data \
752 install-data-am install-dvi install-dvi-am install-exec \
753 install-exec-am install-html install-html-am install-info \
754 install-info-am install-man install-pdf install-pdf-am \
755 install-pkgLTLIBRARIES install-ps install-ps-am install-strip \
756 installcheck installcheck-am installdirs maintainer-clean \
757 maintainer-clean-generic mostlyclean mostlyclean-compile \
758 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
759 tags uninstall uninstall-am uninstall-pkgLTLIBRARIES
760
761
762# Tell versions [3.59,3.63) of GNU make to not export all variables.
763# Otherwise a system limit (for SysV at least) may be exceeded.
764.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_8/evas_engine.c b/libraries/evas/src/modules/engines/software_8/evas_engine.c
new file mode 100644
index 0000000..c7c123a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_8/evas_engine.c
@@ -0,0 +1,440 @@
1#include "evas_common.h"
2#include "evas_common_soft8.h"
3
4/*
5 *****
6 **
7 ** ENGINE ROUTINES
8 **
9 *****
10 */
11int _evas_soft8_log_dom = -1;
12
13static Evas_Func func, pfunc;
14
15#ifdef ERR
16#undef ERR
17#endif
18#define ERR(...) EINA_LOG_DOM_ERR( _evas_soft8_log_dom, __VA_ARGS__)
19
20#ifdef DBG
21#undef DBG
22#endif
23#define DBG(...) EINA_LOG_DOM_DBG(_evas_soft8_log_dom, __VA_ARGS__)
24
25#ifdef INF
26#undef INF
27#endif
28#define INF(...) EINA_LOG_DOM_INFO(_evas_soft8_log_dom, __VA_ARGS__)
29
30#ifdef WRN
31#undef WRN
32#endif
33#define WRN(...) EINA_LOG_DOM_WARN(_evas_soft8_log_dom, __VA_ARGS__)
34
35#ifdef CRIT
36#undef CRIT
37#endif
38#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_soft8_log_dom, __VA_ARGS__)
39
40#define NOT_IMPLEMENTED() \
41 WRN("NOT_IMPLEMENTED: %s() at %s:%d", \
42 __FUNCTION__, __FILE__, __LINE__)
43
44static void
45eng_rectangle_draw(void *data __UNUSED__, void *context, void *surface, int x,
46 int y, int w, int h)
47{
48 evas_common_soft8_rectangle_draw(surface, context, x, y, w, h);
49}
50
51static void
52eng_line_draw(void *data __UNUSED__, void *context, void *surface, int x1,
53 int y1, int x2, int y2)
54{
55 evas_common_soft8_line_draw(surface, context, x1, y1, x2, y2);
56}
57
58static void
59eng_polygon_draw(void *data __UNUSED__, void *context, void *surface,
60 void *polygon, int x, int y)
61{
62 evas_common_soft8_polygon_draw(surface, context, polygon, x, y);
63}
64
65static int
66eng_image_alpha_get(void *data __UNUSED__, void *image)
67{
68 Soft8_Image *im;
69
70 if (!image)
71 return 0;
72 im = image;
73 return im->cache_entry.flags.alpha;
74}
75
76static int
77eng_image_colorspace_get(void *data __UNUSED__, void *image __UNUSED__)
78{
79 return EVAS_COLORSPACE_GRY8;
80}
81
82static void *
83eng_image_alpha_set(void *data __UNUSED__, void *image, int have_alpha)
84{
85 if (!image)
86 return NULL;
87 have_alpha = !!have_alpha;
88 image = evas_common_soft8_image_alpha_set(image, have_alpha);
89 return image;
90}
91
92static char *
93eng_image_comment_get(void *data __UNUSED__, void *image __UNUSED__,
94 char *key __UNUSED__)
95{
96 return NULL;
97}
98
99static char *
100eng_image_format_get(void *data __UNUSED__, void *image __UNUSED__)
101{
102 NOT_IMPLEMENTED();
103 return NULL;
104}
105
106static void
107eng_image_colorspace_set(void *data __UNUSED__, void *image __UNUSED__,
108 int cspace __UNUSED__)
109{
110 NOT_IMPLEMENTED();
111}
112
113static void *
114eng_image_native_set(void *data __UNUSED__, void *image,
115 void *native __UNUSED__)
116{
117 NOT_IMPLEMENTED();
118 return image;
119}
120
121static void *
122eng_image_native_get(void *data __UNUSED__, void *image __UNUSED__)
123{
124 NOT_IMPLEMENTED();
125 return NULL;
126}
127
128static void *
129eng_image_load(void *data __UNUSED__, const char *file, const char *key,
130 int *error, Evas_Image_Load_Opts * lo)
131{
132 return evas_cache_image_request(evas_common_soft8_image_cache_get(), file,
133 key, lo, error);
134}
135
136static void *
137eng_image_new_from_data(void *data __UNUSED__, int w, int h,
138 DATA32 * image_data, int alpha, int cspace)
139{
140 if ((image_data) && (cspace != EVAS_COLORSPACE_GRY8))
141 {
142 WRN("Unsupported colorspace %d in %s() (%s:%d)",
143 cspace, __FUNCTION__, __FILE__, __LINE__);
144 return NULL;
145 }
146 return evas_cache_image_data(evas_common_soft8_image_cache_get(), w, h,
147 image_data, alpha, EVAS_COLORSPACE_GRY8);
148}
149
150static void *
151eng_image_new_from_copied_data(void *data __UNUSED__, int w, int h,
152 DATA32 * image_data, int alpha, int cspace)
153{
154 if ((image_data) && (cspace != EVAS_COLORSPACE_GRY8))
155 {
156 WRN("Unsupported colorspace %d in %s() (%s:%d)",
157 cspace, __FUNCTION__, __FILE__, __LINE__);
158 return NULL;
159 }
160 return evas_cache_image_copied_data(evas_common_soft8_image_cache_get(), w,
161 h, image_data, alpha,
162 EVAS_COLORSPACE_GRY8);
163}
164
165static void
166eng_image_free(void *data __UNUSED__, void *image)
167{
168 evas_cache_image_drop((Image_Entry *) image);
169}
170
171static void
172eng_image_size_get(void *data __UNUSED__, void *image, int *w, int *h)
173{
174 Soft8_Image *im;
175
176 if (w)
177 *w = 0;
178 if (h)
179 *h = 0;
180 if (!image)
181 return;
182 im = image;
183 if (w)
184 *w = im->cache_entry.w;
185 if (h)
186 *h = im->cache_entry.h;
187}
188
189static void *
190eng_image_size_set(void *data __UNUSED__, void *image, int w, int h)
191{
192 if (!image)
193 return NULL;
194 if ((w <= 0) || (h <= 0))
195 {
196 evas_cache_image_drop((Image_Entry *) image);
197 return NULL;
198 }
199 return evas_cache_image_size_set((Image_Entry *) image, w, h);
200}
201
202static void
203eng_image_stride_get(void *data __UNUSED__, void *image, int *stride)
204{
205 Soft8_Image *im;
206
207 if (stride)
208 *stride = 0;
209 if (!image)
210 return;
211 im = image;
212 if (stride)
213 *stride = im->stride;
214}
215
216static void *
217eng_image_dirty_region(void *data __UNUSED__, void *image __UNUSED__,
218 int x __UNUSED__, int y __UNUSED__, int w __UNUSED__,
219 int h __UNUSED__)
220{
221 /* FIXME: is this required? */
222 //NOT_IMPLEMENTED();
223 return image;
224}
225
226static void *
227eng_image_data_get(void *data __UNUSED__, void *image, int to_write,
228 DATA32 ** image_data, int *err)
229{
230 Soft8_Image *im;
231 int error;
232
233 if (!image)
234 {
235 *image_data = NULL;
236 return NULL;
237 }
238
239 im = image;
240 error = evas_cache_image_load_data(&im->cache_entry);
241
242 if (to_write)
243 im = (Soft8_Image *) evas_cache_image_alone(&im->cache_entry);
244
245 if (image_data)
246 *image_data = (DATA32 *) im->pixels;
247
248 if (err) *err = error;
249 return im;
250}
251
252static void *
253eng_image_data_put(void *data __UNUSED__, void *image, DATA32 * image_data)
254{
255 Soft8_Image *old_im, *new_im;
256
257 if (!image)
258 return NULL;
259
260 old_im = image;
261 if ((DATA8 *) image_data == old_im->pixels)
262 return old_im;
263
264 new_im =
265 (Soft8_Image *)
266 evas_cache_image_data(evas_common_soft8_image_cache_get(),
267 old_im->cache_entry.w, old_im->cache_entry.h,
268 image_data, old_im->cache_entry.flags.alpha,
269 EVAS_COLORSPACE_GRY8);
270 evas_cache_image_drop(&old_im->cache_entry);
271 return new_im;
272}
273
274static void
275eng_image_data_preload_request(void *data __UNUSED__, void *image,
276 const void *target)
277{
278 Soft8_Image *im = image;
279
280 if (!im)
281 return;
282 evas_cache_image_preload_data(&im->cache_entry, target);
283}
284
285static void
286eng_image_data_preload_cancel(void *data __UNUSED__, void *image,
287 const void *target)
288{
289 Soft8_Image *im = image;
290
291 if (!im)
292 return;
293 evas_cache_image_preload_cancel(&im->cache_entry, target);
294}
295
296static void
297eng_image_draw(void *data __UNUSED__, void *context, void *surface, void *image,
298 int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y,
299 int dst_w, int dst_h, int smooth)
300{
301 Soft8_Image *im;
302
303 im = (Soft8_Image *) image;
304
305 evas_cache_image_load_data(&im->cache_entry);
306 evas_common_soft8_image_draw(im, surface, context,
307 src_x, src_y, src_w, src_h,
308 dst_x, dst_y, dst_w, dst_h, smooth);
309}
310
311static void
312eng_image_scale_hint_set(void *data __UNUSED__, void *image __UNUSED__,
313 int hint __UNUSED__)
314{
315}
316
317static int
318eng_image_scale_hint_get(void *data __UNUSED__, void *image __UNUSED__)
319{
320 return EVAS_IMAGE_SCALE_HINT_NONE;
321}
322
323static void
324eng_image_cache_flush(void *data __UNUSED__)
325{
326 evas_cache_image_flush(evas_common_soft8_image_cache_get());
327}
328
329static void
330eng_image_cache_set(void *data __UNUSED__, int bytes)
331{
332 evas_cache_image_set(evas_common_soft8_image_cache_get(), bytes);
333}
334
335static int
336eng_image_cache_get(void *data __UNUSED__)
337{
338 return evas_cache_image_get(evas_common_soft8_image_cache_get());
339}
340
341static void
342eng_font_draw(void *data __UNUSED__, void *context, void *surface,
343 Evas_Font_Set *font, int x, int y, int w __UNUSED__, int h __UNUSED__,
344 int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *text_props)
345{
346 evas_common_font_draw(surface, context, (RGBA_Font *) font, x, y,
347 text_props);
348 evas_common_draw_context_font_ext_set(context, NULL, NULL, NULL, NULL);
349}
350
351static void
352eng_font_cache_flush(void *data __UNUSED__)
353{
354 evas_common_font_flush();
355}
356
357/*
358 *****
359 **
360 ** MODULE ACCESSIBLE API API
361 **
362 *****
363 */
364
365static int
366module_open(Evas_Module * em)
367{
368 if (!em)
369 return 0;
370 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
371 _evas_soft8_log_dom = eina_log_domain_register
372 ("evas-software_8", EVAS_DEFAULT_LOG_COLOR);
373 if (_evas_soft8_log_dom < 0)
374 {
375 EINA_LOG_ERR("Can not create a module log domain.");
376 return 0;
377 }
378 /* store it for later use */
379 func = pfunc;
380 /* now to override methods */
381 EVAS_API_RESET(info, &func);
382 EVAS_API_RESET(info_free, &func);
383 EVAS_API_RESET(setup, &func);
384#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
385 ORD(rectangle_draw);
386 ORD(line_draw);
387 ORD(polygon_draw);
388 ORD(image_load);
389 ORD(image_new_from_data);
390 ORD(image_new_from_copied_data);
391 ORD(image_free);
392 ORD(image_size_get);
393 ORD(image_size_set);
394 ORD(image_stride_get);
395 ORD(image_dirty_region);
396 ORD(image_data_get);
397 ORD(image_data_put);
398 ORD(image_data_preload_request);
399 ORD(image_data_preload_cancel);
400 ORD(image_alpha_set);
401 ORD(image_alpha_get);
402 ORD(image_draw);
403 ORD(image_comment_get);
404 ORD(image_format_get);
405 ORD(image_colorspace_set);
406 ORD(image_colorspace_get);
407 ORD(image_native_set);
408 ORD(image_native_get);
409 ORD(image_cache_flush);
410 ORD(image_cache_set);
411 ORD(image_cache_get);
412 ORD(font_draw);
413 ORD(image_scale_hint_set);
414 ORD(image_scale_hint_get);
415
416 em->functions = (void *)(&func);
417
418 return 1;
419}
420
421static void
422module_close(Evas_Module * em __UNUSED__)
423{
424 eina_log_domain_unregister(_evas_soft8_log_dom);
425}
426
427static Evas_Module_Api evas_modapi = {
428 EVAS_MODULE_API_VERSION,
429 "software_8",
430 "none",
431 {
432 module_open,
433 module_close}
434};
435
436EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_8);
437
438#ifndef EVAS_STATIC_BUILD_SOFTWARE_8
439EVAS_EINA_MODULE_DEFINE(engine, software_8);
440#endif
diff --git a/libraries/evas/src/modules/engines/software_8_x11/Evas_Engine_Software_8_X11.h b/libraries/evas/src/modules/engines/software_8_x11/Evas_Engine_Software_8_X11.h
new file mode 100644
index 0000000..fac3d8e
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_8_x11/Evas_Engine_Software_8_X11.h
@@ -0,0 +1,38 @@
1#ifndef _EVAS_ENGINE_SOFTWARE_8_X11_H
2#define _EVAS_ENGINE_SOFTWARE_8_X11_H
3
4#include <xcb/xcb.h>
5
6typedef struct _Evas_Engine_Info_Software_8_X11 Evas_Engine_Info_Software_8_X11;
7
8struct _Evas_Engine_Info_Software_8_X11
9{
10 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
11 /* at you and make nasty noises */
12 Evas_Engine_Info magic;
13
14 /* engine specific data & parameters it needs to set up */
15 struct {
16 xcb_connection_t *connection;
17 xcb_drawable_t drawable;
18 xcb_gcontext_t gc;
19 xcb_screen_t *screen;
20
21 unsigned int mask;
22 void *visual;
23 unsigned int colormap;
24 int depth;
25 int rotation;
26
27 int alloc_grayscale : 1;
28 int debug : 1;
29 int shape_dither : 1;
30 int destination_alpha : 1;
31 int track_mask_changes : 1;
32 } info;
33
34 /* non-blocking or blocking mode */
35 Evas_Engine_Render_Mode render_mode;
36};
37
38#endif
diff --git a/libraries/evas/src/modules/engines/software_8_x11/Makefile.am b/libraries/evas/src/modules/engines/software_8_x11/Makefile.am
new file mode 100644
index 0000000..3689577
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_8_x11/Makefile.am
@@ -0,0 +1,49 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9-I$(top_srcdir)/src/modules/engines/software_8 \
10@FREETYPE_CFLAGS@ \
11@PIXMAN_CFLAGS@ \
12@EINA_CFLAGS@ \
13@evas_engine_software_8_x11_cflags@ \
14-I/usr/include/pixman-1
15
16if BUILD_ENGINE_SOFTWARE_8_X11
17
18SOFTWARE_8_X11_SOURCES = \
19evas_engine.c \
20evas_x_buffer.c
21
22SOFTWARE_8_X11_LIBADD = @evas_engine_software_8_x11_libs@
23
24
25includes_HEADERS = Evas_Engine_Software_8_X11.h
26includesdir = $(includedir)/evas-@VMAJ@
27
28if !EVAS_STATIC_BUILD_SOFTWARE_8_X11
29
30pkgdir = $(libdir)/evas/modules/engines/software_8_x11/$(MODULE_ARCH)
31pkg_LTLIBRARIES = module.la
32
33module_la_SOURCES = $(SOFTWARE_8_X11_SOURCES)
34module_la_LIBADD = @EINA_LIBS@ $(SOFTWARE_8_X11_LIBADD) $(top_builddir)/src/lib/libevas.la
35#-lxcb-image -lxcb-shm -lxcb -lpixman-1
36module_la_LDFLAGS = -no-undefined -module -avoid-version
37module_la_LIBTOOLFLAGS = --tag=disable-static
38
39else
40
41noinst_LTLIBRARIES = libevas_engine_software_8_x11.la
42
43libevas_engine_software_8_x11_la_SOURCES = $(SOFTWARE_8_X11_SOURCES)
44libevas_engine_software_8_x11_la_LIBADD = $(SOFTWARE_8_X11_LIBADD)
45
46endif
47endif
48
49EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/software_8_x11/Makefile.in b/libraries/evas/src/modules/engines/software_8_x11/Makefile.in
new file mode 100644
index 0000000..fa88a4d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_8_x11/Makefile.in
@@ -0,0 +1,814 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/software_8_x11
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84am__DEPENDENCIES_1 =
85@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_TRUE@libevas_engine_software_8_x11_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_software_8_x11_la_SOURCES_DIST = evas_engine.c \
87 evas_x_buffer.c
88@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@am__objects_1 = evas_engine.lo \
89@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@ evas_x_buffer.lo
90@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_TRUE@am_libevas_engine_software_8_x11_la_OBJECTS = $(am__objects_1)
91libevas_engine_software_8_x11_la_OBJECTS = \
92 $(am_libevas_engine_software_8_x11_la_OBJECTS)
93AM_V_lt = $(am__v_lt_$(V))
94am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
95am__v_lt_0 = --silent
96@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_TRUE@am_libevas_engine_software_8_x11_la_rpath =
97@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@module_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
98@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@ $(top_builddir)/src/lib/libevas.la
99am__module_la_SOURCES_DIST = evas_engine.c evas_x_buffer.c
100@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@am__objects_2 = \
101@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@ module_la-evas_engine.lo \
102@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@ module_la-evas_x_buffer.lo
103@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@am_module_la_OBJECTS = $(am__objects_2)
104module_la_OBJECTS = $(am_module_la_OBJECTS)
105module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
106 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
107 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
108@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@am_module_la_rpath = -rpath \
109@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@ $(pkgdir)
110DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
111depcomp = $(SHELL) $(top_srcdir)/depcomp
112am__depfiles_maybe = depfiles
113am__mv = mv -f
114COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
115 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
116LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
117 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
118 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
119 $(AM_CFLAGS) $(CFLAGS)
120AM_V_CC = $(am__v_CC_$(V))
121am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
122am__v_CC_0 = @echo " CC " $@;
123AM_V_at = $(am__v_at_$(V))
124am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
125am__v_at_0 = @
126CCLD = $(CC)
127LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
128 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
129 $(AM_LDFLAGS) $(LDFLAGS) -o $@
130AM_V_CCLD = $(am__v_CCLD_$(V))
131am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
132am__v_CCLD_0 = @echo " CCLD " $@;
133AM_V_GEN = $(am__v_GEN_$(V))
134am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
135am__v_GEN_0 = @echo " GEN " $@;
136SOURCES = $(libevas_engine_software_8_x11_la_SOURCES) \
137 $(module_la_SOURCES)
138DIST_SOURCES = $(am__libevas_engine_software_8_x11_la_SOURCES_DIST) \
139 $(am__module_la_SOURCES_DIST)
140am__includes_HEADERS_DIST = Evas_Engine_Software_8_X11.h
141HEADERS = $(includes_HEADERS)
142ETAGS = etags
143CTAGS = ctags
144DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
145ACLOCAL = @ACLOCAL@
146ALLOCA = @ALLOCA@
147AMTAR = @AMTAR@
148AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
149AR = @AR@
150AS = @AS@
151AUTOCONF = @AUTOCONF@
152AUTOHEADER = @AUTOHEADER@
153AUTOMAKE = @AUTOMAKE@
154AWK = @AWK@
155CC = @CC@
156CCDEPMODE = @CCDEPMODE@
157CFLAGS = @CFLAGS@
158CHECK_CFLAGS = @CHECK_CFLAGS@
159CHECK_LIBS = @CHECK_LIBS@
160CPP = @CPP@
161CPPFLAGS = @CPPFLAGS@
162CXX = @CXX@
163CXXCPP = @CXXCPP@
164CXXDEPMODE = @CXXDEPMODE@
165CXXFLAGS = @CXXFLAGS@
166CYGPATH_W = @CYGPATH_W@
167DEFS = @DEFS@
168DEPDIR = @DEPDIR@
169DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
170DIRECTFB_LIBS = @DIRECTFB_LIBS@
171DLLTOOL = @DLLTOOL@
172DSYMUTIL = @DSYMUTIL@
173DUMPBIN = @DUMPBIN@
174ECHO_C = @ECHO_C@
175ECHO_N = @ECHO_N@
176ECHO_T = @ECHO_T@
177ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
178ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
179EDB_CFLAGS = @EDB_CFLAGS@
180EDB_LIBS = @EDB_LIBS@
181EDJE_CFLAGS = @EDJE_CFLAGS@
182EDJE_LIBS = @EDJE_LIBS@
183EET_CFLAGS = @EET_CFLAGS@
184EET_LIBS = @EET_LIBS@
185EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
186EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
187EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
188EGREP = @EGREP@
189EINA_CFLAGS = @EINA_CFLAGS@
190EINA_LIBS = @EINA_LIBS@
191EVAS_CFLAGS = @EVAS_CFLAGS@
192EVAS_LIBS = @EVAS_LIBS@
193EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
194EVIL_CFLAGS = @EVIL_CFLAGS@
195EVIL_LIBS = @EVIL_LIBS@
196EXEEXT = @EXEEXT@
197FGREP = @FGREP@
198FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
199FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
200FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
201FREETYPE_LIBS = @FREETYPE_LIBS@
202FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
203FRIBIDI_LIBS = @FRIBIDI_LIBS@
204GL_EET_CFLAGS = @GL_EET_CFLAGS@
205GL_EET_LIBS = @GL_EET_LIBS@
206GREP = @GREP@
207HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
208HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
209INSTALL = @INSTALL@
210INSTALL_DATA = @INSTALL_DATA@
211INSTALL_PROGRAM = @INSTALL_PROGRAM@
212INSTALL_SCRIPT = @INSTALL_SCRIPT@
213INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
214LD = @LD@
215LDFLAGS = @LDFLAGS@
216LIBOBJS = @LIBOBJS@
217LIBS = @LIBS@
218LIBTOOL = @LIBTOOL@
219LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
220LINEBREAK_LIBS = @LINEBREAK_LIBS@
221LIPO = @LIPO@
222LN_S = @LN_S@
223LTLIBOBJS = @LTLIBOBJS@
224MAKEINFO = @MAKEINFO@
225MKDIR_P = @MKDIR_P@
226MODULE_ARCH = @MODULE_ARCH@
227NM = @NM@
228NMEDIT = @NMEDIT@
229OBJC = @OBJC@
230OBJCDEPMODE = @OBJCDEPMODE@
231OBJCFLAGS = @OBJCFLAGS@
232OBJDUMP = @OBJDUMP@
233OBJEXT = @OBJEXT@
234OTOOL = @OTOOL@
235OTOOL64 = @OTOOL64@
236PACKAGE = @PACKAGE@
237PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
238PACKAGE_NAME = @PACKAGE_NAME@
239PACKAGE_STRING = @PACKAGE_STRING@
240PACKAGE_TARNAME = @PACKAGE_TARNAME@
241PACKAGE_URL = @PACKAGE_URL@
242PACKAGE_VERSION = @PACKAGE_VERSION@
243PATH_SEPARATOR = @PATH_SEPARATOR@
244PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
245PIXMAN_LIBS = @PIXMAN_LIBS@
246PKG_CONFIG = @PKG_CONFIG@
247PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
248PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
249PNG_CFLAGS = @PNG_CFLAGS@
250PNG_LIBS = @PNG_LIBS@
251RANLIB = @RANLIB@
252SDL_CFLAGS = @SDL_CFLAGS@
253SDL_LIBS = @SDL_LIBS@
254SED = @SED@
255SET_MAKE = @SET_MAKE@
256SHELL = @SHELL@
257SHM_OPEN_LINK = @SHM_OPEN_LINK@
258STRIP = @STRIP@
259SVG_CFLAGS = @SVG_CFLAGS@
260SVG_LIBS = @SVG_LIBS@
261VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
262VALGRIND_LIBS = @VALGRIND_LIBS@
263VERSION = @VERSION@
264VMAJ = @VMAJ@
265WIN32_CFLAGS = @WIN32_CFLAGS@
266WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
267XCB_CFLAGS = @XCB_CFLAGS@
268XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
269XCB_GL_LIBS = @XCB_GL_LIBS@
270XCB_LIBS = @XCB_LIBS@
271XEXT_CFLAGS = @XEXT_CFLAGS@
272XEXT_LIBS = @XEXT_LIBS@
273XMKMF = @XMKMF@
274X_CFLAGS = @X_CFLAGS@
275X_EXTRA_LIBS = @X_EXTRA_LIBS@
276X_LIBS = @X_LIBS@
277X_PRE_LIBS = @X_PRE_LIBS@
278abs_builddir = @abs_builddir@
279abs_srcdir = @abs_srcdir@
280abs_top_builddir = @abs_top_builddir@
281abs_top_srcdir = @abs_top_srcdir@
282ac_ct_CC = @ac_ct_CC@
283ac_ct_CXX = @ac_ct_CXX@
284ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
285ac_ct_OBJC = @ac_ct_OBJC@
286altivec_cflags = @altivec_cflags@
287am__include = @am__include@
288am__leading_dot = @am__leading_dot@
289am__quote = @am__quote@
290am__tar = @am__tar@
291am__untar = @am__untar@
292bindir = @bindir@
293build = @build@
294build_alias = @build_alias@
295build_cpu = @build_cpu@
296build_os = @build_os@
297build_vendor = @build_vendor@
298builddir = @builddir@
299datadir = @datadir@
300datarootdir = @datarootdir@
301dlopen_libs = @dlopen_libs@
302docdir = @docdir@
303dvidir = @dvidir@
304edje_cc = @edje_cc@
305efl_doxygen = @efl_doxygen@
306efl_have_doxygen = @efl_have_doxygen@
307evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
308evas_engine_buffer_libs = @evas_engine_buffer_libs@
309evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
310evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
311evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
312evas_engine_directfb_libs = @evas_engine_directfb_libs@
313evas_engine_fb_cflags = @evas_engine_fb_cflags@
314evas_engine_fb_libs = @evas_engine_fb_libs@
315evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
316evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
317evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
318evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
319evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
320evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
321evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
322evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
323evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
324evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
325evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
326evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
327evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
328evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
329evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
330evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
331evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
332evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
333evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
334evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
335evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
336evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
337evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
338evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
339evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
340evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
341evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
342evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
343evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
344evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
345evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
346evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
347evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
348evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
349evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
350evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
351evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
352evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
353evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
354evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
355evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
356evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
357evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
358evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
359evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
360evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
361evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
362evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
363evas_image_loader_png_libs = @evas_image_loader_png_libs@
364evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
365evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
366evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
367evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
368evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
369evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
370evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
371evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
372evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
373evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
374evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
375evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
376exec_prefix = @exec_prefix@
377have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
378have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
379have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
380have_evas_engine_software_x11 = @have_evas_engine_software_x11@
381have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
382have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
383have_lcov = @have_lcov@
384host = @host@
385host_alias = @host_alias@
386host_cpu = @host_cpu@
387host_os = @host_os@
388host_vendor = @host_vendor@
389htmldir = @htmldir@
390includedir = @includedir@
391infodir = @infodir@
392install_sh = @install_sh@
393libdir = @libdir@
394libexecdir = @libexecdir@
395localedir = @localedir@
396localstatedir = @localstatedir@
397lt_ECHO = @lt_ECHO@
398lt_enable_auto_import = @lt_enable_auto_import@
399mandir = @mandir@
400mkdir_p = @mkdir_p@
401oldincludedir = @oldincludedir@
402pdfdir = @pdfdir@
403pkgconfig_requires_private = @pkgconfig_requires_private@
404prefix = @prefix@
405program_transform_name = @program_transform_name@
406psdir = @psdir@
407pthread_cflags = @pthread_cflags@
408pthread_libs = @pthread_libs@
409release_info = @release_info@
410requirement_evas = @requirement_evas@
411sbindir = @sbindir@
412sharedstatedir = @sharedstatedir@
413srcdir = @srcdir@
414sysconfdir = @sysconfdir@
415target_alias = @target_alias@
416top_build_prefix = @top_build_prefix@
417top_builddir = @top_builddir@
418top_srcdir = @top_srcdir@
419version_info = @version_info@
420MAINTAINERCLEANFILES = Makefile.in
421AM_CPPFLAGS = \
422-I. \
423-I$(top_srcdir)/src/lib \
424-I$(top_srcdir)/src/lib/include \
425-I$(top_srcdir)/src/modules/engines \
426-I$(top_srcdir)/src/modules/engines/software_8 \
427@FREETYPE_CFLAGS@ \
428@PIXMAN_CFLAGS@ \
429@EINA_CFLAGS@ \
430@evas_engine_software_8_x11_cflags@ \
431-I/usr/include/pixman-1
432
433@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@SOFTWARE_8_X11_SOURCES = \
434@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@evas_engine.c \
435@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@evas_x_buffer.c
436
437@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@SOFTWARE_8_X11_LIBADD = @evas_engine_software_8_x11_libs@
438@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@includes_HEADERS = Evas_Engine_Software_8_X11.h
439@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@includesdir = $(includedir)/evas-@VMAJ@
440@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_8_x11/$(MODULE_ARCH)
441@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@pkg_LTLIBRARIES = module.la
442@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@module_la_SOURCES = $(SOFTWARE_8_X11_SOURCES)
443@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@module_la_LIBADD = @EINA_LIBS@ $(SOFTWARE_8_X11_LIBADD) $(top_builddir)/src/lib/libevas.la
444#-lxcb-image -lxcb-shm -lxcb -lpixman-1
445@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@module_la_LDFLAGS = -no-undefined -module -avoid-version
446@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
447@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_TRUE@noinst_LTLIBRARIES = libevas_engine_software_8_x11.la
448@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_TRUE@libevas_engine_software_8_x11_la_SOURCES = $(SOFTWARE_8_X11_SOURCES)
449@BUILD_ENGINE_SOFTWARE_8_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_8_X11_TRUE@libevas_engine_software_8_x11_la_LIBADD = $(SOFTWARE_8_X11_LIBADD)
450EXTRA_DIST = evas_engine.h
451all: all-am
452
453.SUFFIXES:
454.SUFFIXES: .c .lo .o .obj
455$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
456 @for dep in $?; do \
457 case '$(am__configure_deps)' in \
458 *$$dep*) \
459 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
460 && { if test -f $@; then exit 0; else break; fi; }; \
461 exit 1;; \
462 esac; \
463 done; \
464 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_8_x11/Makefile'; \
465 $(am__cd) $(top_srcdir) && \
466 $(AUTOMAKE) --gnu src/modules/engines/software_8_x11/Makefile
467.PRECIOUS: Makefile
468Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
469 @case '$?' in \
470 *config.status*) \
471 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
472 *) \
473 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
474 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
475 esac;
476
477$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
478 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
479
480$(top_srcdir)/configure: $(am__configure_deps)
481 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
482$(ACLOCAL_M4): $(am__aclocal_m4_deps)
483 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
484$(am__aclocal_m4_deps):
485
486clean-noinstLTLIBRARIES:
487 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
488 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
489 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
490 test "$$dir" != "$$p" || dir=.; \
491 echo "rm -f \"$${dir}/so_locations\""; \
492 rm -f "$${dir}/so_locations"; \
493 done
494install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
495 @$(NORMAL_INSTALL)
496 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
497 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
498 list2=; for p in $$list; do \
499 if test -f $$p; then \
500 list2="$$list2 $$p"; \
501 else :; fi; \
502 done; \
503 test -z "$$list2" || { \
504 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
505 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
506 }
507
508uninstall-pkgLTLIBRARIES:
509 @$(NORMAL_UNINSTALL)
510 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
511 for p in $$list; do \
512 $(am__strip_dir) \
513 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
514 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
515 done
516
517clean-pkgLTLIBRARIES:
518 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
519 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
520 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
521 test "$$dir" != "$$p" || dir=.; \
522 echo "rm -f \"$${dir}/so_locations\""; \
523 rm -f "$${dir}/so_locations"; \
524 done
525libevas_engine_software_8_x11.la: $(libevas_engine_software_8_x11_la_OBJECTS) $(libevas_engine_software_8_x11_la_DEPENDENCIES)
526 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_software_8_x11_la_rpath) $(libevas_engine_software_8_x11_la_OBJECTS) $(libevas_engine_software_8_x11_la_LIBADD) $(LIBS)
527module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
528 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
529
530mostlyclean-compile:
531 -rm -f *.$(OBJEXT)
532
533distclean-compile:
534 -rm -f *.tab.c
535
536@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
537@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_x_buffer.Plo@am__quote@
538@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
539@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_x_buffer.Plo@am__quote@
540
541.c.o:
542@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
543@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
544@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
545@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
546@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
547@am__fastdepCC_FALSE@ $(COMPILE) -c $<
548
549.c.obj:
550@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
551@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
552@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
553@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
554@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
555@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
556
557.c.lo:
558@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
559@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
560@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
561@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
562@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
563@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
564
565module_la-evas_engine.lo: evas_engine.c
566@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
567@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
568@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
569@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
570@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
571@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
572
573module_la-evas_x_buffer.lo: evas_x_buffer.c
574@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_x_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_x_buffer.Tpo -c -o module_la-evas_x_buffer.lo `test -f 'evas_x_buffer.c' || echo '$(srcdir)/'`evas_x_buffer.c
575@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_x_buffer.Tpo $(DEPDIR)/module_la-evas_x_buffer.Plo
576@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
577@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_x_buffer.c' object='module_la-evas_x_buffer.lo' libtool=yes @AMDEPBACKSLASH@
578@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
579@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_x_buffer.lo `test -f 'evas_x_buffer.c' || echo '$(srcdir)/'`evas_x_buffer.c
580
581mostlyclean-libtool:
582 -rm -f *.lo
583
584clean-libtool:
585 -rm -rf .libs _libs
586install-includesHEADERS: $(includes_HEADERS)
587 @$(NORMAL_INSTALL)
588 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
589 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
590 for p in $$list; do \
591 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
592 echo "$$d$$p"; \
593 done | $(am__base_list) | \
594 while read files; do \
595 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
596 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
597 done
598
599uninstall-includesHEADERS:
600 @$(NORMAL_UNINSTALL)
601 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
602 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
603 test -n "$$files" || exit 0; \
604 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
605 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
606
607ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
608 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
609 unique=`for i in $$list; do \
610 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
611 done | \
612 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
613 END { if (nonempty) { for (i in files) print i; }; }'`; \
614 mkid -fID $$unique
615tags: TAGS
616
617TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
618 $(TAGS_FILES) $(LISP)
619 set x; \
620 here=`pwd`; \
621 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
622 unique=`for i in $$list; do \
623 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
624 done | \
625 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
626 END { if (nonempty) { for (i in files) print i; }; }'`; \
627 shift; \
628 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
629 test -n "$$unique" || unique=$$empty_fix; \
630 if test $$# -gt 0; then \
631 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
632 "$$@" $$unique; \
633 else \
634 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
635 $$unique; \
636 fi; \
637 fi
638ctags: CTAGS
639CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
640 $(TAGS_FILES) $(LISP)
641 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
642 unique=`for i in $$list; do \
643 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
644 done | \
645 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
646 END { if (nonempty) { for (i in files) print i; }; }'`; \
647 test -z "$(CTAGS_ARGS)$$unique" \
648 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
649 $$unique
650
651GTAGS:
652 here=`$(am__cd) $(top_builddir) && pwd` \
653 && $(am__cd) $(top_srcdir) \
654 && gtags -i $(GTAGS_ARGS) "$$here"
655
656distclean-tags:
657 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
658
659distdir: $(DISTFILES)
660 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
661 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
662 list='$(DISTFILES)'; \
663 dist_files=`for file in $$list; do echo $$file; done | \
664 sed -e "s|^$$srcdirstrip/||;t" \
665 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
666 case $$dist_files in \
667 */*) $(MKDIR_P) `echo "$$dist_files" | \
668 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
669 sort -u` ;; \
670 esac; \
671 for file in $$dist_files; do \
672 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
673 if test -d $$d/$$file; then \
674 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
675 if test -d "$(distdir)/$$file"; then \
676 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
677 fi; \
678 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
679 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
680 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
681 fi; \
682 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
683 else \
684 test -f "$(distdir)/$$file" \
685 || cp -p $$d/$$file "$(distdir)/$$file" \
686 || exit 1; \
687 fi; \
688 done
689check-am: all-am
690check: check-am
691all-am: Makefile $(LTLIBRARIES) $(HEADERS)
692installdirs:
693 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
694 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
695 done
696install: install-am
697install-exec: install-exec-am
698install-data: install-data-am
699uninstall: uninstall-am
700
701install-am: all-am
702 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
703
704installcheck: installcheck-am
705install-strip:
706 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
707 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
708 `test -z '$(STRIP)' || \
709 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
710mostlyclean-generic:
711
712clean-generic:
713
714distclean-generic:
715 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
716 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
717
718maintainer-clean-generic:
719 @echo "This command is intended for maintainers to use"
720 @echo "it deletes files that may require special tools to rebuild."
721 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
722clean: clean-am
723
724clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
725 clean-pkgLTLIBRARIES mostlyclean-am
726
727distclean: distclean-am
728 -rm -rf ./$(DEPDIR)
729 -rm -f Makefile
730distclean-am: clean-am distclean-compile distclean-generic \
731 distclean-tags
732
733dvi: dvi-am
734
735dvi-am:
736
737html: html-am
738
739html-am:
740
741info: info-am
742
743info-am:
744
745install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
746
747install-dvi: install-dvi-am
748
749install-dvi-am:
750
751install-exec-am:
752
753install-html: install-html-am
754
755install-html-am:
756
757install-info: install-info-am
758
759install-info-am:
760
761install-man:
762
763install-pdf: install-pdf-am
764
765install-pdf-am:
766
767install-ps: install-ps-am
768
769install-ps-am:
770
771installcheck-am:
772
773maintainer-clean: maintainer-clean-am
774 -rm -rf ./$(DEPDIR)
775 -rm -f Makefile
776maintainer-clean-am: distclean-am maintainer-clean-generic
777
778mostlyclean: mostlyclean-am
779
780mostlyclean-am: mostlyclean-compile mostlyclean-generic \
781 mostlyclean-libtool
782
783pdf: pdf-am
784
785pdf-am:
786
787ps: ps-am
788
789ps-am:
790
791uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
792
793.MAKE: install-am install-strip
794
795.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
796 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
797 ctags distclean distclean-compile distclean-generic \
798 distclean-libtool distclean-tags distdir dvi dvi-am html \
799 html-am info info-am install install-am install-data \
800 install-data-am install-dvi install-dvi-am install-exec \
801 install-exec-am install-html install-html-am \
802 install-includesHEADERS install-info install-info-am \
803 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
804 install-ps install-ps-am install-strip installcheck \
805 installcheck-am installdirs maintainer-clean \
806 maintainer-clean-generic mostlyclean mostlyclean-compile \
807 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
808 tags uninstall uninstall-am uninstall-includesHEADERS \
809 uninstall-pkgLTLIBRARIES
810
811
812# Tell versions [3.59,3.63) of GNU make to not export all variables.
813# Otherwise a system limit (for SysV at least) may be exceeded.
814.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_8_x11/evas_engine.c b/libraries/evas/src/modules/engines/software_8_x11/evas_engine.c
new file mode 100644
index 0000000..c8efb24
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_8_x11/evas_engine.c
@@ -0,0 +1,699 @@
1#include "evas_common.h"
2#include "evas_private.h"
3#include "evas_engine.h"
4#include "Evas_Engine_Software_8_X11.h"
5#include "evas_common_soft8.h"
6#include <pixman.h>
7
8int _evas_engine_soft8_x11_log_dom = -1;
9/* function tables - filled in later (func and parent func) */
10static Evas_Func func, pfunc;
11
12/* engine struct data */
13typedef struct _Render_Engine Render_Engine;
14
15struct _Render_Engine {
16 xcb_connection_t *connection;
17 xcb_drawable_t drawable;
18 xcb_screen_t *screen;
19 unsigned char pal[256];
20 int depth;
21
22 int w, h, rot;
23 Tilebuf *tb;
24 Tilebuf_Rect *rects;
25 Tilebuf_Rect *cur_rect;
26
27 X_Output_Buffer *shbuf;
28 Soft8_Image *tmp_out; /* used by indirect render, like rotation */
29
30 pixman_region16_t *clip_rects;
31 unsigned char end:1;
32 unsigned char shm:1;
33};
34
35/* prototypes we will use here */
36
37static void *eng_info(Evas * e);
38static void eng_info_free(Evas * e, void *info);
39static int eng_setup(Evas * e, void *info);
40static void eng_output_free(void *data);
41static void eng_output_resize(void *data, int w, int h);
42static void eng_output_tile_size_set(void *data, int w, int h);
43static void eng_output_redraws_rect_add(void *data, int x, int y, int w, int h);
44static void eng_output_redraws_rect_del(void *data, int x, int y, int w, int h);
45static void eng_output_redraws_clear(void *data);
46static void *eng_output_redraws_next_update_get(void *data, int *x, int *y,
47 int *w, int *h, int *cx,
48 int *cy, int *cw, int *ch);
49static void eng_output_redraws_next_update_push(void *data, void *surface,
50 int x, int y, int w, int h);
51static void eng_output_flush(void *data);
52static void eng_output_idle_flush(void *data);
53
54/* engine api this module provides */
55static void *
56eng_info(Evas * e)
57{
58 Evas_Engine_Info_Software_8_X11 *info;
59
60 info = calloc(1, sizeof(Evas_Engine_Info_Software_8_X11));
61 if (!info)
62 return NULL;
63 info->magic.magic = rand();
64 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
65 return info;
66 e = NULL;
67}
68
69static void
70eng_info_free(Evas * e __UNUSED__, void *info)
71{
72 Evas_Engine_Info_Software_8_X11 *in;
73 in = (Evas_Engine_Info_Software_8_X11 *) info;
74 free(in);
75}
76
77static void
78_tmp_out_alloc(Render_Engine * re)
79{
80 Tilebuf_Rect *r;
81 unsigned int w = 0, h = 0;
82
83 EINA_INLIST_FOREACH(re->rects, r)
84 {
85 if (r->w > (int)w)
86 w = r->w;
87 if (r->h > (int)h)
88 h = r->h;
89 }
90
91 if (re->tmp_out)
92 {
93 if ((re->tmp_out->cache_entry.w < w)
94 || (re->tmp_out->cache_entry.h < h))
95 {
96 evas_cache_image_drop(&re->tmp_out->cache_entry);
97 re->tmp_out = NULL;
98 }
99 }
100
101 if (!re->tmp_out)
102 {
103 Soft8_Image *im;
104
105 im = (Soft8_Image *)
106 evas_cache_image_empty(evas_common_soft8_image_cache_get());
107 im->cache_entry.flags.alpha = 0;
108 evas_cache_image_surface_alloc(&im->cache_entry, w, h);
109
110 re->tmp_out = im;
111 }
112}
113
114static void
115alloc_colors(Render_Engine * re)
116{
117 xcb_alloc_color_cookie_t color_rq[256];
118 xcb_alloc_color_reply_t *rep;
119 xcb_colormap_t colormap = re->screen->default_colormap;
120
121 int i;
122 for (i = 0; i < 256; i++)
123 color_rq[i] =
124 xcb_alloc_color(re->connection, colormap, i << 8, i << 8, i << 8);
125
126 for (i = 0; i < 256; i++)
127 {
128 rep = xcb_alloc_color_reply(re->connection, color_rq[i], NULL);
129 re->pal[i] = rep->pixel;
130 free(rep);
131 }
132}
133
134static int
135eng_setup(Evas * e, void *in)
136{
137 Render_Engine *re;
138 Evas_Engine_Info_Software_8_X11 *info;
139/* X_Output_Buffer *xob; */
140
141 info = (Evas_Engine_Info_Software_8_X11 *) in;
142 if (!e->engine.data.output)
143 {
144 /* the only check - simplistic, i know, but enough for this
145 * "special purpose" engine. Remember it is meant to be used
146 * for limited power devices that have a 8bit display mode
147 * and no real other acceleration, and high resolution so we
148 * can pre-dither into 8bpp. */
149// if (DefaultDepth(info->info.display,
150// DefaultScreen(info->info.display)) != 8)
151// return;
152 /* do common routine init - we wil at least use it for core
153 * image loading and font loading/glyph rendering & placement */
154 evas_common_cpu_init();
155
156 evas_common_blend_init();
157 evas_common_image_init();
158 evas_common_convert_init();
159 evas_common_scale_init();
160 evas_common_rectangle_init();
161 evas_common_polygon_init();
162 evas_common_line_init();
163 evas_common_font_init();
164 evas_common_draw_init();
165 evas_common_tilebuf_init();
166 evas_common_soft8_image_init();
167
168 /* render engine specific data */
169 re = calloc(1, sizeof(Render_Engine));
170 if (!re)
171 return 0;
172 e->engine.data.output = re;
173 re->connection = info->info.connection;
174 re->screen = info->info.screen;
175 re->drawable = info->info.drawable;
176 re->depth = info->info.depth;
177 re->w = e->output.w;
178 re->h = e->output.h;
179 re->rot = info->info.rotation;
180 re->tb = evas_common_tilebuf_new(e->output.w, e->output.h);
181 if (re->tb)
182 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
183 alloc_colors(re);
184 }
185 else
186 {
187 /* we changed the info after first init - do a re-eval where
188 * appropriate */
189 re = e->engine.data.output;
190 if (re->tb)
191 evas_common_tilebuf_free(re->tb);
192 re->connection = info->info.connection;
193 re->screen = info->info.screen;
194 re->drawable = info->info.drawable;
195 re->w = e->output.w;
196 re->h = e->output.h;
197 re->rot = info->info.rotation;
198 re->tb = evas_common_tilebuf_new(e->output.w, e->output.h);
199 if (re->tb)
200 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
201 if (re->tmp_out)
202 {
203 evas_cache_image_drop(&re->tmp_out->cache_entry);
204 re->tmp_out = NULL;
205 }
206 alloc_colors(re);
207 }
208 if (!e->engine.data.output)
209 return 0;
210
211 /* add a draw context if we dont have one */
212 if (!e->engine.data.context)
213 e->engine.data.context =
214 e->engine.func->context_new(e->engine.data.output);
215 /* check if the display can do shm */
216 re->shm = evas_software_8_x11_x_can_do_shm(re->connection, re->screen);
217
218 return 1;
219}
220
221static void
222eng_output_free(void *data)
223{
224 Render_Engine *re;
225
226 re = (Render_Engine *) data;
227 if (re->shbuf)
228 evas_software_8_x11_x_output_buffer_free(re->shbuf, 0);
229 if (re->clip_rects)
230 {
231 pixman_region_fini(re->clip_rects);
232 free(re->clip_rects);
233 re->clip_rects = NULL;
234 }
235 if (re->tb)
236 evas_common_tilebuf_free(re->tb);
237 if (re->rects)
238 evas_common_tilebuf_free_render_rects(re->rects);
239 if (re->tmp_out)
240 evas_cache_image_drop(&re->tmp_out->cache_entry);
241 free(re);
242
243 evas_common_font_shutdown();
244 evas_common_image_shutdown();
245 evas_common_soft8_image_shutdown();
246}
247
248static void
249eng_output_resize(void *data, int w, int h)
250{
251 Render_Engine *re;
252
253 re = (Render_Engine *) data;
254
255 if ((re->w == w) && (re->h == h))
256 return;
257
258 evas_common_tilebuf_free(re->tb);
259 re->w = w;
260 re->h = h;
261 re->tb = evas_common_tilebuf_new(w, h);
262 if (re->tb)
263 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
264 if (re->shbuf)
265 {
266 evas_software_8_x11_x_output_buffer_free(re->shbuf, 0);
267 re->shbuf = NULL;
268 }
269 if (re->clip_rects)
270 {
271 pixman_region_fini(re->clip_rects);
272 free(re->clip_rects);
273 re->clip_rects = NULL;
274 }
275
276 if (re->tmp_out)
277 {
278 evas_cache_image_drop(&re->tmp_out->cache_entry);
279 re->tmp_out = NULL;
280 }
281}
282
283static void
284eng_output_tile_size_set(void *data, int w, int h)
285{
286 Render_Engine *re;
287
288 re = (Render_Engine *) data;
289 evas_common_tilebuf_set_tile_size(re->tb, w, h);
290}
291
292static void
293eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
294{
295 Render_Engine *re;
296
297 re = (Render_Engine *) data;
298 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
299}
300
301static void
302eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
303{
304 Render_Engine *re;
305
306 re = (Render_Engine *) data;
307 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
308}
309
310static void
311eng_output_redraws_clear(void *data)
312{
313 Render_Engine *re;
314
315 re = (Render_Engine *) data;
316 evas_common_tilebuf_clear(re->tb);
317}
318
319static inline void
320_output_buffer_alloc(Render_Engine * re)
321{
322 int w, h;
323 if (re->shbuf)
324 return;
325
326 if ((re->rot == 0) || (re->rot == 180))
327 {
328 w = re->w;
329 h = re->h;
330 }
331 else
332 {
333 w = re->h;
334 h = re->w;
335 }
336
337 re->shbuf = evas_software_8_x11_x_output_buffer_new
338 (re->connection, re->screen, re->depth, re->pal, w, h, 1, NULL);
339
340 re->shbuf->drawable = re->drawable;
341 re->shbuf->screen = re->screen;
342 if (re->shbuf->gc)
343 {
344 xcb_free_gc(re->shbuf->connection, re->shbuf->gc);
345 re->shbuf->gc = 0;
346 }
347
348 re->shbuf->gc = xcb_generate_id(re->shbuf->connection);
349 xcb_create_gc(re->shbuf->connection, re->shbuf->gc, re->shbuf->drawable, 0,
350 NULL);
351}
352
353static void *
354eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h,
355 int *cx, int *cy, int *cw, int *ch)
356{
357 Render_Engine *re;
358 Tilebuf_Rect *rect;
359 int ux, uy, uw, uh;
360
361 re = (Render_Engine *) data;
362 if (re->end)
363 {
364 re->end = 0;
365 return NULL;
366 }
367 if (!re->rects)
368 {
369 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
370 if (!re->rects)
371 return NULL;
372
373 re->cur_rect = re->rects;
374 _output_buffer_alloc(re);
375 if (re->rot != 0)
376 _tmp_out_alloc(re); /* grows if required */
377 }
378 if (!re->cur_rect)
379 {
380 if (re->rects)
381 evas_common_tilebuf_free_render_rects(re->rects);
382 re->rects = NULL;
383 return NULL;
384 }
385 rect = re->cur_rect;
386 ux = rect->x;
387 uy = rect->y;
388 uw = rect->w;
389 uh = rect->h;
390 re->cur_rect = (Tilebuf_Rect *) ((EINA_INLIST_GET(re->cur_rect))->next);
391 if (!re->cur_rect)
392 {
393 evas_common_tilebuf_free_render_rects(re->rects);
394 re->rects = NULL;
395 re->end = 1;
396 }
397
398 *x = ux;
399 *y = uy;
400 *w = uw;
401 *h = uh;
402 if (re->rot == 0)
403 {
404 *cx = ux;
405 *cy = uy;
406 *cw = uw;
407 *ch = uh;
408 return re->shbuf->im;
409 }
410 else
411 {
412 *cx = 0;
413 *cy = 0;
414 *cw = uw;
415 *ch = uh;
416 return re->tmp_out;
417 }
418}
419
420static void
421_blit_rot_90(Soft8_Image * dst, const Soft8_Image * src,
422 int out_x, int out_y, int w, int h)
423{
424 DATA8 *dp, *sp;
425 int x, y;
426
427 sp = src->pixels;
428 dp = dst->pixels + (out_x + (w + out_y - 1) * dst->stride);
429
430 for (y = 0; y < h; y++)
431 {
432 DATA8 *dp_itr, *sp_itr;
433
434 sp_itr = sp;
435 dp_itr = dp;
436
437 for (x = 0; x < w; x++)
438 {
439 *dp_itr = *sp_itr;
440
441 sp_itr++;
442 dp_itr -= dst->stride;
443 }
444 sp += src->stride;
445 dp++;
446 }
447}
448
449static void
450_blit_rot_180(Soft8_Image * dst, const Soft8_Image * src,
451 int out_x, int out_y, int w, int h)
452{
453 DATA8 *dp, *sp;
454 int x, y;
455
456 sp = src->pixels;
457 dp = dst->pixels + ((w + out_x - 1) + (h + out_y - 1) * dst->stride);
458
459 for (y = 0; y < h; y++)
460 {
461 DATA8 *dp_itr, *sp_itr;
462
463 sp_itr = sp;
464 dp_itr = dp;
465
466 for (x = 0; x < w; x++)
467 {
468 *dp_itr = *sp_itr;
469
470 sp_itr++;
471 dp_itr--;
472 }
473 sp += src->stride;
474 dp -= dst->stride;
475 }
476}
477
478static void
479_blit_rot_270(Soft8_Image * dst, const Soft8_Image * src,
480 int out_x, int out_y, int w, int h)
481{
482 DATA8 *dp, *sp;
483 int x, y;
484
485 sp = src->pixels;
486 dp = dst->pixels + ((h + out_x - 1) + out_y * dst->stride);
487
488 for (y = 0; y < h; y++)
489 {
490 DATA8 *dp_itr, *sp_itr;
491
492 sp_itr = sp;
493 dp_itr = dp;
494
495 for (x = 0; x < w; x++)
496 {
497 *dp_itr = *sp_itr;
498
499 sp_itr++;
500 dp_itr += dst->stride;
501 }
502 sp += src->stride;
503 dp--;
504 }
505}
506
507static void
508_tmp_out_process(Render_Engine * re, int out_x, int out_y, int w, int h)
509{
510 Soft8_Image *d, *s;
511
512 d = re->shbuf->im;
513 s = re->tmp_out;
514
515 if ((w < 1) || (h < 1) ||
516 (out_x >= (int)d->cache_entry.w) ||
517 (out_y >= (int)d->cache_entry.h))
518 return;
519
520 if (re->rot == 90)
521 _blit_rot_90(d, s, out_x, out_y, w, h);
522 else if (re->rot == 180)
523 _blit_rot_180(d, s, out_x, out_y, w, h);
524 else if (re->rot == 270)
525 _blit_rot_270(d, s, out_x, out_y, w, h);
526}
527
528static void
529eng_output_redraws_next_update_push(void *data, void *surface __UNUSED__, int x,
530 int y, int w, int h)
531{
532 Render_Engine *re;
533 struct {
534 int x, y, width, height;
535 } r =
536 {
537 0, 0, 0, 0};
538
539 re = (Render_Engine *) data;
540
541 if (!re->clip_rects)
542 {
543 re->clip_rects =
544 (pixman_region16_t *) malloc(sizeof(pixman_region16_t));
545 pixman_region_init(re->clip_rects);
546 }
547
548 if (re->rot == 0)
549 {
550 r.x = x;
551 r.y = y;
552 r.width = w;
553 r.height = h;
554 }
555 else if (re->rot == 90)
556 {
557 r.x = y;
558 r.y = re->w - w - x;
559 r.width = h;
560 r.height = w;
561 }
562 else if (re->rot == 180)
563 {
564 r.x = re->w - w - x;
565 r.y = re->h - h - y;
566 r.width = w;
567 r.height = h;
568 }
569 else if (re->rot == 270)
570 {
571 r.x = re->h - h - y;
572 r.y = x;
573 r.width = h;
574 r.height = w;
575 }
576
577 if (re->rot != 0)
578 _tmp_out_process(re, r.x, r.y, w, h);
579
580 pixman_region_union_rect(re->clip_rects, re->clip_rects,
581 r.x, r.y, r.width, r.height);
582}
583
584static void
585eng_output_flush(void *data)
586{
587 Render_Engine *re;
588
589 re = (Render_Engine *) data;
590
591 if (re->clip_rects)
592 {
593 re->shbuf->drawable = re->drawable;
594 {
595 int i;
596 pixman_box16_t *rects =
597 pixman_region_rectangles(re->clip_rects, NULL);
598 for (i = 0; i < pixman_region_n_rects(re->clip_rects); i++, rects++)
599 evas_software_8_x11_x_output_buffer_paste
600 (re->shbuf, re->drawable, re->shbuf->gc, rects->x1, rects->y1,
601 rects->x2 - rects->x1, rects->y2 - rects->y1, 1);
602 }
603
604 pixman_region_fini(re->clip_rects);
605 free(re->clip_rects);
606 re->clip_rects = NULL;
607 }
608}
609
610static void
611eng_output_idle_flush(void *data)
612{
613 Render_Engine *re;
614
615 re = (Render_Engine *) data;
616 if (re->shbuf)
617 {
618 evas_software_8_x11_x_output_buffer_free(re->shbuf, 0);
619 re->shbuf = NULL;
620 }
621 if (re->clip_rects)
622 {
623 pixman_region_fini(re->clip_rects);
624 free(re->clip_rects);
625 re->clip_rects = NULL;
626 }
627 if (re->tmp_out)
628 {
629 evas_cache_image_drop(&re->tmp_out->cache_entry);
630 re->tmp_out = NULL;
631 }
632}
633
634static Eina_Bool
635eng_canvas_alpha_get(void *data __UNUSED__, void *context __UNUSED__)
636{
637 return EINA_FALSE;
638}
639
640/* module advertising code */
641static int
642module_open(Evas_Module * em)
643{
644 if (!em)
645 return 0;
646 /* get whatever engine module we inherit from */
647 if (!_evas_module_engine_inherit(&pfunc, "software_8"))
648 return 0;
649 _evas_engine_soft8_x11_log_dom = eina_log_domain_register
650 ("evas-software_8_x11", EVAS_DEFAULT_LOG_COLOR);
651 if (_evas_engine_soft8_x11_log_dom < 0)
652 {
653 EINA_LOG_ERR("Can not create a module log domain.");
654 return 0;
655 }
656
657 /* store it for later use */
658 func = pfunc;
659 /* now to override methods */
660#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
661 ORD(info);
662 ORD(info_free);
663 ORD(setup);
664 ORD(canvas_alpha_get);
665 ORD(output_free);
666 ORD(output_resize);
667 ORD(output_tile_size_set);
668 ORD(output_redraws_rect_add);
669 ORD(output_redraws_rect_del);
670 ORD(output_redraws_clear);
671 ORD(output_redraws_next_update_get);
672 ORD(output_redraws_next_update_push);
673 ORD(output_flush);
674 ORD(output_idle_flush);
675 /* now advertise out own api */
676 em->functions = (void *)(&func);
677 return 1;
678}
679
680static void
681module_close(Evas_Module * em __UNUSED__)
682{
683 eina_log_domain_unregister(_evas_engine_soft8_x11_log_dom);
684}
685
686static Evas_Module_Api evas_modapi = {
687 EVAS_MODULE_API_VERSION,
688 "software_8_x11",
689 "none",
690 {
691 module_open,
692 module_close}
693};
694
695EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_8_x11);
696
697#ifndef EVAS_STATIC_BUILD_SOFTWARE_8_X11
698EVAS_EINA_MODULE_DEFINE(engine, software_8_x11);
699#endif
diff --git a/libraries/evas/src/modules/engines/software_8_x11/evas_engine.h b/libraries/evas/src/modules/engines/software_8_x11/evas_engine.h
new file mode 100644
index 0000000..1fa12df
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_8_x11/evas_engine.h
@@ -0,0 +1,65 @@
1#ifndef EVAS_ENGINE_H
2#define EVAS_ENGINE_H
3
4#include <sys/ipc.h>
5#include <sys/shm.h>
6
7#include <xcb/xcb.h>
8#include <xcb/shm.h>
9#include <xcb/xcb_image.h>
10
11#include "evas_common.h"
12#include "evas_common_soft8.h"
13
14extern int _evas_engine_soft8_x11_log_dom;
15#ifdef ERR
16# undef ERR
17#endif
18#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_soft8_x11_log_dom, __VA_ARGS__)
19
20#ifdef DBG
21# undef DBG
22#endif
23#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_soft8_x11_log_dom, __VA_ARGS__)
24
25#ifdef INF
26# undef INF
27#endif
28#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_soft8_x11_log_dom, __VA_ARGS__)
29
30#ifdef WRN
31# undef WRN
32#endif
33#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_soft8_x11_log_dom, __VA_ARGS__)
34
35#ifdef CRIT
36# undef CRIT
37#endif
38#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_soft8_x11_log_dom, __VA_ARGS__)
39
40typedef struct _X_Output_Buffer X_Output_Buffer;
41
42struct _X_Output_Buffer
43{
44 Soft8_Image *im;
45 xcb_connection_t *connection;
46 xcb_screen_t *screen;
47 xcb_image_t *xim;
48 xcb_drawable_t drawable;
49 xcb_gcontext_t gc;
50 xcb_shm_segment_info_t *shm_info;
51 unsigned char *pal;
52 void *data;
53};
54
55/****/
56int evas_software_8_x11_x_can_do_shm (xcb_connection_t *c, xcb_screen_t *screen);
57X_Output_Buffer *evas_software_8_x11_x_output_buffer_new (xcb_connection_t *, xcb_screen_t *screen, int depth, unsigned char *pal, int w, int h, int try_shm, void *data);
58void evas_software_8_x11_x_output_buffer_free (X_Output_Buffer *xob, int sync);
59void evas_software_8_x11_x_output_buffer_paste (X_Output_Buffer *xob, xcb_drawable_t d, xcb_gcontext_t gc, int x, int y, int w, int h, int sync);
60DATA8 *evas_software_8_x11_x_output_buffer_data (X_Output_Buffer *xob, int *bytes_per_line_ret);
61int evas_software_8_x11_x_output_buffer_depth (X_Output_Buffer *xob);
62int evas_software_8_x11_x_output_buffer_byte_order (X_Output_Buffer *xob);
63int evas_software_8_x11_x_output_buffer_bit_order (X_Output_Buffer *xob);
64
65#endif
diff --git a/libraries/evas/src/modules/engines/software_8_x11/evas_x_buffer.c b/libraries/evas/src/modules/engines/software_8_x11/evas_x_buffer.c
new file mode 100644
index 0000000..a2c40b1
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_8_x11/evas_x_buffer.c
@@ -0,0 +1,243 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4static int _xcb_err = 0;
5
6int
7evas_software_8_x11_x_can_do_shm(xcb_connection_t * c, xcb_screen_t * screen)
8{
9 static xcb_connection_t *cached_c = NULL;
10 static int cached_result = 0;
11
12 if (c == cached_c)
13 return cached_result;
14 cached_c = c;
15
16 if (xcb_get_extension_data(c, &xcb_shm_id))
17 {
18 X_Output_Buffer *xob;
19
20 xob = evas_software_8_x11_x_output_buffer_new
21 (c, screen, screen->root_depth, (unsigned char *)NULL,
22 16, 16, 2, NULL);
23 if (!xob)
24 {
25 cached_result = 0;
26 return 0;
27 }
28 evas_software_8_x11_x_output_buffer_free(xob, 1);
29 cached_result = 1;
30 return 1;
31 }
32 cached_result = 0;
33 return 0;
34}
35
36X_Output_Buffer *
37evas_software_8_x11_x_output_buffer_new(xcb_connection_t * c,
38 xcb_screen_t * s,
39 int depth,
40 unsigned char *pal,
41 int w, int h, int try_shm, void *data)
42{
43 X_Output_Buffer *xob;
44
45 xob = calloc(1, sizeof(X_Output_Buffer));
46 if (!xob)
47 return NULL;
48
49 xob->connection = c;
50 xob->screen = s;
51 xob->xim = NULL;
52 xob->shm_info = NULL;
53 xob->pal = pal;
54
55 if (try_shm > 0)
56 {
57 xob->shm_info = malloc(sizeof(xcb_shm_segment_info_t));
58 if (xob->shm_info)
59 {
60 xob->shm_info->shmseg = xcb_generate_id(c);
61 xob->xim = xcb_image_create_native(c, w, h,
62 XCB_IMAGE_FORMAT_Z_PIXMAP,
63 depth, NULL, ~0, NULL);
64 if (xob->xim)
65 {
66 int shmid = shmget
67 (IPC_PRIVATE, xob->xim->size, IPC_CREAT | 0777);
68
69 if (shmid >= 0)
70 {
71 xob->shm_info->shmid = shmid;
72 xob->shm_info->shmaddr = xob->xim->data =
73 shmat(xob->shm_info->shmid, 0, 0);
74
75 if (xob->shm_info->shmaddr)
76 {
77 /*
78 * FIXME: no error mechanism
79 */
80
81 /* XErrorHandler ph; */
82 /* EventHandlers eh; */
83
84 free(xcb_get_input_focus_reply
85 (c, xcb_get_input_focus_unchecked(c), NULL));
86 _xcb_err = 0;
87 /* ph = XSetErrorHandler((XErrorHandler) */
88 /* x_output_tmp_x_err); */
89 xcb_shm_attach(c,
90 xob->shm_info->shmseg,
91 xob->shm_info->shmid, 0);
92 free(xcb_get_input_focus_reply
93 (c, xcb_get_input_focus_unchecked(c), NULL));
94 /* XSetErrorHandler((XErrorHandler)ph); */
95 if (!_xcb_err)
96 {
97 xob->im =
98 (Soft8_Image *)
99 evas_cache_image_data
100 (evas_common_soft8_image_cache_get(), w, h,
101 (DATA32 *) xob->xim->data, 0,
102 EVAS_COLORSPACE_GRY8);
103
104 if (xob->im)
105 xob->im->stride =
106 xob->xim->stride / sizeof(DATA8);
107 return xob;
108 }
109 }
110 shmdt(xob->shm_info->shmaddr);
111 shmctl(xob->shm_info->shmid, IPC_RMID, 0);
112 }
113 if (xob->xim)
114 xcb_image_destroy(xob->xim);
115 xob->xim = NULL;
116 }
117 if (xob->shm_info)
118 free(xob->shm_info);
119 xob->shm_info = NULL;
120 }
121 }
122
123 if (try_shm > 1)
124 return NULL;
125
126 xob->xim = xcb_image_create_native(c, w, h, XCB_IMAGE_FORMAT_Z_PIXMAP,
127 depth, NULL, ~0, NULL);
128 if (!xob->xim)
129 {
130 free(xob);
131 return NULL;
132 }
133
134 xob->data = data;
135
136 if (!xob->xim->data)
137 {
138 xob->xim->data = malloc(xob->xim->stride * xob->xim->height);
139 if (!xob->xim->data)
140 {
141 xcb_image_destroy(xob->xim);
142 free(xob);
143 return NULL;
144 }
145 }
146 if (xob->im)
147 evas_cache_image_drop(&xob->im->cache_entry);
148
149 xob->im =
150 (Soft8_Image *)
151 evas_cache_image_data(evas_common_soft8_image_cache_get(), w, h,
152 (DATA32 *) xob->xim->data, 0,
153 EVAS_COLORSPACE_GRY8);
154 if (xob->im)
155 xob->im->stride = xob->xim->stride / sizeof(DATA8);
156 return xob;
157}
158
159void
160evas_software_8_x11_x_output_buffer_free(X_Output_Buffer * xob, int sync)
161{
162 if (xob->shm_info)
163 {
164 if (sync)
165 free(xcb_get_input_focus_reply(xob->connection,
166 xcb_get_input_focus_unchecked(xob->
167 connection),
168 NULL));
169 xcb_shm_detach(xob->connection, xob->shm_info->shmseg);
170 xcb_image_destroy(xob->xim);
171 shmdt(xob->shm_info->shmaddr);
172 shmctl(xob->shm_info->shmid, IPC_RMID, 0);
173 free(xob->shm_info);
174 }
175 else
176 {
177 if (xob->data)
178 xob->xim->data = NULL;
179 free(xob->xim->data);
180 xcb_image_destroy(xob->xim);
181 }
182 free(xob);
183}
184
185void
186evas_software_8_x11_x_output_buffer_paste(X_Output_Buffer * xob,
187 xcb_drawable_t d,
188 xcb_gcontext_t gc,
189 int x, int y, int w, int h, int sync)
190{
191 unsigned char *data;
192 int i, j;
193
194 if (xob->shm_info)
195 {
196 for (i = y; i < y + h; i++)
197 {
198 data = xob->xim->data + i * xob->xim->width + x;
199 for (j = x; j < x + w; j++, data++)
200 *data = xob->pal[*data];
201 }
202
203 xcb_image_shm_put(xob->connection, d, gc,
204 xob->xim, *xob->shm_info, x, y, x, y, w, h, 0);
205
206 if (sync)
207 free(xcb_get_input_focus_reply(xob->connection,
208 xcb_get_input_focus_unchecked(xob->
209 connection),
210 NULL));
211 }
212 else
213 {
214 xcb_image_put(xob->connection, d, gc, xob->xim, x, y, 0);
215 }
216}
217
218DATA8 *
219evas_software_8_x11_x_output_buffer_data(X_Output_Buffer * xob,
220 int *bytes_per_line_ret)
221{
222 if (bytes_per_line_ret)
223 *bytes_per_line_ret = xob->xim->stride;
224 return (DATA8 *) xob->xim->data;
225}
226
227int
228evas_software_8_x11_x_output_buffer_depth(X_Output_Buffer * xob)
229{
230 return xob->xim->bpp;
231}
232
233int
234evas_software_8_x11_x_output_buffer_byte_order(X_Output_Buffer * xob)
235{
236 return xob->xim->byte_order;
237}
238
239int
240evas_software_8_x11_x_output_buffer_bit_order(X_Output_Buffer * xob)
241{
242 return xob->xim->bit_order;
243}
diff --git a/libraries/evas/src/modules/engines/software_ddraw/Evas_Engine_Software_DDraw.h b/libraries/evas/src/modules/engines/software_ddraw/Evas_Engine_Software_DDraw.h
new file mode 100644
index 0000000..9735bb7
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_ddraw/Evas_Engine_Software_DDraw.h
@@ -0,0 +1,30 @@
1#ifndef __EVAS_ENGINE_SOFTWARE_DDRAW_H__
2#define __EVAS_ENGINE_SOFTWARE_DDRAW_H__
3
4
5#define WIN32_LEAN_AND_MEAN
6#include <windows.h>
7#undef WIN32_LEAN_AND_MEAN
8
9
10typedef struct _Evas_Engine_Info_Software_DDraw Evas_Engine_Info_Software_DDraw;
11
12struct _Evas_Engine_Info_Software_DDraw
13{
14 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
15 /* at you and make nasty noises */
16 Evas_Engine_Info magic;
17
18 struct {
19 HWND window;
20 int depth;
21 int rotation;
22 unsigned int fullscreen : 1;
23 } info;
24
25 /* non-blocking or blocking mode */
26 Evas_Engine_Render_Mode render_mode;
27};
28
29
30#endif /* __EVAS_ENGINE_SOFTWARE_DDRAW_H__ */
diff --git a/libraries/evas/src/modules/engines/software_ddraw/Makefile.am b/libraries/evas/src/modules/engines/software_ddraw/Makefile.am
new file mode 100644
index 0000000..594c7ab
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_ddraw/Makefile.am
@@ -0,0 +1,48 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9@EINA_CFLAGS@ \
10@FREETYPE_CFLAGS@ \
11@PIXMAN_CFLAGS@ \
12@evas_engine_software_ddraw_cflags@
13
14if BUILD_ENGINE_SOFTWARE_DDRAW
15
16SOFTWARE_DDRAW_SOURCES = \
17evas_engine.c \
18evas_outbuf.c \
19evas_ddraw_buffer.c \
20evas_ddraw_main.cpp
21
22SOFTWARE_DDRAW_LIBADD = @evas_engine_software_ddraw_libs@
23
24
25includes_HEADERS = Evas_Engine_Software_DDraw.h
26includesdir = $(includedir)/evas-@VMAJ@
27
28if !EVAS_STATIC_BUILD_SOFTWARE_DDRAW
29
30pkgdir = $(libdir)/evas/modules/engines/software_ddraw/$(MODULE_ARCH)
31pkg_LTLIBRARIES = module.la
32module_la_SOURCES = $(SOFTWARE_DDRAW_SOURCES)
33module_la_CXXFLAGS = -fno-rtti -fno-exceptions
34module_la_LIBADD = @EINA_LIBS@ $(SOFTWARE_DDRAW_LIBADD) $(top_builddir)/src/lib/libevas.la
35module_la_LDFLAGS = @lt_enable_auto_import@ -no-undefined -module -avoid-version
36module_la_LIBTOOLFLAGS = --tag=disable-static
37
38else
39
40noinst_LTLIBRARIES = libevas_engine_software_ddraw.la
41
42libevas_engine_software_ddraw_la_SOURCES = $(SOFTWARE_DDRAW_SOURCES)
43libevas_engine_software_ddraw_la_LIBADD = $(SOFTWARE_DDRAW_LIBADD)
44
45endif
46endif
47
48EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/software_ddraw/Makefile.in b/libraries/evas/src/modules/engines/software_ddraw/Makefile.in
new file mode 100644
index 0000000..be4c977
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_ddraw/Makefile.in
@@ -0,0 +1,880 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/software_ddraw
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84am__DEPENDENCIES_1 =
85@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_TRUE@libevas_engine_software_ddraw_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_software_ddraw_la_SOURCES_DIST = evas_engine.c \
87 evas_outbuf.c evas_ddraw_buffer.c evas_ddraw_main.cpp
88@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@am__objects_1 = evas_engine.lo \
89@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@ evas_outbuf.lo \
90@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@ evas_ddraw_buffer.lo \
91@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@ evas_ddraw_main.lo
92@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_TRUE@am_libevas_engine_software_ddraw_la_OBJECTS = $(am__objects_1)
93libevas_engine_software_ddraw_la_OBJECTS = \
94 $(am_libevas_engine_software_ddraw_la_OBJECTS)
95AM_V_lt = $(am__v_lt_$(V))
96am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
97am__v_lt_0 = --silent
98@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_TRUE@am_libevas_engine_software_ddraw_la_rpath =
99@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@module_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
100@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@ $(top_builddir)/src/lib/libevas.la
101am__module_la_SOURCES_DIST = evas_engine.c evas_outbuf.c \
102 evas_ddraw_buffer.c evas_ddraw_main.cpp
103@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@am__objects_2 = \
104@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@ module_la-evas_engine.lo \
105@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@ module_la-evas_outbuf.lo \
106@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@ module_la-evas_ddraw_buffer.lo \
107@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@ module_la-evas_ddraw_main.lo
108@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@am_module_la_OBJECTS = $(am__objects_2)
109module_la_OBJECTS = $(am_module_la_OBJECTS)
110module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
111 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
112 $(module_la_CXXFLAGS) $(CXXFLAGS) $(module_la_LDFLAGS) \
113 $(LDFLAGS) -o $@
114@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@am_module_la_rpath = -rpath \
115@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@ $(pkgdir)
116DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
117depcomp = $(SHELL) $(top_srcdir)/depcomp
118am__depfiles_maybe = depfiles
119am__mv = mv -f
120COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
121 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
122LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
123 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
124 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
125 $(AM_CFLAGS) $(CFLAGS)
126AM_V_CC = $(am__v_CC_$(V))
127am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
128am__v_CC_0 = @echo " CC " $@;
129AM_V_at = $(am__v_at_$(V))
130am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
131am__v_at_0 = @
132CCLD = $(CC)
133LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
134 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
135 $(AM_LDFLAGS) $(LDFLAGS) -o $@
136AM_V_CCLD = $(am__v_CCLD_$(V))
137am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
138am__v_CCLD_0 = @echo " CCLD " $@;
139CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
140 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
141LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
142 $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
143 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
144 $(AM_CXXFLAGS) $(CXXFLAGS)
145AM_V_CXX = $(am__v_CXX_$(V))
146am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
147am__v_CXX_0 = @echo " CXX " $@;
148CXXLD = $(CXX)
149CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
150 $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
151 $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
152AM_V_CXXLD = $(am__v_CXXLD_$(V))
153am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
154am__v_CXXLD_0 = @echo " CXXLD " $@;
155AM_V_GEN = $(am__v_GEN_$(V))
156am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
157am__v_GEN_0 = @echo " GEN " $@;
158SOURCES = $(libevas_engine_software_ddraw_la_SOURCES) \
159 $(module_la_SOURCES)
160DIST_SOURCES = $(am__libevas_engine_software_ddraw_la_SOURCES_DIST) \
161 $(am__module_la_SOURCES_DIST)
162am__includes_HEADERS_DIST = Evas_Engine_Software_DDraw.h
163HEADERS = $(includes_HEADERS)
164ETAGS = etags
165CTAGS = ctags
166DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
167ACLOCAL = @ACLOCAL@
168ALLOCA = @ALLOCA@
169AMTAR = @AMTAR@
170AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
171AR = @AR@
172AS = @AS@
173AUTOCONF = @AUTOCONF@
174AUTOHEADER = @AUTOHEADER@
175AUTOMAKE = @AUTOMAKE@
176AWK = @AWK@
177CC = @CC@
178CCDEPMODE = @CCDEPMODE@
179CFLAGS = @CFLAGS@
180CHECK_CFLAGS = @CHECK_CFLAGS@
181CHECK_LIBS = @CHECK_LIBS@
182CPP = @CPP@
183CPPFLAGS = @CPPFLAGS@
184CXX = @CXX@
185CXXCPP = @CXXCPP@
186CXXDEPMODE = @CXXDEPMODE@
187CXXFLAGS = @CXXFLAGS@
188CYGPATH_W = @CYGPATH_W@
189DEFS = @DEFS@
190DEPDIR = @DEPDIR@
191DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
192DIRECTFB_LIBS = @DIRECTFB_LIBS@
193DLLTOOL = @DLLTOOL@
194DSYMUTIL = @DSYMUTIL@
195DUMPBIN = @DUMPBIN@
196ECHO_C = @ECHO_C@
197ECHO_N = @ECHO_N@
198ECHO_T = @ECHO_T@
199ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
200ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
201EDB_CFLAGS = @EDB_CFLAGS@
202EDB_LIBS = @EDB_LIBS@
203EDJE_CFLAGS = @EDJE_CFLAGS@
204EDJE_LIBS = @EDJE_LIBS@
205EET_CFLAGS = @EET_CFLAGS@
206EET_LIBS = @EET_LIBS@
207EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
208EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
209EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
210EGREP = @EGREP@
211EINA_CFLAGS = @EINA_CFLAGS@
212EINA_LIBS = @EINA_LIBS@
213EVAS_CFLAGS = @EVAS_CFLAGS@
214EVAS_LIBS = @EVAS_LIBS@
215EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
216EVIL_CFLAGS = @EVIL_CFLAGS@
217EVIL_LIBS = @EVIL_LIBS@
218EXEEXT = @EXEEXT@
219FGREP = @FGREP@
220FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
221FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
222FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
223FREETYPE_LIBS = @FREETYPE_LIBS@
224FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
225FRIBIDI_LIBS = @FRIBIDI_LIBS@
226GL_EET_CFLAGS = @GL_EET_CFLAGS@
227GL_EET_LIBS = @GL_EET_LIBS@
228GREP = @GREP@
229HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
230HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
231INSTALL = @INSTALL@
232INSTALL_DATA = @INSTALL_DATA@
233INSTALL_PROGRAM = @INSTALL_PROGRAM@
234INSTALL_SCRIPT = @INSTALL_SCRIPT@
235INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
236LD = @LD@
237LDFLAGS = @LDFLAGS@
238LIBOBJS = @LIBOBJS@
239LIBS = @LIBS@
240LIBTOOL = @LIBTOOL@
241LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
242LINEBREAK_LIBS = @LINEBREAK_LIBS@
243LIPO = @LIPO@
244LN_S = @LN_S@
245LTLIBOBJS = @LTLIBOBJS@
246MAKEINFO = @MAKEINFO@
247MKDIR_P = @MKDIR_P@
248MODULE_ARCH = @MODULE_ARCH@
249NM = @NM@
250NMEDIT = @NMEDIT@
251OBJC = @OBJC@
252OBJCDEPMODE = @OBJCDEPMODE@
253OBJCFLAGS = @OBJCFLAGS@
254OBJDUMP = @OBJDUMP@
255OBJEXT = @OBJEXT@
256OTOOL = @OTOOL@
257OTOOL64 = @OTOOL64@
258PACKAGE = @PACKAGE@
259PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
260PACKAGE_NAME = @PACKAGE_NAME@
261PACKAGE_STRING = @PACKAGE_STRING@
262PACKAGE_TARNAME = @PACKAGE_TARNAME@
263PACKAGE_URL = @PACKAGE_URL@
264PACKAGE_VERSION = @PACKAGE_VERSION@
265PATH_SEPARATOR = @PATH_SEPARATOR@
266PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
267PIXMAN_LIBS = @PIXMAN_LIBS@
268PKG_CONFIG = @PKG_CONFIG@
269PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
270PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
271PNG_CFLAGS = @PNG_CFLAGS@
272PNG_LIBS = @PNG_LIBS@
273RANLIB = @RANLIB@
274SDL_CFLAGS = @SDL_CFLAGS@
275SDL_LIBS = @SDL_LIBS@
276SED = @SED@
277SET_MAKE = @SET_MAKE@
278SHELL = @SHELL@
279SHM_OPEN_LINK = @SHM_OPEN_LINK@
280STRIP = @STRIP@
281SVG_CFLAGS = @SVG_CFLAGS@
282SVG_LIBS = @SVG_LIBS@
283VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
284VALGRIND_LIBS = @VALGRIND_LIBS@
285VERSION = @VERSION@
286VMAJ = @VMAJ@
287WIN32_CFLAGS = @WIN32_CFLAGS@
288WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
289XCB_CFLAGS = @XCB_CFLAGS@
290XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
291XCB_GL_LIBS = @XCB_GL_LIBS@
292XCB_LIBS = @XCB_LIBS@
293XEXT_CFLAGS = @XEXT_CFLAGS@
294XEXT_LIBS = @XEXT_LIBS@
295XMKMF = @XMKMF@
296X_CFLAGS = @X_CFLAGS@
297X_EXTRA_LIBS = @X_EXTRA_LIBS@
298X_LIBS = @X_LIBS@
299X_PRE_LIBS = @X_PRE_LIBS@
300abs_builddir = @abs_builddir@
301abs_srcdir = @abs_srcdir@
302abs_top_builddir = @abs_top_builddir@
303abs_top_srcdir = @abs_top_srcdir@
304ac_ct_CC = @ac_ct_CC@
305ac_ct_CXX = @ac_ct_CXX@
306ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
307ac_ct_OBJC = @ac_ct_OBJC@
308altivec_cflags = @altivec_cflags@
309am__include = @am__include@
310am__leading_dot = @am__leading_dot@
311am__quote = @am__quote@
312am__tar = @am__tar@
313am__untar = @am__untar@
314bindir = @bindir@
315build = @build@
316build_alias = @build_alias@
317build_cpu = @build_cpu@
318build_os = @build_os@
319build_vendor = @build_vendor@
320builddir = @builddir@
321datadir = @datadir@
322datarootdir = @datarootdir@
323dlopen_libs = @dlopen_libs@
324docdir = @docdir@
325dvidir = @dvidir@
326edje_cc = @edje_cc@
327efl_doxygen = @efl_doxygen@
328efl_have_doxygen = @efl_have_doxygen@
329evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
330evas_engine_buffer_libs = @evas_engine_buffer_libs@
331evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
332evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
333evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
334evas_engine_directfb_libs = @evas_engine_directfb_libs@
335evas_engine_fb_cflags = @evas_engine_fb_cflags@
336evas_engine_fb_libs = @evas_engine_fb_libs@
337evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
338evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
339evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
340evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
341evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
342evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
343evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
344evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
345evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
346evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
347evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
348evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
349evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
350evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
351evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
352evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
353evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
354evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
355evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
356evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
357evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
358evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
359evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
360evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
361evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
362evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
363evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
364evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
365evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
366evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
367evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
368evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
369evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
370evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
371evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
372evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
373evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
374evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
375evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
376evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
377evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
378evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
379evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
380evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
381evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
382evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
383evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
384evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
385evas_image_loader_png_libs = @evas_image_loader_png_libs@
386evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
387evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
388evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
389evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
390evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
391evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
392evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
393evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
394evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
395evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
396evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
397evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
398exec_prefix = @exec_prefix@
399have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
400have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
401have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
402have_evas_engine_software_x11 = @have_evas_engine_software_x11@
403have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
404have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
405have_lcov = @have_lcov@
406host = @host@
407host_alias = @host_alias@
408host_cpu = @host_cpu@
409host_os = @host_os@
410host_vendor = @host_vendor@
411htmldir = @htmldir@
412includedir = @includedir@
413infodir = @infodir@
414install_sh = @install_sh@
415libdir = @libdir@
416libexecdir = @libexecdir@
417localedir = @localedir@
418localstatedir = @localstatedir@
419lt_ECHO = @lt_ECHO@
420lt_enable_auto_import = @lt_enable_auto_import@
421mandir = @mandir@
422mkdir_p = @mkdir_p@
423oldincludedir = @oldincludedir@
424pdfdir = @pdfdir@
425pkgconfig_requires_private = @pkgconfig_requires_private@
426prefix = @prefix@
427program_transform_name = @program_transform_name@
428psdir = @psdir@
429pthread_cflags = @pthread_cflags@
430pthread_libs = @pthread_libs@
431release_info = @release_info@
432requirement_evas = @requirement_evas@
433sbindir = @sbindir@
434sharedstatedir = @sharedstatedir@
435srcdir = @srcdir@
436sysconfdir = @sysconfdir@
437target_alias = @target_alias@
438top_build_prefix = @top_build_prefix@
439top_builddir = @top_builddir@
440top_srcdir = @top_srcdir@
441version_info = @version_info@
442MAINTAINERCLEANFILES = Makefile.in
443AM_CPPFLAGS = \
444-I. \
445-I$(top_srcdir)/src/lib \
446-I$(top_srcdir)/src/lib/include \
447-I$(top_srcdir)/src/modules/engines \
448@EINA_CFLAGS@ \
449@FREETYPE_CFLAGS@ \
450@PIXMAN_CFLAGS@ \
451@evas_engine_software_ddraw_cflags@
452
453@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@SOFTWARE_DDRAW_SOURCES = \
454@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@evas_engine.c \
455@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@evas_outbuf.c \
456@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@evas_ddraw_buffer.c \
457@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@evas_ddraw_main.cpp
458
459@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@SOFTWARE_DDRAW_LIBADD = @evas_engine_software_ddraw_libs@
460@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@includes_HEADERS = Evas_Engine_Software_DDraw.h
461@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@includesdir = $(includedir)/evas-@VMAJ@
462@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_ddraw/$(MODULE_ARCH)
463@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@pkg_LTLIBRARIES = module.la
464@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@module_la_SOURCES = $(SOFTWARE_DDRAW_SOURCES)
465@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@module_la_CXXFLAGS = -fno-rtti -fno-exceptions
466@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@module_la_LIBADD = @EINA_LIBS@ $(SOFTWARE_DDRAW_LIBADD) $(top_builddir)/src/lib/libevas.la
467@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@module_la_LDFLAGS = @lt_enable_auto_import@ -no-undefined -module -avoid-version
468@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
469@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_TRUE@noinst_LTLIBRARIES = libevas_engine_software_ddraw.la
470@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_TRUE@libevas_engine_software_ddraw_la_SOURCES = $(SOFTWARE_DDRAW_SOURCES)
471@BUILD_ENGINE_SOFTWARE_DDRAW_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_DDRAW_TRUE@libevas_engine_software_ddraw_la_LIBADD = $(SOFTWARE_DDRAW_LIBADD)
472EXTRA_DIST = evas_engine.h
473all: all-am
474
475.SUFFIXES:
476.SUFFIXES: .c .cpp .lo .o .obj
477$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
478 @for dep in $?; do \
479 case '$(am__configure_deps)' in \
480 *$$dep*) \
481 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
482 && { if test -f $@; then exit 0; else break; fi; }; \
483 exit 1;; \
484 esac; \
485 done; \
486 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_ddraw/Makefile'; \
487 $(am__cd) $(top_srcdir) && \
488 $(AUTOMAKE) --gnu src/modules/engines/software_ddraw/Makefile
489.PRECIOUS: Makefile
490Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
491 @case '$?' in \
492 *config.status*) \
493 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
494 *) \
495 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
496 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
497 esac;
498
499$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
500 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
501
502$(top_srcdir)/configure: $(am__configure_deps)
503 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
504$(ACLOCAL_M4): $(am__aclocal_m4_deps)
505 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
506$(am__aclocal_m4_deps):
507
508clean-noinstLTLIBRARIES:
509 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
510 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
511 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
512 test "$$dir" != "$$p" || dir=.; \
513 echo "rm -f \"$${dir}/so_locations\""; \
514 rm -f "$${dir}/so_locations"; \
515 done
516install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
517 @$(NORMAL_INSTALL)
518 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
519 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
520 list2=; for p in $$list; do \
521 if test -f $$p; then \
522 list2="$$list2 $$p"; \
523 else :; fi; \
524 done; \
525 test -z "$$list2" || { \
526 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
527 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
528 }
529
530uninstall-pkgLTLIBRARIES:
531 @$(NORMAL_UNINSTALL)
532 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
533 for p in $$list; do \
534 $(am__strip_dir) \
535 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
536 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
537 done
538
539clean-pkgLTLIBRARIES:
540 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
541 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
542 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
543 test "$$dir" != "$$p" || dir=.; \
544 echo "rm -f \"$${dir}/so_locations\""; \
545 rm -f "$${dir}/so_locations"; \
546 done
547libevas_engine_software_ddraw.la: $(libevas_engine_software_ddraw_la_OBJECTS) $(libevas_engine_software_ddraw_la_DEPENDENCIES)
548 $(AM_V_CXXLD)$(CXXLINK) $(am_libevas_engine_software_ddraw_la_rpath) $(libevas_engine_software_ddraw_la_OBJECTS) $(libevas_engine_software_ddraw_la_LIBADD) $(LIBS)
549module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
550 $(AM_V_CXXLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
551
552mostlyclean-compile:
553 -rm -f *.$(OBJEXT)
554
555distclean-compile:
556 -rm -f *.tab.c
557
558@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_ddraw_buffer.Plo@am__quote@
559@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_ddraw_main.Plo@am__quote@
560@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
561@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_outbuf.Plo@am__quote@
562@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_ddraw_buffer.Plo@am__quote@
563@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_ddraw_main.Plo@am__quote@
564@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
565@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_outbuf.Plo@am__quote@
566
567.c.o:
568@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
569@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
570@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
571@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
572@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
573@am__fastdepCC_FALSE@ $(COMPILE) -c $<
574
575.c.obj:
576@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
577@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
578@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
579@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
580@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
581@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
582
583.c.lo:
584@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
585@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
586@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
587@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
588@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
589@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
590
591module_la-evas_engine.lo: evas_engine.c
592@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
593@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
594@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
595@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
596@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
597@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
598
599module_la-evas_outbuf.lo: evas_outbuf.c
600@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_outbuf.lo -MD -MP -MF $(DEPDIR)/module_la-evas_outbuf.Tpo -c -o module_la-evas_outbuf.lo `test -f 'evas_outbuf.c' || echo '$(srcdir)/'`evas_outbuf.c
601@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_outbuf.Tpo $(DEPDIR)/module_la-evas_outbuf.Plo
602@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
603@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_outbuf.c' object='module_la-evas_outbuf.lo' libtool=yes @AMDEPBACKSLASH@
604@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
605@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_outbuf.lo `test -f 'evas_outbuf.c' || echo '$(srcdir)/'`evas_outbuf.c
606
607module_la-evas_ddraw_buffer.lo: evas_ddraw_buffer.c
608@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_ddraw_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_ddraw_buffer.Tpo -c -o module_la-evas_ddraw_buffer.lo `test -f 'evas_ddraw_buffer.c' || echo '$(srcdir)/'`evas_ddraw_buffer.c
609@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_ddraw_buffer.Tpo $(DEPDIR)/module_la-evas_ddraw_buffer.Plo
610@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
611@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_ddraw_buffer.c' object='module_la-evas_ddraw_buffer.lo' libtool=yes @AMDEPBACKSLASH@
612@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
613@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_ddraw_buffer.lo `test -f 'evas_ddraw_buffer.c' || echo '$(srcdir)/'`evas_ddraw_buffer.c
614
615.cpp.o:
616@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
617@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
618@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
619@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
620@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
621@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
622
623.cpp.obj:
624@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
625@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
626@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
627@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
628@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
629@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
630
631.cpp.lo:
632@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
633@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
634@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
635@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
636@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
637@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
638
639module_la-evas_ddraw_main.lo: evas_ddraw_main.cpp
640@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -MT module_la-evas_ddraw_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_ddraw_main.Tpo -c -o module_la-evas_ddraw_main.lo `test -f 'evas_ddraw_main.cpp' || echo '$(srcdir)/'`evas_ddraw_main.cpp
641@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_ddraw_main.Tpo $(DEPDIR)/module_la-evas_ddraw_main.Plo
642@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
643@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='evas_ddraw_main.cpp' object='module_la-evas_ddraw_main.lo' libtool=yes @AMDEPBACKSLASH@
644@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
645@am__fastdepCXX_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CXX $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CXXFLAGS) $(CXXFLAGS) -c -o module_la-evas_ddraw_main.lo `test -f 'evas_ddraw_main.cpp' || echo '$(srcdir)/'`evas_ddraw_main.cpp
646
647mostlyclean-libtool:
648 -rm -f *.lo
649
650clean-libtool:
651 -rm -rf .libs _libs
652install-includesHEADERS: $(includes_HEADERS)
653 @$(NORMAL_INSTALL)
654 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
655 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
656 for p in $$list; do \
657 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
658 echo "$$d$$p"; \
659 done | $(am__base_list) | \
660 while read files; do \
661 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
662 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
663 done
664
665uninstall-includesHEADERS:
666 @$(NORMAL_UNINSTALL)
667 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
668 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
669 test -n "$$files" || exit 0; \
670 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
671 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
672
673ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
674 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
675 unique=`for i in $$list; do \
676 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
677 done | \
678 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
679 END { if (nonempty) { for (i in files) print i; }; }'`; \
680 mkid -fID $$unique
681tags: TAGS
682
683TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
684 $(TAGS_FILES) $(LISP)
685 set x; \
686 here=`pwd`; \
687 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
688 unique=`for i in $$list; do \
689 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
690 done | \
691 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
692 END { if (nonempty) { for (i in files) print i; }; }'`; \
693 shift; \
694 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
695 test -n "$$unique" || unique=$$empty_fix; \
696 if test $$# -gt 0; then \
697 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
698 "$$@" $$unique; \
699 else \
700 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
701 $$unique; \
702 fi; \
703 fi
704ctags: CTAGS
705CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
706 $(TAGS_FILES) $(LISP)
707 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
708 unique=`for i in $$list; do \
709 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
710 done | \
711 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
712 END { if (nonempty) { for (i in files) print i; }; }'`; \
713 test -z "$(CTAGS_ARGS)$$unique" \
714 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
715 $$unique
716
717GTAGS:
718 here=`$(am__cd) $(top_builddir) && pwd` \
719 && $(am__cd) $(top_srcdir) \
720 && gtags -i $(GTAGS_ARGS) "$$here"
721
722distclean-tags:
723 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
724
725distdir: $(DISTFILES)
726 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
727 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
728 list='$(DISTFILES)'; \
729 dist_files=`for file in $$list; do echo $$file; done | \
730 sed -e "s|^$$srcdirstrip/||;t" \
731 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
732 case $$dist_files in \
733 */*) $(MKDIR_P) `echo "$$dist_files" | \
734 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
735 sort -u` ;; \
736 esac; \
737 for file in $$dist_files; do \
738 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
739 if test -d $$d/$$file; then \
740 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
741 if test -d "$(distdir)/$$file"; then \
742 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
743 fi; \
744 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
745 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
746 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
747 fi; \
748 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
749 else \
750 test -f "$(distdir)/$$file" \
751 || cp -p $$d/$$file "$(distdir)/$$file" \
752 || exit 1; \
753 fi; \
754 done
755check-am: all-am
756check: check-am
757all-am: Makefile $(LTLIBRARIES) $(HEADERS)
758installdirs:
759 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
760 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
761 done
762install: install-am
763install-exec: install-exec-am
764install-data: install-data-am
765uninstall: uninstall-am
766
767install-am: all-am
768 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
769
770installcheck: installcheck-am
771install-strip:
772 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
773 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
774 `test -z '$(STRIP)' || \
775 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
776mostlyclean-generic:
777
778clean-generic:
779
780distclean-generic:
781 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
782 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
783
784maintainer-clean-generic:
785 @echo "This command is intended for maintainers to use"
786 @echo "it deletes files that may require special tools to rebuild."
787 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
788clean: clean-am
789
790clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
791 clean-pkgLTLIBRARIES mostlyclean-am
792
793distclean: distclean-am
794 -rm -rf ./$(DEPDIR)
795 -rm -f Makefile
796distclean-am: clean-am distclean-compile distclean-generic \
797 distclean-tags
798
799dvi: dvi-am
800
801dvi-am:
802
803html: html-am
804
805html-am:
806
807info: info-am
808
809info-am:
810
811install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
812
813install-dvi: install-dvi-am
814
815install-dvi-am:
816
817install-exec-am:
818
819install-html: install-html-am
820
821install-html-am:
822
823install-info: install-info-am
824
825install-info-am:
826
827install-man:
828
829install-pdf: install-pdf-am
830
831install-pdf-am:
832
833install-ps: install-ps-am
834
835install-ps-am:
836
837installcheck-am:
838
839maintainer-clean: maintainer-clean-am
840 -rm -rf ./$(DEPDIR)
841 -rm -f Makefile
842maintainer-clean-am: distclean-am maintainer-clean-generic
843
844mostlyclean: mostlyclean-am
845
846mostlyclean-am: mostlyclean-compile mostlyclean-generic \
847 mostlyclean-libtool
848
849pdf: pdf-am
850
851pdf-am:
852
853ps: ps-am
854
855ps-am:
856
857uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
858
859.MAKE: install-am install-strip
860
861.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
862 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
863 ctags distclean distclean-compile distclean-generic \
864 distclean-libtool distclean-tags distdir dvi dvi-am html \
865 html-am info info-am install install-am install-data \
866 install-data-am install-dvi install-dvi-am install-exec \
867 install-exec-am install-html install-html-am \
868 install-includesHEADERS install-info install-info-am \
869 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
870 install-ps install-ps-am install-strip installcheck \
871 installcheck-am installdirs maintainer-clean \
872 maintainer-clean-generic mostlyclean mostlyclean-compile \
873 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
874 tags uninstall uninstall-am uninstall-includesHEADERS \
875 uninstall-pkgLTLIBRARIES
876
877
878# Tell versions [3.59,3.63) of GNU make to not export all variables.
879# Otherwise a system limit (for SysV at least) may be exceeded.
880.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_ddraw/evas_ddraw_buffer.c b/libraries/evas/src/modules/engines/software_ddraw/evas_ddraw_buffer.c
new file mode 100644
index 0000000..7ef9211
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_ddraw/evas_ddraw_buffer.c
@@ -0,0 +1,92 @@
1#include <string.h>
2
3#include "evas_common.h"
4#include "evas_engine.h"
5
6
7DD_Output_Buffer *
8evas_software_ddraw_output_buffer_new(int depth,
9 int width,
10 int height,
11 void *data)
12{
13 DD_Output_Buffer *ddob;
14
15 ddob = calloc(1, sizeof(DD_Output_Buffer));
16 if (!ddob) return NULL;
17
18 ddob->data = data;
19 ddob->depth = depth;
20 ddob->width = width;
21 ddob->height = height;
22 ddob->pitch = width * depth / 8;
23 ddob->psize = ddob->pitch * height;
24
25 if (!ddob->data)
26 {
27 ddob->data = malloc(ddob->pitch * height);
28 if (!ddob->data)
29 {
30 free(ddob);
31 return NULL;
32 }
33 }
34
35 return ddob;
36}
37
38void
39evas_software_ddraw_output_buffer_free(DD_Output_Buffer *ddob)
40{
41 if (ddob->data) free(ddob->data);
42 free(ddob);
43}
44
45void
46evas_software_ddraw_output_buffer_paste(DD_Output_Buffer *ddob,
47 void *ddraw_data,
48 int ddraw_width,
49 int ddraw_height,
50 int ddraw_pitch,
51 int ddraw_depth,
52 int x,
53 int y)
54{
55 DATA8 *dd_data;
56 DATA8 *evas_data;
57 int width;
58 int height;
59 int pitch;
60 int j;
61
62 if ((x >= ddraw_width) || (y >= ddraw_height))
63 return;
64
65 /* compute the size of the data to copy on the back surface */
66 width = ((x + ddob->width) > ddraw_width)
67 ? ddraw_width - x
68 : ddob->width;
69 height = ((y + ddob->height) > ddraw_height)
70 ? ddraw_height - y
71 : ddob->height;
72 pitch = width * ddob->depth / 8;
73
74 dd_data = (DATA8 *)ddraw_data + y * ddraw_pitch + x * ddraw_depth;
75 evas_data = (unsigned char *)ddob->data;
76 for (j = 0; j < height; j++, evas_data += ddob->pitch, dd_data += ddraw_pitch)
77 memcpy(dd_data, evas_data, pitch);
78}
79
80DATA8 *
81evas_software_ddraw_output_buffer_data(DD_Output_Buffer *ddob,
82 int *bytes_per_line_ret)
83{
84 if (bytes_per_line_ret) *bytes_per_line_ret = ddob->pitch;
85 return ddob->data;
86}
87
88int
89evas_software_ddraw_output_buffer_depth(DD_Output_Buffer *ddob)
90{
91 return ddob->depth;
92}
diff --git a/libraries/evas/src/modules/engines/software_ddraw/evas_ddraw_main.cpp b/libraries/evas/src/modules/engines/software_ddraw/evas_ddraw_main.cpp
new file mode 100644
index 0000000..2c467c8
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_ddraw/evas_ddraw_main.cpp
@@ -0,0 +1,248 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4int
5evas_software_ddraw_init (HWND window,
6 int depth,
7 int fullscreen,
8 Outbuf *buf)
9{
10 DDSURFACEDESC surface_desc;
11 DDPIXELFORMAT pixel_format;
12 HRESULT res;
13 int width;
14 int height;
15
16 if (!buf)
17 return 0;
18
19 buf->priv.dd.window = window;
20
21 res = DirectDrawCreate(NULL, &buf->priv.dd.object, NULL);
22 if (FAILED(res))
23 return 0;
24
25 if (buf->priv.dd.fullscreen)
26 {
27 DDSCAPS caps;
28
29 res = buf->priv.dd.object->SetCooperativeLevel(window,
30 DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
31 if (FAILED(res))
32 goto release_object;
33
34 width = GetSystemMetrics(SM_CXSCREEN);
35 height = GetSystemMetrics(SM_CYSCREEN);
36
37 ZeroMemory(&pixel_format, sizeof(pixel_format));
38 pixel_format.dwSize = sizeof(pixel_format);
39 buf->priv.dd.surface_primary->GetPixelFormat(&pixel_format);
40
41 if (pixel_format.dwRGBBitCount != (DWORD)depth)
42 goto release_object;
43
44 buf->priv.dd.depth = depth;
45
46 res = buf->priv.dd.object->SetDisplayMode(width, height, depth);
47 if (FAILED(res))
48 goto release_object;
49
50 memset(&surface_desc, 0, sizeof(surface_desc));
51 surface_desc.dwSize = sizeof(surface_desc);
52 surface_desc.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
53 surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
54 surface_desc.dwBackBufferCount = 1;
55
56 res = buf->priv.dd.object->CreateSurface(&surface_desc,
57 &buf->priv.dd.surface_primary, NULL);
58 if (FAILED(res))
59 goto release_object;
60
61 caps.dwCaps = DDSCAPS_BACKBUFFER;
62 res = buf->priv.dd.surface_primary->GetAttachedSurface(&caps,
63 &buf->priv.dd.surface_back);
64 if (FAILED(res))
65 goto release_surface_primary;
66 }
67 else
68 {
69 RECT rect;
70
71 if (!GetClientRect(window, &rect))
72 goto release_object;
73
74 width = rect.right - rect.left;
75 height = rect.bottom - rect.top;
76
77 res = buf->priv.dd.object->SetCooperativeLevel(window, DDSCL_NORMAL);
78 if (FAILED(res))
79 goto release_object;
80
81 res = buf->priv.dd.object->CreateClipper(0, &buf->priv.dd.clipper, NULL);
82 if (FAILED(res))
83 goto release_object;
84
85 res = buf->priv.dd.clipper->SetHWnd(0, window);
86 if (FAILED(res))
87 goto release_clipper;
88
89 memset(&surface_desc, 0, sizeof(surface_desc));
90 surface_desc.dwSize = sizeof(surface_desc);
91 surface_desc.dwFlags = DDSD_CAPS;
92 surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
93
94 res = buf->priv.dd.object->CreateSurface(&surface_desc, &buf->priv.dd.surface_primary, NULL);
95 if (FAILED(res))
96 goto release_clipper;
97
98 res = buf->priv.dd.surface_primary->SetClipper(buf->priv.dd.clipper);
99 if (FAILED(res))
100 goto release_surface_primary;
101
102 memset (&surface_desc, 0, sizeof(surface_desc));
103 surface_desc.dwSize = sizeof(surface_desc);
104 surface_desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
105 surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
106 surface_desc.dwWidth = width;
107 surface_desc.dwHeight = height;
108
109 res = buf->priv.dd.object->CreateSurface(&surface_desc, &buf->priv.dd.surface_back, NULL);
110 if (FAILED(res))
111 goto release_surface_primary;
112
113 ZeroMemory(&pixel_format, sizeof(pixel_format));
114 pixel_format.dwSize = sizeof(pixel_format);
115 buf->priv.dd.surface_primary->GetPixelFormat(&pixel_format);
116
117 if (pixel_format.dwRGBBitCount != (DWORD)depth)
118 goto release_surface_back;
119
120 buf->priv.dd.depth = depth;
121 }
122
123 return 1;
124
125 release_surface_back:
126 buf->priv.dd.surface_back->Release();
127 release_surface_primary:
128 buf->priv.dd.surface_primary->Release();
129 release_clipper:
130 if (!buf->priv.dd.fullscreen)
131 buf->priv.dd.clipper->Release();
132 release_object:
133 buf->priv.dd.object->Release();
134
135 return 0;
136}
137
138void
139evas_software_ddraw_shutdown(Outbuf *buf)
140{
141 if (!buf)
142 return;
143
144 if (buf->priv.dd.fullscreen)
145 if (buf->priv.dd.surface_back)
146 buf->priv.dd.surface_back->Release();
147 if (buf->priv.dd.surface_primary)
148 buf->priv.dd.surface_primary->Release();
149 if (!buf->priv.dd.fullscreen)
150 if (buf->priv.dd.clipper)
151 buf->priv.dd.clipper->Release();
152 if (buf->priv.dd.object)
153 buf->priv.dd.object->Release();
154}
155
156int
157evas_software_ddraw_masks_get(Outbuf *buf)
158{
159 DDPIXELFORMAT pixel_format;
160
161 ZeroMemory(&pixel_format, sizeof(pixel_format));
162 pixel_format.dwSize = sizeof(pixel_format);
163
164 if (FAILED(buf->priv.dd.surface_primary->GetPixelFormat(&pixel_format)))
165 return 0;
166
167 buf->priv.mask.r = pixel_format.dwRBitMask;
168 buf->priv.mask.g = pixel_format.dwGBitMask;
169 buf->priv.mask.b = pixel_format.dwBBitMask;
170
171 return 1;
172}
173
174void *
175evas_software_ddraw_lock(Outbuf *buf,
176 int *ddraw_width,
177 int *ddraw_height,
178 int *ddraw_pitch,
179 int *ddraw_depth)
180{
181 DDSURFACEDESC surface_desc;
182
183 ZeroMemory(&surface_desc, sizeof(surface_desc));
184 surface_desc.dwSize = sizeof(surface_desc);
185
186 if (FAILED(buf->priv.dd.surface_back->Lock(NULL,
187 &surface_desc,
188 DDLOCK_WAIT | DDLOCK_WRITEONLY | DDLOCK_SURFACEMEMORYPTR | DDLOCK_NOSYSLOCK,
189 NULL)))
190 return NULL;
191
192 *ddraw_width = surface_desc.dwWidth;
193 *ddraw_height = surface_desc.dwHeight;
194 *ddraw_pitch = surface_desc.lPitch;
195 *ddraw_depth = surface_desc.ddpfPixelFormat.dwRGBBitCount >> 3;
196
197 return surface_desc.lpSurface;
198}
199
200void
201evas_software_ddraw_unlock_and_flip(Outbuf *buf)
202{
203 RECT dst_rect;
204 RECT src_rect;
205 POINT p;
206
207 if (FAILED(buf->priv.dd.surface_back->Unlock(NULL)))
208 return;
209
210 /* we figure out where on the primary surface our window lives */
211 p.x = 0;
212 p.y = 0;
213 ClientToScreen(buf->priv.dd.window, &p);
214 GetClientRect(buf->priv.dd.window, &dst_rect);
215 OffsetRect(&dst_rect, p.x, p.y);
216 SetRect(&src_rect, 0, 0, buf->width, buf->height);
217
218 /* nothing to do if the function fails, so we don't check the result */
219 buf->priv.dd.surface_primary->Blt(&dst_rect,
220 buf->priv.dd.surface_back,
221 &src_rect,
222 DDBLT_WAIT, NULL);
223}
224
225void
226evas_software_ddraw_surface_resize(Outbuf *buf)
227{
228 DDSURFACEDESC surface_desc;
229
230 buf->priv.dd.surface_back->Release();
231 memset (&surface_desc, 0, sizeof (surface_desc));
232 surface_desc.dwSize = sizeof (surface_desc);
233 /* FIXME: that code does not compile. Must know why */
234#if 0
235 surface_desc.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
236 surface_desc.dwWidth = width;
237 surface_desc.dwHeight = height;
238 buf->priv.dd.surface_back->SetSurfaceDesc(&surface_desc, NULL);
239#else
240 surface_desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
241 surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
242 surface_desc.dwWidth = buf->width;
243 surface_desc.dwHeight = buf->height;
244 buf->priv.dd.object->CreateSurface(&surface_desc,
245 &buf->priv.dd.surface_back,
246 NULL);
247#endif
248}
diff --git a/libraries/evas/src/modules/engines/software_ddraw/evas_engine.c b/libraries/evas/src/modules/engines/software_ddraw/evas_engine.c
new file mode 100644
index 0000000..5bfc87f
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_ddraw/evas_engine.c
@@ -0,0 +1,379 @@
1#include "evas_common.h"
2#include "evas_private.h"
3#include "evas_engine.h"
4#include "Evas_Engine_Software_DDraw.h"
5
6int _evas_engine_soft_ddraw_log_dom = -1;
7/* function tables - filled in later (func and parent func) */
8static Evas_Func func, pfunc;
9
10/* engine struct data */
11typedef struct _Render_Engine Render_Engine;
12
13struct _Render_Engine
14{
15 Tilebuf *tb;
16 Outbuf *ob;
17 Tilebuf_Rect *rects;
18 Eina_Inlist *cur_rect;
19 int end : 1;
20};
21
22
23/* log domain variable */
24int _evas_log_dom_module = -1;
25
26
27static void *
28_output_setup(int width,
29 int height,
30 int rot,
31 HWND window,
32 int depth,
33 int fullscreen)
34{
35 Render_Engine *re;
36
37 re = calloc(1, sizeof(Render_Engine));
38 if (!re)
39 return NULL;
40
41 /* if we haven't initialized - init (automatic abort if already done) */
42 evas_common_cpu_init();
43
44 evas_common_blend_init();
45 evas_common_image_init();
46 evas_common_convert_init();
47 evas_common_scale_init();
48 evas_common_rectangle_init();
49 evas_common_polygon_init();
50 evas_common_line_init();
51 evas_common_font_init();
52 evas_common_draw_init();
53 evas_common_tilebuf_init();
54
55 evas_software_ddraw_outbuf_init();
56
57 re->ob = evas_software_ddraw_outbuf_setup(width, height, rot,
58 OUTBUF_DEPTH_INHERIT,
59 window, depth, fullscreen);
60 if (!re->ob)
61 {
62 free(re);
63 return NULL;
64 }
65
66 /* for updates return 1 big buffer, but only use portions of it, also cache
67 it and keep it around until an idle_flush */
68 /* disable for now - i am hunting down why some expedite tests are slower,
69 * as well as shaped stuff is broken and probable non-32bpp is broken as
70 * convert funcs dont do the right thing
71 *
72 re->ob->onebuf = 1;
73 */
74
75 re->tb = evas_common_tilebuf_new(width, height);
76 if (!re->tb)
77 {
78 evas_software_ddraw_outbuf_free(re->ob);
79 free(re);
80 return NULL;
81 }
82 /* in preliminary tests 16x16 gave highest framerates */
83 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
84
85 return re;
86}
87
88
89/* engine api this module provides */
90
91static void *
92eng_info(Evas *e)
93{
94 Evas_Engine_Info_Software_DDraw *info;
95
96 info = calloc(1, sizeof(Evas_Engine_Info_Software_DDraw));
97 if (!info) return NULL;
98 info->magic.magic = rand();
99 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
100 return info;
101 e = NULL;
102}
103
104static void
105eng_info_free(Evas *e, void *info)
106{
107 Evas_Engine_Info_Software_DDraw *in;
108 in = (Evas_Engine_Info_Software_DDraw *)info;
109 free(in);
110}
111
112static int
113eng_setup(Evas *e, void *in)
114{
115 Render_Engine *re;
116 Evas_Engine_Info_Software_DDraw *info;
117
118 info = (Evas_Engine_Info_Software_DDraw *)in;
119 if (!e->engine.data.output)
120 e->engine.data.output = _output_setup(e->output.w,
121 e->output.h,
122 info->info.rotation,
123 info->info.window,
124 info->info.depth,
125 info->info.fullscreen);
126 else
127 {
128 int ponebuf = 0;
129
130 re = e->engine.data.output;
131 ponebuf = re->ob->onebuf;
132 evas_software_ddraw_outbuf_free(re->ob);
133 re->ob = evas_software_ddraw_outbuf_setup(e->output.w,
134 e->output.h,
135 info->info.rotation,
136 OUTBUF_DEPTH_INHERIT,
137 info->info.window,
138 info->info.depth,
139 info->info.fullscreen);
140 re->ob->onebuf = ponebuf;
141 }
142 if (!e->engine.data.output) return 0;
143 if (!e->engine.data.context)
144 e->engine.data.context = e->engine.func->context_new(e->engine.data.output);
145
146 re = e->engine.data.output;
147
148 return 1;
149}
150
151static void
152eng_output_free(void *data)
153{
154 Render_Engine *re;
155
156 if (!data) return;
157
158 re = (Render_Engine *)data;
159 evas_software_ddraw_outbuf_free(re->ob);
160 evas_common_tilebuf_free(re->tb);
161 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
162 free(re);
163
164 evas_common_font_shutdown();
165 evas_common_image_shutdown();
166}
167
168static void
169eng_output_resize(void *data, int width, int height)
170{
171 Render_Engine *re;
172
173 re = (Render_Engine *)data;
174 evas_software_ddraw_outbuf_reconfigure(re->ob,
175 width,
176 height,
177 evas_software_ddraw_outbuf_rot_get(re->ob),
178 OUTBUF_DEPTH_INHERIT);
179 evas_common_tilebuf_free(re->tb);
180 re->tb = evas_common_tilebuf_new(width, height);
181 if (re->tb)
182 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
183}
184
185static void
186eng_output_tile_size_set(void *data, int w, int h)
187{
188 Render_Engine *re;
189
190 re = (Render_Engine *)data;
191 evas_common_tilebuf_set_tile_size(re->tb, w, h);
192}
193
194static void
195eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
196{
197 Render_Engine *re;
198
199 re = (Render_Engine *)data;
200 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
201}
202
203static void
204eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
205{
206 Render_Engine *re;
207
208 re = (Render_Engine *)data;
209 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
210}
211
212static void
213eng_output_redraws_clear(void *data)
214{
215 Render_Engine *re;
216
217 re = (Render_Engine *)data;
218 evas_common_tilebuf_clear(re->tb);
219}
220
221static void *
222eng_output_redraws_next_update_get(void *data,
223 int *x,
224 int *y,
225 int *w,
226 int *h,
227 int *cx,
228 int *cy,
229 int *cw,
230 int *ch)
231{
232 Render_Engine *re;
233 RGBA_Image *surface;
234 Tilebuf_Rect *rect;
235 int ux;
236 int uy;
237 int uw;
238 int uh;
239
240 re = (Render_Engine *)data;
241 if (re->end)
242 {
243 re->end = 0;
244 return NULL;
245 }
246 if (!re->rects)
247 {
248 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
249 re->cur_rect = EINA_INLIST_GET(re->rects);
250 }
251 if (!re->cur_rect) return NULL;
252 rect = (Tilebuf_Rect *)re->cur_rect;
253 ux = rect->x;
254 uy = rect->y;
255 uw = rect->w;
256 uh = rect->h;
257 re->cur_rect = re->cur_rect->next;
258 if (!re->cur_rect)
259 {
260 evas_common_tilebuf_free_render_rects(re->rects);
261 re->rects = NULL;
262 re->end = 1;
263 }
264
265 surface = evas_software_ddraw_outbuf_new_region_for_update(re->ob,
266 ux,
267 uy,
268 uw,
269 uh,
270 cx,
271 cy,
272 cw,
273 ch);
274
275 *x = ux;
276 *y = uy;
277 *w = uw;
278 *h = uh;
279
280 return surface;
281}
282
283static void
284eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
285{
286 Render_Engine *re;
287
288 re = (Render_Engine *)data;
289#ifdef BUILD_PIPE_RENDER
290 evas_common_pipe_map_begin(surface);
291#endif
292 evas_software_ddraw_outbuf_push_updated_region(re->ob, surface, x, y, w, h);
293 evas_software_ddraw_outbuf_free_region_for_update(re->ob, surface);
294 evas_common_cpu_end_opt();
295}
296
297static void
298eng_output_flush(void *data)
299{
300 Render_Engine *re;
301
302 re = (Render_Engine *)data;
303 evas_software_ddraw_outbuf_flush(re->ob);
304}
305
306static void
307eng_output_idle_flush(void *data)
308{
309 Render_Engine *re;
310
311 re = (Render_Engine *)data;
312 evas_software_ddraw_outbuf_idle_flush(re->ob);
313}
314
315static Eina_Bool
316eng_canvas_alpha_get(void *data, void *context)
317{
318 return EINA_FALSE;
319}
320
321/* module advertising code */
322static int
323module_open(Evas_Module *em)
324{
325 if (!em) return 0;
326 /* get whatever engine module we inherit from */
327 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
328 _evas_log_dom_module = eina_log_domain_register
329 ("evas-software_ddraw", EVAS_DEFAULT_LOG_COLOR);
330 if (_evas_log_dom_module < 0)
331 {
332 EINA_LOG_ERR("Can not create a module log domain.");
333 return 0;
334 }
335 /* store it for later use */
336 func = pfunc;
337 /* now to override methods */
338#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
339 ORD(info);
340 ORD(info_free);
341 ORD(setup);
342 ORD(canvas_alpha_get);
343 ORD(output_free);
344 ORD(output_resize);
345 ORD(output_tile_size_set);
346 ORD(output_redraws_rect_add);
347 ORD(output_redraws_rect_del);
348 ORD(output_redraws_clear);
349 ORD(output_redraws_next_update_get);
350 ORD(output_redraws_next_update_push);
351 ORD(output_flush);
352 ORD(output_idle_flush);
353 /* now advertise out own api */
354 em->functions = (void *)(&func);
355 return 1;
356}
357
358static void
359module_close(Evas_Module *em)
360{
361 eina_log_domain_unregister(_evas_log_dom_module);
362}
363
364static Evas_Module_Api evas_modapi =
365{
366 EVAS_MODULE_API_VERSION,
367 "software_ddraw",
368 "none",
369 {
370 module_open,
371 module_close
372 }
373};
374
375EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_ddraw);
376
377#ifndef EVAS_STATIC_BUILD_SOFTWARE_DDRAW
378EVAS_EINA_MODULE_DEFINE(engine, software_ddraw);
379#endif
diff --git a/libraries/evas/src/modules/engines/software_ddraw/evas_engine.h b/libraries/evas/src/modules/engines/software_ddraw/evas_engine.h
new file mode 100644
index 0000000..2f59170
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_ddraw/evas_engine.h
@@ -0,0 +1,220 @@
1#ifndef __EVAS_ENGINE_H__
2#define __EVAS_ENGINE_H__
3
4
5#define WIN32_LEAN_AND_MEAN
6#include <windows.h>
7#undef WIN32_LEAN_AND_MEAN
8#include <ddraw.h>
9
10typedef struct _Outbuf Outbuf;
11typedef struct _Outbuf_Region Outbuf_Region;
12typedef struct _DD_Output_Buffer DD_Output_Buffer;
13
14enum _Outbuf_Depth
15{
16 OUTBUF_DEPTH_NONE,
17 OUTBUF_DEPTH_INHERIT,
18 OUTBUF_DEPTH_RGB_16BPP_565_565_DITHERED,
19 OUTBUF_DEPTH_RGB_16BPP_555_555_DITHERED,
20 OUTBUF_DEPTH_RGB_16BPP_444_444_DITHERED,
21 OUTBUF_DEPTH_RGB_16BPP_565_444_DITHERED,
22 OUTBUF_DEPTH_RGB_32BPP_888_8888,
23 OUTBUF_DEPTH_LAST
24};
25
26typedef enum _Outbuf_Depth Outbuf_Depth;
27
28struct _Outbuf
29{
30 Outbuf_Depth depth;
31 int width;
32 int height;
33 int rot;
34 int onebuf;
35
36 struct {
37 Convert_Pal *pal;
38 struct {
39 HWND window;
40 LPDIRECTDRAW object;
41 LPDIRECTDRAWSURFACE surface_primary;
42 LPDIRECTDRAWSURFACE surface_back;
43 LPDIRECTDRAWCLIPPER clipper;
44 int depth;
45 unsigned char fullscreen : 1;
46 unsigned char swap : 1;
47 unsigned char bit_swap : 1;
48 } dd;
49 struct {
50 DATA32 r, g, b;
51 } mask;
52
53 /* 1 big buffer for updates - flush on idle_flush */
54 RGBA_Image *onebuf;
55 Eina_List *onebuf_regions;
56
57 /* a list of pending regions to write to the target */
58 Eina_List *pending_writes;
59 /* a list of previous frame pending regions to write to the target */
60 Eina_List *prev_pending_writes;
61
62 unsigned char mask_dither : 1;
63 unsigned char destination_alpha : 1;
64 unsigned char debug : 1;
65 unsigned char synced : 1;
66 } priv;
67};
68
69struct _Outbuf_Region
70{
71 DD_Output_Buffer *ddob;
72 int x;
73 int y;
74 int width;
75 int height;
76};
77
78struct _DD_Output_Buffer
79{
80 void *data;
81 int width;
82 int height;
83 int depth;
84 int pitch;
85 int psize;
86};
87
88extern int _evas_log_dom_module;
89
90#ifdef EVAS_DEFAULT_LOG_COLOR
91# undef EVAS_DEFAULT_LOG_COLOR
92#endif
93#define EVAS_DEFAULT_LOG_COLOR EINA_COLOR_CYAN
94#ifdef ERR
95# undef ERR
96#endif
97#define ERR(...) EINA_LOG_DOM_ERR(_evas_log_dom_module, __VA_ARGS__)
98#ifdef DBG
99# undef DBG
100#endif
101#define DBG(...) EINA_LOG_DOM_DBG(_evas_log_dom_module, __VA_ARGS__)
102#ifdef INF
103# undef INF
104#endif
105#define INF(...) EINA_LOG_DOM_INFO(_evas_log_dom_module, __VA_ARGS__)
106#ifdef WRN
107# undef WRN
108#endif
109#define WRN(...) EINA_LOG_DOM_WARN(_evas_log_dom_module, __VA_ARGS__)
110#ifdef CRT
111# undef CRT
112#endif
113#define CRT(...) EINA_LOG_DOM_CRIT(_evas_log_dom_module, __VA_ARGS__)
114
115/* evas_outbuf.c */
116
117void evas_software_ddraw_outbuf_init(void);
118
119void evas_software_ddraw_outbuf_free(Outbuf *buf);
120
121Outbuf *evas_software_ddraw_outbuf_setup(int width,
122 int height,
123 int rotation,
124 Outbuf_Depth depth,
125 HWND window,
126 int w_depth,
127 int fullscreen);
128
129void evas_software_ddraw_outbuf_reconfigure(Outbuf *buf,
130 int width,
131 int height,
132 int rotation,
133 Outbuf_Depth depth);
134
135RGBA_Image *evas_software_ddraw_outbuf_new_region_for_update(Outbuf *buf,
136 int x,
137 int y,
138 int w,
139 int h,
140 int *cx,
141 int *cy,
142 int *cw,
143 int *ch);
144
145void evas_software_ddraw_outbuf_push_updated_region(Outbuf *buf,
146 RGBA_Image *update,
147 int x,
148 int y,
149 int w,
150 int h);
151
152void evas_software_ddraw_outbuf_free_region_for_update(Outbuf *buf,
153 RGBA_Image *update);
154
155void evas_software_ddraw_outbuf_flush(Outbuf *buf);
156
157void evas_software_ddraw_outbuf_idle_flush(Outbuf *buf);
158
159int evas_software_ddraw_outbuf_width_get(Outbuf *buf);
160
161int evas_software_ddraw_outbuf_height_get(Outbuf *buf);
162
163Outbuf_Depth evas_software_ddraw_outbuf_depth_get(Outbuf *buf);
164
165int evas_software_ddraw_outbuf_rot_get(Outbuf *buf);
166
167/* evas_ddraw_buffer.c */
168
169DD_Output_Buffer *evas_software_ddraw_output_buffer_new(int depth,
170 int width,
171 int height,
172 void *data);
173
174void evas_software_ddraw_output_buffer_free(DD_Output_Buffer *ddob);
175
176void evas_software_ddraw_output_buffer_paste(DD_Output_Buffer *ddob,
177 void *ddraw_data,
178 int ddraw_width,
179 int ddraw_height,
180 int ddraw_pitch,
181 int ddraw_depth,
182 int x,
183 int y);
184
185DATA8 *evas_software_ddraw_output_buffer_data(DD_Output_Buffer *ddob,
186 int *bytes_per_line_ret);
187
188int evas_software_ddraw_output_buffer_depth(DD_Output_Buffer *ddob);
189
190/* evas_ddraw_main.cpp */
191
192#ifdef __cplusplus
193extern "C" {
194#endif
195
196int evas_software_ddraw_init (HWND window,
197 int depth,
198 int fullscreen,
199 Outbuf *buf);
200
201void evas_software_ddraw_shutdown(Outbuf *buf);
202
203int evas_software_ddraw_masks_get(Outbuf *buf);
204
205void *evas_software_ddraw_lock(Outbuf *buf,
206 int *ddraw_width,
207 int *ddraw_height,
208 int *ddraw_pitch,
209 int *ddraw_depth);
210
211void evas_software_ddraw_unlock_and_flip(Outbuf *buf);
212
213void evas_software_ddraw_surface_resize(Outbuf *buf);
214
215#ifdef __cplusplus
216}
217#endif
218
219
220#endif /* __EVAS_ENGINE_H__ */
diff --git a/libraries/evas/src/modules/engines/software_ddraw/evas_outbuf.c b/libraries/evas/src/modules/engines/software_ddraw/evas_outbuf.c
new file mode 100644
index 0000000..5a5f0a2
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_ddraw/evas_outbuf.c
@@ -0,0 +1,460 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4
5static Eina_List *ddpool = NULL;
6static int ddsize = 0;
7static int ddmemlimit = 10 * 1024 * 1024;
8static int ddcountlimit = 32;
9
10static DD_Output_Buffer *
11_find_ddob(int depth, int w, int h, void *data)
12{
13 Eina_List *l;
14 Eina_List *ddl;
15 DD_Output_Buffer *ddob = NULL;
16 DD_Output_Buffer *ddob2;
17 int sz;
18 int lbytes;
19 int bpp;
20
21 bpp = depth / 8;
22 if (bpp == 3) bpp = 4;
23 lbytes = (((w * bpp) + 3) / 4) * 4;
24 sz = lbytes * h;
25 EINA_LIST_FOREACH(ddpool, l, ddob2)
26 {
27 if (ddob2->depth != depth)
28 continue;
29 if (ddob2->psize == sz)
30 {
31 ddob = ddob2;
32 ddl = l;
33 goto have_ddob;
34 }
35 }
36 if (!ddob)
37 return evas_software_ddraw_output_buffer_new(depth, w, h, data);
38
39 have_ddob:
40 ddpool = eina_list_remove_list(ddpool, ddl);
41 ddob->width = w;
42 ddob->height = h;
43 ddob->pitch = lbytes;
44 ddsize -= ddob->psize * (ddob->depth / 8);
45
46 return ddob;
47}
48
49static void
50_unfind_ddob(DD_Output_Buffer *ddob)
51{
52 ddpool = eina_list_prepend(ddpool, ddob);
53 ddsize += ddob->psize * ddob->depth / 8;
54 while ((ddsize > (ddmemlimit)) ||
55 (eina_list_count(ddpool) > ddcountlimit))
56 {
57 Eina_List *xl;
58
59 xl = eina_list_last(ddpool);
60 if (!xl)
61 {
62 ddsize = 0;
63 break;
64 }
65 ddob = xl->data;
66 ddpool = eina_list_remove_list(ddpool, xl);
67 evas_software_ddraw_output_buffer_free(ddob);
68 }
69}
70
71static void
72_clear_ddob(int sync)
73{
74 while (ddpool)
75 {
76 DD_Output_Buffer *ddob;
77
78 ddob = ddpool->data;
79 ddpool = eina_list_remove_list(ddpool, ddpool);
80 evas_software_ddraw_output_buffer_free(ddob);
81 }
82 ddsize = 0;
83}
84
85void
86evas_software_ddraw_outbuf_init(void)
87{
88}
89
90void
91evas_software_ddraw_outbuf_free(Outbuf *buf)
92{
93 if (!buf)
94 return;
95
96 evas_software_ddraw_shutdown(buf);
97 free(buf);
98}
99
100Outbuf *
101evas_software_ddraw_outbuf_setup(int width,
102 int height,
103 int rotation,
104 Outbuf_Depth depth,
105 HWND window,
106 int w_depth,
107 int fullscreen)
108{
109 Outbuf *buf;
110
111 buf = (Outbuf *)calloc(1, sizeof(Outbuf));
112 if (!buf)
113 return NULL;
114
115 buf->width = width;
116 buf->height = height;
117 buf->depth = depth;
118 buf->rot = rotation;
119
120 if (!evas_software_ddraw_init(window, w_depth, fullscreen, buf))
121 {
122 free(buf);
123 return NULL;
124 }
125
126 {
127 Gfx_Func_Convert conv_func;
128 DD_Output_Buffer *ddob;
129
130 ddob = evas_software_ddraw_output_buffer_new(w_depth, 1, 1, NULL);
131
132 conv_func = NULL;
133 if (ddob)
134 {
135 if (evas_software_ddraw_masks_get(buf))
136 {
137 if ((rotation == 0) || (rotation == 180))
138 conv_func = evas_common_convert_func_get(0,
139 width,
140 height,
141 evas_software_ddraw_output_buffer_depth (ddob),
142 buf->priv.mask.r,
143 buf->priv.mask.g,
144 buf->priv.mask.b,
145 PAL_MODE_NONE,
146 rotation);
147 else if ((rotation == 90) || (rotation == 270))
148 conv_func = evas_common_convert_func_get(0,
149 height,
150 width,
151 evas_software_ddraw_output_buffer_depth (ddob),
152 buf->priv.mask.r,
153 buf->priv.mask.g,
154 buf->priv.mask.b,
155 PAL_MODE_NONE,
156 rotation);
157 }
158
159 evas_software_ddraw_output_buffer_free(ddob);
160
161 if (!conv_func)
162 {
163 ERR("DDraw engine Error"
164 " {"
165 " At depth %i:"
166 " RGB format mask: %08x, %08x, %08x"
167 " Not supported by and compiled in converters!"
168 " }",
169 buf->priv.dd.depth,
170 buf->priv.mask.r,
171 buf->priv.mask.g,
172 buf->priv.mask.b);
173 }
174 }
175 }
176
177 return buf;
178}
179
180void
181evas_software_ddraw_outbuf_reconfigure(Outbuf *buf,
182 int width,
183 int height,
184 int rotation,
185 Outbuf_Depth depth)
186{
187 if ((width == buf->width) && (height == buf->height) &&
188 (rotation == buf->rot) && (depth == buf->depth))
189 return;
190 buf->width = width;
191 buf->height = height;
192 buf->rot = rotation;
193 evas_software_ddraw_surface_resize(buf);
194}
195
196RGBA_Image *
197evas_software_ddraw_outbuf_new_region_for_update(Outbuf *buf,
198 int x,
199 int y,
200 int w,
201 int h,
202 int *cx,
203 int *cy,
204 int *cw,
205 int *ch)
206{
207 RGBA_Image *im;
208 Outbuf_Region *obr;
209 int bpl = 0;
210 int alpha = 0;
211
212 obr = calloc(1, sizeof(Outbuf_Region));
213 obr->x = x;
214 obr->y = y;
215 obr->width = w;
216 obr->height = h;
217 *cx = 0;
218 *cy = 0;
219 *cw = w;
220 *ch = h;
221
222 if ((buf->rot == 0) &&
223 (buf->priv.mask.r == 0xff0000) &&
224 (buf->priv.mask.g == 0x00ff00) &&
225 (buf->priv.mask.b == 0x0000ff))
226 {
227 obr->ddob = _find_ddob(buf->priv.dd.depth, w, h, NULL);
228/* obr->ddob = evas_software_x11_x_output_buffer_new(buf->priv.dd.disp, */
229/* buf->priv.dd.vis, */
230/* buf->priv.dd.depth, */
231/* w, h, */
232/* use_shm, */
233/* NULL); */
234 im = (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
235 w, h,
236 (DATA32 *) evas_software_ddraw_output_buffer_data(obr->ddob, &bpl),
237 alpha, EVAS_COLORSPACE_ARGB8888);
238 im->extended_info = obr;
239 }
240 else
241 {
242 im = (RGBA_Image *) evas_cache_image_empty(evas_common_image_cache_get());
243 im->cache_entry.flags.alpha |= alpha ? 1 : 0;
244 evas_cache_image_surface_alloc(&im->cache_entry, w, h);
245 im->extended_info = obr;
246 if ((buf->rot == 0) || (buf->rot == 180))
247 obr->ddob = _find_ddob(buf->priv.dd.depth, w, h, NULL);
248/*
249 obr->ddob = evas_software_x11_x_output_buffer_new(buf->priv.dd.disp,
250 buf->priv.dd.vis,
251 buf->priv.dd.depth,
252 w, h,
253 use_shm,
254 NULL);
255 */
256 else if ((buf->rot == 90) || (buf->rot == 270))
257 obr->ddob = _find_ddob(buf->priv.dd.depth, h, w, NULL);
258/*
259 obr->ddob = evas_software_x11_x_output_buffer_new(buf->priv.dd.disp,
260 buf->priv.dd.vis,
261 buf->priv.dd.depth,
262 h, w,
263 use_shm,
264 NULL);
265 */
266 }
267
268 buf->priv.pending_writes = eina_list_append(buf->priv.pending_writes, im);
269 return im;
270}
271
272void
273evas_software_ddraw_outbuf_push_updated_region(Outbuf *buf,
274 RGBA_Image *update,
275 int x,
276 int y,
277 int w,
278 int h)
279{
280 Gfx_Func_Convert conv_func;
281 Outbuf_Region *obr;
282 DATA32 *src_data;
283 void *data;
284 int bpl = 0;
285
286 conv_func = NULL;
287 obr = update->extended_info;
288
289 if ((buf->rot == 0) || (buf->rot == 180))
290 conv_func = evas_common_convert_func_get(0, w, h,
291 evas_software_ddraw_output_buffer_depth(obr->ddob),
292 buf->priv.mask.r,
293 buf->priv.mask.g,
294 buf->priv.mask.b,
295 PAL_MODE_NONE,
296 buf->rot);
297 else if ((buf->rot == 90) || (buf->rot == 270))
298 conv_func = evas_common_convert_func_get(0, h, w,
299 evas_software_ddraw_output_buffer_depth(obr->ddob),
300 buf->priv.mask.r,
301 buf->priv.mask.g,
302 buf->priv.mask.b,
303 PAL_MODE_NONE, buf->rot);
304 if (!conv_func) return;
305
306 data = evas_software_ddraw_output_buffer_data(obr->ddob, &bpl);
307 src_data = update->image.data;
308 if (buf->rot == 0)
309 {
310 obr->x = x;
311 obr->y = y;
312 }
313 else if (buf->rot == 90)
314 {
315 obr->x = y;
316 obr->y = buf->width - x - w;
317 }
318 else if (buf->rot == 180)
319 {
320 obr->x = buf->width - x - w;
321 obr->y = buf->height - y - h;
322 }
323 else if (buf->rot == 270)
324 {
325 obr->x = buf->height - y - h;
326 obr->y = x;
327 }
328 if ((buf->rot == 0) || (buf->rot == 180))
329 {
330 obr->width = w;
331 obr->height = h;
332 }
333 else if ((buf->rot == 90) || (buf->rot == 270))
334 {
335 obr->width = h;
336 obr->height = w;
337 }
338
339 if (data != src_data)
340 conv_func(src_data, data,
341 0,
342 bpl / ((evas_software_ddraw_output_buffer_depth(obr->ddob) / 8)) - obr->width,
343 obr->width,
344 obr->height,
345 x,
346 y,
347 NULL);
348}
349
350void
351evas_software_ddraw_outbuf_free_region_for_update(Outbuf *buf,
352 RGBA_Image *update)
353{
354 /* no need to do anything - they are cleaned up on flush */
355}
356
357void
358evas_software_ddraw_outbuf_flush(Outbuf *buf)
359{
360 Eina_List *l;
361 RGBA_Image *im;
362 Outbuf_Region *obr;
363 void *ddraw_data;
364 int ddraw_width;
365 int ddraw_height;
366 int ddraw_pitch;
367 int ddraw_depth;
368
369 /* lock the back surface */
370 if (!(ddraw_data = evas_software_ddraw_lock(buf,
371 &ddraw_width,
372 &ddraw_height,
373 &ddraw_pitch,
374 &ddraw_depth)))
375 goto free_images;
376
377 /* copy safely the images that need to be drawn onto the back surface */
378 EINA_LIST_FOREACH(buf->priv.pending_writes, l, im)
379 {
380 DD_Output_Buffer *ddob;
381
382 obr = im->extended_info;
383 ddob = obr->ddob;
384 evas_software_ddraw_output_buffer_paste(ddob,
385 ddraw_data,
386 ddraw_width,
387 ddraw_height,
388 ddraw_pitch,
389 ddraw_depth,
390 obr->x,
391 obr->y);
392 }
393
394 /* unlock the back surface and flip the surface */
395 evas_software_ddraw_unlock_and_flip(buf);
396
397 free_images:
398 while (buf->priv.prev_pending_writes)
399 {
400 im = buf->priv.prev_pending_writes->data;
401 buf->priv.prev_pending_writes =
402 eina_list_remove_list(buf->priv.prev_pending_writes,
403 buf->priv.prev_pending_writes);
404 obr = im->extended_info;
405 evas_cache_image_drop(&im->cache_entry);
406 if (obr->ddob) _unfind_ddob(obr->ddob);
407/*
408 if (obr->ddob) evas_software_x11_x_output_buffer_free(obr->ddob);
409 */
410 free(obr);
411 }
412 buf->priv.prev_pending_writes = buf->priv.pending_writes;
413 buf->priv.pending_writes = NULL;
414
415 evas_common_cpu_end_opt();
416}
417
418void
419evas_software_ddraw_outbuf_idle_flush(Outbuf *buf)
420{
421 while (buf->priv.prev_pending_writes)
422 {
423 RGBA_Image *im;
424 Outbuf_Region *obr;
425
426 im = buf->priv.prev_pending_writes->data;
427 buf->priv.prev_pending_writes =
428 eina_list_remove_list(buf->priv.prev_pending_writes,
429 buf->priv.prev_pending_writes);
430 obr = im->extended_info;
431 evas_cache_image_drop((Image_Entry *)im);
432 if (obr->ddob) _unfind_ddob(obr->ddob);
433 free(obr);
434 }
435 _clear_ddob(0);
436}
437
438int
439evas_software_ddraw_outbuf_width_get(Outbuf *buf)
440{
441 return buf->width;
442}
443
444int
445evas_software_ddraw_outbuf_height_get(Outbuf *buf)
446{
447 return buf->height;
448}
449
450Outbuf_Depth
451evas_software_ddraw_outbuf_depth_get(Outbuf *buf)
452{
453 return buf->depth;
454}
455
456int
457evas_software_ddraw_outbuf_rot_get(Outbuf *buf)
458{
459 return buf->rot;
460}
diff --git a/libraries/evas/src/modules/engines/software_gdi/Evas_Engine_Software_Gdi.h b/libraries/evas/src/modules/engines/software_gdi/Evas_Engine_Software_Gdi.h
new file mode 100644
index 0000000..deac5b2
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_gdi/Evas_Engine_Software_Gdi.h
@@ -0,0 +1,32 @@
1#ifndef __EVAS_ENGINE_SOFTWARE_GDI_H__
2#define __EVAS_ENGINE_SOFTWARE_GDI_H__
3
4
5#define WIN32_LEAN_AND_MEAN
6#include <windows.h>
7#undef WIN32_LEAN_AND_MEAN
8
9
10typedef struct _Evas_Engine_Info_Software_Gdi Evas_Engine_Info_Software_Gdi;
11
12struct _Evas_Engine_Info_Software_Gdi
13{
14 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
15 /* at you and make nasty noises */
16 Evas_Engine_Info magic;
17
18 struct {
19 HWND window;
20 int depth;
21 int rotation;
22 unsigned int borderless : 1;
23 unsigned int fullscreen : 1;
24 unsigned int region : 1;
25 } info;
26
27 /* non-blocking or blocking mode */
28 Evas_Engine_Render_Mode render_mode;
29};
30
31
32#endif /* __EVAS_ENGINE_SOFTWARE_GDI_H__ */
diff --git a/libraries/evas/src/modules/engines/software_gdi/Makefile.am b/libraries/evas/src/modules/engines/software_gdi/Makefile.am
new file mode 100644
index 0000000..ccb8084
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_gdi/Makefile.am
@@ -0,0 +1,47 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9@EINA_CFLAGS@ \
10@FREETYPE_CFLAGS@ \
11@PIXMAN_CFLAGS@ \
12@evas_engine_software_gdi_cflags@
13
14if BUILD_ENGINE_SOFTWARE_GDI
15
16SOFTWARE_GDI_SOURCES = \
17evas_engine.c \
18evas_outbuf.c \
19evas_gdi_buffer.c \
20evas_gdi_main.c
21
22SOFTWARE_GDI_LIBADD = @evas_engine_software_gdi_libs@
23
24
25includes_HEADERS = Evas_Engine_Software_Gdi.h
26includesdir = $(includedir)/evas-@VMAJ@
27
28if !EVAS_STATIC_BUILD_SOFTWARE_GDI
29
30pkgdir = $(libdir)/evas/modules/engines/software_gdi/$(MODULE_ARCH)
31pkg_LTLIBRARIES = module.la
32module_la_SOURCES = $(SOFTWARE_GDI_SOURCES)
33module_la_LIBADD = $(top_builddir)/src/lib/libevas.la @EINA_LIBS@ $(SOFTWARE_GDI_LIBADD)
34module_la_LDFLAGS = @lt_enable_auto_import@ -no-undefined -module -avoid-version
35module_la_LIBTOOLFLAGS = --tag=disable-static
36
37else
38
39noinst_LTLIBRARIES = libevas_engine_software_gdi.la
40
41libevas_engine_software_gdi_la_SOURCES = $(SOFTWARE_GDI_SOURCES)
42libevas_engine_software_gdi_la_LIBADD = $(SOFTWARE_GDI_LIBADD)
43
44endif
45endif
46
47EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/software_gdi/Makefile.in b/libraries/evas/src/modules/engines/software_gdi/Makefile.in
new file mode 100644
index 0000000..5dea632
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_gdi/Makefile.in
@@ -0,0 +1,838 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/software_gdi
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84am__DEPENDENCIES_1 =
85@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_TRUE@libevas_engine_software_gdi_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_software_gdi_la_SOURCES_DIST = evas_engine.c \
87 evas_outbuf.c evas_gdi_buffer.c evas_gdi_main.c
88@BUILD_ENGINE_SOFTWARE_GDI_TRUE@am__objects_1 = evas_engine.lo \
89@BUILD_ENGINE_SOFTWARE_GDI_TRUE@ evas_outbuf.lo \
90@BUILD_ENGINE_SOFTWARE_GDI_TRUE@ evas_gdi_buffer.lo \
91@BUILD_ENGINE_SOFTWARE_GDI_TRUE@ evas_gdi_main.lo
92@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_TRUE@am_libevas_engine_software_gdi_la_OBJECTS = $(am__objects_1)
93libevas_engine_software_gdi_la_OBJECTS = \
94 $(am_libevas_engine_software_gdi_la_OBJECTS)
95AM_V_lt = $(am__v_lt_$(V))
96am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
97am__v_lt_0 = --silent
98@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_TRUE@am_libevas_engine_software_gdi_la_rpath =
99@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la \
100@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@ $(am__DEPENDENCIES_1)
101am__module_la_SOURCES_DIST = evas_engine.c evas_outbuf.c \
102 evas_gdi_buffer.c evas_gdi_main.c
103@BUILD_ENGINE_SOFTWARE_GDI_TRUE@am__objects_2 = \
104@BUILD_ENGINE_SOFTWARE_GDI_TRUE@ module_la-evas_engine.lo \
105@BUILD_ENGINE_SOFTWARE_GDI_TRUE@ module_la-evas_outbuf.lo \
106@BUILD_ENGINE_SOFTWARE_GDI_TRUE@ module_la-evas_gdi_buffer.lo \
107@BUILD_ENGINE_SOFTWARE_GDI_TRUE@ module_la-evas_gdi_main.lo
108@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@am_module_la_OBJECTS = $(am__objects_2)
109module_la_OBJECTS = $(am_module_la_OBJECTS)
110module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
111 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
112 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
113@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@am_module_la_rpath = -rpath \
114@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@ $(pkgdir)
115DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
116depcomp = $(SHELL) $(top_srcdir)/depcomp
117am__depfiles_maybe = depfiles
118am__mv = mv -f
119COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
120 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
121LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
122 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
123 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
124 $(AM_CFLAGS) $(CFLAGS)
125AM_V_CC = $(am__v_CC_$(V))
126am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
127am__v_CC_0 = @echo " CC " $@;
128AM_V_at = $(am__v_at_$(V))
129am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
130am__v_at_0 = @
131CCLD = $(CC)
132LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
133 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
134 $(AM_LDFLAGS) $(LDFLAGS) -o $@
135AM_V_CCLD = $(am__v_CCLD_$(V))
136am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
137am__v_CCLD_0 = @echo " CCLD " $@;
138AM_V_GEN = $(am__v_GEN_$(V))
139am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
140am__v_GEN_0 = @echo " GEN " $@;
141SOURCES = $(libevas_engine_software_gdi_la_SOURCES) \
142 $(module_la_SOURCES)
143DIST_SOURCES = $(am__libevas_engine_software_gdi_la_SOURCES_DIST) \
144 $(am__module_la_SOURCES_DIST)
145am__includes_HEADERS_DIST = Evas_Engine_Software_Gdi.h
146HEADERS = $(includes_HEADERS)
147ETAGS = etags
148CTAGS = ctags
149DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
150ACLOCAL = @ACLOCAL@
151ALLOCA = @ALLOCA@
152AMTAR = @AMTAR@
153AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
154AR = @AR@
155AS = @AS@
156AUTOCONF = @AUTOCONF@
157AUTOHEADER = @AUTOHEADER@
158AUTOMAKE = @AUTOMAKE@
159AWK = @AWK@
160CC = @CC@
161CCDEPMODE = @CCDEPMODE@
162CFLAGS = @CFLAGS@
163CHECK_CFLAGS = @CHECK_CFLAGS@
164CHECK_LIBS = @CHECK_LIBS@
165CPP = @CPP@
166CPPFLAGS = @CPPFLAGS@
167CXX = @CXX@
168CXXCPP = @CXXCPP@
169CXXDEPMODE = @CXXDEPMODE@
170CXXFLAGS = @CXXFLAGS@
171CYGPATH_W = @CYGPATH_W@
172DEFS = @DEFS@
173DEPDIR = @DEPDIR@
174DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
175DIRECTFB_LIBS = @DIRECTFB_LIBS@
176DLLTOOL = @DLLTOOL@
177DSYMUTIL = @DSYMUTIL@
178DUMPBIN = @DUMPBIN@
179ECHO_C = @ECHO_C@
180ECHO_N = @ECHO_N@
181ECHO_T = @ECHO_T@
182ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
183ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
184EDB_CFLAGS = @EDB_CFLAGS@
185EDB_LIBS = @EDB_LIBS@
186EDJE_CFLAGS = @EDJE_CFLAGS@
187EDJE_LIBS = @EDJE_LIBS@
188EET_CFLAGS = @EET_CFLAGS@
189EET_LIBS = @EET_LIBS@
190EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
191EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
192EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
193EGREP = @EGREP@
194EINA_CFLAGS = @EINA_CFLAGS@
195EINA_LIBS = @EINA_LIBS@
196EVAS_CFLAGS = @EVAS_CFLAGS@
197EVAS_LIBS = @EVAS_LIBS@
198EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
199EVIL_CFLAGS = @EVIL_CFLAGS@
200EVIL_LIBS = @EVIL_LIBS@
201EXEEXT = @EXEEXT@
202FGREP = @FGREP@
203FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
204FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
205FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
206FREETYPE_LIBS = @FREETYPE_LIBS@
207FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
208FRIBIDI_LIBS = @FRIBIDI_LIBS@
209GL_EET_CFLAGS = @GL_EET_CFLAGS@
210GL_EET_LIBS = @GL_EET_LIBS@
211GREP = @GREP@
212HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
213HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
214INSTALL = @INSTALL@
215INSTALL_DATA = @INSTALL_DATA@
216INSTALL_PROGRAM = @INSTALL_PROGRAM@
217INSTALL_SCRIPT = @INSTALL_SCRIPT@
218INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
219LD = @LD@
220LDFLAGS = @LDFLAGS@
221LIBOBJS = @LIBOBJS@
222LIBS = @LIBS@
223LIBTOOL = @LIBTOOL@
224LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
225LINEBREAK_LIBS = @LINEBREAK_LIBS@
226LIPO = @LIPO@
227LN_S = @LN_S@
228LTLIBOBJS = @LTLIBOBJS@
229MAKEINFO = @MAKEINFO@
230MKDIR_P = @MKDIR_P@
231MODULE_ARCH = @MODULE_ARCH@
232NM = @NM@
233NMEDIT = @NMEDIT@
234OBJC = @OBJC@
235OBJCDEPMODE = @OBJCDEPMODE@
236OBJCFLAGS = @OBJCFLAGS@
237OBJDUMP = @OBJDUMP@
238OBJEXT = @OBJEXT@
239OTOOL = @OTOOL@
240OTOOL64 = @OTOOL64@
241PACKAGE = @PACKAGE@
242PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
243PACKAGE_NAME = @PACKAGE_NAME@
244PACKAGE_STRING = @PACKAGE_STRING@
245PACKAGE_TARNAME = @PACKAGE_TARNAME@
246PACKAGE_URL = @PACKAGE_URL@
247PACKAGE_VERSION = @PACKAGE_VERSION@
248PATH_SEPARATOR = @PATH_SEPARATOR@
249PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
250PIXMAN_LIBS = @PIXMAN_LIBS@
251PKG_CONFIG = @PKG_CONFIG@
252PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
253PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
254PNG_CFLAGS = @PNG_CFLAGS@
255PNG_LIBS = @PNG_LIBS@
256RANLIB = @RANLIB@
257SDL_CFLAGS = @SDL_CFLAGS@
258SDL_LIBS = @SDL_LIBS@
259SED = @SED@
260SET_MAKE = @SET_MAKE@
261SHELL = @SHELL@
262SHM_OPEN_LINK = @SHM_OPEN_LINK@
263STRIP = @STRIP@
264SVG_CFLAGS = @SVG_CFLAGS@
265SVG_LIBS = @SVG_LIBS@
266VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
267VALGRIND_LIBS = @VALGRIND_LIBS@
268VERSION = @VERSION@
269VMAJ = @VMAJ@
270WIN32_CFLAGS = @WIN32_CFLAGS@
271WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
272XCB_CFLAGS = @XCB_CFLAGS@
273XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
274XCB_GL_LIBS = @XCB_GL_LIBS@
275XCB_LIBS = @XCB_LIBS@
276XEXT_CFLAGS = @XEXT_CFLAGS@
277XEXT_LIBS = @XEXT_LIBS@
278XMKMF = @XMKMF@
279X_CFLAGS = @X_CFLAGS@
280X_EXTRA_LIBS = @X_EXTRA_LIBS@
281X_LIBS = @X_LIBS@
282X_PRE_LIBS = @X_PRE_LIBS@
283abs_builddir = @abs_builddir@
284abs_srcdir = @abs_srcdir@
285abs_top_builddir = @abs_top_builddir@
286abs_top_srcdir = @abs_top_srcdir@
287ac_ct_CC = @ac_ct_CC@
288ac_ct_CXX = @ac_ct_CXX@
289ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
290ac_ct_OBJC = @ac_ct_OBJC@
291altivec_cflags = @altivec_cflags@
292am__include = @am__include@
293am__leading_dot = @am__leading_dot@
294am__quote = @am__quote@
295am__tar = @am__tar@
296am__untar = @am__untar@
297bindir = @bindir@
298build = @build@
299build_alias = @build_alias@
300build_cpu = @build_cpu@
301build_os = @build_os@
302build_vendor = @build_vendor@
303builddir = @builddir@
304datadir = @datadir@
305datarootdir = @datarootdir@
306dlopen_libs = @dlopen_libs@
307docdir = @docdir@
308dvidir = @dvidir@
309edje_cc = @edje_cc@
310efl_doxygen = @efl_doxygen@
311efl_have_doxygen = @efl_have_doxygen@
312evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
313evas_engine_buffer_libs = @evas_engine_buffer_libs@
314evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
315evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
316evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
317evas_engine_directfb_libs = @evas_engine_directfb_libs@
318evas_engine_fb_cflags = @evas_engine_fb_cflags@
319evas_engine_fb_libs = @evas_engine_fb_libs@
320evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
321evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
322evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
323evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
324evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
325evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
326evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
327evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
328evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
329evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
330evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
331evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
332evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
333evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
334evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
335evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
336evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
337evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
338evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
339evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
340evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
341evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
342evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
343evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
344evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
345evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
346evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
347evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
348evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
349evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
350evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
351evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
352evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
353evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
354evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
355evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
356evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
357evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
358evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
359evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
360evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
361evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
362evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
363evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
364evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
365evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
366evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
367evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
368evas_image_loader_png_libs = @evas_image_loader_png_libs@
369evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
370evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
371evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
372evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
373evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
374evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
375evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
376evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
377evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
378evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
379evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
380evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
381exec_prefix = @exec_prefix@
382have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
383have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
384have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
385have_evas_engine_software_x11 = @have_evas_engine_software_x11@
386have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
387have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
388have_lcov = @have_lcov@
389host = @host@
390host_alias = @host_alias@
391host_cpu = @host_cpu@
392host_os = @host_os@
393host_vendor = @host_vendor@
394htmldir = @htmldir@
395includedir = @includedir@
396infodir = @infodir@
397install_sh = @install_sh@
398libdir = @libdir@
399libexecdir = @libexecdir@
400localedir = @localedir@
401localstatedir = @localstatedir@
402lt_ECHO = @lt_ECHO@
403lt_enable_auto_import = @lt_enable_auto_import@
404mandir = @mandir@
405mkdir_p = @mkdir_p@
406oldincludedir = @oldincludedir@
407pdfdir = @pdfdir@
408pkgconfig_requires_private = @pkgconfig_requires_private@
409prefix = @prefix@
410program_transform_name = @program_transform_name@
411psdir = @psdir@
412pthread_cflags = @pthread_cflags@
413pthread_libs = @pthread_libs@
414release_info = @release_info@
415requirement_evas = @requirement_evas@
416sbindir = @sbindir@
417sharedstatedir = @sharedstatedir@
418srcdir = @srcdir@
419sysconfdir = @sysconfdir@
420target_alias = @target_alias@
421top_build_prefix = @top_build_prefix@
422top_builddir = @top_builddir@
423top_srcdir = @top_srcdir@
424version_info = @version_info@
425MAINTAINERCLEANFILES = Makefile.in
426AM_CPPFLAGS = \
427-I. \
428-I$(top_srcdir)/src/lib \
429-I$(top_srcdir)/src/lib/include \
430-I$(top_srcdir)/src/modules/engines \
431@EINA_CFLAGS@ \
432@FREETYPE_CFLAGS@ \
433@PIXMAN_CFLAGS@ \
434@evas_engine_software_gdi_cflags@
435
436@BUILD_ENGINE_SOFTWARE_GDI_TRUE@SOFTWARE_GDI_SOURCES = \
437@BUILD_ENGINE_SOFTWARE_GDI_TRUE@evas_engine.c \
438@BUILD_ENGINE_SOFTWARE_GDI_TRUE@evas_outbuf.c \
439@BUILD_ENGINE_SOFTWARE_GDI_TRUE@evas_gdi_buffer.c \
440@BUILD_ENGINE_SOFTWARE_GDI_TRUE@evas_gdi_main.c
441
442@BUILD_ENGINE_SOFTWARE_GDI_TRUE@SOFTWARE_GDI_LIBADD = @evas_engine_software_gdi_libs@
443@BUILD_ENGINE_SOFTWARE_GDI_TRUE@includes_HEADERS = Evas_Engine_Software_Gdi.h
444@BUILD_ENGINE_SOFTWARE_GDI_TRUE@includesdir = $(includedir)/evas-@VMAJ@
445@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_gdi/$(MODULE_ARCH)
446@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@pkg_LTLIBRARIES = module.la
447@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@module_la_SOURCES = $(SOFTWARE_GDI_SOURCES)
448@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@module_la_LIBADD = $(top_builddir)/src/lib/libevas.la @EINA_LIBS@ $(SOFTWARE_GDI_LIBADD)
449@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@module_la_LDFLAGS = @lt_enable_auto_import@ -no-undefined -module -avoid-version
450@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
451@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_TRUE@noinst_LTLIBRARIES = libevas_engine_software_gdi.la
452@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_TRUE@libevas_engine_software_gdi_la_SOURCES = $(SOFTWARE_GDI_SOURCES)
453@BUILD_ENGINE_SOFTWARE_GDI_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_GDI_TRUE@libevas_engine_software_gdi_la_LIBADD = $(SOFTWARE_GDI_LIBADD)
454EXTRA_DIST = evas_engine.h
455all: all-am
456
457.SUFFIXES:
458.SUFFIXES: .c .lo .o .obj
459$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
460 @for dep in $?; do \
461 case '$(am__configure_deps)' in \
462 *$$dep*) \
463 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
464 && { if test -f $@; then exit 0; else break; fi; }; \
465 exit 1;; \
466 esac; \
467 done; \
468 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_gdi/Makefile'; \
469 $(am__cd) $(top_srcdir) && \
470 $(AUTOMAKE) --gnu src/modules/engines/software_gdi/Makefile
471.PRECIOUS: Makefile
472Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
473 @case '$?' in \
474 *config.status*) \
475 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
476 *) \
477 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
478 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
479 esac;
480
481$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
482 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
483
484$(top_srcdir)/configure: $(am__configure_deps)
485 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
486$(ACLOCAL_M4): $(am__aclocal_m4_deps)
487 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
488$(am__aclocal_m4_deps):
489
490clean-noinstLTLIBRARIES:
491 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
492 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
493 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
494 test "$$dir" != "$$p" || dir=.; \
495 echo "rm -f \"$${dir}/so_locations\""; \
496 rm -f "$${dir}/so_locations"; \
497 done
498install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
499 @$(NORMAL_INSTALL)
500 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
501 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
502 list2=; for p in $$list; do \
503 if test -f $$p; then \
504 list2="$$list2 $$p"; \
505 else :; fi; \
506 done; \
507 test -z "$$list2" || { \
508 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
509 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
510 }
511
512uninstall-pkgLTLIBRARIES:
513 @$(NORMAL_UNINSTALL)
514 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
515 for p in $$list; do \
516 $(am__strip_dir) \
517 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
518 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
519 done
520
521clean-pkgLTLIBRARIES:
522 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
523 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
524 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
525 test "$$dir" != "$$p" || dir=.; \
526 echo "rm -f \"$${dir}/so_locations\""; \
527 rm -f "$${dir}/so_locations"; \
528 done
529libevas_engine_software_gdi.la: $(libevas_engine_software_gdi_la_OBJECTS) $(libevas_engine_software_gdi_la_DEPENDENCIES)
530 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_software_gdi_la_rpath) $(libevas_engine_software_gdi_la_OBJECTS) $(libevas_engine_software_gdi_la_LIBADD) $(LIBS)
531module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
532 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
533
534mostlyclean-compile:
535 -rm -f *.$(OBJEXT)
536
537distclean-compile:
538 -rm -f *.tab.c
539
540@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
541@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gdi_buffer.Plo@am__quote@
542@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_gdi_main.Plo@am__quote@
543@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_outbuf.Plo@am__quote@
544@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
545@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_gdi_buffer.Plo@am__quote@
546@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_gdi_main.Plo@am__quote@
547@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_outbuf.Plo@am__quote@
548
549.c.o:
550@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
551@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
552@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
553@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
554@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
555@am__fastdepCC_FALSE@ $(COMPILE) -c $<
556
557.c.obj:
558@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
559@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
560@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
561@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
562@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
563@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
564
565.c.lo:
566@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
567@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
568@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
569@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
570@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
571@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
572
573module_la-evas_engine.lo: evas_engine.c
574@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
575@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
576@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
577@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
578@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
579@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
580
581module_la-evas_outbuf.lo: evas_outbuf.c
582@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_outbuf.lo -MD -MP -MF $(DEPDIR)/module_la-evas_outbuf.Tpo -c -o module_la-evas_outbuf.lo `test -f 'evas_outbuf.c' || echo '$(srcdir)/'`evas_outbuf.c
583@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_outbuf.Tpo $(DEPDIR)/module_la-evas_outbuf.Plo
584@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
585@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_outbuf.c' object='module_la-evas_outbuf.lo' libtool=yes @AMDEPBACKSLASH@
586@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
587@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_outbuf.lo `test -f 'evas_outbuf.c' || echo '$(srcdir)/'`evas_outbuf.c
588
589module_la-evas_gdi_buffer.lo: evas_gdi_buffer.c
590@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_gdi_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_gdi_buffer.Tpo -c -o module_la-evas_gdi_buffer.lo `test -f 'evas_gdi_buffer.c' || echo '$(srcdir)/'`evas_gdi_buffer.c
591@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_gdi_buffer.Tpo $(DEPDIR)/module_la-evas_gdi_buffer.Plo
592@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
593@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_gdi_buffer.c' object='module_la-evas_gdi_buffer.lo' libtool=yes @AMDEPBACKSLASH@
594@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
595@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_gdi_buffer.lo `test -f 'evas_gdi_buffer.c' || echo '$(srcdir)/'`evas_gdi_buffer.c
596
597module_la-evas_gdi_main.lo: evas_gdi_main.c
598@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_gdi_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_gdi_main.Tpo -c -o module_la-evas_gdi_main.lo `test -f 'evas_gdi_main.c' || echo '$(srcdir)/'`evas_gdi_main.c
599@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_gdi_main.Tpo $(DEPDIR)/module_la-evas_gdi_main.Plo
600@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
601@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_gdi_main.c' object='module_la-evas_gdi_main.lo' libtool=yes @AMDEPBACKSLASH@
602@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
603@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_gdi_main.lo `test -f 'evas_gdi_main.c' || echo '$(srcdir)/'`evas_gdi_main.c
604
605mostlyclean-libtool:
606 -rm -f *.lo
607
608clean-libtool:
609 -rm -rf .libs _libs
610install-includesHEADERS: $(includes_HEADERS)
611 @$(NORMAL_INSTALL)
612 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
613 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
614 for p in $$list; do \
615 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
616 echo "$$d$$p"; \
617 done | $(am__base_list) | \
618 while read files; do \
619 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
620 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
621 done
622
623uninstall-includesHEADERS:
624 @$(NORMAL_UNINSTALL)
625 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
626 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
627 test -n "$$files" || exit 0; \
628 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
629 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
630
631ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
632 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
633 unique=`for i in $$list; do \
634 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
635 done | \
636 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
637 END { if (nonempty) { for (i in files) print i; }; }'`; \
638 mkid -fID $$unique
639tags: TAGS
640
641TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
642 $(TAGS_FILES) $(LISP)
643 set x; \
644 here=`pwd`; \
645 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
646 unique=`for i in $$list; do \
647 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
648 done | \
649 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
650 END { if (nonempty) { for (i in files) print i; }; }'`; \
651 shift; \
652 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
653 test -n "$$unique" || unique=$$empty_fix; \
654 if test $$# -gt 0; then \
655 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
656 "$$@" $$unique; \
657 else \
658 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
659 $$unique; \
660 fi; \
661 fi
662ctags: CTAGS
663CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
664 $(TAGS_FILES) $(LISP)
665 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
666 unique=`for i in $$list; do \
667 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
668 done | \
669 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
670 END { if (nonempty) { for (i in files) print i; }; }'`; \
671 test -z "$(CTAGS_ARGS)$$unique" \
672 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
673 $$unique
674
675GTAGS:
676 here=`$(am__cd) $(top_builddir) && pwd` \
677 && $(am__cd) $(top_srcdir) \
678 && gtags -i $(GTAGS_ARGS) "$$here"
679
680distclean-tags:
681 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
682
683distdir: $(DISTFILES)
684 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
685 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
686 list='$(DISTFILES)'; \
687 dist_files=`for file in $$list; do echo $$file; done | \
688 sed -e "s|^$$srcdirstrip/||;t" \
689 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
690 case $$dist_files in \
691 */*) $(MKDIR_P) `echo "$$dist_files" | \
692 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
693 sort -u` ;; \
694 esac; \
695 for file in $$dist_files; do \
696 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
697 if test -d $$d/$$file; then \
698 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
699 if test -d "$(distdir)/$$file"; then \
700 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
701 fi; \
702 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
703 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
704 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
705 fi; \
706 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
707 else \
708 test -f "$(distdir)/$$file" \
709 || cp -p $$d/$$file "$(distdir)/$$file" \
710 || exit 1; \
711 fi; \
712 done
713check-am: all-am
714check: check-am
715all-am: Makefile $(LTLIBRARIES) $(HEADERS)
716installdirs:
717 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
718 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
719 done
720install: install-am
721install-exec: install-exec-am
722install-data: install-data-am
723uninstall: uninstall-am
724
725install-am: all-am
726 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
727
728installcheck: installcheck-am
729install-strip:
730 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
731 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
732 `test -z '$(STRIP)' || \
733 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
734mostlyclean-generic:
735
736clean-generic:
737
738distclean-generic:
739 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
740 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
741
742maintainer-clean-generic:
743 @echo "This command is intended for maintainers to use"
744 @echo "it deletes files that may require special tools to rebuild."
745 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
746clean: clean-am
747
748clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
749 clean-pkgLTLIBRARIES mostlyclean-am
750
751distclean: distclean-am
752 -rm -rf ./$(DEPDIR)
753 -rm -f Makefile
754distclean-am: clean-am distclean-compile distclean-generic \
755 distclean-tags
756
757dvi: dvi-am
758
759dvi-am:
760
761html: html-am
762
763html-am:
764
765info: info-am
766
767info-am:
768
769install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
770
771install-dvi: install-dvi-am
772
773install-dvi-am:
774
775install-exec-am:
776
777install-html: install-html-am
778
779install-html-am:
780
781install-info: install-info-am
782
783install-info-am:
784
785install-man:
786
787install-pdf: install-pdf-am
788
789install-pdf-am:
790
791install-ps: install-ps-am
792
793install-ps-am:
794
795installcheck-am:
796
797maintainer-clean: maintainer-clean-am
798 -rm -rf ./$(DEPDIR)
799 -rm -f Makefile
800maintainer-clean-am: distclean-am maintainer-clean-generic
801
802mostlyclean: mostlyclean-am
803
804mostlyclean-am: mostlyclean-compile mostlyclean-generic \
805 mostlyclean-libtool
806
807pdf: pdf-am
808
809pdf-am:
810
811ps: ps-am
812
813ps-am:
814
815uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
816
817.MAKE: install-am install-strip
818
819.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
820 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
821 ctags distclean distclean-compile distclean-generic \
822 distclean-libtool distclean-tags distdir dvi dvi-am html \
823 html-am info info-am install install-am install-data \
824 install-data-am install-dvi install-dvi-am install-exec \
825 install-exec-am install-html install-html-am \
826 install-includesHEADERS install-info install-info-am \
827 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
828 install-ps install-ps-am install-strip installcheck \
829 installcheck-am installdirs maintainer-clean \
830 maintainer-clean-generic mostlyclean mostlyclean-compile \
831 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
832 tags uninstall uninstall-am uninstall-includesHEADERS \
833 uninstall-pkgLTLIBRARIES
834
835
836# Tell versions [3.59,3.63) of GNU make to not export all variables.
837# Otherwise a system limit (for SysV at least) may be exceeded.
838.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_gdi/evas_engine.c b/libraries/evas/src/modules/engines/software_gdi/evas_engine.c
new file mode 100644
index 0000000..414e880
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_gdi/evas_engine.c
@@ -0,0 +1,387 @@
1#include "evas_common.h"
2#include "evas_private.h"
3#include "evas_engine.h"
4#include "Evas_Engine_Software_Gdi.h"
5
6int _evas_engine_soft_gdi_log_dom = -1;
7/* function tables - filled in later (func and parent func) */
8static Evas_Func func, pfunc;
9
10/* engine struct data */
11typedef struct _Render_Engine Render_Engine;
12
13struct _Render_Engine
14{
15 Tilebuf *tb;
16 Outbuf *ob;
17 Tilebuf_Rect *rects;
18 Eina_Inlist *cur_rect;
19 int end : 1;
20};
21
22
23static void *
24_output_setup(int width,
25 int height,
26 int rot,
27 HWND window,
28 int depth,
29 unsigned int borderless,
30 unsigned int fullscreen,
31 unsigned int region)
32{
33 Render_Engine *re;
34
35 re = calloc(1, sizeof(Render_Engine));
36 if (!re)
37 return NULL;
38
39 /* if we haven't initialized - init (automatic abort if already done) */
40 evas_common_cpu_init();
41
42 evas_common_blend_init();
43 evas_common_image_init();
44 evas_common_convert_init();
45 evas_common_scale_init();
46 evas_common_rectangle_init();
47 evas_common_polygon_init();
48 evas_common_line_init();
49 evas_common_font_init();
50 evas_common_draw_init();
51 evas_common_tilebuf_init();
52
53 evas_software_gdi_outbuf_init();
54
55 if (width <= 0)
56 width = 1;
57 if (height <= 0)
58 height = 1;
59
60 re->ob = evas_software_gdi_outbuf_setup(width, height, rot,
61 OUTBUF_DEPTH_INHERIT,
62 window, depth, borderless, fullscreen, region,
63 0, 0);
64 if (!re->ob)
65 {
66 free(re);
67 return NULL;
68 }
69
70 /* for updates return 1 big buffer, but only use portions of it, also cache
71 it and keep it around until an idle_flush */
72 /* disable for now - i am hunting down why some expedite tests are slower,
73 * as well as shaped stuff is broken and probable non-32bpp is broken as
74 * convert funcs dont do the right thing
75 *
76 re->ob->onebuf = 1;
77 */
78
79 re->tb = evas_common_tilebuf_new(width, height);
80 if (!re->tb)
81 {
82 evas_software_gdi_outbuf_free(re->ob);
83 free(re);
84 return NULL;
85 }
86 /* in preliminary tests 16x16 gave highest framerates */
87 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
88
89 return re;
90}
91
92
93/* engine api this module provides */
94
95static void *
96eng_info(Evas *e __UNUSED__)
97{
98 Evas_Engine_Info_Software_Gdi *info;
99 info = calloc(1, sizeof(Evas_Engine_Info_Software_Gdi));
100 if (!info) return NULL;
101 info->magic.magic = rand();
102 return info;
103}
104
105static void
106eng_info_free(Evas *e __UNUSED__, void *info)
107{
108 Evas_Engine_Info_Software_Gdi *in;
109 in = (Evas_Engine_Info_Software_Gdi *)info;
110 free(in);
111}
112
113static int
114eng_setup(Evas *e, void *in)
115{
116 Render_Engine *re;
117 Evas_Engine_Info_Software_Gdi *info;
118
119 info = (Evas_Engine_Info_Software_Gdi *)in;
120 if (!e->engine.data.output)
121 e->engine.data.output = _output_setup(e->output.w,
122 e->output.h,
123 info->info.rotation,
124 info->info.window,
125 info->info.depth,
126 info->info.borderless,
127 info->info.fullscreen,
128 info->info.region);
129 else
130 {
131 int ponebuf = 0;
132
133 re = e->engine.data.output;
134 ponebuf = re->ob->onebuf;
135 evas_software_gdi_outbuf_free(re->ob);
136 re->ob = evas_software_gdi_outbuf_setup(e->output.w,
137 e->output.h,
138 info->info.rotation,
139 OUTBUF_DEPTH_INHERIT,
140 info->info.window,
141 info->info.depth,
142 info->info.borderless,
143 info->info.fullscreen,
144 info->info.region,
145 0, 0);
146 re->ob->onebuf = ponebuf;
147 }
148 if (!e->engine.data.output) return 0;
149 if (!e->engine.data.context)
150 e->engine.data.context = e->engine.func->context_new(e->engine.data.output);
151
152 re = e->engine.data.output;
153
154 return 1;
155}
156
157static void
158eng_output_free(void *data)
159{
160 Render_Engine *re;
161
162 if (!data) return;
163
164 re = (Render_Engine *)data;
165 evas_software_gdi_outbuf_free(re->ob);
166 evas_common_tilebuf_free(re->tb);
167 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
168 free(re);
169
170 evas_common_font_shutdown();
171 evas_common_image_shutdown();
172}
173
174static void
175eng_output_resize(void *data, int width, int height)
176{
177 Render_Engine *re;
178
179 re = (Render_Engine *)data;
180 evas_software_gdi_outbuf_reconfigure(re->ob,
181 width,
182 height,
183 evas_software_gdi_outbuf_rot_get(re->ob),
184 OUTBUF_DEPTH_INHERIT);
185 evas_common_tilebuf_free(re->tb);
186 re->tb = evas_common_tilebuf_new(width, height);
187 if (re->tb)
188 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
189}
190
191static void
192eng_output_tile_size_set(void *data, int w, int h)
193{
194 Render_Engine *re;
195
196 re = (Render_Engine *)data;
197 evas_common_tilebuf_set_tile_size(re->tb, w, h);
198}
199
200static void
201eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
202{
203 Render_Engine *re;
204
205 re = (Render_Engine *)data;
206 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
207}
208
209static void
210eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
211{
212 Render_Engine *re;
213
214 re = (Render_Engine *)data;
215 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
216}
217
218static void
219eng_output_redraws_clear(void *data)
220{
221 Render_Engine *re;
222
223 re = (Render_Engine *)data;
224 evas_common_tilebuf_clear(re->tb);
225}
226
227static void *
228eng_output_redraws_next_update_get(void *data,
229 int *x,
230 int *y,
231 int *w,
232 int *h,
233 int *cx,
234 int *cy,
235 int *cw,
236 int *ch)
237{
238 Render_Engine *re;
239 RGBA_Image *surface;
240 Tilebuf_Rect *rect;
241 int ux;
242 int uy;
243 int uw;
244 int uh;
245
246 re = (Render_Engine *)data;
247 if (re->end)
248 {
249 re->end = 0;
250 return NULL;
251 }
252 if (!re->rects)
253 {
254 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
255 re->cur_rect = EINA_INLIST_GET(re->rects);
256 }
257 if (!re->cur_rect) return NULL;
258 rect = (Tilebuf_Rect *)re->cur_rect;
259 ux = rect->x;
260 uy = rect->y;
261 uw = rect->w;
262 uh = rect->h;
263 re->cur_rect = re->cur_rect->next;
264 if (!re->cur_rect)
265 {
266 evas_common_tilebuf_free_render_rects(re->rects);
267 re->rects = NULL;
268 re->end = 1;
269 }
270
271 surface = evas_software_gdi_outbuf_new_region_for_update(re->ob,
272 ux,
273 uy,
274 uw,
275 uh,
276 cx,
277 cy,
278 cw,
279 ch);
280
281 *x = ux;
282 *y = uy;
283 *w = uw;
284 *h = uh;
285
286 return surface;
287}
288
289static void
290eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
291{
292 Render_Engine *re;
293
294 re = (Render_Engine *)data;
295#ifdef BUILD_PIPE_RENDER
296 evas_common_pipe_map_begin(surface);
297#endif
298 evas_software_gdi_outbuf_push_updated_region(re->ob, surface, x, y, w, h);
299 evas_software_gdi_outbuf_free_region_for_update(re->ob, surface);
300 evas_common_cpu_end_opt();
301}
302
303static void
304eng_output_flush(void *data)
305{
306 Render_Engine *re;
307
308 re = (Render_Engine *)data;
309 evas_software_gdi_outbuf_flush(re->ob);
310}
311
312static void
313eng_output_idle_flush(void *data)
314{
315 Render_Engine *re;
316
317 re = (Render_Engine *)data;
318 evas_software_gdi_outbuf_idle_flush(re->ob);
319}
320
321static Eina_Bool
322eng_canvas_alpha_get(void *data, void *context)
323{
324 return EINA_FALSE;
325}
326
327/* module advertising code */
328static int
329module_open(Evas_Module *em)
330{
331 if (!em) return 0;
332 /* get whatever engine module we inherit from */
333 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
334
335 _evas_engine_soft_gdi_log_dom = eina_log_domain_register
336 ("evas-software_gdi", EVAS_DEFAULT_LOG_COLOR);
337 if (_evas_engine_soft_gdi_log_dom < 0)
338 {
339 EINA_LOG_ERR("Can not create a module log domain.");
340 return 0;
341 }
342 /* store it for later use */
343 func = pfunc;
344 /* now to override methods */
345#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
346 ORD(info);
347 ORD(info_free);
348 ORD(setup);
349 ORD(canvas_alpha_get);
350 ORD(output_free);
351 ORD(output_resize);
352 ORD(output_tile_size_set);
353 ORD(output_redraws_rect_add);
354 ORD(output_redraws_rect_del);
355 ORD(output_redraws_clear);
356 ORD(output_redraws_next_update_get);
357 ORD(output_redraws_next_update_push);
358 ORD(output_flush);
359 ORD(output_idle_flush);
360 /* now advertise out own api */
361 em->functions = (void *)(&func);
362 return 1;
363}
364
365static void
366module_close(Evas_Module *em)
367{
368 eina_log_domain_unregister(_evas_engine_soft_gdi_log_dom);
369 _evas_engine_soft_gdi_log_dom = -1;
370}
371
372static Evas_Module_Api evas_modapi =
373{
374 EVAS_MODULE_API_VERSION,
375 "software_gdi",
376 "none",
377 {
378 module_open,
379 module_close
380 }
381};
382
383EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_gdi);
384
385#ifndef EVAS_STATIC_BUILD_SOFTWARE_GDI
386EVAS_EINA_MODULE_DEFINE(engine, software_gdi);
387#endif
diff --git a/libraries/evas/src/modules/engines/software_gdi/evas_engine.h b/libraries/evas/src/modules/engines/software_gdi/evas_engine.h
new file mode 100644
index 0000000..b8ddc85
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_gdi/evas_engine.h
@@ -0,0 +1,209 @@
1#ifndef EVAS_ENGINE_H
2#define EVAS_ENGINE_H
3
4
5#define WIN32_LEAN_AND_MEAN
6#include <windows.h>
7#undef WIN32_LEAN_AND_MEAN
8
9extern int _evas_engine_soft_gdi_log_dom;
10
11#ifdef ERR
12# undef ERR
13#endif
14#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_soft_gdi_log_dom, __VA_ARGS__)
15
16#ifdef DBG
17# undef DBG
18#endif
19#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_soft_gdi_log_dom, __VA_ARGS__)
20
21#ifdef INF
22# undef INF
23#endif
24#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_soft_gdi_log_dom, __VA_ARGS__)
25
26#ifdef WRN
27# undef WRN
28#endif
29#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_soft_gdi_log_dom, __VA_ARGS__)
30
31#ifdef CRIT
32# undef CRIT
33#endif
34#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_soft_gdi_log_dom, __VA_ARGS__)
35
36typedef enum _Outbuf_Depth Outbuf_Depth;
37
38enum _Outbuf_Depth
39{
40 OUTBUF_DEPTH_NONE,
41 OUTBUF_DEPTH_INHERIT,
42 OUTBUF_DEPTH_RGB_16BPP_565_565_DITHERED,
43 OUTBUF_DEPTH_RGB_32BPP_888_8888,
44 OUTBUF_DEPTH_LAST
45};
46
47typedef struct BITMAPINFO_GDI BITMAPINFO_GDI;
48typedef struct _Outbuf Outbuf;
49typedef struct _Outbuf_Region Outbuf_Region;
50typedef struct _Gdi_Output_Buffer Gdi_Output_Buffer;
51
52struct BITMAPINFO_GDI
53{
54 BITMAPINFOHEADER bih;
55 DWORD masks[3];
56};
57
58struct _Outbuf
59{
60 Outbuf_Depth depth;
61 int width;
62 int height;
63 int rot;
64 int onebuf;
65
66 struct {
67 Convert_Pal *pal;
68 struct {
69 BITMAPINFO_GDI *bitmap_info;
70 HWND window;
71 HDC dc;
72 HRGN regions;
73 int depth;
74 unsigned char borderless : 1;
75 unsigned char fullscreen : 1;
76 unsigned char region : 1;
77 } gdi;
78
79 /* 1 big buffer for updates - flush on idle_flush */
80 RGBA_Image *onebuf;
81 Eina_List *onebuf_regions;
82
83 /* a list of pending regions to write to the target */
84 Eina_List *pending_writes;
85 /* a list of previous frame pending regions to write to the target */
86 Eina_List *prev_pending_writes;
87
88 unsigned char mask_dither : 1;
89 unsigned char destination_alpha : 1;
90 unsigned char debug : 1;
91 unsigned char synced : 1;
92
93 unsigned char region_built : 1;
94 } priv;
95};
96
97struct _Outbuf_Region
98{
99 Gdi_Output_Buffer *gdiob;
100 int x;
101 int y;
102 int width;
103 int height;
104};
105
106struct _Gdi_Output_Buffer
107{
108 BITMAPINFO_GDI *bitmap_info;
109 HBITMAP bitmap;
110 HDC dc;
111 int width;
112 int height;
113 void *data;
114 int depth;
115 int pitch;
116 int psize;
117};
118
119/* evas_gdi_main.c */
120
121int evas_software_gdi_init (HWND window,
122 int depth,
123 unsigned int borderless,
124 unsigned int fullscreen,
125 unsigned int region,
126 Outbuf *buf);
127
128void evas_software_gdi_shutdown(Outbuf *buf);
129
130void evas_software_gdi_bitmap_resize(Outbuf *buf);
131
132/* evas_gdi_buffer.c */
133
134Gdi_Output_Buffer *evas_software_gdi_output_buffer_new(HDC dc,
135 BITMAPINFO_GDI *bitmap_info,
136 int depth,
137 int width,
138 int height,
139 void *data);
140
141void evas_software_gdi_output_buffer_free(Gdi_Output_Buffer *gdiob);
142
143void evas_software_gdi_output_buffer_paste(Gdi_Output_Buffer *gdiob,
144 int x,
145 int y);
146
147DATA8 *evas_software_gdi_output_buffer_data(Gdi_Output_Buffer *gdiob,
148 int *pitch);
149
150int evas_software_gdi_output_buffer_depth(Gdi_Output_Buffer *gdiob);
151
152/* evas_outbuf.c */
153
154void evas_software_gdi_outbuf_init(void);
155
156void evas_software_gdi_outbuf_free(Outbuf *buf);
157
158Outbuf *evas_software_gdi_outbuf_setup(int width,
159 int height,
160 int rotation,
161 Outbuf_Depth depth,
162 HWND window,
163 int w_depth,
164 unsigned int borderless,
165 unsigned int fullscreen,
166 unsigned int region,
167 int mask_dither,
168 int destination_alpha);
169
170void evas_software_gdi_outbuf_reconfigure(Outbuf *buf,
171 int width,
172 int height,
173 int rotation,
174 Outbuf_Depth depth);
175
176RGBA_Image *evas_software_gdi_outbuf_new_region_for_update(Outbuf *buf,
177 int x,
178 int y,
179 int w,
180 int h,
181 int *cx,
182 int *cy,
183 int *cw,
184 int *ch);
185
186void evas_software_gdi_outbuf_push_updated_region(Outbuf *buf,
187 RGBA_Image *update,
188 int x,
189 int y,
190 int w,
191 int h);
192
193void evas_software_gdi_outbuf_free_region_for_update(Outbuf *buf,
194 RGBA_Image *update);
195
196void evas_software_gdi_outbuf_flush(Outbuf *buf);
197
198void evas_software_gdi_outbuf_idle_flush(Outbuf *buf);
199
200int evas_software_gdi_outbuf_width_get(Outbuf *buf);
201
202int evas_software_gdi_outbuf_height_get(Outbuf *buf);
203
204Outbuf_Depth evas_software_gdi_outbuf_depth_get(Outbuf *buf);
205
206int evas_software_gdi_outbuf_rot_get(Outbuf *buf);
207
208
209#endif /* EVAS_ENGINE_H */
diff --git a/libraries/evas/src/modules/engines/software_gdi/evas_gdi_buffer.c b/libraries/evas/src/modules/engines/software_gdi/evas_gdi_buffer.c
new file mode 100644
index 0000000..66a5abf
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_gdi/evas_gdi_buffer.c
@@ -0,0 +1,88 @@
1#include <string.h>
2
3#include "evas_common.h"
4#include "evas_engine.h"
5
6Gdi_Output_Buffer *
7evas_software_gdi_output_buffer_new(HDC dc,
8 BITMAPINFO_GDI *bitmap_info,
9 int depth,
10 int width,
11 int height,
12 void *data)
13{
14 Gdi_Output_Buffer *gdiob;
15
16 gdiob = calloc(1, sizeof(Gdi_Output_Buffer));
17 if (!gdiob) return NULL;
18
19 if (!data)
20 {
21 bitmap_info->bih.biWidth = width;
22 bitmap_info->bih.biHeight = -height;
23 bitmap_info->bih.biSizeImage = (depth >> 3) * width * height;
24 gdiob->bitmap = CreateDIBSection(dc,
25 (const BITMAPINFO *)bitmap_info,
26 DIB_RGB_COLORS,
27 (void **)(&data),
28 NULL,
29 0);
30 if (!gdiob->bitmap)
31 {
32 free(gdiob);
33 return NULL;
34 }
35 }
36
37 gdiob->bitmap_info = bitmap_info;
38 gdiob->dc = dc;
39 gdiob->data = data;
40 gdiob->width = width;
41 gdiob->height = height;
42 gdiob->depth = depth;
43 gdiob->pitch = width * (depth >> 3);
44/* gdiob->psize = gdiob->pitch * height; */
45
46 return gdiob;
47}
48
49void
50evas_software_gdi_output_buffer_free(Gdi_Output_Buffer *gdiob)
51{
52 DeleteObject(gdiob->bitmap);
53 free(gdiob);
54}
55
56void
57evas_software_gdi_output_buffer_paste(Gdi_Output_Buffer *gdiob,
58 int x,
59 int y)
60{
61 HDC dc;
62
63 dc = CreateCompatibleDC(gdiob->dc);
64 if (!dc)
65 return;
66 SelectObject(dc, gdiob->bitmap);
67 BitBlt(gdiob->dc,
68 x, y,
69 gdiob->width, gdiob->height,
70 dc,
71 0, 0,
72 SRCCOPY);
73 DeleteDC(dc);
74}
75
76DATA8 *
77evas_software_gdi_output_buffer_data(Gdi_Output_Buffer *gdiob,
78 int *pitch)
79{
80 if (pitch) *pitch = gdiob->pitch;
81 return gdiob->data;
82}
83
84int
85evas_software_gdi_output_buffer_depth(Gdi_Output_Buffer *gdiob)
86{
87 return gdiob->depth;
88}
diff --git a/libraries/evas/src/modules/engines/software_gdi/evas_gdi_main.c b/libraries/evas/src/modules/engines/software_gdi/evas_gdi_main.c
new file mode 100644
index 0000000..4a63959
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_gdi/evas_gdi_main.c
@@ -0,0 +1,100 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4
5int
6evas_software_gdi_init (HWND window,
7 int depth,
8 unsigned int borderless,
9 unsigned int fullscreen __UNUSED__,
10 unsigned int region,
11 Outbuf *buf)
12{
13 if (!window)
14 {
15 ERR("[Engine] [GDI] Window is NULL");
16 return 0;
17 }
18
19 buf->priv.gdi.window = window;
20 buf->priv.gdi.dc = GetDC(window);
21 buf->priv.gdi.borderless = borderless;
22 buf->priv.gdi.region = region;
23 if (!buf->priv.gdi.dc)
24 {
25 ERR("[Engine] [GDI] Can not get DC");
26 return 0;
27 }
28
29 /* FIXME: check depth */
30 if (depth != GetDeviceCaps(buf->priv.gdi.dc, BITSPIXEL))
31 {
32 ERR("[Engine] [GDI] no compatible depth");
33 ReleaseDC(window, buf->priv.gdi.dc);
34 return 0;
35 }
36 buf->priv.gdi.depth = depth;
37
38 /* FIXME: support fullscreen */
39
40 buf->priv.gdi.bitmap_info = (BITMAPINFO_GDI *)malloc(sizeof(BITMAPINFO_GDI));
41 if (!buf->priv.gdi.bitmap_info)
42 {
43 ERR("[Engine] [GDI] Can not allocate bitmap info");
44 ReleaseDC(window, buf->priv.gdi.dc);
45 return 0;
46 }
47
48 buf->priv.gdi.bitmap_info->bih.biSize = sizeof(BITMAPINFOHEADER);
49 buf->priv.gdi.bitmap_info->bih.biWidth = buf->width;
50 buf->priv.gdi.bitmap_info->bih.biHeight = -buf->height;
51 buf->priv.gdi.bitmap_info->bih.biPlanes = 1;
52 buf->priv.gdi.bitmap_info->bih.biSizeImage = (buf->priv.gdi.depth >> 3) * buf->width * buf->height;
53 buf->priv.gdi.bitmap_info->bih.biXPelsPerMeter = 0;
54 buf->priv.gdi.bitmap_info->bih.biYPelsPerMeter = 0;
55 buf->priv.gdi.bitmap_info->bih.biClrUsed = 0;
56 buf->priv.gdi.bitmap_info->bih.biClrImportant = 0;
57 buf->priv.gdi.bitmap_info->bih.biBitCount = buf->priv.gdi.depth;
58 buf->priv.gdi.bitmap_info->bih.biCompression = BI_BITFIELDS;
59
60 switch (depth)
61 {
62 case 16:
63 buf->priv.gdi.bitmap_info->masks[0] = 0x0000f800;
64 buf->priv.gdi.bitmap_info->masks[1] = 0x000007e0;
65 buf->priv.gdi.bitmap_info->masks[2] = 0x0000001f;
66 break;
67 case 32:
68 buf->priv.gdi.bitmap_info->masks[0] = 0x00ff0000;
69 buf->priv.gdi.bitmap_info->masks[1] = 0x0000ff00;
70 buf->priv.gdi.bitmap_info->masks[2] = 0x000000ff;
71 break;
72 default:
73 ERR("[Engine] [GDI] wrong depth");
74 free(buf->priv.gdi.bitmap_info);
75 ReleaseDC(window, buf->priv.gdi.dc);
76 return 0;
77 }
78
79 return 1;
80}
81
82void
83evas_software_gdi_shutdown(Outbuf *buf)
84{
85 if (!buf)
86 return;
87
88 free(buf->priv.gdi.bitmap_info);
89 ReleaseDC(buf->priv.gdi.window, buf->priv.gdi.dc);
90 if (buf->priv.gdi.regions)
91 DeleteObject(buf->priv.gdi.regions);
92}
93
94void
95evas_software_gdi_bitmap_resize(Outbuf *buf)
96{
97 buf->priv.gdi.bitmap_info->bih.biWidth = buf->width;
98 buf->priv.gdi.bitmap_info->bih.biHeight = -buf->height;
99 buf->priv.gdi.bitmap_info->bih.biSizeImage = (buf->priv.gdi.depth >> 3) * buf->width * buf->height;
100}
diff --git a/libraries/evas/src/modules/engines/software_gdi/evas_outbuf.c b/libraries/evas/src/modules/engines/software_gdi/evas_outbuf.c
new file mode 100644
index 0000000..6841baa
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_gdi/evas_outbuf.c
@@ -0,0 +1,656 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4
5static Eina_List *gdipool = NULL;
6static int gdisize = 0;
7static int gdimemlimit = 10 * 1024 * 1024;
8static int gdicountlimit = 32;
9
10static Gdi_Output_Buffer *
11_find_gdiob(HDC dc, BITMAPINFO_GDI *bitmap_info, int depth, int w, int h, void *data)
12{
13 Eina_List *l = NULL;
14 Eina_List *gdil = NULL;
15 Gdi_Output_Buffer *gdiob = NULL;
16 Gdi_Output_Buffer *gdiob2;
17 int sz;
18 int lbytes;
19 int bpp;
20 int fitness = 0x7fffffff;
21
22 bpp = depth >> 3;
23 if (bpp == 3) bpp = 4;
24 lbytes = (((w * bpp) + 3) / 4) * 4;
25 sz = lbytes * h;
26 EINA_LIST_FOREACH(gdipool, l, gdiob2)
27 {
28 int szdif;
29
30 if ((gdiob2->dc != dc) ||
31 (gdiob2->bitmap_info != bitmap_info) ||
32 (gdiob2->depth != depth))
33 continue;
34 szdif = gdiob2->psize - sz;
35 if (szdif < 0) continue;
36 if (szdif == 0)
37 {
38 gdiob = gdiob2;
39 gdil = l;
40 goto have_gdiob;
41 }
42 if (szdif < fitness)
43 {
44 fitness = szdif;
45 gdiob = gdiob2;
46 gdil = l;
47 }
48 }
49 if ((fitness > (100 * 100)) || (!gdiob))
50 return evas_software_gdi_output_buffer_new(dc, bitmap_info, depth, w, h, data);
51
52 have_gdiob:
53 gdipool = eina_list_remove_list(gdipool, gdil);
54 gdiob->width = w;
55 gdiob->height = h;
56 gdiob->pitch = lbytes;
57 gdisize -= gdiob->psize * (gdiob->depth >> 3);
58
59 return gdiob;
60}
61
62static void
63_unfind_gdiob(Gdi_Output_Buffer *gdiob)
64{
65 gdipool = eina_list_prepend(gdipool, gdiob);
66 gdisize += gdiob->psize * (gdiob->depth >> 3);
67 while ((gdisize > (gdimemlimit)) ||
68 (eina_list_count(gdipool) > gdicountlimit))
69 {
70 Eina_List *xl;
71
72 xl = eina_list_last(gdipool);
73 if (!xl)
74 {
75 gdisize = 0;
76 break;
77 }
78 gdiob = xl->data;
79 gdipool = eina_list_remove_list(gdipool, xl);
80 evas_software_gdi_output_buffer_free(gdiob);
81 }
82}
83
84static void
85_clear_gdiob()
86{
87 while (gdipool)
88 {
89 Gdi_Output_Buffer *gdiob;
90
91 gdiob = gdipool->data;
92 gdipool = eina_list_remove_list(gdipool, gdipool);
93 evas_software_gdi_output_buffer_free(gdiob);
94 }
95 gdisize = 0;
96}
97
98void
99evas_software_gdi_outbuf_init(void)
100{
101}
102
103void
104evas_software_gdi_outbuf_free(Outbuf *buf)
105{
106 if (!buf)
107 return;
108
109 while (buf->priv.pending_writes)
110 {
111 RGBA_Image *im;
112 Outbuf_Region *obr;
113
114 im = buf->priv.pending_writes->data;
115 buf->priv.pending_writes = eina_list_remove_list(buf->priv.pending_writes, buf->priv.pending_writes);
116 obr = im->extended_info;
117 evas_cache_image_drop(&im->cache_entry);
118 if (obr->gdiob) _unfind_gdiob(obr->gdiob);
119/* if (obr->mxob) _unfind_xob(obr->mxob, 0); */
120 free(obr);
121 }
122 evas_software_gdi_outbuf_idle_flush(buf);
123 evas_software_gdi_outbuf_flush(buf);
124
125 evas_software_gdi_shutdown(buf);
126 free(buf);
127}
128
129Outbuf *
130evas_software_gdi_outbuf_setup(int width,
131 int height,
132 int rotation,
133 Outbuf_Depth depth,
134 HWND window,
135 int w_depth,
136 unsigned int borderless,
137 unsigned int fullscreen,
138 unsigned int region,
139 int mask_dither,
140 int destination_alpha)
141{
142 Outbuf *buf;
143
144 buf = (Outbuf *)calloc(1, sizeof(Outbuf));
145 if (!buf)
146 return NULL;
147
148 buf->width = width;
149 buf->height = height;
150 buf->depth = depth;
151 buf->rot = rotation;
152
153 buf->priv.mask_dither = mask_dither;
154 buf->priv.destination_alpha = destination_alpha;
155
156 if (!evas_software_gdi_init(window, w_depth, borderless, fullscreen, region, buf))
157 {
158 free(buf);
159 return NULL;
160 }
161
162 {
163 Gfx_Func_Convert conv_func;
164 Gdi_Output_Buffer *gdiob;
165
166 gdiob = evas_software_gdi_output_buffer_new(buf->priv.gdi.dc, buf->priv.gdi.bitmap_info, w_depth, 1, 1, NULL);
167
168 conv_func = NULL;
169 if (gdiob)
170 {
171 if ((rotation == 0) || (rotation == 180))
172 conv_func = evas_common_convert_func_get(0,
173 width,
174 height,
175 evas_software_gdi_output_buffer_depth (gdiob),
176 buf->priv.gdi.bitmap_info->masks[0],
177 buf->priv.gdi.bitmap_info->masks[1],
178 buf->priv.gdi.bitmap_info->masks[2],
179 PAL_MODE_NONE,
180 rotation);
181 else if ((rotation == 90) || (rotation == 270))
182 conv_func = evas_common_convert_func_get(0,
183 height,
184 width,
185 evas_software_gdi_output_buffer_depth (gdiob),
186 buf->priv.gdi.bitmap_info->masks[0],
187 buf->priv.gdi.bitmap_info->masks[1],
188 buf->priv.gdi.bitmap_info->masks[2],
189 PAL_MODE_NONE,
190 rotation);
191
192 evas_software_gdi_output_buffer_free(gdiob);
193
194 if (!conv_func)
195 {
196 ERR(".[ soft_gdi engine Error ]."
197 " {"
198 " At depth %i:"
199 " RGB format mask: %08lx, %08lx, %08lx"
200 " Not supported by and compiled in converters!"
201 " }",
202 buf->priv.gdi.depth,
203 buf->priv.gdi.bitmap_info->masks[0],
204 buf->priv.gdi.bitmap_info->masks[1],
205 buf->priv.gdi.bitmap_info->masks[2]);
206 }
207 }
208 }
209
210 return buf;
211}
212
213void
214evas_software_gdi_outbuf_reconfigure(Outbuf *buf,
215 int width,
216 int height,
217 int rotation,
218 Outbuf_Depth depth)
219{
220 if ((width == buf->width) && (height == buf->height) &&
221 (rotation == buf->rot) && (depth == buf->depth))
222 return;
223 buf->width = width;
224 buf->height = height;
225 buf->rot = rotation;
226 evas_software_gdi_bitmap_resize(buf);
227 buf->priv.region_built = 0;
228}
229
230RGBA_Image *
231evas_software_gdi_outbuf_new_region_for_update(Outbuf *buf,
232 int x,
233 int y,
234 int w,
235 int h,
236 int *cx,
237 int *cy,
238 int *cw,
239 int *ch)
240{
241 RGBA_Image *im;
242 Outbuf_Region *obr;
243 int bpl = 0;
244 int alpha = 0;
245
246 obr = calloc(1, sizeof(Outbuf_Region));
247 obr->x = x;
248 obr->y = y;
249 obr->width = w;
250 obr->height = h;
251 *cx = 0;
252 *cy = 0;
253 *cw = w;
254 *ch = h;
255
256 alpha = ((buf->priv.gdi.region) || (buf->priv.destination_alpha));
257
258 if ((buf->rot == 0) &&
259 (buf->priv.gdi.bitmap_info->masks[0] == 0xff0000) &&
260 (buf->priv.gdi.bitmap_info->masks[1] == 0x00ff00) &&
261 (buf->priv.gdi.bitmap_info->masks[2] == 0x0000ff))
262 {
263 obr->gdiob = _find_gdiob(buf->priv.gdi.dc,
264 buf->priv.gdi.bitmap_info,
265 buf->priv.gdi.depth,
266 w, h, NULL);
267/* obr->gdiob = evas_software_gdi_output_buffer_new(buf->priv.gdi.dc, */
268/* buf->priv.gdi.bitmap_info, */
269/* buf->priv.gdi.depth, */
270/* w, h, */
271/* NULL); */
272 im = (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
273 w, h,
274 (DATA32 *)evas_software_gdi_output_buffer_data(obr->gdiob, &bpl),
275 alpha, EVAS_COLORSPACE_ARGB8888);
276 im->extended_info = obr;
277/* if (buf->priv.gdi.mask) */
278/* obr->mgdiob = _find_gdiob(buf->priv.gdi.dc, */
279/* buf->priv.gdi.bitmap_info, */
280/* 1, */
281/* w, h, NULL); */
282 }
283 else
284 {
285 im = (RGBA_Image *) evas_cache_image_empty(evas_common_image_cache_get());
286 im->cache_entry.flags.alpha |= alpha ? 1 : 0;
287 evas_cache_image_surface_alloc(&im->cache_entry, w, h);
288 im->extended_info = obr;
289 if ((buf->rot == 0) || (buf->rot == 180))
290 obr->gdiob = _find_gdiob(buf->priv.gdi.dc,
291 buf->priv.gdi.bitmap_info,
292 buf->priv.gdi.depth,
293 w, h, NULL);
294/*
295 obr->gdiob = evas_software_x11_x_output_buffer_new(buf->priv.dd.disp,
296 buf->priv.dd.vis,
297 buf->priv.dd.depth,
298 w, h,
299 use_shm,
300 NULL);
301 */
302 else if ((buf->rot == 90) || (buf->rot == 270))
303 obr->gdiob = _find_gdiob(buf->priv.gdi.dc,
304 buf->priv.gdi.bitmap_info,
305 buf->priv.gdi.depth,
306 h, w, NULL);
307/*
308 obr->gdiob = evas_software_x11_x_output_buffer_new(buf->priv.dd.disp,
309 buf->priv.dd.vis,
310 buf->priv.dd.depth,
311 h, w,
312 use_shm,
313 NULL);
314 */
315/* if (buf->priv.gdi.mask) */
316/* obr->mgdiob = _find_gdiob(buf->priv.gdi.dc, */
317/* buf->priv.gdi.bitmap_info, */
318/* 1, */
319/* w, h, NULL); */
320 }
321 if ((buf->priv.gdi.region) || (buf->priv.destination_alpha))
322 /* FIXME: faster memset! */
323 memset(im->image.data, 0, w * h * sizeof(DATA32));
324
325 buf->priv.pending_writes = eina_list_append(buf->priv.pending_writes, im);
326 return im;
327}
328
329void
330evas_software_gdi_outbuf_push_updated_region(Outbuf *buf,
331 RGBA_Image *update,
332 int x,
333 int y,
334 int w,
335 int h)
336{
337 HRGN regions = NULL;
338 Gfx_Func_Convert conv_func;
339 Outbuf_Region *obr;
340 DATA32 *src_data;
341 void *data;
342 int bpl = 0;
343
344 conv_func = NULL;
345 obr = update->extended_info;
346
347 if ((buf->rot == 0) || (buf->rot == 180))
348 conv_func = evas_common_convert_func_get(0, w, h,
349 evas_software_gdi_output_buffer_depth(obr->gdiob),
350 buf->priv.gdi.bitmap_info->masks[0],
351 buf->priv.gdi.bitmap_info->masks[1],
352 buf->priv.gdi.bitmap_info->masks[2],
353 PAL_MODE_NONE,
354 buf->rot);
355 else if ((buf->rot == 90) || (buf->rot == 270))
356 conv_func = evas_common_convert_func_get(0, h, w,
357 evas_software_gdi_output_buffer_depth(obr->gdiob),
358 buf->priv.gdi.bitmap_info->masks[0],
359 buf->priv.gdi.bitmap_info->masks[1],
360 buf->priv.gdi.bitmap_info->masks[2],
361 PAL_MODE_NONE,
362 buf->rot);
363 if (!conv_func) return;
364
365 data = evas_software_gdi_output_buffer_data(obr->gdiob, &bpl);
366 src_data = update->image.data;
367 if (buf->rot == 0)
368 {
369 obr->x = x;
370 obr->y = y;
371 }
372 else if (buf->rot == 90)
373 {
374 obr->x = y;
375 obr->y = buf->width - x - w;
376 }
377 else if (buf->rot == 180)
378 {
379 obr->x = buf->width - x - w;
380 obr->y = buf->height - y - h;
381 }
382 else if (buf->rot == 270)
383 {
384 obr->x = buf->height - y - h;
385 obr->y = x;
386 }
387 if ((buf->rot == 0) || (buf->rot == 180))
388 {
389 obr->width = w;
390 obr->height = h;
391 }
392 else if ((buf->rot == 90) || (buf->rot == 270))
393 {
394 obr->width = h;
395 obr->height = w;
396 }
397
398 if (data != src_data)
399 conv_func(src_data, data,
400 0,
401 bpl / (evas_software_gdi_output_buffer_depth(obr->gdiob) >> 3) - obr->width,
402 obr->width,
403 obr->height,
404 x,
405 y,
406 NULL);
407
408 /* Region code */
409 if (!buf->priv.gdi.region)
410 {
411 if (buf->priv.gdi.regions)
412 DeleteObject(buf->priv.gdi.regions);
413 buf->priv.gdi.regions = NULL;
414 SetWindowRgn(buf->priv.gdi.window, NULL, 1);
415 return;
416 }
417
418 if (!buf->priv.region_built)
419 {
420 RECT rect;
421 POINT pt = { 0, 0 };
422 HRGN region;
423 int *tmp;
424 int i;
425 int j;
426 int ww;
427 int wh;
428 int dx;
429 int dy;
430 int xmin;
431 int xmax;
432
433 if (!GetClientRect(buf->priv.gdi.window, &rect))
434 return;
435
436 ww = rect.right - rect.left;
437 wh = rect.bottom - rect.top;
438
439 if (!GetWindowRect(buf->priv.gdi.window, &rect))
440 return;
441 if (!ClientToScreen(buf->priv.gdi.window, &pt))
442 return;
443 dx = x + pt.x - rect.left;
444 dy = y + pt.y - rect.top;
445
446 tmp = src_data;
447
448 for (j = 0; j < h; j++)
449 {
450 i = 0;
451 while (i < w)
452 {
453 if ((*tmp & 0xff000000) == 0xff000000)
454 {
455 xmin = dx + i;
456 if ((i + 1) == w)
457 {
458 xmax = dx + i;
459 region = CreateRectRgn(xmin, dy + j, xmax + 1, dy + j + 1);
460 if (regions == NULL)
461 regions = region;
462 else
463 {
464 CombineRgn(regions, regions, region, RGN_OR);
465 DeleteObject(region);
466 }
467 }
468 else
469 {
470 i++;
471 tmp++;
472
473 while (i < w)
474 {
475 if ((*tmp & 0xff000000) == 0xff000000)
476 {
477 if ((i + 1) == w)
478 {
479 xmax = dx + i;
480 region = CreateRectRgn(xmin, dy + j, xmax + 1, dy + j + 1);
481 if (regions == NULL)
482 regions = region;
483 else
484 {
485 CombineRgn(regions, regions, region, RGN_OR);
486 DeleteObject(region);
487 }
488 break;
489 }
490 }
491 else
492 {
493 xmax = dx + i - 1;
494 region = CreateRectRgn(xmin, dy + j, xmax + 1, dy + j + 1);
495 if (regions == NULL)
496 regions = region;
497 else
498 {
499 CombineRgn(regions, regions, region, RGN_OR);
500 DeleteObject(region);
501 }
502 break;
503 }
504 i++;
505 tmp++;
506 }
507 }
508 }
509 i++;
510 tmp++;
511 }
512 }
513
514 if (!buf->priv.gdi.borderless)
515 {
516 RECT rnc;
517 RECT rc;
518 POINT pt = { 0, 0 };
519 LONG ncw;
520 LONG nch;
521 LONG cw;
522 LONG ch;
523
524 if (!GetWindowRect(buf->priv.gdi.window, &rnc))
525 return;
526 if (!GetClientRect(buf->priv.gdi.window, &rc))
527 return;
528 if (!ClientToScreen(buf->priv.gdi.window, &pt))
529 return;
530
531 ncw = rnc.right - rnc.left;
532 nch = rnc.bottom - rnc.top;
533 cw = rc.right - rc.left;
534 ch = rc.bottom - rc.top;
535
536 region = CreateRectRgn(0, 0, ncw, pt.y - rnc.top);
537 if (!regions)
538 regions = region;
539 else
540 {
541 CombineRgn(regions, regions, region, RGN_OR);
542 DeleteObject(region);
543 }
544 region = CreateRectRgn(0, pt.y - rnc.top, pt.x - rnc.left, nch);
545 CombineRgn(regions, regions, region, RGN_OR);
546 DeleteObject(region);
547 region = CreateRectRgn(pt.x - rnc.left, pt.y - rnc.top + ch, pt.x - rnc.left + cw, nch);
548 CombineRgn(regions, regions, region, RGN_OR);
549 DeleteObject(region);
550 region = CreateRectRgn(pt.x - rnc.left + cw, pt.y - rnc.top, ncw, nch);
551 CombineRgn(regions, regions, region, RGN_OR);
552 DeleteObject(region);
553 }
554
555 if (regions)
556 SetWindowRgn(buf->priv.gdi.window, regions, 1);
557 buf->priv.gdi.regions = regions;
558
559 buf->priv.region_built = 1;
560 }
561}
562
563void
564evas_software_gdi_outbuf_free_region_for_update(Outbuf *buf __UNUSED__,
565 RGBA_Image *update __UNUSED__)
566{
567 /* no need to do anything - they are cleaned up on flush */
568}
569
570void
571evas_software_gdi_outbuf_flush(Outbuf *buf)
572{
573 Eina_List *l;
574 RGBA_Image *im;
575 Outbuf_Region *obr;
576
577 /* copy safely the images that need to be drawn onto the back surface */
578 EINA_LIST_FOREACH(buf->priv.pending_writes, l, im)
579 {
580 Gdi_Output_Buffer *gdiob;
581
582 obr = im->extended_info;
583 gdiob = obr->gdiob;
584 evas_software_gdi_output_buffer_paste(gdiob,
585 obr->x,
586 obr->y);
587/* if (obr->mgdiob) */
588/* evas_software_gdi_output_buffer_paste(obr->mgdiob, */
589/* buf->priv.x11.xlib.mask, */
590/* buf->priv.x11.xlib.gcm, */
591/* obr->x, obr->y, 0); */
592 }
593
594 while (buf->priv.prev_pending_writes)
595 {
596 im = buf->priv.prev_pending_writes->data;
597 buf->priv.prev_pending_writes =
598 eina_list_remove_list(buf->priv.prev_pending_writes,
599 buf->priv.prev_pending_writes);
600 obr = im->extended_info;
601 evas_cache_image_drop(&im->cache_entry);
602 if (obr->gdiob) _unfind_gdiob(obr->gdiob);
603/* if (obr->mgdiob) _unfind_gdiob(obr->mgdiob); */
604/* if (obr->gdiob) evas_software_x11_x_output_buffer_free(obr->gdiob); */
605 free(obr);
606 }
607 buf->priv.prev_pending_writes = buf->priv.pending_writes;
608 buf->priv.pending_writes = NULL;
609
610 evas_common_cpu_end_opt();
611}
612
613void
614evas_software_gdi_outbuf_idle_flush(Outbuf *buf)
615{
616 while (buf->priv.prev_pending_writes)
617 {
618 RGBA_Image *im;
619 Outbuf_Region *obr;
620
621 im = buf->priv.prev_pending_writes->data;
622 buf->priv.prev_pending_writes =
623 eina_list_remove_list(buf->priv.prev_pending_writes,
624 buf->priv.prev_pending_writes);
625 obr = im->extended_info;
626 evas_cache_image_drop((Image_Entry *)im);
627 if (obr->gdiob) _unfind_gdiob(obr->gdiob);
628/* if (obr->mxob) _unfind_xob(obr->mxob, 0); */
629 free(obr);
630 }
631 _clear_gdiob();
632}
633
634int
635evas_software_gdi_outbuf_width_get(Outbuf *buf)
636{
637 return buf->width;
638}
639
640int
641evas_software_gdi_outbuf_height_get(Outbuf *buf)
642{
643 return buf->height;
644}
645
646Outbuf_Depth
647evas_software_gdi_outbuf_depth_get(Outbuf *buf)
648{
649 return buf->depth;
650}
651
652int
653evas_software_gdi_outbuf_rot_get(Outbuf *buf)
654{
655 return buf->rot;
656}
diff --git a/libraries/evas/src/modules/engines/software_generic/Makefile.am b/libraries/evas/src/modules/engines/software_generic/Makefile.am
new file mode 100644
index 0000000..d7986f1
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_generic/Makefile.am
@@ -0,0 +1,35 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9@EINA_CFLAGS@ \
10@FREETYPE_CFLAGS@ \
11@PIXMAN_CFLAGS@
12
13AM_CFLAGS = @WIN32_CFLAGS@
14
15SOFTWARE_GENERIC_SOURCES = evas_engine.c
16
17
18if !EVAS_STATIC_BUILD_SOFTWARE_GENERIC
19
20pkgdir = $(libdir)/evas/modules/engines/software_generic/$(MODULE_ARCH)
21pkg_LTLIBRARIES = module.la
22
23module_la_SOURCES = $(SOFTWARE_GENERIC_SOURCES)
24
25module_la_LIBADD = @EINA_LIBS@ $(top_builddir)/src/lib/libevas.la
26module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
27module_la_LIBTOOLFLAGS = --tag=disable-static
28
29else
30
31noinst_LTLIBRARIES = libevas_engine_software_generic.la
32
33libevas_engine_software_generic_la_SOURCES = $(SOFTWARE_GENERIC_SOURCES)
34
35endif
diff --git a/libraries/evas/src/modules/engines/software_generic/Makefile.in b/libraries/evas/src/modules/engines/software_generic/Makefile.in
new file mode 100644
index 0000000..6d75f23
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_generic/Makefile.in
@@ -0,0 +1,763 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/modules/engines/software_generic
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_coverage.m4 \
42 $(top_srcdir)/m4/efl_doxygen.m4 \
43 $(top_srcdir)/m4/efl_fnmatch.m4 \
44 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
45 $(top_srcdir)/m4/evas_check_engine.m4 \
46 $(top_srcdir)/m4/evas_check_loader.m4 \
47 $(top_srcdir)/m4/evas_converter.m4 \
48 $(top_srcdir)/m4/evas_dither.m4 \
49 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
50 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
51 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
52 $(top_srcdir)/configure.ac
53am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
54 $(ACLOCAL_M4)
55mkinstalldirs = $(install_sh) -d
56CONFIG_HEADER = $(top_builddir)/config.h
57CONFIG_CLEAN_FILES =
58CONFIG_CLEAN_VPATH_FILES =
59am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
60am__vpath_adj = case $$p in \
61 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
62 *) f=$$p;; \
63 esac;
64am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
65am__install_max = 40
66am__nobase_strip_setup = \
67 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
68am__nobase_strip = \
69 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
70am__nobase_list = $(am__nobase_strip_setup); \
71 for p in $$list; do echo "$$p $$p"; done | \
72 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
73 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
74 if (++n[$$2] == $(am__install_max)) \
75 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
76 END { for (dir in files) print dir, files[dir] }'
77am__base_list = \
78 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
79 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
80am__installdirs = "$(DESTDIR)$(pkgdir)"
81LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
82libevas_engine_software_generic_la_LIBADD =
83am__libevas_engine_software_generic_la_SOURCES_DIST = evas_engine.c
84am__objects_1 = evas_engine.lo
85@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_TRUE@am_libevas_engine_software_generic_la_OBJECTS = \
86@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_TRUE@ $(am__objects_1)
87libevas_engine_software_generic_la_OBJECTS = \
88 $(am_libevas_engine_software_generic_la_OBJECTS)
89AM_V_lt = $(am__v_lt_$(V))
90am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
91am__v_lt_0 = --silent
92@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_TRUE@am_libevas_engine_software_generic_la_rpath =
93@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la
94am__module_la_SOURCES_DIST = evas_engine.c
95am__objects_2 = module_la-evas_engine.lo
96@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@am_module_la_OBJECTS = \
97@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@ $(am__objects_2)
98module_la_OBJECTS = $(am_module_la_OBJECTS)
99module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
100 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
101 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
102@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@am_module_la_rpath = -rpath \
103@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@ $(pkgdir)
104DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
105depcomp = $(SHELL) $(top_srcdir)/depcomp
106am__depfiles_maybe = depfiles
107am__mv = mv -f
108COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
109 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
110LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
111 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
112 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
113 $(AM_CFLAGS) $(CFLAGS)
114AM_V_CC = $(am__v_CC_$(V))
115am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
116am__v_CC_0 = @echo " CC " $@;
117AM_V_at = $(am__v_at_$(V))
118am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
119am__v_at_0 = @
120CCLD = $(CC)
121LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
122 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
123 $(AM_LDFLAGS) $(LDFLAGS) -o $@
124AM_V_CCLD = $(am__v_CCLD_$(V))
125am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
126am__v_CCLD_0 = @echo " CCLD " $@;
127AM_V_GEN = $(am__v_GEN_$(V))
128am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
129am__v_GEN_0 = @echo " GEN " $@;
130SOURCES = $(libevas_engine_software_generic_la_SOURCES) \
131 $(module_la_SOURCES)
132DIST_SOURCES = $(am__libevas_engine_software_generic_la_SOURCES_DIST) \
133 $(am__module_la_SOURCES_DIST)
134ETAGS = etags
135CTAGS = ctags
136DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
137ACLOCAL = @ACLOCAL@
138ALLOCA = @ALLOCA@
139AMTAR = @AMTAR@
140AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
141AR = @AR@
142AS = @AS@
143AUTOCONF = @AUTOCONF@
144AUTOHEADER = @AUTOHEADER@
145AUTOMAKE = @AUTOMAKE@
146AWK = @AWK@
147CC = @CC@
148CCDEPMODE = @CCDEPMODE@
149CFLAGS = @CFLAGS@
150CHECK_CFLAGS = @CHECK_CFLAGS@
151CHECK_LIBS = @CHECK_LIBS@
152CPP = @CPP@
153CPPFLAGS = @CPPFLAGS@
154CXX = @CXX@
155CXXCPP = @CXXCPP@
156CXXDEPMODE = @CXXDEPMODE@
157CXXFLAGS = @CXXFLAGS@
158CYGPATH_W = @CYGPATH_W@
159DEFS = @DEFS@
160DEPDIR = @DEPDIR@
161DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
162DIRECTFB_LIBS = @DIRECTFB_LIBS@
163DLLTOOL = @DLLTOOL@
164DSYMUTIL = @DSYMUTIL@
165DUMPBIN = @DUMPBIN@
166ECHO_C = @ECHO_C@
167ECHO_N = @ECHO_N@
168ECHO_T = @ECHO_T@
169ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
170ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
171EDB_CFLAGS = @EDB_CFLAGS@
172EDB_LIBS = @EDB_LIBS@
173EDJE_CFLAGS = @EDJE_CFLAGS@
174EDJE_LIBS = @EDJE_LIBS@
175EET_CFLAGS = @EET_CFLAGS@
176EET_LIBS = @EET_LIBS@
177EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
178EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
179EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
180EGREP = @EGREP@
181EINA_CFLAGS = @EINA_CFLAGS@
182EINA_LIBS = @EINA_LIBS@
183EVAS_CFLAGS = @EVAS_CFLAGS@
184EVAS_LIBS = @EVAS_LIBS@
185EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
186EVIL_CFLAGS = @EVIL_CFLAGS@
187EVIL_LIBS = @EVIL_LIBS@
188EXEEXT = @EXEEXT@
189FGREP = @FGREP@
190FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
191FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
192FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
193FREETYPE_LIBS = @FREETYPE_LIBS@
194FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
195FRIBIDI_LIBS = @FRIBIDI_LIBS@
196GL_EET_CFLAGS = @GL_EET_CFLAGS@
197GL_EET_LIBS = @GL_EET_LIBS@
198GREP = @GREP@
199HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
200HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
201INSTALL = @INSTALL@
202INSTALL_DATA = @INSTALL_DATA@
203INSTALL_PROGRAM = @INSTALL_PROGRAM@
204INSTALL_SCRIPT = @INSTALL_SCRIPT@
205INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
206LD = @LD@
207LDFLAGS = @LDFLAGS@
208LIBOBJS = @LIBOBJS@
209LIBS = @LIBS@
210LIBTOOL = @LIBTOOL@
211LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
212LINEBREAK_LIBS = @LINEBREAK_LIBS@
213LIPO = @LIPO@
214LN_S = @LN_S@
215LTLIBOBJS = @LTLIBOBJS@
216MAKEINFO = @MAKEINFO@
217MKDIR_P = @MKDIR_P@
218MODULE_ARCH = @MODULE_ARCH@
219NM = @NM@
220NMEDIT = @NMEDIT@
221OBJC = @OBJC@
222OBJCDEPMODE = @OBJCDEPMODE@
223OBJCFLAGS = @OBJCFLAGS@
224OBJDUMP = @OBJDUMP@
225OBJEXT = @OBJEXT@
226OTOOL = @OTOOL@
227OTOOL64 = @OTOOL64@
228PACKAGE = @PACKAGE@
229PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
230PACKAGE_NAME = @PACKAGE_NAME@
231PACKAGE_STRING = @PACKAGE_STRING@
232PACKAGE_TARNAME = @PACKAGE_TARNAME@
233PACKAGE_URL = @PACKAGE_URL@
234PACKAGE_VERSION = @PACKAGE_VERSION@
235PATH_SEPARATOR = @PATH_SEPARATOR@
236PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
237PIXMAN_LIBS = @PIXMAN_LIBS@
238PKG_CONFIG = @PKG_CONFIG@
239PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
240PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
241PNG_CFLAGS = @PNG_CFLAGS@
242PNG_LIBS = @PNG_LIBS@
243RANLIB = @RANLIB@
244SDL_CFLAGS = @SDL_CFLAGS@
245SDL_LIBS = @SDL_LIBS@
246SED = @SED@
247SET_MAKE = @SET_MAKE@
248SHELL = @SHELL@
249SHM_OPEN_LINK = @SHM_OPEN_LINK@
250STRIP = @STRIP@
251SVG_CFLAGS = @SVG_CFLAGS@
252SVG_LIBS = @SVG_LIBS@
253VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
254VALGRIND_LIBS = @VALGRIND_LIBS@
255VERSION = @VERSION@
256VMAJ = @VMAJ@
257WIN32_CFLAGS = @WIN32_CFLAGS@
258WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
259XCB_CFLAGS = @XCB_CFLAGS@
260XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
261XCB_GL_LIBS = @XCB_GL_LIBS@
262XCB_LIBS = @XCB_LIBS@
263XEXT_CFLAGS = @XEXT_CFLAGS@
264XEXT_LIBS = @XEXT_LIBS@
265XMKMF = @XMKMF@
266X_CFLAGS = @X_CFLAGS@
267X_EXTRA_LIBS = @X_EXTRA_LIBS@
268X_LIBS = @X_LIBS@
269X_PRE_LIBS = @X_PRE_LIBS@
270abs_builddir = @abs_builddir@
271abs_srcdir = @abs_srcdir@
272abs_top_builddir = @abs_top_builddir@
273abs_top_srcdir = @abs_top_srcdir@
274ac_ct_CC = @ac_ct_CC@
275ac_ct_CXX = @ac_ct_CXX@
276ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
277ac_ct_OBJC = @ac_ct_OBJC@
278altivec_cflags = @altivec_cflags@
279am__include = @am__include@
280am__leading_dot = @am__leading_dot@
281am__quote = @am__quote@
282am__tar = @am__tar@
283am__untar = @am__untar@
284bindir = @bindir@
285build = @build@
286build_alias = @build_alias@
287build_cpu = @build_cpu@
288build_os = @build_os@
289build_vendor = @build_vendor@
290builddir = @builddir@
291datadir = @datadir@
292datarootdir = @datarootdir@
293dlopen_libs = @dlopen_libs@
294docdir = @docdir@
295dvidir = @dvidir@
296edje_cc = @edje_cc@
297efl_doxygen = @efl_doxygen@
298efl_have_doxygen = @efl_have_doxygen@
299evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
300evas_engine_buffer_libs = @evas_engine_buffer_libs@
301evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
302evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
303evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
304evas_engine_directfb_libs = @evas_engine_directfb_libs@
305evas_engine_fb_cflags = @evas_engine_fb_cflags@
306evas_engine_fb_libs = @evas_engine_fb_libs@
307evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
308evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
309evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
310evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
311evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
312evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
313evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
314evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
315evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
316evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
317evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
318evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
319evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
320evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
321evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
322evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
323evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
324evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
325evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
326evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
327evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
328evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
329evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
330evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
331evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
332evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
333evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
334evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
335evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
336evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
337evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
338evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
339evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
340evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
341evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
342evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
343evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
344evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
345evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
346evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
347evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
348evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
349evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
350evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
351evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
352evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
353evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
354evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
355evas_image_loader_png_libs = @evas_image_loader_png_libs@
356evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
357evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
358evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
359evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
360evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
361evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
362evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
363evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
364evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
365evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
366evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
367evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
368exec_prefix = @exec_prefix@
369have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
370have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
371have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
372have_evas_engine_software_x11 = @have_evas_engine_software_x11@
373have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
374have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
375have_lcov = @have_lcov@
376host = @host@
377host_alias = @host_alias@
378host_cpu = @host_cpu@
379host_os = @host_os@
380host_vendor = @host_vendor@
381htmldir = @htmldir@
382includedir = @includedir@
383infodir = @infodir@
384install_sh = @install_sh@
385libdir = @libdir@
386libexecdir = @libexecdir@
387localedir = @localedir@
388localstatedir = @localstatedir@
389lt_ECHO = @lt_ECHO@
390lt_enable_auto_import = @lt_enable_auto_import@
391mandir = @mandir@
392mkdir_p = @mkdir_p@
393oldincludedir = @oldincludedir@
394pdfdir = @pdfdir@
395pkgconfig_requires_private = @pkgconfig_requires_private@
396prefix = @prefix@
397program_transform_name = @program_transform_name@
398psdir = @psdir@
399pthread_cflags = @pthread_cflags@
400pthread_libs = @pthread_libs@
401release_info = @release_info@
402requirement_evas = @requirement_evas@
403sbindir = @sbindir@
404sharedstatedir = @sharedstatedir@
405srcdir = @srcdir@
406sysconfdir = @sysconfdir@
407target_alias = @target_alias@
408top_build_prefix = @top_build_prefix@
409top_builddir = @top_builddir@
410top_srcdir = @top_srcdir@
411version_info = @version_info@
412MAINTAINERCLEANFILES = Makefile.in
413AM_CPPFLAGS = \
414-I. \
415-I$(top_srcdir)/src/lib \
416-I$(top_srcdir)/src/lib/include \
417-I$(top_srcdir)/src/modules/engines \
418@EINA_CFLAGS@ \
419@FREETYPE_CFLAGS@ \
420@PIXMAN_CFLAGS@
421
422AM_CFLAGS = @WIN32_CFLAGS@
423SOFTWARE_GENERIC_SOURCES = evas_engine.c
424@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_generic/$(MODULE_ARCH)
425@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@pkg_LTLIBRARIES = module.la
426@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@module_la_SOURCES = $(SOFTWARE_GENERIC_SOURCES)
427@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@module_la_LIBADD = @EINA_LIBS@ $(top_builddir)/src/lib/libevas.la
428@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
429@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
430@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_TRUE@noinst_LTLIBRARIES = libevas_engine_software_generic.la
431@EVAS_STATIC_BUILD_SOFTWARE_GENERIC_TRUE@libevas_engine_software_generic_la_SOURCES = $(SOFTWARE_GENERIC_SOURCES)
432all: all-am
433
434.SUFFIXES:
435.SUFFIXES: .c .lo .o .obj
436$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
437 @for dep in $?; do \
438 case '$(am__configure_deps)' in \
439 *$$dep*) \
440 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
441 && { if test -f $@; then exit 0; else break; fi; }; \
442 exit 1;; \
443 esac; \
444 done; \
445 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_generic/Makefile'; \
446 $(am__cd) $(top_srcdir) && \
447 $(AUTOMAKE) --gnu src/modules/engines/software_generic/Makefile
448.PRECIOUS: Makefile
449Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
450 @case '$?' in \
451 *config.status*) \
452 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
453 *) \
454 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
455 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
456 esac;
457
458$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
459 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
460
461$(top_srcdir)/configure: $(am__configure_deps)
462 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
463$(ACLOCAL_M4): $(am__aclocal_m4_deps)
464 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
465$(am__aclocal_m4_deps):
466
467clean-noinstLTLIBRARIES:
468 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
469 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
470 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
471 test "$$dir" != "$$p" || dir=.; \
472 echo "rm -f \"$${dir}/so_locations\""; \
473 rm -f "$${dir}/so_locations"; \
474 done
475install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
476 @$(NORMAL_INSTALL)
477 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
478 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
479 list2=; for p in $$list; do \
480 if test -f $$p; then \
481 list2="$$list2 $$p"; \
482 else :; fi; \
483 done; \
484 test -z "$$list2" || { \
485 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
486 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
487 }
488
489uninstall-pkgLTLIBRARIES:
490 @$(NORMAL_UNINSTALL)
491 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
492 for p in $$list; do \
493 $(am__strip_dir) \
494 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
495 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
496 done
497
498clean-pkgLTLIBRARIES:
499 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
500 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
501 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
502 test "$$dir" != "$$p" || dir=.; \
503 echo "rm -f \"$${dir}/so_locations\""; \
504 rm -f "$${dir}/so_locations"; \
505 done
506libevas_engine_software_generic.la: $(libevas_engine_software_generic_la_OBJECTS) $(libevas_engine_software_generic_la_DEPENDENCIES)
507 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_software_generic_la_rpath) $(libevas_engine_software_generic_la_OBJECTS) $(libevas_engine_software_generic_la_LIBADD) $(LIBS)
508module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
509 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
510
511mostlyclean-compile:
512 -rm -f *.$(OBJEXT)
513
514distclean-compile:
515 -rm -f *.tab.c
516
517@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
518@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
519
520.c.o:
521@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
522@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
523@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
524@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
525@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
526@am__fastdepCC_FALSE@ $(COMPILE) -c $<
527
528.c.obj:
529@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
530@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
531@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
532@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
533@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
534@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
535
536.c.lo:
537@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
538@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
539@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
540@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
541@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
542@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
543
544module_la-evas_engine.lo: evas_engine.c
545@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
546@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
547@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
548@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
549@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
550@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
551
552mostlyclean-libtool:
553 -rm -f *.lo
554
555clean-libtool:
556 -rm -rf .libs _libs
557
558ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
559 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
560 unique=`for i in $$list; do \
561 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
562 done | \
563 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
564 END { if (nonempty) { for (i in files) print i; }; }'`; \
565 mkid -fID $$unique
566tags: TAGS
567
568TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
569 $(TAGS_FILES) $(LISP)
570 set x; \
571 here=`pwd`; \
572 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
573 unique=`for i in $$list; do \
574 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
575 done | \
576 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
577 END { if (nonempty) { for (i in files) print i; }; }'`; \
578 shift; \
579 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
580 test -n "$$unique" || unique=$$empty_fix; \
581 if test $$# -gt 0; then \
582 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
583 "$$@" $$unique; \
584 else \
585 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
586 $$unique; \
587 fi; \
588 fi
589ctags: CTAGS
590CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
591 $(TAGS_FILES) $(LISP)
592 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
593 unique=`for i in $$list; do \
594 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
595 done | \
596 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
597 END { if (nonempty) { for (i in files) print i; }; }'`; \
598 test -z "$(CTAGS_ARGS)$$unique" \
599 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
600 $$unique
601
602GTAGS:
603 here=`$(am__cd) $(top_builddir) && pwd` \
604 && $(am__cd) $(top_srcdir) \
605 && gtags -i $(GTAGS_ARGS) "$$here"
606
607distclean-tags:
608 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
609
610distdir: $(DISTFILES)
611 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
612 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
613 list='$(DISTFILES)'; \
614 dist_files=`for file in $$list; do echo $$file; done | \
615 sed -e "s|^$$srcdirstrip/||;t" \
616 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
617 case $$dist_files in \
618 */*) $(MKDIR_P) `echo "$$dist_files" | \
619 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
620 sort -u` ;; \
621 esac; \
622 for file in $$dist_files; do \
623 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
624 if test -d $$d/$$file; then \
625 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
626 if test -d "$(distdir)/$$file"; then \
627 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
628 fi; \
629 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
630 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
631 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
632 fi; \
633 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
634 else \
635 test -f "$(distdir)/$$file" \
636 || cp -p $$d/$$file "$(distdir)/$$file" \
637 || exit 1; \
638 fi; \
639 done
640check-am: all-am
641check: check-am
642all-am: Makefile $(LTLIBRARIES)
643installdirs:
644 for dir in "$(DESTDIR)$(pkgdir)"; do \
645 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
646 done
647install: install-am
648install-exec: install-exec-am
649install-data: install-data-am
650uninstall: uninstall-am
651
652install-am: all-am
653 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
654
655installcheck: installcheck-am
656install-strip:
657 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
658 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
659 `test -z '$(STRIP)' || \
660 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
661mostlyclean-generic:
662
663clean-generic:
664
665distclean-generic:
666 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
667 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
668
669maintainer-clean-generic:
670 @echo "This command is intended for maintainers to use"
671 @echo "it deletes files that may require special tools to rebuild."
672 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
673clean: clean-am
674
675clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
676 clean-pkgLTLIBRARIES mostlyclean-am
677
678distclean: distclean-am
679 -rm -rf ./$(DEPDIR)
680 -rm -f Makefile
681distclean-am: clean-am distclean-compile distclean-generic \
682 distclean-tags
683
684dvi: dvi-am
685
686dvi-am:
687
688html: html-am
689
690html-am:
691
692info: info-am
693
694info-am:
695
696install-data-am: install-pkgLTLIBRARIES
697
698install-dvi: install-dvi-am
699
700install-dvi-am:
701
702install-exec-am:
703
704install-html: install-html-am
705
706install-html-am:
707
708install-info: install-info-am
709
710install-info-am:
711
712install-man:
713
714install-pdf: install-pdf-am
715
716install-pdf-am:
717
718install-ps: install-ps-am
719
720install-ps-am:
721
722installcheck-am:
723
724maintainer-clean: maintainer-clean-am
725 -rm -rf ./$(DEPDIR)
726 -rm -f Makefile
727maintainer-clean-am: distclean-am maintainer-clean-generic
728
729mostlyclean: mostlyclean-am
730
731mostlyclean-am: mostlyclean-compile mostlyclean-generic \
732 mostlyclean-libtool
733
734pdf: pdf-am
735
736pdf-am:
737
738ps: ps-am
739
740ps-am:
741
742uninstall-am: uninstall-pkgLTLIBRARIES
743
744.MAKE: install-am install-strip
745
746.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
747 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
748 ctags distclean distclean-compile distclean-generic \
749 distclean-libtool distclean-tags distdir dvi dvi-am html \
750 html-am info info-am install install-am install-data \
751 install-data-am install-dvi install-dvi-am install-exec \
752 install-exec-am install-html install-html-am install-info \
753 install-info-am install-man install-pdf install-pdf-am \
754 install-pkgLTLIBRARIES install-ps install-ps-am install-strip \
755 installcheck installcheck-am installdirs maintainer-clean \
756 maintainer-clean-generic mostlyclean mostlyclean-compile \
757 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
758 tags uninstall uninstall-am uninstall-pkgLTLIBRARIES
759
760
761# Tell versions [3.59,3.63) of GNU make to not export all variables.
762# Otherwise a system limit (for SysV at least) may be exceeded.
763.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_generic/evas_engine.c b/libraries/evas/src/modules/engines/software_generic/evas_engine.c
new file mode 100644
index 0000000..b2c53c5
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_generic/evas_engine.c
@@ -0,0 +1,1230 @@
1#include "evas_common.h" /* Also includes international specific stuff */
2#include "evas_private.h"
3
4/*
5 *****
6 **
7 ** ENGINE ROUTINES
8 **
9 *****
10 */
11static int cpunum = 0;
12static int _evas_soft_gen_log_dom = -1;
13
14static void
15eng_output_dump(void *data __UNUSED__)
16{
17 evas_common_image_image_all_unload();
18 evas_common_font_font_all_unload();
19}
20
21static void *
22eng_context_new(void *data __UNUSED__)
23{
24 return evas_common_draw_context_new();
25}
26
27static void
28eng_context_free(void *data __UNUSED__, void *context)
29{
30 evas_common_draw_context_free(context);
31}
32
33static void
34eng_context_clip_set(void *data __UNUSED__, void *context, int x, int y, int w, int h)
35{
36 evas_common_draw_context_set_clip(context, x, y, w, h);
37}
38
39static void
40eng_context_clip_clip(void *data __UNUSED__, void *context, int x, int y, int w, int h)
41{
42 evas_common_draw_context_clip_clip(context, x, y, w, h);
43}
44
45static void
46eng_context_clip_unset(void *data __UNUSED__, void *context)
47{
48 evas_common_draw_context_unset_clip(context);
49}
50
51static int
52eng_context_clip_get(void *data __UNUSED__, void *context, int *x, int *y, int *w, int *h)
53{
54 *x = ((RGBA_Draw_Context *)context)->clip.x;
55 *y = ((RGBA_Draw_Context *)context)->clip.y;
56 *w = ((RGBA_Draw_Context *)context)->clip.w;
57 *h = ((RGBA_Draw_Context *)context)->clip.h;
58 return ((RGBA_Draw_Context *)context)->clip.use;
59}
60
61static void
62eng_context_color_set(void *data __UNUSED__, void *context, int r, int g, int b, int a)
63{
64 evas_common_draw_context_set_color(context, r, g, b, a);
65}
66
67static int
68eng_context_color_get(void *data __UNUSED__, void *context, int *r, int *g, int *b, int *a)
69{
70 *r = (int)(R_VAL(&((RGBA_Draw_Context *)context)->col.col));
71 *g = (int)(G_VAL(&((RGBA_Draw_Context *)context)->col.col));
72 *b = (int)(B_VAL(&((RGBA_Draw_Context *)context)->col.col));
73 *a = (int)(A_VAL(&((RGBA_Draw_Context *)context)->col.col));
74 return 1;
75}
76
77static void
78eng_context_multiplier_set(void *data __UNUSED__, void *context, int r, int g, int b, int a)
79{
80 evas_common_draw_context_set_multiplier(context, r, g, b, a);
81}
82
83static void
84eng_context_multiplier_unset(void *data __UNUSED__, void *context)
85{
86 evas_common_draw_context_unset_multiplier(context);
87}
88
89static int
90eng_context_multiplier_get(void *data __UNUSED__, void *context, int *r, int *g, int *b, int *a)
91{
92 *r = (int)(R_VAL(&((RGBA_Draw_Context *)context)->mul.col));
93 *g = (int)(G_VAL(&((RGBA_Draw_Context *)context)->mul.col));
94 *b = (int)(B_VAL(&((RGBA_Draw_Context *)context)->mul.col));
95 *a = (int)(A_VAL(&((RGBA_Draw_Context *)context)->mul.col));
96 return ((RGBA_Draw_Context *)context)->mul.use;
97}
98
99static void
100eng_context_mask_set(void *data __UNUSED__, void *context, void *mask, int x, int y, int w, int h)
101{
102 evas_common_draw_context_set_mask(context, mask, x, y, w, h);
103}
104
105static void
106eng_context_mask_unset(void *data __UNUSED__, void *context)
107{
108 evas_common_draw_context_unset_mask(context);
109}
110/*
111static void *
112eng_context_mask_get(void *data __UNUSED__, void *context)
113{
114 return ((RGBA_Draw_Context *)context)->mask.mask;
115}
116*/
117
118static void
119eng_context_cutout_add(void *data __UNUSED__, void *context, int x, int y, int w, int h)
120{
121 evas_common_draw_context_add_cutout(context, x, y, w, h);
122}
123
124static void
125eng_context_cutout_clear(void *data __UNUSED__, void *context)
126{
127 evas_common_draw_context_clear_cutouts(context);
128}
129
130static void
131eng_context_anti_alias_set(void *data __UNUSED__, void *context, unsigned char aa)
132{
133 evas_common_draw_context_set_anti_alias(context, aa);
134}
135
136static unsigned char
137eng_context_anti_alias_get(void *data __UNUSED__, void *context)
138{
139 return ((RGBA_Draw_Context *)context)->anti_alias;
140}
141
142static void
143eng_context_color_interpolation_set(void *data __UNUSED__, void *context, int color_space)
144{
145 evas_common_draw_context_set_color_interpolation(context, color_space);
146}
147
148static int
149eng_context_color_interpolation_get(void *data __UNUSED__, void *context)
150{
151 return ((RGBA_Draw_Context *)context)->interpolation.color_space;
152}
153
154static void
155eng_context_render_op_set(void *data __UNUSED__, void *context, int op)
156{
157 evas_common_draw_context_set_render_op(context, op);
158}
159
160static int
161eng_context_render_op_get(void *data __UNUSED__, void *context)
162{
163 return ((RGBA_Draw_Context *)context)->render_op;
164}
165
166
167
168static void
169eng_rectangle_draw(void *data __UNUSED__, void *context, void *surface, int x, int y, int w, int h)
170{
171#ifdef BUILD_PIPE_RENDER
172 if ((cpunum > 1)
173#ifdef EVAS_FRAME_QUEUING
174 && evas_common_frameq_enabled()
175#endif
176 )
177 evas_common_pipe_rectangle_draw(surface, context, x, y, w, h);
178 else
179#endif
180 {
181 evas_common_rectangle_draw(surface, context, x, y, w, h);
182 evas_common_cpu_end_opt();
183 }
184}
185
186static void
187eng_line_draw(void *data __UNUSED__, void *context, void *surface, int x1, int y1, int x2, int y2)
188{
189#ifdef BUILD_PIPE_RENDER
190 if ((cpunum > 1)
191 #ifdef EVAS_FRAME_QUEUING
192 && evas_common_frameq_enabled()
193#endif
194 )
195 evas_common_pipe_line_draw(surface, context, x1, y1, x2, y2);
196 else
197#endif
198 {
199 evas_common_line_draw(surface, context, x1, y1, x2, y2);
200 evas_common_cpu_end_opt();
201 }
202}
203
204static void *
205eng_polygon_point_add(void *data __UNUSED__, void *context __UNUSED__, void *polygon, int x, int y)
206{
207 return evas_common_polygon_point_add(polygon, x, y);
208}
209
210static void *
211eng_polygon_points_clear(void *data __UNUSED__, void *context __UNUSED__, void *polygon)
212{
213 return evas_common_polygon_points_clear(polygon);
214}
215
216static void
217eng_polygon_draw(void *data __UNUSED__, void *context, void *surface, void *polygon, int x, int y)
218{
219#ifdef BUILD_PIPE_RENDER
220 if ((cpunum > 1)
221#ifdef EVAS_FRAME_QUEUING
222 && evas_common_frameq_enabled()
223#endif
224 )
225 evas_common_pipe_poly_draw(surface, context, polygon, x, y);
226 else
227#endif
228 {
229 evas_common_polygon_draw(surface, context, polygon, x, y);
230 evas_common_cpu_end_opt();
231 }
232}
233
234static int
235eng_image_alpha_get(void *data __UNUSED__, void *image)
236{
237 Image_Entry *im;
238
239 if (!image) return 1;
240 im = image;
241 switch (im->space)
242 {
243 case EVAS_COLORSPACE_ARGB8888:
244 if (im->flags.alpha) return 1;
245 default:
246 break;
247 }
248 return 0;
249}
250
251static int
252eng_image_colorspace_get(void *data __UNUSED__, void *image)
253{
254 Image_Entry *im;
255
256 if (!image) return EVAS_COLORSPACE_ARGB8888;
257 im = image;
258 return im->space;
259}
260
261static void
262eng_image_mask_create(void *data __UNUSED__, void *image)
263{
264 RGBA_Image *im;
265 int sz;
266 uint8_t *dst,*end;
267 uint32_t *src;
268
269 if (!image) return;
270 im = image;
271 if (im->mask.mask && !im->mask.dirty) return;
272
273 if (im->mask.mask) free(im->mask.mask);
274 sz = im->cache_entry.w * im->cache_entry.h;
275 im->mask.mask = malloc(sz);
276 dst = im->mask.mask;
277 if (!im->image.data)
278 evas_cache_image_load_data(&im->cache_entry);
279 src = (void*) im->image.data;
280 if (!src) return;
281 for (end = dst + sz ; dst < end ; dst ++, src ++)
282 *dst = *src >> 24;
283 im->mask.dirty = 0;
284}
285
286
287static void *
288eng_image_alpha_set(void *data __UNUSED__, void *image, int has_alpha)
289{
290 RGBA_Image *im;
291
292 if (!image) return NULL;
293 im = image;
294 if (im->cache_entry.space != EVAS_COLORSPACE_ARGB8888)
295 {
296 im->cache_entry.flags.alpha = 0;
297 return im;
298 }
299 im = (RGBA_Image *) evas_cache_image_alone(&im->cache_entry);
300 evas_common_image_colorspace_dirty(im);
301
302 im->cache_entry.flags.alpha = has_alpha ? 1 : 0;
303 return im;
304}
305
306static void *
307eng_image_border_set(void *data __UNUSED__, void *image, int l __UNUSED__, int r __UNUSED__, int t __UNUSED__, int b __UNUSED__)
308{
309 RGBA_Image *im;
310
311 im = image;
312 return im;
313}
314
315static void
316eng_image_border_get(void *data __UNUSED__, void *image, int *l __UNUSED__, int *r __UNUSED__, int *t __UNUSED__, int *b __UNUSED__)
317{
318 RGBA_Image *im;
319
320 im = image;
321}
322
323static char *
324eng_image_comment_get(void *data __UNUSED__, void *image, char *key __UNUSED__)
325{
326 RGBA_Image *im;
327
328 if (!image) return NULL;
329 im = image;
330 return im->info.comment;
331}
332
333static char *
334eng_image_format_get(void *data __UNUSED__, void *image __UNUSED__)
335{
336 return NULL;
337}
338
339static void
340eng_image_colorspace_set(void *data __UNUSED__, void *image, int cspace)
341{
342 Image_Entry *im;
343
344 if (!image) return;
345 im = image;
346 evas_cache_image_colorspace(im, cspace);
347}
348
349static void *
350eng_image_native_set(void *data __UNUSED__, void *image, void *native __UNUSED__)
351{
352 return image;
353}
354
355static void *
356eng_image_native_get(void *data __UNUSED__, void *image __UNUSED__)
357{
358 return NULL;
359}
360
361static void *
362eng_image_load(void *data __UNUSED__, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
363{
364 *error = EVAS_LOAD_ERROR_NONE;
365 return evas_common_load_image_from_file(file, key, lo, error);
366}
367
368static void *
369eng_image_new_from_data(void *data __UNUSED__, int w, int h, DATA32 *image_data, int alpha, int cspace)
370{
371 return evas_cache_image_data(evas_common_image_cache_get(), w, h, image_data, alpha, cspace);
372}
373
374static void *
375eng_image_new_from_copied_data(void *data __UNUSED__, int w, int h, DATA32 *image_data, int alpha, int cspace)
376{
377 return evas_cache_image_copied_data(evas_common_image_cache_get(), w, h, image_data, alpha, cspace);
378}
379
380static void
381eng_image_free(void *data __UNUSED__, void *image)
382{
383 evas_cache_image_drop(image);
384}
385
386static void
387eng_image_size_get(void *data __UNUSED__, void *image, int *w, int *h)
388{
389 Image_Entry *im;
390
391 im = image;
392 if (w) *w = im->w;
393 if (h) *h = im->h;
394}
395
396static void *
397eng_image_size_set(void *data __UNUSED__, void *image, int w, int h)
398{
399 Image_Entry *im;
400
401 im = image;
402 return evas_cache_image_size_set(image, w, h);
403}
404
405static void *
406eng_image_dirty_region(void *data __UNUSED__, void *image, int x, int y, int w, int h)
407{
408 Image_Entry *im = image;
409
410 if (!image) return NULL;
411 return evas_cache_image_dirty(im, x, y, w, h);
412}
413
414static void *
415eng_image_data_get(void *data __UNUSED__, void *image, int to_write, DATA32 **image_data, int *err)
416{
417 RGBA_Image *im;
418 int error;
419
420 if (!image)
421 {
422 *image_data = NULL;
423 return NULL;
424 }
425 im = image;
426 error = evas_cache_image_load_data(&im->cache_entry);
427 switch (im->cache_entry.space)
428 {
429 case EVAS_COLORSPACE_ARGB8888:
430 if (to_write)
431 im = (RGBA_Image *)evas_cache_image_alone(&im->cache_entry);
432 *image_data = im->image.data;
433 break;
434 case EVAS_COLORSPACE_YCBCR422P601_PL:
435 case EVAS_COLORSPACE_YCBCR422P709_PL:
436 case EVAS_COLORSPACE_YCBCR422601_PL:
437 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
438 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
439 *image_data = im->cs.data;
440 break;
441 default:
442 abort();
443 break;
444 }
445 if (err) *err = error;
446 return im;
447}
448
449static void *
450eng_image_data_put(void *data, void *image, DATA32 *image_data)
451{
452 RGBA_Image *im, *im2;
453
454 if (!image) return NULL;
455 im = image;
456 switch (im->cache_entry.space)
457 {
458 case EVAS_COLORSPACE_ARGB8888:
459 if (image_data != im->image.data)
460 {
461 int w, h;
462
463 w = im->cache_entry.w;
464 h = im->cache_entry.h;
465 im2 = eng_image_new_from_data(data, w, h, image_data,
466 eng_image_alpha_get(data, image),
467 eng_image_colorspace_get(data, image));
468 evas_cache_image_drop(&im->cache_entry);
469 im = im2;
470 }
471 break;
472 case EVAS_COLORSPACE_YCBCR422P601_PL:
473 case EVAS_COLORSPACE_YCBCR422P709_PL:
474 case EVAS_COLORSPACE_YCBCR422601_PL:
475 case EVAS_COLORSPACE_YCBCR420NV12601_PL:
476 case EVAS_COLORSPACE_YCBCR420TM12601_PL:
477 if (image_data != im->cs.data)
478 {
479 if (im->cs.data)
480 {
481 if (!im->cs.no_free) free(im->cs.data);
482 }
483 im->cs.data = image_data;
484 }
485 evas_common_image_colorspace_dirty(im);
486 break;
487 default:
488 abort();
489 break;
490 }
491 return im;
492}
493
494static void
495eng_image_data_preload_request(void *data __UNUSED__, void *image, const void *target)
496{
497 RGBA_Image *im = image;
498
499 if (!im) return ;
500 evas_cache_image_preload_data(&im->cache_entry, target);
501}
502
503static void
504eng_image_data_preload_cancel(void *data __UNUSED__, void *image, const void *target)
505{
506 RGBA_Image *im = image;
507
508 if (!im) return ;
509 evas_cache_image_preload_cancel(&im->cache_entry, target);
510}
511
512static void
513eng_image_draw(void *data __UNUSED__, void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth)
514{
515 RGBA_Image *im;
516
517 if (!image) return;
518 im = image;
519#ifdef BUILD_PIPE_RENDER
520 if ((cpunum > 1)
521#ifdef EVAS_FRAME_QUEUING
522 && evas_common_frameq_enabled()
523#endif
524 )
525 {
526 evas_common_rgba_image_scalecache_prepare((Image_Entry *)(im),
527 surface, context, smooth,
528 src_x, src_y, src_w, src_h,
529 dst_x, dst_y, dst_w, dst_h);
530
531 evas_common_pipe_image_draw(im, surface, context, smooth,
532 src_x, src_y, src_w, src_h,
533 dst_x, dst_y, dst_w, dst_h);
534 }
535 else
536#endif
537 {
538// if (im->cache_entry.space == EVAS_COLORSPACE_ARGB8888)
539// evas_cache_image_load_data(&im->cache_entry);
540// evas_common_image_colorspace_normalize(im);
541 evas_common_rgba_image_scalecache_prepare(&im->cache_entry, surface, context, smooth,
542 src_x, src_y, src_w, src_h,
543 dst_x, dst_y, dst_w, dst_h);
544 evas_common_rgba_image_scalecache_do(&im->cache_entry, surface, context, smooth,
545 src_x, src_y, src_w, src_h,
546 dst_x, dst_y, dst_w, dst_h);
547/*
548 if (smooth)
549 evas_common_scale_rgba_in_to_out_clip_smooth(im, surface, context,
550 src_x, src_y, src_w, src_h,
551 dst_x, dst_y, dst_w, dst_h);
552 else
553 evas_common_scale_rgba_in_to_out_clip_sample(im, surface, context,
554 src_x, src_y, src_w, src_h,
555 dst_x, dst_y, dst_w, dst_h);
556 */
557 evas_common_cpu_end_opt();
558 }
559}
560
561static void
562eng_image_map_draw(void *data __UNUSED__, void *context, void *surface, void *image, int npoints, RGBA_Map_Point *p, int smooth, int level)
563{
564 RGBA_Image *im;
565
566 if (!image) return;
567 if (npoints < 3) return;
568 im = image;
569
570 if ((p[0].x == p[3].x) &&
571 (p[1].x == p[2].x) &&
572 (p[0].y == p[1].y) &&
573 (p[3].y == p[2].y) &&
574 (p[0].x <= p[1].x) &&
575 (p[0].y <= p[2].y) &&
576 (p[0].u == 0) &&
577 (p[0].v == 0) &&
578 (p[1].u == (int)(im->cache_entry.w << FP)) &&
579 (p[1].v == 0) &&
580 (p[2].u == (int)(im->cache_entry.w << FP)) &&
581 (p[2].v == (int)(im->cache_entry.h << FP)) &&
582 (p[3].u == 0) &&
583 (p[3].v == (int)(im->cache_entry.h << FP)) &&
584 (p[0].col == 0xffffffff) &&
585 (p[1].col == 0xffffffff) &&
586 (p[2].col == 0xffffffff) &&
587 (p[3].col == 0xffffffff))
588 {
589 int dx, dy, dw, dh;
590
591 dx = p[0].x >> FP;
592 dy = p[0].y >> FP;
593 dw = (p[2].x >> FP) - dx;
594 dh = (p[2].y >> FP) - dy;
595 eng_image_draw
596 (data, context, surface, image,
597 0, 0, im->cache_entry.w, im->cache_entry.h,
598 dx, dy, dw, dh, smooth);
599 }
600 else
601 {
602#ifdef BUILD_PIPE_RENDER
603 if ((cpunum > 1)
604# ifdef EVAS_FRAME_QUEUING
605 && evas_common_frameq_enabled()
606# endif
607 )
608 evas_common_pipe_map_draw(im, surface, context, npoints, p, smooth, level);
609 else
610#endif
611 evas_common_map_rgba(im, surface, context, npoints, p, smooth, level);
612 }
613 evas_common_cpu_end_opt();
614
615 if (npoints > 4)
616 {
617 eng_image_map_draw(data, context, surface, image, npoints - 2, p + 2,
618 smooth, level);
619 }
620}
621
622static void *
623eng_image_map_surface_new(void *data __UNUSED__, int w, int h, int alpha)
624{
625 void *surface;
626 DATA32 *pixels;
627 surface = evas_cache_image_copied_data(evas_common_image_cache_get(),
628 w, h, NULL, alpha,
629 EVAS_COLORSPACE_ARGB8888);
630 pixels = evas_cache_image_pixels(surface);
631 return surface;
632}
633
634static void
635eng_image_map_surface_free(void *data __UNUSED__, void *surface)
636{
637 evas_cache_image_drop(surface);
638}
639
640static void
641eng_image_scale_hint_set(void *data __UNUSED__, void *image, int hint)
642{
643 Image_Entry *im;
644
645 if (!image) return;
646 im = image;
647 im->scale_hint = hint;
648}
649
650static int
651eng_image_scale_hint_get(void *data __UNUSED__, void *image)
652{
653 Image_Entry *im;
654
655 if (!image) return EVAS_IMAGE_SCALE_HINT_NONE;
656 im = image;
657 return im->scale_hint;
658}
659
660static Eina_Bool
661eng_image_animated_get(void *data __UNUSED__, void *image)
662{
663 Image_Entry *im;
664
665 if (!image) return EINA_FALSE;
666 im = image;
667 return im->flags.animated;
668}
669
670static int
671eng_image_animated_frame_count_get(void *data __UNUSED__, void *image)
672{
673 Image_Entry *im;
674
675 if (!image) return -1;
676 im = image;
677 if (!im->flags.animated) return -1;
678 return im->frame_count;
679}
680
681static Evas_Image_Animated_Loop_Hint
682eng_image_animated_loop_type_get(void *data __UNUSED__, void *image)
683{
684 Image_Entry *im;
685
686 if (!image) return EVAS_IMAGE_ANIMATED_HINT_NONE;
687 im = image;
688 if (!im->flags.animated) return EVAS_IMAGE_ANIMATED_HINT_NONE;
689 return im->loop_hint;
690}
691
692static int
693eng_image_animated_loop_count_get(void *data __UNUSED__, void *image)
694{
695 Image_Entry *im;
696
697 if (!image) return -1;
698 im = image;
699 if (!im->flags.animated) return -1;
700 return im->loop_count;
701}
702
703static double
704eng_image_animated_frame_duration_get(void *data __UNUSED__, void *image, int start_frame, int frame_num)
705{
706 Image_Entry *im;
707
708 if (!image) return -1;
709 im = image;
710 if (!im->flags.animated) return -1;
711 return evas_common_load_rgba_image_frame_duration_from_file(im, start_frame, frame_num);
712}
713
714static Eina_Bool
715eng_image_animated_frame_set(void *data __UNUSED__, void *image, int frame_index)
716{
717 Image_Entry *im;
718
719 if (!image) return EINA_FALSE;
720 im = image;
721 if (!im->flags.animated) return EINA_FALSE;
722 if (im->cur_frame == frame_index) return EINA_FALSE;
723 im->cur_frame = frame_index;
724 return EINA_TRUE;
725}
726
727static void
728eng_image_cache_flush(void *data __UNUSED__)
729{
730 int tmp_size;
731
732 tmp_size = evas_common_image_get_cache();
733 evas_common_image_set_cache(0);
734 evas_common_rgba_image_scalecache_flush();
735 evas_common_image_set_cache(tmp_size);
736}
737
738static void
739eng_image_cache_set(void *data __UNUSED__, int bytes)
740{
741 evas_common_image_set_cache(bytes);
742 evas_common_rgba_image_scalecache_size_set(bytes);
743}
744
745static int
746eng_image_cache_get(void *data __UNUSED__)
747{
748 return evas_common_image_get_cache();
749}
750
751static Evas_Font_Set *
752eng_font_load(void *data __UNUSED__, const char *name, int size,
753 Font_Rend_Flags wanted_rend)
754{
755 return (Evas_Font_Set *) evas_common_font_load(name, size, wanted_rend);
756}
757
758static Evas_Font_Set *
759eng_font_memory_load(void *data __UNUSED__, char *name, int size, const void *fdata, int fdata_size, Font_Rend_Flags wanted_rend)
760{
761 return (Evas_Font_Set *) evas_common_font_memory_load(name, size, fdata,
762 fdata_size, wanted_rend);
763}
764
765static Evas_Font_Set *
766eng_font_add(void *data __UNUSED__, Evas_Font_Set *font, const char *name, int size, Font_Rend_Flags wanted_rend)
767{
768 return (Evas_Font_Set *) evas_common_font_add((RGBA_Font *) font, name,
769 size, wanted_rend);
770}
771
772static Evas_Font_Set *
773eng_font_memory_add(void *data __UNUSED__, Evas_Font_Set *font, char *name, int size, const void *fdata, int fdata_size, Font_Rend_Flags wanted_rend)
774{
775 return (Evas_Font_Set *) evas_common_font_memory_add((RGBA_Font *) font,
776 name, size, fdata, fdata_size, wanted_rend);
777}
778
779static void
780eng_font_free(void *data __UNUSED__, Evas_Font_Set *font)
781{
782 evas_common_font_free((RGBA_Font *) font);
783}
784
785static int
786eng_font_ascent_get(void *data __UNUSED__, Evas_Font_Set *font)
787{
788 return evas_common_font_ascent_get((RGBA_Font *) font);
789}
790
791static int
792eng_font_descent_get(void *data __UNUSED__, Evas_Font_Set *font)
793{
794 return evas_common_font_descent_get((RGBA_Font *) font);
795}
796
797static int
798eng_font_max_ascent_get(void *data __UNUSED__, Evas_Font_Set *font)
799{
800 return evas_common_font_max_ascent_get((RGBA_Font *) font);
801}
802
803static int
804eng_font_max_descent_get(void *data __UNUSED__, Evas_Font_Set *font)
805{
806 return evas_common_font_max_descent_get((RGBA_Font *) font);
807}
808
809static void
810eng_font_string_size_get(void *data __UNUSED__, Evas_Font_Set *font, const Evas_Text_Props *text_props, int *w, int *h)
811{
812 evas_common_font_query_size((RGBA_Font *) font, text_props, w, h);
813}
814
815static int
816eng_font_inset_get(void *data __UNUSED__, Evas_Font_Set *font, const Evas_Text_Props *text_props)
817{
818 return evas_common_font_query_inset((RGBA_Font *) font, text_props);
819}
820
821static int
822eng_font_right_inset_get(void *data __UNUSED__, Evas_Font_Set *font, const Evas_Text_Props *text_props)
823{
824 return evas_common_font_query_right_inset((RGBA_Font *) font, text_props);
825}
826
827static int
828eng_font_h_advance_get(void *data __UNUSED__, Evas_Font_Set *font, const Evas_Text_Props *text_props)
829{
830 int h, v;
831
832 evas_common_font_query_advance((RGBA_Font *) font, text_props, &h, &v);
833 return h;
834}
835
836static int
837eng_font_v_advance_get(void *data __UNUSED__, Evas_Font_Set *font, const Evas_Text_Props *text_props)
838{
839 int h, v;
840
841 evas_common_font_query_advance((RGBA_Font *) font, text_props, &h, &v);
842 return v;
843}
844
845static int
846eng_font_pen_coords_get(void *data __UNUSED__, Evas_Font_Set *font, const Evas_Text_Props *text_props, int pos, int *cpen_x, int *cy, int *cadv, int *ch)
847{
848 return evas_common_font_query_pen_coords((RGBA_Font *) font, text_props, pos, cpen_x, cy, cadv, ch);
849}
850
851static Eina_Bool
852eng_font_text_props_info_create(void *data __UNUSED__, Evas_Font_Instance *fi, const Eina_Unicode *text, Evas_Text_Props *text_props, const Evas_BiDi_Paragraph_Props *par_props, size_t par_pos, size_t len)
853{
854 return evas_common_text_props_content_create((RGBA_Font_Int *) fi, text,
855 text_props, par_props, par_pos, len);
856}
857
858static int
859eng_font_char_coords_get(void *data __UNUSED__, Evas_Font_Set *font, const Evas_Text_Props *text_props, int pos, int *cx, int *cy, int *cw, int *ch)
860{
861 return evas_common_font_query_char_coords((RGBA_Font *) font, text_props, pos, cx, cy, cw, ch);
862}
863
864static int
865eng_font_char_at_coords_get(void *data __UNUSED__, Evas_Font_Set *font, const Evas_Text_Props *text_props, int x, int y, int *cx, int *cy, int *cw, int *ch)
866{
867 return evas_common_font_query_char_at_coords((RGBA_Font *) font, text_props, x, y, cx, cy, cw, ch);
868}
869
870static int
871eng_font_last_up_to_pos(void *data __UNUSED__, Evas_Font_Set *font, const Evas_Text_Props *text_props, int x, int y)
872{
873 return evas_common_font_query_last_up_to_pos((RGBA_Font *) font, text_props, x, y);
874}
875
876static int
877eng_font_run_font_end_get(void *data __UNUSED__, Evas_Font_Set *font, Evas_Font_Instance **script_fi, Evas_Font_Instance **cur_fi, Evas_Script_Type script, const Eina_Unicode *text, int run_len)
878{
879 return evas_common_font_query_run_font_end_get((RGBA_Font *) font,
880 (RGBA_Font_Int **) script_fi, (RGBA_Font_Int **) cur_fi,
881 script, text, run_len);
882}
883
884static void
885eng_font_draw(void *data __UNUSED__, void *context, void *surface, Evas_Font_Set *font, int x, int y, int w __UNUSED__, int h __UNUSED__, int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *text_props)
886{
887#ifdef BUILD_PIPE_RENDER
888 if ((cpunum > 1)
889#ifdef EVAS_FRAME_QUEUING
890 && evas_common_frameq_enabled()
891#endif
892 )
893 evas_common_pipe_text_draw(surface, context, (RGBA_Font *) font, x, y,
894 text_props);
895 else
896#endif
897 {
898 evas_common_font_draw(surface, context, (RGBA_Font *) font, x, y,
899 text_props);
900 evas_common_cpu_end_opt();
901 }
902}
903
904static void
905eng_font_cache_flush(void *data __UNUSED__)
906{
907 int tmp_size;
908
909 tmp_size = evas_common_font_cache_get();
910 evas_common_font_cache_set(0);
911 evas_common_font_flush();
912 evas_common_font_cache_set(tmp_size);
913}
914
915static void
916eng_font_cache_set(void *data __UNUSED__, int bytes)
917{
918 evas_common_font_cache_set(bytes);
919}
920
921static int
922eng_font_cache_get(void *data __UNUSED__)
923{
924 return evas_common_font_cache_get();
925}
926
927static void
928eng_font_hinting_set(void *data __UNUSED__, Evas_Font_Set *font, int hinting)
929{
930 evas_common_font_hinting_set((RGBA_Font *) font, hinting);
931}
932
933static int
934eng_font_hinting_can_hint(void *data __UNUSED__, int hinting)
935{
936 return evas_common_hinting_available(hinting);
937}
938
939static Eina_Bool
940eng_canvas_alpha_get(void *data __UNUSED__, void *info __UNUSED__)
941{
942 return EINA_TRUE;
943}
944
945
946/* Filter API */
947#if 0 // filtering disabled
948static void
949eng_image_draw_filtered(void *data __UNUSED__, void *context __UNUSED__,
950 void *surface, void *image, Evas_Filter_Info *filter)
951{
952 Evas_Software_Filter_Fn fn;
953 RGBA_Image *im = image;
954
955 fn = evas_filter_software_get(filter);
956 if (!fn) return;
957 if (im->cache_entry.cache) evas_cache_image_load_data(&im->cache_entry);
958 fn(filter, image, surface);
959 return;
960}
961
962static Filtered_Image *
963eng_image_filtered_get(void *image, uint8_t *key, size_t keylen)
964{
965 RGBA_Image *im = image;
966 Filtered_Image *fi;
967 Eina_List *l;
968
969 for (l = im->filtered ; l ; l = l->next)
970 {
971 fi = l->data;
972 if (fi->keylen != keylen) continue;
973 if (memcmp(key, fi->key, keylen) != 0) continue;
974 fi->ref ++;
975 return fi;
976 }
977
978 return NULL;
979}
980
981static Filtered_Image *
982eng_image_filtered_save(void *image, void *fimage, uint8_t *key, size_t keylen)
983{
984 RGBA_Image *im = image;
985 Filtered_Image *fi;
986 Eina_List *l;
987
988 for (l = im->filtered ; l ; l = l->next)
989 {
990 fi = l->data;
991 if (fi->keylen != keylen) continue;
992 if (memcmp(key, fi->key, keylen) == 0) continue;
993 evas_cache_image_drop((void *)fi->image);
994 fi->image = fimage;
995 return fi;
996 }
997
998 fi = calloc(1,sizeof(Filtered_Image));
999 if (!fi) return NULL;
1000
1001 fi->keylen = keylen;
1002 fi->key = malloc(keylen);
1003 memcpy(fi->key, key, keylen);
1004 fi->image = fimage;
1005 fi->ref = 1;
1006
1007 im->filtered = eina_list_prepend(im->filtered, fi);
1008
1009 return fi;
1010}
1011
1012static void
1013eng_image_filtered_free(void *image, Filtered_Image *fi)
1014{
1015 RGBA_Image *im = image;
1016
1017 fi->ref --;
1018 if (fi->ref) return;
1019
1020 free(fi->key);
1021 evas_cache_image_drop(&fi->image->cache_entry);
1022 fi->image = NULL;
1023
1024 im->filtered = eina_list_remove(im->filtered, fi);
1025}
1026#endif
1027
1028static int
1029eng_image_load_error_get(void *data __UNUSED__, void *image)
1030{
1031 RGBA_Image *im;
1032
1033 if (!image) return EVAS_LOAD_ERROR_NONE;
1034 im = image;
1035 return im->cache_entry.load_error;
1036}
1037
1038/*
1039 *****
1040 **
1041 ** ENGINE API
1042 **
1043 *****
1044 */
1045
1046static Evas_Func func =
1047{
1048 NULL,
1049 NULL,
1050 NULL,
1051 NULL,
1052 NULL,
1053 NULL,
1054 NULL,
1055 NULL,
1056 NULL,
1057 NULL,
1058 NULL,
1059 NULL,
1060 NULL,
1061 eng_output_dump,
1062 /* draw context virtual methods */
1063 eng_context_new,
1064 eng_canvas_alpha_get,
1065 eng_context_free,
1066 eng_context_clip_set,
1067 eng_context_clip_clip,
1068 eng_context_clip_unset,
1069 eng_context_clip_get,
1070 eng_context_mask_set,
1071 eng_context_mask_unset,
1072 eng_context_color_set,
1073 eng_context_color_get,
1074 eng_context_multiplier_set,
1075 eng_context_multiplier_unset,
1076 eng_context_multiplier_get,
1077 eng_context_cutout_add,
1078 eng_context_cutout_clear,
1079 eng_context_anti_alias_set,
1080 eng_context_anti_alias_get,
1081 eng_context_color_interpolation_set,
1082 eng_context_color_interpolation_get,
1083 eng_context_render_op_set,
1084 eng_context_render_op_get,
1085 /* rect draw funcs */
1086 eng_rectangle_draw,
1087 /* line draw funcs */
1088 eng_line_draw,
1089 /* polygon draw funcs */
1090 eng_polygon_point_add,
1091 eng_polygon_points_clear,
1092 eng_polygon_draw,
1093 /* image draw funcs */
1094 eng_image_load,
1095 eng_image_new_from_data,
1096 eng_image_new_from_copied_data,
1097 eng_image_free,
1098 eng_image_size_get,
1099 eng_image_size_set,
1100 NULL,
1101 eng_image_dirty_region,
1102 eng_image_data_get,
1103 eng_image_data_put,
1104 eng_image_data_preload_request,
1105 eng_image_data_preload_cancel,
1106 eng_image_alpha_set,
1107 eng_image_alpha_get,
1108 eng_image_border_set,
1109 eng_image_border_get,
1110 eng_image_draw,
1111 eng_image_comment_get,
1112 eng_image_format_get,
1113 eng_image_colorspace_set,
1114 eng_image_colorspace_get,
1115 eng_image_mask_create,
1116 eng_image_native_set,
1117 eng_image_native_get,
1118 /* image cache funcs */
1119 eng_image_cache_flush,
1120 eng_image_cache_set,
1121 eng_image_cache_get,
1122 /* font draw functions */
1123 eng_font_load,
1124 eng_font_memory_load,
1125 eng_font_add,
1126 eng_font_memory_add,
1127 eng_font_free,
1128 eng_font_ascent_get,
1129 eng_font_descent_get,
1130 eng_font_max_ascent_get,
1131 eng_font_max_descent_get,
1132 eng_font_string_size_get,
1133 eng_font_inset_get,
1134 eng_font_h_advance_get,
1135 eng_font_v_advance_get,
1136 eng_font_char_coords_get,
1137 eng_font_char_at_coords_get,
1138 eng_font_draw,
1139 /* font cache functions */
1140 eng_font_cache_flush,
1141 eng_font_cache_set,
1142 eng_font_cache_get,
1143 /* font hinting functions */
1144 eng_font_hinting_set,
1145 eng_font_hinting_can_hint,
1146 eng_image_scale_hint_set,
1147 eng_image_scale_hint_get,
1148 /* more font draw functions */
1149 eng_font_last_up_to_pos,
1150 eng_image_map_draw,
1151 eng_image_map_surface_new,
1152 eng_image_map_surface_free,
1153 NULL, // eng_image_content_hint_set - software doesn't use it
1154 NULL, // eng_image_content_hint_get - software doesn't use it
1155 eng_font_pen_coords_get,
1156 eng_font_text_props_info_create,
1157 eng_font_right_inset_get,
1158#if 0 // filtering disabled
1159 eng_image_draw_filtered,
1160 eng_image_filtered_get,
1161 eng_image_filtered_save,
1162 eng_image_filtered_free,
1163#endif
1164 NULL, // FIXME: need software mesa for gl rendering <- gl_surface_create
1165 NULL, // FIXME: need software mesa for gl rendering <- gl_surface_destroy
1166 NULL, // FIXME: need software mesa for gl rendering <- gl_context_create
1167 NULL, // FIXME: need software mesa for gl rendering <- gl_context_destroy
1168 NULL, // FIXME: need software mesa for gl rendering <- gl_make_current
1169 NULL, // FIXME: need software mesa for gl rendering <- gl_string_query
1170 NULL, // FIXME: need software mesa for gl rendering <- gl_proc_address_get
1171 NULL, // FIXME: need software mesa for gl rendering <- gl_native_surface_get
1172 NULL, // FIXME: need software mesa for gl rendering <- gl_api_get
1173 eng_image_load_error_get,
1174 eng_font_run_font_end_get,
1175 eng_image_animated_get,
1176 eng_image_animated_frame_count_get,
1177 eng_image_animated_loop_type_get,
1178 eng_image_animated_loop_count_get,
1179 eng_image_animated_frame_duration_get,
1180 eng_image_animated_frame_set,
1181 NULL
1182 /* FUTURE software generic calls go here */
1183};
1184
1185/*
1186 *****
1187 **
1188 ** MODULE ACCESSIBLE API API
1189 **
1190 *****
1191 */
1192
1193static int
1194module_open(Evas_Module *em)
1195{
1196 if (!em) return 0;
1197 _evas_soft_gen_log_dom = eina_log_domain_register
1198 ("evas-software_generic", EVAS_DEFAULT_LOG_COLOR);
1199 if(_evas_soft_gen_log_dom<0)
1200 {
1201 EINA_LOG_ERR("Can not create a module log domain.");
1202 return 0;
1203 }
1204 em->functions = (void *)(&func);
1205 cpunum = eina_cpu_count();
1206 return 1;
1207}
1208
1209static void
1210module_close(Evas_Module *em __UNUSED__)
1211{
1212 eina_log_domain_unregister(_evas_soft_gen_log_dom);
1213}
1214
1215static Evas_Module_Api evas_modapi =
1216{
1217 EVAS_MODULE_API_VERSION,
1218 "software_generic",
1219 "none",
1220 {
1221 module_open,
1222 module_close
1223 }
1224};
1225
1226EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_generic);
1227
1228#ifndef EVAS_STATIC_BUILD_SOFTWARE_GENERIC
1229EVAS_EINA_MODULE_DEFINE(engine, software_generic);
1230#endif
diff --git a/libraries/evas/src/modules/engines/software_sdl/Evas_Engine_SDL.h b/libraries/evas/src/modules/engines/software_sdl/Evas_Engine_SDL.h
new file mode 100644
index 0000000..3cce6ec
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_sdl/Evas_Engine_SDL.h
@@ -0,0 +1,27 @@
1#ifndef _EVAS_ENGINE_SDL_H
2#define _EVAS_ENGINE_SDL_H
3
4#include <SDL/SDL.h>
5
6typedef struct _Evas_Engine_Info_SDL Evas_Engine_Info_SDL;
7
8struct _Evas_Engine_Info_SDL
9{
10 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
11 /* at you and make nasty noises */
12 Evas_Engine_Info magic;
13
14 struct {
15 int rotation;
16 int fullscreen : 1;
17 int hwsurface : 1;
18 int noframe : 1;
19 int alpha : 1;
20 } info;
21
22 /* non-blocking or blocking mode */
23 Evas_Engine_Render_Mode render_mode;
24};
25#endif
26
27
diff --git a/libraries/evas/src/modules/engines/software_sdl/Makefile.am b/libraries/evas/src/modules/engines/software_sdl/Makefile.am
new file mode 100644
index 0000000..dc548ba
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_sdl/Makefile.am
@@ -0,0 +1,45 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4AM_CPPFLAGS = \
5-I. \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/lib/include \
8-I$(top_srcdir)/src/modules/engines \
9@FREETYPE_CFLAGS@ \
10@PIXMAN_CFLAGS@ \
11@EINA_CFLAGS@ \
12@evas_engine_software_sdl_cflags@
13
14AM_CFLAGS = @WIN32_CFLAGS@
15
16if BUILD_ENGINE_SOFTWARE_SDL
17
18SOFTWARE_SDL_SOURCES = evas_engine.c
19SOFTWARE_SDL_LIBADD = @evas_engine_software_sdl_libs@
20
21
22includes_HEADERS = Evas_Engine_SDL.h
23includesdir = $(includedir)/evas-@VMAJ@
24
25if !EVAS_STATIC_BUILD_SOFTWARE_SDL
26
27pkgdir = $(libdir)/evas/modules/engines/software_sdl/$(MODULE_ARCH)
28pkg_LTLIBRARIES = module.la
29
30module_la_SOURCES = $(SOFTWARE_SDL_SOURCES)
31module_la_LIBADD = $(top_builddir)/src/lib/libevas.la @EINA_LIBS@ $(SOFTWARE_SDL_LIBADD)
32module_la_LDFLAGS = @lt_enable_auto_import@ -no-undefined -module -avoid-version
33module_la_LIBTOOLFLAGS = --tag=disable-static
34
35else
36
37noinst_LTLIBRARIES = libevas_engine_software_sdl.la
38
39libevas_engine_software_sdl_la_SOURCES = $(SOFTWARE_SDL_SOURCES)
40libevas_engine_software_sdl_la_LIBADD = $(SOFTWARE_SDL_LIBADD)
41
42endif
43endif
44
45EXTRA_DIST = evas_engine.h
diff --git a/libraries/evas/src/modules/engines/software_sdl/Makefile.in b/libraries/evas/src/modules/engines/software_sdl/Makefile.in
new file mode 100644
index 0000000..d1052c1
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_sdl/Makefile.in
@@ -0,0 +1,796 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38subdir = src/modules/engines/software_sdl
39DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
40 $(srcdir)/Makefile.in
41ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
42am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/evas_check_engine.m4 \
48 $(top_srcdir)/m4/evas_check_loader.m4 \
49 $(top_srcdir)/m4/evas_converter.m4 \
50 $(top_srcdir)/m4/evas_dither.m4 \
51 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
52 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
53 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
54 $(top_srcdir)/configure.ac
55am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
56 $(ACLOCAL_M4)
57mkinstalldirs = $(install_sh) -d
58CONFIG_HEADER = $(top_builddir)/config.h
59CONFIG_CLEAN_FILES =
60CONFIG_CLEAN_VPATH_FILES =
61am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
62am__vpath_adj = case $$p in \
63 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
64 *) f=$$p;; \
65 esac;
66am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
67am__install_max = 40
68am__nobase_strip_setup = \
69 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
70am__nobase_strip = \
71 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
72am__nobase_list = $(am__nobase_strip_setup); \
73 for p in $$list; do echo "$$p $$p"; done | \
74 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
75 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
76 if (++n[$$2] == $(am__install_max)) \
77 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
78 END { for (dir in files) print dir, files[dir] }'
79am__base_list = \
80 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
81 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
82am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
83LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
84am__DEPENDENCIES_1 =
85@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_TRUE@libevas_engine_software_sdl_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
86am__libevas_engine_software_sdl_la_SOURCES_DIST = evas_engine.c
87@BUILD_ENGINE_SOFTWARE_SDL_TRUE@am__objects_1 = evas_engine.lo
88@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_TRUE@am_libevas_engine_software_sdl_la_OBJECTS = $(am__objects_1)
89libevas_engine_software_sdl_la_OBJECTS = \
90 $(am_libevas_engine_software_sdl_la_OBJECTS)
91AM_V_lt = $(am__v_lt_$(V))
92am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
93am__v_lt_0 = --silent
94@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_TRUE@am_libevas_engine_software_sdl_la_rpath =
95@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la \
96@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@ $(am__DEPENDENCIES_1)
97am__module_la_SOURCES_DIST = evas_engine.c
98@BUILD_ENGINE_SOFTWARE_SDL_TRUE@am__objects_2 = \
99@BUILD_ENGINE_SOFTWARE_SDL_TRUE@ module_la-evas_engine.lo
100@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@am_module_la_OBJECTS = $(am__objects_2)
101module_la_OBJECTS = $(am_module_la_OBJECTS)
102module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
103 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
104 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
105@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@am_module_la_rpath = -rpath \
106@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@ $(pkgdir)
107DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
108depcomp = $(SHELL) $(top_srcdir)/depcomp
109am__depfiles_maybe = depfiles
110am__mv = mv -f
111COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
112 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
113LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
114 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
115 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
116 $(AM_CFLAGS) $(CFLAGS)
117AM_V_CC = $(am__v_CC_$(V))
118am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
119am__v_CC_0 = @echo " CC " $@;
120AM_V_at = $(am__v_at_$(V))
121am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
122am__v_at_0 = @
123CCLD = $(CC)
124LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
125 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
126 $(AM_LDFLAGS) $(LDFLAGS) -o $@
127AM_V_CCLD = $(am__v_CCLD_$(V))
128am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
129am__v_CCLD_0 = @echo " CCLD " $@;
130AM_V_GEN = $(am__v_GEN_$(V))
131am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
132am__v_GEN_0 = @echo " GEN " $@;
133SOURCES = $(libevas_engine_software_sdl_la_SOURCES) \
134 $(module_la_SOURCES)
135DIST_SOURCES = $(am__libevas_engine_software_sdl_la_SOURCES_DIST) \
136 $(am__module_la_SOURCES_DIST)
137am__includes_HEADERS_DIST = Evas_Engine_SDL.h
138HEADERS = $(includes_HEADERS)
139ETAGS = etags
140CTAGS = ctags
141DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
142ACLOCAL = @ACLOCAL@
143ALLOCA = @ALLOCA@
144AMTAR = @AMTAR@
145AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
146AR = @AR@
147AS = @AS@
148AUTOCONF = @AUTOCONF@
149AUTOHEADER = @AUTOHEADER@
150AUTOMAKE = @AUTOMAKE@
151AWK = @AWK@
152CC = @CC@
153CCDEPMODE = @CCDEPMODE@
154CFLAGS = @CFLAGS@
155CHECK_CFLAGS = @CHECK_CFLAGS@
156CHECK_LIBS = @CHECK_LIBS@
157CPP = @CPP@
158CPPFLAGS = @CPPFLAGS@
159CXX = @CXX@
160CXXCPP = @CXXCPP@
161CXXDEPMODE = @CXXDEPMODE@
162CXXFLAGS = @CXXFLAGS@
163CYGPATH_W = @CYGPATH_W@
164DEFS = @DEFS@
165DEPDIR = @DEPDIR@
166DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
167DIRECTFB_LIBS = @DIRECTFB_LIBS@
168DLLTOOL = @DLLTOOL@
169DSYMUTIL = @DSYMUTIL@
170DUMPBIN = @DUMPBIN@
171ECHO_C = @ECHO_C@
172ECHO_N = @ECHO_N@
173ECHO_T = @ECHO_T@
174ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
175ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
176EDB_CFLAGS = @EDB_CFLAGS@
177EDB_LIBS = @EDB_LIBS@
178EDJE_CFLAGS = @EDJE_CFLAGS@
179EDJE_LIBS = @EDJE_LIBS@
180EET_CFLAGS = @EET_CFLAGS@
181EET_LIBS = @EET_LIBS@
182EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
183EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
184EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
185EGREP = @EGREP@
186EINA_CFLAGS = @EINA_CFLAGS@
187EINA_LIBS = @EINA_LIBS@
188EVAS_CFLAGS = @EVAS_CFLAGS@
189EVAS_LIBS = @EVAS_LIBS@
190EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
191EVIL_CFLAGS = @EVIL_CFLAGS@
192EVIL_LIBS = @EVIL_LIBS@
193EXEEXT = @EXEEXT@
194FGREP = @FGREP@
195FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
196FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
197FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
198FREETYPE_LIBS = @FREETYPE_LIBS@
199FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
200FRIBIDI_LIBS = @FRIBIDI_LIBS@
201GL_EET_CFLAGS = @GL_EET_CFLAGS@
202GL_EET_LIBS = @GL_EET_LIBS@
203GREP = @GREP@
204HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
205HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
206INSTALL = @INSTALL@
207INSTALL_DATA = @INSTALL_DATA@
208INSTALL_PROGRAM = @INSTALL_PROGRAM@
209INSTALL_SCRIPT = @INSTALL_SCRIPT@
210INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
211LD = @LD@
212LDFLAGS = @LDFLAGS@
213LIBOBJS = @LIBOBJS@
214LIBS = @LIBS@
215LIBTOOL = @LIBTOOL@
216LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
217LINEBREAK_LIBS = @LINEBREAK_LIBS@
218LIPO = @LIPO@
219LN_S = @LN_S@
220LTLIBOBJS = @LTLIBOBJS@
221MAKEINFO = @MAKEINFO@
222MKDIR_P = @MKDIR_P@
223MODULE_ARCH = @MODULE_ARCH@
224NM = @NM@
225NMEDIT = @NMEDIT@
226OBJC = @OBJC@
227OBJCDEPMODE = @OBJCDEPMODE@
228OBJCFLAGS = @OBJCFLAGS@
229OBJDUMP = @OBJDUMP@
230OBJEXT = @OBJEXT@
231OTOOL = @OTOOL@
232OTOOL64 = @OTOOL64@
233PACKAGE = @PACKAGE@
234PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
235PACKAGE_NAME = @PACKAGE_NAME@
236PACKAGE_STRING = @PACKAGE_STRING@
237PACKAGE_TARNAME = @PACKAGE_TARNAME@
238PACKAGE_URL = @PACKAGE_URL@
239PACKAGE_VERSION = @PACKAGE_VERSION@
240PATH_SEPARATOR = @PATH_SEPARATOR@
241PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
242PIXMAN_LIBS = @PIXMAN_LIBS@
243PKG_CONFIG = @PKG_CONFIG@
244PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
245PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
246PNG_CFLAGS = @PNG_CFLAGS@
247PNG_LIBS = @PNG_LIBS@
248RANLIB = @RANLIB@
249SDL_CFLAGS = @SDL_CFLAGS@
250SDL_LIBS = @SDL_LIBS@
251SED = @SED@
252SET_MAKE = @SET_MAKE@
253SHELL = @SHELL@
254SHM_OPEN_LINK = @SHM_OPEN_LINK@
255STRIP = @STRIP@
256SVG_CFLAGS = @SVG_CFLAGS@
257SVG_LIBS = @SVG_LIBS@
258VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
259VALGRIND_LIBS = @VALGRIND_LIBS@
260VERSION = @VERSION@
261VMAJ = @VMAJ@
262WIN32_CFLAGS = @WIN32_CFLAGS@
263WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
264XCB_CFLAGS = @XCB_CFLAGS@
265XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
266XCB_GL_LIBS = @XCB_GL_LIBS@
267XCB_LIBS = @XCB_LIBS@
268XEXT_CFLAGS = @XEXT_CFLAGS@
269XEXT_LIBS = @XEXT_LIBS@
270XMKMF = @XMKMF@
271X_CFLAGS = @X_CFLAGS@
272X_EXTRA_LIBS = @X_EXTRA_LIBS@
273X_LIBS = @X_LIBS@
274X_PRE_LIBS = @X_PRE_LIBS@
275abs_builddir = @abs_builddir@
276abs_srcdir = @abs_srcdir@
277abs_top_builddir = @abs_top_builddir@
278abs_top_srcdir = @abs_top_srcdir@
279ac_ct_CC = @ac_ct_CC@
280ac_ct_CXX = @ac_ct_CXX@
281ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
282ac_ct_OBJC = @ac_ct_OBJC@
283altivec_cflags = @altivec_cflags@
284am__include = @am__include@
285am__leading_dot = @am__leading_dot@
286am__quote = @am__quote@
287am__tar = @am__tar@
288am__untar = @am__untar@
289bindir = @bindir@
290build = @build@
291build_alias = @build_alias@
292build_cpu = @build_cpu@
293build_os = @build_os@
294build_vendor = @build_vendor@
295builddir = @builddir@
296datadir = @datadir@
297datarootdir = @datarootdir@
298dlopen_libs = @dlopen_libs@
299docdir = @docdir@
300dvidir = @dvidir@
301edje_cc = @edje_cc@
302efl_doxygen = @efl_doxygen@
303efl_have_doxygen = @efl_have_doxygen@
304evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
305evas_engine_buffer_libs = @evas_engine_buffer_libs@
306evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
307evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
308evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
309evas_engine_directfb_libs = @evas_engine_directfb_libs@
310evas_engine_fb_cflags = @evas_engine_fb_cflags@
311evas_engine_fb_libs = @evas_engine_fb_libs@
312evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
313evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
314evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
315evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
316evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
317evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
318evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
319evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
320evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
321evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
322evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
323evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
324evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
325evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
326evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
327evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
328evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
329evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
330evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
331evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
332evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
333evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
334evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
335evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
336evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
337evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
338evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
339evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
340evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
341evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
342evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
343evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
344evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
345evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
346evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
347evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
348evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
349evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
350evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
351evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
352evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
353evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
354evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
355evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
356evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
357evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
358evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
359evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
360evas_image_loader_png_libs = @evas_image_loader_png_libs@
361evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
362evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
363evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
364evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
365evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
366evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
367evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
368evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
369evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
370evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
371evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
372evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
373exec_prefix = @exec_prefix@
374have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
375have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
376have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
377have_evas_engine_software_x11 = @have_evas_engine_software_x11@
378have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
379have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
380have_lcov = @have_lcov@
381host = @host@
382host_alias = @host_alias@
383host_cpu = @host_cpu@
384host_os = @host_os@
385host_vendor = @host_vendor@
386htmldir = @htmldir@
387includedir = @includedir@
388infodir = @infodir@
389install_sh = @install_sh@
390libdir = @libdir@
391libexecdir = @libexecdir@
392localedir = @localedir@
393localstatedir = @localstatedir@
394lt_ECHO = @lt_ECHO@
395lt_enable_auto_import = @lt_enable_auto_import@
396mandir = @mandir@
397mkdir_p = @mkdir_p@
398oldincludedir = @oldincludedir@
399pdfdir = @pdfdir@
400pkgconfig_requires_private = @pkgconfig_requires_private@
401prefix = @prefix@
402program_transform_name = @program_transform_name@
403psdir = @psdir@
404pthread_cflags = @pthread_cflags@
405pthread_libs = @pthread_libs@
406release_info = @release_info@
407requirement_evas = @requirement_evas@
408sbindir = @sbindir@
409sharedstatedir = @sharedstatedir@
410srcdir = @srcdir@
411sysconfdir = @sysconfdir@
412target_alias = @target_alias@
413top_build_prefix = @top_build_prefix@
414top_builddir = @top_builddir@
415top_srcdir = @top_srcdir@
416version_info = @version_info@
417MAINTAINERCLEANFILES = Makefile.in
418AM_CPPFLAGS = \
419-I. \
420-I$(top_srcdir)/src/lib \
421-I$(top_srcdir)/src/lib/include \
422-I$(top_srcdir)/src/modules/engines \
423@FREETYPE_CFLAGS@ \
424@PIXMAN_CFLAGS@ \
425@EINA_CFLAGS@ \
426@evas_engine_software_sdl_cflags@
427
428AM_CFLAGS = @WIN32_CFLAGS@
429@BUILD_ENGINE_SOFTWARE_SDL_TRUE@SOFTWARE_SDL_SOURCES = evas_engine.c
430@BUILD_ENGINE_SOFTWARE_SDL_TRUE@SOFTWARE_SDL_LIBADD = @evas_engine_software_sdl_libs@
431@BUILD_ENGINE_SOFTWARE_SDL_TRUE@includes_HEADERS = Evas_Engine_SDL.h
432@BUILD_ENGINE_SOFTWARE_SDL_TRUE@includesdir = $(includedir)/evas-@VMAJ@
433@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_sdl/$(MODULE_ARCH)
434@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@pkg_LTLIBRARIES = module.la
435@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@module_la_SOURCES = $(SOFTWARE_SDL_SOURCES)
436@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@module_la_LIBADD = $(top_builddir)/src/lib/libevas.la @EINA_LIBS@ $(SOFTWARE_SDL_LIBADD)
437@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@module_la_LDFLAGS = @lt_enable_auto_import@ -no-undefined -module -avoid-version
438@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
439@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_TRUE@noinst_LTLIBRARIES = libevas_engine_software_sdl.la
440@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_TRUE@libevas_engine_software_sdl_la_SOURCES = $(SOFTWARE_SDL_SOURCES)
441@BUILD_ENGINE_SOFTWARE_SDL_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_SDL_TRUE@libevas_engine_software_sdl_la_LIBADD = $(SOFTWARE_SDL_LIBADD)
442EXTRA_DIST = evas_engine.h
443all: all-am
444
445.SUFFIXES:
446.SUFFIXES: .c .lo .o .obj
447$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
448 @for dep in $?; do \
449 case '$(am__configure_deps)' in \
450 *$$dep*) \
451 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
452 && { if test -f $@; then exit 0; else break; fi; }; \
453 exit 1;; \
454 esac; \
455 done; \
456 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_sdl/Makefile'; \
457 $(am__cd) $(top_srcdir) && \
458 $(AUTOMAKE) --gnu src/modules/engines/software_sdl/Makefile
459.PRECIOUS: Makefile
460Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
461 @case '$?' in \
462 *config.status*) \
463 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
464 *) \
465 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
466 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
467 esac;
468
469$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
470 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
471
472$(top_srcdir)/configure: $(am__configure_deps)
473 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
474$(ACLOCAL_M4): $(am__aclocal_m4_deps)
475 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
476$(am__aclocal_m4_deps):
477
478clean-noinstLTLIBRARIES:
479 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
480 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
481 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
482 test "$$dir" != "$$p" || dir=.; \
483 echo "rm -f \"$${dir}/so_locations\""; \
484 rm -f "$${dir}/so_locations"; \
485 done
486install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
487 @$(NORMAL_INSTALL)
488 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
489 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
490 list2=; for p in $$list; do \
491 if test -f $$p; then \
492 list2="$$list2 $$p"; \
493 else :; fi; \
494 done; \
495 test -z "$$list2" || { \
496 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
497 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
498 }
499
500uninstall-pkgLTLIBRARIES:
501 @$(NORMAL_UNINSTALL)
502 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
503 for p in $$list; do \
504 $(am__strip_dir) \
505 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
506 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
507 done
508
509clean-pkgLTLIBRARIES:
510 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
511 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
512 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
513 test "$$dir" != "$$p" || dir=.; \
514 echo "rm -f \"$${dir}/so_locations\""; \
515 rm -f "$${dir}/so_locations"; \
516 done
517libevas_engine_software_sdl.la: $(libevas_engine_software_sdl_la_OBJECTS) $(libevas_engine_software_sdl_la_DEPENDENCIES)
518 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_software_sdl_la_rpath) $(libevas_engine_software_sdl_la_OBJECTS) $(libevas_engine_software_sdl_la_LIBADD) $(LIBS)
519module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
520 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
521
522mostlyclean-compile:
523 -rm -f *.$(OBJEXT)
524
525distclean-compile:
526 -rm -f *.tab.c
527
528@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
529@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
530
531.c.o:
532@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
533@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
534@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
535@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
536@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
537@am__fastdepCC_FALSE@ $(COMPILE) -c $<
538
539.c.obj:
540@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
541@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
542@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
543@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
544@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
545@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
546
547.c.lo:
548@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
549@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
550@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
551@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
552@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
553@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
554
555module_la-evas_engine.lo: evas_engine.c
556@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
557@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
558@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
559@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
560@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
561@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
562
563mostlyclean-libtool:
564 -rm -f *.lo
565
566clean-libtool:
567 -rm -rf .libs _libs
568install-includesHEADERS: $(includes_HEADERS)
569 @$(NORMAL_INSTALL)
570 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
571 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
572 for p in $$list; do \
573 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
574 echo "$$d$$p"; \
575 done | $(am__base_list) | \
576 while read files; do \
577 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
578 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
579 done
580
581uninstall-includesHEADERS:
582 @$(NORMAL_UNINSTALL)
583 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
584 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
585 test -n "$$files" || exit 0; \
586 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
587 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
588
589ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
590 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
591 unique=`for i in $$list; do \
592 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
593 done | \
594 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
595 END { if (nonempty) { for (i in files) print i; }; }'`; \
596 mkid -fID $$unique
597tags: TAGS
598
599TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
600 $(TAGS_FILES) $(LISP)
601 set x; \
602 here=`pwd`; \
603 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
604 unique=`for i in $$list; do \
605 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
606 done | \
607 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
608 END { if (nonempty) { for (i in files) print i; }; }'`; \
609 shift; \
610 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
611 test -n "$$unique" || unique=$$empty_fix; \
612 if test $$# -gt 0; then \
613 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
614 "$$@" $$unique; \
615 else \
616 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
617 $$unique; \
618 fi; \
619 fi
620ctags: CTAGS
621CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
622 $(TAGS_FILES) $(LISP)
623 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
624 unique=`for i in $$list; do \
625 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
626 done | \
627 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
628 END { if (nonempty) { for (i in files) print i; }; }'`; \
629 test -z "$(CTAGS_ARGS)$$unique" \
630 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
631 $$unique
632
633GTAGS:
634 here=`$(am__cd) $(top_builddir) && pwd` \
635 && $(am__cd) $(top_srcdir) \
636 && gtags -i $(GTAGS_ARGS) "$$here"
637
638distclean-tags:
639 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
640
641distdir: $(DISTFILES)
642 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
643 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
644 list='$(DISTFILES)'; \
645 dist_files=`for file in $$list; do echo $$file; done | \
646 sed -e "s|^$$srcdirstrip/||;t" \
647 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
648 case $$dist_files in \
649 */*) $(MKDIR_P) `echo "$$dist_files" | \
650 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
651 sort -u` ;; \
652 esac; \
653 for file in $$dist_files; do \
654 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
655 if test -d $$d/$$file; then \
656 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
657 if test -d "$(distdir)/$$file"; then \
658 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
659 fi; \
660 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
661 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
662 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
663 fi; \
664 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
665 else \
666 test -f "$(distdir)/$$file" \
667 || cp -p $$d/$$file "$(distdir)/$$file" \
668 || exit 1; \
669 fi; \
670 done
671check-am: all-am
672check: check-am
673all-am: Makefile $(LTLIBRARIES) $(HEADERS)
674installdirs:
675 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
676 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
677 done
678install: install-am
679install-exec: install-exec-am
680install-data: install-data-am
681uninstall: uninstall-am
682
683install-am: all-am
684 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
685
686installcheck: installcheck-am
687install-strip:
688 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
689 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
690 `test -z '$(STRIP)' || \
691 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
692mostlyclean-generic:
693
694clean-generic:
695
696distclean-generic:
697 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
698 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
699
700maintainer-clean-generic:
701 @echo "This command is intended for maintainers to use"
702 @echo "it deletes files that may require special tools to rebuild."
703 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
704clean: clean-am
705
706clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
707 clean-pkgLTLIBRARIES mostlyclean-am
708
709distclean: distclean-am
710 -rm -rf ./$(DEPDIR)
711 -rm -f Makefile
712distclean-am: clean-am distclean-compile distclean-generic \
713 distclean-tags
714
715dvi: dvi-am
716
717dvi-am:
718
719html: html-am
720
721html-am:
722
723info: info-am
724
725info-am:
726
727install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
728
729install-dvi: install-dvi-am
730
731install-dvi-am:
732
733install-exec-am:
734
735install-html: install-html-am
736
737install-html-am:
738
739install-info: install-info-am
740
741install-info-am:
742
743install-man:
744
745install-pdf: install-pdf-am
746
747install-pdf-am:
748
749install-ps: install-ps-am
750
751install-ps-am:
752
753installcheck-am:
754
755maintainer-clean: maintainer-clean-am
756 -rm -rf ./$(DEPDIR)
757 -rm -f Makefile
758maintainer-clean-am: distclean-am maintainer-clean-generic
759
760mostlyclean: mostlyclean-am
761
762mostlyclean-am: mostlyclean-compile mostlyclean-generic \
763 mostlyclean-libtool
764
765pdf: pdf-am
766
767pdf-am:
768
769ps: ps-am
770
771ps-am:
772
773uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
774
775.MAKE: install-am install-strip
776
777.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
778 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
779 ctags distclean distclean-compile distclean-generic \
780 distclean-libtool distclean-tags distdir dvi dvi-am html \
781 html-am info info-am install install-am install-data \
782 install-data-am install-dvi install-dvi-am install-exec \
783 install-exec-am install-html install-html-am \
784 install-includesHEADERS install-info install-info-am \
785 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
786 install-ps install-ps-am install-strip installcheck \
787 installcheck-am installdirs maintainer-clean \
788 maintainer-clean-generic mostlyclean mostlyclean-compile \
789 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
790 tags uninstall uninstall-am uninstall-includesHEADERS \
791 uninstall-pkgLTLIBRARIES
792
793
794# Tell versions [3.59,3.63) of GNU make to not export all variables.
795# Otherwise a system limit (for SysV at least) may be exceeded.
796.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_sdl/evas_engine.c b/libraries/evas/src/modules/engines/software_sdl/evas_engine.c
new file mode 100644
index 0000000..22c11b0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_sdl/evas_engine.c
@@ -0,0 +1,1218 @@
1#include <assert.h>
2#include <math.h>
3#include <string.h>
4#include <sys/time.h>
5#include <time.h>
6#include <SDL/SDL.h>
7
8#include "evas_common.h" /* Also includes international specific stuff */
9#include "evas_engine.h"
10
11int _evas_engine_soft_sdl_log_dom = -1;
12/* #define DEBUG_SDL */
13
14static Evas_Func func, pfunc;
15
16static void* _sdl_output_setup (int w, int h, int fullscreen, int noframe, int alpha, int hwsurface);
17
18static Engine_Image_Entry *_sdl_image_alloc (void);
19static void _sdl_image_delete (Engine_Image_Entry *eim);
20
21static int _sdl_image_constructor (Engine_Image_Entry*, void* data);
22static void _sdl_image_destructor (Engine_Image_Entry *eim);
23
24static void _sdl_image_dirty_region(Engine_Image_Entry *eim, unsigned int x, unsigned int y, unsigned int w, unsigned int h);
25
26static int _sdl_image_dirty (Engine_Image_Entry *dst, const Engine_Image_Entry *src);
27
28static int _sdl_image_size_set (Engine_Image_Entry *dst, const Engine_Image_Entry *src);
29
30static int _sdl_image_update_data (Engine_Image_Entry* dst, void* engine_data);
31
32static void _sdl_image_load (Engine_Image_Entry *eim, const Image_Entry* im);
33static int _sdl_image_mem_size_get(Engine_Image_Entry *eim);
34
35#ifdef DEBUG_SDL
36static void _sdl_image_debug (const char* context, Engine_Image_Entry* im);
37#endif
38
39static const Evas_Cache_Engine_Image_Func _sdl_cache_engine_image_cb = {
40 NULL /* key */,
41 _sdl_image_alloc /* alloc */,
42 _sdl_image_delete /* dealloc */,
43 _sdl_image_constructor /* constructor */,
44 _sdl_image_destructor /* destructor */,
45 _sdl_image_dirty_region /* dirty_region */,
46 _sdl_image_dirty /* dirty */,
47 _sdl_image_size_set /* size_set */,
48 _sdl_image_update_data /* update_data */,
49 _sdl_image_load /* load */,
50 _sdl_image_mem_size_get /* mem_size_get */,
51#ifdef DEBUG_SDL /* debug */
52 _sdl_image_debug
53#else
54 NULL
55#endif
56};
57
58#define _SDL_UPDATE_PIXELS(EIM) \
59 ((RGBA_Image *) EIM->cache_entry.src)->image.data = EIM->surface->pixels;
60
61#define RMASK 0x00ff0000
62#define GMASK 0x0000ff00
63#define BMASK 0x000000ff
64#define AMASK 0xff000000
65
66/* SDL engine info function */
67static void*
68evas_engine_sdl_info (Evas* e __UNUSED__)
69{
70 Evas_Engine_Info_SDL* info;
71 info = calloc(1, sizeof (Evas_Engine_Info_SDL));
72 if (!info) return NULL;
73 info->magic.magic = rand();
74 return info;
75}
76
77static void
78evas_engine_sdl_info_free (Evas* e __UNUSED__, void* info)
79{
80 Evas_Engine_Info_SDL* in;
81 in = (Evas_Engine_Info_SDL*) info;
82 free(in);
83}
84
85/* SDL engine output manipulation function */
86static int
87evas_engine_sdl_setup (Evas* e, void* in)
88{
89 Evas_Engine_Info_SDL* info = (Evas_Engine_Info_SDL*) in;
90
91 /* if we arent set to sdl, why the hell do we get called?! */
92 if (evas_output_method_get(e) != evas_render_method_lookup("software_sdl"))
93 return 0;
94
95 SDL_Init(SDL_INIT_NOPARACHUTE);
96
97 if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
98 {
99 ERR("SDL_Init failed with %s", SDL_GetError());
100 SDL_Quit();
101 return 0;
102 }
103
104 /* lets just set up */
105 e->engine.data.output = _sdl_output_setup(e->output.w, e->output.h,
106 info->info.fullscreen,
107 info->info.noframe,
108 info->info.alpha,
109 info->info.hwsurface);
110
111 if (!e->engine.data.output)
112 return 0;
113
114 e->engine.func = &func;
115 e->engine.data.context = e->engine.func->context_new(e->engine.data.output);
116
117 return 1;
118}
119
120static void
121evas_engine_sdl_output_free (void *data)
122{
123 Render_Engine* re = data;
124
125 if (re->tb)
126 evas_common_tilebuf_free(re->tb);
127 if (re->rects)
128 evas_common_tilebuf_free_render_rects(re->rects);
129 if (re->rgba_engine_image)
130 evas_cache_engine_image_drop(&re->rgba_engine_image->cache_entry);
131 if (re->cache)
132 evas_cache_engine_image_shutdown(re->cache);
133
134 if (re->update_rects)
135 free(re->update_rects);
136 free(re);
137
138 evas_common_font_shutdown();
139 evas_common_image_shutdown();
140
141 SDL_QuitSubSystem(SDL_INIT_VIDEO);
142}
143
144static void
145evas_engine_sdl_output_resize (void *data, int w, int h)
146{
147 /* FIXME */
148 Render_Engine *re = data;
149 SDL_Surface *surface;
150
151 if (w == re->tb->outbuf_w && h == re->tb->outbuf_h)
152 return;
153
154 /* Destroy the current screen */
155 evas_cache_engine_image_drop(&re->rgba_engine_image->cache_entry);
156
157 /* Rebuil tilebuf */
158 evas_common_tilebuf_free(re->tb);
159 re->tb = evas_common_tilebuf_new(w, h);
160 if (re->tb)
161 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
162
163 /* Build the new screen */
164 surface = SDL_SetVideoMode(w, h, 32,
165 (re->flags.hwsurface ? SDL_HWSURFACE : SDL_SWSURFACE)
166 | (re->flags.fullscreen ? SDL_FULLSCREEN : 0)
167 | (re->flags.noframe ? SDL_NOFRAME : 0)
168 | (re->flags.alpha ? SDL_SRCALPHA : 0));
169
170 if (!surface)
171 {
172 ERR("Unable to change the resolution to : %ix%i", w, h);
173 exit(-1);
174 }
175 re->rgba_engine_image = (SDL_Engine_Image_Entry *) evas_cache_engine_image_engine(re->cache, surface);
176 if (!re->rgba_engine_image)
177 {
178 ERR("RGBA_Image allocation from SDL failed");
179 exit(-1);
180 }
181
182 SDL_FillRect(surface, NULL, 0);
183}
184
185static void
186evas_engine_sdl_output_tile_size_set (void *data, int w, int h)
187{
188 Render_Engine* re = (Render_Engine*) data;
189
190 evas_common_tilebuf_set_tile_size(re->tb, w, h);
191}
192
193static void
194evas_engine_sdl_output_redraws_rect_add (void *data, int x, int y, int w, int h)
195{
196 Render_Engine* re = (Render_Engine*) data;
197
198 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
199}
200
201static void
202evas_engine_sdl_output_redraws_rect_del (void *data, int x, int y, int w, int h)
203{
204 Render_Engine* re = (Render_Engine*) data;
205
206 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
207}
208
209static void
210evas_engine_sdl_output_redraws_clear (void *data)
211{
212 Render_Engine* re = (Render_Engine*) data;
213
214 evas_common_tilebuf_clear(re->tb);
215}
216
217static void*
218evas_engine_sdl_output_redraws_next_update_get (void *data,
219 int *x, int *y, int *w, int *h,
220 int *cx, int *cy, int *cw, int *ch)
221{
222 Render_Engine *re = data;
223 Tilebuf_Rect *tb_rect;
224 SDL_Rect rect;
225
226 if (re->flags.end)
227 {
228 re->flags.end = 0;
229 return NULL;
230 }
231 if (!re->rects)
232 {
233 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
234 re->cur_rect = EINA_INLIST_GET(re->rects);
235 }
236 if (!re->cur_rect)
237 {
238 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
239 re->rects = NULL;
240 return NULL;
241 }
242
243 tb_rect = (Tilebuf_Rect*) re->cur_rect;
244 *cx = *x = tb_rect->x;
245 *cy = *y = tb_rect->y;
246 *cw = *w = tb_rect->w;
247 *ch = *h = tb_rect->h;
248 re->cur_rect = re->cur_rect->next;
249 if (!re->cur_rect)
250 {
251 evas_common_tilebuf_free_render_rects(re->rects);
252 re->rects = NULL;
253 re->flags.end = 1;
254 }
255
256 rect.x = *x;
257 rect.y = *y;
258 rect.w = *w;
259 rect.h = *h;
260
261 /* Return the "fake" surface so it is passed to the drawing routines. */
262 return re->rgba_engine_image;
263}
264
265static void
266evas_engine_sdl_output_redraws_next_update_push (void *data, void *surface __UNUSED__,
267 int x, int y, int w, int h)
268{
269 Render_Engine *re = (Render_Engine *) data;
270
271 if (re->update_rects_count + 1 > re->update_rects_limit)
272 {
273 re->update_rects_limit += 8;
274 re->update_rects = realloc(re->update_rects, sizeof (SDL_Rect) * re->update_rects_limit);
275 }
276
277 re->update_rects[re->update_rects_count].x = x;
278 re->update_rects[re->update_rects_count].y = y;
279 re->update_rects[re->update_rects_count].w = w;
280 re->update_rects[re->update_rects_count].h = h;
281
282 ++re->update_rects_count;
283
284 evas_common_cpu_end_opt();
285}
286
287static void
288_sdl_image_dirty_region(Engine_Image_Entry *eim, unsigned int x, unsigned int y, unsigned int w, unsigned int h)
289{
290 SDL_Engine_Image_Entry *dst;
291 RGBA_Image *im;
292
293 dst = (SDL_Engine_Image_Entry *) eim;
294
295 SDL_UpdateRect(dst->surface, x, y, w, h);
296
297 im = (RGBA_Image *)eim->src;
298 im->flags |= RGBA_IMAGE_IS_DIRTY;
299}
300
301static void
302evas_engine_sdl_output_flush(void *data)
303{
304 Render_Engine *re = (Render_Engine *) data;
305
306 if (re->update_rects_count > 0)
307 SDL_UpdateRects(re->rgba_engine_image->surface, re->update_rects_count, re->update_rects);
308
309 re->update_rects_count = 0;
310}
311
312
313static void
314evas_engine_sdl_output_idle_flush(void *data)
315{
316 (void) data;
317}
318
319/*
320 * Image objects
321 */
322
323static void*
324evas_engine_sdl_image_load(void *data, const char *file, const char *key, int *error, Evas_Image_Load_Opts *lo)
325{
326 Render_Engine* re = (Render_Engine*) data;;
327
328 *error = 0;
329 return evas_cache_engine_image_request(re->cache, file, key, lo, NULL, error);
330}
331
332static int
333evas_engine_sdl_image_alpha_get(void *data __UNUSED__, void *image)
334{
335 SDL_Engine_Image_Entry *eim = image;
336 RGBA_Image *im;
337
338 if (!eim) return 1;
339 im = (RGBA_Image *) eim->cache_entry.src;
340 switch (eim->cache_entry.src->space)
341 {
342 case EVAS_COLORSPACE_ARGB8888:
343 if (im->cache_entry.flags.alpha) return 1;
344 default:
345 break;
346 }
347 return 0;
348}
349
350static void
351evas_engine_sdl_image_size_get(void *data __UNUSED__, void *image, int *w, int *h)
352{
353 SDL_Engine_Image_Entry *eim;
354
355 eim = image;
356 if (w) *w = eim->cache_entry.src->w;
357 if (h) *h = eim->cache_entry.src->h;
358}
359
360static int
361evas_engine_sdl_image_colorspace_get(void *data __UNUSED__, void *image)
362{
363 SDL_Engine_Image_Entry *eim = image;
364
365 if (!eim) return EVAS_COLORSPACE_ARGB8888;
366 return eim->cache_entry.src->space;
367}
368
369static void
370evas_engine_sdl_image_colorspace_set(void *data __UNUSED__, void *image, int cspace)
371{
372 SDL_Engine_Image_Entry *eim = image;
373
374 if (!eim) return;
375 if (eim->cache_entry.src->space == cspace) return;
376
377 evas_cache_engine_image_colorspace(&eim->cache_entry, cspace, NULL);
378}
379
380static void*
381evas_engine_sdl_image_new_from_copied_data(void *data,
382 int w, int h,
383 DATA32* image_data,
384 int alpha, int cspace)
385{
386 Render_Engine *re = (Render_Engine*) data;
387
388 return evas_cache_engine_image_copied_data(re->cache, w, h, image_data, alpha, cspace, NULL);
389}
390
391static void*
392evas_engine_sdl_image_new_from_data(void *data, int w, int h, DATA32* image_data, int alpha, int cspace)
393{
394 Render_Engine *re = (Render_Engine*) data;
395
396 return evas_cache_engine_image_data(re->cache, w, h, image_data, alpha, cspace, NULL);
397}
398
399static void
400evas_engine_sdl_image_free(void *data, void *image)
401{
402 SDL_Engine_Image_Entry *eim = image;
403
404 (void) data;
405
406 evas_cache_engine_image_drop(&eim->cache_entry);
407}
408
409static void*
410evas_engine_sdl_image_size_set(void *data, void *image, int w, int h)
411{
412 SDL_Engine_Image_Entry *eim = image;
413
414 (void) data;
415
416 return evas_cache_engine_image_size_set(&eim->cache_entry, w, h);
417}
418
419static void*
420evas_engine_sdl_image_dirty_region(void *data,
421 void *image,
422 int x, int y, int w, int h)
423{
424 SDL_Engine_Image_Entry *eim = image;
425
426 (void) data;
427
428 return evas_cache_engine_image_dirty(&eim->cache_entry, x, y, w, h);
429}
430
431static void*
432evas_engine_sdl_image_data_get(void *data, void *image,
433 int to_write, DATA32** image_data, int *err)
434{
435 SDL_Engine_Image_Entry *eim = image;
436 RGBA_Image *im;
437
438 (void) data;
439
440 if (!eim)
441 {
442 *image_data = NULL;
443 if (err) *err = EVAS_LOAD_ERROR_GENERIC;
444 return NULL;
445 }
446 im = (RGBA_Image *) eim->cache_entry.src;
447
448 switch (eim->cache_entry.src->space)
449 {
450 case EVAS_COLORSPACE_ARGB8888:
451 if (to_write)
452 eim = (SDL_Engine_Image_Entry *) evas_cache_engine_image_dirty(&eim->cache_entry, 0, 0, eim->cache_entry.src->w, eim->cache_entry.src->h);
453
454 evas_cache_engine_image_load_data(&eim->cache_entry);
455 *image_data = im->image.data;
456 break;
457 case EVAS_COLORSPACE_YCBCR422P709_PL:
458 case EVAS_COLORSPACE_YCBCR422P601_PL:
459 case EVAS_COLORSPACE_YCBCR422601_PL:
460 *image_data = im->cs.data;
461 break;
462 default:
463 abort();
464 break;
465 }
466 if (err) *err = EVAS_LOAD_ERROR_NONE;
467 return eim;
468}
469
470static void*
471evas_engine_sdl_image_data_put(void *data, void *image, DATA32* image_data)
472{
473 SDL_Engine_Image_Entry *eim = image;
474 Render_Engine *re = data;
475 RGBA_Image *im;
476
477 if (!eim) return NULL;
478 im = (RGBA_Image*) eim->cache_entry.src;
479
480 switch (eim->cache_entry.src->space)
481 {
482 case EVAS_COLORSPACE_ARGB8888:
483 if (image_data != im->image.data)
484 {
485 evas_cache_engine_image_drop(&eim->cache_entry);
486 eim = (SDL_Engine_Image_Entry *) evas_cache_engine_image_data(re->cache,
487 eim->cache_entry.w, eim->cache_entry.h,
488 image_data,
489 func.image_alpha_get(data, eim),
490 func.image_colorspace_get(data, eim),
491 NULL);
492 }
493 break;
494 case EVAS_COLORSPACE_YCBCR422P601_PL:
495 case EVAS_COLORSPACE_YCBCR422P709_PL:
496 case EVAS_COLORSPACE_YCBCR422601_PL:
497 if (image_data != im->cs.data)
498 {
499 if (im->cs.data)
500 if (!im->cs.no_free)
501 free(im->cs.data);
502 im->cs.data = image_data;
503 evas_common_image_colorspace_dirty(im);
504 }
505 break;
506 default:
507 abort();
508 break;
509 }
510 return eim;
511}
512
513static void
514evas_engine_sdl_image_data_preload_request(void *data __UNUSED__, void *image, const void *target)
515{
516 SDL_Engine_Image_Entry *eim = image;
517 RGBA_Image *im;
518
519 if (!eim) return ;
520 im = (RGBA_Image*) eim->cache_entry.src;
521 if (!im) return ;
522 evas_cache_image_preload_data(&im->cache_entry, target);
523}
524
525static void
526evas_engine_sdl_image_data_preload_cancel(void *data __UNUSED__, void *image, const void *target)
527{
528 SDL_Engine_Image_Entry *eim = image;
529 RGBA_Image *im;
530
531 if (!eim) return ;
532 im = (RGBA_Image*) eim->cache_entry.src;
533 if (!im) return ;
534 evas_cache_image_preload_cancel(&im->cache_entry, target);
535}
536
537static void*
538evas_engine_sdl_image_alpha_set(void *data, void *image, int has_alpha)
539{
540 SDL_Engine_Image_Entry *eim = image;
541 RGBA_Image *im;
542
543 (void) data;
544
545 if (!eim) return NULL;
546
547 im = (RGBA_Image *) eim->cache_entry.src;
548
549 if (eim->cache_entry.src->space != EVAS_COLORSPACE_ARGB8888)
550 {
551 im->cache_entry.flags.alpha = 0;
552 return eim;
553 }
554
555 eim = (SDL_Engine_Image_Entry *) evas_cache_engine_image_dirty(&eim->cache_entry, 0, 0, eim->cache_entry.w, eim->cache_entry.h);
556
557 /* FIXME: update SDL_Surface flags */
558 im->cache_entry.flags.alpha = has_alpha ? 1 : 0;
559 return eim;
560}
561
562static void*
563evas_engine_sdl_image_border_set(void *data __UNUSED__, void *image, int l __UNUSED__, int r __UNUSED__, int t __UNUSED__, int b __UNUSED__)
564{
565 return image;
566}
567
568static void
569evas_engine_sdl_image_border_get(void *data __UNUSED__, void *image __UNUSED__, int *l __UNUSED__, int *r __UNUSED__, int *t __UNUSED__, int *b __UNUSED__)
570{
571 /* FIXME: need to know what evas expect from this call */
572}
573
574static void
575evas_engine_sdl_image_draw(void *data, void *context, void *surface, void *image,
576 int src_region_x, int src_region_y, int src_region_w, int src_region_h,
577 int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h,
578 int smooth)
579{
580 SDL_Engine_Image_Entry *eim = image;
581 SDL_Engine_Image_Entry *dst = surface;
582 RGBA_Draw_Context *dc = (RGBA_Draw_Context*) context;
583 int mustlock_im = 0;
584 int mustlock_dst = 0;
585
586 (void) data;
587
588 if (eim->cache_entry.src->space == EVAS_COLORSPACE_ARGB8888)
589 evas_cache_engine_image_load_data(&eim->cache_entry);
590
591 /* Fallback to software method */
592 if (SDL_MUSTLOCK(dst->surface))
593 {
594 mustlock_dst = 1;
595 SDL_LockSurface(dst->surface);
596 _SDL_UPDATE_PIXELS(dst);
597 }
598
599 if (eim->surface && SDL_MUSTLOCK(eim->surface))
600 {
601 mustlock_im = 1;
602 SDL_LockSurface(eim->surface);
603 _SDL_UPDATE_PIXELS(eim);
604 }
605
606 evas_common_image_colorspace_normalize((RGBA_Image *) eim->cache_entry.src);
607
608 if (smooth)
609 evas_common_scale_rgba_in_to_out_clip_smooth((RGBA_Image *) eim->cache_entry.src,
610 (RGBA_Image *) dst->cache_entry.src,
611 dc,
612 src_region_x, src_region_y, src_region_w, src_region_h,
613 dst_region_x, dst_region_y, dst_region_w, dst_region_h);
614 else
615 evas_common_scale_rgba_in_to_out_clip_sample((RGBA_Image *) eim->cache_entry.src,
616 (RGBA_Image *) dst->cache_entry.src,
617 dc,
618 src_region_x, src_region_y, src_region_w, src_region_h,
619 dst_region_x, dst_region_y, dst_region_w, dst_region_h);
620 evas_common_cpu_end_opt ();
621
622 if (mustlock_im)
623 SDL_UnlockSurface(eim->surface);
624
625 if (mustlock_dst)
626 SDL_UnlockSurface(dst->surface);
627}
628
629static void
630evas_engine_sdl_image_map_draw(void *data __UNUSED__, void *context, void *surface, void *image, int npoints, RGBA_Map_Point *p, int smooth, int level)
631{
632 SDL_Engine_Image_Entry *eim = image;
633 SDL_Engine_Image_Entry *dst = surface;
634 int mustlock_im = 0;
635 int mustlock_dst = 0;
636
637 if (!eim || !dst) return;
638
639 if (SDL_MUSTLOCK(dst->surface))
640 {
641 mustlock_dst = 1;
642 SDL_LockSurface(dst->surface);
643 _SDL_UPDATE_PIXELS(dst);
644 }
645
646 if (eim->surface && SDL_MUSTLOCK(eim->surface))
647 {
648 mustlock_im = 1;
649 SDL_LockSurface(eim->surface);
650 _SDL_UPDATE_PIXELS(eim);
651 }
652
653 evas_common_map_rgba((RGBA_Image*) eim->cache_entry.src,
654 (RGBA_Image*) dst->cache_entry.src, context, npoints, p, smooth, level);
655 evas_common_cpu_end_opt();
656
657 if (mustlock_im)
658 SDL_UnlockSurface(eim->surface);
659
660 if (mustlock_dst)
661 SDL_UnlockSurface(dst->surface);
662}
663
664static void *
665evas_engine_sdl_image_map_surface_new(void *data, int w, int h, int alpha)
666{
667 Render_Engine *re = (Render_Engine*) data;
668 void *surface;
669
670 surface = evas_cache_engine_image_copied_data(re->cache,
671 w, h, NULL, alpha,
672 EVAS_COLORSPACE_ARGB8888,
673 NULL);
674 return surface;
675}
676
677static void
678evas_engine_sdl_image_map_surface_free(void *data __UNUSED__, void *surface)
679{
680 evas_cache_engine_image_drop(surface);
681}
682
683static void
684evas_engine_sdl_image_scale_hint_set(void *data __UNUSED__, void *image, int hint)
685{
686 SDL_Engine_Image_Entry *eim;
687
688 if (!image) return ;
689 eim = image;
690 eim->cache_entry.src->scale_hint = hint;
691}
692
693static int
694evas_engine_sdl_image_scale_hint_get(void *data __UNUSED__, void *image)
695{
696 SDL_Engine_Image_Entry *eim;
697
698 if (!image) return EVAS_IMAGE_SCALE_HINT_NONE;
699 eim = image;
700 return eim->cache_entry.src->scale_hint;
701}
702
703static void
704evas_engine_sdl_image_cache_flush(void *data)
705{
706 Render_Engine *re = (Render_Engine*) data;
707 int size;
708
709 size = evas_cache_engine_image_get(re->cache);
710 evas_cache_engine_image_set(re->cache, 0);
711 evas_cache_engine_image_set(re->cache, size);
712}
713
714static void
715evas_engine_sdl_image_cache_set(void *data, int bytes)
716{
717 Render_Engine *re = (Render_Engine*) data;
718
719 evas_cache_engine_image_set(re->cache, bytes);
720}
721
722static int
723evas_engine_sdl_image_cache_get(void *data)
724{
725 Render_Engine *re = (Render_Engine*) data;
726
727 return evas_cache_engine_image_get(re->cache);
728}
729
730static char*
731evas_engine_sdl_image_comment_get(void *data __UNUSED__, void *image, char *key __UNUSED__)
732{
733 SDL_Engine_Image_Entry *eim = image;
734 RGBA_Image *im;
735
736 if (!eim) return NULL;
737 im = (RGBA_Image *) eim->cache_entry.src;
738
739 return im->info.comment;
740}
741
742static char*
743evas_engine_sdl_image_format_get(void *data __UNUSED__, void *image __UNUSED__)
744{
745 /* FIXME: need to know what evas expect from this call */
746 return NULL;
747}
748
749static void
750evas_engine_sdl_font_draw(void *data __UNUSED__, void *context, void *surface, void *font, int x, int y, int w __UNUSED__, int h __UNUSED__, int ow __UNUSED__, int oh __UNUSED__, const Evas_Text_Props *intl_props)
751{
752 SDL_Engine_Image_Entry *eim = surface;
753 int mustlock_im = 0;
754
755 if (eim->surface && SDL_MUSTLOCK(eim->surface))
756 {
757 mustlock_im = 1;
758 SDL_LockSurface(eim->surface);
759 _SDL_UPDATE_PIXELS(eim);
760 }
761
762 evas_common_font_draw((RGBA_Image *) eim->cache_entry.src, context, font, x, y, intl_props);
763 evas_common_cpu_end_opt();
764
765 if (mustlock_im)
766 SDL_UnlockSurface(eim->surface);
767}
768
769static void
770evas_engine_sdl_line_draw(void *data __UNUSED__, void *context, void *surface, int x1, int y1, int x2, int y2)
771{
772 SDL_Engine_Image_Entry *eim = surface;
773 int mustlock_im = 0;
774
775 if (eim->surface && SDL_MUSTLOCK(eim->surface))
776 {
777 mustlock_im = 1;
778 SDL_LockSurface(eim->surface);
779 _SDL_UPDATE_PIXELS(eim);
780 }
781
782 evas_common_line_draw((RGBA_Image *) eim->cache_entry.src, context, x1, y1, x2, y2);
783 evas_common_cpu_end_opt();
784
785 if (mustlock_im)
786 SDL_UnlockSurface(eim->surface);
787}
788
789static void
790evas_engine_sdl_rectangle_draw(void *data __UNUSED__, void *context, void *surface, int x, int y, int w, int h)
791{
792 SDL_Engine_Image_Entry *eim = surface;
793#if ENGINE_SDL_PRIMITIVE
794 RGBA_Draw_Context *dc = context;
795#endif
796 int mustlock_im = 0;
797
798#if ENGINE_SDL_PRIMITIVE
799 if (A_VAL(&dc->col.col) != 0x00)
800 {
801 if (A_VAL(&dc->col.col) != 0xFF)
802 {
803#endif
804 if (eim->surface && SDL_MUSTLOCK(eim->surface))
805 {
806 mustlock_im = 1;
807 SDL_LockSurface(eim->surface);
808 _SDL_UPDATE_PIXELS(eim);
809 }
810
811 evas_common_rectangle_draw((RGBA_Image *) eim->cache_entry.src, context, x, y, w, h);
812 evas_common_cpu_end_opt();
813
814 if (mustlock_im)
815 SDL_UnlockSurface(eim->surface);
816#if ENGINE_SDL_PRIMITIVE
817 }
818 else
819 {
820 SDL_Rect dstrect;
821
822 if (dc->clip.use)
823 {
824 SDL_Rect cliprect;
825
826 cliprect.x = dc->clip.x;
827 cliprect.y = dc->clip.y;
828 cliprect.w = dc->clip.w;
829 cliprect.h = dc->clip.h;
830
831 SDL_SetClipRect(eim->surface, &cliprect);
832 }
833
834 dstrect.x = x;
835 dstrect.y = y;
836 dstrect.w = w;
837 dstrect.h = h;
838
839 SDL_FillRect(eim->surface, &dstrect, SDL_MapRGBA(eim->surface->format, R_VAL(&dc->col.col), G_VAL(&dc->col.col), B_VAL(&dc->col.col), 0xFF));
840
841 if (dc->clip.use)
842 SDL_SetClipRect(eim->surface, NULL);
843 }
844 }
845#endif
846}
847
848static void
849evas_engine_sdl_polygon_draw(void *data __UNUSED__, void *context, void *surface, void *polygon, int x, int y)
850{
851 SDL_Engine_Image_Entry *eim = surface;
852 int mustlock_im = 0;
853
854 if (eim->surface && SDL_MUSTLOCK(eim->surface))
855 {
856 mustlock_im = 1;
857 SDL_LockSurface(eim->surface);
858 _SDL_UPDATE_PIXELS(eim);
859 }
860
861 evas_common_polygon_draw((RGBA_Image *) eim->cache_entry.src, context, polygon, x, y);
862 evas_common_cpu_end_opt();
863
864 if (mustlock_im)
865 SDL_UnlockSurface(eim->surface);
866}
867
868static int module_open(Evas_Module *em)
869{
870 if (!em) return 0;
871 /* get whatever engine module we inherit from */
872 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
873 _evas_engine_soft_sdl_log_dom = eina_log_domain_register
874 ("evas-software_sdl", EVAS_DEFAULT_LOG_COLOR);
875 if (_evas_engine_soft_sdl_log_dom < 0)
876 {
877 EINA_LOG_ERR("Can not create a module log domain.");
878 return 0;
879 }
880 /* store it for later use */
881 func = pfunc;
882 /* now to override methods */
883#define ORD(f) EVAS_API_OVERRIDE(f, &func, evas_engine_sdl_)
884 ORD(info);
885 ORD(info_free);
886 ORD(setup);
887 ORD(output_free);
888 ORD(output_resize);
889 ORD(output_tile_size_set);
890 ORD(output_redraws_rect_add);
891 ORD(output_redraws_rect_del);
892 ORD(output_redraws_clear);
893 ORD(output_redraws_next_update_get);
894 ORD(output_redraws_next_update_push);
895 ORD(output_flush);
896 ORD(output_idle_flush);
897 ORD(image_load);
898 ORD(image_new_from_data);
899 ORD(image_new_from_copied_data);
900 ORD(image_colorspace_set);
901 ORD(image_colorspace_get);
902 ORD(image_free);
903 ORD(image_size_set);
904 ORD(image_size_get);
905 ORD(image_dirty_region);
906 ORD(image_data_get);
907 ORD(image_data_put);
908 ORD(image_data_preload_request);
909 ORD(image_data_preload_cancel);
910 ORD(image_alpha_set);
911 ORD(image_alpha_get);
912 ORD(image_border_set);
913 ORD(image_border_get);
914 ORD(image_draw);
915 ORD(image_map_draw);
916 ORD(image_map_surface_new);
917 ORD(image_map_surface_free);
918 ORD(image_comment_get);
919 ORD(image_format_get);
920 ORD(image_cache_flush);
921 ORD(image_cache_set);
922 ORD(image_cache_get);
923 ORD(font_draw);
924 ORD(line_draw);
925 ORD(rectangle_draw);
926 ORD(polygon_draw);
927
928 ORD(image_scale_hint_set);
929 ORD(image_scale_hint_get);
930
931 /* now advertise out own api */
932 em->functions = (void *)(&func);
933 return 1;
934}
935
936static void module_close(Evas_Module *em __UNUSED__)
937{
938 eina_log_domain_unregister(_evas_engine_soft_sdl_log_dom);
939}
940
941static Evas_Module_Api evas_modapi =
942{
943 EVAS_MODULE_API_VERSION,
944 "software_sdl",
945 "none",
946 {
947 module_open,
948 module_close
949 }
950};
951
952EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_sdl);
953
954#ifndef EVAS_STATIC_BUILD_SOFTWARE_SDL
955EVAS_EINA_MODULE_DEFINE(engine, software_sdl);
956#endif
957
958/* Private routines. */
959
960static void*
961_sdl_output_setup (int w, int h, int fullscreen, int noframe, int alpha, int hwsurface)
962{
963 Render_Engine *re = calloc(1, sizeof(Render_Engine));
964 SDL_Surface *surface;
965
966 if (!re)
967 return NULL;
968
969 /* if we haven't initialized - init (automatic abort if already done) */
970 evas_common_cpu_init();
971 evas_common_blend_init();
972 evas_common_image_init();
973 evas_common_convert_init();
974 evas_common_scale_init();
975 evas_common_rectangle_init();
976 evas_common_polygon_init();
977 evas_common_line_init();
978 evas_common_font_init();
979 evas_common_draw_init();
980 evas_common_tilebuf_init();
981
982 if (w <= 0) w = 640;
983 if (h <= 0) h = 480;
984
985 re->cache = evas_cache_engine_image_init(&_sdl_cache_engine_image_cb, evas_common_image_cache_get());
986 if (!re->cache)
987 {
988 ERR("Evas_Cache_Engine_Image allocation failed!");
989 free (re);
990 return NULL;
991 }
992
993 re->tb = evas_common_tilebuf_new(w, h);
994 /* in preliminary tests 16x16 gave highest framerates */
995 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
996 surface = SDL_SetVideoMode(w, h, 32,
997 (hwsurface ? SDL_HWSURFACE : SDL_SWSURFACE)
998 | (fullscreen ? SDL_FULLSCREEN : 0)
999 | (noframe ? SDL_NOFRAME : 0)
1000 | (alpha ? SDL_SRCALPHA : 0));
1001
1002 if (!surface)
1003 {
1004 ERR("SDL_SetVideoMode [ %i x %i x 32 ] failed.", w, h);
1005 evas_cache_engine_image_shutdown(re->cache);
1006 free (re);
1007 return NULL;
1008 }
1009
1010 SDL_SetAlpha(surface, SDL_SRCALPHA | SDL_RLEACCEL, 0);
1011
1012 /* We create a "fake" RGBA_Image which points to the SDL surface. Each access
1013 * to that surface is wrapped in Lock / Unlock calls whenever the data is
1014 * manipulated directly. */
1015 re->rgba_engine_image = (SDL_Engine_Image_Entry *) evas_cache_engine_image_engine(re->cache, surface);
1016 if (!re->rgba_engine_image)
1017 {
1018 CRIT("RGBA_Image allocation from SDL failed");
1019 evas_cache_engine_image_shutdown(re->cache);
1020 free (re);
1021 return NULL;
1022 }
1023
1024 SDL_FillRect(surface, NULL, 0);
1025
1026 re->flags.alpha = alpha;
1027 re->flags.hwsurface = hwsurface;
1028 re->flags.fullscreen = fullscreen;
1029 re->flags.noframe = noframe;
1030 return re;
1031}
1032
1033static Engine_Image_Entry*
1034_sdl_image_alloc(void)
1035{
1036 SDL_Engine_Image_Entry *new;
1037
1038 new = calloc(1, sizeof (SDL_Engine_Image_Entry));
1039
1040 return (Engine_Image_Entry *) new;
1041}
1042
1043static void
1044_sdl_image_delete(Engine_Image_Entry *eim)
1045{
1046 free(eim);
1047}
1048
1049static int
1050_sdl_image_constructor(Engine_Image_Entry *ie, void *data __UNUSED__)
1051{
1052 SDL_Surface *sdl = NULL;
1053 SDL_Engine_Image_Entry *eim = (SDL_Engine_Image_Entry *) ie;
1054 RGBA_Image *im;
1055
1056 im = (RGBA_Image *) ie->src;
1057
1058 if (im)
1059 {
1060 evas_cache_image_load_data(&im->cache_entry);
1061
1062 if (im->image.data)
1063 {
1064 /* FIXME: Take care of CSPACE */
1065 sdl = SDL_CreateRGBSurfaceFrom(im->image.data,
1066 ie->w, ie->h,
1067 32, ie->w * 4,
1068 RMASK, GMASK, BMASK, AMASK);
1069 eim->surface = sdl;
1070 eim->flags.engine_surface = 0;
1071 }
1072 }
1073
1074 return EVAS_LOAD_ERROR_NONE;
1075}
1076
1077static void
1078_sdl_image_destructor(Engine_Image_Entry *eie)
1079{
1080 SDL_Engine_Image_Entry *seie = (SDL_Engine_Image_Entry *) eie;
1081
1082 if (seie->surface && !seie->flags.engine_surface)
1083 SDL_FreeSurface(seie->surface);
1084 seie->surface = NULL;
1085}
1086
1087static int
1088_sdl_image_dirty(Engine_Image_Entry *dst, const Engine_Image_Entry *src __UNUSED__)
1089{
1090 SDL_Engine_Image_Entry *eim = (SDL_Engine_Image_Entry *) dst;
1091 SDL_Surface *sdl = NULL;
1092 RGBA_Image *im;
1093
1094 im = (RGBA_Image *) dst->src;
1095
1096 /* FIXME: Take care of CSPACE */
1097 sdl = SDL_CreateRGBSurfaceFrom(im->image.data,
1098 dst->w, dst->h,
1099 32, dst->w * 4,
1100 0xff0000, 0xff00, 0xff, 0xff000000);
1101 eim->surface = sdl;
1102 eim->flags.engine_surface = 0;
1103
1104 return 0;
1105}
1106
1107static int
1108_sdl_image_update_data(Engine_Image_Entry *dst, void* engine_data)
1109{
1110 SDL_Engine_Image_Entry *eim = (SDL_Engine_Image_Entry *) dst;
1111 SDL_Surface *sdl = NULL;
1112 RGBA_Image *im;
1113
1114 im = (RGBA_Image *) dst->src;
1115
1116 if (engine_data)
1117 {
1118 sdl = engine_data;
1119
1120 if (im)
1121 {
1122 im->image.data = sdl->pixels;
1123 im->image.no_free = 1;
1124 im->cache_entry.flags.alpha = 0;
1125 dst->src->w = sdl->w;
1126 dst->src->h = sdl->h;
1127 }
1128 dst->w = sdl->w;
1129 dst->h = sdl->h;
1130 }
1131 else
1132 {
1133 /* FIXME: Take care of CSPACE */
1134 SDL_FreeSurface(eim->surface);
1135 sdl = SDL_CreateRGBSurfaceFrom(im->image.data,
1136 dst->w, dst->h,
1137 32, dst->w * 4,
1138 RMASK, GMASK, BMASK, AMASK);
1139 }
1140
1141 eim->surface = sdl;
1142
1143 return 0;
1144}
1145
1146static int
1147_sdl_image_size_set(Engine_Image_Entry *dst, const Engine_Image_Entry *src __UNUSED__)
1148{
1149 SDL_Engine_Image_Entry *eim = (SDL_Engine_Image_Entry *) dst;
1150 SDL_Surface *sdl;
1151 RGBA_Image *im;
1152
1153 im = (RGBA_Image *) dst->src;
1154
1155 /* FIXME: handle im == NULL */
1156 sdl = SDL_CreateRGBSurfaceFrom(im->image.data,
1157 dst->w, dst->h,
1158 32, dst->w * 4,
1159 RMASK, GMASK, BMASK, AMASK);
1160
1161 eim->surface = sdl;
1162
1163 return 0;
1164}
1165
1166static void
1167_sdl_image_load(Engine_Image_Entry *eim, const Image_Entry *ie_im)
1168{
1169 SDL_Engine_Image_Entry *load = (SDL_Engine_Image_Entry *) eim;
1170 SDL_Surface *sdl;
1171
1172 if (!load->surface)
1173 {
1174 RGBA_Image *im;
1175
1176 im = (RGBA_Image *) ie_im;
1177
1178 sdl = SDL_CreateRGBSurfaceFrom(im->image.data,
1179 eim->w, eim->h,
1180 32, eim->w * 4,
1181 RMASK, GMASK, BMASK, AMASK);
1182 load->surface = sdl;
1183 }
1184}
1185
1186static int
1187_sdl_image_mem_size_get(Engine_Image_Entry *eim)
1188{
1189 SDL_Engine_Image_Entry *seie = (SDL_Engine_Image_Entry *) eim;
1190 int size = 0;
1191
1192 /* FIXME: Count surface size. */
1193 if (seie->surface)
1194 size = sizeof (SDL_Surface) + sizeof (SDL_PixelFormat);
1195
1196 return size;
1197}
1198
1199#ifdef DEBUG_SDL
1200static void
1201_sdl_image_debug(const char* context, Engine_Image_Entry* eie)
1202{
1203 SDL_Engine_Image_Entry *eim = (SDL_Engine_Image_Entry *) eie;
1204
1205 DBG("*** %s image (%p) ***", context, eim);
1206 if (eim)
1207 {
1208 DBG("W: %i, H: %i, R: %i", eim->cache_entry.w, eim->cache_entry.h, eim->cache_entry.references);
1209 if (eim->cache_entry.src)
1210 DBG("Pixels: %p, SDL Surface: %p",((RGBA_Image*) eim->cache_entry.src)->image.data, eim->surface);
1211 if (eim->surface)
1212 DBG("Surface->pixels: %p", eim->surface->pixels);
1213 DBG("Key: %s", eim->cache_entry.cache_key);
1214 DBG("Reference: %i", eim->cache_entry.references);
1215 }
1216 DBG("*** ***");
1217}
1218#endif
diff --git a/libraries/evas/src/modules/engines/software_sdl/evas_engine.h b/libraries/evas/src/modules/engines/software_sdl/evas_engine.h
new file mode 100644
index 0000000..5133fec
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_sdl/evas_engine.h
@@ -0,0 +1,72 @@
1#ifndef EVAS_ENGINE_SDL_H
2#define EVAS_ENGINE_SDL_H
3
4#include "evas_common.h"
5#include "evas_private.h"
6#include "Evas_Engine_SDL.h"
7
8extern int _evas_engine_soft_sdl_log_dom ;
9#ifdef ERR
10# undef ERR
11#endif
12#define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_soft_sdl_log_dom, __VA_ARGS__)
13
14#ifdef DBG
15# undef DBG
16#endif
17#define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_soft_sdl_log_dom, __VA_ARGS__)
18
19#ifdef INF
20# undef INF
21#endif
22#define INF(...) EINA_LOG_DOM_INFO(_evas_engine_soft_sdl_log_dom, __VA_ARGS__)
23
24#ifdef WRN
25# undef WRN
26#endif
27#define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_soft_sdl_log_dom, __VA_ARGS__)
28
29#ifdef CRIT
30# undef CRIT
31#endif
32#define CRIT(...) EINA_LOG_DOM_CRIT(_evas_engine_soft_sdl_log_dom, __VA_ARGS__)
33
34typedef struct _SDL_Engine_Image_Entry SDL_Engine_Image_Entry;
35struct _SDL_Engine_Image_Entry
36{
37 Engine_Image_Entry cache_entry;
38
39 SDL_Surface *surface;
40
41 struct
42 {
43 unsigned int engine_surface : 1;
44 } flags;
45};
46
47typedef struct _Render_Engine Render_Engine;
48struct _Render_Engine
49{
50 SDL_Engine_Image_Entry *rgba_engine_image;
51
52 Tilebuf *tb;
53 Tilebuf_Rect *rects;
54 Eina_Inlist *cur_rect;
55
56 Evas_Cache_Engine_Image *cache;
57
58 SDL_Rect *update_rects;
59 int update_rects_count;
60 int update_rects_limit;
61
62 struct
63 {
64 unsigned int fullscreen : 1;
65 unsigned int noframe : 1;
66 unsigned int alpha : 1;
67 unsigned int hwsurface : 1;
68 unsigned int end : 1;
69 } flags;
70};
71
72#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/Evas_Engine_Software_X11.h b/libraries/evas/src/modules/engines/software_x11/Evas_Engine_Software_X11.h
new file mode 100644
index 0000000..e42c10a
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/Evas_Engine_Software_X11.h
@@ -0,0 +1,52 @@
1#ifndef _EVAS_ENGINE_SOFTWARE_X11_H
2# define _EVAS_ENGINE_SOFTWARE_X11_H
3
4typedef enum
5{
6 EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB,
7 EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB
8} Evas_Engine_Info_Software_X11_Backend;
9
10typedef struct _Evas_Engine_Info_Software_X11 Evas_Engine_Info_Software_X11;
11
12struct _Evas_Engine_Info_Software_X11
13{
14 /* PRIVATE - don't mess with this baby or evas will poke its tongue out */
15 /* at you and make nasty noises */
16 Evas_Engine_Info magic;
17
18 /* engine specific data & parameters it needs to set up */
19 struct
20 {
21 Evas_Engine_Info_Software_X11_Backend backend;
22
23 void *connection, *screen;
24 unsigned int drawable, mask;
25 void *visual;
26 unsigned int colormap;
27 int depth, rotation;
28
29 Eina_Bool alloc_grayscale : 1;
30 Eina_Bool debug : 1;
31 Eina_Bool shape_dither : 1;
32 Eina_Bool destination_alpha : 1;
33 Eina_Bool track_mask_changes : 1;
34
35 int alloc_colors_max;
36 } info;
37
38 /* engine specific function calls to query stuff about the destination */
39 struct
40 {
41 void *(*best_visual_get) (int backend, void *connection, int screen);
42 unsigned int (*best_colormap_get) (int backend, void *connection, int screen);
43 int (*best_depth_get) (int backend, void *connection, int screen);
44 } func;
45
46 unsigned char mask_changed : 1;
47
48 /* non-blocking or blocking mode */
49 Evas_Engine_Render_Mode render_mode;
50};
51
52#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/Makefile.am b/libraries/evas/src/modules/engines/software_x11/Makefile.am
new file mode 100644
index 0000000..5a2e345
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/Makefile.am
@@ -0,0 +1,85 @@
1
2MAINTAINERCLEANFILES = Makefile.in
3
4if BUILD_ENGINE_SOFTWARE_X11
5
6SOFTWARE_X11_SOURCES = evas_engine.c
7
8if BUILD_ENGINE_SOFTWARE_XLIB
9
10AM_CPPFLAGS = \
11-I. \
12-I$(top_srcdir)/src/lib \
13-I$(top_srcdir)/src/lib/include \
14-I$(top_srcdir)/src/modules/engines \
15@FREETYPE_CFLAGS@ \
16@PIXMAN_CFLAGS@ \
17@EINA_CFLAGS@ \
18@evas_engine_software_xlib_cflags@
19
20SOFTWARE_X11_SOURCES += \
21evas_xlib_outbuf.c \
22evas_xlib_buffer.c \
23evas_xlib_color.c \
24evas_xlib_main.c
25
26SOFTWARE_X11_LIBADD = @FREETYPE_LIBS@ @EINA_LIBS@ @evas_engine_software_xlib_libs@
27
28endif
29
30if BUILD_ENGINE_SOFTWARE_XCB
31
32AM_CPPFLAGS = \
33-I. \
34-I$(top_srcdir)/src/lib \
35-I$(top_srcdir)/src/lib/include \
36-I$(top_srcdir)/src/modules/engines \
37@FREETYPE_CFLAGS@ \
38@PIXMAN_CFLAGS@ \
39@EINA_CFLAGS@ \
40@evas_engine_software_xcb_cflags@
41
42SOFTWARE_X11_SOURCES += \
43evas_xcb_xdefaults.c \
44evas_xcb_outbuf.c \
45evas_xcb_buffer.c \
46evas_xcb_color.c \
47evas_xcb_main.c
48
49SOFTWARE_X11_LIBADD = @FREETYPE_LIBS@ @PIXMAN_LIBS@ @EINA_LIBS@ @evas_engine_software_xcb_libs@
50
51endif
52
53includes_HEADERS = Evas_Engine_Software_X11.h
54includesdir = $(includedir)/evas-@VMAJ@
55
56if !EVAS_STATIC_BUILD_SOFTWARE_X11
57
58pkgdir = $(libdir)/evas/modules/engines/software_x11/$(MODULE_ARCH)
59pkg_LTLIBRARIES = module.la
60
61module_la_SOURCES = $(SOFTWARE_X11_SOURCES)
62module_la_LIBADD = $(top_builddir)/src/lib/libevas.la $(SOFTWARE_X11_LIBADD)
63module_la_LDFLAGS = -no-undefined -module -avoid-version
64module_la_LIBTOOLFLAGS = --tag=disable-static
65
66else
67
68noinst_LTLIBRARIES = libevas_engine_software_x11.la
69
70libevas_engine_software_x11_la_SOURCES = $(SOFTWARE_X11_SOURCES)
71libevas_engine_software_x11_la_LIBADD = $(SOFTWARE_X11_LIBADD)
72
73endif
74endif
75
76EXTRA_DIST = \
77evas_engine.h \
78evas_xlib_outbuf.h \
79evas_xlib_buffer.h \
80evas_xlib_color.h \
81evas_xcb_outbuf.h \
82evas_xcb_buffer.h \
83evas_xcb_color.h \
84evas_xcb_xdefaults.h
85
diff --git a/libraries/evas/src/modules/engines/software_x11/Makefile.in b/libraries/evas/src/modules/engines/software_x11/Makefile.in
new file mode 100644
index 0000000..f5c73af
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/Makefile.in
@@ -0,0 +1,948 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@am__append_1 = \
39@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@evas_xlib_outbuf.c \
40@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@evas_xlib_buffer.c \
41@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@evas_xlib_color.c \
42@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@evas_xlib_main.c
43
44@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@am__append_2 = \
45@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@evas_xcb_xdefaults.c \
46@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@evas_xcb_outbuf.c \
47@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@evas_xcb_buffer.c \
48@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@evas_xcb_color.c \
49@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@evas_xcb_main.c
50
51subdir = src/modules/engines/software_x11
52DIST_COMMON = $(am__includes_HEADERS_DIST) $(srcdir)/Makefile.am \
53 $(srcdir)/Makefile.in
54ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
55am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
56 $(top_srcdir)/m4/efl_coverage.m4 \
57 $(top_srcdir)/m4/efl_doxygen.m4 \
58 $(top_srcdir)/m4/efl_fnmatch.m4 \
59 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
60 $(top_srcdir)/m4/evas_check_engine.m4 \
61 $(top_srcdir)/m4/evas_check_loader.m4 \
62 $(top_srcdir)/m4/evas_converter.m4 \
63 $(top_srcdir)/m4/evas_dither.m4 \
64 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
65 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
66 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
67 $(top_srcdir)/configure.ac
68am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
69 $(ACLOCAL_M4)
70mkinstalldirs = $(install_sh) -d
71CONFIG_HEADER = $(top_builddir)/config.h
72CONFIG_CLEAN_FILES =
73CONFIG_CLEAN_VPATH_FILES =
74am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
75am__vpath_adj = case $$p in \
76 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
77 *) f=$$p;; \
78 esac;
79am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
80am__install_max = 40
81am__nobase_strip_setup = \
82 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
83am__nobase_strip = \
84 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
85am__nobase_list = $(am__nobase_strip_setup); \
86 for p in $$list; do echo "$$p $$p"; done | \
87 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
88 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
89 if (++n[$$2] == $(am__install_max)) \
90 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
91 END { for (dir in files) print dir, files[dir] }'
92am__base_list = \
93 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
94 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
95am__installdirs = "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"
96LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES)
97am__DEPENDENCIES_1 =
98@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@libevas_engine_software_x11_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
99am__libevas_engine_software_x11_la_SOURCES_DIST = evas_engine.c \
100 evas_xlib_outbuf.c evas_xlib_buffer.c evas_xlib_color.c \
101 evas_xlib_main.c evas_xcb_xdefaults.c evas_xcb_outbuf.c \
102 evas_xcb_buffer.c evas_xcb_color.c evas_xcb_main.c
103@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@am__objects_1 = evas_xlib_outbuf.lo \
104@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ evas_xlib_buffer.lo \
105@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ evas_xlib_color.lo \
106@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ evas_xlib_main.lo
107@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@am__objects_2 = evas_xcb_xdefaults.lo \
108@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ evas_xcb_outbuf.lo \
109@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ evas_xcb_buffer.lo \
110@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ evas_xcb_color.lo \
111@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ evas_xcb_main.lo
112@BUILD_ENGINE_SOFTWARE_X11_TRUE@am__objects_3 = evas_engine.lo \
113@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__objects_1) \
114@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__objects_2)
115@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@am_libevas_engine_software_x11_la_OBJECTS = $(am__objects_3)
116libevas_engine_software_x11_la_OBJECTS = \
117 $(am_libevas_engine_software_x11_la_OBJECTS)
118AM_V_lt = $(am__v_lt_$(V))
119am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
120am__v_lt_0 = --silent
121@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@am_libevas_engine_software_x11_la_rpath =
122@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@module_la_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la \
123@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@ $(am__DEPENDENCIES_1)
124am__module_la_SOURCES_DIST = evas_engine.c evas_xlib_outbuf.c \
125 evas_xlib_buffer.c evas_xlib_color.c evas_xlib_main.c \
126 evas_xcb_xdefaults.c evas_xcb_outbuf.c evas_xcb_buffer.c \
127 evas_xcb_color.c evas_xcb_main.c
128@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@am__objects_4 = module_la-evas_xlib_outbuf.lo \
129@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ module_la-evas_xlib_buffer.lo \
130@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ module_la-evas_xlib_color.lo \
131@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@ module_la-evas_xlib_main.lo
132@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@am__objects_5 = module_la-evas_xcb_xdefaults.lo \
133@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ module_la-evas_xcb_outbuf.lo \
134@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ module_la-evas_xcb_buffer.lo \
135@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ module_la-evas_xcb_color.lo \
136@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@ module_la-evas_xcb_main.lo
137@BUILD_ENGINE_SOFTWARE_X11_TRUE@am__objects_6 = \
138@BUILD_ENGINE_SOFTWARE_X11_TRUE@ module_la-evas_engine.lo \
139@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__objects_4) \
140@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__objects_5)
141@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@am_module_la_OBJECTS = $(am__objects_6)
142module_la_OBJECTS = $(am_module_la_OBJECTS)
143module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
144 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
145 $(AM_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) -o $@
146@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@am_module_la_rpath = -rpath \
147@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@ $(pkgdir)
148DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
149depcomp = $(SHELL) $(top_srcdir)/depcomp
150am__depfiles_maybe = depfiles
151am__mv = mv -f
152COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
153 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
154LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
155 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
156 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
157 $(AM_CFLAGS) $(CFLAGS)
158AM_V_CC = $(am__v_CC_$(V))
159am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
160am__v_CC_0 = @echo " CC " $@;
161AM_V_at = $(am__v_at_$(V))
162am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
163am__v_at_0 = @
164CCLD = $(CC)
165LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
166 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
167 $(AM_LDFLAGS) $(LDFLAGS) -o $@
168AM_V_CCLD = $(am__v_CCLD_$(V))
169am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
170am__v_CCLD_0 = @echo " CCLD " $@;
171AM_V_GEN = $(am__v_GEN_$(V))
172am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
173am__v_GEN_0 = @echo " GEN " $@;
174SOURCES = $(libevas_engine_software_x11_la_SOURCES) \
175 $(module_la_SOURCES)
176DIST_SOURCES = $(am__libevas_engine_software_x11_la_SOURCES_DIST) \
177 $(am__module_la_SOURCES_DIST)
178am__includes_HEADERS_DIST = Evas_Engine_Software_X11.h
179HEADERS = $(includes_HEADERS)
180ETAGS = etags
181CTAGS = ctags
182DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
183ACLOCAL = @ACLOCAL@
184ALLOCA = @ALLOCA@
185AMTAR = @AMTAR@
186AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
187AR = @AR@
188AS = @AS@
189AUTOCONF = @AUTOCONF@
190AUTOHEADER = @AUTOHEADER@
191AUTOMAKE = @AUTOMAKE@
192AWK = @AWK@
193CC = @CC@
194CCDEPMODE = @CCDEPMODE@
195CFLAGS = @CFLAGS@
196CHECK_CFLAGS = @CHECK_CFLAGS@
197CHECK_LIBS = @CHECK_LIBS@
198CPP = @CPP@
199CPPFLAGS = @CPPFLAGS@
200CXX = @CXX@
201CXXCPP = @CXXCPP@
202CXXDEPMODE = @CXXDEPMODE@
203CXXFLAGS = @CXXFLAGS@
204CYGPATH_W = @CYGPATH_W@
205DEFS = @DEFS@
206DEPDIR = @DEPDIR@
207DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
208DIRECTFB_LIBS = @DIRECTFB_LIBS@
209DLLTOOL = @DLLTOOL@
210DSYMUTIL = @DSYMUTIL@
211DUMPBIN = @DUMPBIN@
212ECHO_C = @ECHO_C@
213ECHO_N = @ECHO_N@
214ECHO_T = @ECHO_T@
215ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
216ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
217EDB_CFLAGS = @EDB_CFLAGS@
218EDB_LIBS = @EDB_LIBS@
219EDJE_CFLAGS = @EDJE_CFLAGS@
220EDJE_LIBS = @EDJE_LIBS@
221EET_CFLAGS = @EET_CFLAGS@
222EET_LIBS = @EET_LIBS@
223EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
224EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
225EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
226EGREP = @EGREP@
227EINA_CFLAGS = @EINA_CFLAGS@
228EINA_LIBS = @EINA_LIBS@
229EVAS_CFLAGS = @EVAS_CFLAGS@
230EVAS_LIBS = @EVAS_LIBS@
231EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
232EVIL_CFLAGS = @EVIL_CFLAGS@
233EVIL_LIBS = @EVIL_LIBS@
234EXEEXT = @EXEEXT@
235FGREP = @FGREP@
236FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
237FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
238FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
239FREETYPE_LIBS = @FREETYPE_LIBS@
240FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
241FRIBIDI_LIBS = @FRIBIDI_LIBS@
242GL_EET_CFLAGS = @GL_EET_CFLAGS@
243GL_EET_LIBS = @GL_EET_LIBS@
244GREP = @GREP@
245HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
246HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
247INSTALL = @INSTALL@
248INSTALL_DATA = @INSTALL_DATA@
249INSTALL_PROGRAM = @INSTALL_PROGRAM@
250INSTALL_SCRIPT = @INSTALL_SCRIPT@
251INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
252LD = @LD@
253LDFLAGS = @LDFLAGS@
254LIBOBJS = @LIBOBJS@
255LIBS = @LIBS@
256LIBTOOL = @LIBTOOL@
257LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
258LINEBREAK_LIBS = @LINEBREAK_LIBS@
259LIPO = @LIPO@
260LN_S = @LN_S@
261LTLIBOBJS = @LTLIBOBJS@
262MAKEINFO = @MAKEINFO@
263MKDIR_P = @MKDIR_P@
264MODULE_ARCH = @MODULE_ARCH@
265NM = @NM@
266NMEDIT = @NMEDIT@
267OBJC = @OBJC@
268OBJCDEPMODE = @OBJCDEPMODE@
269OBJCFLAGS = @OBJCFLAGS@
270OBJDUMP = @OBJDUMP@
271OBJEXT = @OBJEXT@
272OTOOL = @OTOOL@
273OTOOL64 = @OTOOL64@
274PACKAGE = @PACKAGE@
275PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
276PACKAGE_NAME = @PACKAGE_NAME@
277PACKAGE_STRING = @PACKAGE_STRING@
278PACKAGE_TARNAME = @PACKAGE_TARNAME@
279PACKAGE_URL = @PACKAGE_URL@
280PACKAGE_VERSION = @PACKAGE_VERSION@
281PATH_SEPARATOR = @PATH_SEPARATOR@
282PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
283PIXMAN_LIBS = @PIXMAN_LIBS@
284PKG_CONFIG = @PKG_CONFIG@
285PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
286PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
287PNG_CFLAGS = @PNG_CFLAGS@
288PNG_LIBS = @PNG_LIBS@
289RANLIB = @RANLIB@
290SDL_CFLAGS = @SDL_CFLAGS@
291SDL_LIBS = @SDL_LIBS@
292SED = @SED@
293SET_MAKE = @SET_MAKE@
294SHELL = @SHELL@
295SHM_OPEN_LINK = @SHM_OPEN_LINK@
296STRIP = @STRIP@
297SVG_CFLAGS = @SVG_CFLAGS@
298SVG_LIBS = @SVG_LIBS@
299VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
300VALGRIND_LIBS = @VALGRIND_LIBS@
301VERSION = @VERSION@
302VMAJ = @VMAJ@
303WIN32_CFLAGS = @WIN32_CFLAGS@
304WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
305XCB_CFLAGS = @XCB_CFLAGS@
306XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
307XCB_GL_LIBS = @XCB_GL_LIBS@
308XCB_LIBS = @XCB_LIBS@
309XEXT_CFLAGS = @XEXT_CFLAGS@
310XEXT_LIBS = @XEXT_LIBS@
311XMKMF = @XMKMF@
312X_CFLAGS = @X_CFLAGS@
313X_EXTRA_LIBS = @X_EXTRA_LIBS@
314X_LIBS = @X_LIBS@
315X_PRE_LIBS = @X_PRE_LIBS@
316abs_builddir = @abs_builddir@
317abs_srcdir = @abs_srcdir@
318abs_top_builddir = @abs_top_builddir@
319abs_top_srcdir = @abs_top_srcdir@
320ac_ct_CC = @ac_ct_CC@
321ac_ct_CXX = @ac_ct_CXX@
322ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
323ac_ct_OBJC = @ac_ct_OBJC@
324altivec_cflags = @altivec_cflags@
325am__include = @am__include@
326am__leading_dot = @am__leading_dot@
327am__quote = @am__quote@
328am__tar = @am__tar@
329am__untar = @am__untar@
330bindir = @bindir@
331build = @build@
332build_alias = @build_alias@
333build_cpu = @build_cpu@
334build_os = @build_os@
335build_vendor = @build_vendor@
336builddir = @builddir@
337datadir = @datadir@
338datarootdir = @datarootdir@
339dlopen_libs = @dlopen_libs@
340docdir = @docdir@
341dvidir = @dvidir@
342edje_cc = @edje_cc@
343efl_doxygen = @efl_doxygen@
344efl_have_doxygen = @efl_have_doxygen@
345evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
346evas_engine_buffer_libs = @evas_engine_buffer_libs@
347evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
348evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
349evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
350evas_engine_directfb_libs = @evas_engine_directfb_libs@
351evas_engine_fb_cflags = @evas_engine_fb_cflags@
352evas_engine_fb_libs = @evas_engine_fb_libs@
353evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
354evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
355evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
356evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
357evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
358evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
359evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
360evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
361evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
362evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
363evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
364evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
365evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
366evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
367evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
368evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
369evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
370evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
371evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
372evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
373evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
374evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
375evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
376evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
377evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
378evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
379evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
380evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
381evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
382evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
383evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
384evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
385evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
386evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
387evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
388evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
389evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
390evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
391evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
392evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
393evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
394evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
395evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
396evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
397evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
398evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
399evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
400evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
401evas_image_loader_png_libs = @evas_image_loader_png_libs@
402evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
403evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
404evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
405evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
406evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
407evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
408evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
409evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
410evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
411evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
412evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
413evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
414exec_prefix = @exec_prefix@
415have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
416have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
417have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
418have_evas_engine_software_x11 = @have_evas_engine_software_x11@
419have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
420have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
421have_lcov = @have_lcov@
422host = @host@
423host_alias = @host_alias@
424host_cpu = @host_cpu@
425host_os = @host_os@
426host_vendor = @host_vendor@
427htmldir = @htmldir@
428includedir = @includedir@
429infodir = @infodir@
430install_sh = @install_sh@
431libdir = @libdir@
432libexecdir = @libexecdir@
433localedir = @localedir@
434localstatedir = @localstatedir@
435lt_ECHO = @lt_ECHO@
436lt_enable_auto_import = @lt_enable_auto_import@
437mandir = @mandir@
438mkdir_p = @mkdir_p@
439oldincludedir = @oldincludedir@
440pdfdir = @pdfdir@
441pkgconfig_requires_private = @pkgconfig_requires_private@
442prefix = @prefix@
443program_transform_name = @program_transform_name@
444psdir = @psdir@
445pthread_cflags = @pthread_cflags@
446pthread_libs = @pthread_libs@
447release_info = @release_info@
448requirement_evas = @requirement_evas@
449sbindir = @sbindir@
450sharedstatedir = @sharedstatedir@
451srcdir = @srcdir@
452sysconfdir = @sysconfdir@
453target_alias = @target_alias@
454top_build_prefix = @top_build_prefix@
455top_builddir = @top_builddir@
456top_srcdir = @top_srcdir@
457version_info = @version_info@
458MAINTAINERCLEANFILES = Makefile.in
459@BUILD_ENGINE_SOFTWARE_X11_TRUE@SOFTWARE_X11_SOURCES = evas_engine.c \
460@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__append_1) \
461@BUILD_ENGINE_SOFTWARE_X11_TRUE@ $(am__append_2)
462@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@AM_CPPFLAGS = \
463@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@-I. \
464@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@-I$(top_srcdir)/src/lib \
465@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@-I$(top_srcdir)/src/lib/include \
466@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@-I$(top_srcdir)/src/modules/engines \
467@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@@FREETYPE_CFLAGS@ \
468@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@@PIXMAN_CFLAGS@ \
469@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@@EINA_CFLAGS@ \
470@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@@evas_engine_software_xcb_cflags@
471
472@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@AM_CPPFLAGS = \
473@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@-I. \
474@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@-I$(top_srcdir)/src/lib \
475@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@-I$(top_srcdir)/src/lib/include \
476@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@-I$(top_srcdir)/src/modules/engines \
477@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@@FREETYPE_CFLAGS@ \
478@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@@PIXMAN_CFLAGS@ \
479@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@@EINA_CFLAGS@ \
480@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@@evas_engine_software_xlib_cflags@
481
482@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XCB_TRUE@SOFTWARE_X11_LIBADD = @FREETYPE_LIBS@ @PIXMAN_LIBS@ @EINA_LIBS@ @evas_engine_software_xcb_libs@
483@BUILD_ENGINE_SOFTWARE_X11_TRUE@@BUILD_ENGINE_SOFTWARE_XLIB_TRUE@SOFTWARE_X11_LIBADD = @FREETYPE_LIBS@ @EINA_LIBS@ @evas_engine_software_xlib_libs@
484@BUILD_ENGINE_SOFTWARE_X11_TRUE@includes_HEADERS = Evas_Engine_Software_X11.h
485@BUILD_ENGINE_SOFTWARE_X11_TRUE@includesdir = $(includedir)/evas-@VMAJ@
486@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@pkgdir = $(libdir)/evas/modules/engines/software_x11/$(MODULE_ARCH)
487@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@pkg_LTLIBRARIES = module.la
488@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@module_la_SOURCES = $(SOFTWARE_X11_SOURCES)
489@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@module_la_LIBADD = $(top_builddir)/src/lib/libevas.la $(SOFTWARE_X11_LIBADD)
490@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@module_la_LDFLAGS = -no-undefined -module -avoid-version
491@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_FALSE@module_la_LIBTOOLFLAGS = --tag=disable-static
492@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@noinst_LTLIBRARIES = libevas_engine_software_x11.la
493@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@libevas_engine_software_x11_la_SOURCES = $(SOFTWARE_X11_SOURCES)
494@BUILD_ENGINE_SOFTWARE_X11_TRUE@@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@libevas_engine_software_x11_la_LIBADD = $(SOFTWARE_X11_LIBADD)
495EXTRA_DIST = \
496evas_engine.h \
497evas_xlib_outbuf.h \
498evas_xlib_buffer.h \
499evas_xlib_color.h \
500evas_xcb_outbuf.h \
501evas_xcb_buffer.h \
502evas_xcb_color.h \
503evas_xcb_xdefaults.h
504
505all: all-am
506
507.SUFFIXES:
508.SUFFIXES: .c .lo .o .obj
509$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
510 @for dep in $?; do \
511 case '$(am__configure_deps)' in \
512 *$$dep*) \
513 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
514 && { if test -f $@; then exit 0; else break; fi; }; \
515 exit 1;; \
516 esac; \
517 done; \
518 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/engines/software_x11/Makefile'; \
519 $(am__cd) $(top_srcdir) && \
520 $(AUTOMAKE) --gnu src/modules/engines/software_x11/Makefile
521.PRECIOUS: Makefile
522Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
523 @case '$?' in \
524 *config.status*) \
525 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
526 *) \
527 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
528 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
529 esac;
530
531$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
532 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
533
534$(top_srcdir)/configure: $(am__configure_deps)
535 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
536$(ACLOCAL_M4): $(am__aclocal_m4_deps)
537 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
538$(am__aclocal_m4_deps):
539
540clean-noinstLTLIBRARIES:
541 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
542 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
543 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
544 test "$$dir" != "$$p" || dir=.; \
545 echo "rm -f \"$${dir}/so_locations\""; \
546 rm -f "$${dir}/so_locations"; \
547 done
548install-pkgLTLIBRARIES: $(pkg_LTLIBRARIES)
549 @$(NORMAL_INSTALL)
550 test -z "$(pkgdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdir)"
551 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
552 list2=; for p in $$list; do \
553 if test -f $$p; then \
554 list2="$$list2 $$p"; \
555 else :; fi; \
556 done; \
557 test -z "$$list2" || { \
558 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgdir)'"; \
559 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgdir)"; \
560 }
561
562uninstall-pkgLTLIBRARIES:
563 @$(NORMAL_UNINSTALL)
564 @list='$(pkg_LTLIBRARIES)'; test -n "$(pkgdir)" || list=; \
565 for p in $$list; do \
566 $(am__strip_dir) \
567 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgdir)/$$f'"; \
568 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgdir)/$$f"; \
569 done
570
571clean-pkgLTLIBRARIES:
572 -test -z "$(pkg_LTLIBRARIES)" || rm -f $(pkg_LTLIBRARIES)
573 @list='$(pkg_LTLIBRARIES)'; for p in $$list; do \
574 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
575 test "$$dir" != "$$p" || dir=.; \
576 echo "rm -f \"$${dir}/so_locations\""; \
577 rm -f "$${dir}/so_locations"; \
578 done
579libevas_engine_software_x11.la: $(libevas_engine_software_x11_la_OBJECTS) $(libevas_engine_software_x11_la_DEPENDENCIES)
580 $(AM_V_CCLD)$(LINK) $(am_libevas_engine_software_x11_la_rpath) $(libevas_engine_software_x11_la_OBJECTS) $(libevas_engine_software_x11_la_LIBADD) $(LIBS)
581module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
582 $(AM_V_CCLD)$(module_la_LINK) $(am_module_la_rpath) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
583
584mostlyclean-compile:
585 -rm -f *.$(OBJEXT)
586
587distclean-compile:
588 -rm -f *.tab.c
589
590@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_engine.Plo@am__quote@
591@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xcb_buffer.Plo@am__quote@
592@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xcb_color.Plo@am__quote@
593@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xcb_main.Plo@am__quote@
594@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xcb_outbuf.Plo@am__quote@
595@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xcb_xdefaults.Plo@am__quote@
596@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xlib_buffer.Plo@am__quote@
597@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xlib_color.Plo@am__quote@
598@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xlib_main.Plo@am__quote@
599@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_xlib_outbuf.Plo@am__quote@
600@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_engine.Plo@am__quote@
601@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xcb_buffer.Plo@am__quote@
602@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xcb_color.Plo@am__quote@
603@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xcb_main.Plo@am__quote@
604@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xcb_outbuf.Plo@am__quote@
605@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xcb_xdefaults.Plo@am__quote@
606@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xlib_buffer.Plo@am__quote@
607@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xlib_color.Plo@am__quote@
608@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xlib_main.Plo@am__quote@
609@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-evas_xlib_outbuf.Plo@am__quote@
610
611.c.o:
612@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
613@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
614@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
615@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
616@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
617@am__fastdepCC_FALSE@ $(COMPILE) -c $<
618
619.c.obj:
620@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
621@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
622@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
623@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
624@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
625@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
626
627.c.lo:
628@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
629@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
630@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
631@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
632@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
633@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
634
635module_la-evas_engine.lo: evas_engine.c
636@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_engine.lo -MD -MP -MF $(DEPDIR)/module_la-evas_engine.Tpo -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
637@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_engine.Tpo $(DEPDIR)/module_la-evas_engine.Plo
638@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
639@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_engine.c' object='module_la-evas_engine.lo' libtool=yes @AMDEPBACKSLASH@
640@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
641@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_engine.lo `test -f 'evas_engine.c' || echo '$(srcdir)/'`evas_engine.c
642
643module_la-evas_xlib_outbuf.lo: evas_xlib_outbuf.c
644@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xlib_outbuf.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xlib_outbuf.Tpo -c -o module_la-evas_xlib_outbuf.lo `test -f 'evas_xlib_outbuf.c' || echo '$(srcdir)/'`evas_xlib_outbuf.c
645@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xlib_outbuf.Tpo $(DEPDIR)/module_la-evas_xlib_outbuf.Plo
646@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
647@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xlib_outbuf.c' object='module_la-evas_xlib_outbuf.lo' libtool=yes @AMDEPBACKSLASH@
648@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
649@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xlib_outbuf.lo `test -f 'evas_xlib_outbuf.c' || echo '$(srcdir)/'`evas_xlib_outbuf.c
650
651module_la-evas_xlib_buffer.lo: evas_xlib_buffer.c
652@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xlib_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xlib_buffer.Tpo -c -o module_la-evas_xlib_buffer.lo `test -f 'evas_xlib_buffer.c' || echo '$(srcdir)/'`evas_xlib_buffer.c
653@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xlib_buffer.Tpo $(DEPDIR)/module_la-evas_xlib_buffer.Plo
654@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
655@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xlib_buffer.c' object='module_la-evas_xlib_buffer.lo' libtool=yes @AMDEPBACKSLASH@
656@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
657@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xlib_buffer.lo `test -f 'evas_xlib_buffer.c' || echo '$(srcdir)/'`evas_xlib_buffer.c
658
659module_la-evas_xlib_color.lo: evas_xlib_color.c
660@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xlib_color.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xlib_color.Tpo -c -o module_la-evas_xlib_color.lo `test -f 'evas_xlib_color.c' || echo '$(srcdir)/'`evas_xlib_color.c
661@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xlib_color.Tpo $(DEPDIR)/module_la-evas_xlib_color.Plo
662@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
663@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xlib_color.c' object='module_la-evas_xlib_color.lo' libtool=yes @AMDEPBACKSLASH@
664@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
665@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xlib_color.lo `test -f 'evas_xlib_color.c' || echo '$(srcdir)/'`evas_xlib_color.c
666
667module_la-evas_xlib_main.lo: evas_xlib_main.c
668@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xlib_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xlib_main.Tpo -c -o module_la-evas_xlib_main.lo `test -f 'evas_xlib_main.c' || echo '$(srcdir)/'`evas_xlib_main.c
669@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xlib_main.Tpo $(DEPDIR)/module_la-evas_xlib_main.Plo
670@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
671@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xlib_main.c' object='module_la-evas_xlib_main.lo' libtool=yes @AMDEPBACKSLASH@
672@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
673@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xlib_main.lo `test -f 'evas_xlib_main.c' || echo '$(srcdir)/'`evas_xlib_main.c
674
675module_la-evas_xcb_xdefaults.lo: evas_xcb_xdefaults.c
676@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xcb_xdefaults.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xcb_xdefaults.Tpo -c -o module_la-evas_xcb_xdefaults.lo `test -f 'evas_xcb_xdefaults.c' || echo '$(srcdir)/'`evas_xcb_xdefaults.c
677@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xcb_xdefaults.Tpo $(DEPDIR)/module_la-evas_xcb_xdefaults.Plo
678@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
679@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xcb_xdefaults.c' object='module_la-evas_xcb_xdefaults.lo' libtool=yes @AMDEPBACKSLASH@
680@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
681@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xcb_xdefaults.lo `test -f 'evas_xcb_xdefaults.c' || echo '$(srcdir)/'`evas_xcb_xdefaults.c
682
683module_la-evas_xcb_outbuf.lo: evas_xcb_outbuf.c
684@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xcb_outbuf.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xcb_outbuf.Tpo -c -o module_la-evas_xcb_outbuf.lo `test -f 'evas_xcb_outbuf.c' || echo '$(srcdir)/'`evas_xcb_outbuf.c
685@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xcb_outbuf.Tpo $(DEPDIR)/module_la-evas_xcb_outbuf.Plo
686@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
687@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xcb_outbuf.c' object='module_la-evas_xcb_outbuf.lo' libtool=yes @AMDEPBACKSLASH@
688@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
689@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xcb_outbuf.lo `test -f 'evas_xcb_outbuf.c' || echo '$(srcdir)/'`evas_xcb_outbuf.c
690
691module_la-evas_xcb_buffer.lo: evas_xcb_buffer.c
692@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xcb_buffer.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xcb_buffer.Tpo -c -o module_la-evas_xcb_buffer.lo `test -f 'evas_xcb_buffer.c' || echo '$(srcdir)/'`evas_xcb_buffer.c
693@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xcb_buffer.Tpo $(DEPDIR)/module_la-evas_xcb_buffer.Plo
694@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
695@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xcb_buffer.c' object='module_la-evas_xcb_buffer.lo' libtool=yes @AMDEPBACKSLASH@
696@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
697@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xcb_buffer.lo `test -f 'evas_xcb_buffer.c' || echo '$(srcdir)/'`evas_xcb_buffer.c
698
699module_la-evas_xcb_color.lo: evas_xcb_color.c
700@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xcb_color.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xcb_color.Tpo -c -o module_la-evas_xcb_color.lo `test -f 'evas_xcb_color.c' || echo '$(srcdir)/'`evas_xcb_color.c
701@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xcb_color.Tpo $(DEPDIR)/module_la-evas_xcb_color.Plo
702@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
703@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xcb_color.c' object='module_la-evas_xcb_color.lo' libtool=yes @AMDEPBACKSLASH@
704@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
705@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xcb_color.lo `test -f 'evas_xcb_color.c' || echo '$(srcdir)/'`evas_xcb_color.c
706
707module_la-evas_xcb_main.lo: evas_xcb_main.c
708@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_la-evas_xcb_main.lo -MD -MP -MF $(DEPDIR)/module_la-evas_xcb_main.Tpo -c -o module_la-evas_xcb_main.lo `test -f 'evas_xcb_main.c' || echo '$(srcdir)/'`evas_xcb_main.c
709@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-evas_xcb_main.Tpo $(DEPDIR)/module_la-evas_xcb_main.Plo
710@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
711@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evas_xcb_main.c' object='module_la-evas_xcb_main.lo' libtool=yes @AMDEPBACKSLASH@
712@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
713@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_la-evas_xcb_main.lo `test -f 'evas_xcb_main.c' || echo '$(srcdir)/'`evas_xcb_main.c
714
715mostlyclean-libtool:
716 -rm -f *.lo
717
718clean-libtool:
719 -rm -rf .libs _libs
720install-includesHEADERS: $(includes_HEADERS)
721 @$(NORMAL_INSTALL)
722 test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)"
723 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
724 for p in $$list; do \
725 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
726 echo "$$d$$p"; \
727 done | $(am__base_list) | \
728 while read files; do \
729 echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \
730 $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \
731 done
732
733uninstall-includesHEADERS:
734 @$(NORMAL_UNINSTALL)
735 @list='$(includes_HEADERS)'; test -n "$(includesdir)" || list=; \
736 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
737 test -n "$$files" || exit 0; \
738 echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \
739 cd "$(DESTDIR)$(includesdir)" && rm -f $$files
740
741ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
742 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
743 unique=`for i in $$list; do \
744 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
745 done | \
746 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
747 END { if (nonempty) { for (i in files) print i; }; }'`; \
748 mkid -fID $$unique
749tags: TAGS
750
751TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
752 $(TAGS_FILES) $(LISP)
753 set x; \
754 here=`pwd`; \
755 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
756 unique=`for i in $$list; do \
757 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
758 done | \
759 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
760 END { if (nonempty) { for (i in files) print i; }; }'`; \
761 shift; \
762 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
763 test -n "$$unique" || unique=$$empty_fix; \
764 if test $$# -gt 0; then \
765 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
766 "$$@" $$unique; \
767 else \
768 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
769 $$unique; \
770 fi; \
771 fi
772ctags: CTAGS
773CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
774 $(TAGS_FILES) $(LISP)
775 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
776 unique=`for i in $$list; do \
777 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
778 done | \
779 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
780 END { if (nonempty) { for (i in files) print i; }; }'`; \
781 test -z "$(CTAGS_ARGS)$$unique" \
782 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
783 $$unique
784
785GTAGS:
786 here=`$(am__cd) $(top_builddir) && pwd` \
787 && $(am__cd) $(top_srcdir) \
788 && gtags -i $(GTAGS_ARGS) "$$here"
789
790distclean-tags:
791 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
792
793distdir: $(DISTFILES)
794 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
795 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
796 list='$(DISTFILES)'; \
797 dist_files=`for file in $$list; do echo $$file; done | \
798 sed -e "s|^$$srcdirstrip/||;t" \
799 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
800 case $$dist_files in \
801 */*) $(MKDIR_P) `echo "$$dist_files" | \
802 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
803 sort -u` ;; \
804 esac; \
805 for file in $$dist_files; do \
806 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
807 if test -d $$d/$$file; then \
808 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
809 if test -d "$(distdir)/$$file"; then \
810 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
811 fi; \
812 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
813 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
814 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
815 fi; \
816 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
817 else \
818 test -f "$(distdir)/$$file" \
819 || cp -p $$d/$$file "$(distdir)/$$file" \
820 || exit 1; \
821 fi; \
822 done
823check-am: all-am
824check: check-am
825all-am: Makefile $(LTLIBRARIES) $(HEADERS)
826installdirs:
827 for dir in "$(DESTDIR)$(pkgdir)" "$(DESTDIR)$(includesdir)"; do \
828 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
829 done
830install: install-am
831install-exec: install-exec-am
832install-data: install-data-am
833uninstall: uninstall-am
834
835install-am: all-am
836 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
837
838installcheck: installcheck-am
839install-strip:
840 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
841 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
842 `test -z '$(STRIP)' || \
843 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
844mostlyclean-generic:
845
846clean-generic:
847
848distclean-generic:
849 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
850 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
851
852maintainer-clean-generic:
853 @echo "This command is intended for maintainers to use"
854 @echo "it deletes files that may require special tools to rebuild."
855 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
856clean: clean-am
857
858clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
859 clean-pkgLTLIBRARIES mostlyclean-am
860
861distclean: distclean-am
862 -rm -rf ./$(DEPDIR)
863 -rm -f Makefile
864distclean-am: clean-am distclean-compile distclean-generic \
865 distclean-tags
866
867dvi: dvi-am
868
869dvi-am:
870
871html: html-am
872
873html-am:
874
875info: info-am
876
877info-am:
878
879install-data-am: install-includesHEADERS install-pkgLTLIBRARIES
880
881install-dvi: install-dvi-am
882
883install-dvi-am:
884
885install-exec-am:
886
887install-html: install-html-am
888
889install-html-am:
890
891install-info: install-info-am
892
893install-info-am:
894
895install-man:
896
897install-pdf: install-pdf-am
898
899install-pdf-am:
900
901install-ps: install-ps-am
902
903install-ps-am:
904
905installcheck-am:
906
907maintainer-clean: maintainer-clean-am
908 -rm -rf ./$(DEPDIR)
909 -rm -f Makefile
910maintainer-clean-am: distclean-am maintainer-clean-generic
911
912mostlyclean: mostlyclean-am
913
914mostlyclean-am: mostlyclean-compile mostlyclean-generic \
915 mostlyclean-libtool
916
917pdf: pdf-am
918
919pdf-am:
920
921ps: ps-am
922
923ps-am:
924
925uninstall-am: uninstall-includesHEADERS uninstall-pkgLTLIBRARIES
926
927.MAKE: install-am install-strip
928
929.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
930 clean-libtool clean-noinstLTLIBRARIES clean-pkgLTLIBRARIES \
931 ctags distclean distclean-compile distclean-generic \
932 distclean-libtool distclean-tags distdir dvi dvi-am html \
933 html-am info info-am install install-am install-data \
934 install-data-am install-dvi install-dvi-am install-exec \
935 install-exec-am install-html install-html-am \
936 install-includesHEADERS install-info install-info-am \
937 install-man install-pdf install-pdf-am install-pkgLTLIBRARIES \
938 install-ps install-ps-am install-strip installcheck \
939 installcheck-am installdirs maintainer-clean \
940 maintainer-clean-generic mostlyclean mostlyclean-compile \
941 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
942 tags uninstall uninstall-am uninstall-includesHEADERS \
943 uninstall-pkgLTLIBRARIES
944
945
946# Tell versions [3.59,3.63) of GNU make to not export all variables.
947# Otherwise a system limit (for SysV at least) may be exceeded.
948.NOEXPORT:
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_engine.c b/libraries/evas/src/modules/engines/software_x11/evas_engine.c
new file mode 100644
index 0000000..0a2d2a3
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_engine.c
@@ -0,0 +1,929 @@
1#include "evas_common.h"
2#include "evas_private.h"
3
4#include "Evas_Engine_Software_X11.h"
5#include "evas_engine.h"
6
7#ifdef BUILD_ENGINE_SOFTWARE_XLIB
8# include "evas_xlib_outbuf.h"
9# include "evas_xlib_color.h"
10#endif
11
12#ifdef BUILD_ENGINE_SOFTWARE_XCB
13# include "evas_xcb_outbuf.h"
14# include "evas_xcb_color.h"
15# include "evas_xcb_xdefaults.h"
16#endif
17
18int _evas_engine_soft_x11_log_dom = -1;
19
20/* function tables - filled in later (func and parent func) */
21static Evas_Func func, pfunc;
22
23#ifdef BUILD_ENGINE_SOFTWARE_XLIB
24/*
25struct xrdb_user
26{
27 time_t last_stat;
28 time_t last_mtime;
29 XrmDatabase db;
30};
31static struct xrdb_user xrdb_user = {0, 0, NULL};
32
33static Eina_Bool
34xrdb_user_query(const char *name, const char *cls, char **type, XrmValue *val)
35{
36 time_t last, now;
37
38 last = xrdb_user.last_stat;
39 now = time(NULL);
40
41 xrdb_user.last_stat = now;
42 if (last != now) // don't stat() more than once every second
43 {
44 struct stat st;
45 const char *home;
46 char tmp[PATH_MAX];
47
48 if (!(home = getenv("HOME")))
49 goto failed;
50
51 snprintf(tmp, sizeof(tmp), "%s/.Xdefaults", home);
52 if (stat(tmp, &st) != 0) goto failed;
53 if (xrdb_user.last_mtime != st.st_mtime)
54 {
55 if (xrdb_user.db) XrmDestroyDatabase(xrdb_user.db);
56 xrdb_user.db = XrmGetFileDatabase(tmp);
57 if (!xrdb_user.db) goto failed;
58 xrdb_user.last_mtime = st.st_mtime;
59 }
60 }
61
62 if (!xrdb_user.db) return EINA_FALSE;
63 return XrmGetResource(xrdb_user.db, name, cls, type, val);
64
65 failed:
66 if (xrdb_user.db)
67 {
68 XrmDestroyDatabase(xrdb_user.db);
69 xrdb_user.db = NULL;
70 }
71 xrdb_user.last_mtime = 0;
72 return EINA_FALSE;
73}
74*/
75#endif
76
77/* engine struct data */
78typedef struct _Render_Engine Render_Engine;
79
80struct _Render_Engine
81{
82 Tilebuf *tb;
83 Outbuf *ob;
84 Tilebuf_Rect *rects;
85 Eina_Inlist *cur_rect;
86 unsigned char end : 1;
87/*
88#ifdef BUILD_ENGINE_SOFTWARE_XLIB
89 XrmDatabase xrdb;
90#endif
91 struct
92 {
93 int dpi;
94 } xr;
95 */
96#ifdef EVAS_FRAME_QUEUING
97 Evas_Engine_Render_Mode render_mode;
98#endif
99
100 void (*outbuf_free)(Outbuf *ob);
101 void (*outbuf_reconfigure)(Outbuf *ob, int w, int h, int rot, Outbuf_Depth depth);
102 int (*outbuf_get_rot)(Outbuf *ob);
103 RGBA_Image *(*outbuf_new_region_for_update)(Outbuf *ob, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch);
104 void (*outbuf_push_updated_region)(Outbuf *ob, RGBA_Image *update, int x, int y, int w, int h);
105 void (*outbuf_free_region_for_update)(Outbuf *ob, RGBA_Image *update);
106 void (*outbuf_flush)(Outbuf *ob);
107 void (*outbuf_idle_flush)(Outbuf *ob);
108 Eina_Bool (*outbuf_alpha_get)(Outbuf *ob);
109#ifdef EVAS_FRAME_QUEUING
110 void (*outbuf_set_priv)(Outbuf *ob, void *cur, void *prev);
111#endif
112};
113
114/* prototypes we will use here */
115static void *_best_visual_get(int backend, void *connection, int screen);
116static unsigned int _best_colormap_get(int backend, void *connection, int screen);
117static int _best_depth_get(int backend, void *connection, int screen);
118
119static void *eng_info(Evas *e);
120static void eng_info_free(Evas *e, void *info);
121static int eng_setup(Evas *e, void *info);
122static void eng_output_free(void *data);
123static void eng_output_resize(void *data, int w, int h);
124static void eng_output_tile_size_set(void *data, int w, int h);
125static void eng_output_redraws_rect_add(void *data, int x, int y, int w, int h);
126static void eng_output_redraws_rect_del(void *data, int x, int y, int w, int h);
127static void eng_output_redraws_clear(void *data);
128static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
129static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
130static void eng_output_flush(void *data);
131static void eng_output_idle_flush(void *data);
132
133/* internal engine routines */
134
135#ifdef BUILD_ENGINE_SOFTWARE_XLIB
136static void *
137_output_xlib_setup(int w, int h, int rot, Display *disp, Drawable draw,
138 Visual *vis, Colormap cmap, int depth, int debug,
139 int grayscale, int max_colors, Pixmap mask,
140 int shape_dither, int destination_alpha)
141{
142 Render_Engine *re;
143// int status;
144// char *type = NULL;
145// XrmValue val;
146
147 if (!(re = calloc(1, sizeof(Render_Engine)))) return NULL;
148
149 evas_software_xlib_x_init();
150 evas_software_xlib_x_color_init();
151 evas_software_xlib_outbuf_init();
152/*
153 re->xr.dpi = 75000; // dpy * 1000
154
155 status = xrdb_user_query("Xft.dpi", "Xft.Dpi", &type, &val);
156 if ((!status) || (!type))
157 {
158 if (!re->xrdb) re->xrdb = XrmGetDatabase(disp);
159 if (re->xrdb)
160 status = XrmGetResource(re->xrdb,
161 "Xft.dpi", "Xft.Dpi", &type, &val);
162 }
163
164 if ((status) && (type))
165 {
166 if (!strcmp(type, "String"))
167 {
168 const char *str, *dp;
169
170 str = val.addr;
171 dp = strchr(str, '.');
172 if (!dp) dp = strchr(str, ',');
173
174 if (dp)
175 {
176 int subdpi, len, i;
177 char *buf;
178
179 buf = alloca(dp - str + 1);
180 strncpy(buf, str, dp - str);
181 buf[dp - str] = 0;
182 len = strlen(dp + 1);
183 subdpi = atoi(dp + 1);
184
185 if (len < 3)
186 {
187 for (i = len; i < 3; i++)
188 subdpi *= 10;
189 }
190 else if (len > 3)
191 {
192 for (i = len; i > 3; i--)
193 subdpi /= 10;
194 }
195 re->xr.dpi = atoi(buf) * 1000;
196 }
197 else
198 re->xr.dpi = atoi(str) * 1000;
199 evas_common_font_dpi_set(re->xr.dpi / 1000);
200 }
201 }
202 */
203 re->ob =
204 evas_software_xlib_outbuf_setup_x(w, h, rot, OUTBUF_DEPTH_INHERIT, disp,
205 draw, vis, cmap, depth, grayscale,
206 max_colors, mask, shape_dither,
207 destination_alpha);
208 if (!re->ob)
209 {
210 free(re);
211 return NULL;
212 }
213
214 /* for updates return 1 big buffer, but only use portions of it, also cache
215 * it and keepit around until an idle_flush */
216
217 /* disable for now - i am hunting down why some expedite tests are slower,
218 * as well as shaped stuff is broken and probable non-32bpp is broken as
219 * convert funcs dont do the right thing
220 *
221 */
222// re->ob->onebuf = 1;
223
224 evas_software_xlib_outbuf_debug_set(re->ob, debug);
225 re->tb = evas_common_tilebuf_new(w, h);
226 if (!re->tb)
227 {
228 evas_software_xlib_outbuf_free(re->ob);
229 free(re);
230 return NULL;
231 }
232
233 /* in preliminary tests 16x16 gave highest framerates */
234 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
235 return re;
236}
237#endif
238
239#ifdef BUILD_ENGINE_SOFTWARE_XCB
240static void *
241_output_xcb_setup(int w, int h, int rot, xcb_connection_t *conn,
242 xcb_screen_t *screen, xcb_drawable_t draw,
243 xcb_visualtype_t *vis, xcb_colormap_t cmap, int depth,
244 int debug, int grayscale, int max_colors, xcb_drawable_t mask,
245 int shape_dither, int destination_alpha)
246{
247 Render_Engine *re;
248// int v = 0;
249
250 if (!(re = calloc(1, sizeof(Render_Engine)))) return NULL;
251
252 evas_software_xcb_init();
253 evas_software_xcb_color_init();
254 evas_software_xcb_outbuf_init();
255/*
256 // FIXME: re->xrdb
257 _evas_xcb_xdefaults_init();
258 v = _evas_xcb_xdefaults_int_get("Xft", "dpi");
259 _evas_xcb_xdefaults_shutdown();
260 if (v) re->xr.dpi = (v * 1000);
261 else re->xr.dpi = 75000; // dpy * 1000
262
263 evas_common_font_dpi_set(re->xr.dpi / 1000);
264 */
265 re->ob =
266 evas_software_xcb_outbuf_setup(w, h, rot, OUTBUF_DEPTH_INHERIT, conn,
267 screen, draw, vis, cmap, depth,
268 grayscale, max_colors, mask,
269 shape_dither, destination_alpha);
270 if (!re->ob)
271 {
272 free(re);
273 return NULL;
274 }
275
276 /* for updates return 1 big buffer, but only use portions of it, also cache
277 * it and keepit around until an idle_flush */
278
279 /* disable for now - i am hunting down why some expedite tests are slower,
280 * as well as shaped stuff is broken and probable non-32bpp is broken as
281 * convert funcs dont do the right thing
282 *
283 */
284// re->ob->onebuf = 1;
285
286 evas_software_xcb_outbuf_debug_set(re->ob, debug);
287
288 re->tb = evas_common_tilebuf_new(w, h);
289 if (!re->tb)
290 {
291 evas_software_xcb_outbuf_free(re->ob);
292 free(re);
293 return NULL;
294 }
295
296 /* in preliminary tests 16x16 gave highest framerates */
297 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
298 return re;
299}
300#endif
301
302static void *
303_best_visual_get(int backend, void *connection, int screen)
304{
305 if (!connection) return NULL;
306
307#ifdef BUILD_ENGINE_SOFTWARE_XLIB
308 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB)
309 return DefaultVisual((Display *)connection, screen);
310#endif
311
312#ifdef BUILD_ENGINE_SOFTWARE_XCB
313 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB)
314 {
315 xcb_screen_iterator_t iter_screen;
316 xcb_depth_iterator_t iter_depth;
317 xcb_screen_t *s = NULL;
318
319 iter_screen =
320 xcb_setup_roots_iterator(xcb_get_setup((xcb_connection_t *)connection));
321 for (; iter_screen.rem; --screen, xcb_screen_next(&iter_screen))
322 if (screen == 0)
323 {
324 s = iter_screen.data;
325 break;
326 }
327
328 iter_depth = xcb_screen_allowed_depths_iterator(s);
329 for (; iter_depth.rem; xcb_depth_next(&iter_depth))
330 {
331 xcb_visualtype_iterator_t iter_vis;
332
333 iter_vis = xcb_depth_visuals_iterator(iter_depth.data);
334 for (; iter_vis.rem; xcb_visualtype_next(&iter_vis))
335 {
336 if (s->root_visual == iter_vis.data->visual_id)
337 return iter_vis.data;
338 }
339 }
340 }
341#endif
342
343 return NULL;
344}
345
346static unsigned int
347_best_colormap_get(int backend, void *connection, int screen)
348{
349 if (!connection) return 0;
350
351#ifdef BUILD_ENGINE_SOFTWARE_XLIB
352 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB)
353 return DefaultColormap((Display *)connection, screen);
354#endif
355
356#ifdef BUILD_ENGINE_SOFTWARE_XCB
357 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB)
358 {
359 xcb_screen_iterator_t iter_screen;
360 xcb_screen_t *s = NULL;
361
362 iter_screen =
363 xcb_setup_roots_iterator(xcb_get_setup((xcb_connection_t *)connection));
364 for (; iter_screen.rem; --screen, xcb_screen_next(&iter_screen))
365 if (screen == 0)
366 {
367 s = iter_screen.data;
368 break;
369 }
370
371 return s->default_colormap;
372 }
373#endif
374
375 return 0;
376}
377
378static int
379_best_depth_get(int backend, void *connection, int screen)
380{
381 if (!connection) return 0;
382
383#ifdef BUILD_ENGINE_SOFTWARE_XLIB
384 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB)
385 return DefaultDepth((Display *)connection, screen);
386#endif
387
388#ifdef BUILD_ENGINE_SOFTWARE_XCB
389 if (backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB)
390 {
391 xcb_screen_iterator_t iter_screen;
392 xcb_screen_t *s = NULL;
393
394 iter_screen =
395 xcb_setup_roots_iterator(xcb_get_setup((xcb_connection_t *)connection));
396 for (; iter_screen.rem; --screen, xcb_screen_next(&iter_screen))
397 if (screen == 0)
398 {
399 s = iter_screen.data;
400 break;
401 }
402
403 return s->root_depth;
404 }
405#endif
406
407 return 0;
408}
409
410/* engine api this module provides */
411static void *
412eng_info(Evas *e __UNUSED__)
413{
414 Evas_Engine_Info_Software_X11 *info;
415
416 if (!(info = calloc(1, sizeof(Evas_Engine_Info_Software_X11))))
417 return NULL;
418
419 info->magic.magic = rand();
420 info->info.debug = 0;
421 info->info.alloc_grayscale = 0;
422 info->info.alloc_colors_max = 216;
423 info->func.best_visual_get = _best_visual_get;
424 info->func.best_colormap_get = _best_colormap_get;
425 info->func.best_depth_get = _best_depth_get;
426 info->render_mode = EVAS_RENDER_MODE_BLOCKING;
427 return info;
428}
429
430static void
431eng_info_free(Evas *e __UNUSED__, void *info)
432{
433 Evas_Engine_Info_Software_X11 *in;
434
435 in = (Evas_Engine_Info_Software_X11 *)info;
436 free(in);
437}
438
439static int
440eng_setup(Evas *e, void *in)
441{
442 Evas_Engine_Info_Software_X11 *info;
443 Render_Engine *re = NULL;
444
445 info = (Evas_Engine_Info_Software_X11 *)in;
446 if (!e->engine.data.output)
447 {
448 /* if we haven't initialized - init (automatic abort if already done) */
449 evas_common_cpu_init();
450 evas_common_blend_init();
451 evas_common_image_init();
452 evas_common_convert_init();
453 evas_common_scale_init();
454 evas_common_rectangle_init();
455 evas_common_polygon_init();
456 evas_common_line_init();
457 evas_common_font_init();
458 evas_common_draw_init();
459 evas_common_tilebuf_init();
460
461#ifdef BUILD_ENGINE_SOFTWARE_XLIB
462 if (info->info.backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB)
463 {
464 re = _output_xlib_setup(e->output.w, e->output.h,
465 info->info.rotation, info->info.connection,
466 info->info.drawable, info->info.visual,
467 info->info.colormap,
468 info->info.depth, info->info.debug,
469 info->info.alloc_grayscale,
470 info->info.alloc_colors_max,
471 info->info.mask, info->info.shape_dither,
472 info->info.destination_alpha);
473
474 re->outbuf_free = evas_software_xlib_outbuf_free;
475 re->outbuf_reconfigure = evas_software_xlib_outbuf_reconfigure;
476 re->outbuf_get_rot = evas_software_xlib_outbuf_get_rot;
477 re->outbuf_new_region_for_update =
478 evas_software_xlib_outbuf_new_region_for_update;
479 re->outbuf_push_updated_region =
480 evas_software_xlib_outbuf_push_updated_region;
481 re->outbuf_free_region_for_update =
482 evas_software_xlib_outbuf_free_region_for_update;
483 re->outbuf_flush = evas_software_xlib_outbuf_flush;
484 re->outbuf_idle_flush = evas_software_xlib_outbuf_idle_flush;
485 re->outbuf_alpha_get = evas_software_xlib_outbuf_alpha_get;
486# ifdef EVAS_FRAME_QUEUING
487 re->outbuf_set_priv = evas_software_xlib_outbuf_set_priv;
488 re->render_mode = info->render_mode;
489# endif
490 }
491#endif
492
493#ifdef BUILD_ENGINE_SOFTWARE_XCB
494 if (info->info.backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB)
495 {
496 re = _output_xcb_setup(e->output.w, e->output.h,
497 info->info.rotation, info->info.connection,
498 info->info.screen, info->info.drawable,
499 info->info.visual, info->info.colormap,
500 info->info.depth, info->info.debug,
501 info->info.alloc_grayscale,
502 info->info.alloc_colors_max,
503 info->info.mask, info->info.shape_dither,
504 info->info.destination_alpha);
505
506 re->outbuf_free = evas_software_xcb_outbuf_free;
507 re->outbuf_reconfigure = evas_software_xcb_outbuf_reconfigure;
508 re->outbuf_get_rot = evas_software_xcb_outbuf_rotation_get;
509 re->outbuf_new_region_for_update =
510 evas_software_xcb_outbuf_new_region_for_update;
511 re->outbuf_push_updated_region =
512 evas_software_xcb_outbuf_push_updated_region;
513 re->outbuf_free_region_for_update =
514 evas_software_xcb_outbuf_free_region_for_update;
515 re->outbuf_flush = evas_software_xcb_outbuf_flush;
516 re->outbuf_idle_flush = evas_software_xcb_outbuf_idle_flush;
517 re->outbuf_alpha_get = evas_software_xcb_outbuf_alpha_get;
518# ifdef EVAS_FRAME_QUEUING
519 re->outbuf_set_priv = evas_software_xcb_outbuf_priv_set;
520 re->render_mode = info->render_mode;
521# endif
522 }
523#endif
524
525 e->engine.data.output = re;
526 }
527 else
528 {
529 int ponebuf = 0;
530
531#ifdef EVAS_FRAME_QUEUING
532 evas_common_frameq_flush();
533#endif
534 re = e->engine.data.output;
535 ponebuf = re->ob->onebuf;
536
537#ifdef BUILD_ENGINE_SOFTWARE_XLIB
538 if (info->info.backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XLIB)
539 {
540 evas_software_xlib_outbuf_free(re->ob);
541 re->ob =
542 evas_software_xlib_outbuf_setup_x(e->output.w, e->output.h,
543 info->info.rotation,
544 OUTBUF_DEPTH_INHERIT,
545 info->info.connection,
546 info->info.drawable,
547 info->info.visual,
548 info->info.colormap,
549 info->info.depth,
550 info->info.alloc_grayscale,
551 info->info.alloc_colors_max,
552 info->info.mask,
553 info->info.shape_dither,
554 info->info.destination_alpha);
555
556 evas_software_xlib_outbuf_debug_set(re->ob, info->info.debug);
557# ifdef EVAS_FRAME_QUEUING
558 re->render_mode = info->render_mode;
559# endif
560 }
561#endif
562
563#ifdef BUILD_ENGINE_SOFTWARE_XCB
564 if (info->info.backend == EVAS_ENGINE_INFO_SOFTWARE_X11_BACKEND_XCB)
565 {
566 evas_software_xcb_outbuf_free(re->ob);
567 re->ob =
568 evas_software_xcb_outbuf_setup(e->output.w, e->output.h,
569 info->info.rotation,
570 OUTBUF_DEPTH_INHERIT,
571 info->info.connection,
572 info->info.screen,
573 info->info.drawable,
574 info->info.visual,
575 info->info.colormap,
576 info->info.depth,
577 info->info.alloc_grayscale,
578 info->info.alloc_colors_max,
579 info->info.mask,
580 info->info.shape_dither,
581 info->info.destination_alpha);
582
583 evas_software_xcb_outbuf_debug_set(re->ob, info->info.debug);
584#ifdef EVAS_FRAME_QUEUING
585 re->render_mode = info->render_mode;
586#endif
587 }
588#endif
589 re->ob->onebuf = ponebuf;
590 }
591 if (!e->engine.data.output) return 0;
592 if (!e->engine.data.context)
593 {
594 e->engine.data.context =
595 e->engine.func->context_new(e->engine.data.output);
596 }
597
598 re = e->engine.data.output;
599
600 return 1;
601}
602
603static void
604eng_output_free(void *data)
605{
606 Render_Engine *re;
607
608#ifdef BUILD_ENGINE_SOFTWARE_XLIB
609// NOTE: XrmGetDatabase() result is shared per connection, do not free it.
610// if (re->xrdb) XrmDestroyDatabase(re->xrdb);
611#endif
612
613 if ((re = (Render_Engine *)data))
614 {
615 re->outbuf_free(re->ob);
616 evas_common_tilebuf_free(re->tb);
617 if (re->rects) evas_common_tilebuf_free_render_rects(re->rects);
618 free(re);
619 }
620
621 evas_common_font_shutdown();
622 evas_common_image_shutdown();
623}
624
625static void
626eng_output_resize(void *data, int w, int h)
627{
628 Render_Engine *re;
629
630 re = (Render_Engine *)data;
631 re->outbuf_reconfigure(re->ob, w, h, re->outbuf_get_rot(re->ob),
632 OUTBUF_DEPTH_INHERIT);
633 evas_common_tilebuf_free(re->tb);
634 re->tb = evas_common_tilebuf_new(w, h);
635 if (re->tb)
636 evas_common_tilebuf_set_tile_size(re->tb, TILESIZE, TILESIZE);
637}
638
639static void
640eng_output_tile_size_set(void *data, int w, int h)
641{
642 Render_Engine *re;
643
644 re = (Render_Engine *)data;
645 evas_common_tilebuf_set_tile_size(re->tb, w, h);
646}
647
648static void
649eng_output_redraws_rect_add(void *data, int x, int y, int w, int h)
650{
651 Render_Engine *re;
652
653 re = (Render_Engine *)data;
654 evas_common_tilebuf_add_redraw(re->tb, x, y, w, h);
655}
656
657static void
658eng_output_redraws_rect_del(void *data, int x, int y, int w, int h)
659{
660 Render_Engine *re;
661
662 re = (Render_Engine *)data;
663 evas_common_tilebuf_del_redraw(re->tb, x, y, w, h);
664}
665
666static void
667eng_output_redraws_clear(void *data)
668{
669 Render_Engine *re;
670
671 re = (Render_Engine *)data;
672 evas_common_tilebuf_clear(re->tb);
673}
674
675static void *
676eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch)
677{
678 Render_Engine *re;
679 RGBA_Image *surface;
680 Tilebuf_Rect *rect;
681 int ux, uy, uw, uh;
682
683 re = (Render_Engine *)data;
684 if (re->end)
685 {
686 re->end = 0;
687 return NULL;
688 }
689 if (!re->rects)
690 {
691 re->rects = evas_common_tilebuf_get_render_rects(re->tb);
692 re->cur_rect = EINA_INLIST_GET(re->rects);
693 }
694 if (!re->cur_rect) return NULL;
695 rect = (Tilebuf_Rect *)re->cur_rect;
696 ux = rect->x; uy = rect->y; uw = rect->w; uh = rect->h;
697 re->cur_rect = re->cur_rect->next;
698 if (!re->cur_rect)
699 {
700 evas_common_tilebuf_free_render_rects(re->rects);
701 re->rects = NULL;
702 re->end = 1;
703 }
704
705 surface =
706 re->outbuf_new_region_for_update(re->ob, ux, uy, uw, uh, cx, cy, cw, ch);
707
708 *x = ux; *y = uy; *w = uw; *h = uh;
709 return surface;
710}
711
712static void
713eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
714{
715 Render_Engine *re;
716#ifdef EVAS_FRAME_QUEUING
717 Evas_Surface *e_surface;
718#endif
719
720 re = (Render_Engine *)data;
721#if defined(BUILD_PIPE_RENDER) && !defined(EVAS_FRAME_QUEUING)
722 evas_common_pipe_map_begin(surface);
723#endif /* BUILD_PIPE_RENDER && !EVAS_FRAME_QUEUING*/
724
725#ifdef EVAS_FRAME_QUEUING
726 if (re->render_mode == EVAS_RENDER_MODE_NONBLOCKING)
727 {
728 /* create a new frame if this is the first surface of this frame */
729 evas_common_frameq_prepare_frame();
730 /* add surface into the frame */
731 e_surface = evas_common_frameq_new_surface(surface, x, y, w, h);
732 evas_common_frameq_add_surface(e_surface);
733 return;
734 }
735#endif
736
737 re->outbuf_push_updated_region(re->ob, surface, x, y, w, h);
738 re->outbuf_free_region_for_update(re->ob, surface);
739 evas_common_cpu_end_opt();
740}
741
742#ifdef EVAS_FRAME_QUEUING
743static void *
744eng_image_map_surface_new(void *data , int w, int h, int alpha)
745{
746 void *surface;
747 DATA32 *pixels;
748 Render_Engine *re;
749 Evas_Surface *e_surface;
750
751 re = (Render_Engine *)data;
752
753 surface =
754 evas_cache_image_copied_data(evas_common_image_cache_get(), w, h, NULL,
755 alpha, EVAS_COLORSPACE_ARGB8888);
756 pixels = evas_cache_image_pixels(surface);
757
758 if (re->render_mode == EVAS_RENDER_MODE_NONBLOCKING)
759 {
760 /* create a new frame if this is the first surface of this frame */
761 evas_common_frameq_prepare_frame();
762
763 /* add surface into the frame */
764 e_surface = evas_common_frameq_new_surface(surface, 0, 0, w, h);
765
766 /* this surface is not going to be pushed to screen */
767 e_surface->dontpush = 1;
768 evas_common_frameq_add_surface(e_surface);
769 }
770 return surface;
771}
772
773static void
774eng_output_frameq_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h)
775{
776 Render_Engine *re;
777
778 re = (Render_Engine *)data;
779 re->outbuf_push_updated_region(re->ob, surface, x, y, w, h);
780 re->outbuf_free_region_for_update(re->ob, surface);
781 evas_common_cpu_end_opt();
782}
783
784static void
785eng_output_frameq_flush(void *data)
786{
787 Render_Engine *re;
788
789 re = (Render_Engine *)data;
790 re->outbuf_flush(re->ob);
791}
792
793static void
794eng_output_frameq_set_priv(void *data, void *cur, void *prev)
795{
796 Render_Engine *re;
797
798 re = (Render_Engine *)data;
799 re->outbuf_set_priv(re->ob, cur, prev);
800}
801#endif
802
803static void
804eng_output_flush(void *data)
805{
806 Render_Engine *re;
807
808 re = (Render_Engine *)data;
809#ifdef EVAS_FRAME_QUEUING
810 if (re->render_mode == EVAS_RENDER_MODE_NONBLOCKING)
811 {
812 evas_common_frameq_set_frame_data(data,
813 eng_output_frameq_redraws_next_update_push,
814 eng_output_frameq_flush,
815 eng_output_frameq_set_priv);
816 evas_common_frameq_ready_frame();
817 evas_common_frameq_begin();
818 }
819 else
820#endif
821 re->outbuf_flush(re->ob);
822}
823
824static void
825eng_output_idle_flush(void *data)
826{
827 Render_Engine *re;
828
829 re = (Render_Engine *)data;
830 re->outbuf_idle_flush(re->ob);
831}
832
833static Eina_Bool
834eng_canvas_alpha_get(void *data, void *context __UNUSED__)
835{
836 Render_Engine *re;
837
838 re = (Render_Engine *)data;
839 return (re->ob->priv.destination_alpha) || (re->outbuf_alpha_get(re->ob));
840}
841
842
843/* module advertising code */
844static int
845module_open(Evas_Module *em)
846{
847#ifdef BUILD_ENGINE_SOFTWARE_XLIB
848 static Eina_Bool xrm_inited = EINA_FALSE;
849
850 if (!xrm_inited)
851 {
852 xrm_inited = EINA_TRUE;
853 XrmInitialize();
854 }
855#endif
856
857 if (!em) return 0;
858
859 /* get whatever engine module we inherit from */
860 if (!_evas_module_engine_inherit(&pfunc, "software_generic")) return 0;
861
862 _evas_engine_soft_x11_log_dom =
863 eina_log_domain_register("evas-software_x11", EVAS_DEFAULT_LOG_COLOR);
864
865 if (_evas_engine_soft_x11_log_dom < 0)
866 {
867 EINA_LOG_ERR("Can not create a module log domain.");
868 return 0;
869 }
870
871 /* store it for later use */
872 func = pfunc;
873
874 /* now to override methods */
875#define ORD(f) EVAS_API_OVERRIDE(f, &func, eng_)
876 ORD(info);
877 ORD(info_free);
878 ORD(setup);
879 ORD(canvas_alpha_get);
880 ORD(output_free);
881 ORD(output_resize);
882 ORD(output_tile_size_set);
883 ORD(output_redraws_rect_add);
884 ORD(output_redraws_rect_del);
885 ORD(output_redraws_clear);
886 ORD(output_redraws_next_update_get);
887 ORD(output_redraws_next_update_push);
888 ORD(output_flush);
889 ORD(output_idle_flush);
890#ifdef EVAS_FRAME_QUEUING
891 ORD(image_map_surface_new);
892#endif
893
894 /* now advertise out own api */
895 em->functions = (void *)(&func);
896 return 1;
897}
898
899static void
900module_close(Evas_Module *em __UNUSED__)
901{
902 eina_log_domain_unregister(_evas_engine_soft_x11_log_dom);
903#ifdef BUILD_ENGINE_SOFTWARE_XLIB
904/*
905 if (xrdb_user.db)
906 {
907 XrmDestroyDatabase(xrdb_user.db);
908 xrdb_user.last_stat = 0;
909 xrdb_user.last_mtime = 0;
910 xrdb_user.db = NULL;
911 }
912 */
913#endif
914}
915
916static Evas_Module_Api evas_modapi =
917{
918 EVAS_MODULE_API_VERSION, "software_x11", "none",
919 {
920 module_open,
921 module_close
922 }
923};
924
925EVAS_MODULE_DEFINE(EVAS_MODULE_TYPE_ENGINE, engine, software_x11);
926
927#ifndef EVAS_STATIC_BUILD_SOFTWARE_X11
928EVAS_EINA_MODULE_DEFINE(engine, software_x11);
929#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_engine.h b/libraries/evas/src/modules/engines/software_x11/evas_engine.h
new file mode 100644
index 0000000..80b71b7
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_engine.h
@@ -0,0 +1,137 @@
1#ifndef EVAS_ENGINE_H
2# define EVAS_ENGINE_H
3
4# include <sys/ipc.h>
5# include <sys/shm.h>
6
7# ifdef BUILD_ENGINE_SOFTWARE_XLIB
8# include <X11/Xlib.h>
9# include <X11/Xutil.h>
10# include <X11/Xatom.h>
11# include <X11/extensions/XShm.h>
12# include <X11/Xresource.h> // xres - dpi
13# endif
14
15# ifdef BUILD_ENGINE_SOFTWARE_XCB
16# include <xcb/xcb.h>
17# include <xcb/shm.h>
18# include <xcb/xcb_image.h>
19# endif
20
21extern int _evas_engine_soft_x11_log_dom;
22
23# ifdef ERR
24# undef ERR
25# endif
26# define ERR(...) EINA_LOG_DOM_ERR(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
27
28# ifdef DBG
29# undef DBG
30# endif
31# define DBG(...) EINA_LOG_DOM_DBG(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
32
33# ifdef INF
34# undef INF
35# endif
36# define INF(...) EINA_LOG_DOM_INFO(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
37
38# ifdef WRN
39# undef WRN
40# endif
41# define WRN(...) EINA_LOG_DOM_WARN(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
42
43# ifdef CRIT
44# undef CRIT
45# endif
46# define CRIT(...) \
47 EINA_LOG_DOM_CRIT(_evas_engine_soft_x11_log_dom, __VA_ARGS__)
48
49typedef enum _Outbuf_Depth Outbuf_Depth;
50
51enum _Outbuf_Depth
52{
53 OUTBUF_DEPTH_NONE,
54 OUTBUF_DEPTH_INHERIT,
55 OUTBUF_DEPTH_RGB_16BPP_565_565_DITHERED,
56 OUTBUF_DEPTH_RGB_16BPP_555_555_DITHERED,
57 OUTBUF_DEPTH_RGB_16BPP_444_444_DITHERED,
58 OUTBUF_DEPTH_RGB_16BPP_565_444_DITHERED,
59 OUTBUF_DEPTH_RGB_32BPP_888_8888,
60 OUTBUF_DEPTH_LAST
61};
62
63typedef struct _Outbuf Outbuf;
64
65struct _Outbuf
66{
67 Outbuf_Depth depth;
68 int w, h;
69 int rot;
70 int onebuf;
71
72 struct
73 {
74 Convert_Pal *pal;
75 union
76 {
77# ifdef BUILD_ENGINE_SOFTWARE_XLIB
78 struct
79 {
80 Display *disp;
81 Window win;
82 Pixmap mask;
83 Visual *vis;
84 Colormap cmap;
85 int depth, shm;
86 GC gc, gcm;
87 unsigned char swap : 1;
88 unsigned char bit_swap : 1;
89 } xlib;
90# endif
91# ifdef BUILD_ENGINE_SOFTWARE_XCB
92 struct
93 {
94 xcb_connection_t *conn;
95 xcb_screen_t *screen;
96 xcb_window_t win;
97 xcb_pixmap_t mask;
98 xcb_visualtype_t *visual;
99 xcb_colormap_t cmap;
100 int depth, shm;
101 xcb_gcontext_t gc, gcm;
102 unsigned char swap : 1;
103 unsigned char bit_swap : 1;
104 } xcb;
105# endif
106 } x11;
107 struct
108 {
109 DATA32 r, g, b;
110 } mask;
111
112 /* 1 big buffer for updates - flush on idle_flush */
113 RGBA_Image *onebuf;
114 Eina_List *onebuf_regions;
115
116 /* a list of pending regions to write to the target */
117 Eina_List *pending_writes;
118
119 /* a list of previous frame pending regions to write to the target */
120 Eina_List *prev_pending_writes;
121
122# ifdef EVAS_FRAME_QUEUING
123 /* protecting prev_pending_writes */
124 LK(lock);
125# endif
126
127 unsigned char mask_dither : 1;
128 unsigned char destination_alpha : 1;
129 unsigned char debug : 1;
130 unsigned char synced : 1;
131 } priv;
132};
133
134void evas_software_xlib_x_init(void);
135void evas_software_xcb_init(void);
136
137#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.c b/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.c
new file mode 100644
index 0000000..49ce721
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.c
@@ -0,0 +1,498 @@
1#include "evas_common.h"
2#include "evas_xcb_buffer.h"
3
4/* local function prototypes */
5static void _xcbob_sync(xcb_connection_t *conn);
6static xcb_image_t *_xcbob_create_native(xcb_connection_t *conn, int w, int h, xcb_image_format_t format, uint8_t depth, void *base, uint32_t bytes, uint8_t *data);
7static xcb_format_t *_xcbob_find_format(const xcb_setup_t *setup, uint8_t depth);
8static xcb_visualtype_t *_xcbob_find_visual_by_id(xcb_screen_t *screen, xcb_visualid_t id);
9
10void
11evas_software_xcb_write_mask_line(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int w, int y)
12{
13 int x, bpl = 0;
14 DATA32 *src_ptr;
15 DATA8 *dst_ptr;
16
17 src_ptr = src;
18 dst_ptr = evas_software_xcb_output_buffer_data(xcbob, &bpl);
19 dst_ptr = dst_ptr + (bpl * y);
20 w -= 7;
21 if (buf->priv.x11.xcb.bit_swap)
22 {
23 for (x = 0; x < w; x += 8)
24 {
25 *dst_ptr =
26 ((A_VAL(&(src_ptr[0])) >> 7) << 7) |
27 ((A_VAL(&(src_ptr[1])) >> 7) << 6) |
28 ((A_VAL(&(src_ptr[2])) >> 7) << 5) |
29 ((A_VAL(&(src_ptr[3])) >> 7) << 4) |
30 ((A_VAL(&(src_ptr[4])) >> 7) << 3) |
31 ((A_VAL(&(src_ptr[5])) >> 7) << 2) |
32 ((A_VAL(&(src_ptr[6])) >> 7) << 1) |
33 ((A_VAL(&(src_ptr[7])) >> 7) << 0);
34 src_ptr += 8;
35 dst_ptr++;
36 }
37 }
38 else
39 {
40 for (x = 0; x < w; x += 8)
41 {
42 *dst_ptr =
43 ((A_VAL(&(src_ptr[0])) >> 7) << 0) |
44 ((A_VAL(&(src_ptr[1])) >> 7) << 1) |
45 ((A_VAL(&(src_ptr[2])) >> 7) << 2) |
46 ((A_VAL(&(src_ptr[3])) >> 7) << 3) |
47 ((A_VAL(&(src_ptr[4])) >> 7) << 4) |
48 ((A_VAL(&(src_ptr[5])) >> 7) << 5) |
49 ((A_VAL(&(src_ptr[6])) >> 7) << 6) |
50 ((A_VAL(&(src_ptr[7])) >> 7) << 7);
51 src_ptr += 8;
52 dst_ptr++;
53 }
54 }
55 w += 7;
56 for (; x < w; x ++)
57 {
58 xcb_image_put_pixel(xcbob->xim, x, y, A_VAL(src_ptr) >> 7);
59 src_ptr++;
60 }
61}
62
63void
64evas_software_xcb_write_mask_line_rev(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int w, int y)
65{
66 int x, bpl = 0;
67 DATA32 *src_ptr;
68 DATA8 *dst_ptr;
69
70 src_ptr = src + w - 1;
71 dst_ptr = evas_software_xcb_output_buffer_data(xcbob, &bpl);
72 dst_ptr = dst_ptr + (bpl * y);
73 w -= 7;
74 if (buf->priv.x11.xcb.bit_swap)
75 {
76 for (x = 0; x < w; x += 8)
77 {
78 *dst_ptr =
79 ((A_VAL(&(src_ptr[ 0])) >> 7) << 7) |
80 ((A_VAL(&(src_ptr[-1])) >> 7) << 6) |
81 ((A_VAL(&(src_ptr[-2])) >> 7) << 5) |
82 ((A_VAL(&(src_ptr[-3])) >> 7) << 4) |
83 ((A_VAL(&(src_ptr[-4])) >> 7) << 3) |
84 ((A_VAL(&(src_ptr[-5])) >> 7) << 2) |
85 ((A_VAL(&(src_ptr[-6])) >> 7) << 1) |
86 ((A_VAL(&(src_ptr[-7])) >> 7) << 0);
87 src_ptr -= 8;
88 dst_ptr++;
89 }
90 }
91 else
92 {
93 for (x = 0; x < w; x += 8)
94 {
95 *dst_ptr =
96 ((A_VAL(&(src_ptr[ 0])) >> 7) << 0) |
97 ((A_VAL(&(src_ptr[-1])) >> 7) << 1) |
98 ((A_VAL(&(src_ptr[-2])) >> 7) << 2) |
99 ((A_VAL(&(src_ptr[-3])) >> 7) << 3) |
100 ((A_VAL(&(src_ptr[-4])) >> 7) << 4) |
101 ((A_VAL(&(src_ptr[-5])) >> 7) << 5) |
102 ((A_VAL(&(src_ptr[-6])) >> 7) << 6) |
103 ((A_VAL(&(src_ptr[-7])) >> 7) << 7);
104 src_ptr -= 8;
105 dst_ptr++;
106 }
107 }
108 w += 7;
109 for (; x < w; x ++)
110 {
111 xcb_image_put_pixel(xcbob->xim, x, y, A_VAL(src_ptr) >> 7);
112 src_ptr--;
113 }
114}
115
116void
117evas_software_xcb_write_mask_line_vert(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int h, int y, int w)
118{
119 int yy, bpl = 0;
120 DATA32 *src_ptr;
121 DATA8 *dst_ptr;
122
123 src_ptr = src;
124 dst_ptr = evas_software_xcb_output_buffer_data(xcbob, &bpl);
125 dst_ptr = dst_ptr + (bpl * y);
126 h -= 7;
127 if (buf->priv.x11.xcb.bit_swap)
128 {
129 for (yy = 0; yy < h; yy += 8)
130 {
131 *dst_ptr =
132 ((A_VAL(&(src_ptr[0 * w])) >> 7) << 7) |
133 ((A_VAL(&(src_ptr[1 * w])) >> 7) << 6) |
134 ((A_VAL(&(src_ptr[2 * w])) >> 7) << 5) |
135 ((A_VAL(&(src_ptr[3 * w])) >> 7) << 4) |
136 ((A_VAL(&(src_ptr[4 * w])) >> 7) << 3) |
137 ((A_VAL(&(src_ptr[5 * w])) >> 7) << 2) |
138 ((A_VAL(&(src_ptr[6 * w])) >> 7) << 1) |
139 ((A_VAL(&(src_ptr[7 * w])) >> 7) << 0);
140 src_ptr += 8 * w;
141 dst_ptr++;
142 }
143 }
144 else
145 {
146 for (yy = 0; yy < h; yy += 8)
147 {
148 *dst_ptr =
149 ((A_VAL(&(src_ptr[0 * w])) >> 7) << 0) |
150 ((A_VAL(&(src_ptr[1 * w])) >> 7) << 1) |
151 ((A_VAL(&(src_ptr[2 * w])) >> 7) << 2) |
152 ((A_VAL(&(src_ptr[3 * w])) >> 7) << 3) |
153 ((A_VAL(&(src_ptr[4 * w])) >> 7) << 4) |
154 ((A_VAL(&(src_ptr[5 * w])) >> 7) << 5) |
155 ((A_VAL(&(src_ptr[6 * w])) >> 7) << 6) |
156 ((A_VAL(&(src_ptr[7 * w])) >> 7) << 7);
157 src_ptr += 8 * w;
158 dst_ptr++;
159 }
160 }
161 h += 7;
162 for (; yy < h; yy ++)
163 {
164 xcb_image_put_pixel(xcbob->xim, yy, y, A_VAL(src_ptr) >> 7);
165 src_ptr += w;
166 }
167}
168
169void
170evas_software_xcb_write_mask_line_vert_rev(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int h, int y, int w)
171{
172 int yy, bpl = 0;
173 DATA32 *src_ptr;
174 DATA8 *dst_ptr;
175
176 src_ptr = src + ((h - 1) * w);
177 dst_ptr = evas_software_xcb_output_buffer_data(xcbob, &bpl);
178 dst_ptr = dst_ptr + (bpl * y);
179 h -= 7;
180 if (buf->priv.x11.xcb.bit_swap)
181 {
182 for (yy = 0; yy < h; yy += 8)
183 {
184 *dst_ptr =
185 ((A_VAL(&(src_ptr[ 0 * w])) >> 7) << 7) |
186 ((A_VAL(&(src_ptr[-1 * w])) >> 7) << 6) |
187 ((A_VAL(&(src_ptr[-2 * w])) >> 7) << 5) |
188 ((A_VAL(&(src_ptr[-3 * w])) >> 7) << 4) |
189 ((A_VAL(&(src_ptr[-4 * w])) >> 7) << 3) |
190 ((A_VAL(&(src_ptr[-5 * w])) >> 7) << 2) |
191 ((A_VAL(&(src_ptr[-6 * w])) >> 7) << 1) |
192 ((A_VAL(&(src_ptr[-7 * w])) >> 7) << 0);
193 src_ptr -= 8 * w;
194 dst_ptr++;
195 }
196 }
197 else
198 {
199 for (yy = 0; yy < h; yy += 8)
200 {
201 *dst_ptr =
202 ((A_VAL(&(src_ptr[ 0 * w])) >> 7) << 0) |
203 ((A_VAL(&(src_ptr[-1 * w])) >> 7) << 1) |
204 ((A_VAL(&(src_ptr[-2 * w])) >> 7) << 2) |
205 ((A_VAL(&(src_ptr[-3 * w])) >> 7) << 3) |
206 ((A_VAL(&(src_ptr[-4 * w])) >> 7) << 4) |
207 ((A_VAL(&(src_ptr[-5 * w])) >> 7) << 5) |
208 ((A_VAL(&(src_ptr[-6 * w])) >> 7) << 6) |
209 ((A_VAL(&(src_ptr[-7 * w])) >> 7) << 7);
210 src_ptr -= 8 * w;
211 dst_ptr++;
212 }
213 }
214 h += 7;
215 for (; yy < h; yy ++)
216 {
217 xcb_image_put_pixel(xcbob->xim, yy, y, A_VAL(src_ptr) >> 7);
218 src_ptr -= w;
219 }
220}
221
222Eina_Bool
223evas_software_xcb_can_do_shm(xcb_connection_t *conn, xcb_screen_t *screen)
224{
225 const xcb_query_extension_reply_t *reply;
226 static xcb_connection_t *cached_conn = NULL;
227 static int cached_result = 0;
228
229 if (conn == cached_conn) return cached_result;
230 cached_conn = conn;
231
232 reply = xcb_get_extension_data(conn, &xcb_shm_id);
233 if ((reply) && (reply->present))
234 {
235 xcb_visualtype_t *visual;
236 Xcb_Output_Buffer *xcbob = NULL;
237
238 visual = _xcbob_find_visual_by_id(screen, screen->root_visual);
239 xcbob =
240 evas_software_xcb_output_buffer_new(conn, visual, screen->root_depth,
241 16, 16, 2, NULL);
242 if (!xcbob)
243 cached_result = 0;
244 else
245 {
246 evas_software_xcb_output_buffer_free(xcbob, EINA_TRUE);
247 cached_result = 1;
248 }
249 }
250 else
251 cached_result = 0;
252
253 return cached_result;
254}
255
256Xcb_Output_Buffer *
257evas_software_xcb_output_buffer_new(xcb_connection_t *conn, xcb_visualtype_t *vis, int depth, int w, int h, int try_shm, unsigned char *data)
258{
259 Xcb_Output_Buffer *xcbob = NULL;
260
261 if (!(xcbob = calloc(1, sizeof(Xcb_Output_Buffer))))
262 return NULL;
263
264 xcbob->connection = conn;
265 xcbob->visual = vis;
266 xcbob->xim = NULL;
267 xcbob->shm_info = NULL;
268 xcbob->w = w;
269 xcbob->h = h;
270
271 if (try_shm > 0)
272 {
273 xcbob->shm_info = malloc(sizeof(xcb_shm_segment_info_t));
274 if (xcbob->shm_info)
275 {
276 xcbob->shm_info->shmseg = xcb_generate_id(conn);
277 xcbob->xim =
278 _xcbob_create_native(conn, w, h, XCB_IMAGE_FORMAT_Z_PIXMAP,
279 depth, NULL, ~0, NULL);
280 if (xcbob->xim)
281 {
282 xcbob->shm_info->shmid =
283 shmget(IPC_PRIVATE,
284 xcbob->xim->stride * xcbob->xim->height,
285 (IPC_CREAT | 0777));
286 if (xcbob->shm_info->shmid == (uint32_t)-1)
287 {
288 xcb_image_destroy(xcbob->xim);
289 free(xcbob->shm_info);
290 free(xcbob);
291 return NULL;
292 }
293 xcbob->shm_info->shmaddr = xcbob->xim->data =
294 shmat(xcbob->shm_info->shmid, 0, 0);
295 if (xcbob->shm_info->shmaddr != ((void *)-1))
296 {
297 /* Sync only needed for testing */
298 if (try_shm == 2) _xcbob_sync(conn);
299
300#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
301 if (evas_common_frameq_enabled())
302 xcb_grab_server(conn);
303#endif
304 xcb_shm_attach(conn, xcbob->shm_info->shmseg,
305 xcbob->shm_info->shmid, 0);
306#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
307 if (evas_common_frameq_enabled())
308 xcb_ungrab_server(conn);
309#endif
310 if (try_shm == 2) _xcbob_sync(conn);
311
312 xcbob->bpl = xcbob->xim->stride;
313 xcbob->psize = (xcbob->bpl * xcbob->h);
314 return xcbob;
315 }
316 shmdt(xcbob->shm_info->shmaddr);
317 shmctl(xcbob->shm_info->shmid, IPC_RMID, 0);
318 }
319 if (xcbob->xim) xcb_image_destroy(xcbob->xim);
320 xcbob->xim = NULL;
321 }
322 if (xcbob->shm_info) free(xcbob->shm_info);
323 xcbob->shm_info = NULL;
324 }
325
326 if (try_shm > 1) return NULL;
327
328 /* no shm */
329 xcbob->xim =
330 _xcbob_create_native(conn, w, h, XCB_IMAGE_FORMAT_Z_PIXMAP,
331 depth, NULL, ~0, NULL);
332 if (!xcbob->xim)
333 {
334 free(xcbob);
335 return NULL;
336 }
337
338 xcbob->data = data;
339
340 if (!xcbob->xim->data)
341 {
342 xcbob->xim->data = malloc(xcbob->xim->stride * xcbob->xim->height);
343 if (!xcbob->xim->data)
344 {
345 xcb_image_destroy(xcbob->xim);
346 free(xcbob);
347 return NULL;
348 }
349 }
350 xcbob->bpl = xcbob->xim->stride;
351 xcbob->psize = (xcbob->bpl * xcbob->h);
352 return xcbob;
353}
354
355void
356evas_software_xcb_output_buffer_free(Xcb_Output_Buffer *xcbob, Eina_Bool sync)
357{
358 if (xcbob->shm_info)
359 {
360 if (sync) _xcbob_sync(xcbob->connection);
361 xcb_shm_detach(xcbob->connection, xcbob->shm_info->shmseg);
362 xcb_image_destroy(xcbob->xim);
363 shmdt(xcbob->shm_info->shmaddr);
364 shmctl(xcbob->shm_info->shmid, IPC_RMID, 0);
365 free(xcbob->shm_info);
366 }
367 else
368 {
369 if (xcbob->data) xcbob->xim->data = NULL;
370// free(xcbob->xim->data);
371 xcb_image_destroy(xcbob->xim);
372 }
373 free(xcbob);
374}
375
376void
377evas_software_xcb_output_buffer_paste(Xcb_Output_Buffer *xcbob, xcb_drawable_t drawable, xcb_gcontext_t gc, int x, int y, Eina_Bool sync)
378{
379 if (xcbob->shm_info)
380 {
381 xcb_image_shm_put(xcbob->connection, drawable, gc, xcbob->xim,
382 *xcbob->shm_info, 0, 0, x, y, xcbob->w, xcbob->h, 0);
383 if (sync) _xcbob_sync(xcbob->connection);
384 }
385 else
386 xcb_image_put(xcbob->connection, drawable, gc, xcbob->xim, x, y, 0);
387}
388
389DATA8 *
390evas_software_xcb_output_buffer_data(Xcb_Output_Buffer *xcbob, int *bpl_ret)
391{
392 if (bpl_ret) *bpl_ret = xcbob->xim->stride;
393 return (DATA8 *)xcbob->xim->data;
394}
395
396int
397evas_software_xcb_output_buffer_depth(Xcb_Output_Buffer *xcbob)
398{
399 return xcbob->xim->bpp;
400}
401
402int
403evas_software_xcb_output_buffer_byte_order(Xcb_Output_Buffer *xcbob)
404{
405 return xcbob->xim->byte_order;
406}
407
408int
409evas_software_xcb_output_buffer_bit_order(Xcb_Output_Buffer *xcbob)
410{
411 return xcbob->xim->bit_order;
412}
413
414/* local functions */
415static void
416_xcbob_sync(xcb_connection_t *conn)
417{
418 free(xcb_get_input_focus_reply(conn,
419 xcb_get_input_focus_unchecked(conn), NULL));
420}
421
422static xcb_image_t *
423_xcbob_create_native(xcb_connection_t *conn, int w, int h, xcb_image_format_t format, uint8_t depth, void *base, uint32_t bytes, uint8_t *data)
424{
425 static uint8_t dpth = 0;
426 static xcb_format_t *fmt = NULL;
427 const xcb_setup_t *setup;
428 xcb_image_format_t xif;
429
430 /* NB: We cannot use xcb_image_create_native as it only creates images
431 * using MSB_FIRST, so this routine recreates that function and uses
432 * the endian-ness of the server setup */
433 setup = xcb_get_setup(conn);
434 xif = format;
435
436 if ((xif == XCB_IMAGE_FORMAT_Z_PIXMAP) && (depth == 1))
437 xif = XCB_IMAGE_FORMAT_XY_PIXMAP;
438
439 if (dpth != depth)
440 {
441 dpth = depth;
442 fmt = _xcbob_find_format(setup, depth);
443 if (!fmt) return 0;
444 }
445
446 switch (xif)
447 {
448 case XCB_IMAGE_FORMAT_XY_BITMAP:
449 if (depth != 1) return 0;
450 case XCB_IMAGE_FORMAT_XY_PIXMAP:
451 case XCB_IMAGE_FORMAT_Z_PIXMAP:
452 return xcb_image_create(w, h, xif,
453 fmt->scanline_pad,
454 fmt->depth, fmt->bits_per_pixel,
455 setup->bitmap_format_scanline_unit,
456 setup->image_byte_order,
457 setup->bitmap_format_bit_order,
458 base, bytes, data);
459 default:
460 break;
461 }
462
463 return 0;
464}
465
466static xcb_format_t *
467_xcbob_find_format(const xcb_setup_t *setup, uint8_t depth)
468{
469 xcb_format_t *fmt, *fmtend;
470
471 fmt = xcb_setup_pixmap_formats(setup);
472 fmtend = fmt + xcb_setup_pixmap_formats_length(setup);
473 for (; fmt != fmtend; ++fmt)
474 if (fmt->depth == depth)
475 return fmt;
476
477 return 0;
478}
479
480static xcb_visualtype_t *
481_xcbob_find_visual_by_id(xcb_screen_t *screen, xcb_visualid_t id)
482{
483 xcb_depth_iterator_t diter;
484 xcb_visualtype_iterator_t viter;
485
486 diter = xcb_screen_allowed_depths_iterator(screen);
487 for (; diter.rem; xcb_depth_next(&diter))
488 {
489 viter = xcb_depth_visuals_iterator(diter.data);
490 for (; viter.rem; xcb_visualtype_next(&viter))
491 {
492 if (viter.data->visual_id == id)
493 return viter.data;
494 }
495 }
496
497 return 0;
498}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.h b/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.h
new file mode 100644
index 0000000..dc1f0b4
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xcb_buffer.h
@@ -0,0 +1,30 @@
1#ifndef EVAS_XCB_BUFFER_H
2# define EVAS_XCB_BUFFER_H
3
4# include "evas_engine.h"
5
6typedef struct _Xcb_Output_Buffer Xcb_Output_Buffer;
7struct _Xcb_Output_Buffer
8{
9 xcb_connection_t *connection;
10 xcb_visualtype_t *visual;
11 xcb_image_t *xim;
12 xcb_shm_segment_info_t *shm_info;
13 unsigned char *data;
14 int w, h, bpl, psize;
15};
16
17void evas_software_xcb_write_mask_line(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int w, int y);
18void evas_software_xcb_write_mask_line_rev(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int w, int y);
19void evas_software_xcb_write_mask_line_vert(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int h, int y, int w);
20void evas_software_xcb_write_mask_line_vert_rev(Outbuf *buf, Xcb_Output_Buffer *xcbob, DATA32 *src, int h, int y, int w);
21Eina_Bool evas_software_xcb_can_do_shm(xcb_connection_t *conn, xcb_screen_t *screen);
22Xcb_Output_Buffer *evas_software_xcb_output_buffer_new(xcb_connection_t *conn, xcb_visualtype_t *vis, int depth, int w, int h, int try_shm, unsigned char *data);
23void evas_software_xcb_output_buffer_free(Xcb_Output_Buffer *xcbob, Eina_Bool sync);
24void evas_software_xcb_output_buffer_paste(Xcb_Output_Buffer *xcbob, xcb_drawable_t drawable, xcb_gcontext_t gc, int x, int y, Eina_Bool sync);
25DATA8 *evas_software_xcb_output_buffer_data(Xcb_Output_Buffer *xcbob, int *bpl_ret);
26int evas_software_xcb_output_buffer_depth(Xcb_Output_Buffer *xcbob);
27int evas_software_xcb_output_buffer_byte_order(Xcb_Output_Buffer *xcbob);
28int evas_software_xcb_output_buffer_bit_order(Xcb_Output_Buffer *xcbob);
29
30#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.c b/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.c
new file mode 100644
index 0000000..3ed6037
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.c
@@ -0,0 +1,424 @@
1#include "evas_common.h"
2
3#include "evas_engine.h"
4
5typedef struct _Convert_Pal_Priv Convert_Pal_Priv;
6
7struct _Convert_Pal_Priv
8{
9 xcb_connection_t *conn;
10 xcb_colormap_t cmap;
11 xcb_visualtype_t *vis;
12};
13
14typedef DATA8 * (*Xcb_Func_Alloc_Colors) (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
15
16static Xcb_Func_Alloc_Colors x_color_alloc[PAL_MODE_LAST + 1];
17static int x_color_count[PAL_MODE_LAST + 1];
18static Eina_List *palettes = NULL;
19
20static DATA8 * x_color_alloc_rgb(int nr, int ng, int nb, xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
21static DATA8 * x_color_alloc_gray(int ng, xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
22
23static DATA8 * x_color_alloc_rgb_332 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
24static DATA8 * x_color_alloc_rgb_666 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
25static DATA8 * x_color_alloc_rgb_232 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
26static DATA8 * x_color_alloc_rgb_222 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
27static DATA8 * x_color_alloc_rgb_221 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
28static DATA8 * x_color_alloc_rgb_121 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
29static DATA8 * x_color_alloc_rgb_111 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
30static DATA8 * x_color_alloc_gray_256 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
31static DATA8 * x_color_alloc_gray_64 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
32static DATA8 * x_color_alloc_gray_16 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
33static DATA8 * x_color_alloc_gray_4 (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
34static DATA8 * x_color_alloc_mono (xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *v);
35
36static DATA8 *
37x_color_alloc_rgb(int nr,
38 int ng,
39 int nb,
40 xcb_connection_t *conn,
41 xcb_colormap_t cmap,
42 xcb_visualtype_t *v)
43{
44 int r, g, b, i;
45 DATA8 *color_lut;
46 int sig_mask = 0;
47 int delt = 0;
48
49 for (i = 0; i < v->bits_per_rgb_value; i++) sig_mask |= (0x1 << i);
50 sig_mask <<= (16 - v->bits_per_rgb_value);
51 i = 0;
52 color_lut = malloc((nr) * (ng) * (nb));
53 if (!color_lut) return NULL;
54 delt = 0x0101 * 3;
55 /* FIXME: remove the round-trip ? */
56 for (r = 0; r < (nr); r++)
57 {
58 for (g = 0; g < (ng); g++)
59 {
60 for (b = 0; b < (nb); b++)
61 {
62 xcb_coloritem_t xcl;
63 xcb_coloritem_t xcl_in;
64 xcb_alloc_color_reply_t *rep;
65 int val;
66 int dr, dg, db;
67
68 val = (int)((((double)r) / ((nr) - 1)) * 255);
69 val = (val << 8) | val;
70 xcl.red = (uint16_t)(val);
71 val = (int)((((double)g) / ((ng) - 1)) * 255);
72 val = (val << 8) | val;
73 xcl.green = (uint16_t)(val);
74 val = (int)((((double)b) / ((nb) - 1)) * 255);
75 val = (val << 8) | val;
76 xcl.blue = (uint16_t)(val);
77 xcl_in = xcl;
78 rep = xcb_alloc_color_reply(conn,
79 xcb_alloc_color_unchecked(conn,
80 cmap,
81 xcl.red,
82 xcl.green,
83 xcl.blue),
84 0);
85 dr = (int)xcl_in.red - (int)xcl.red;
86 if (dr < 0) dr = -dr;
87 dg = (int)xcl_in.green - (int)xcl.green;
88 if (dg < 0) dg = -dg;
89 db = (int)xcl_in.blue - (int)xcl.blue;
90 if (db < 0) db = -db;
91/*
92 printf("ASK [%i]: %04x %04x %04x = %04x %04x %04x | dif = %04x / %04x\n",
93 ret,
94 xcl_in.red, xcl_in.green, xcl_in.blue,
95 xcl.red, xcl.green, xcl.blue,
96 (dr + dg +db), delt);
97 */
98
99 /* TODO: XAllocColor tries to approach the color */
100 /* in case the allocation fails */
101 /* XCB does not that (i think). It should be done */
102 /* So if rep == NULL, the other following tests */
103 /* should be always satisfied */
104 if ((!rep) ||
105 ((dr + dg + db) > delt)
106 /*
107 ((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
108 ((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
109 ((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask))
110 */
111 )
112 {
113 uint32_t pixels[256];
114 int j;
115
116 if (i > 0)
117 {
118 for (j = 0; j < i; j++)
119 pixels[j] = (uint32_t)color_lut[j];
120 xcb_free_colors(conn, cmap, 0, i, pixels);
121 }
122 free(color_lut);
123 return NULL;
124 }
125 color_lut[i] = rep->pixel;
126 i++;
127 free(rep);
128 }
129 }
130 }
131 return color_lut;
132}
133
134static DATA8 *
135x_color_alloc_gray(int ng,
136 xcb_connection_t *conn,
137 xcb_colormap_t cmap,
138 xcb_visualtype_t *v)
139{
140 int g, i;
141 DATA8 *color_lut;
142 int sig_mask = 0;
143
144 for (i = 0; i < v->bits_per_rgb_value; i++) sig_mask |= (0x1 << i);
145 sig_mask <<= (16 - v->bits_per_rgb_value);
146 i = 0;
147 color_lut = malloc(ng);
148 if (!color_lut) return NULL;
149 /* FIXME: remove the round-trip ? */
150 for (g = 0; g < (ng); g++)
151 {
152 xcb_coloritem_t xcl;
153 xcb_coloritem_t xcl_in;
154 int val;
155 xcb_alloc_color_reply_t *rep;
156
157 val = (int)((((double)g) / ((ng) - 1)) * 255);
158 val = (val << 8) | val;
159 xcl.red = (uint16_t)(val);
160 xcl.green = (uint16_t)(val);
161 xcl.blue = (uint16_t)(val);
162 xcl_in = xcl;
163 rep = xcb_alloc_color_reply(conn,
164 xcb_alloc_color_unchecked(conn,
165 cmap,
166 xcl.red,
167 xcl.green,
168 xcl.blue),
169 0);
170 /* FIXME: XAllocColor tries to approach the color */
171 /* in case the allocation fails */
172 /* XCB does not that (i think). It should be done */
173 /* So if rep == NULL, the other following tests */
174 /* should be always satisfied */
175 if ((!rep) ||
176 ((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
177 ((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
178 ((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask)))
179 {
180 uint32_t pixels[256];
181 int j;
182
183 if (i > 0)
184 {
185 for (j = 0; j < i; j++)
186 pixels[j] = (uint32_t) color_lut[j];
187 xcb_free_colors(conn, cmap, 0, i, pixels);
188 }
189 free(color_lut);
190 return NULL;
191 }
192 color_lut[i] = rep->pixel;
193 i++;
194 free(rep);
195 }
196 return color_lut;
197}
198
199static DATA8 *
200x_color_alloc_rgb_332(xcb_connection_t *conn,
201 xcb_colormap_t cmap,
202 xcb_visualtype_t *v)
203{
204 return x_color_alloc_rgb(8, 8, 4, conn, cmap, v);
205}
206
207static DATA8 *
208x_color_alloc_rgb_666(xcb_connection_t *conn,
209 xcb_colormap_t cmap,
210 xcb_visualtype_t *v)
211{
212 return x_color_alloc_rgb(6, 6, 6, conn, cmap, v);
213}
214
215static DATA8 *
216x_color_alloc_rgb_232(xcb_connection_t *conn,
217 xcb_colormap_t cmap,
218 xcb_visualtype_t *v)
219{
220 return x_color_alloc_rgb(4, 8, 4, conn, cmap, v);
221}
222
223static DATA8 *
224x_color_alloc_rgb_222(xcb_connection_t *conn,
225 xcb_colormap_t cmap,
226 xcb_visualtype_t *v)
227{
228 return x_color_alloc_rgb(4, 4, 4, conn, cmap, v);
229}
230
231static DATA8 *
232x_color_alloc_rgb_221(xcb_connection_t *conn,
233 xcb_colormap_t cmap,
234 xcb_visualtype_t *v)
235{
236 return x_color_alloc_rgb(4, 4, 2, conn, cmap, v);
237}
238
239static DATA8 *
240x_color_alloc_rgb_121(xcb_connection_t *conn,
241 xcb_colormap_t cmap,
242 xcb_visualtype_t *v)
243{
244 return x_color_alloc_rgb(2, 4, 2, conn, cmap, v);
245}
246
247static DATA8 *
248x_color_alloc_rgb_111(xcb_connection_t *conn,
249 xcb_colormap_t cmap,
250 xcb_visualtype_t *v)
251{
252 return x_color_alloc_rgb(2, 2, 2, conn, cmap, v);
253}
254
255static DATA8 *
256x_color_alloc_gray_256(xcb_connection_t *conn,
257 xcb_colormap_t cmap,
258 xcb_visualtype_t *v)
259{
260 return x_color_alloc_gray(256, conn, cmap, v);
261}
262
263static DATA8 *
264x_color_alloc_gray_64(xcb_connection_t *conn,
265 xcb_colormap_t cmap,
266 xcb_visualtype_t *v)
267{
268 return x_color_alloc_gray(64, conn, cmap, v);
269}
270
271static DATA8 *
272x_color_alloc_gray_16(xcb_connection_t *conn,
273 xcb_colormap_t cmap,
274 xcb_visualtype_t *v)
275{
276 return x_color_alloc_gray(32, conn, cmap, v);
277}
278
279static DATA8 *
280x_color_alloc_gray_4(xcb_connection_t *conn,
281 xcb_colormap_t cmap,
282 xcb_visualtype_t *v)
283{
284 return x_color_alloc_gray(16, conn, cmap, v);
285}
286
287static DATA8 *
288x_color_alloc_mono(xcb_connection_t *conn,
289 xcb_colormap_t cmap,
290 xcb_visualtype_t *v)
291{
292 return x_color_alloc_gray(2, conn, cmap, v);
293}
294
295void
296evas_software_xcb_color_init(void)
297{
298 static int initialised = 0;
299
300 if (initialised) return;
301 x_color_alloc[PAL_MODE_NONE] = NULL;
302 x_color_count[PAL_MODE_NONE] = 0;
303
304 x_color_alloc[PAL_MODE_MONO] = x_color_alloc_mono;
305 x_color_count[PAL_MODE_MONO] = 2;
306
307 x_color_alloc[PAL_MODE_GRAY4] = x_color_alloc_gray_4;
308 x_color_count[PAL_MODE_GRAY4] = 4;
309
310 x_color_alloc[PAL_MODE_GRAY16] = x_color_alloc_gray_16;
311 x_color_count[PAL_MODE_GRAY16] = 16;
312
313 x_color_alloc[PAL_MODE_GRAY64] = x_color_alloc_gray_64;
314 x_color_count[PAL_MODE_GRAY64] = 64;
315
316 x_color_alloc[PAL_MODE_GRAY256] = x_color_alloc_gray_256;
317 x_color_count[PAL_MODE_GRAY256] = 256;
318
319 x_color_alloc[PAL_MODE_RGB111] = x_color_alloc_rgb_111;
320 x_color_count[PAL_MODE_RGB111] = 2 * 2 * 2;
321
322 x_color_alloc[PAL_MODE_RGB121] = x_color_alloc_rgb_121;
323 x_color_count[PAL_MODE_RGB121] = 2 * 4 * 2;
324
325 x_color_alloc[PAL_MODE_RGB221] = x_color_alloc_rgb_221;
326 x_color_count[PAL_MODE_RGB221] = 4 * 4 * 2;
327
328 x_color_alloc[PAL_MODE_RGB222] = x_color_alloc_rgb_222;
329 x_color_count[PAL_MODE_RGB222] = 4 * 4 * 4;
330
331 x_color_alloc[PAL_MODE_RGB232] = x_color_alloc_rgb_232;
332 x_color_count[PAL_MODE_RGB232] = 4 * 8 * 4;
333
334 x_color_alloc[PAL_MODE_RGB666] = x_color_alloc_rgb_666;
335 x_color_count[PAL_MODE_RGB666] = 6 * 6 * 6;
336
337 x_color_alloc[PAL_MODE_RGB332] = x_color_alloc_rgb_332;
338 x_color_count[PAL_MODE_RGB332] = 8 * 8 * 4;
339
340 x_color_alloc[PAL_MODE_LAST] = NULL;
341 x_color_count[PAL_MODE_LAST] = 0;
342 initialised = 1;
343}
344
345Convert_Pal *
346evas_software_xcb_color_allocate(xcb_connection_t *conn,
347 xcb_colormap_t cmap,
348 xcb_visualtype_t *vis,
349 Convert_Pal_Mode colors)
350{
351 Convert_Pal_Priv *palpriv;
352 Convert_Pal *pal;
353 Convert_Pal_Mode c;
354 Eina_List *l;
355
356/* printf("ALLOC cmap=%i vis=%p\n", cmap, vis);*/
357 EINA_LIST_FOREACH(palettes, l, pal)
358 {
359 palpriv = pal->data;
360 if ((conn == palpriv->conn) &&
361 (vis == palpriv->vis) &&
362 (cmap == palpriv->cmap))
363 {
364 pal->references++;
365 return pal;
366 }
367 }
368 pal = calloc(1, sizeof(struct _Convert_Pal));
369 if (!pal) return NULL;
370 for (c = colors; c > PAL_MODE_NONE; c--)
371 {
372 if (x_color_alloc[c])
373 {
374/* printf("TRY PAL %i\n", c);*/
375 pal->lookup = (x_color_alloc[c])(conn, cmap, vis);
376 if (pal->lookup) break;
377 }
378 }
379 pal->references = 1;
380 pal->colors = c;
381 pal->count = x_color_count[c];
382 palpriv = calloc(1, sizeof(Convert_Pal_Priv));
383 pal->data = palpriv;
384 if (!palpriv)
385 {
386 if (pal->lookup) free(pal->lookup);
387 free(pal);
388 return NULL;
389 }
390 palpriv->conn = conn;
391 palpriv->vis = vis;
392 palpriv->cmap = cmap;
393 if (pal->colors == PAL_MODE_NONE)
394 {
395 if (pal->lookup) free(pal->lookup);
396 free(pal);
397 return NULL;
398 }
399 palettes = eina_list_append(palettes, pal);
400 return pal;
401}
402
403void
404evas_software_xcb_color_deallocate(xcb_connection_t *conn,
405 xcb_colormap_t cmap,
406 xcb_visualtype_t *vis __UNUSED__,
407 Convert_Pal *pal)
408{
409 uint32_t pixels[256];
410 int j;
411
412 pal->references--;
413 if (pal->references > 0) return;
414 if (pal->lookup)
415 {
416 for(j = 0; j < pal->count; j++)
417 pixels[j] = (uint32_t) pal->lookup[j];
418 xcb_free_colors(conn, cmap, 0, pal->count, pixels);
419 free(pal->lookup);
420 }
421 free(pal->data);
422 palettes = eina_list_remove(palettes, pal);
423 free(pal);
424}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.h b/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.h
new file mode 100644
index 0000000..7dcaeaf
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xcb_color.h
@@ -0,0 +1,10 @@
1#ifndef EVAS_XCB_COLOR_H
2# define EVAS_XCB_COLOR_H
3
4# include "evas_engine.h"
5
6void evas_software_xcb_color_init(void);
7Convert_Pal *evas_software_xcb_color_allocate(xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *vis, Convert_Pal_Mode colors);
8void evas_software_xcb_color_deallocate(xcb_connection_t *conn, xcb_colormap_t cmap, xcb_visualtype_t *vis, Convert_Pal *pal);
9
10#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_main.c b/libraries/evas/src/modules/engines/software_x11/evas_xcb_main.c
new file mode 100644
index 0000000..d187016
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xcb_main.c
@@ -0,0 +1,8 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4void
5evas_software_xcb_init(void)
6{
7
8}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.c b/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.c
new file mode 100644
index 0000000..71759be
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.c
@@ -0,0 +1,1092 @@
1#include "evas_common.h"
2#include "evas_macros.h"
3#include "evas_xcb_outbuf.h"
4#include "evas_xcb_buffer.h"
5#include "evas_xcb_color.h"
6#include <pixman.h>
7
8/* local structures */
9typedef struct _Outbuf_Region Outbuf_Region;
10struct _Outbuf_Region
11{
12 Xcb_Output_Buffer *xcbob, *mask;
13 int x, y, w, h;
14};
15
16/* local function prototypes */
17static Xcb_Output_Buffer *_find_xcbob(xcb_connection_t *conn, xcb_visualtype_t *vis, int depth, int w, int h, Eina_Bool shm, void *data);
18static void _unfind_xcbob(Xcb_Output_Buffer *xcbob, Eina_Bool sync);
19static void _clear_xcbob(Eina_Bool sync);
20static void _xcbob_sync(xcb_connection_t *conn);
21
22/* local variables */
23static Eina_List *_shmpool = NULL;
24static int _shmsize = 0;
25static int _shmlimit = (10 * 1024 * 1024);
26static const unsigned int _shmcountlimit = 32;
27
28#ifdef EVAS_FRAME_QUEUING
29static LK(lock_shmpool);
30# define SHMPOOL_LOCK() LKL(lock_shmpool);
31# define SHMPOOL_UNLOCK() LKU(lock_shmpool);
32#else
33# define SHMPOOL_LOCK()
34# define SHMPOOL_UNLOCK()
35#endif
36
37void
38evas_software_xcb_outbuf_init(void)
39{
40#ifdef EVAS_FRAME_QUEUING
41 LKI(lock_shmpool);
42#endif
43}
44
45void
46evas_software_xcb_outbuf_free(Outbuf *buf)
47{
48#ifdef EVAS_FRAME_QUEUING
49 LKL(buf->priv.lock);
50#endif
51 while (buf->priv.pending_writes)
52 {
53 RGBA_Image *im = NULL;
54 Outbuf_Region *obr = NULL;
55
56 im = buf->priv.pending_writes->data;
57 buf->priv.pending_writes =
58 eina_list_remove_list(buf->priv.pending_writes,
59 buf->priv.pending_writes);
60 obr = im->extended_info;
61 evas_cache_image_drop(&im->cache_entry);
62 if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
63 if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
64 free(obr);
65 }
66#ifdef EVAS_FRAME_QUEUING
67 LKU(buf->priv.lock);
68#endif
69 evas_software_xcb_outbuf_idle_flush(buf);
70 evas_software_xcb_outbuf_flush(buf);
71 if (buf->priv.x11.xcb.gc)
72 xcb_free_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gc);
73 if (buf->priv.x11.xcb.gcm)
74 xcb_free_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gcm);
75 if (buf->priv.pal)
76 evas_software_xcb_color_deallocate(buf->priv.x11.xcb.conn,
77 buf->priv.x11.xcb.cmap,
78 buf->priv.x11.xcb.visual,
79 buf->priv.pal);
80#ifdef EVAS_FRAME_QUEUING
81 LKD(buf->priv.lock);
82#endif
83 free(buf);
84 _clear_xcbob(EINA_FALSE);
85}
86
87Outbuf *
88evas_software_xcb_outbuf_setup(int w, int h, int rot, Outbuf_Depth depth, xcb_connection_t *conn, xcb_screen_t *screen, xcb_drawable_t draw, xcb_visualtype_t *vis, xcb_colormap_t cmap, int xdepth, Eina_Bool grayscale, int max_colors, xcb_drawable_t mask, Eina_Bool shape_dither, Eina_Bool alpha)
89{
90 Outbuf *buf = NULL;
91 Gfx_Func_Convert func_conv= NULL;
92 const xcb_setup_t *setup;
93
94 if (!(buf = calloc(1, sizeof(Outbuf))))
95 return NULL;
96
97 setup = xcb_get_setup(conn);
98
99 buf->w = w;
100 buf->h = h;
101 buf->depth = depth;
102 buf->rot = rot;
103 buf->priv.x11.xcb.conn = conn;
104 buf->priv.x11.xcb.screen = screen;
105 buf->priv.x11.xcb.visual = vis;
106 buf->priv.x11.xcb.cmap = cmap;
107 buf->priv.x11.xcb.depth = xdepth;
108 buf->priv.mask_dither = shape_dither;
109 buf->priv.destination_alpha = alpha;
110 buf->priv.x11.xcb.shm = evas_software_xcb_can_do_shm(conn, screen);
111
112#ifdef WORDS_BIGENDIAN
113 if (setup->image_byte_order == XCB_IMAGE_ORDER_LSB_FIRST)
114 buf->priv.x11.xcb.swap = EINA_TRUE;
115#else
116 if (setup->image_byte_order == XCB_IMAGE_ORDER_MSB_FIRST)
117 buf->priv.x11.xcb.swap = EINA_TRUE;
118#endif
119 if (setup->bitmap_format_bit_order == XCB_IMAGE_ORDER_MSB_FIRST)
120 buf->priv.x11.xcb.bit_swap = EINA_TRUE;
121
122 if (((vis->_class == XCB_VISUAL_CLASS_TRUE_COLOR) ||
123 (vis->_class == XCB_VISUAL_CLASS_DIRECT_COLOR)) && (xdepth > 8))
124 {
125 buf->priv.mask.r = (DATA32)vis->red_mask;
126 buf->priv.mask.g = (DATA32)vis->green_mask;
127 buf->priv.mask.b = (DATA32)vis->blue_mask;
128 if (buf->priv.x11.xcb.swap)
129 {
130 SWAP32(buf->priv.mask.r);
131 SWAP32(buf->priv.mask.g);
132 SWAP32(buf->priv.mask.b);
133 }
134 }
135 else if ((vis->_class == XCB_VISUAL_CLASS_PSEUDO_COLOR) ||
136 (vis->_class == XCB_VISUAL_CLASS_STATIC_COLOR) ||
137 (vis->_class == XCB_VISUAL_CLASS_GRAY_SCALE) ||
138 (vis->_class == XCB_VISUAL_CLASS_STATIC_GRAY) ||
139 (xdepth <= 8))
140 {
141 Convert_Pal_Mode pm = PAL_MODE_RGB332;
142
143 if ((vis->_class == XCB_VISUAL_CLASS_GRAY_SCALE) ||
144 (vis->_class == XCB_VISUAL_CLASS_STATIC_GRAY))
145 grayscale = EINA_TRUE;
146 if (grayscale)
147 {
148 if (max_colors >= 256)
149 pm = PAL_MODE_GRAY256;
150 else if (max_colors >= 64)
151 pm = PAL_MODE_GRAY64;
152 else if (max_colors >= 16)
153 pm = PAL_MODE_GRAY16;
154 else if (max_colors >= 4)
155 pm = PAL_MODE_GRAY4;
156 else
157 pm = PAL_MODE_MONO;
158 }
159 else
160 {
161 if (max_colors >= 256)
162 pm = PAL_MODE_RGB332;
163 else if (max_colors >= 216)
164 pm = PAL_MODE_RGB666;
165 else if (max_colors >= 128)
166 pm = PAL_MODE_RGB232;
167 else if (max_colors >= 64)
168 pm = PAL_MODE_RGB222;
169 else if (max_colors >= 32)
170 pm = PAL_MODE_RGB221;
171 else if (max_colors >= 16)
172 pm = PAL_MODE_RGB121;
173 else if (max_colors >= 8)
174 pm = PAL_MODE_RGB111;
175 else if (max_colors >= 4)
176 pm = PAL_MODE_GRAY4;
177 else
178 pm = PAL_MODE_MONO;
179 }
180 /* FIXME: Only allocate once per display & colormap */
181 buf->priv.pal =
182 evas_software_xcb_color_allocate(conn, cmap, vis, pm);
183 if (!buf->priv.pal)
184 {
185 free(buf);
186 return NULL;
187 }
188 }
189 if ((buf->rot == 0) || (buf->rot == 180))
190 {
191 w = buf->w;
192 h = buf->h;
193 }
194 else if ((buf->rot == 90) || (buf->rot == 270))
195 {
196 w = buf->h;
197 h = buf->w;
198 }
199
200 if (buf->priv.pal)
201 {
202 func_conv =
203 evas_common_convert_func_get(0, w, h, xdepth,
204 buf->priv.mask.r,
205 buf->priv.mask.g,
206 buf->priv.mask.b,
207 buf->priv.pal->colors, buf->rot);
208 }
209 else
210 {
211 func_conv =
212 evas_common_convert_func_get(0, w, h, xdepth,
213 buf->priv.mask.r,
214 buf->priv.mask.g,
215 buf->priv.mask.b,
216 PAL_MODE_NONE, buf->rot);
217 }
218 if (!func_conv)
219 {
220 ERR("XCB Engine"
221 " {"
222 " At depth %i:"
223 " RGB format mask: %08x, %08x, %08x"
224 " Palette mode: %i"
225 " Not supported by any compiled in converters!"
226 " }", buf->priv.x11.xcb.depth, buf->priv.mask.r,
227 buf->priv.mask.g, buf->priv.mask.b,
228 buf->priv.pal ? (int)buf->priv.pal->colors : -1);
229 }
230
231 evas_software_xcb_outbuf_drawable_set(buf, draw);
232 evas_software_xcb_outbuf_mask_set(buf, mask);
233
234#ifdef EVAS_FRAME_QUEUING
235 LKI(buf->priv.lock);
236#endif
237
238 return buf;
239}
240
241RGBA_Image *
242evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch)
243{
244 RGBA_Image *im = NULL;
245 Outbuf_Region *obr = NULL;
246 Eina_Bool use_shm = EINA_TRUE;
247 Eina_Bool alpha = EINA_FALSE;
248 int bpl = 0;
249
250 if ((buf->onebuf) && (buf->priv.x11.xcb.shm))
251 {
252 Eina_Rectangle *rect;
253
254 RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, buf->w, buf->h);
255
256 if (!(obr = calloc(1, sizeof(Outbuf_Region))))
257 return NULL;
258
259 if (!(rect = eina_rectangle_new(x, y, w, h)))
260 {
261 free(obr);
262 return NULL;
263 }
264
265 buf->priv.onebuf_regions =
266 eina_list_append(buf->priv.onebuf_regions, rect);
267 if (buf->priv.onebuf)
268 {
269 if (cx) *cx = x;
270 if (cy) *cy = y;
271 if (cw) *cw = w;
272 if (ch) *ch = h;
273 if (!buf->priv.synced)
274 {
275 _xcbob_sync(buf->priv.x11.xcb.conn);
276 buf->priv.synced = EINA_TRUE;
277 }
278 return buf->priv.onebuf;
279 }
280 obr->x = 0;
281 obr->y = 0;
282 obr->w = buf->w;
283 obr->h = buf->h;
284 if (cx) *cx = x;
285 if (cy) *cy = y;
286 if (cw) *cw = w;
287 if (ch) *ch = h;
288
289 alpha = ((buf->priv.x11.xcb.mask) || (buf->priv.destination_alpha));
290 use_shm = buf->priv.x11.xcb.shm;
291
292 if ((buf->rot == 0) && (buf->priv.mask.r == 0xff0000) &&
293 (buf->priv.mask.g == 0x00ff00) && (buf->priv.mask.b == 0x0000ff))
294 {
295 obr->xcbob =
296 evas_software_xcb_output_buffer_new(buf->priv.x11.xcb.conn,
297 buf->priv.x11.xcb.visual,
298 buf->priv.x11.xcb.depth,
299 buf->w, buf->h, use_shm,
300 NULL);
301 if (!obr->xcbob)
302 {
303 free(obr);
304 return NULL;
305 }
306 im =
307 (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
308 buf->w, buf->h,
309 (DATA32 *)evas_software_xcb_output_buffer_data(obr->xcbob, &bpl),
310 alpha, EVAS_COLORSPACE_ARGB8888);
311 if (!im)
312 {
313 evas_software_xcb_output_buffer_free(obr->xcbob, EINA_FALSE);
314 free(obr);
315 return NULL;
316 }
317 im->extended_info = obr;
318 if (buf->priv.x11.xcb.mask)
319 {
320 obr->mask =
321 evas_software_xcb_output_buffer_new(buf->priv.x11.xcb.conn,
322 buf->priv.x11.xcb.visual,
323 1, buf->w, buf->h,
324 use_shm, NULL);
325 }
326 }
327 else
328 {
329 int bw = 0, bh = 0;
330
331 im =
332 (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
333 if (!im)
334 {
335 free(obr);
336 return NULL;
337 }
338 im->cache_entry.flags.alpha |= (alpha ? 1 : 0);
339 evas_cache_image_surface_alloc(&im->cache_entry, buf->w, buf->h);
340 im->extended_info = obr;
341 if ((buf->rot == 0) || (buf->rot == 180))
342 {
343 bw = buf->w;
344 bh = buf->h;
345 }
346 else if ((buf->rot == 90) || (buf->rot == 270))
347 {
348 bw = buf->h;
349 bh = buf->w;
350 }
351 obr->xcbob =
352 evas_software_xcb_output_buffer_new(buf->priv.x11.xcb.conn,
353 buf->priv.x11.xcb.visual,
354 buf->priv.x11.xcb.depth,
355 bw, bh, use_shm, NULL);
356 if (!obr->xcbob)
357 {
358 evas_cache_image_drop(&im->cache_entry);
359 free(obr);
360 return NULL;
361 }
362 if (buf->priv.x11.xcb.mask)
363 {
364 obr->mask =
365 evas_software_xcb_output_buffer_new(buf->priv.x11.xcb.conn,
366 buf->priv.x11.xcb.visual,
367 1, bw, bh, use_shm,
368 NULL);
369 }
370 }
371 /* FIXME: We should be able to remove this memset. */
372 if ((alpha) && (im->image.data))
373 {
374 /* FIXME: Faster memset */
375// memset(im->image.data, 0, (w * h * sizeof(DATA32)));
376 }
377 buf->priv.onebuf = im;
378 return im;
379 }
380
381 if (!(obr = calloc(1, sizeof(Outbuf_Region))))
382 return NULL;
383
384 obr->x = x;
385 obr->y = y;
386 obr->w = w;
387 obr->h = h;
388 if (cx) *cx = 0;
389 if (cy) *cy = 0;
390 if (cw) *cw = w;
391 if (ch) *ch = h;
392
393 use_shm = buf->priv.x11.xcb.shm;
394 alpha = ((buf->priv.x11.xcb.mask) || (buf->priv.destination_alpha));
395 if ((buf->rot == 0) && (buf->priv.mask.r == 0xff0000) &&
396 (buf->priv.mask.g == 0x00ff00) && (buf->priv.mask.b == 0x0000ff))
397 {
398 obr->xcbob =
399 _find_xcbob(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.visual,
400 buf->priv.x11.xcb.depth, w, h, use_shm, NULL);
401 if (!obr->xcbob)
402 {
403 free(obr);
404 return NULL;
405 }
406 im =
407 (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
408 w, h,
409 (DATA32 *)evas_software_xcb_output_buffer_data(obr->xcbob, &bpl),
410 alpha, EVAS_COLORSPACE_ARGB8888);
411 if (!im)
412 {
413 _unfind_xcbob(obr->xcbob, EINA_FALSE);
414 free(obr);
415 return NULL;
416 }
417 im->extended_info = obr;
418 if (buf->priv.x11.xcb.mask)
419 {
420 obr->mask =
421 _find_xcbob(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.visual,
422 1, w, h, use_shm, NULL);
423 }
424 }
425 else
426 {
427 int bw = 0, bh = 0;
428
429 im =
430 (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
431 if (!im)
432 {
433 free(obr);
434 return NULL;
435 }
436 im->cache_entry.flags.alpha |= (alpha ? 1 : 0);
437 evas_cache_image_surface_alloc(&im->cache_entry, w, h);
438 im->extended_info = obr;
439 if ((buf->rot == 0) || (buf->rot == 180))
440 {
441 bw = w;
442 bh = h;
443 }
444 else if ((buf->rot == 90) || (buf->rot == 270))
445 {
446 bw = h;
447 bh = w;
448 }
449 obr->xcbob =
450 _find_xcbob(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.visual,
451 buf->priv.x11.xcb.depth, bw, bh, use_shm, NULL);
452 if (!obr->xcbob)
453 {
454 evas_cache_image_drop(&im->cache_entry);
455 free(obr);
456 return NULL;
457 }
458 if (buf->priv.x11.xcb.mask)
459 {
460 obr->mask =
461 _find_xcbob(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.visual, 1,
462 bw, bh, use_shm, NULL);
463 }
464 }
465 /* FIXME: We should be able to remove this memset. */
466 if (((buf->priv.x11.xcb.mask) || (buf->priv.destination_alpha)) &&
467 (im->image.data))
468 {
469 /* FIXME: Faster memset */
470// memset(im->image.data, 0, (w * h * sizeof(DATA32)));
471 }
472
473#ifdef EVAS_FRAME_QUEUING
474 if (!evas_common_frameq_enabled())
475#endif
476 buf->priv.pending_writes = eina_list_append(buf->priv.pending_writes, im);
477
478 return im;
479}
480
481void
482evas_software_xcb_outbuf_free_region_for_update(Outbuf *buf __UNUSED__, RGBA_Image *update __UNUSED__)
483{
484 /* NOOP: Cleaned up on flush */
485}
486
487void
488evas_software_xcb_outbuf_flush(Outbuf *buf)
489{
490 Eina_List *l = NULL;
491 RGBA_Image *im = NULL;
492 Outbuf_Region *obr = NULL;
493
494 if ((buf->priv.onebuf) && (buf->priv.onebuf_regions))
495 {
496 pixman_region16_t tmpr;
497
498 im = buf->priv.onebuf;
499 obr = im->extended_info;
500 pixman_region_init(&tmpr);
501 while (buf->priv.onebuf_regions)
502 {
503 Eina_Rectangle *rect, xr = { 0, 0, 0, 0 };
504
505 rect = buf->priv.onebuf_regions->data;
506 buf->priv.onebuf_regions =
507 eina_list_remove_list(buf->priv.onebuf_regions,
508 buf->priv.onebuf_regions);
509 if (buf->rot == 0)
510 {
511 xr.x = rect->x;
512 xr.y = rect->y;
513 xr.w = rect->w;
514 xr.h = rect->h;
515 }
516 else if (buf->rot == 90)
517 {
518 xr.x = rect->y;
519 xr.y = buf->w - rect->x - rect->w;
520 xr.w = rect->h;
521 xr.h = rect->w;
522 }
523 else if (buf->rot == 180)
524 {
525 xr.x = buf->w - rect->x - rect->w;
526 xr.y = buf->h - rect->y - rect->h;
527 xr.w = rect->w;
528 xr.h = rect->h;
529 }
530 else if (buf->rot == 270)
531 {
532 xr.x = buf->h - rect->y - rect->h;
533 xr.y = rect->x;
534 xr.w = rect->h;
535 xr.h = rect->w;
536 }
537 pixman_region_union_rect(&tmpr, &tmpr, xr.x, xr.y, xr.w, xr.h);
538 if (buf->priv.debug)
539 evas_software_xcb_outbuf_debug_show(buf, buf->priv.x11.xcb.win,
540 xr.x, xr.y, xr.w, xr.h);
541 eina_rectangle_free(rect);
542 }
543 xcb_set_clip_rectangles(buf->priv.x11.xcb.conn,
544 XCB_CLIP_ORDERING_YX_BANDED,
545 buf->priv.x11.xcb.gc, 0, 0,
546 pixman_region_n_rects(&tmpr),
547 (const xcb_rectangle_t *)pixman_region_rectangles(&tmpr, NULL));
548 if (obr->xcbob)
549 evas_software_xcb_output_buffer_paste(obr->xcbob,
550 buf->priv.x11.xcb.win,
551 buf->priv.x11.xcb.gc, 0, 0, 0);
552 if (obr->mask)
553 {
554 xcb_set_clip_rectangles(buf->priv.x11.xcb.conn,
555 XCB_CLIP_ORDERING_YX_BANDED,
556 buf->priv.x11.xcb.gcm, 0, 0,
557 pixman_region_n_rects(&tmpr),
558 (const xcb_rectangle_t *)pixman_region_rectangles(&tmpr, NULL));
559 evas_software_xcb_output_buffer_paste(obr->mask,
560 buf->priv.x11.xcb.mask,
561 buf->priv.x11.xcb.gcm,
562 0, 0, 0);
563 }
564 pixman_region_fini(&tmpr);
565 buf->priv.synced = EINA_FALSE;
566 }
567 else
568 {
569#if 1
570 _xcbob_sync(buf->priv.x11.xcb.conn);
571 EINA_LIST_FOREACH(buf->priv.pending_writes, l, im)
572 {
573 obr = im->extended_info;
574 if (buf->priv.debug)
575 evas_software_xcb_outbuf_debug_show(buf, buf->priv.x11.xcb.win,
576 obr->x, obr->y, obr->w, obr->h);
577 if (obr->xcbob)
578 evas_software_xcb_output_buffer_paste(obr->xcbob,
579 buf->priv.x11.xcb.win,
580 buf->priv.x11.xcb.gc,
581 obr->x, obr->y, 0);
582 if (obr->mask)
583 evas_software_xcb_output_buffer_paste(obr->mask,
584 buf->priv.x11.xcb.mask,
585 buf->priv.x11.xcb.gcm,
586 obr->x, obr->y, 0);
587 }
588# ifdef EVAS_FRAME_QUEUING
589 LKL(buf->priv.lock);
590# endif
591 while (buf->priv.prev_pending_writes)
592 {
593 im = buf->priv.prev_pending_writes->data;
594 buf->priv.prev_pending_writes =
595 eina_list_remove_list(buf->priv.prev_pending_writes,
596 buf->priv.prev_pending_writes);
597 obr = im->extended_info;
598 evas_cache_image_drop(&im->cache_entry);
599 if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
600 if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
601 free(obr);
602 }
603 buf->priv.prev_pending_writes = buf->priv.pending_writes;
604# ifdef EVAS_FRAME_QUEUING
605 LKU(buf->priv.lock);
606# endif
607 buf->priv.pending_writes = NULL;
608 xcb_flush(buf->priv.x11.xcb.conn);
609#else
610 /* FIXME: Async Push Disabled */
611
612 _xcbob_sync(buf->priv.x11.xcb.conn);
613 while (buf->priv.pending_writes)
614 {
615 im = eina_list_data_get(buf->priv.pending_writes);
616 buf->priv.pending_writes =
617 eina_list_remove_list(buf->priv.pending_writes,
618 buf->priv.pending_writes);
619 obr = im->extended_info;
620 evas_cache_image_drop(&im->cache_entry);
621 if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
622 if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
623 free(obr);
624 evas_cache_image_drop(&im->cache_entry);
625 }
626#endif
627 }
628 evas_common_cpu_end_opt();
629}
630
631void
632evas_software_xcb_outbuf_idle_flush(Outbuf *buf)
633{
634 if (buf->priv.onebuf)
635 {
636 RGBA_Image *im;
637 Outbuf_Region *obr;
638
639 im = buf->priv.onebuf;
640 buf->priv.onebuf = NULL;
641 obr = im->extended_info;
642 if (obr->xcbob)
643 evas_software_xcb_output_buffer_free(obr->xcbob, EINA_FALSE);
644 if (obr->mask)
645 evas_software_xcb_output_buffer_free(obr->mask, EINA_FALSE);
646 free(obr);
647 evas_cache_image_drop(&im->cache_entry);
648 }
649 else
650 {
651#ifdef EVAS_FRAME_QUEUING
652 LKL(buf->priv.lock);
653#endif
654 if (buf->priv.prev_pending_writes)
655 _xcbob_sync(buf->priv.x11.xcb.conn);
656 while (buf->priv.prev_pending_writes)
657 {
658 RGBA_Image *im;
659 Outbuf_Region *obr;
660
661 im = buf->priv.prev_pending_writes->data;
662 buf->priv.prev_pending_writes =
663 eina_list_remove_list(buf->priv.prev_pending_writes,
664 buf->priv.prev_pending_writes);
665 obr = im->extended_info;
666 evas_cache_image_drop(&im->cache_entry);
667 if (obr->xcbob) _unfind_xcbob(obr->xcbob, EINA_FALSE);
668 if (obr->mask) _unfind_xcbob(obr->mask, EINA_FALSE);
669 free(obr);
670 }
671#ifdef EVAS_FRAME_QUEUING
672 LKU(buf->priv.lock);
673#endif
674 _clear_xcbob(EINA_FALSE);
675 }
676}
677
678void
679evas_software_xcb_outbuf_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h)
680{
681 Gfx_Func_Convert func_conv = NULL;
682 Outbuf_Region *obr = NULL;
683 DATA32 *src_data = NULL;
684 unsigned char *data = NULL;
685 int bpl = 0, yy = 0;
686 int bw = 0, bh = 0;
687
688 obr = update->extended_info;
689 if (!obr->xcbob) return;
690
691 if ((buf->rot == 0) || (buf->rot == 180))
692 {
693 bw = w;
694 bh = h;
695 }
696 else if ((buf->rot == 90) || (buf->rot == 270))
697 {
698 bw = h;
699 bh = w;
700 }
701 if (buf->priv.pal)
702 {
703 func_conv =
704 evas_common_convert_func_get(0, bw, bh, buf->depth, buf->priv.mask.r,
705 buf->priv.mask.g, buf->priv.mask.b,
706 buf->priv.pal->colors, buf->rot);
707 }
708 else
709 {
710 func_conv =
711 evas_common_convert_func_get(0, bw, bh, buf->depth, buf->priv.mask.r,
712 buf->priv.mask.g, buf->priv.mask.b,
713 PAL_MODE_NONE, buf->rot);
714 }
715 if (!func_conv) return;
716
717 if (!(data = evas_software_xcb_output_buffer_data(obr->xcbob, &bpl)))
718 return;
719 if (!(src_data = update->image.data)) return;
720 if (buf->rot == 0)
721 {
722 obr->x = x;
723 obr->y = y;
724 obr->w = w;
725 obr->h = h;
726 }
727 else if (buf->rot == 90)
728 {
729 obr->x = y;
730 obr->y = (buf->w - x - w);
731 obr->w = h;
732 obr->h = w;
733 }
734 else if (buf->rot == 180)
735 {
736 obr->x = (buf->w - x - w);
737 obr->y = (buf->h - y - h);
738 obr->w = w;
739 obr->h = h;
740 }
741 else if (buf->rot == 270)
742 {
743 obr->x = (buf->h - y - h);
744 obr->y = x;
745 obr->w = h;
746 obr->h = w;
747 }
748 if (buf->onebuf)
749 {
750 src_data += x + (y * update->cache_entry.w);
751 data += (bpl * obr->y) + (obr->x * (buf->depth / 8));
752 }
753 if (data != (unsigned char *)src_data)
754 {
755 if (buf->priv.pal)
756 func_conv(src_data, data, update->cache_entry.w - w,
757 (bpl / (buf->depth / 8)) - obr->w,
758 obr->w, obr->h, x, y, buf->priv.pal->lookup);
759 else
760 func_conv(src_data, data, update->cache_entry.w - w,
761 (bpl / (buf->depth / 8)) - obr->w,
762 obr->w, obr->h, x, y, NULL);
763 }
764#if 1
765#else
766 /* Async Push */
767 if (!((buf->priv.onebuf) && (buf->priv.onebuf_regions)))
768 {
769 if (buf->priv.debug)
770 evas_software_xcb_outbuf_debug_show(buf, buf->priv.x11.xcb.win,
771 obr->x, obr->y, obr->w, obr->h);
772 if (obr->xcbob)
773 evas_software_xcb_output_buffer_paste(obr->xcbob,
774 buf->priv.x11.xcb.win,
775 buf->priv.x11.xcb.gc,
776 obr->x, obr->y, 0);
777 }
778#endif
779 if (obr->mask)
780 {
781 if (buf->rot == 0)
782 {
783 for (yy = 0; yy < obr->h; yy++)
784 evas_software_xcb_write_mask_line(buf, obr->mask,
785 src_data + (yy * obr->w),
786 obr->w, yy);
787 }
788 else if (buf->rot == 90)
789 {
790 for (yy = 0; yy < obr->h; yy++)
791 evas_software_xcb_write_mask_line_vert(buf, obr->mask,
792 src_data + yy,
793 h, (obr->h - yy - 1), w);
794 }
795 else if (buf->rot == 180)
796 {
797 for (yy = 0; yy < obr->h; yy++)
798 evas_software_xcb_write_mask_line_rev(buf, obr->mask,
799 src_data + (yy * obr->w),
800 obr->w, (obr->h - yy - 1));
801 }
802 else if (buf->rot == 270)
803 {
804 for (yy = 0; yy < obr->h; yy++)
805 evas_software_xcb_write_mask_line_vert_rev(buf, obr->mask,
806 src_data + yy,
807 h, yy, w);
808 }
809#if 1
810#else
811 /* Async Push */
812 if (!((buf->priv.onebuf) && (buf->priv.onebuf_regions)))
813 evas_software_xcb_output_buffer_paste(obr->mask,
814 buf->priv.x11.xcb.mask,
815 buf->priv.x11.xcb.gcm,
816 obr->x, obr->y, 0);
817#endif
818 }
819#if 1
820#else
821 xcb_flush(buf->priv.x11.xcb.conn);
822#endif
823}
824
825void
826evas_software_xcb_outbuf_reconfigure(Outbuf *buf, int w, int h, int rot, Outbuf_Depth depth)
827{
828 if ((w == buf->w) && (h == buf->h) && (rot == buf->rot) &&
829 (depth == buf->depth)) return;
830 buf->w = w;
831 buf->h = h;
832 buf->rot = rot;
833 evas_software_xcb_outbuf_idle_flush(buf);
834}
835
836int
837evas_software_xcb_outbuf_width_get(Outbuf *buf)
838{
839 return buf->w;
840}
841
842int
843evas_software_xcb_outbuf_height_get(Outbuf *buf)
844{
845 return buf->h;
846}
847
848Outbuf_Depth
849evas_software_xcb_outbuf_depth_get(Outbuf *buf)
850{
851 return buf->depth;
852}
853
854void
855evas_software_xcb_outbuf_drawable_set(Outbuf *buf, xcb_drawable_t drawable)
856{
857 if (buf->priv.x11.xcb.win == drawable) return;
858 if (buf->priv.x11.xcb.gc)
859 {
860 xcb_free_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gc);
861 buf->priv.x11.xcb.gc = 0;
862 }
863 buf->priv.x11.xcb.win = drawable;
864 buf->priv.x11.xcb.gc = xcb_generate_id(buf->priv.x11.xcb.conn);
865 xcb_create_gc(buf->priv.x11.xcb.conn,
866 buf->priv.x11.xcb.gc, buf->priv.x11.xcb.win, 0, NULL);
867}
868
869void
870evas_software_xcb_outbuf_mask_set(Outbuf *buf, xcb_drawable_t mask)
871{
872 if (buf->priv.x11.xcb.mask == mask) return;
873 if (buf->priv.x11.xcb.gcm)
874 {
875 xcb_free_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gcm);
876 buf->priv.x11.xcb.gcm = 0;
877 }
878 buf->priv.x11.xcb.mask = mask;
879 if (buf->priv.x11.xcb.mask)
880 {
881 buf->priv.x11.xcb.gcm = xcb_generate_id(buf->priv.x11.xcb.conn);
882 xcb_create_gc(buf->priv.x11.xcb.conn,
883 buf->priv.x11.xcb.gcm, buf->priv.x11.xcb.mask, 0, NULL);
884 }
885}
886
887int
888evas_software_xcb_outbuf_rotation_get(Outbuf *buf)
889{
890 return buf->rot;
891}
892
893void
894evas_software_xcb_outbuf_rotation_set(Outbuf *buf, int rotation)
895{
896 buf->rot = rotation;
897}
898
899Eina_Bool
900evas_software_xcb_outbuf_alpha_get(Outbuf *buf)
901{
902 return buf->priv.x11.xcb.mask;
903}
904
905void
906evas_software_xcb_outbuf_debug_set(Outbuf *buf, Eina_Bool debug)
907{
908 buf->priv.debug = debug;
909}
910
911void
912evas_software_xcb_outbuf_debug_show(Outbuf *buf, xcb_drawable_t drawable, int x, int y, int w, int h)
913{
914 int i;
915 xcb_screen_t *screen = NULL;
916 xcb_get_geometry_reply_t *geom;
917 xcb_drawable_t root;
918 xcb_screen_iterator_t si;
919
920 geom =
921 xcb_get_geometry_reply(buf->priv.x11.xcb.conn,
922 xcb_get_geometry_unchecked(buf->priv.x11.xcb.conn,
923 drawable), 0);
924 root = geom->root;
925 free(geom);
926 geom =
927 xcb_get_geometry_reply(buf->priv.x11.xcb.conn,
928 xcb_get_geometry_unchecked(buf->priv.x11.xcb.conn,
929 root), 0);
930
931 si = xcb_setup_roots_iterator((xcb_setup_t *)xcb_get_setup(buf->priv.x11.xcb.conn));
932 for (; si.rem; xcb_screen_next(&si))
933 {
934 if (si.data->root == geom->root)
935 {
936 screen = si.data;
937 break;
938 }
939 }
940 free(geom);
941
942 for (i = 0; i < 20; i++)
943 {
944 xcb_rectangle_t rect = { x, y, w, h};
945 uint32_t mask;
946 uint32_t value[2];
947
948 mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
949 value[0] = screen->black_pixel;
950 value[1] = XCB_EXPOSURES_NOT_ALLOWED;
951 xcb_change_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gc,
952 mask, value);
953 xcb_poly_fill_rectangle(buf->priv.x11.xcb.conn, drawable,
954 buf->priv.x11.xcb.gc, 1, &rect);
955 _xcbob_sync(buf->priv.x11.xcb.conn);
956 _xcbob_sync(buf->priv.x11.xcb.conn);
957
958 mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
959 value[0] = screen->white_pixel;
960 value[1] = XCB_EXPOSURES_NOT_ALLOWED;
961 xcb_change_gc(buf->priv.x11.xcb.conn, buf->priv.x11.xcb.gc,
962 mask, value);
963 xcb_poly_fill_rectangle(buf->priv.x11.xcb.conn, drawable,
964 buf->priv.x11.xcb.gc, 1, &rect);
965 _xcbob_sync(buf->priv.x11.xcb.conn);
966 _xcbob_sync(buf->priv.x11.xcb.conn);
967 }
968}
969
970#ifdef EVAS_FRAME_QUEUING
971void
972evas_software_xcb_outbuf_priv_set(Outbuf *buf, void *cur, void *prev __UNUSED__)
973{
974 buf->priv.pending_writes = (Eina_List *)cur;
975}
976#endif
977
978/* local functions */
979static Xcb_Output_Buffer *
980_find_xcbob(xcb_connection_t *conn, xcb_visualtype_t *vis, int depth, int w, int h, Eina_Bool shm, void *data)
981{
982 Eina_List *l = NULL, *xl = NULL;
983 Xcb_Output_Buffer *xcbob = NULL, *xcbob2 = NULL;
984 int lbytes = 0, bpp = 0, sz = 0;
985 int fitness = 0x7fffffff;
986
987 if (!shm)
988 return evas_software_xcb_output_buffer_new(conn, vis, depth, w, h,
989 shm, data);
990
991 lbytes = (((w + 31) / 32) * 4);
992 if (depth > 1)
993 {
994 bpp = (depth / 8);
995 if (bpp == 3) bpp = 4;
996 lbytes = ((((w * bpp) + 3) / 4) * 4);
997 }
998
999 sz = (lbytes * h);
1000 SHMPOOL_LOCK();
1001 EINA_LIST_FOREACH(_shmpool, l, xcbob2)
1002 {
1003 int szdif = 0;
1004
1005 if ((xcbob2->xim->depth != depth) || (xcbob2->visual != vis) ||
1006 (xcbob2->connection != conn)) continue;
1007 szdif = (xcbob2->psize - sz);
1008 if (szdif < 0) continue;
1009 if (szdif == 0)
1010 {
1011 xcbob = xcbob2;
1012 xl = l;
1013 goto have_xcbob;
1014 }
1015 if (szdif < fitness)
1016 {
1017 xcbob = xcbob2;
1018 xl = l;
1019 fitness = szdif;
1020 }
1021 }
1022 if ((fitness > (100 * 100)) || (!xcbob))
1023 {
1024 SHMPOOL_UNLOCK();
1025 return evas_software_xcb_output_buffer_new(conn, vis, depth,
1026 w, h, shm, data);
1027 }
1028
1029have_xcbob:
1030 _shmpool = eina_list_remove_list(_shmpool, xl);
1031 xcbob->w = w;
1032 xcbob->h = h;
1033 xcbob->bpl = lbytes;
1034 xcbob->xim->width = xcbob->w;
1035 xcbob->xim->height = xcbob->h;
1036 xcbob->xim->stride = xcbob->bpl;
1037 _shmsize -= (xcbob->psize * (xcbob->xim->depth / 8));
1038 SHMPOOL_UNLOCK();
1039 return xcbob;
1040}
1041
1042static void
1043_unfind_xcbob(Xcb_Output_Buffer *xcbob, Eina_Bool sync)
1044{
1045 if (xcbob->shm_info)
1046 {
1047 SHMPOOL_LOCK();
1048 _shmpool = eina_list_prepend(_shmpool, xcbob);
1049 _shmsize += xcbob->psize * xcbob->xim->depth / 8;
1050 while ((_shmsize > _shmlimit) ||
1051 (eina_list_count(_shmpool) > _shmcountlimit))
1052 {
1053 Eina_List *xl = NULL;
1054
1055 if (!(xl = eina_list_last(_shmpool)))
1056 {
1057 _shmsize = 0;
1058 break;
1059 }
1060 xcbob = xl->data;
1061 _shmpool = eina_list_remove_list(_shmpool, xl);
1062 _shmsize -= xcbob->psize * xcbob->xim->depth / 8;
1063 evas_software_xcb_output_buffer_free(xcbob, sync);
1064 }
1065 SHMPOOL_UNLOCK();
1066 }
1067 else
1068 evas_software_xcb_output_buffer_free(xcbob, sync);
1069}
1070
1071static void
1072_clear_xcbob(Eina_Bool sync)
1073{
1074 SHMPOOL_LOCK();
1075 while (_shmpool)
1076 {
1077 Xcb_Output_Buffer *xcbob;
1078
1079 xcbob = _shmpool->data;
1080 _shmpool = eina_list_remove_list(_shmpool, _shmpool);
1081 evas_software_xcb_output_buffer_free(xcbob, sync);
1082 }
1083 _shmsize = 0;
1084 SHMPOOL_UNLOCK();
1085}
1086
1087static void
1088_xcbob_sync(xcb_connection_t *conn)
1089{
1090 free(xcb_get_input_focus_reply(conn,
1091 xcb_get_input_focus_unchecked(conn), NULL));
1092}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.h b/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.h
new file mode 100644
index 0000000..b711848
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xcb_outbuf.h
@@ -0,0 +1,30 @@
1#ifndef EVAS_XCB_OUTBUF_H
2# define EVAS_XCB_OUTBUF_H
3
4# include "evas_engine.h"
5
6void evas_software_xcb_outbuf_init(void);
7void evas_software_xcb_outbuf_free(Outbuf *buf);
8Outbuf *evas_software_xcb_outbuf_setup(int w, int h, int rot, Outbuf_Depth depth, xcb_connection_t *conn, xcb_screen_t *screen, xcb_drawable_t draw, xcb_visualtype_t *vis, xcb_colormap_t cmap, int xdepth, Eina_Bool grayscale, int max_colors, xcb_drawable_t mask, Eina_Bool shape_dither, Eina_Bool alpha);
9RGBA_Image *evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch);
10void evas_software_xcb_outbuf_free_region_for_update(Outbuf *buf, RGBA_Image *update);
11void evas_software_xcb_outbuf_flush(Outbuf *buf);
12void evas_software_xcb_outbuf_idle_flush(Outbuf *buf);
13void evas_software_xcb_outbuf_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h);
14void evas_software_xcb_outbuf_reconfigure(Outbuf *buf, int w, int h, int rot, Outbuf_Depth depth);
15int evas_software_xcb_outbuf_width_get(Outbuf *buf);
16int evas_software_xcb_outbuf_height_get(Outbuf *buf);
17Outbuf_Depth evas_software_xcb_outbuf_depth_get(Outbuf *buf);
18void evas_software_xcb_outbuf_drawable_set(Outbuf *buf, xcb_drawable_t drawable);
19void evas_software_xcb_outbuf_mask_set(Outbuf *buf, xcb_drawable_t mask);
20int evas_software_xcb_outbuf_rotation_get(Outbuf *buf);
21void evas_software_xcb_outbuf_rotation_set(Outbuf *buf, int rotation);
22Eina_Bool evas_software_xcb_outbuf_alpha_get(Outbuf *buf);
23void evas_software_xcb_outbuf_debug_set(Outbuf *buf, Eina_Bool debug);
24void evas_software_xcb_outbuf_debug_show(Outbuf *buf, xcb_drawable_t drawable, int x, int y, int w, int h);
25
26# ifdef EVAS_FRAME_QUEUING
27void evas_software_xcb_outbuf_priv_set(Outbuf *buf, void *cur, void *prev);
28# endif
29
30#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.c b/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.c
new file mode 100644
index 0000000..3a0bda5
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.c
@@ -0,0 +1,108 @@
1#include "evas_common.h"
2#include "evas_xcb_xdefaults.h"
3#include <fnmatch.h>
4
5/* local function prototypes */
6static Eina_Bool _evas_xcb_xdefaults_glob_match(const char *str, const char *glob);
7
8/* local variables */
9static Eina_File *_evas_xcb_xdefaults_file = NULL;
10static char *_evas_xcb_xdefaults_data = NULL;
11
12void
13_evas_xcb_xdefaults_init(void)
14{
15 char buff[PATH_MAX];
16
17 snprintf(buff, sizeof(buff), "%s/.Xdefaults", getenv("HOME"));
18 if ((_evas_xcb_xdefaults_file = eina_file_open(buff, EINA_FALSE)))
19 {
20 eina_mmap_safety_enabled_set(EINA_TRUE);
21
22 _evas_xcb_xdefaults_data =
23 eina_file_map_all(_evas_xcb_xdefaults_file, EINA_FILE_SEQUENTIAL);
24 }
25}
26
27void
28_evas_xcb_xdefaults_shutdown(void)
29{
30 if (!_evas_xcb_xdefaults_file) return;
31 if (_evas_xcb_xdefaults_data)
32 eina_file_map_free(_evas_xcb_xdefaults_file, _evas_xcb_xdefaults_data);
33 if (_evas_xcb_xdefaults_file) eina_file_close(_evas_xcb_xdefaults_file);
34}
35
36char *
37_evas_xcb_xdefaults_string_get(const char *prog, const char *param)
38{
39 char buff[1024], ret[1024];
40 char *str = NULL;
41 char **ea = NULL;
42 unsigned int count = 0, i = 0;
43
44 if ((!_evas_xcb_xdefaults_data) || (!_evas_xcb_xdefaults_file))
45 return NULL;
46
47 snprintf(buff, sizeof(buff), "*%s*.*%s*", prog, param);
48
49 str = _evas_xcb_xdefaults_data;
50 ea = eina_str_split_full(str, "\n", -1, &count);
51 for (i = 0; i < count; i++)
52 {
53 if (_evas_xcb_xdefaults_glob_match(ea[i], buff))
54 sscanf(ea[i], "%*[^:]:%*[ ]%s", ret);
55 }
56 if ((ea) && (ea[0]))
57 {
58 free(ea[0]);
59 free(ea);
60 }
61
62 return strdup(ret);
63}
64
65int
66_evas_xcb_xdefaults_int_get(const char *prog, const char *param)
67{
68 char buff[1024];
69 char *str = NULL;
70 char **ea = NULL;
71 unsigned int count = 0, i = 0;
72 int ret = -1;
73
74 if ((!_evas_xcb_xdefaults_data) || (!_evas_xcb_xdefaults_file))
75 return 0;
76
77 snprintf(buff, sizeof(buff), "*%s*.*%s*", prog, param);
78
79 str = _evas_xcb_xdefaults_data;
80 ea = eina_str_split_full(str, "\n", -1, &count);
81 for (i = 0; i < count; i++)
82 {
83 if (_evas_xcb_xdefaults_glob_match(ea[i], buff))
84 sscanf(ea[i], "%*[^:]:%*[ ]%d", &ret);
85 }
86 if ((ea) && (ea[0]))
87 {
88 free(ea[0]);
89 free(ea);
90 }
91
92 return ret;
93}
94
95/* local functions */
96static Eina_Bool
97_evas_xcb_xdefaults_glob_match(const char *str, const char *glob)
98{
99 if ((!str) || (!glob)) return EINA_FALSE;
100 if (glob[0] == 0)
101 {
102 if (str[0] == 0) return EINA_TRUE;
103 return EINA_FALSE;
104 }
105 if (!strcmp(glob, "*")) return EINA_TRUE;
106 if (!fnmatch(glob, str, 0)) return EINA_TRUE;
107 return EINA_FALSE;
108}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.h b/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.h
new file mode 100644
index 0000000..c5f4ab8
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xcb_xdefaults.h
@@ -0,0 +1,11 @@
1#ifndef EVAS_XCB_XDEFAULTS_H
2# define EVAS_XCB_XDEFAULTS_H
3
4# include "evas_engine.h"
5
6void _evas_xcb_xdefaults_init(void);
7void _evas_xcb_xdefaults_shutdown(void);
8char *_evas_xcb_xdefaults_string_get(const char *prog, const char *param);
9int _evas_xcb_xdefaults_int_get(const char *prog, const char *param);
10
11#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.c b/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.c
new file mode 100644
index 0000000..594041c
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.c
@@ -0,0 +1,428 @@
1#include "evas_common.h"
2
3#include "evas_xlib_buffer.h"
4
5static int _x_err = 0;
6
7void
8evas_software_xlib_x_write_mask_line(Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int w, int y)
9{
10 int x;
11 DATA32 *src_ptr;
12 DATA8 *dst_ptr;
13 int bpl = 0;
14
15 src_ptr = src;
16 dst_ptr = evas_software_xlib_x_output_buffer_data(xob, &bpl);
17 dst_ptr = dst_ptr + (bpl * y);
18 w -= 7;
19 if (buf->priv.x11.xlib.bit_swap)
20 {
21 for (x = 0; x < w; x += 8)
22 {
23 *dst_ptr =
24 ((A_VAL(&(src_ptr[0])) >> 7) << 7) |
25 ((A_VAL(&(src_ptr[1])) >> 7) << 6) |
26 ((A_VAL(&(src_ptr[2])) >> 7) << 5) |
27 ((A_VAL(&(src_ptr[3])) >> 7) << 4) |
28 ((A_VAL(&(src_ptr[4])) >> 7) << 3) |
29 ((A_VAL(&(src_ptr[5])) >> 7) << 2) |
30 ((A_VAL(&(src_ptr[6])) >> 7) << 1) |
31 ((A_VAL(&(src_ptr[7])) >> 7) << 0);
32 src_ptr += 8;
33 dst_ptr++;
34 }
35 }
36 else
37 {
38 for (x = 0; x < w; x += 8)
39 {
40 *dst_ptr =
41 ((A_VAL(&(src_ptr[0])) >> 7) << 0) |
42 ((A_VAL(&(src_ptr[1])) >> 7) << 1) |
43 ((A_VAL(&(src_ptr[2])) >> 7) << 2) |
44 ((A_VAL(&(src_ptr[3])) >> 7) << 3) |
45 ((A_VAL(&(src_ptr[4])) >> 7) << 4) |
46 ((A_VAL(&(src_ptr[5])) >> 7) << 5) |
47 ((A_VAL(&(src_ptr[6])) >> 7) << 6) |
48 ((A_VAL(&(src_ptr[7])) >> 7) << 7);
49 src_ptr += 8;
50 dst_ptr++;
51 }
52 }
53 w += 7;
54 for (; x < w; x ++)
55 {
56 XPutPixel(xob->xim, x, y, A_VAL(src_ptr) >> 7);
57 src_ptr++;
58 }
59}
60
61void
62evas_software_xlib_x_write_mask_line_rev(Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int w, int y)
63{
64 int x;
65 DATA32 *src_ptr;
66 DATA8 *dst_ptr;
67 int bpl = 0;
68
69 src_ptr = src + w - 1;
70 dst_ptr = evas_software_xlib_x_output_buffer_data(xob, &bpl);
71 dst_ptr = dst_ptr + (bpl * y);
72 w -= 7;
73 if (buf->priv.x11.xlib.bit_swap)
74 {
75 for (x = 0; x < w; x += 8)
76 {
77 *dst_ptr =
78 ((A_VAL(&(src_ptr[ 0])) >> 7) << 7) |
79 ((A_VAL(&(src_ptr[-1])) >> 7) << 6) |
80 ((A_VAL(&(src_ptr[-2])) >> 7) << 5) |
81 ((A_VAL(&(src_ptr[-3])) >> 7) << 4) |
82 ((A_VAL(&(src_ptr[-4])) >> 7) << 3) |
83 ((A_VAL(&(src_ptr[-5])) >> 7) << 2) |
84 ((A_VAL(&(src_ptr[-6])) >> 7) << 1) |
85 ((A_VAL(&(src_ptr[-7])) >> 7) << 0);
86 src_ptr -= 8;
87 dst_ptr++;
88 }
89 }
90 else
91 {
92 for (x = 0; x < w; x += 8)
93 {
94 *dst_ptr =
95 ((A_VAL(&(src_ptr[ 0])) >> 7) << 0) |
96 ((A_VAL(&(src_ptr[-1])) >> 7) << 1) |
97 ((A_VAL(&(src_ptr[-2])) >> 7) << 2) |
98 ((A_VAL(&(src_ptr[-3])) >> 7) << 3) |
99 ((A_VAL(&(src_ptr[-4])) >> 7) << 4) |
100 ((A_VAL(&(src_ptr[-5])) >> 7) << 5) |
101 ((A_VAL(&(src_ptr[-6])) >> 7) << 6) |
102 ((A_VAL(&(src_ptr[-7])) >> 7) << 7);
103 src_ptr -= 8;
104 dst_ptr++;
105 }
106 }
107 w += 7;
108 for (; x < w; x ++)
109 {
110 XPutPixel(xob->xim, x, y, A_VAL(src_ptr) >> 7);
111 src_ptr--;
112 }
113}
114
115void
116evas_software_xlib_x_write_mask_line_vert(Outbuf *buf, X_Output_Buffer *xob,
117 DATA32 *src,
118 int h, int ym, int w)
119{
120 int y;
121 DATA32 *src_ptr;
122 DATA8 *dst_ptr;
123 int bpl = 0;
124
125 src_ptr = src;
126 dst_ptr = evas_software_xlib_x_output_buffer_data(xob, &bpl);
127 dst_ptr = dst_ptr + (bpl * ym);
128 h -= 7;
129 if (buf->priv.x11.xlib.bit_swap)
130 {
131 for (y = 0; y < h; y += 8)
132 {
133 *dst_ptr =
134 ((A_VAL(&(src_ptr[0 * w])) >> 7) << 7) |
135 ((A_VAL(&(src_ptr[1 * w])) >> 7) << 6) |
136 ((A_VAL(&(src_ptr[2 * w])) >> 7) << 5) |
137 ((A_VAL(&(src_ptr[3 * w])) >> 7) << 4) |
138 ((A_VAL(&(src_ptr[4 * w])) >> 7) << 3) |
139 ((A_VAL(&(src_ptr[5 * w])) >> 7) << 2) |
140 ((A_VAL(&(src_ptr[6 * w])) >> 7) << 1) |
141 ((A_VAL(&(src_ptr[7 * w])) >> 7) << 0);
142 src_ptr += 8 * w;
143 dst_ptr++;
144 }
145 }
146 else
147 {
148 for (y = 0; y < h; y += 8)
149 {
150 *dst_ptr =
151 ((A_VAL(&(src_ptr[0 * w])) >> 7) << 0) |
152 ((A_VAL(&(src_ptr[1 * w])) >> 7) << 1) |
153 ((A_VAL(&(src_ptr[2 * w])) >> 7) << 2) |
154 ((A_VAL(&(src_ptr[3 * w])) >> 7) << 3) |
155 ((A_VAL(&(src_ptr[4 * w])) >> 7) << 4) |
156 ((A_VAL(&(src_ptr[5 * w])) >> 7) << 5) |
157 ((A_VAL(&(src_ptr[6 * w])) >> 7) << 6) |
158 ((A_VAL(&(src_ptr[7 * w])) >> 7) << 7);
159 src_ptr += 8 * w;
160 dst_ptr++;
161 }
162 }
163 h += 7;
164 for (; y < h; y ++)
165 {
166 XPutPixel(xob->xim, y, ym, A_VAL(src_ptr) >> 7);
167 src_ptr += w;
168 }
169}
170
171void
172evas_software_xlib_x_write_mask_line_vert_rev(Outbuf *buf, X_Output_Buffer *xob,
173 DATA32 *src,
174 int h, int ym, int w)
175{
176 int y;
177 DATA32 *src_ptr;
178 DATA8 *dst_ptr;
179 int bpl = 0;
180
181 src_ptr = src + ((h - 1) * w);
182 dst_ptr = evas_software_xlib_x_output_buffer_data(xob, &bpl);
183 dst_ptr = dst_ptr + (bpl * ym);
184 h -= 7;
185 if (buf->priv.x11.xlib.bit_swap)
186 {
187 for (y = 0; y < h; y += 8)
188 {
189 *dst_ptr =
190 ((A_VAL(&(src_ptr[ 0 * w])) >> 7) << 7) |
191 ((A_VAL(&(src_ptr[-1 * w])) >> 7) << 6) |
192 ((A_VAL(&(src_ptr[-2 * w])) >> 7) << 5) |
193 ((A_VAL(&(src_ptr[-3 * w])) >> 7) << 4) |
194 ((A_VAL(&(src_ptr[-4 * w])) >> 7) << 3) |
195 ((A_VAL(&(src_ptr[-5 * w])) >> 7) << 2) |
196 ((A_VAL(&(src_ptr[-6 * w])) >> 7) << 1) |
197 ((A_VAL(&(src_ptr[-7 * w])) >> 7) << 0);
198 src_ptr -= 8 * w;
199 dst_ptr++;
200 }
201 }
202 else
203 {
204 for (y = 0; y < h; y += 8)
205 {
206 *dst_ptr =
207 ((A_VAL(&(src_ptr[ 0 * w])) >> 7) << 0) |
208 ((A_VAL(&(src_ptr[-1 * w])) >> 7) << 1) |
209 ((A_VAL(&(src_ptr[-2 * w])) >> 7) << 2) |
210 ((A_VAL(&(src_ptr[-3 * w])) >> 7) << 3) |
211 ((A_VAL(&(src_ptr[-4 * w])) >> 7) << 4) |
212 ((A_VAL(&(src_ptr[-5 * w])) >> 7) << 5) |
213 ((A_VAL(&(src_ptr[-6 * w])) >> 7) << 6) |
214 ((A_VAL(&(src_ptr[-7 * w])) >> 7) << 7);
215 src_ptr -= 8 * w;
216 dst_ptr++;
217 }
218 }
219 h += 7;
220 for (; y < h; y ++)
221 {
222 XPutPixel(xob->xim, y, ym, A_VAL(src_ptr) >> 7);
223 src_ptr -= w;
224 }
225}
226
227int
228evas_software_xlib_x_can_do_shm(Display *d)
229{
230 static Display *cached_d = NULL;
231 static int cached_result = 0;
232
233 if (d == cached_d) return cached_result;
234 cached_d = d;
235 if (XShmQueryExtension(d))
236 {
237 X_Output_Buffer *xob;
238
239 xob = evas_software_xlib_x_output_buffer_new
240 (d, DefaultVisual(d, DefaultScreen(d)),
241 DefaultDepth(d, DefaultScreen(d)), 16, 16, 2, NULL);
242 if (!xob)
243 {
244 cached_result = 0;
245 return 0;
246 }
247 evas_software_xlib_x_output_buffer_free(xob, 1);
248 cached_result = 1;
249 return 1;
250 }
251 cached_result = 0;
252 return 0;
253}
254
255static void
256x_output_tmp_x_err(Display *d __UNUSED__, XErrorEvent *ev __UNUSED__)
257{
258 _x_err = 1;
259 return;
260}
261
262//static int creates = 0;
263
264X_Output_Buffer *
265evas_software_xlib_x_output_buffer_new(Display *d, Visual *v, int depth, int w, int h, int try_shm, void *data)
266{
267 X_Output_Buffer *xob;
268
269 xob = calloc(1, sizeof(X_Output_Buffer));
270 if (!xob) return NULL;
271
272 xob->display = d;
273 xob->visual = v;
274 xob->xim = NULL;
275 xob->shm_info = NULL;
276 xob->w = w;
277 xob->h = h;
278
279 if (try_shm > 0)
280 {
281 xob->shm_info = malloc(sizeof(XShmSegmentInfo));
282 if (xob->shm_info)
283 {
284 xob->xim = XShmCreateImage(d, v, depth, ZPixmap, NULL,
285 xob->shm_info, w, h);
286 if (xob->xim)
287 {
288 xob->shm_info->shmid = shmget(IPC_PRIVATE,
289 xob->xim->bytes_per_line *
290 xob->xim->height,
291 IPC_CREAT | 0777);
292 if (xob->shm_info->shmid >= 0)
293 {
294 xob->shm_info->readOnly = False;
295 xob->shm_info->shmaddr = xob->xim->data =
296 shmat(xob->shm_info->shmid, 0, 0);
297 if (xob->shm_info->shmaddr != ((void *)-1))
298 {
299 XErrorHandler ph;
300
301 if (try_shm == 2) // only needed during testing
302 {
303 XSync(d, False);
304 _x_err = 0;
305 ph = XSetErrorHandler((XErrorHandler)
306 x_output_tmp_x_err);
307 }
308#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
309 /* workaround for libXext of lower then 1.1.1 */
310 if (evas_common_frameq_enabled())
311 XLockDisplay(d);
312#endif
313 XShmAttach(d, xob->shm_info);
314#if defined(EVAS_FRAME_QUEUING) && defined(LIBXEXT_VERSION_LOW)
315 /* workaround for libXext of lower then 1.1.1 */
316 if (evas_common_frameq_enabled())
317 XUnlockDisplay(d);
318#endif
319
320 if (try_shm == 2) // only needed during testing
321 {
322 XSync(d, False);
323 XSetErrorHandler((XErrorHandler)ph);
324 }
325 if (!_x_err)
326 {
327 xob->bpl = xob->xim->bytes_per_line;
328 xob->psize = xob->bpl * xob->h;
329 return xob;
330 }
331 }
332 shmdt(xob->shm_info->shmaddr);
333 shmctl(xob->shm_info->shmid, IPC_RMID, 0);
334 }
335 if (xob->xim) XDestroyImage(xob->xim);
336 xob->xim = NULL;
337 }
338 if (xob->shm_info) free(xob->shm_info);
339 xob->shm_info = NULL;
340 }
341 }
342
343 if (try_shm > 1) return NULL;
344
345 xob->xim = XCreateImage(d, v, depth, ZPixmap, 0, data, w, h, 32, 0);
346 if (!xob->xim)
347 {
348 free(xob);
349 return NULL;
350 }
351
352 xob->data = data;
353
354 if (!xob->xim->data)
355 {
356 xob->xim->data = malloc(xob->xim->bytes_per_line * xob->xim->height);
357 if (!xob->xim->data)
358 {
359 XDestroyImage(xob->xim);
360 free(xob);
361 return NULL;
362 }
363 }
364 xob->bpl = xob->xim->bytes_per_line;
365 xob->psize = xob->bpl * xob->h;
366 return xob;
367}
368
369void
370evas_software_xlib_x_output_buffer_free(X_Output_Buffer *xob, int psync)
371{
372 if (xob->shm_info)
373 {
374 if (psync) XSync(xob->display, False);
375 XShmDetach(xob->display, xob->shm_info);
376 XDestroyImage(xob->xim);
377 shmdt(xob->shm_info->shmaddr);
378 shmctl(xob->shm_info->shmid, IPC_RMID, 0);
379 free(xob->shm_info);
380 }
381 else
382 {
383 if (xob->data) xob->xim->data = NULL;
384 XDestroyImage(xob->xim);
385 }
386 free(xob);
387}
388
389void
390evas_software_xlib_x_output_buffer_paste(X_Output_Buffer *xob, Drawable d, GC gc, int x, int y, int psync)
391{
392 if (xob->shm_info)
393 {
394 XShmPutImage(xob->display, d, gc, xob->xim, 0, 0, x, y,
395 xob->w, xob->h, False);
396 if (psync) XSync(xob->display, False);
397 }
398 else
399 {
400 XPutImage(xob->display, d, gc, xob->xim, 0, 0, x, y,
401 xob->w, xob->h);
402 }
403}
404
405DATA8 *
406evas_software_xlib_x_output_buffer_data(X_Output_Buffer *xob, int *bytes_per_line_ret)
407{
408 if (bytes_per_line_ret) *bytes_per_line_ret = xob->xim->bytes_per_line;
409 return (DATA8 *)xob->xim->data;
410}
411
412int
413evas_software_xlib_x_output_buffer_depth(X_Output_Buffer *xob)
414{
415 return xob->xim->bits_per_pixel;
416}
417
418int
419evas_software_xlib_x_output_buffer_byte_order(X_Output_Buffer *xob)
420{
421 return xob->xim->byte_order;
422}
423
424int
425evas_software_xlib_x_output_buffer_bit_order(X_Output_Buffer *xob)
426{
427 return xob->xim->bitmap_bit_order;
428}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.h b/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.h
new file mode 100644
index 0000000..01c4db0
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xlib_buffer.h
@@ -0,0 +1,45 @@
1#ifndef EVAS_XLIB_BUFFER_H
2#define EVAS_XLIB_BUFFER_H
3
4
5#include "evas_engine.h"
6
7
8typedef struct _X_Output_Buffer X_Output_Buffer;
9
10struct _X_Output_Buffer
11{
12 Display *display;
13 XImage *xim;
14 XShmSegmentInfo *shm_info;
15 Visual *visual;
16 void *data;
17 int w;
18 int h;
19 int bpl;
20 int psize;
21};
22
23void evas_software_xlib_x_write_mask_line (Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int w, int y);
24void evas_software_xlib_x_write_mask_line_rev (Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int w, int y);
25void evas_software_xlib_x_write_mask_line_vert (Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int h, int ym, int w);
26void evas_software_xlib_x_write_mask_line_vert_rev (Outbuf *buf, X_Output_Buffer *xob, DATA32 *src, int h, int ym, int w);
27
28int evas_software_xlib_x_can_do_shm (Display *d);
29
30X_Output_Buffer *evas_software_xlib_x_output_buffer_new (Display *d, Visual *v, int depth, int w, int h, int try_shm, void *data);
31
32void evas_software_xlib_x_output_buffer_free (X_Output_Buffer *xob, int sync);
33
34void evas_software_xlib_x_output_buffer_paste (X_Output_Buffer *xob, Drawable d, GC gc, int x, int y, int sync);
35
36DATA8 *evas_software_xlib_x_output_buffer_data (X_Output_Buffer *xob, int *bytes_per_line_ret);
37
38int evas_software_xlib_x_output_buffer_depth (X_Output_Buffer *xob);
39
40int evas_software_xlib_x_output_buffer_byte_order (X_Output_Buffer *xob);
41
42int evas_software_xlib_x_output_buffer_bit_order (X_Output_Buffer *xob);
43
44
45#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.c b/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.c
new file mode 100644
index 0000000..1df0406
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.c
@@ -0,0 +1,368 @@
1#include "evas_common.h"
2
3#include "evas_engine.h"
4
5#include <X11/Xlib.h>
6#include <X11/Xutil.h>
7
8typedef struct _Convert_Pal_Priv Convert_Pal_Priv;
9
10struct _Convert_Pal_Priv
11{
12 Display *disp;
13 Colormap cmap;
14 Visual *vis;
15};
16
17typedef DATA8 * (*X_Func_Alloc_Colors) (Display *d, Colormap cmap, Visual *v);
18
19static X_Func_Alloc_Colors x_color_alloc[PAL_MODE_LAST + 1];
20static int x_color_count[PAL_MODE_LAST + 1];
21static Eina_List *palettes = NULL;
22
23static DATA8 * x_color_alloc_rgb(int nr, int ng, int nb, Display *d, Colormap cmap, Visual *v);
24static DATA8 * x_color_alloc_gray(int ng, Display *d, Colormap cmap, Visual *v);
25
26static DATA8 * x_color_alloc_rgb_332(Display *d, Colormap cmap, Visual *v);
27static DATA8 * x_color_alloc_rgb_666(Display *d, Colormap cmap, Visual *v);
28static DATA8 * x_color_alloc_rgb_232(Display *d, Colormap cmap, Visual *v);
29static DATA8 * x_color_alloc_rgb_222(Display *d, Colormap cmap, Visual *v);
30static DATA8 * x_color_alloc_rgb_221(Display *d, Colormap cmap, Visual *v);
31static DATA8 * x_color_alloc_rgb_121(Display *d, Colormap cmap, Visual *v);
32static DATA8 * x_color_alloc_rgb_111(Display *d, Colormap cmap, Visual *v);
33static DATA8 * x_color_alloc_gray_256(Display *d, Colormap cmap, Visual *v);
34static DATA8 * x_color_alloc_gray_64(Display *d, Colormap cmap, Visual *v);
35static DATA8 * x_color_alloc_gray_16(Display *d, Colormap cmap, Visual *v);
36static DATA8 * x_color_alloc_gray_4(Display *d, Colormap cmap, Visual *v);
37static DATA8 * x_color_alloc_mono(Display *d, Colormap cmap, Visual *v);
38
39static DATA8 *
40x_color_alloc_rgb(int nr, int ng, int nb, Display *d, Colormap cmap, Visual *v)
41{
42 int r, g, b, i;
43 DATA8 *color_lut;
44 int sig_mask = 0, delt = 0;
45
46 for (i = 0; i < v->bits_per_rgb; i++) sig_mask |= (0x1 << i);
47 sig_mask <<= (16 - v->bits_per_rgb);
48 i = 0;
49 color_lut = malloc((nr) * (ng) * (nb));
50 if (!color_lut) return NULL;
51 delt = 0x0101 * 3;
52 for (r = 0; r < (nr); r++)
53 {
54 for (g = 0; g < (ng); g++)
55 {
56 for (b = 0; b < (nb); b++)
57 {
58 XColor xcl;
59 XColor xcl_in;
60 int val;
61 Status ret;
62 int dr, dg, db;
63
64 val = (int)((((double)r) / ((nr) - 1)) * 255);
65 val = (val << 8) | val;
66 xcl.red = (unsigned short)(val);
67 val = (int)((((double)g) / ((ng) - 1)) * 255);
68 val = (val << 8) | val;
69 xcl.green = (unsigned short)(val);
70 val = (int)((((double)b) / ((nb) - 1)) * 255);
71 val = (val << 8) | val;
72 xcl.blue = (unsigned short)(val);
73 xcl_in = xcl;
74 ret = XAllocColor(d, cmap, &xcl);
75 dr = (int)xcl_in.red - (int)xcl.red;
76 if (dr < 0) dr = -dr;
77 dg = (int)xcl_in.green - (int)xcl.green;
78 if (dg < 0) dg = -dg;
79 db = (int)xcl_in.blue - (int)xcl.blue;
80 if (db < 0) db = -db;
81/*
82 printf("ASK [%i]: %04x %04x %04x = %04x %04x %04x | dif = %04x / %04x\n",
83 ret,
84 xcl_in.red, xcl_in.green, xcl_in.blue,
85 xcl.red, xcl.green, xcl.blue,
86 (dr + dg +db), delt);
87 */
88 if ((ret == 0) ||
89 ((dr + dg + db) > delt)
90/*
91 ||
92 ((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
93 ((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
94 ((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask))
95 */
96 )
97 {
98 unsigned long pixels[256];
99 int j;
100
101 if (i > 0)
102 {
103 for (j = 0; j < i; j++)
104 pixels[j] = (unsigned long) color_lut[j];
105 XFreeColors(d, cmap, pixels, i, 0);
106 }
107 free(color_lut);
108 return NULL;
109 }
110 color_lut[i] = xcl.pixel;
111 i++;
112 }
113 }
114 }
115 return color_lut;
116}
117
118static DATA8 *
119x_color_alloc_gray(int ng, Display *d, Colormap cmap, Visual *v)
120{
121 int g, i;
122 DATA8 *color_lut;
123 int sig_mask = 0;
124
125 for (i = 0; i < v->bits_per_rgb; i++) sig_mask |= (0x1 << i);
126 sig_mask <<= (16 - v->bits_per_rgb);
127 i = 0;
128 color_lut = malloc(ng);
129 if (!color_lut) return NULL;
130 for (g = 0; g < (ng); g++)
131 {
132 XColor xcl;
133 XColor xcl_in;
134 int val;
135 Status ret;
136
137 val = (int)((((double)g) / ((ng) - 1)) * 255);
138 val = (val << 8) | val;
139 xcl.red = (unsigned short)(val);
140 xcl.green = (unsigned short)(val);
141 xcl.blue = (unsigned short)(val);
142 xcl_in = xcl;
143 ret = XAllocColor(d, cmap, &xcl);
144 if ((ret == 0) ||
145 ((xcl_in.red & sig_mask) != (xcl.red & sig_mask)) ||
146 ((xcl_in.green & sig_mask) != (xcl.green & sig_mask)) ||
147 ((xcl_in.blue & sig_mask) != (xcl.blue & sig_mask)))
148 {
149 unsigned long pixels[256];
150 int j;
151
152 if (i > 0)
153 {
154 for (j = 0; j < i; j++)
155 pixels[j] = (unsigned long) color_lut[j];
156 XFreeColors(d, cmap, pixels, i, 0);
157 }
158 free(color_lut);
159 return NULL;
160 }
161 color_lut[i] = xcl.pixel;
162 i++;
163 }
164 return color_lut;
165}
166
167static DATA8 *
168x_color_alloc_rgb_332(Display *d, Colormap cmap, Visual *v)
169{
170 return x_color_alloc_rgb(8, 8, 4, d, cmap, v);
171}
172
173static DATA8 *
174x_color_alloc_rgb_666(Display *d, Colormap cmap, Visual *v)
175{
176 return x_color_alloc_rgb(6, 6, 6, d, cmap, v);
177}
178
179static DATA8 *
180x_color_alloc_rgb_232(Display *d, Colormap cmap, Visual *v)
181{
182 return x_color_alloc_rgb(4, 8, 4, d, cmap, v);
183}
184
185static DATA8 *
186x_color_alloc_rgb_222(Display *d, Colormap cmap, Visual *v)
187{
188 return x_color_alloc_rgb(4, 4, 4, d, cmap, v);
189}
190
191static DATA8 *
192x_color_alloc_rgb_221(Display *d, Colormap cmap, Visual *v)
193{
194 return x_color_alloc_rgb(4, 4, 2, d, cmap, v);
195}
196
197static DATA8 *
198x_color_alloc_rgb_121(Display *d, Colormap cmap, Visual *v)
199{
200 return x_color_alloc_rgb(2, 4, 2, d, cmap, v);
201}
202
203static DATA8 *
204x_color_alloc_rgb_111(Display *d, Colormap cmap, Visual *v)
205{
206 return x_color_alloc_rgb(2, 2, 2, d, cmap, v);
207}
208
209static DATA8 *
210x_color_alloc_gray_256(Display *d, Colormap cmap, Visual *v)
211{
212 return x_color_alloc_gray(256, d, cmap, v);
213}
214
215static DATA8 *
216x_color_alloc_gray_64(Display *d, Colormap cmap, Visual *v)
217{
218 return x_color_alloc_gray(64, d, cmap, v);
219}
220
221static DATA8 *
222x_color_alloc_gray_16(Display *d, Colormap cmap, Visual *v)
223{
224 return x_color_alloc_gray(32, d, cmap, v);
225}
226
227static DATA8 *
228x_color_alloc_gray_4(Display *d, Colormap cmap, Visual *v)
229{
230 return x_color_alloc_gray(16, d, cmap, v);
231}
232
233static DATA8 *
234x_color_alloc_mono(Display *d, Colormap cmap, Visual *v)
235{
236 return x_color_alloc_gray(2, d, cmap, v);
237}
238
239void
240evas_software_xlib_x_color_init(void)
241{
242 static int initialised = 0;
243
244 if (initialised) return;
245 x_color_alloc[PAL_MODE_NONE] = NULL;
246 x_color_count[PAL_MODE_NONE] = 0;
247
248 x_color_alloc[PAL_MODE_MONO] = x_color_alloc_mono;
249 x_color_count[PAL_MODE_MONO] = 2;
250
251 x_color_alloc[PAL_MODE_GRAY4] = x_color_alloc_gray_4;
252 x_color_count[PAL_MODE_GRAY4] = 4;
253
254 x_color_alloc[PAL_MODE_GRAY16] = x_color_alloc_gray_16;
255 x_color_count[PAL_MODE_GRAY16] = 16;
256
257 x_color_alloc[PAL_MODE_GRAY64] = x_color_alloc_gray_64;
258 x_color_count[PAL_MODE_GRAY64] = 64;
259
260 x_color_alloc[PAL_MODE_GRAY256] = x_color_alloc_gray_256;
261 x_color_count[PAL_MODE_GRAY256] = 256;
262
263 x_color_alloc[PAL_MODE_RGB111] = x_color_alloc_rgb_111;
264 x_color_count[PAL_MODE_RGB111] = 2 * 2 * 2;
265
266 x_color_alloc[PAL_MODE_RGB121] = x_color_alloc_rgb_121;
267 x_color_count[PAL_MODE_RGB121] = 2 * 4 * 2;
268
269 x_color_alloc[PAL_MODE_RGB221] = x_color_alloc_rgb_221;
270 x_color_count[PAL_MODE_RGB221] = 4 * 4 * 2;
271
272 x_color_alloc[PAL_MODE_RGB222] = x_color_alloc_rgb_222;
273 x_color_count[PAL_MODE_RGB222] = 4 * 4 * 4;
274
275 x_color_alloc[PAL_MODE_RGB232] = x_color_alloc_rgb_232;
276 x_color_count[PAL_MODE_RGB232] = 4 * 8 * 4;
277
278 x_color_alloc[PAL_MODE_RGB666] = x_color_alloc_rgb_666;
279 x_color_count[PAL_MODE_RGB666] = 6 * 6 * 6;
280
281 x_color_alloc[PAL_MODE_RGB332] = x_color_alloc_rgb_332;
282 x_color_count[PAL_MODE_RGB332] = 8 * 8 * 4;
283
284 x_color_alloc[PAL_MODE_LAST] = NULL;
285 x_color_count[PAL_MODE_LAST] = 0;
286 initialised = 1;
287}
288
289Convert_Pal *
290evas_software_xlib_x_color_allocate(Display *disp,
291 Colormap cmap,
292 Visual *vis,
293 Convert_Pal_Mode colors)
294{
295 Convert_Pal_Priv *palpriv;
296 Convert_Pal *pal;
297 Convert_Pal_Mode c;
298 Eina_List *l;
299
300/* printf("ALLOC cmap=%i vis=%p\n", cmap, vis);*/
301 EINA_LIST_FOREACH(palettes, l, pal)
302 {
303 palpriv = pal->data;
304 if ((disp == palpriv->disp) &&
305 (vis == palpriv->vis) &&
306 (cmap == palpriv->cmap))
307 {
308 pal->references++;
309 return pal;
310 }
311 }
312 pal = calloc(1, sizeof(struct _Convert_Pal));
313 if (!pal) return NULL;
314 for (c = colors; c > PAL_MODE_NONE; c--)
315 {
316 if (x_color_alloc[c])
317 {
318/* printf("TRY PAL %i\n", c);*/
319 pal->lookup = (x_color_alloc[c])(disp, cmap, vis);
320 if (pal->lookup) break;
321 }
322 }
323 pal->references = 1;
324 pal->colors = c;
325 pal->count = x_color_count[c];
326 palpriv = calloc(1, sizeof(Convert_Pal_Priv));
327 pal->data = palpriv;
328 if (!palpriv)
329 {
330 if (pal->lookup) free(pal->lookup);
331 free(pal);
332 return NULL;
333 }
334 palpriv->disp = disp;
335 palpriv->vis = vis;
336 palpriv->cmap = cmap;
337 if (pal->colors == PAL_MODE_NONE)
338 {
339 if (pal->lookup) free(pal->lookup);
340 free(pal);
341 return NULL;
342 }
343 palettes = eina_list_append(palettes, pal);
344 return pal;
345}
346
347void
348evas_software_xlib_x_color_deallocate(Display *disp,
349 Colormap cmap,
350 Visual *vis __UNUSED__,
351 Convert_Pal *pal)
352{
353 unsigned long pixels[256];
354 int j;
355
356 pal->references--;
357 if (pal->references > 0) return;
358 if (pal->lookup)
359 {
360 for(j = 0; j < pal->count; j++)
361 pixels[j] = (unsigned long) pal->lookup[j];
362 XFreeColors(disp, cmap, pixels, pal->count, 0);
363 free(pal->lookup);
364 }
365 free(pal->data);
366 palettes = eina_list_remove(palettes, pal);
367 free(pal);
368}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.h b/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.h
new file mode 100644
index 0000000..e9f8afb
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xlib_color.h
@@ -0,0 +1,16 @@
1#ifndef EVAS_XLIB_COLOR_H
2#define EVAS_XLIB_COLOR_H
3
4void evas_software_xlib_x_color_init (void);
5
6Convert_Pal *evas_software_xlib_x_color_allocate (Display *disp,
7 Colormap cmap,
8 Visual *vis,
9 Convert_Pal_Mode colors);
10
11void evas_software_xlib_x_color_deallocate (Display *disp,
12 Colormap cmap,
13 Visual *vis,
14 Convert_Pal *pal);
15
16#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_main.c b/libraries/evas/src/modules/engines/software_x11/evas_xlib_main.c
new file mode 100644
index 0000000..3c153e1
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xlib_main.c
@@ -0,0 +1,7 @@
1#include "evas_common.h"
2#include "evas_engine.h"
3
4void
5evas_software_xlib_x_init(void)
6{
7}
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.c b/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.c
new file mode 100644
index 0000000..1b1d3d9
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.c
@@ -0,0 +1,1135 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#include <sys/time.h>
6#include <sys/utsname.h>
7
8#include "evas_common.h"
9#include "evas_macros.h"
10#include "evas_xlib_outbuf.h"
11#include "evas_xlib_buffer.h"
12#include "evas_xlib_color.h"
13
14
15typedef struct _Outbuf_Region Outbuf_Region;
16
17struct _Outbuf_Region
18{
19 X_Output_Buffer *xob;
20 X_Output_Buffer *mxob;
21 int x;
22 int y;
23 int w;
24 int h;
25};
26
27static Eina_List *shmpool = NULL;
28static int shmsize = 0;
29static int shmmemlimit = 10 * 1024 * 1024;
30static const unsigned int shmcountlimit = 32;
31
32#ifdef EVAS_FRAME_QUEUING
33static LK(lock_shmpool);
34#define SHMPOOL_LOCK() LKL(lock_shmpool)
35#define SHMPOOL_UNLOCK() LKU(lock_shmpool)
36#else
37#define SHMPOOL_LOCK()
38#define SHMPOOL_UNLOCK()
39#endif
40
41static X_Output_Buffer *
42_find_xob(Display *d, Visual *v, int depth, int w, int h, int shm, void *data)
43{
44 Eina_List *l, *xl = NULL;
45 X_Output_Buffer *xob = NULL;
46 X_Output_Buffer *xob2;
47 int fitness = 0x7fffffff;
48 int sz, lbytes, bpp;
49
50 if (!shm)
51 return evas_software_xlib_x_output_buffer_new(d, v, depth, w, h, shm, data);
52 if (depth > 1)
53 {
54 bpp = depth / 8;
55 if (bpp == 3) bpp = 4;
56 lbytes = (((w * bpp) + 3) / 4) * 4;
57 }
58 else
59 lbytes = ((w + 31) / 32) * 4;
60 sz = lbytes * h;
61 SHMPOOL_LOCK();
62 EINA_LIST_FOREACH(shmpool, l, xob2)
63 {
64 int szdif;
65
66 if ((xob2->xim->depth != depth) || (xob2->visual != v) ||
67 (xob2->display != d))
68 continue;
69 szdif = xob2->psize - sz;
70 if (szdif < 0) continue;
71 if (szdif == 0)
72 {
73 xob = xob2;
74 xl = l;
75 goto have_xob;
76 }
77 if (szdif < fitness)
78 {
79 fitness = szdif;
80 xob = xob2;
81 xl = l;
82 }
83 }
84 if ((fitness > (100 * 100)) || (!xob))
85 {
86 SHMPOOL_UNLOCK();
87 xob = evas_software_xlib_x_output_buffer_new(d, v, depth, w, h, shm, data);
88 return xob;
89 }
90
91 have_xob:
92 shmpool = eina_list_remove_list(shmpool, xl);
93 xob->w = w;
94 xob->h = h;
95 xob->bpl = lbytes;
96 xob->xim->width = xob->w;
97 xob->xim->height = xob->h;
98 xob->xim->bytes_per_line = xob->bpl;
99 shmsize -= xob->psize * (xob->xim->depth / 8);
100 SHMPOOL_UNLOCK();
101 return xob;
102}
103
104static void
105_unfind_xob(X_Output_Buffer *xob, int psync)
106{
107 if (xob->shm_info)
108 {
109 SHMPOOL_LOCK();
110 shmpool = eina_list_prepend(shmpool, xob);
111 shmsize += xob->psize * xob->xim->depth / 8;
112 while ((shmsize > (shmmemlimit)) ||
113 (eina_list_count(shmpool) > shmcountlimit))
114 {
115 Eina_List *xl;
116
117 xl = eina_list_last(shmpool);
118 if (!xl)
119 {
120 shmsize = 0;
121 break;
122 }
123 xob = xl->data;
124 shmpool = eina_list_remove_list(shmpool, xl);
125 shmsize -= xob->psize * xob->xim->depth / 8;
126 evas_software_xlib_x_output_buffer_free(xob, psync);
127 }
128 SHMPOOL_UNLOCK();
129 }
130 else
131 evas_software_xlib_x_output_buffer_free(xob, psync);
132}
133
134static void
135_clear_xob(int psync)
136{
137 SHMPOOL_LOCK();
138 while (shmpool)
139 {
140 X_Output_Buffer *xob;
141
142 xob = shmpool->data;
143 shmpool = eina_list_remove_list(shmpool, shmpool);
144 evas_software_xlib_x_output_buffer_free(xob, psync);
145 }
146 shmsize = 0;
147 SHMPOOL_UNLOCK();
148}
149
150void
151evas_software_xlib_outbuf_init(void)
152{
153#ifdef EVAS_FRAME_QUEUING
154 LKI(lock_shmpool);
155#endif
156}
157
158void
159evas_software_xlib_outbuf_free(Outbuf *buf)
160{
161#ifdef EVAS_FRAME_QUEUING
162 LKL(buf->priv.lock);
163#endif
164 while (buf->priv.pending_writes)
165 {
166 RGBA_Image *im;
167 Outbuf_Region *obr;
168
169 im = buf->priv.pending_writes->data;
170 buf->priv.pending_writes = eina_list_remove_list(buf->priv.pending_writes, buf->priv.pending_writes);
171 obr = im->extended_info;
172 evas_cache_image_drop(&im->cache_entry);
173 if (obr->xob) _unfind_xob(obr->xob, 0);
174 if (obr->mxob) _unfind_xob(obr->mxob, 0);
175 free(obr);
176 }
177#ifdef EVAS_FRAME_QUEUING
178 LKU(buf->priv.lock);
179#endif
180 evas_software_xlib_outbuf_idle_flush(buf);
181 evas_software_xlib_outbuf_flush(buf);
182 if (buf->priv.x11.xlib.gc)
183 XFreeGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gc);
184 if (buf->priv.x11.xlib.gcm)
185 XFreeGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gcm);
186 if (buf->priv.pal)
187 evas_software_xlib_x_color_deallocate(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.cmap,
188 buf->priv.x11.xlib.vis, buf->priv.pal);
189#ifdef EVAS_FRAME_QUEUING
190 LKD(buf->priv.lock);
191#endif
192 free(buf);
193 _clear_xob(0);
194}
195
196Outbuf *
197evas_software_xlib_outbuf_setup_x(int w, int h, int rot, Outbuf_Depth depth,
198 Display *disp, Drawable draw, Visual *vis,
199 Colormap cmap, int x_depth,
200 int grayscale, int max_colors, Pixmap mask,
201 int shape_dither, int destination_alpha)
202{
203 Outbuf *buf;
204
205 buf = calloc(1, sizeof(Outbuf));
206 if (!buf)
207 return NULL;
208
209 buf->w = w;
210 buf->h = h;
211 buf->depth = depth;
212 buf->rot = rot;
213
214 buf->priv.x11.xlib.disp = disp;
215 buf->priv.x11.xlib.vis = vis;
216 buf->priv.x11.xlib.cmap = cmap;
217 buf->priv.x11.xlib.depth = x_depth;
218
219 buf->priv.mask_dither = shape_dither;
220 buf->priv.destination_alpha = destination_alpha;
221
222 {
223 Gfx_Func_Convert conv_func;
224 X_Output_Buffer *xob;
225
226 buf->priv.x11.xlib.shm = evas_software_xlib_x_can_do_shm(buf->priv.x11.xlib.disp);
227 xob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
228 buf->priv.x11.xlib.vis,
229 buf->priv.x11.xlib.depth,
230 1, 1, buf->priv.x11.xlib.shm, NULL);
231
232 conv_func = NULL;
233 if (xob)
234 {
235#ifdef WORDS_BIGENDIAN
236 if (evas_software_xlib_x_output_buffer_byte_order(xob) == LSBFirst)
237 buf->priv.x11.xlib.swap = 1;
238 if (evas_software_xlib_x_output_buffer_bit_order(xob) == MSBFirst)
239 buf->priv.x11.xlib.bit_swap = 1;
240#else
241 if (evas_software_xlib_x_output_buffer_byte_order(xob) == MSBFirst)
242 buf->priv.x11.xlib.swap = 1;
243 if (evas_software_xlib_x_output_buffer_bit_order(xob) == MSBFirst)
244 buf->priv.x11.xlib.bit_swap = 1;
245#endif
246 if (((vis->class == TrueColor) || (vis->class == DirectColor)) &&
247 (x_depth > 8))
248 {
249 buf->priv.mask.r = (DATA32) vis->red_mask;
250 buf->priv.mask.g = (DATA32) vis->green_mask;
251 buf->priv.mask.b = (DATA32) vis->blue_mask;
252 if (buf->priv.x11.xlib.swap)
253 {
254 SWAP32(buf->priv.mask.r);
255 SWAP32(buf->priv.mask.g);
256 SWAP32(buf->priv.mask.b);
257 }
258 }
259 else if ((vis->class == PseudoColor) ||
260 (vis->class == StaticColor) ||
261 (vis->class == GrayScale) ||
262 (vis->class == StaticGray) ||
263 (x_depth <= 8))
264 {
265 Convert_Pal_Mode pm = PAL_MODE_RGB332;
266
267 if ((vis->class == GrayScale) || (vis->class == StaticGray))
268 grayscale = 1;
269 if (grayscale)
270 {
271 if (max_colors >= 256)
272 pm = PAL_MODE_GRAY256;
273 else if (max_colors >= 64)
274 pm = PAL_MODE_GRAY64;
275 else if (max_colors >= 16)
276 pm = PAL_MODE_GRAY16;
277 else if (max_colors >= 4)
278 pm = PAL_MODE_GRAY4;
279 else
280 pm = PAL_MODE_MONO;
281 }
282 else
283 {
284 if (max_colors >= 256)
285 pm = PAL_MODE_RGB332;
286 else if (max_colors >= 216)
287 pm = PAL_MODE_RGB666;
288 else if (max_colors >= 128)
289 pm = PAL_MODE_RGB232;
290 else if (max_colors >= 64)
291 pm = PAL_MODE_RGB222;
292 else if (max_colors >= 32)
293 pm = PAL_MODE_RGB221;
294 else if (max_colors >= 16)
295 pm = PAL_MODE_RGB121;
296 else if (max_colors >= 8)
297 pm = PAL_MODE_RGB111;
298 else if (max_colors >= 4)
299 pm = PAL_MODE_GRAY4;
300 else
301 pm = PAL_MODE_MONO;
302 }
303 /* FIXME: only alloc once per display+cmap */
304 buf->priv.pal = evas_software_xlib_x_color_allocate(disp, cmap, vis,
305 pm);
306 if (!buf->priv.pal)
307 {
308 free(buf);
309 return NULL;
310 }
311 }
312 if (buf->priv.pal)
313 {
314 if (buf->rot == 0 || buf->rot == 180)
315 conv_func = evas_common_convert_func_get(0, buf->w, buf->h,
316 evas_software_xlib_x_output_buffer_depth
317 (xob), buf->priv.mask.r,
318 buf->priv.mask.g,
319 buf->priv.mask.b,
320 buf->priv.pal->colors,
321 buf->rot);
322 else if (buf->rot == 90 || buf->rot == 270)
323 conv_func = evas_common_convert_func_get(0, buf->h, buf->w,
324 evas_software_xlib_x_output_buffer_depth
325 (xob), buf->priv.mask.r,
326 buf->priv.mask.g,
327 buf->priv.mask.b,
328 buf->priv.pal->colors,
329 buf->rot);
330 }
331 else
332 {
333 if (buf->rot == 0 || buf->rot == 180)
334 conv_func = evas_common_convert_func_get(0, buf->w, buf->h,
335 evas_software_xlib_x_output_buffer_depth
336 (xob), buf->priv.mask.r,
337 buf->priv.mask.g,
338 buf->priv.mask.b, PAL_MODE_NONE,
339 buf->rot);
340 else if (buf->rot == 90 || buf->rot == 270)
341 conv_func = evas_common_convert_func_get(0, buf->h, buf->w,
342 evas_software_xlib_x_output_buffer_depth
343 (xob), buf->priv.mask.r,
344 buf->priv.mask.g,
345 buf->priv.mask.b, PAL_MODE_NONE,
346 buf->rot);
347 }
348 evas_software_xlib_x_output_buffer_free(xob, 1);
349 if (!conv_func)
350 {
351 ERR("At depth: %i, RGB format mask: %08x %08x %08x, "
352 "Palette mode: %i. "
353 "Not supported by compiled in converters!",
354 buf->priv.x11.xlib.depth,
355 buf->priv.mask.r,
356 buf->priv.mask.g,
357 buf->priv.mask.b,
358 buf->priv.pal ? (int)buf->priv.pal->colors : -1);
359 }
360 }
361 evas_software_xlib_outbuf_drawable_set(buf, draw);
362 evas_software_xlib_outbuf_mask_set(buf, mask);
363 }
364#ifdef EVAS_FRAME_QUEUING
365 LKI(buf->priv.lock);
366#endif
367 return buf;
368}
369
370RGBA_Image *
371evas_software_xlib_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch)
372{
373 RGBA_Image *im;
374 Outbuf_Region *obr;
375 int bpl = 0;
376 int use_shm = 1;
377 int alpha;
378
379 if ((buf->onebuf) && (buf->priv.x11.xlib.shm))
380 {
381 Eina_Rectangle *rect;
382
383 RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, buf->w, buf->h);
384 obr = calloc(1, sizeof(Outbuf_Region));
385 if (!obr) return NULL;
386 rect = eina_rectangle_new(x, y, w, h);
387 if (!rect)
388 {
389 free(obr);
390 return NULL;
391 }
392
393 buf->priv.onebuf_regions = eina_list_append(buf->priv.onebuf_regions, rect);
394 if (buf->priv.onebuf)
395 {
396 *cx = x;
397 *cy = y;
398 *cw = w;
399 *ch = h;
400 if (!buf->priv.synced)
401 {
402 XSync(buf->priv.x11.xlib.disp, False);
403 buf->priv.synced = 1;
404 }
405 return buf->priv.onebuf;
406 }
407 obr->x = 0;
408 obr->y = 0;
409 obr->w = buf->w;
410 obr->h = buf->h;
411 *cx = x;
412 *cy = y;
413 *cw = w;
414 *ch = h;
415
416 alpha = ((buf->priv.x11.xlib.mask) || (buf->priv.destination_alpha));
417
418 use_shm = buf->priv.x11.xlib.shm;
419 if ((buf->rot == 0) &&
420 (buf->priv.mask.r == 0xff0000) &&
421 (buf->priv.mask.g == 0x00ff00) &&
422 (buf->priv.mask.b == 0x0000ff))
423 {
424 obr->xob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
425 buf->priv.x11.xlib.vis,
426 buf->priv.x11.xlib.depth,
427 buf->w, buf->h,
428 use_shm,
429 NULL);
430 if (!obr->xob)
431 {
432 free(obr);
433 return NULL;
434 }
435 im = (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
436 buf->w, buf->h,
437 (DATA32 *) evas_software_xlib_x_output_buffer_data(obr->xob, &bpl),
438 alpha, EVAS_COLORSPACE_ARGB8888);
439 if (!im)
440 {
441 evas_software_xlib_x_output_buffer_free(obr->xob, 0);
442 free(obr);
443 return NULL;
444 }
445 im->extended_info = obr;
446 if (buf->priv.x11.xlib.mask)
447 obr->mxob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
448 buf->priv.x11.xlib.vis,
449 1,
450 buf->w, buf->h,
451 use_shm,
452 NULL);
453 }
454 else
455 {
456 im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
457 if (!im)
458 {
459 free(obr);
460 return NULL;
461 }
462 im->cache_entry.flags.alpha |= alpha ? 1 : 0;
463 evas_cache_image_surface_alloc(&im->cache_entry, buf->w, buf->h);
464 im->extended_info = obr;
465 if ((buf->rot == 0) || (buf->rot == 180))
466 {
467 obr->xob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
468 buf->priv.x11.xlib.vis,
469 buf->priv.x11.xlib.depth,
470 buf->w, buf->h,
471 use_shm,
472 NULL);
473 if (!obr->xob)
474 {
475 evas_cache_image_drop(&im->cache_entry);
476 free(obr);
477 return NULL;
478 }
479 if (buf->priv.x11.xlib.mask)
480 obr->mxob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
481 buf->priv.x11.xlib.vis,
482 1, buf->w, buf->h,
483 use_shm,
484 NULL);
485 }
486 else if ((buf->rot == 90) || (buf->rot == 270))
487 {
488 obr->xob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
489 buf->priv.x11.xlib.vis,
490 buf->priv.x11.xlib.depth,
491 buf->h, buf->w,
492 use_shm,
493 NULL);
494 if (!obr->xob)
495 {
496 evas_cache_image_drop(&im->cache_entry);
497 free(obr);
498 return NULL;
499 }
500 if (buf->priv.x11.xlib.mask)
501 obr->mxob = evas_software_xlib_x_output_buffer_new(buf->priv.x11.xlib.disp,
502 buf->priv.x11.xlib.vis,
503 1, buf->h, buf->w,
504 use_shm,
505 NULL);
506 }
507 }
508 /* FIXME: We should be able to remove this memset, but somewhere in the process
509 we copy too much to the destination surface and some area are not cleaned before copy. */
510 if ((alpha) && (im->image.data))
511 {
512 /* FIXME: faster memset! */
513// memset(im->image.data, 0, w * h * sizeof(DATA32));
514 }
515
516 buf->priv.onebuf = im;
517 return im;
518 }
519
520 obr = calloc(1, sizeof(Outbuf_Region));
521 if (!obr) return NULL;
522 obr->x = x;
523 obr->y = y;
524 obr->w = w;
525 obr->h = h;
526 *cx = 0;
527 *cy = 0;
528 *cw = w;
529 *ch = h;
530
531 use_shm = buf->priv.x11.xlib.shm;
532 /* FIXME: magic - i found if shm regions are smaller than 200x200 its
533 * faster to use ximages over unix sockets - trial and error
534 */
535// use_shm = 0; /* 630 -> 1006 fps */
536// if ((w * h) < (200 * 200)) use_shm = 0; /* 630 -> 962 fps */
537
538 alpha = ((buf->priv.x11.xlib.mask) || (buf->priv.destination_alpha));
539
540 if ((buf->rot == 0) &&
541 (buf->priv.mask.r == 0xff0000) &&
542 (buf->priv.mask.g == 0x00ff00) &&
543 (buf->priv.mask.b == 0x0000ff))
544 {
545 obr->xob = _find_xob(buf->priv.x11.xlib.disp,
546 buf->priv.x11.xlib.vis,
547 buf->priv.x11.xlib.depth,
548 w, h,
549 use_shm,
550 NULL);
551 if (!obr->xob)
552 {
553 free(obr);
554 return NULL;
555 }
556 im = (RGBA_Image *)evas_cache_image_data(evas_common_image_cache_get(),
557 w, h,
558 (DATA32 *) evas_software_xlib_x_output_buffer_data(obr->xob, &bpl),
559 alpha, EVAS_COLORSPACE_ARGB8888);
560 if (!im)
561 {
562 _unfind_xob(obr->xob, 0);
563 free(obr);
564 return NULL;
565 }
566 im->extended_info = obr;
567 if (buf->priv.x11.xlib.mask)
568 obr->mxob = _find_xob(buf->priv.x11.xlib.disp,
569 buf->priv.x11.xlib.vis,
570 1, w, h,
571 use_shm,
572 NULL);
573 }
574 else
575 {
576 im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
577 if (!im)
578 {
579 free(obr);
580 return NULL;
581 }
582 im->cache_entry.flags.alpha |= alpha ? 1 : 0;
583 evas_cache_image_surface_alloc(&im->cache_entry, w, h);
584 im->extended_info = obr;
585 if ((buf->rot == 0) || (buf->rot == 180))
586 {
587 obr->xob = _find_xob(buf->priv.x11.xlib.disp,
588 buf->priv.x11.xlib.vis,
589 buf->priv.x11.xlib.depth,
590 w, h,
591 use_shm,
592 NULL);
593 if (!obr->xob)
594 {
595 evas_cache_image_drop(&im->cache_entry);
596 free(obr);
597 return NULL;
598 }
599 if (buf->priv.x11.xlib.mask)
600 obr->mxob = _find_xob(buf->priv.x11.xlib.disp,
601 buf->priv.x11.xlib.vis,
602 1, w, h,
603 use_shm,
604 NULL);
605 }
606 else if ((buf->rot == 90) || (buf->rot == 270))
607 {
608 obr->xob = _find_xob(buf->priv.x11.xlib.disp,
609 buf->priv.x11.xlib.vis,
610 buf->priv.x11.xlib.depth,
611 h, w,
612 use_shm,
613 NULL);
614 if (!obr->xob)
615 {
616 evas_cache_image_drop(&im->cache_entry);
617 free(obr);
618 return NULL;
619 }
620 if (buf->priv.x11.xlib.mask)
621 obr->mxob = _find_xob(buf->priv.x11.xlib.disp,
622 buf->priv.x11.xlib.vis,
623 1, h, w,
624 use_shm,
625 NULL);
626 }
627 }
628 /* FIXME: We should be able to remove this memset, but somewhere in the process
629 we copy too much to the destination surface and some area are not cleaned before copy. */
630 if (((buf->priv.x11.xlib.mask) || (buf->priv.destination_alpha)) &&
631 (im->image.data))
632 {
633 /* FIXME: faster memset! */
634// memset(im->image.data, 0, w * h * sizeof(DATA32));
635 }
636
637#ifdef EVAS_FRAME_QUEUING
638 if (!evas_common_frameq_enabled())
639#endif
640 buf->priv.pending_writes = eina_list_append(buf->priv.pending_writes, im);
641 return im;
642}
643
644void
645evas_software_xlib_outbuf_free_region_for_update(Outbuf *buf __UNUSED__, RGBA_Image *update __UNUSED__)
646{
647 /* no need to do anything - they are cleaned up on flush */
648}
649
650void
651evas_software_xlib_outbuf_flush(Outbuf *buf)
652{
653 Eina_List *l;
654 RGBA_Image *im;
655 Outbuf_Region *obr;
656
657 if ((buf->priv.onebuf) && (buf->priv.onebuf_regions))
658 {
659 Region tmpr;
660
661 im = buf->priv.onebuf;
662 obr = im->extended_info;
663 tmpr = XCreateRegion();
664 while (buf->priv.onebuf_regions)
665 {
666 Eina_Rectangle *rect;
667 XRectangle xr;
668
669 rect = buf->priv.onebuf_regions->data;
670 buf->priv.onebuf_regions = eina_list_remove_list(buf->priv.onebuf_regions, buf->priv.onebuf_regions);
671 if (buf->rot == 0)
672 {
673 xr.x = rect->x;
674 xr.y = rect->y;
675 xr.width = rect->w;
676 xr.height = rect->h;
677 }
678 else if (buf->rot == 90)
679 {
680 xr.x = rect->y;
681 xr.y = buf->w - rect->x - rect->w;
682 xr.width = rect->h;
683 xr.height = rect->w;
684 }
685 else if (buf->rot == 180)
686 {
687 xr.x = buf->w - rect->x - rect->w;
688 xr.y = buf->h - rect->y - rect->h;
689 xr.width = rect->w;
690 xr.height = rect->h;
691 }
692 else if (buf->rot == 270)
693 {
694 xr.x = buf->h - rect->y - rect->h;
695 xr.y = rect->x;
696 xr.width = rect->h;
697 xr.height = rect->w;
698 }
699 XUnionRectWithRegion(&xr, tmpr, tmpr);
700 if (buf->priv.debug)
701 evas_software_xlib_outbuf_debug_show(buf, buf->priv.x11.xlib.win,
702 xr.x, xr.y, xr.width, xr.height);
703 eina_rectangle_free(rect);
704 }
705 XSetRegion(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gc, tmpr);
706 if (obr->xob)
707 evas_software_xlib_x_output_buffer_paste(obr->xob, buf->priv.x11.xlib.win,
708 buf->priv.x11.xlib.gc,
709 0, 0, 0);
710 if (obr->mxob)
711 {
712 XSetRegion(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gcm, tmpr);
713 evas_software_xlib_x_output_buffer_paste(obr->mxob,
714 buf->priv.x11.xlib.mask,
715 buf->priv.x11.xlib.gcm,
716 0, 0, 0);
717 }
718 XDestroyRegion(tmpr);
719 buf->priv.synced = 0;
720 }
721 else
722 {
723#if 1
724 XSync(buf->priv.x11.xlib.disp, False);
725 EINA_LIST_FOREACH(buf->priv.pending_writes, l, im)
726 {
727 obr = im->extended_info;
728 if (buf->priv.debug)
729 evas_software_xlib_outbuf_debug_show(buf, buf->priv.x11.xlib.win,
730 obr->x, obr->y, obr->w, obr->h);
731 if (obr->xob)
732 evas_software_xlib_x_output_buffer_paste(obr->xob, buf->priv.x11.xlib.win,
733 buf->priv.x11.xlib.gc,
734 obr->x, obr->y, 0);
735 if (obr->mxob)
736 evas_software_xlib_x_output_buffer_paste(obr->mxob,
737 buf->priv.x11.xlib.mask,
738 buf->priv.x11.xlib.gcm,
739 obr->x, obr->y, 0);
740 }
741#ifdef EVAS_FRAME_QUEUING
742 LKL(buf->priv.lock);
743#endif
744 while (buf->priv.prev_pending_writes)
745 {
746 im = buf->priv.prev_pending_writes->data;
747 buf->priv.prev_pending_writes =
748 eina_list_remove_list(buf->priv.prev_pending_writes,
749 buf->priv.prev_pending_writes);
750 obr = im->extended_info;
751 evas_cache_image_drop(&im->cache_entry);
752 if (obr->xob) _unfind_xob(obr->xob, 0);
753 if (obr->mxob) _unfind_xob(obr->mxob, 0);
754 free(obr);
755 }
756 buf->priv.prev_pending_writes = buf->priv.pending_writes;
757#ifdef EVAS_FRAME_QUEUING
758 LKU(buf->priv.lock);
759#endif
760 buf->priv.pending_writes = NULL;
761 XFlush(buf->priv.x11.xlib.disp);
762#else
763 /* XX async push - disable */
764 /*
765 EINA_LIST_FOREACH(buf->priv.pending_writes, l, im)
766 {
767 obr = im->extended_info;
768 if (buf->priv.debug)
769 evas_software_xlib_outbuf_debug_show(buf, buf->priv.x11.xlib.win,
770 obr->x, obr->y, obr->w, obr->h);
771 evas_software_xlib_x_output_buffer_paste(obr->xob, buf->priv.x11.xlib.win,
772 buf->priv.x11.xlib.gc,
773 obr->x, obr->y, 0);
774 if (obr->mxob)
775 evas_software_xlib_x_output_buffer_paste(obr->mxob,
776 buf->priv.x11.xlib.mask,
777 buf->priv.x11.xlib.gcm,
778 obr->x, obr->y, 0);
779 }
780 */
781 XSync(buf->priv.x11.xlib.disp, False);
782
783 while (buf->priv.pending_writes)
784 {
785 RGBA_Image *im;
786 Outbuf_Region *obr;
787
788 im = eina_list_data_get(buf->priv.pending_writes);
789 buf->priv.pending_writes = eina_list_remove_list(buf->priv.pending_writes, buf->priv.pending_writes);
790 obr = im->extended_info;
791 evas_cache_image_drop(&im->cache_entry);
792 if (obr->xob) _unfind_xob(obr->xob, 0);
793 if (obr->mxob) _unfind_xob(obr->mxob, 0);
794 free(obr);
795 evas_cache_image_drop(&im->cache_entry);
796 }
797#endif
798 }
799 evas_common_cpu_end_opt();
800}
801
802void
803evas_software_xlib_outbuf_idle_flush(Outbuf *buf)
804{
805 if (buf->priv.onebuf)
806 {
807 RGBA_Image *im;
808 Outbuf_Region *obr;
809
810 im = buf->priv.onebuf;
811 buf->priv.onebuf = NULL;
812 obr = im->extended_info;
813 if (obr->xob) evas_software_xlib_x_output_buffer_free(obr->xob, 0);
814 if (obr->mxob) evas_software_xlib_x_output_buffer_free(obr->mxob, 0);
815 free(obr);
816 evas_cache_image_drop(&im->cache_entry);
817 }
818 else
819 {
820#ifdef EVAS_FRAME_QUEUING
821 LKL(buf->priv.lock);
822#endif
823 if (buf->priv.prev_pending_writes) XSync(buf->priv.x11.xlib.disp, False);
824 while (buf->priv.prev_pending_writes)
825 {
826 RGBA_Image *im;
827 Outbuf_Region *obr;
828
829 im = buf->priv.prev_pending_writes->data;
830 buf->priv.prev_pending_writes =
831 eina_list_remove_list(buf->priv.prev_pending_writes,
832 buf->priv.prev_pending_writes);
833 obr = im->extended_info;
834 evas_cache_image_drop(&im->cache_entry);
835 if (obr->xob) _unfind_xob(obr->xob, 0);
836 if (obr->mxob) _unfind_xob(obr->mxob, 0);
837 free(obr);
838 }
839#ifdef EVAS_FRAME_QUEUING
840 LKU(buf->priv.lock);
841#endif
842 _clear_xob(0);
843 }
844}
845
846void
847evas_software_xlib_outbuf_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h)
848{
849 Gfx_Func_Convert conv_func = NULL;
850 Outbuf_Region *obr;
851 DATA32 *src_data;
852 unsigned char *data;
853 int bpl = 0, yy;
854
855 obr = update->extended_info;
856 if (buf->priv.pal)
857 {
858 if ((buf->rot == 0) || (buf->rot == 180))
859 conv_func = evas_common_convert_func_get(0, w, h,
860 evas_software_xlib_x_output_buffer_depth
861 (obr->xob), buf->priv.mask.r,
862 buf->priv.mask.g, buf->priv.mask.b,
863 buf->priv.pal->colors, buf->rot);
864 else if ((buf->rot == 90) || (buf->rot == 270))
865 conv_func = evas_common_convert_func_get(0, h, w,
866 evas_software_xlib_x_output_buffer_depth
867 (obr->xob), buf->priv.mask.r,
868 buf->priv.mask.g, buf->priv.mask.b,
869 buf->priv.pal->colors, buf->rot);
870 }
871 else
872 {
873 if ((buf->rot == 0) || (buf->rot == 180))
874 conv_func = evas_common_convert_func_get(0, w, h,
875 evas_software_xlib_x_output_buffer_depth
876 (obr->xob), buf->priv.mask.r,
877 buf->priv.mask.g, buf->priv.mask.b,
878 PAL_MODE_NONE, buf->rot);
879 else if ((buf->rot == 90) || (buf->rot == 270))
880 conv_func = evas_common_convert_func_get(0, h, w,
881 evas_software_xlib_x_output_buffer_depth
882 (obr->xob), buf->priv.mask.r,
883 buf->priv.mask.g, buf->priv.mask.b,
884 PAL_MODE_NONE, buf->rot);
885 }
886 if (!conv_func) return;
887
888 if (!obr->xob) return;
889 data = evas_software_xlib_x_output_buffer_data(obr->xob, &bpl);
890 if (!data) return;
891 src_data = update->image.data;
892 if (!src_data) return;
893 if (buf->rot == 0)
894 {
895 obr->x = x;
896 obr->y = y;
897 }
898 else if (buf->rot == 90)
899 {
900 obr->x = y;
901 obr->y = buf->w - x - w;
902 }
903 else if (buf->rot == 180)
904 {
905 obr->x = buf->w - x - w;
906 obr->y = buf->h - y - h;
907 }
908 else if (buf->rot == 270)
909 {
910 obr->x = buf->h - y - h;
911 obr->y = x;
912 }
913 if ((buf->rot == 0) || (buf->rot == 180))
914 {
915 obr->w = w;
916 obr->h = h;
917 }
918 else if ((buf->rot == 90) || (buf->rot == 270))
919 {
920 obr->w = h;
921 obr->h = w;
922 }
923 if (buf->onebuf)
924 {
925 src_data += x + (y * update->cache_entry.w);
926 data += (bpl * obr->y) +
927 (obr->x * (evas_software_xlib_x_output_buffer_depth(obr->xob) / 8));
928 }
929 if (buf->priv.pal)
930 {
931 if (data != (unsigned char *)src_data)
932 conv_func(src_data, data,
933 update->cache_entry.w - w,
934 bpl /
935 ((evas_software_xlib_x_output_buffer_depth(obr->xob) /
936 8)) - obr->w, obr->w, obr->h, x, y,
937 buf->priv.pal->lookup);
938 }
939 else
940 {
941 if (data != (unsigned char *)src_data)
942 conv_func(src_data, data,
943 update->cache_entry.w - w,
944 bpl /
945 ((evas_software_xlib_x_output_buffer_depth(obr->xob) /
946 8)) - obr->w, obr->w, obr->h, x, y, NULL);
947 }
948#if 1
949#else
950 /* XX async push */
951 if (!((buf->priv.onebuf) && (buf->priv.onebuf_regions)))
952 {
953 if (buf->priv.debug)
954 evas_software_xlib_outbuf_debug_show(buf, buf->priv.x11.xlib.win,
955 obr->x, obr->y, obr->w, obr->h);
956 if (obr->xob)
957 evas_software_xlib_x_output_buffer_paste(obr->xob, buf->priv.x11.xlib.win,
958 buf->priv.x11.xlib.gc,
959 obr->x, obr->y, 0);
960 }
961#endif
962 if (obr->mxob)
963 {
964 if (buf->rot == 0)
965 {
966 for (yy = 0; yy < obr->h; yy++)
967 evas_software_xlib_x_write_mask_line(buf, obr->mxob,
968 src_data +
969 (yy * obr->w), obr->w, yy);
970 }
971 else if (buf->rot == 90)
972 {
973 for (yy = 0; yy < obr->h; yy++)
974 evas_software_xlib_x_write_mask_line_vert(buf, obr->mxob,
975 src_data + yy,
976 h, // h
977 obr->h - yy - 1, // ym
978 w); // w
979 }
980 else if (buf->rot == 180)
981 {
982 for (yy = 0; yy < obr->h; yy++)
983 {
984 evas_software_xlib_x_write_mask_line_rev(buf, obr->mxob,
985 src_data +
986 (yy * obr->w),
987 obr->w, obr->h - yy - 1);
988 }
989 }
990 else if (buf->rot == 270)
991 {
992 for (yy = 0; yy < obr->h; yy++)
993 evas_software_xlib_x_write_mask_line_vert_rev(buf, obr->mxob,
994 src_data + yy,
995 h, // h
996 yy, // ym
997 w); // w
998 }
999#if 1
1000#else
1001 /* XX async push */
1002 if (!((buf->priv.onebuf) && (buf->priv.onebuf_regions)))
1003 evas_software_xlib_x_output_buffer_paste(obr->mxob,
1004 buf->priv.x11.xlib.mask,
1005 buf->priv.x11.xlib.gcm,
1006 obr->x, obr->y, 0);
1007#endif
1008 }
1009#if 1
1010#else
1011 XFlush(buf->priv.x11.xlib.disp);
1012#endif
1013}
1014
1015void
1016evas_software_xlib_outbuf_reconfigure(Outbuf * buf, int w, int h, int rot,
1017 Outbuf_Depth depth)
1018{
1019 if ((w == buf->w) &&
1020 (h == buf->h) &&
1021 (rot == buf->rot) &&
1022 (depth == buf->depth)) return;
1023 buf->w = w;
1024 buf->h = h;
1025 buf->rot = rot;
1026 evas_software_xlib_outbuf_idle_flush(buf);
1027}
1028
1029int
1030evas_software_xlib_outbuf_get_width(Outbuf * buf)
1031{
1032 return buf->w;
1033}
1034
1035int
1036evas_software_xlib_outbuf_get_height(Outbuf * buf)
1037{
1038 return buf->h;
1039}
1040
1041Outbuf_Depth
1042evas_software_xlib_outbuf_get_depth(Outbuf * buf)
1043{
1044 return buf->depth;
1045}
1046
1047int
1048evas_software_xlib_outbuf_get_rot(Outbuf * buf)
1049{
1050 return buf->rot;
1051}
1052
1053void
1054evas_software_xlib_outbuf_drawable_set(Outbuf * buf, Drawable draw)
1055{
1056 XGCValues gcv;
1057
1058 if (buf->priv.x11.xlib.win == draw) return;
1059 if (buf->priv.x11.xlib.gc)
1060 {
1061 XFreeGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gc);
1062 buf->priv.x11.xlib.gc = NULL;
1063 }
1064 buf->priv.x11.xlib.win = draw;
1065 buf->priv.x11.xlib.gc = XCreateGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.win, 0, &gcv);
1066}
1067
1068void
1069evas_software_xlib_outbuf_mask_set(Outbuf * buf, Pixmap mask)
1070{
1071 XGCValues gcv;
1072
1073 if (buf->priv.x11.xlib.mask == mask) return;
1074 if (buf->priv.x11.xlib.gcm)
1075 {
1076 XFreeGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gcm);
1077 buf->priv.x11.xlib.gcm = NULL;
1078 }
1079 buf->priv.x11.xlib.mask = mask;
1080 if (buf->priv.x11.xlib.mask)
1081 buf->priv.x11.xlib.gcm = XCreateGC(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.mask, 0, &gcv);
1082}
1083
1084void
1085evas_software_xlib_outbuf_debug_set(Outbuf * buf, int debug)
1086{
1087 buf->priv.debug = debug;
1088}
1089
1090void
1091evas_software_xlib_outbuf_debug_show(Outbuf * buf, Drawable draw, int x, int y, int w,
1092 int h)
1093{
1094 int i;
1095 int screen_num = 0;
1096
1097 {
1098 int wx, wy;
1099 unsigned int ww, wh, bd, dp;
1100 Window wdum, root;
1101 XWindowAttributes wattr;
1102
1103 XGetGeometry(buf->priv.x11.xlib.disp, draw, &root, &wx, &wy, &ww, &wh, &bd, &dp);
1104 XGetGeometry(buf->priv.x11.xlib.disp, root, &wdum, &wx, &wy, &ww, &wh, &bd, &dp);
1105 XGetWindowAttributes(buf->priv.x11.xlib.disp, root, &wattr);
1106 screen_num = XScreenNumberOfScreen(wattr.screen);
1107 }
1108 for (i = 0; i < 20; i++)
1109 {
1110 XSetForeground(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gc,
1111 BlackPixel(buf->priv.x11.xlib.disp, screen_num));
1112 XFillRectangle(buf->priv.x11.xlib.disp, draw, buf->priv.x11.xlib.gc, x, y, w, h);
1113 XSync(buf->priv.x11.xlib.disp, False);
1114 XSync(buf->priv.x11.xlib.disp, False);
1115 XSetForeground(buf->priv.x11.xlib.disp, buf->priv.x11.xlib.gc,
1116 WhitePixel(buf->priv.x11.xlib.disp, screen_num));
1117 XFillRectangle(buf->priv.x11.xlib.disp, draw, buf->priv.x11.xlib.gc, x, y, w, h);
1118 XSync(buf->priv.x11.xlib.disp, False);
1119 XSync(buf->priv.x11.xlib.disp, False);
1120 }
1121}
1122
1123Eina_Bool
1124evas_software_xlib_outbuf_alpha_get(Outbuf *buf)
1125{
1126 return buf->priv.x11.xlib.mask;
1127}
1128
1129#ifdef EVAS_FRAME_QUEUING
1130void
1131evas_software_xlib_outbuf_set_priv(Outbuf *buf, void *cur, void *prev __UNUSED__)
1132{
1133 buf->priv.pending_writes = (Eina_List *)cur;
1134}
1135#endif
diff --git a/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.h b/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.h
new file mode 100644
index 0000000..d70eb8d
--- /dev/null
+++ b/libraries/evas/src/modules/engines/software_x11/evas_xlib_outbuf.h
@@ -0,0 +1,92 @@
1#ifndef EVAS_XLIB_OUTBUF_H
2#define EVAS_XLIB_OUTBUF_H
3
4
5#include "evas_engine.h"
6
7
8void evas_software_xlib_outbuf_init (void);
9
10void evas_software_xlib_outbuf_free (Outbuf *buf);
11
12Outbuf *evas_software_xlib_outbuf_setup_x (int w,
13 int h,
14 int rot,
15 Outbuf_Depth depth,
16 Display *disp,
17 Drawable draw,
18 Visual *vis,
19 Colormap cmap,
20 int x_depth,
21 int grayscale,
22 int max_colors,
23 Pixmap mask,
24 int shape_dither,
25 int destination_alpha);
26
27
28RGBA_Image *evas_software_xlib_outbuf_new_region_for_update (Outbuf *buf,
29 int x,
30 int y,
31 int w,
32 int h,
33 int *cx,
34 int *cy,
35 int *cw,
36 int *ch);
37
38void evas_software_xlib_outbuf_free_region_for_update (Outbuf *buf,
39 RGBA_Image *update);
40
41void evas_software_xlib_outbuf_flush (Outbuf *buf);
42
43void evas_software_xlib_outbuf_idle_flush (Outbuf *buf);
44
45void evas_software_xlib_outbuf_push_updated_region (Outbuf *buf,
46 RGBA_Image *update,
47 int x,
48 int y,
49 int w,
50 int h);
51
52void evas_software_xlib_outbuf_reconfigure (Outbuf *buf,
53 int w,
54 int h,
55 int rot,
56 Outbuf_Depth depth);
57
58int evas_software_xlib_outbuf_get_width (Outbuf *buf);
59
60int evas_software_xlib_outbuf_get_height (Outbuf *buf);
61
62Outbuf_Depth evas_software_xlib_outbuf_get_depth (Outbuf *buf);
63
64int evas_software_xlib_outbuf_get_rot (Outbuf *buf);
65
66void evas_software_xlib_outbuf_drawable_set (Outbuf *buf,
67 Drawable draw);
68
69void evas_software_xlib_outbuf_mask_set (Outbuf *buf,
70 Pixmap mask);
71
72void evas_software_xlib_outbuf_rotation_set (Outbuf *buf,
73 int rot);
74
75void evas_software_xlib_outbuf_debug_set (Outbuf *buf,
76 int debug);
77
78void evas_software_xlib_outbuf_debug_show (Outbuf *buf,
79 Drawable draw,
80 int x,
81 int y,
82 int w,
83 int h);
84
85Eina_Bool evas_software_xlib_outbuf_alpha_get (Outbuf *buf);
86#ifdef EVAS_FRAME_QUEUING
87void evas_software_xlib_outbuf_set_priv (Outbuf *buf,
88 void *cur,
89 void *prev);
90#endif
91
92#endif