- Warning:
- This is a very low level tool, in most situations (for example if you're using evas) you won't need this.
Basic usage
Eina_Tiler is a tool to facilitate calculations of which areas are damaged and thus need to be re-rendered. The basic usage of Eina_Tiler is to give it the size of your canvas and a set of rectangular areas that need re-rendering, from that and using heuristics it'll tell you an efficient way to re-render in the form of a set of non-overlapping rectangles that covers the whole area that needs re-rendering.
The following is pseudo-code showing some simple use of Eina_Tiler:
- See also:
- eina_tiler_new()
-
eina_tiler_rect_add()
-
eina_tiler_iterator_new()
- Warning:
- There are no guarantees that this will be the most efficient way to re-render for any particular case.
Grid Slicer
Grid slicer and Eina_Tiler are usually used together, that is however not necessary, they can be used independently. Grid slicer provides an easy API to divide an area in tiles which is useful in certain applications to divide the area that will be rendered into tiles. It's customary to, then create one Eina_Tiler for each tile.
The following is pseudo-code showing a very simplified use of grid slicer together with Eina_Tiler:
itr = eina_tile_grid_slicer_iterator_new(0, 0, MY_CANVAS_WIDTH, MY_CANVAS_HEIGHT, TILE_WIDTH, TILE_HEIGHT);
EINA_ITERATOR_FOREACH(itr, grid_info)
{
tiler = eina_tiler_new(grid_info->rect.w, grid_info->rect.w);
EINA_LIST_FOREACH(list_of_areas_that_need_re_rendering_in_this_tile, l, rect)
eina_tiler_add(tiler, rect);
itr = eina_tiler_iterator_new(tiler);
EINA_ITERATOR_FOREACH(itr, rect)
my_function_that_repaints_areas_of_the_canvas(rect);
}
- See also:
- eina_tiler_new()
-
eina_tiler_rect_add()
-
eina_tile_grid_slicer_setup()
-
eina_tile_grid_slicer_next()
-
eina_tile_grid_slicer_iterator_new()
Functions |
Eina_Tiler * | eina_tiler_new (int w, int h) |
| Creates a new tiler with w width and h height.
|
void | eina_tiler_free (Eina_Tiler *t) |
| Frees a tiler.
|
void | eina_tiler_tile_size_set (Eina_Tiler *t, int w, int h) |
| Sets the size of tiles for a tiler.
|
void | eina_tiler_area_size_set (Eina_Tiler *t, int w, int h) |
| Changes the size of the area covered by the tiler.
|
void | eina_tiler_area_size_get (const Eina_Tiler *t, int *w, int *h) |
| Gets the size of the area covered by the tiler.
|
void | eina_tiler_strict_set (Eina_Tiler *t, Eina_Bool strict) |
| Defines if we need to follow a strict grid of tile or a loose one.
|
Eina_Bool | eina_tiler_empty (const Eina_Tiler *t) |
| Tells if a tiler is empty or not.
|
Eina_Bool | eina_tiler_rect_add (Eina_Tiler *t, const Eina_Rectangle *r) |
| Adds a rectangle to a tiler.
|
void | eina_tiler_rect_del (Eina_Tiler *t, const Eina_Rectangle *r) |
| Removes a rectangle from a tiler.
|
void | eina_tiler_clear (Eina_Tiler *t) |
| Removes all rectangles from tiles.
|
Eina_Iterator * | eina_tiler_iterator_new (const Eina_Tiler *t) |
| Creates a iterator to access the tilers calculated rectangles.
|
Eina_Iterator * | eina_tile_grid_slicer_iterator_new (int x, int y, int w, int h, int tile_w, int tile_h) |
| Creates a new Eina_Iterator that iterates over a list of tiles.
|
Eina_Bool | eina_tiler_union (Eina_Tiler *dst, Eina_Tiler *src) |
| Gets the union of two tilers.
|
Eina_Bool | eina_tiler_subtract (Eina_Tiler *dst, Eina_Tiler *src) |
| Subtracts two tilers.
|
Eina_Tiler * | eina_tiler_intersection (Eina_Tiler *t1, Eina_Tiler *t2) |
| Gets the intersection of two tilers.
|
Eina_Bool | eina_tiler_equal (const Eina_Tiler *t1, const Eina_Tiler *t2) |
| Gets whether two tilers are equal in rects or not.
|
static Eina_Bool | eina_tile_grid_slicer_next (Eina_Tile_Grid_Slicer *slc, const Eina_Tile_Grid_Info **rect) |
| Iterates over the tiles set by eina_tile_grid_slicer_setup().
|
static Eina_Bool | eina_tile_grid_slicer_setup (Eina_Tile_Grid_Slicer *slc, int x, int y, int w, int h, int tile_w, int tile_h) |
| Sets up an Eina_Tile_Grid_Slicer struct.
|
Typedefs |
typedef struct _Eina_Tiler | Eina_Tiler |
typedef struct Eina_Tile_Grid_Info | Eina_Tile_Grid_Info |
Typedef Documentation
Function Documentation
Creates a new Eina_Iterator that iterates over a list of tiles.
- Parameters:
-
[in] | x | X axis coordinate. |
[in] | y | Y axis coordinate. |
[in] | w | Width. |
[in] | h | Height. |
[in] | tile_w | Tile width. |
[in] | tile_h | Tile height. |
- Returns:
- A pointer to the Eina_Iterator.
NULL
on failure.
The region defined by x, y, w, h will be divided in to a grid of tiles of width tile_w and height tile_h
, the returned iterator will iterate over every tile in the grid having as its data a Eina_Tile_Grid_Info.
- Note:
- This is a convenience function, iterating over the returned iterator is equivalent to calling eina_tile_grid_slicer_setup() and calling eina_tile_grid_slicer_next() until it returns EINA_FALSE.
- Since :
- 2.3
Sets up an Eina_Tile_Grid_Slicer struct.
- Parameters:
-
[out] | slc | Pointer to an Eina_Tile_Grid_Slicer struct. |
[in] | x | X axis coordinate. |
[in] | y | Y axis coordinate. |
[in] | w | Width. |
[in] | h | Height. |
[in] | tile_w | Tile width. |
[in] | tile_h | Tile height. |
- Returns:
- A pointer to the Eina_Iterator,
NULL
on failure.
The region defined by x, y, w, h will be divided into a grid of tiles of width tile_w and height tile_h
, slc
can then be used with eina_tile_grid_slicer_next() to access each tile.
- Note:
- Consider using eina_tile_grid_slicer_iterator_new() instead.
Gets the size of the area covered by the tiler.
- Parameters:
-
[in] | t | The tiler whose area size will be fetched. |
[out] | w | Width of the area. |
[out] | h | Height of the area. |
- Since (EFL) :
- 1.8
- Since :
- 3.0f(2.3.1)
Changes the size of the area covered by the tiler.
- Parameters:
-
[in,out] | t | The tiler whose area size will be set. |
[in] | w | Width of the area. |
[in] | h | Height of the area. |
- Since (EFL) :
- 1.8
- Warning:
- Must clear the tiler before changing its size.
- Since :
- 3.0f(2.3.1)
Removes all rectangles from tiles.
- Parameters:
-
[in,out] | t | The tiler to clear. |
- See also:
- eina_tiler_rect_del()
- Since :
- 2.3
Tells if a tiler is empty or not.
- Parameters:
-
[in] | t | The tiler to apply the strict rules to. |
- Returns:
- EINA_TRUE when empty, EINA_FALSE when not.
- Since (EFL) :
- 1.8
- Since :
- 3.0f(2.3.1)
Gets whether two tilers are equal in rects or not.
- Parameters:
-
[in] | t1 | The first tiler. |
[in] | t2 | The second tiler. |
- Returns:
- EINA_TRUE if equal, EINA_FALSE if unequal.
This function gets result of comparison for t1
and t2
. It returns EINA_TRUE if tilers are equal.
- Since (EFL) :
- 1.11
- Since :
- 3.0f(2.3.1)
Frees a tiler.
- Parameters:
-
This function frees t
. It does not free the memory allocated for the elements of t
.
- Since :
- 2.3
- Examples:
- eina_tiler_01.c.
Gets the intersection of two tilers.
- Parameters:
-
[in] | t1 | The first tile. |
[in] | t2 | The second tiler. |
- Returns:
- A pointer of intersection result.
NULL
if intersection doesn't exist.
This function gets the intersection of two tilers t1
and t2
. It returns a pointer of result if intersection of two tilers exists., otherwise returns NULL.
- Since (EFL) :
- 1.11
- Since :
- 3.0f(2.3.1)
Creates a iterator to access the tilers calculated rectangles.
- Parameters:
-
[in] | t | The tiler to iterate over. |
- Returns:
- A iterator containing Eina_Rectangle.
- Since :
- 2.3
- Examples:
- eina_tiler_01.c.
Creates a new tiler with w
width and h
height.
- Parameters:
-
[in] | w | Width of the tiler |
[in] | h | Height of the tiler |
- Returns:
- The newly created tiler
- See also:
- eina_tiler_free()
- Since :
- 2.3
- Examples:
- eina_tiler_01.c.
Defines if we need to follow a strict grid of tile or a loose one.
- Parameters:
-
[in,out] | t | The tiler to apply the strict rules to. |
[in] | strict | Define if it will be strict or loose |
By default it will be loose.
- Since (EFL) :
- 1.8
- Since :
- 3.0f(2.3.1)
Subtracts two tilers.
- Parameters:
-
[in,out] | dst | The first tiler, will store the result. |
[in] | src | The second tiler. |
- Returns:
- EINA_TRUE on success, EINA_FALSE otherwise.
This function subtracts two tilers dst
and src
. The result is stored in dst
. It returns EINA_TRUE if it succeeds.
- Since (EFL) :
- 1.11
- Since :
- 3.0f(2.3.1)
Sets the size of tiles for a tiler.
- Parameters:
-
[in,out] | t | The tiler whose tile size will be set. |
[in] | w | Width of the tiles. |
[in] | h | Height of the tiles. |
- Warning:
w
and h
must be greater than zero, otherwise tile size won't be changed.
-
Tile size is not used!
- Since :
- 2.3
Gets the union of two tilers.
- Parameters:
-
[in,out] | dst | The first tiler, will store the result. |
[in] | src | The second tiler. |
- Returns:
- EINA_TRUE on success, EINA_FALSE otherwise.
This function gets the union of tilers dst
and src
. The result is stored in dst
. It returns EINA_TRUE if it succeeds.
- Since (EFL) :
- 1.11
- Since :
- 3.0f(2.3.1)