nds sprite functionality. [詳細]
#include "nds/ndstypes.h"
#include "nds/arm9/video.h"
#include "nds/memory.h"
#include "nds/system.h"
構成 | |
union | SpriteEntry |
A bitfield of sprite attribute goodness...ugly to look at but not so bad to use. [詳細] | |
struct | SpriteRotation |
A sprite rotation entry. [詳細] | |
union | OAMTable |
struct | AllocHeader |
struct | OamState |
マクロ定義 | |
#define | ATTR0_NORMAL (0<<8) |
#define | ATTR0_ROTSCALE (1<<8) |
#define | ATTR0_DISABLED (2<<8) |
#define | ATTR0_ROTSCALE_DOUBLE (3<<8) |
#define | ATTR0_TYPE_NORMAL (0<<10) |
#define | ATTR0_TYPE_BLENDED (1<<10) |
#define | ATTR0_TYPE_WINDOWED (2<<10) |
#define | ATTR0_BMP (3<<10) |
#define | ATTR0_MOSAIC (1<<12) |
#define | ATTR0_COLOR_16 (0<<13) |
#define | ATTR0_COLOR_256 (1<<13) |
#define | ATTR0_SQUARE (0<<14) |
#define | ATTR0_WIDE (1<<14) |
#define | ATTR0_TALL (2<<14) |
#define | OBJ_Y(m) ((m)&0x00ff) |
#define | ATTR1_ROTDATA(n) ((n)<<9) |
#define | ATTR1_FLIP_X (1<<12) |
#define | ATTR1_FLIP_Y (1<<13) |
#define | ATTR1_SIZE_8 (0<<14) |
#define | ATTR1_SIZE_16 (1<<14) |
#define | ATTR1_SIZE_32 (2<<14) |
#define | ATTR1_SIZE_64 (3<<14) |
#define | OBJ_X(m) ((m)&0x01ff) |
#define | ATTR2_PRIORITY(n) ((n)<<10) |
#define | ATTR2_PALETTE(n) ((n)<<12) |
#define | ATTR2_ALPHA(n) ((n)<<12) |
#define | SPRITE_COUNT 128 |
#define | MATRIX_COUNT 32 |
#define | SPRITE_SIZE_SHAPE(size) (((size) >> 12) & 0x3) |
#define | SPRITE_SIZE_SIZE(size) (((size) >> 14) & 0x3) |
#define | SPRITE_SIZE_PIXELS(size) (((size) & 0xFFF) << 5) |
型定義 | |
typedef union SpriteEntry | SpriteEntry |
typedef union SpriteEntry * | pSpriteEntry |
typedef struct SpriteRotation | SpriteRotation |
typedef struct SpriteRotation * | pSpriteRotation |
typedef union OAMTable | OAMTable |
typedef struct AllocHeader | AllocHeader |
typedef struct OamState | OamState |
列挙型 | |
enum | ObjBlendMode { OBJMODE_NORMAL, OBJMODE_BLENDED, OBJMODE_WINDOWED, OBJMODE_BITMAP } |
The blending mode of the sprite. [詳細] | |
enum | ObjShape { OBJSHAPE_SQUARE, OBJSHAPE_WIDE, OBJSHAPE_TALL, OBJSHAPE_FORBIDDEN } |
The shape of the sprite. [詳細] | |
enum | ObjSize { OBJSIZE_8, OBJSIZE_16, OBJSIZE_32, OBJSIZE_64 } |
The size of the sprite. [詳細] | |
enum | ObjColMode { OBJCOLOR_16, OBJCOLOR_256 } |
The color mode of the sprite. [詳細] | |
enum | ObjPriority { OBJPRIORITY_0, OBJPRIORITY_1, OBJPRIORITY_2, OBJPRIORITY_3 } |
The priority of the sprite. [詳細] | |
enum | SpriteSize { SpriteSize_8x8 = (OBJSIZE_8 << 14) | (OBJSHAPE_SQUARE << 12) | (8*8>>5), SpriteSize_16x16 = (OBJSIZE_16 << 14) | (OBJSHAPE_SQUARE << 12) | (16*16>>5), SpriteSize_32x32 = (OBJSIZE_32 << 14) | (OBJSHAPE_SQUARE << 12) | (32*32>>5), SpriteSize_64x64 = (OBJSIZE_64 << 14) | (OBJSHAPE_SQUARE << 12) | (64*64>>5), SpriteSize_16x8 = (OBJSIZE_8 << 14) | (OBJSHAPE_WIDE << 12) | (16*8>>5), SpriteSize_32x8 = (OBJSIZE_16 << 14) | (OBJSHAPE_WIDE << 12) | (32*8>>5), SpriteSize_32x16 = (OBJSIZE_32 << 14) | (OBJSHAPE_WIDE << 12) | (32*16>>5), SpriteSize_64x32 = (OBJSIZE_64 << 14) | (OBJSHAPE_WIDE << 12) | (64*32>>5), SpriteSize_8x16 = (OBJSIZE_8 << 14) | (OBJSHAPE_TALL << 12) | (8*16>>5), SpriteSize_8x32 = (OBJSIZE_16 << 14) | (OBJSHAPE_TALL << 12) | (8*32>>5), SpriteSize_16x32 = (OBJSIZE_32 << 14) | (OBJSHAPE_TALL << 12) | (16*32>>5), SpriteSize_32x64 = (OBJSIZE_64 << 14) | (OBJSHAPE_TALL << 12) | (32*64>>5) } |
enum | SpriteMapping { SpriteMapping_1D_32 = DISPLAY_SPR_1D | DISPLAY_SPR_1D_SIZE_32 | (0 << 28) | 0, SpriteMapping_1D_64 = DISPLAY_SPR_1D | DISPLAY_SPR_1D_SIZE_64 | (1 << 28) | 1, SpriteMapping_1D_128 = DISPLAY_SPR_1D | DISPLAY_SPR_1D_SIZE_128 | (2 << 28) | 2, SpriteMapping_1D_256 = DISPLAY_SPR_1D | DISPLAY_SPR_1D_SIZE_256 | (3 << 28) | 3, SpriteMapping_2D = DISPLAY_SPR_2D | (4 << 28), SpriteMapping_Bmp_1D_128 = DISPLAY_SPR_1D | DISPLAY_SPR_1D_SIZE_128 | DISPLAY_SPR_1D_BMP |DISPLAY_SPR_1D_BMP_SIZE_128 | (5 << 28) | 2, SpriteMapping_Bmp_1D_256 = DISPLAY_SPR_1D | DISPLAY_SPR_1D_SIZE_256 | DISPLAY_SPR_1D_BMP |DISPLAY_SPR_1D_BMP_SIZE_256 | (6 << 28) | 3, SpriteMapping_Bmp_2D_128 = DISPLAY_SPR_2D | DISPLAY_SPR_2D_BMP_128 | (7 << 28) | 2, SpriteMapping_Bmp_2D_256 = DISPLAY_SPR_2D | DISPLAY_SPR_2D_BMP_256 | (8 << 28) | 3 } |
enum | SpriteColorFormat { SpriteColorFormat_16Color = OBJCOLOR_16, SpriteColorFormat_256Color = OBJCOLOR_256, SpriteColorFormat_Bmp = OBJMODE_BITMAP } |
関数 | |
void | oamInit (OamState *oam, SpriteMapping mapping, bool extPalette) |
Initializes the 2D sprite engine In order to mix tiled and bitmap sprites use SpriteMapping_Bmp_1D_128 or SpriteMapping_Bmp_1D_256. This will set mapping for both to 1D and give same sized boundaries so the sprite gfx allocation will function. VBlank IRQ must be enabled for this function to work. | |
void | oamDisable (OamState *oam) |
Disables sprite rendering. | |
void | oamEnable (OamState *oam) |
Enables sprite rendering. | |
u16 * | oamGetGfxPtr (OamState *oam, int gfxOffsetIndex) |
translates an oam offset into a video ram address | |
u16 * | oamAllocateGfx (OamState *oam, SpriteSize size, SpriteColorFormat colorFormat) |
Allocates graphics memory for the supplied sprite attributes. | |
void | oamFreeGfx (OamState *oam, const void *gfxOffset) |
translates an oam offset into a video ram address | |
void | oamSetMosaic (unsigned int dx, unsigned int dy) |
sets engine A global sprite mosaic | |
void | oamSetMosaicSub (unsigned int dx, unsigned int dy) |
sets engine B global sprite mosaic | |
void | oamSet (OamState *oam, int id, int x, int y, int priority, int palette_alpha, SpriteSize size, SpriteColorFormat format, const void *gfxOffset, int affineIndex, bool sizeDouble, bool hide, bool hflip, bool vflip, bool mosaic) |
sets an oam entry to the supplied values | |
void | oamClear (OamState *oam, int start, int count) |
Hides the sprites in the supplied range: if count is zero all 128 sprites will be hidden. | |
void | oamUpdate (OamState *oam) |
causes oam memory to be updated...must be called during vblank if using oam api | |
void | oamRotateScale (OamState *oam, int rotId, int angle, int sx, int sy) |
sets the specified rotation scale entry | |
int | oamCountFragments (OamState *oam) |
determines the number of fragments in the allocation engine | |
void | oamAllocReset (OamState *oam) |
unsigned int | oamGfxPtrToOffset (OamState *oam, const void *offset) |
変数 | |
OamState | oamMain |
oamMain an object representing the main 2D engine | |
OamState | oamSub |
oamSub an object representing the sub 2D engine |
nds sprite functionality.
enum ObjBlendMode |
The blending mode of the sprite.
enum ObjColMode |
enum ObjPriority |
enum ObjShape |
enum ObjSize |
enum SpriteColorFormat |
enum SpriteMapping |
Graphics memory layout options
enum SpriteSize |
Enumerates all sizes supported by the 2D engine
u16 * oamAllocateGfx | ( | OamState * | oam, | |
SpriteSize | size, | |||
SpriteColorFormat | colorFormat | |||
) |
Allocates graphics memory for the supplied sprite attributes.
oam | must be: &oamMain or &oamSub | |
size | the size of the sprite to allocate | |
colorFormat | the color format of the sprite |
void oamClear | ( | OamState * | oam, | |
int | start, | |||
int | count | |||
) |
Hides the sprites in the supplied range: if count is zero all 128 sprites will be hidden.
oam | must be: &oamMain or &oamSub | |
start | The first index to clear | |
count | The number of sprites to clear |
void oamCountFragments | ( | OamState * | oam | ) |
determines the number of fragments in the allocation engine
oam | must be: &oamMain or &oamSub |
void oamDisable | ( | OamState * | oam | ) |
Disables sprite rendering.
oam | must be: &oamMain or &oamSub |
void oamEnable | ( | OamState * | oam | ) |
Enables sprite rendering.
oam | must be: &oamMain or &oamSub |
void oamFreeGfx | ( | OamState * | oam, | |
const void * | gfxOffset | |||
) |
translates an oam offset into a video ram address
oam | must be: &oamMain or &oamSub | |
gfxOffset | a vram offset obtained from oamAllocateGfx |
u16 * oamGetGfxPtr | ( | OamState * | oam, | |
int | gfxOffsetIndex | |||
) |
translates an oam offset into a video ram address
oam | must be: &oamMain or &oamSub | |
gfxOffsetIndex | the index to compute |
void oamInit | ( | OamState * | oam, | |
SpriteMapping | mapping, | |||
bool | extPalette | |||
) |
Initializes the 2D sprite engine In order to mix tiled and bitmap sprites use SpriteMapping_Bmp_1D_128 or SpriteMapping_Bmp_1D_256. This will set mapping for both to 1D and give same sized boundaries so the sprite gfx allocation will function. VBlank IRQ must be enabled for this function to work.
oam | must be: &oamMain or &oamSub | |
mapping | the mapping mode | |
extPalette | if true the engine sets up extended palettes for 8bpp sprites |
void oamRotateScale | ( | OamState * | oam, | |
int | rotId, | |||
int | angle, | |||
int | sx, | |||
int | sy | |||
) |
sets the specified rotation scale entry
oam | must be: &oamMain or &oamSub | |
rotId | the rotation entry to set | |
angle | the ccw angle to rotate [-32768 - 32767] | |
sx | the inverse scale factor in the x direction | |
sy | the inverse scale factor in the y direction |
void oamSet | ( | OamState * | oam, | |
int | id, | |||
int | x, | |||
int | y, | |||
int | priority, | |||
int | palette_alpha, | |||
SpriteSize | size, | |||
SpriteColorFormat | format, | |||
const void * | gfxOffset, | |||
int | affineIndex, | |||
bool | sizeDouble, | |||
bool | hide, | |||
bool | hflip, | |||
bool | vflip, | |||
bool | mosaic | |||
) |
sets an oam entry to the supplied values
oam | must be: &oamMain or &oamSub | |
id | the oam number to be set [0 - 127] | |
x | the x location of the sprite in pixels | |
y | the y location of the sprite in pixels | |
priority | The sprite priority (0 to 3) | |
palette_alpha | the palette number for 4bpp and 8bpp (extended palette mode), or the alpha value for bitmap sprites (bitmap sprites must specify a value > 0 to display) [0-15] | |
size | the size of the sprite | |
format | the color format of the sprite | |
gfxOffset | the video memory address of the sprite graphics (not an offset) | |
affineIndex | affine index to use (if < 0 or > 31 the sprite will be unrotated) | |
sizeDouble | if affineIndex >= 0 this will be used to double the sprite size for rotation | |
hide | if non zero (true) the sprite will be hidden | |
vflip | flip the sprite vertically | |
hflip | flip the sprite horizontally | |
mosaic | if true mosaic will be applied to the sprite |
static void oamSetMosaic | ( | unsigned int | dx, | |
unsigned int | dy | |||
) | [inline] |
sets engine A global sprite mosaic
dx | (0-15) horizontal mosaic value | |
dy | (0-15) horizontal mosaic value |
static void oamSetMosaicSub | ( | unsigned int | dx, | |
unsigned int | dy | |||
) | [inline] |
sets engine B global sprite mosaic
dx | (0-15) horizontal mosaic value | |
dy | (0-15) horizontal mosaic value |
void oamUpdate | ( | OamState * | oam | ) |
causes oam memory to be updated...must be called during vblank if using oam api
oam | must be: &oamMain or &oamSub |