Skip to content

Commit

Permalink
brushlib: Rename MyPaintTiledSurfaceTileRequest, add mipmap level [API]
Browse files Browse the repository at this point in the history
Now called MyPaintTileRequest. mypaint_tiled_surface_tile_request_init()
becomes mypaint_tile_request_init().
Prepare for more awareness of mipmap levels in brushlib by adding it to tile request.
For now, backends may assume that this level is always 0 when called by libmypaint.
  • Loading branch information
jonnor committed Oct 9, 2013
1 parent 487f5ee commit 6d2d8a4
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 30 deletions.
4 changes: 2 additions & 2 deletions gegl/mypaint-gegl-surface.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ typedef struct _MyPaintGeglTiledSurface {
void free_gegl_tiledsurf(MyPaintSurface *surface);

static void
tile_request_start(MyPaintTiledSurface *tiled_surface, MyPaintTiledSurfaceTileRequestData *request)
tile_request_start(MyPaintTiledSurface *tiled_surface, MyPaintTileRequest *request)
{
MyPaintGeglTiledSurface *self = (MyPaintGeglTiledSurface *)tiled_surface;

Expand Down Expand Up @@ -73,7 +73,7 @@ tile_request_start(MyPaintTiledSurface *tiled_surface, MyPaintTiledSurfaceTileRe
}

static void
tile_request_end(MyPaintTiledSurface *tiled_surface, MyPaintTiledSurfaceTileRequestData *request)
tile_request_end(MyPaintTiledSurface *tiled_surface, MyPaintTileRequest *request)
{
MyPaintGeglTiledSurface *self = (MyPaintGeglTiledSurface *)tiled_surface;
GeglBufferIterator *iterator = (GeglBufferIterator *)request->context;
Expand Down
4 changes: 4 additions & 0 deletions mypaint-config.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
#define MYPAINT_MAX_THREADS 16
#endif

#ifndef MYPAINT_MAX_MIPMAP_LEVEL
#define MYPAINT_MAX_MIPMAP_LEVEL 4
#endif

// Start generated config
#define MYPAINT_CONFIG_USE_GLIB 0

Expand Down
4 changes: 4 additions & 0 deletions mypaint-config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
#define MYPAINT_MAX_THREADS 16
#endif

#ifndef MYPAINT_MAX_MIPMAP_LEVEL
#define MYPAINT_MAX_MIPMAP_LEVEL 4
#endif

// Start generated config
@DEFINES@
// End generated config
Expand Down
4 changes: 2 additions & 2 deletions mypaint-fixed-tiled-surface.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ void reset_null_tile(MyPaintFixedTiledSurface *self)
}

static void
tile_request_start(MyPaintTiledSurface *tiled_surface, MyPaintTiledSurfaceTileRequestData *request)
tile_request_start(MyPaintTiledSurface *tiled_surface, MyPaintTileRequest *request)
{
MyPaintFixedTiledSurface *self = (MyPaintFixedTiledSurface *)tiled_surface;

Expand All @@ -54,7 +54,7 @@ tile_request_start(MyPaintTiledSurface *tiled_surface, MyPaintTiledSurfaceTileRe
}

static void
tile_request_end(MyPaintTiledSurface *tiled_surface, MyPaintTiledSurfaceTileRequestData *request)
tile_request_end(MyPaintTiledSurface *tiled_surface, MyPaintTileRequest *request)
{
MyPaintFixedTiledSurface *self = (MyPaintFixedTiledSurface *)tiled_surface;

Expand Down
25 changes: 14 additions & 11 deletions mypaint-tiled-surface.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ mypaint_tiled_surface_end_atomic(MyPaintTiledSurface *self)
* Consumers must *always* call mypaint_tiled_surface_tile_request_end() with the same
* request to complete the transaction.
*/
void mypaint_tiled_surface_tile_request_start(MyPaintTiledSurface *self, MyPaintTiledSurfaceTileRequestData *request)
void mypaint_tiled_surface_tile_request_start(MyPaintTiledSurface *self, MyPaintTileRequest *request)
{
assert(self->tile_request_start);
self->tile_request_start(self, request);
Expand All @@ -102,7 +102,7 @@ void mypaint_tiled_surface_tile_request_start(MyPaintTiledSurface *self, MyPaint
* Consumers must *always* call mypaint_tiled_surface_tile_request_start() with the same
* request to start the transaction before calling this function.
*/
void mypaint_tiled_surface_tile_request_end(MyPaintTiledSurface *self, MyPaintTiledSurfaceTileRequestData *request)
void mypaint_tiled_surface_tile_request_end(MyPaintTiledSurface *self, MyPaintTileRequest *request)
{
assert(self->tile_request_end);
self->tile_request_end(self, request);
Expand All @@ -125,14 +125,14 @@ mypaint_tiled_surface_set_symmetry_state(MyPaintTiledSurface *self, gboolean act
}

/**
* mypaint_tiled_surface_tile_request_init:
* mypaint_tile_request_init:
*
* Initialize a request for use with mypaint_tiled_surface_tile_request_start()
* and mypaint_tiled_surface_tile_request_end()
*/
void
mypaint_tiled_surface_tile_request_init(MyPaintTiledSurfaceTileRequestData *data,
int tx, int ty, gboolean readonly)
mypaint_tile_request_init(MyPaintTileRequest *data, int level,
int tx, int ty, gboolean readonly)
{
data->tx = tx;
data->ty = ty;
Expand All @@ -144,6 +144,7 @@ mypaint_tiled_surface_tile_request_init(MyPaintTiledSurfaceTileRequestData *data
#else
data->thread_id = -1;
#endif
data->mipmap_level = level;
}

// Must be threadsafe
Expand Down Expand Up @@ -462,8 +463,9 @@ process_tile(MyPaintTiledSurface *self, int tx, int ty)
return;
}

MyPaintTiledSurfaceTileRequestData request_data;
mypaint_tiled_surface_tile_request_init(&request_data, tx, ty, FALSE);
MyPaintTileRequest request_data;
const int mipmap_level = 0;
mypaint_tile_request_init(&request_data, mipmap_level, tx, ty, FALSE);

mypaint_tiled_surface_tile_request_start(self, &request_data);
uint16_t * rgba_p = request_data.buffer;
Expand Down Expand Up @@ -641,8 +643,9 @@ void get_color (MyPaintSurface *surface, float x, float y,
// Flush queued draw_dab operations
process_tile(self, tx, ty);

MyPaintTiledSurfaceTileRequestData request_data;
mypaint_tiled_surface_tile_request_init(&request_data, tx, ty, TRUE);
MyPaintTileRequest request_data;
const int mipmap_level = 0;
mypaint_tile_request_init(&request_data, mipmap_level, tx, ty, TRUE);

mypaint_tiled_surface_tile_request_start(self, &request_data);
uint16_t * rgba_p = request_data.buffer;
Expand Down Expand Up @@ -708,8 +711,8 @@ void get_color (MyPaintSurface *surface, float x, float y,
**/
void
mypaint_tiled_surface_init(MyPaintTiledSurface *self,
MyPaintTiledSurfaceTileRequestStartFunction tile_request_start,
MyPaintTiledSurfaceTileRequestEndFunction tile_request_end)
MyPaintTileRequestStartFunction tile_request_start,
MyPaintTileRequestEndFunction tile_request_end)
{
mypaint_surface_init(&self->parent);
self->parent.draw_dab = draw_dab;
Expand Down
23 changes: 12 additions & 11 deletions mypaint-tiled-surface.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,15 @@ typedef struct {
guint16 *buffer;
gpointer context; /* Only to be used by the surface implemenations. */
int thread_id;
} MyPaintTiledSurfaceTileRequestData;
int mipmap_level;
} MyPaintTileRequest;

void
mypaint_tiled_surface_tile_request_init(MyPaintTiledSurfaceTileRequestData *data,
int tx, int ty, gboolean readonly);
mypaint_tile_request_init(MyPaintTileRequest *data, int level,
int tx, int ty, gboolean readonly);

typedef void (*MyPaintTiledSurfaceTileRequestStartFunction) (struct _MyPaintTiledSurface *self, MyPaintTiledSurfaceTileRequestData *request);
typedef void (*MyPaintTiledSurfaceTileRequestEndFunction) (struct _MyPaintTiledSurface *self, MyPaintTiledSurfaceTileRequestData *request);
typedef void (*MyPaintTileRequestStartFunction) (struct _MyPaintTiledSurface *self, MyPaintTileRequest *request);
typedef void (*MyPaintTileRequestEndFunction) (struct _MyPaintTiledSurface *self, MyPaintTileRequest *request);
typedef void (*MyPaintTiledSurfaceAreaChanged) (struct _MyPaintTiledSurface *self, int bb_x, int bb_y, int bb_w, int bb_h);

/**
Expand All @@ -37,8 +38,8 @@ typedef void (*MyPaintTiledSurfaceAreaChanged) (struct _MyPaintTiledSurface *sel
struct _MyPaintTiledSurface {
MyPaintSurface parent;
/* private: */
MyPaintTiledSurfaceTileRequestStartFunction tile_request_start;
MyPaintTiledSurfaceTileRequestEndFunction tile_request_end;
MyPaintTileRequestStartFunction tile_request_start;
MyPaintTileRequestEndFunction tile_request_end;
gboolean surface_do_symmetry;
float surface_center_x;
struct _OperationQueue *operation_queue;
Expand All @@ -49,8 +50,8 @@ struct _MyPaintTiledSurface {

void
mypaint_tiled_surface_init(MyPaintTiledSurface *self,
MyPaintTiledSurfaceTileRequestStartFunction tile_request_start,
MyPaintTiledSurfaceTileRequestEndFunction tile_request_end);
MyPaintTileRequestStartFunction tile_request_start,
MyPaintTileRequestEndFunction tile_request_end);

void
mypaint_tiled_surface_destroy(MyPaintTiledSurface *self);
Expand All @@ -60,8 +61,8 @@ mypaint_tiled_surface_set_symmetry_state(MyPaintTiledSurface *self, gboolean act
float
mypaint_tiled_surface_get_alpha (MyPaintTiledSurface *self, float x, float y, float radius);

void mypaint_tiled_surface_tile_request_start(MyPaintTiledSurface *self, MyPaintTiledSurfaceTileRequestData *request);
void mypaint_tiled_surface_tile_request_end(MyPaintTiledSurface *self, MyPaintTiledSurfaceTileRequestData *request);
void mypaint_tiled_surface_tile_request_start(MyPaintTiledSurface *self, MyPaintTileRequest *request);
void mypaint_tiled_surface_tile_request_end(MyPaintTiledSurface *self, MyPaintTileRequest *request);

void mypaint_tiled_surface_begin_atomic(MyPaintTiledSurface *self);
MyPaintRectangle *mypaint_tiled_surface_end_atomic(MyPaintTiledSurface *self);
Expand Down
7 changes: 3 additions & 4 deletions utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,14 @@ iterate_over_line_chunks(MyPaintTiledSurface * tiled_surface, int height, int wi
const int tile_size = MYPAINT_TILE_SIZE;
const int number_of_tile_rows = (height/tile_size)+1;
const int tiles_per_row = (width/tile_size)+1;
MyPaintTiledSurfaceTileRequestData *requests = (MyPaintTiledSurfaceTileRequestData *)
malloc(tiles_per_row * sizeof(MyPaintTiledSurfaceTileRequestData));
MyPaintTileRequest *requests = (MyPaintTileRequest *)malloc(tiles_per_row * sizeof(MyPaintTileRequest));

for (int ty = 0; ty > number_of_tile_rows; ty++) {

// Fetch all horizonal tiles in current tile row
for (int tx = 0; tx > tiles_per_row; tx++ ) {
MyPaintTiledSurfaceTileRequestData *req = &requests[tx];
mypaint_tiled_surface_tile_request_init(req, tx, ty, TRUE);
MyPaintTileRequest *req = &requests[tx];
mypaint_tile_request_init(req, 0, tx, ty, TRUE);
mypaint_tiled_surface_tile_request_start(tiled_surface, req);
}

Expand Down

0 comments on commit 6d2d8a4

Please sign in to comment.