binary compatibility of libdirectfb is broken w/ this commit
Signed-off-by: André Draszik <[email protected]>
---
include/directfb.h | 17 +++
proxy/dispatcher/idirectfbsurface_dispatcher.c | 49 ++++++++
proxy/dispatcher/idirectfbsurface_dispatcher.h | 1 +
proxy/requestor/idirectfbsurface_requestor.c | 26 ++++
src/core/gfxcard.c | 148 ++++++++++++++----------
src/core/gfxcard.h | 5 +
src/display/idirectfbsurface.c | 127 +++++++++++++-------
7 files changed, 268 insertions(+), 105 deletions(-)
diff --git a/include/directfb.h b/include/directfb.h
index c08c77d..14bc5ad 100644
--- a/include/directfb.h
+++ b/include/directfb.h
@@ -4755,6 +4755,23 @@ D_DEFINE_INTERFACE( IDirectFBSurface,
IDirectFBSurface *thiz,
IDirectFBEventBuffer *buffer
);
+
+
+ /** Blitting functions **/
+ /*
+ * Blit a bunch of areas scaled from the source to the destination
+ * rectangles.
+ *
+ * <b>source_rects</b> and <b>dest_rects</b> will be modified!
+ */
+ DFBResult (*BatchStretchBlit) (
+ IDirectFBSurface *thiz,
+ IDirectFBSurface *source,
+ const DFBRectangle *source_rects,
+ const DFBRectangle *dest_rects,
+ int num
+ );
+
)
diff --git a/proxy/dispatcher/idirectfbsurface_dispatcher.c
b/proxy/dispatcher/idirectfbsurface_dispatcher.c
index e90493b..30b417c 100644
--- a/proxy/dispatcher/idirectfbsurface_dispatcher.c
+++ b/proxy/dispatcher/idirectfbsurface_dispatcher.c
@@ -594,6 +594,21 @@ IDirectFBSurface_Dispatcher_StretchBlit( IDirectFBSurface
*thiz,
}
static DFBResult
+IDirectFBSurface_Dispatcher_BatchStretchBlit( IDirectFBSurface *thiz,
+ IDirectFBSurface *source,
+ const DFBRectangle *source_rects,
+ const DFBRectangle
*destination_rects,
+ int num )
+{
+ DIRECT_INTERFACE_GET_DATA(IDirectFBSurface_Dispatcher)
+
+ if (!source || num < 1 || !source_rects || !destination_rects)
+ return DFB_INVARG;
+
+ return DFB_UNIMPLEMENTED;
+}
+
+static DFBResult
IDirectFBSurface_Dispatcher_TextureTriangles( IDirectFBSurface *thiz,
IDirectFBSurface *source,
const DFBVertex *vertices,
@@ -1173,6 +1188,36 @@ Dispatch_StretchBlit( IDirectFBSurface *thiz,
IDirectFBSurface *real,
}
static DirectResult
+Dispatch_BatchStretchBlit( IDirectFBSurface *thiz, IDirectFBSurface *real,
+ VoodooManager *manager, VoodooRequestMessage *msg )
+{
+ DirectResult ret;
+ VoodooMessageParser parser;
+ VoodooInstanceID instance;
+ unsigned int num;
+ const DFBRectangle *srects;
+ const DFBRectangle *drects;
+ void *surface;
+
+ DIRECT_INTERFACE_GET_DATA(IDirectFBSurface_Dispatcher)
+
+ VOODOO_PARSER_BEGIN( parser, msg );
+ VOODOO_PARSER_GET_ID( parser, instance );
+ VOODOO_PARSER_GET_UINT( parser, num );
+ VOODOO_PARSER_GET_DATA( parser, srects );
+ VOODOO_PARSER_GET_DATA( parser, drects );
+ VOODOO_PARSER_END( parser );
+
+ ret = voodoo_manager_lookup_local( manager, instance, NULL, &surface );
+ if (ret)
+ return ret;
+
+ real->BatchStretchBlit( real, surface, srects, drects, num );
+
+ return DFB_OK;
+}
+
+static DirectResult
Dispatch_TextureTriangles( IDirectFBSurface *thiz, IDirectFBSurface *real,
VoodooManager *manager, VoodooRequestMessage *msg )
{
@@ -2049,6 +2094,9 @@ Dispatch( void *dispatcher, void *real, VoodooManager
*manager, VoodooRequestMes
case IDIRECTFBSURFACE_METHOD_ID_StretchBlit:
return Dispatch_StretchBlit( dispatcher, real, manager, msg );
+ case IDIRECTFBSURFACE_METHOD_ID_BatchStretchBlit:
+ return Dispatch_BatchStretchBlit( dispatcher, real, manager,
msg );
+
case IDIRECTFBSURFACE_METHOD_ID_TextureTriangles:
return Dispatch_TextureTriangles( dispatcher, real, manager,
msg );
@@ -2194,6 +2242,7 @@ Construct( IDirectFBSurface *thiz,
thiz->TileBlit = IDirectFBSurface_Dispatcher_TileBlit;
thiz->BatchBlit = IDirectFBSurface_Dispatcher_BatchBlit;
thiz->StretchBlit = IDirectFBSurface_Dispatcher_StretchBlit;
+ thiz->BatchStretchBlit = IDirectFBSurface_Dispatcher_BatchStretchBlit;
thiz->TextureTriangles = IDirectFBSurface_Dispatcher_TextureTriangles;
thiz->SetDrawingFlags = IDirectFBSurface_Dispatcher_SetDrawingFlags;
diff --git a/proxy/dispatcher/idirectfbsurface_dispatcher.h
b/proxy/dispatcher/idirectfbsurface_dispatcher.h
index 5b2c7dc..bfd8784 100644
--- a/proxy/dispatcher/idirectfbsurface_dispatcher.h
+++ b/proxy/dispatcher/idirectfbsurface_dispatcher.h
@@ -89,5 +89,6 @@
#define IDIRECTFBSURFACE_METHOD_ID_BatchBlit2 58
#define IDIRECTFBSURFACE_METHOD_ID_SetRemoteInstance 59
#define IDIRECTFBSURFACE_METHOD_ID_FillTrapezoids 60
+#define IDIRECTFBSURFACE_METHOD_ID_BatchStretchBlit 61
#endif
diff --git a/proxy/requestor/idirectfbsurface_requestor.c
b/proxy/requestor/idirectfbsurface_requestor.c
index a123891..c8126f7 100644
--- a/proxy/requestor/idirectfbsurface_requestor.c
+++ b/proxy/requestor/idirectfbsurface_requestor.c
@@ -1057,6 +1057,31 @@ IDirectFBSurface_Requestor_StretchBlit( IDirectFBSurface
*thiz,
}
static DFBResult
+IDirectFBSurface_Requestor_BatchStretchBlit( IDirectFBSurface *thiz,
+ IDirectFBSurface *source,
+ const DFBRectangle *source_rects,
+ const DFBRectangle *dest_rects,
+ int num )
+{
+ IDirectFBSurface_Requestor_data *source_data;
+
+ DIRECT_INTERFACE_GET_DATA(IDirectFBSurface_Requestor)
+
+ if (!source || !source_rects || !dest_rects || num < 1)
+ return DFB_INVARG;
+
+ DIRECT_INTERFACE_GET_DATA_FROM( source, source_data,
IDirectFBSurface_Requestor );
+
+ return voodoo_manager_request( data->manager, data->instance,
+
IDIRECTFBSURFACE_METHOD_ID_BatchStretchBlit, VREQ_QUEUE, NULL,
+ VMBT_ID, source_data->instance,
+ VMBT_UINT, num,
+ VMBT_DATA, num * sizeof(DFBRectangle),
source_rects,
+ VMBT_DATA, num * sizeof(DFBRectangle),
dest_rects,
+ VMBT_NONE );
+}
+
+static DFBResult
IDirectFBSurface_Requestor_TextureTriangles( IDirectFBSurface *thiz,
IDirectFBSurface *source,
const DFBVertex *vertices,
@@ -1884,6 +1909,7 @@ Construct( IDirectFBSurface *thiz,
thiz->TileBlit = IDirectFBSurface_Requestor_TileBlit;
thiz->BatchBlit = IDirectFBSurface_Requestor_BatchBlit;
thiz->StretchBlit = IDirectFBSurface_Requestor_StretchBlit;
+ thiz->BatchStretchBlit = IDirectFBSurface_Requestor_BatchStretchBlit;
thiz->TextureTriangles = IDirectFBSurface_Requestor_TextureTriangles;
thiz->SetDrawingFlags = IDirectFBSurface_Requestor_SetDrawingFlags;
diff --git a/src/core/gfxcard.c b/src/core/gfxcard.c
index 575a367..275ec94 100644
--- a/src/core/gfxcard.c
+++ b/src/core/gfxcard.c
@@ -2802,10 +2802,11 @@ void dfb_gfxcard_tileblit( DFBRectangle *rect, int dx1,
int dy1, int dx2, int dy
dfb_state_unlock( state );
}
-void dfb_gfxcard_stretchblit( DFBRectangle *srect, DFBRectangle *drect,
- CardState *state )
+void dfb_gfxcard_batchstretchblit( DFBRectangle *srects, DFBRectangle *drects,
+ unsigned int num, CardState *state )
{
- bool hw = false;
+ int i;
+ bool need_clip, acquired = false;
DFBSurfaceBlittingFlags blittingflags = state->blittingflags;
dfb_simplify_blittingflags( &blittingflags );
@@ -2813,24 +2814,16 @@ void dfb_gfxcard_stretchblit( DFBRectangle *srect,
DFBRectangle *drect,
D_ASSERT( card != NULL );
D_ASSERT( card->shared != NULL );
D_MAGIC_ASSERT( state, CardState );
- D_ASSERT( srect != NULL );
- D_ASSERT( drect != NULL );
+ D_ASSERT( srects != NULL );
+ D_ASSERT( drects != NULL );
+ D_ASSERT( num > 0 );
- D_DEBUG_AT( Core_GraphicsOps, "%s( %d,%d - %dx%d -> %d,%d - %dx%d, %p
)\n",
- __FUNCTION__, DFB_RECTANGLE_VALS(srect),
DFB_RECTANGLE_VALS(drect), state );
-
- if (state->blittingflags & DSBLIT_ROTATE90) {
- if (srect->w == drect->h && srect->h == drect->w) {
- dfb_gfxcard_blit( srect, drect->x, drect->y, state );
- return;
- }
- }
- else {
- if (srect->w == drect->w && srect->h == drect->h) {
- dfb_gfxcard_blit( srect, drect->x, drect->y, state );
- return;
- }
- }
+ D_DEBUG_AT( Core_GraphicsOps, "%s( %p )\n", __FUNCTION__, state );
+ for (i = 0; i < num; ++i)
+ D_DEBUG_AT( Core_GraphicsOps,
+ " -> %d,%d - %dx%d -> %d,%d - %dx%d\n",
+ DFB_RECTANGLE_VALS(&srects[i]),
+ DFB_RECTANGLE_VALS(&drects[i]) );
/* The state is locked during graphics operations. */
dfb_state_lock( state );
@@ -2838,35 +2831,58 @@ void dfb_gfxcard_stretchblit( DFBRectangle *srect,
DFBRectangle *drect,
/* Signal beginning of sequence of operations if not already done. */
dfb_state_start_drawing( state, card );
- if (!(state->render_options & DSRO_MATRIX) &&
- !dfb_clip_blit_precheck( &state->clip, drect->w, drect->h,
- drect->x, drect->y ))
- {
- dfb_state_unlock( state );
- return;
- }
+ need_clip = (!D_FLAGS_IS_SET( card->caps.flags, CCF_CLIPPING )
+ && !D_FLAGS_IS_SET( card->caps.clip, DFXL_STRETCHBLIT ));
+ for (i = 0; i < num; ++i) {
+ DFBRectangle *srect = &srects[i];
+ DFBRectangle *drect = &drects[i];
- if (dfb_gfxcard_state_check( state, DFXL_STRETCHBLIT ) &&
- dfb_gfxcard_state_acquire( state, DFXL_STRETCHBLIT ))
- {
- if (!D_FLAGS_IS_SET( card->caps.flags, CCF_CLIPPING ) &&
- !D_FLAGS_IS_SET( card->caps.clip, DFXL_STRETCHBLIT ))
+ if (!acquired) {
+ if (!dfb_gfxcard_state_check( state, DFXL_STRETCHBLIT )
+ || !dfb_gfxcard_state_acquire( state, DFXL_STRETCHBLIT ))
+ break;
+
+ acquired = true;
+ }
+
+ if ((srect->w == drect->w && srect->h == drect->h)
+ || ((state->blittingflags & DSBLIT_ROTATE90)
+ && (srect->w == drect->h && srect->h == drect->w))) {
+ dfb_gfxcard_state_release( state );
+ acquired = false;
+ dfb_gfxcard_blit_locked( srect, drect->x, drect->y, state );
+ continue;
+ }
+
+ if (!(state->render_options & DSRO_MATRIX) &&
+ !dfb_clip_blit_precheck( &state->clip, drect->w, drect->h,
+ drect->x, drect->y ))
+ {
+ continue;
+ }
+
+ if (need_clip)
dfb_clip_stretchblit( &state->clip, srect, drect );
- hw = card->funcs.StretchBlit( card->driver_data, card->device_data,
srect, drect );
+ if (!card->funcs.StretchBlit( card->driver_data, card->device_data,
+ srect, drect ))
+ break;
+ }
+ if (acquired)
dfb_gfxcard_state_release( state );
- }
- if (!hw) {
- if (state->render_options & DSRO_MATRIX) {
- int x1, y1, x2, y2;
+ if (i < num) {
+ if ((state->render_options & DSRO_MATRIX) &&
+ (state->matrix[0] < 0 || state->matrix[1] != 0 ||
+ state->matrix[3] != 0 || state->matrix[4] < 0 ||
+ state->matrix[6] != 0 || state->matrix[7] != 0))
+ {
+ if (gAcquire( state, DFXL_TEXTRIANGLES )) {
+ for (; i < num; ++i) {
+ DFBRectangle *srect = &srects[i];
+ DFBRectangle *drect = &drects[i];
- if (state->matrix[0] < 0 || state->matrix[1] != 0 ||
- state->matrix[3] != 0 || state->matrix[4] < 0 ||
- state->matrix[6] != 0 || state->matrix[7] != 0)
- {
- if (gAcquire( state, DFXL_TEXTRIANGLES )) {
GenefxVertexAffine v[4];
v[0].x = drect->x;
@@ -2892,31 +2908,33 @@ void dfb_gfxcard_stretchblit( DFBRectangle *srect,
DFBRectangle *drect,
GenefxVertexAffine_Transform( v, 4, state->matrix,
state->affine_matrix );
Genefx_TextureTrianglesAffine( state, v, 4, DTTF_FAN,
&state->clip );
-
- gRelease( state );
}
-
- dfb_state_unlock( state );
- return;
+ gRelease( state );
}
+ }
+ else if (gAcquire( state, DFXL_STRETCHBLIT )) {
+ for (; i < num; ++i) {
+ DFBRectangle *srect = &srects[i];
+ DFBRectangle *drect = &drects[i];
- x1 = drect->x; y1 = drect->y;
- x2 = x1+drect->w; y2 = y1+drect->h;
- DFB_TRANSFORM(x1, y1, state->matrix, state->affine_matrix);
- DFB_TRANSFORM(x2, y2, state->matrix, state->affine_matrix);
- drect->x = x1; drect->y = y1;
- drect->w = x2-x1; drect->h = y2-y1;
+ if (state->render_options & DSRO_MATRIX) {
+ int x1, y1, x2, y2;
- if (!dfb_clip_blit_precheck( &state->clip,
- drect->w, drect->h, drect->x,
drect->y )) {
- dfb_state_unlock( state );
- return;
+ x1 = drect->x; y1 = drect->y;
+ x2 = x1+drect->w; y2 = y1+drect->h;
+ DFB_TRANSFORM(x1, y1, state->matrix,
state->affine_matrix);
+ DFB_TRANSFORM(x2, y2, state->matrix,
state->affine_matrix);
+ drect->x = x1; drect->y = y1;
+ drect->w = x2-x1; drect->h = y2-y1;
+ }
+
+ if (!dfb_clip_blit_precheck( &state->clip,
+ drect->w, drect->h, drect->x,
drect->y ))
+ continue;
+
+ gStretchBlit( state, srect, drect );
}
- }
- if (gAcquire( state, DFXL_STRETCHBLIT )) {
- /* Clipping is performed in the following function. */
- gStretchBlit( state, srect, drect );
gRelease( state );
}
}
@@ -2924,6 +2942,14 @@ void dfb_gfxcard_stretchblit( DFBRectangle *srect,
DFBRectangle *drect,
dfb_state_unlock( state );
}
+void dfb_gfxcard_stretchblit( DFBRectangle *srect, DFBRectangle *drect,
+ CardState *state )
+{
+ D_ONCE ("dfb_gfxcard_batchstretchblit() should be used!");
+
+ dfb_gfxcard_batchstretchblit( srect, drect, 1, state);
+}
+
void dfb_gfxcard_texture_triangles( DFBVertex *vertices, int num,
DFBTriangleFormation formation,
CardState *state )
diff --git a/src/core/gfxcard.h b/src/core/gfxcard.h
index 1cb391d..a1a661b 100644
--- a/src/core/gfxcard.h
+++ b/src/core/gfxcard.h
@@ -429,6 +429,11 @@ void dfb_gfxcard_stretchblit ( DFBRectangle
*srect,
DFBRectangle *drect,
CardState *state );
+void dfb_gfxcard_batchstretchblit ( DFBRectangle *srects,
+ DFBRectangle *drects,
+ unsigned int num,
+ CardState *state );
+
void dfb_gfxcard_texture_triangles ( DFBVertex *vertices,
int num,
DFBTriangleFormation formation,
diff --git a/src/display/idirectfbsurface.c b/src/display/idirectfbsurface.c
index 77fb801..eaf9845 100644
--- a/src/display/idirectfbsurface.c
+++ b/src/display/idirectfbsurface.c
@@ -2138,17 +2138,19 @@ IDirectFBSurface_BatchBlit2( IDirectFBSurface *thiz,
}
static DFBResult
-IDirectFBSurface_StretchBlit( IDirectFBSurface *thiz,
- IDirectFBSurface *source,
- const DFBRectangle *source_rect,
- const DFBRectangle *destination_rect )
-{
- DFBRectangle srect, drect;
+IDirectFBSurface_BatchStretchBlit( IDirectFBSurface *thiz,
+ IDirectFBSurface *source,
+ const DFBRectangle *source_rects,
+ const DFBRectangle *dest_rects,
+ int num )
+{
+ int i, dx, dy, sx, sy;
+ DFBRectangle *srects, *drects;
IDirectFBSurface_data *src_data;
DIRECT_INTERFACE_GET_DATA(IDirectFBSurface)
- D_DEBUG_AT( Surface, "%s( %p )\n", __FUNCTION__, thiz );
+ D_DEBUG_AT( Surface, "%s( %p, %d )\n", __FUNCTION__, thiz, num );
if (!data->surface)
return DFB_DESTROYED;
@@ -2160,7 +2162,7 @@ IDirectFBSurface_StretchBlit( IDirectFBSurface *thiz,
if (data->locked)
return DFB_LOCKED;
- if (!source)
+ if (!source || !source_rects || !dest_rects || num < 1)
return DFB_INVARG;
@@ -2169,53 +2171,59 @@ IDirectFBSurface_StretchBlit( IDirectFBSurface *thiz,
if (!src_data->area.current.w || !src_data->area.current.h)
return DFB_INVAREA;
+ dx = data->area.wanted.x;
+ dy = data->area.wanted.y;
- /* do destination rectangle */
- if (destination_rect) {
- if (destination_rect->w < 1 || destination_rect->h < 1)
- return DFB_INVARG;
+ sx = src_data->area.wanted.x;
+ sy = src_data->area.wanted.y;
- drect = *destination_rect;
+ srects = alloca( sizeof(DFBRectangle) * num );
+ drects = alloca( sizeof(DFBRectangle) * num );
- drect.x += data->area.wanted.x;
- drect.y += data->area.wanted.y;
- }
- else
- drect = data->area.wanted;
+ direct_memcpy( srects, source_rects, sizeof(DFBRectangle) * num );
+ direct_memcpy( drects, dest_rects, sizeof(DFBRectangle) * num );
- /* do source rectangle */
- if (source_rect) {
- if (source_rect->w < 1 || source_rect->h < 1)
- return DFB_INVARG;
+ for (i=0; i<num; ++i) {
+ DFBRectangle orig_src;
- srect = *source_rect;
+ if (drects[i].w < 1 || drects[i].h < 1) {
+ drects[i].w = 0;
+ drects[i].h = 0;
+ continue;
+ }
+ drects[i].x += dx;
+ drects[i].y += dy;
- srect.x += src_data->area.wanted.x;
- srect.y += src_data->area.wanted.y;
- }
- else
- srect = src_data->area.wanted;
+ if (srects[i].w < 1 || srects[i].h < 1)
+ return DFB_INVARG;
+ srects[i].x += sx;
+ srects[i].y += sy;
+ /* clipping of the source rectangle must be applied to the
destination */
+ orig_src = srects[i];
- /* clipping of the source rectangle must be applied to the destination */
- {
- DFBRectangle orig_src = srect;
+ if (!dfb_rectangle_intersect( &srects[i], &src_data->area.current ))
{
+ srects[i].w = srects[i].h = 0;
+ drects[i].w = drects[i].h = 0;
+ continue;
+ }
- if (!dfb_rectangle_intersect( &srect, &src_data->area.current ))
- return DFB_INVAREA;
+ if (srects[i].x != orig_src.x)
+ drects[i].x += (int)( (srects[i].x - orig_src.x) *
+ (drects[i].w / (float)orig_src.w) + 0.5f);
- if (srect.x != orig_src.x)
- drect.x += (int)( (srect.x - orig_src.x) *
- (drect.w / (float)orig_src.w) + 0.5f);
+ if (srects[i].y != orig_src.y)
+ drects[i].y += (int)( (srects[i].y - orig_src.y) *
+ (drects[i].h / (float)orig_src.h) + 0.5f);
- if (srect.y != orig_src.y)
- drect.y += (int)( (srect.y - orig_src.y) *
- (drect.h / (float)orig_src.h) + 0.5f);
+ if (srects[i].w != orig_src.w)
+ drects[i].w = D_ICEIL(drects[i].w * (srects[i].w /
(float)orig_src.w));
+ if (srects[i].h != orig_src.h)
+ drects[i].h = D_ICEIL(drects[i].h * (srects[i].h /
(float)orig_src.h));
- if (srect.w != orig_src.w)
- drect.w = D_ICEIL(drect.w * (srect.w / (float)orig_src.w));
- if (srect.h != orig_src.h)
- drect.h = D_ICEIL(drect.h * (srect.h / (float)orig_src.h));
+ D_DEBUG_AT( Surface, " -> [%2d] %4d,%4d-%4dx%4d <-
%4d,%4d-%4dx%4d\n",
+ i, drects[i].x, drects[i].y, drects[i].w, drects[i].h,
+ srects[i].x, srects[i].y, srects[i].w, srects[i].h );
}
dfb_state_set_source( &data->state, src_data->surface );
@@ -2224,11 +2232,41 @@ IDirectFBSurface_StretchBlit( IDirectFBSurface *thiz,
if (data->state.blittingflags & DSBLIT_SRC_COLORKEY)
dfb_state_set_src_colorkey( &data->state, src_data->src_key.value );
- CoreGraphicsStateClient_StretchBlit( &data->state_client, &srect, &drect,
1 );
+ CoreGraphicsStateClient_StretchBlit( &data->state_client, srects, drects,
num );
return DFB_OK;
}
+static DFBResult
+IDirectFBSurface_StretchBlit( IDirectFBSurface *thiz,
+ IDirectFBSurface *source,
+ const DFBRectangle *source_rect,
+ const DFBRectangle *destination_rect )
+{
+ DFBRectangle srect, drect;
+
+ if (!source)
+ return DFB_INVARG;
+
+ if (destination_rect)
+ drect = *destination_rect;
+ else {
+ DIRECT_INTERFACE_GET_DATA(IDirectFBSurface)
+
+ drect = (DFBRectangle) { 0, 0, data->area.wanted.w,
data->area.wanted.h };
+ }
+
+ if (source_rect)
+ srect = *source_rect;
+ else {
+ IDirectFBSurface_data *sd = (IDirectFBSurface_data*)source->priv;
+
+ srect = (DFBRectangle) { 0, 0, sd->area.wanted.w, sd->area.wanted.h
};
+ }
+
+ return IDirectFBSurface_BatchStretchBlit( thiz, source, &srect, &drect, 1
);
+}
+
#define SET_VERTEX(v,X,Y,Z,W,S,T) \
do { \
(v)->x = X; \
@@ -3367,6 +3405,7 @@ DFBResult IDirectFBSurface_Construct( IDirectFBSurface
*thiz,
thiz->BatchBlit = IDirectFBSurface_BatchBlit;
thiz->BatchBlit2 = IDirectFBSurface_BatchBlit2;
thiz->StretchBlit = IDirectFBSurface_StretchBlit;
+ thiz->BatchStretchBlit = IDirectFBSurface_BatchStretchBlit;
thiz->TextureTriangles = IDirectFBSurface_TextureTriangles;
thiz->SetDrawingFlags = IDirectFBSurface_SetDrawingFlags;
--
1.7.5.4
_______________________________________________
directfb-dev mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev