9 # error This is a userspace-only header, not allowed by the current build.
12 #include <sifteo/abi.h>
13 #include <sifteo/macros.h>
14 #include <sifteo/math.h>
15 #include <sifteo/asset.h>
16 #include <sifteo/memory.h>
17 #include <sifteo/cube.h>
50 template <
unsigned tW,
unsigned tH,
unsigned tF = 1>
56 uint16_t tiles[tW * tH * tF];
71 operator const _SYSAssetImage& ()
const {
return sys.image; }
72 operator _SYSAssetImage& () {
return sys.image; }
73 operator const _SYSAssetImage* ()
const {
return sys.image; }
74 operator _SYSAssetImage* () {
return sys.image; }
80 ASSERT(sys.cube != _SYS_CUBE_ID_INVALID);
101 sys.cube = _SYS_CUBE_ID_INVALID;
103 sys.image.width = tW;
104 sys.image.height = tH;
105 sys.image.frames = tF;
106 sys.image.format = _SYS_AIF_FLAT;
107 sys.image.pData =
reinterpret_cast<uint32_t
>(&tiles[0]);
219 ASSERT(sys.cube != _SYS_CUBE_ID_INVALID);
237 ASSERT(sys.cube != _SYS_CUBE_ID_INVALID);
247 void plot(
unsigned i, uint16_t tileIndex) {
248 ASSERT(sys.cube != _SYS_CUBE_ID_INVALID);
250 tiles[i] = tileIndex;
259 void plot(
UInt2 pos, uint16_t tileIndex,
unsigned frame = 0) {
260 ASSERT(sys.cube != _SYS_CUBE_ID_INVALID);
262 tiles[
tileAddr(pos, frame)] = tileIndex;
268 uint16_t
tile(
unsigned i)
const {
269 ASSERT(sys.cube != _SYS_CUBE_ID_INVALID);
279 ASSERT(sys.cube != _SYS_CUBE_ID_INVALID);
290 void span(
UInt2 pos,
unsigned width,
unsigned tileIndex,
unsigned frame = 0)
292 ASSERT(sys.cube != _SYS_CUBE_ID_INVALID);
305 span(pos, width, image.
tile(sys.cube, 0), frame);
317 span(topLeft, size.
x, tileIndex, frame);
331 fill(topLeft, size, image.
tile(sys.cube, 0), frame);
343 void image(
UInt2 pos,
const AssetImage &image,
unsigned srcFrame = 0,
unsigned destFrame = 0)
345 ASSERT(sys.cube != _SYS_CUBE_ID_INVALID);
349 _SYS_image_memDraw(&tiles[
tileAddr(pos, destFrame)], sys.cube, image,
tileWidth(), srcFrame);
362 unsigned srcFrame = 0,
unsigned destFrame = 0)
364 ASSERT(sys.cube != _SYS_CUBE_ID_INVALID);
368 _SYS_image_memDrawRect(&tiles[
tileAddr(destXY, destFrame)], sys.cube,
369 image,
tileWidth(), srcFrame, (_SYSInt2*) &srcXY, (_SYSInt2*) &size);
379 unsigned destFrame = 0,
char firstChar =
' ')
381 ASSERT(sys.cube != _SYS_CUBE_ID_INVALID);
382 uint16_t *addr = &tiles[
tileAddr(topLeft, destFrame)];
383 uint16_t *lineAddr = addr;
392 _SYS_image_memDraw(addr, sys.cube, font,
tileWidth(), c - firstChar);
428 template <
unsigned tW,
unsigned tH,
unsigned tF = 1>
431 uint16_t tiles[tW * tH * tF];
436 operator const AssetImage* ()
const {
return reinterpret_cast<const AssetImage*
>(&sys); }
437 operator AssetImage* () {
return reinterpret_cast<AssetImage*
>(&sys); }
442 operator const FlatAssetImage* ()
const {
return reinterpret_cast<const FlatAssetImage*
>(&sys); }
443 operator FlatAssetImage* () {
return reinterpret_cast<FlatAssetImage*
>(&sys); }
446 operator const _SYSAssetImage& ()
const {
return sys; }
447 operator _SYSAssetImage& () {
return sys; }
448 operator const _SYSAssetImage* ()
const {
return sys; }
449 operator _SYSAssetImage* () {
return sys; }
462 sys.format = _SYS_AIF_FLAT;
463 sys.pData =
reinterpret_cast<uint32_t
>(&tiles[0]);
556 uint32_t pAssetGroup =
reinterpret_cast<uint32_t
>(&group.sys);
557 ASSERT(sys.pAssetGroup == 0 || sys.pAssetGroup == pAssetGroup);
558 sys.pAssetGroup = pAssetGroup;
593 void plot(
unsigned i, uint16_t tileIndex) {
595 tiles[i] = tileIndex;
604 void plot(
UInt2 pos, uint16_t tileIndex,
unsigned frame = 0) {
606 tiles[
tileAddr(pos, frame)] = tileIndex;
612 uint16_t
tile(
unsigned i)
const {
632 void span(
UInt2 pos,
unsigned width,
unsigned tileIndex,
unsigned frame = 0)
647 span(pos, width, image.
tile(0), frame);
659 span(topLeft, size.
x, tileIndex, frame);
674 fill(topLeft, size, image.
tile(0), frame);
692 _SYS_image_memDraw(&tiles[
tileAddr(pos, destFrame)],
693 _SYS_CUBE_ID_INVALID, image,
tileWidth(), srcFrame);
706 unsigned srcFrame = 0,
unsigned destFrame = 0)
712 _SYS_image_memDrawRect(&tiles[
tileAddr(destXY, destFrame)],
713 _SYS_CUBE_ID_INVALID, image,
tileWidth(), srcFrame,
714 (_SYSInt2*) &srcXY, (_SYSInt2*) &size);
724 unsigned destFrame = 0,
char firstChar =
' ')
727 uint16_t *addr = &tiles[
tileAddr(topLeft, destFrame)];
728 uint16_t *lineAddr = addr;
737 _SYS_image_memDraw(addr, _SYS_CUBE_ID_INVALID, font,
tileWidth(), c - firstChar);