forked from enlightenment/efl
memory buffer engine... not doing everything. api may change... working on it.
SVN revision: 6808
This commit is contained in:
parent
733ffbfc5d
commit
bbfaab2ac1
|
@ -12,6 +12,7 @@
|
||||||
#undef BUILD_ENGINE_SOFTWARE_X11
|
#undef BUILD_ENGINE_SOFTWARE_X11
|
||||||
#undef BUILD_ENGINE_DIRECTFB
|
#undef BUILD_ENGINE_DIRECTFB
|
||||||
#undef BUILD_ENGINE_FB
|
#undef BUILD_ENGINE_FB
|
||||||
|
#undef BUILD_ENGINE_BUFFER
|
||||||
#undef BUILD_ENGINE_SOFTWARE_WIN32_GDI
|
#undef BUILD_ENGINE_SOFTWARE_WIN32_GDI
|
||||||
#undef BUILD_ENGINE_SOFTWARE_QTOPIA
|
#undef BUILD_ENGINE_SOFTWARE_QTOPIA
|
||||||
#undef BUILD_ENGINE_GL_COMMON
|
#undef BUILD_ENGINE_GL_COMMON
|
||||||
|
|
|
@ -171,6 +171,20 @@ AC_ARG_ENABLE(fb, [ --enable-fb enable the FB rendering bac
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(whether buffer backend is to be built)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(fb, [ --enable-buffer enable the Buffer rendering backend], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AM_CONDITIONAL(BUILD_ENGINE_BUFFER, true)
|
||||||
|
AC_DEFINE(BUILD_ENGINE_BUFFER)
|
||||||
|
ENGINE_BUFFER_PRG="evas_buffer_test"
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
AM_CONDITIONAL(BUILD_ENGINE_BUFFER, false)
|
||||||
|
ENGINE_BUFFER_PRG=""
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
AC_MSG_CHECKING(whether software qtopia backend is to be built)
|
AC_MSG_CHECKING(whether software qtopia backend is to be built)
|
||||||
|
|
||||||
AC_ARG_ENABLE(software-qtopia, [ --enable-software-qtopia enable the Software Qtopia rendering backend], [
|
AC_ARG_ENABLE(software-qtopia, [ --enable-software-qtopia enable the Software Qtopia rendering backend], [
|
||||||
|
@ -573,6 +587,7 @@ AC_SUBST(edb_libs)
|
||||||
AC_SUBST(ENGINE_SOFTWARE_X11_PRG)
|
AC_SUBST(ENGINE_SOFTWARE_X11_PRG)
|
||||||
AC_SUBST(ENGINE_DIRECTFB_PRG)
|
AC_SUBST(ENGINE_DIRECTFB_PRG)
|
||||||
AC_SUBST(ENGINE_FB_PRG)
|
AC_SUBST(ENGINE_FB_PRG)
|
||||||
|
AC_SUBST(ENGINE_BUFFER_PRG)
|
||||||
AC_SUBST(ENGINE_SOFTWARE_QTOPIA_PRG)
|
AC_SUBST(ENGINE_SOFTWARE_QTOPIA_PRG)
|
||||||
AC_SUBST(ENGINE_GL_X11_PRG)
|
AC_SUBST(ENGINE_GL_X11_PRG)
|
||||||
|
|
||||||
|
@ -589,6 +604,7 @@ src/lib/engines/Makefile
|
||||||
src/lib/engines/common/Makefile
|
src/lib/engines/common/Makefile
|
||||||
src/lib/engines/software_x11/Makefile
|
src/lib/engines/software_x11/Makefile
|
||||||
src/lib/engines/fb/Makefile
|
src/lib/engines/fb/Makefile
|
||||||
|
src/lib/engines/buffer/Makefile
|
||||||
src/lib/engines/software_win32_gdi/Makefile
|
src/lib/engines/software_win32_gdi/Makefile
|
||||||
src/lib/engines/software_qtopia/Makefile
|
src/lib/engines/software_qtopia/Makefile
|
||||||
src/lib/engines/directfb/Makefile
|
src/lib/engines/directfb/Makefile
|
||||||
|
|
|
@ -8,6 +8,7 @@ bin_PROGRAMS = \
|
||||||
@ENGINE_SOFTWARE_X11_PRG@ \
|
@ENGINE_SOFTWARE_X11_PRG@ \
|
||||||
@ENGINE_DIRECTFB_PRG@ \
|
@ENGINE_DIRECTFB_PRG@ \
|
||||||
@ENGINE_FB_PRG@ \
|
@ENGINE_FB_PRG@ \
|
||||||
|
@ENGINE_BUFFER_PRG@ \
|
||||||
@ENGINE_SOFTWARE_QTOPIA_PRG@ \
|
@ENGINE_SOFTWARE_QTOPIA_PRG@ \
|
||||||
@ENGINE_GL_X11_PRG@
|
@ENGINE_GL_X11_PRG@
|
||||||
|
|
||||||
|
@ -18,6 +19,7 @@ evas_software_x11_perf_load \
|
||||||
evas_directfb_test \
|
evas_directfb_test \
|
||||||
evas_directfb_window \
|
evas_directfb_window \
|
||||||
evas_fb_test \
|
evas_fb_test \
|
||||||
|
evas_buffer_test \
|
||||||
evas_software_qtopia_test \
|
evas_software_qtopia_test \
|
||||||
evas_gl_x11_test
|
evas_gl_x11_test
|
||||||
|
|
||||||
|
@ -59,6 +61,12 @@ evas_fb_test_LDFLAGS = $(LDFLAGS)
|
||||||
evas_fb_test_CFLAGS = $(CFLAGS)
|
evas_fb_test_CFLAGS = $(CFLAGS)
|
||||||
evas_fb_test_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la
|
evas_fb_test_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la
|
||||||
|
|
||||||
|
evas_buffer_test_SOURCES = evas_test_main.h evas_test_main.c evas_buffer_main.c
|
||||||
|
evas_buffer_test_LDADD = $(top_builddir)/src/lib/libevas.la -lm
|
||||||
|
evas_buffer_test_LDFLAGS = $(LDFLAGS)
|
||||||
|
evas_buffer_test_CFLAGS = $(CFLAGS)
|
||||||
|
evas_buffer_test_DEPENDENCIES = $(top_builddir)/src/lib/libevas.la
|
||||||
|
|
||||||
if BUILD_ENGINE_SOFTWARE_QTOPIA
|
if BUILD_ENGINE_SOFTWARE_QTOPIA
|
||||||
moc_evas_software_qtopia_main.cpp: evas_software_qtopia_main.h
|
moc_evas_software_qtopia_main.cpp: evas_software_qtopia_main.h
|
||||||
@qt_moc@ evas_software_qtopia_main.h -o moc_evas_software_qtopia_main.cpp
|
@qt_moc@ evas_software_qtopia_main.h -o moc_evas_software_qtopia_main.cpp
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
#include "evas_test_main.h"
|
||||||
|
|
||||||
|
#include "Evas.h"
|
||||||
|
#include "Evas_Engine_Buffer.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int rot = 0;
|
||||||
|
unsigned char *img_buf = NULL;
|
||||||
|
|
||||||
|
if ((argc >= 3) && (!strcmp(argv[1], "-rot")))
|
||||||
|
rot = atoi(argv[2]);
|
||||||
|
evas = evas_new();
|
||||||
|
evas_output_method_set(evas, evas_render_method_lookup("buffer"));
|
||||||
|
evas_output_size_set(evas, win_w, win_h);
|
||||||
|
evas_output_viewport_set(evas, 0, 0, win_w, win_h);
|
||||||
|
{
|
||||||
|
Evas_Engine_Info_Buffer *einfo;
|
||||||
|
|
||||||
|
einfo = (Evas_Engine_Info_Buffer *) evas_engine_info_get(evas);
|
||||||
|
|
||||||
|
/* the following is specific to the engine */
|
||||||
|
einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_RGB24;
|
||||||
|
img_buf = malloc(win_w * win_h * 3);
|
||||||
|
einfo->info.dest_buffer = img_buf;
|
||||||
|
einfo->info.dest_buffer_row_bytes = win_w * 3;
|
||||||
|
einfo->info.use_color_key = 1;
|
||||||
|
einfo->info.alpha_threshold = 128;
|
||||||
|
einfo->info.color_key_r = 0xff;
|
||||||
|
einfo->info.color_key_g = 0x00;
|
||||||
|
einfo->info.color_key_b = 0xff;
|
||||||
|
evas_engine_info_set(evas, (Evas_Engine_Info *) einfo);
|
||||||
|
}
|
||||||
|
setup();
|
||||||
|
orig_start_time = start_time = get_time();
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
loop();
|
||||||
|
evas_render(evas);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef _EVAS_ENGINE_BUFFER_H
|
||||||
|
#define _EVAS_ENGINE_BUFFER_H
|
||||||
|
|
||||||
|
#define EVAS_ENGINE_BUFFER_DEPTH_RGBA32 0
|
||||||
|
#define EVAS_ENGINE_BUFFER_DEPTH_RGB24 1
|
||||||
|
|
||||||
|
typedef struct _Evas_Engine_Info_Buffer Evas_Engine_Info_Buffer;
|
||||||
|
|
||||||
|
struct _Evas_Engine_Info_Buffer
|
||||||
|
{
|
||||||
|
/* PRIVATE - don't mess with this baby or evas will poke its tongue out */
|
||||||
|
/* at you and make nasty noises */
|
||||||
|
Evas_Engine_Info magic;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
int depth_type;
|
||||||
|
|
||||||
|
void *dest_buffer;
|
||||||
|
int dest_buffer_row_bytes;
|
||||||
|
|
||||||
|
char use_color_key : 1;
|
||||||
|
int alpha_threshold;
|
||||||
|
int color_key_r;
|
||||||
|
int color_key_g;
|
||||||
|
int color_key_b;
|
||||||
|
} info;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ EXTRA_DIST = \
|
||||||
Evas_Engine_Software_X11.h \
|
Evas_Engine_Software_X11.h \
|
||||||
Evas_Engine_DirectFB.h \
|
Evas_Engine_DirectFB.h \
|
||||||
Evas_Engine_FB.h \
|
Evas_Engine_FB.h \
|
||||||
|
Evas_Engine_Buffer.h \
|
||||||
Evas_Engine_Software_Win32_GDI.h \
|
Evas_Engine_Software_Win32_GDI.h \
|
||||||
Evas_Engine_Software_Qtopia.h \
|
Evas_Engine_Software_Qtopia.h \
|
||||||
Evas_Engine_GL_X11.h
|
Evas_Engine_GL_X11.h
|
||||||
|
@ -48,6 +49,14 @@ ENGINE_FB =
|
||||||
ENGINE_FB_INC =
|
ENGINE_FB_INC =
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if BUILD_ENGINE_BUFFER
|
||||||
|
ENGINE_BUFFER = engines/buffer/libevas_engine_buffer.la
|
||||||
|
ENGINE_BUFFER_INC = Evas_Engine_Buffer.h
|
||||||
|
else
|
||||||
|
ENGINE_BUFFER =
|
||||||
|
ENGINE_BUFFER_INC =
|
||||||
|
endif
|
||||||
|
|
||||||
if BUILD_ENGINE_SOFTWARE_QTOPIA
|
if BUILD_ENGINE_SOFTWARE_QTOPIA
|
||||||
ENGINE_SOFTWARE_QTOPIA = engines/software_qtopia/libevas_engine_software_qtopia.la
|
ENGINE_SOFTWARE_QTOPIA = engines/software_qtopia/libevas_engine_software_qtopia.la
|
||||||
ENGINE_SOFTWARE_QTOPIA_INC = Evas_Engine_Software_Qtopia.h
|
ENGINE_SOFTWARE_QTOPIA_INC = Evas_Engine_Software_Qtopia.h
|
||||||
|
@ -69,6 +78,7 @@ Evas.h \
|
||||||
$(ENGINE_SOFTWARE_X11_INC) \
|
$(ENGINE_SOFTWARE_X11_INC) \
|
||||||
$(ENGINE_DIRECTFB_INC) \
|
$(ENGINE_DIRECTFB_INC) \
|
||||||
$(ENGINE_FB_INC) \
|
$(ENGINE_FB_INC) \
|
||||||
|
$(ENGINE_BUFFER_INC) \
|
||||||
$(ENGINE_SOFTWARE_QTOPIA_INC) \
|
$(ENGINE_SOFTWARE_QTOPIA_INC) \
|
||||||
$(ENGINE_GL_X11_INC)
|
$(ENGINE_GL_X11_INC)
|
||||||
|
|
||||||
|
@ -85,6 +95,7 @@ libevas_la_LIBADD = $(LDFLAGS) \
|
||||||
$(ENGINE_SOFTWARE_X11) \
|
$(ENGINE_SOFTWARE_X11) \
|
||||||
$(ENGINE_DIRECTFB) \
|
$(ENGINE_DIRECTFB) \
|
||||||
$(ENGINE_FB) \
|
$(ENGINE_FB) \
|
||||||
|
$(ENGINE_BUFFER) \
|
||||||
$(ENGINE_SOFTWARE_QTOPIA) \
|
$(ENGINE_SOFTWARE_QTOPIA) \
|
||||||
$(ENGINE_GL_X11)
|
$(ENGINE_GL_X11)
|
||||||
|
|
||||||
|
@ -98,6 +109,7 @@ libevas_la_DEPENDENCIES = \
|
||||||
$(ENGINE_SOFTWARE_X11) \
|
$(ENGINE_SOFTWARE_X11) \
|
||||||
$(ENGINE_DIRECTFB) \
|
$(ENGINE_DIRECTFB) \
|
||||||
$(ENGINE_FB) \
|
$(ENGINE_FB) \
|
||||||
|
$(ENGINE_BUFFER) \
|
||||||
$(ENGINE_SOFTWARE_QTOPIA) \
|
$(ENGINE_SOFTWARE_QTOPIA) \
|
||||||
$(ENGINE_GL_X11)
|
$(ENGINE_GL_X11)
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
#ifdef BUILD_ENGINE_FB
|
#ifdef BUILD_ENGINE_FB
|
||||||
#include "evas_engine_api_fb.h"
|
#include "evas_engine_api_fb.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BUILD_ENGINE_BUFFER
|
||||||
|
#include "evas_engine_api_buffer.h"
|
||||||
|
#endif
|
||||||
#ifdef BUILD_ENGINE_SOFTWARE_WIN32_GDI
|
#ifdef BUILD_ENGINE_SOFTWARE_WIN32_GDI
|
||||||
#include "evas_engine_api_software_win32_gdi.h"
|
#include "evas_engine_api_software_win32_gdi.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -171,6 +174,11 @@ evas_output_method_set(Evas *e, int render_method)
|
||||||
e->engine.func = &evas_engine_fb_func;
|
e->engine.func = &evas_engine_fb_func;
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BUILD_ENGINE_BUFFER
|
||||||
|
if (e->output.render_method == RENDER_METHOD_BUFFER)
|
||||||
|
e->engine.func = &evas_engine_buffer_func;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
#ifdef BUILD_ENGINE_SOFTWARE_WIN32_GDI
|
#ifdef BUILD_ENGINE_SOFTWARE_WIN32_GDI
|
||||||
if (e->output.render_method == RENDER_METHOD_SOFTWARE_WIN32_GDI)
|
if (e->output.render_method == RENDER_METHOD_SOFTWARE_WIN32_GDI)
|
||||||
e->engine.func = &evas_engine_software_win32_gdi_func;
|
e->engine.func = &evas_engine_software_win32_gdi_func;
|
||||||
|
@ -647,10 +655,13 @@ evas_render_method_lookup(const char *name)
|
||||||
if (!strcmp(name, "gl_x11")) return RENDER_METHOD_GL_X11;
|
if (!strcmp(name, "gl_x11")) return RENDER_METHOD_GL_X11;
|
||||||
#endif
|
#endif
|
||||||
#ifdef BUILD_ENGINE_DIRECTFB
|
#ifdef BUILD_ENGINE_DIRECTFB
|
||||||
if (!strcmp(name, "directfb")) return RENDER_METHOD_DIRECTFB;
|
if (!strcmp(name, "directfb")) return RENDER_METHOD_DIRECTFB;
|
||||||
#endif
|
#endif
|
||||||
#ifdef BUILD_ENGINE_FB
|
#ifdef BUILD_ENGINE_FB
|
||||||
if (!strcmp(name, "fb")) return RENDER_METHOD_FB;
|
if (!strcmp(name, "fb")) return RENDER_METHOD_FB;
|
||||||
|
#endif
|
||||||
|
#ifdef BUILD_ENGINE_BUFFER
|
||||||
|
if (!strcmp(name, "buffer")) return RENDER_METHOD_BUFFER;
|
||||||
#endif
|
#endif
|
||||||
#ifdef BUILD_ENGINE_SOFTWARE_WIN32_GDI
|
#ifdef BUILD_ENGINE_SOFTWARE_WIN32_GDI
|
||||||
if (!strcmp(name, "software_win32_gdi")) return RENDER_METHOD_SOFTWARE_WIN32_GDI;
|
if (!strcmp(name, "software_win32_gdi")) return RENDER_METHOD_SOFTWARE_WIN32_GDI;
|
||||||
|
@ -700,18 +711,21 @@ evas_render_method_list(void)
|
||||||
{
|
{
|
||||||
Evas_List *methods = NULL;
|
Evas_List *methods = NULL;
|
||||||
|
|
||||||
#ifdef BUILD_ENGINE_SOFTWARE_X11
|
#ifdef BUILD_ENGINE_SOFTWARE_X11
|
||||||
methods = evas_list_append(methods, strdup("software_x11"));
|
methods = evas_list_append(methods, strdup("software_x11"));
|
||||||
#endif
|
#endif
|
||||||
#ifdef BUILD_ENGINE_GL_X11
|
#ifdef BUILD_ENGINE_GL_X11
|
||||||
methods = evas_list_append(methods, strdup("gl_x11"));
|
methods = evas_list_append(methods, strdup("gl_x11"));
|
||||||
#endif
|
#endif
|
||||||
#ifdef BUILD_ENGINE_DIRECTFB
|
#ifdef BUILD_ENGINE_DIRECTFB
|
||||||
methods = evas_list_append(methods, strdup("directfb"));
|
methods = evas_list_append(methods, strdup("directfb"));
|
||||||
#endif
|
#endif
|
||||||
#ifdef BUILD_ENGINE_FB
|
#ifdef BUILD_ENGINE_FB
|
||||||
methods = evas_list_append(methods, strdup("fb"));
|
methods = evas_list_append(methods, strdup("fb"));
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BUILD_ENGINE_BUFFER
|
||||||
|
methods = evas_list_append(methods, strdup("buffer"));
|
||||||
|
#endif
|
||||||
#ifdef BBUILD_ENGINE_SOFTWARE_WIN32_GDI
|
#ifdef BBUILD_ENGINE_SOFTWARE_WIN32_GDI
|
||||||
methods = evas_list_append(methods, strdup("software_win32_gdi"));
|
methods = evas_list_append(methods, strdup("software_win32_gdi"));
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4,6 +4,7 @@ SUBDIRS = \
|
||||||
common \
|
common \
|
||||||
software_x11 \
|
software_x11 \
|
||||||
fb \
|
fb \
|
||||||
|
buffer \
|
||||||
software_win32_gdi \
|
software_win32_gdi \
|
||||||
software_qtopia \
|
software_qtopia \
|
||||||
directfb \
|
directfb \
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
|
AUTOMAKE_OPTIONS = 1.4 foreign
|
||||||
|
|
||||||
|
# A list of all the files in the current directory which can be regenerated
|
||||||
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
|
LDFLAGS = -L/usr/local/lib
|
||||||
|
INCLUDES = @freetype_cflags@ \
|
||||||
|
-I. \
|
||||||
|
-I$(top_srcdir)/src/lib \
|
||||||
|
-I$(top_srcdir)/src/lib/include \
|
||||||
|
-I$(includedir) \
|
||||||
|
-I/usr/local/include
|
||||||
|
|
||||||
|
|
||||||
|
if BUILD_ENGINE_BUFFER
|
||||||
|
|
||||||
|
noinst_LTLIBRARIES = libevas_engine_buffer.la
|
||||||
|
libevas_engine_buffer_la_SOURCES = \
|
||||||
|
evas_engine.h \
|
||||||
|
evas_engine.c \
|
||||||
|
evas_outbuf.c
|
||||||
|
|
||||||
|
libevas_engine_buffer_la_LIBADD = \
|
||||||
|
$(LDFLAGS)
|
||||||
|
|
||||||
|
libevas_engine_buffer_la_DEPENDENCIES = \
|
||||||
|
$(top_builddir)/config.h
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
evas_engine.h \
|
||||||
|
evas_engine.c \
|
||||||
|
evas_outbuf.c
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,41 @@
|
||||||
|
#ifndef EVAS_ENGINE_H
|
||||||
|
#define EVAS_ENGINE_H
|
||||||
|
|
||||||
|
typedef struct _Outbuf Outbuf;
|
||||||
|
|
||||||
|
typedef enum _Outbuf_Depth Outbuf_Depth;
|
||||||
|
|
||||||
|
enum _Outbuf_Depth
|
||||||
|
{
|
||||||
|
OUTBUF_DEPTH_NONE,
|
||||||
|
OUTBUF_DEPTH_RGB_24BPP_888_888,
|
||||||
|
OUTBUF_DEPTH_RGB_32BPP_888_8888,
|
||||||
|
OUTBUF_DEPTH_LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _Outbuf
|
||||||
|
{
|
||||||
|
int w, h;
|
||||||
|
Outbuf_Depth depth;
|
||||||
|
|
||||||
|
void *dest;
|
||||||
|
int dest_row_bytes;
|
||||||
|
|
||||||
|
int alpha_level;
|
||||||
|
DATA32 color_key;
|
||||||
|
char use_color_key : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
/****/
|
||||||
|
|
||||||
|
void evas_buffer_outbuf_buf_init (void);
|
||||||
|
void evas_buffer_outbuf_buf_free (Outbuf *buf);
|
||||||
|
|
||||||
|
Outbuf *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);
|
||||||
|
|
||||||
|
RGBA_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);
|
||||||
|
void evas_buffer_outbuf_buf_free_region_for_update (Outbuf *buf, RGBA_Image *update);
|
||||||
|
void evas_buffer_outbuf_buf_push_updated_region (Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,125 @@
|
||||||
|
#include "evas_common.h"
|
||||||
|
#include "evas_engine.h"
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_buffer_outbuf_buf_init(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_buffer_outbuf_buf_free(Outbuf *buf)
|
||||||
|
{
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
Outbuf *
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
Outbuf *buf;
|
||||||
|
|
||||||
|
buf = calloc(1, sizeof(Outbuf));
|
||||||
|
if (!buf) return NULL;
|
||||||
|
|
||||||
|
buf->w = w;
|
||||||
|
buf->h = h;
|
||||||
|
buf->depth = depth;
|
||||||
|
|
||||||
|
buf->dest = dest;
|
||||||
|
buf->dest_row_bytes = dest_row_bytes;
|
||||||
|
|
||||||
|
buf->alpha_level = alpha_level;
|
||||||
|
buf->color_key = color_key;
|
||||||
|
buf->use_color_key = use_color_key;
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
RGBA_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)
|
||||||
|
{
|
||||||
|
RGBA_Image *im;
|
||||||
|
|
||||||
|
*cx = 0; *cy = 0; *cw = w; *ch = h;
|
||||||
|
im = evas_common_image_create(w, h);
|
||||||
|
if (im)
|
||||||
|
{
|
||||||
|
im->flags |= RGBA_IMAGE_HAS_ALPHA;
|
||||||
|
memset(im->image->data, 0, w * h * sizeof(DATA32));
|
||||||
|
}
|
||||||
|
return im;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_buffer_outbuf_buf_free_region_for_update(Outbuf *buf, RGBA_Image *update)
|
||||||
|
{
|
||||||
|
evas_common_image_free(update);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_buffer_outbuf_buf_push_updated_region(Outbuf *buf, RGBA_Image *update, int x, int y, int w, int h)
|
||||||
|
{
|
||||||
|
/* copy update image to out buf & convert */
|
||||||
|
switch (buf->depth)
|
||||||
|
{
|
||||||
|
case OUTBUF_DEPTH_RGB_24BPP_888_888:
|
||||||
|
/* copy & pack into 24bpp - if colorkey is enabled... etc. */
|
||||||
|
{
|
||||||
|
DATA8 thresh;
|
||||||
|
int xx, yy;
|
||||||
|
DATA32 colorkey;
|
||||||
|
DATA32 *src;
|
||||||
|
DATA8 *dst;
|
||||||
|
|
||||||
|
colorkey = buf->color_key;
|
||||||
|
thresh = buf->alpha_level;
|
||||||
|
if (buf->use_color_key)
|
||||||
|
{
|
||||||
|
for (yy = 0; yy < h; yy++)
|
||||||
|
{
|
||||||
|
dst = buf->dest + ((y + yy) * buf->dest_row_bytes);
|
||||||
|
src = update->image->data + (yy * update->image->w);
|
||||||
|
for (xx = 0; xx < w; xx++)
|
||||||
|
{
|
||||||
|
if (A_VAL(src) > thresh)
|
||||||
|
{
|
||||||
|
*dst++ = R_VAL(src);
|
||||||
|
*dst++ = G_VAL(src);
|
||||||
|
*dst++ = B_VAL(src);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*dst++ = R_VAL(&colorkey);
|
||||||
|
*dst++ = G_VAL(&colorkey);
|
||||||
|
*dst++ = B_VAL(&colorkey);
|
||||||
|
}
|
||||||
|
src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (yy = 0; yy < h; yy++)
|
||||||
|
{
|
||||||
|
dst = buf->dest + ((y + yy) * buf->dest_row_bytes);
|
||||||
|
src = update->image->data + (yy * update->image->w);
|
||||||
|
for (xx = 0; xx < w; xx++)
|
||||||
|
{
|
||||||
|
*dst++ = R_VAL(src);
|
||||||
|
*dst++ = G_VAL(src);
|
||||||
|
*dst++ = B_VAL(src);
|
||||||
|
src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case OUTBUF_DEPTH_RGB_32BPP_888_8888:
|
||||||
|
/* simple memcpy */
|
||||||
|
/* FIXME: write this */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,6 +5,7 @@ evas_common.h \
|
||||||
evas_engine_api_software_x11.h \
|
evas_engine_api_software_x11.h \
|
||||||
evas_engine_api_directfb.h \
|
evas_engine_api_directfb.h \
|
||||||
evas_engine_api_fb.h \
|
evas_engine_api_fb.h \
|
||||||
|
evas_engine_api_buffer.h \
|
||||||
evas_engine_api_software_qtopia.h \
|
evas_engine_api_software_qtopia.h \
|
||||||
evas_engine_api_gl_x11.h \
|
evas_engine_api_gl_x11.h \
|
||||||
evas_mmx.h \
|
evas_mmx.h \
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef EVAS_ENGINE_BUFFER_H
|
||||||
|
#define EVAS_ENGINE_BUFFER_H
|
||||||
|
|
||||||
|
extern Evas_Func evas_engine_buffer_func;
|
||||||
|
|
||||||
|
#endif
|
|
@ -10,9 +10,10 @@
|
||||||
#define RENDER_METHOD_SOFTWARE_X11 0x00000001
|
#define RENDER_METHOD_SOFTWARE_X11 0x00000001
|
||||||
#define RENDER_METHOD_DIRECTFB 0x00000002
|
#define RENDER_METHOD_DIRECTFB 0x00000002
|
||||||
#define RENDER_METHOD_FB 0x00000003
|
#define RENDER_METHOD_FB 0x00000003
|
||||||
#define RENDER_METHOD_SOFTWARE_WIN32_GDI 0x00000004
|
#define RENDER_METHOD_BUFFER 0x00000004
|
||||||
#define RENDER_METHOD_SOFTWARE_QTOPIA 0x00000005
|
#define RENDER_METHOD_SOFTWARE_WIN32_GDI 0x00000005
|
||||||
#define RENDER_METHOD_GL_X11 0x00000006
|
#define RENDER_METHOD_SOFTWARE_QTOPIA 0x00000006
|
||||||
|
#define RENDER_METHOD_GL_X11 0x00000007
|
||||||
|
|
||||||
#define RENDER_METHOD_INVALID 0x00000000
|
#define RENDER_METHOD_INVALID 0x00000000
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue