public class STBRectPack
extends java.lang.Object
Useful for e.g. packing rectangular textures into an atlas. Does not do rotation.
This library currently uses the Skyline Bottom-Left algorithm. Not necessarily the awesomest packing method, but better than the totally naive one in stb_truetype (which is primarily what this is meant to replace).
| Modifier and Type | Field and Description |
|---|---|
static int |
STBRP_HEURISTIC_Skyline_BF_sortHeight
Packing heuristics
|
static int |
STBRP_HEURISTIC_Skyline_BL_sortHeight
Packing heuristics
|
static int |
STBRP_HEURISTIC_Skyline_default
Packing heuristics
|
| Modifier and Type | Method and Description |
|---|---|
static void |
nstbrp_init_target(long context,
int width,
int height,
long nodes,
int num_nodes)
Unsafe version of:
init_target |
static int |
nstbrp_pack_rects(long context,
long rects,
int num_rects)
Unsafe version of:
pack_rects |
static void |
nstbrp_setup_allow_out_of_mem(long context,
int allow_out_of_mem)
Unsafe version of:
setup_allow_out_of_mem |
static void |
nstbrp_setup_heuristic(long context,
int heuristic)
Unsafe version of:
setup_heuristic |
static void |
stbrp_init_target(STBRPContext context,
int width,
int height,
STBRPNode.Buffer nodes)
Initialize a rectangle packer to: pack a rectangle that is
width by height in dimensions using temporary storage provided by the array
nodes, which is num_nodes long. |
static int |
stbrp_pack_rects(STBRPContext context,
STBRPRect.Buffer rects)
Assigns packed locations to rectangles.
|
static void |
stbrp_setup_allow_out_of_mem(STBRPContext context,
boolean allow_out_of_mem)
Optionally call this function after init but before doing any packing to change the handling of the out-of-temp-memory scenario, described in
init_target. |
static void |
stbrp_setup_heuristic(STBRPContext context,
int heuristic)
Optionally select which packing heuristic the library should use.
|
public static final int STBRP_HEURISTIC_Skyline_default
public static final int STBRP_HEURISTIC_Skyline_BL_sortHeight
public static final int STBRP_HEURISTIC_Skyline_BF_sortHeight
public static int nstbrp_pack_rects(long context,
long rects,
int num_rects)
pack_rectsnum_rects - the number of structs in rectspublic static int stbrp_pack_rects(STBRPContext context, STBRPRect.Buffer rects)
STBRPRect, stored in the array rects, and there are num_rects many
of them.
Rectangles which are successfully packed have the was_packed flag set to a non-zero value and x and y store the minimum
location on each axis (i.e. bottom-left in cartesian coordinates, top-left if you imagine y increasing downwards). Rectangles which do not fit have the
was_packed flag set to 0.
You should not try to access the rects array from another thread while this function is running, as the function temporarily reorders the array
while it executes.
To pack into another rectangle, you need to call init_target again. To continue packing into the same rectangle, you can call this function again.
Calling this multiple times with multiple rect arrays will probably produce worse packing results than calling it a single time with the full rectangle
array, but the option is available.
context - an STBRPContext structrects - an array of STBRPRect structspublic static void nstbrp_init_target(long context,
int width,
int height,
long nodes,
int num_nodes)
init_targetnum_nodes - the number of structs in nodespublic static void stbrp_init_target(STBRPContext context, int width, int height, STBRPNode.Buffer nodes)
width by height in dimensions using temporary storage provided by the array
nodes, which is num_nodes long.
You must call this function every time you start packing into a new target.
There is no "shutdown" function. The nodes memory must stay valid for the following pack_rects call (or calls), but can be freed after the
call (or calls) finish.
Note: to guarantee best results, either:
num_nodes ≥ widthsetup_allow_out_of_mem with allow_out_of_mem = 1If you don't do either of the above things, widths will be quantized to multiples of small integers to guarantee the algorithm doesn't run out of temporary storage.
If you do #2, then the non-quantized algorithm will be used, but the algorithm may run out of temporary storage and be unable to pack some rectangles.
context - an STBRPContext structwidth - the rectangle widthheight - the rectangle heightnodes - an array of STBRPNode structspublic static void nstbrp_setup_allow_out_of_mem(long context,
int allow_out_of_mem)
setup_allow_out_of_mempublic static void stbrp_setup_allow_out_of_mem(STBRPContext context, boolean allow_out_of_mem)
init_target. If you call init again, this will be reset to the default (false).context - an STBRPContext structallow_out_of_mem - 1 to allow running out of temporary storagepublic static void nstbrp_setup_heuristic(long context,
int heuristic)
setup_heuristicpublic static void stbrp_setup_heuristic(STBRPContext context, int heuristic)
context - an STBRPContext structheuristic - the packing heuristicCopyright LWJGL. All Rights Reserved. License terms.