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 |
1.6.3