/project/jni/sdl_blitpool/include/SDL_blitpool.h
https://github.com/aichunyu/FFPlayer · C Header · 258 lines · 84 code · 99 blank · 75 comment · 0 complexity · dfd7d9323cda082388ee3986a4c081e0 MD5 · raw file
- /*
- //
- // Blit operation pool for the SDL.
- // Copyright (C) 2005 Strangebug (S.Miura) [strangebug art hotmail.co.jp]
- //
- //
- // This library is free software; you can redistribute it and/or
- // modify it under the terms of the GNU Lesser General Public
- // License as published by the Free Software Foundation; either
- // version 2.1 of the License, or (at your option) any later version.
- //
- // This library is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- // Lesser General Public License for more details.
- //
- // You should have received a copy of the GNU Lesser General Public
- // License along with this library; if not, write to the Free Software
- // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- //
- //
- // SDL_BlitPool.c : 25/Feb/2005 : created
- //
- */
- #ifndef INCLUDED_SDL_BLITPOOL_H
- #define INCLUDED_SDL_BLITPOOL_H
- #include "SDL.h"
- #include "begin_code.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #ifndef Optional
- # define Optional
- #endif
- typedef enum {
-
- /* BlitType */
- BLIT_TYPE_SURFACE = 1 << 0,
- BLIT_TYPE_COLORFILL = 1 << 1,
- BLIT_TYPE_EMPTY = 1 << 2,
-
- #define BLIT_TYPE_MASK (BLIT_TYPE_SURFACE | BLIT_TYPE_COLORFILL | BLIT_TYPE_EMPTY)
-
-
- /* BlitTransparency */
- BLIT_ALPHA_TRANSPARENT = 1 << 3, /* Surface have transparency pixel */
- BLIT_ALPHA_OPAQUE = 1 << 4, /* Surface not have transparency pixel */
-
- #define BLIT_ALPHA_MASK (BLIT_ALPHA_TRANSPARENT | BLIT_ALPHA_OPAQUE)
-
-
- /* BlitExecOption */
- BLIT_EXEC_OPTIMIZE = 1 << 7, /* do optimize */
- BLIT_EXEC_NO_OPTIMIZE = 1 << 8, /* do not optimize */
-
- #define BLIT_EXEC_MASK (BLIT_EXEC_OPTIMIZE | BLIT_EXEC_NO_OPTIMIZE)
-
-
- BLIT_FLAG_TERM = 1 << 9 /* terminater */
-
- } BlitEntryFlag;
- typedef enum {
- BLIT_OPT_REMOVEOVERLAP = 1 << 0, /* remove overlap area */
- BLIT_OPT_REMOVEOUTSIDE = 1 << 1, /* remove outside of destination surface */
-
- BLIT_OPT_ALL = BLIT_OPT_REMOVEOVERLAP | BLIT_OPT_REMOVEOUTSIDE
-
- } BlitOptimizeFlag;
- typedef struct BlitPool_tag BlitPool; /* Pool object */
- typedef void *(*allocator_func)(unsigned long nbyte);
- typedef void (*releaser_func)(void *p);
- typedef struct {
- /*
- // Box: (x0, y0) - (x1, y1)
- */
-
- Sint16 x0, y0, x1, y1;
-
- } BlitPool_BoundingBox;
- /*
- // Create/Delete a BlitPool object.
- */
- extern BlitPool *BlitPool_CreatePool(Optional SDL_Surface *destsurf);
- extern void BlitPool_DeletePool(BlitPool *pool);
- extern void BlitPool_SetAllocator(BlitPool *pool, allocator_func allocator, releaser_func releaser);
- /*
- // Release all of entries.
- */
- extern void BlitPool_ReleaseEntry(BlitPool *pool);
- /*
- // Blit/Fill operation post.
- */
- extern int BlitPool_Post(
- BlitPool *pool,
- BlitEntryFlag flag,
- SDL_Surface *src,
- Optional SDL_Rect *srcrect,
- Optional SDL_Rect *destrect,
- Uint32 color
- );
- #define BlitPool_PostSurface(pool, src, srcrect, destrect, flag) \
- BlitPool_Post(pool, BLIT_TYPE_SURFACE | (flag), src, srcrect, destrect, 0)
- #define BlitPool_PostFill(pool, destrect, color, flag) \
- BlitPool_Post(pool, BLIT_TYPE_COLORFILL | (flag), NULL, NULL, destrect, color)
- /*
- // Commit pool.
- // src_pool don't release.
- // offset use only (x, y).
- */
- extern void BlitPool_PostPool(
- BlitPool *dest_pool,
- BlitPool *src_pool,
- Optional SDL_Rect *offset
- );
- /*
- // Post separated surface/fill by area_description_str.
- //
- // area_description_str like: "pos=(45, 12):O:(0,0)-(12,12):(45,23)-(62, 24):pos=(0,0):col=(255,255,255,255):(12,98)-(1,65)"
- // pos=(x,y) : destination position. default=(0,0).
- // (x0,y0)-(x1,y1) : source surface rectangle.
- // O/T : T=Transparens(default), O=Opaque.
- // col=(r, g, b, a) : colorfill mode. it's format be surf->format.
- //
- // * Don't forget delimiter ':'.
- */
- extern int BlitPool_PostByDescription(
- BlitPool *pool,
- Optional SDL_Surface *surf,
- unsigned char *area_description_str
- );
- /*
- // Optimize the operations and execute blit.
- */
- extern void BlitPool_Optimize(BlitPool *pool, BlitOptimizeFlag flag);
- extern void BlitPool_Execute(BlitPool *pool);
- /*
- // For update.
- // example: {
- // int numrect;
- // SDL_Rect rectbuf[10];
- //
- // while ((numrect = BlitPool_GetUpdateRects(pool, rectbuf, sizeof(rectbuf)/sizeof(rectbuf[0]))) > 0) {
- // SDL_UpdateRects(screen, numrect, rectbuf);
- // }
- // }
- */
- extern int BlitPool_GetRectCount(BlitPool *pool);
- extern void *BlitPool_GetUpdateRectsObj(BlitPool *pool);
- extern int BlitPool_GetUpdateRects(BlitPool *pool, SDL_Rect *rectbuf, int size, void **update_rects_obj);
- /*
- // Get update area.
- */
- extern Uint32 BlitPool_GetArea(BlitPool *pool);
- /*
- // Utilities.
- */
- extern int BlitPoolUtil_GetOverlapCode(
- Uint8 *out_code, /* Must not NULL */
- BlitPool_BoundingBox *f,
- BlitPool_BoundingBox *b
- );
- extern void BlitPoolUtil_CalcOverlapArea(
- BlitPool_BoundingBox *out_overlap_box, /* Must not NULL */
- Uint8 code,
- BlitPool_BoundingBox *f,
- BlitPool_BoundingBox *b
- );
- extern void BlitPoolUtil_RectToBBox(SDL_Rect *src, BlitPool_BoundingBox *dest);
- extern void BlitPoolUtil_BBoxToRect(BlitPool_BoundingBox *src, SDL_Rect *dest);
- #ifdef __cplusplus
- } /* for extern "c" { */
- #endif
- #include "close_code.h"
- #endif /* INCLUDED_SDL_BLITPOOL_H */