Nintendo 3DS >> C/C++ >> GPU
Ellipse
參考資訊:
1. citro2d
2. libctru doc
3. 3ds-examples
說明:
API |
---|
bool C3D_Init(size_t cmdBufSize) |
bool C3D_FrameBegin(u8 flags) |
void C3D_FrameEnd(u8 flags) |
void C3D_Fini(void) |
bool C2D_Init(size_t maxObjects) |
void C2D_Prepare(void) |
C3D_RenderTarget* C2D_CreateScreenTarget(gfxScreen_t screen, gfx3dSide_t side) |
C2D_CONSTEXPR u32 C2D_Color32(u8 r, u8 g, u8 b, u8 a) |
void C2D_TargetClear(C3D_RenderTarget *target, u32 color) |
void C2D_SceneBegin(C3D_RenderTarget *target) |
bool C2D_DrawEllipse(float x, float y, float z, float w, float h, u32 clr0, u32 clr1, u32 clr2, u32 clr3) |
void C2D_Fini(void) |
main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <citro2d.h> #include <string.h> #include <stdio.h> #include <stdlib.h> int main ( void ) { gfxInitDefault (); C3D_Init ( C3D_DEFAULT_CMDBUF_SIZE ); C2D_Init ( C2D_DEFAULT_MAX_OBJECTS ); C2D_Prepare (); C3D_RenderTarget * top = C2D_CreateScreenTarget ( GFX_TOP , GFX_LEFT ); u32 bg = C2D_Color32 (0x00, 0xff, 0xff, 0xff); u32 c0 = C2D_Color32 (0xff, 0x00, 0x00, 0xff); u32 c1 = C2D_Color32 (0x00, 0xff, 0x00, 0xff); C3D_FrameBegin ( C3D_FRAME_SYNCDRAW ); C2D_TargetClear (top, bg); C2D_SceneBegin (top); C2D_DrawEllipse (100, 50, 0, 200, 150, c0, c1, c0, c0); C3D_FrameEnd (0); C2D_Fini (); C3D_Fini (); svcSleepThread (3000000000LL); gfxExit (); return 0; } |
Makefile
include $(DEVKITARM)/3ds_rules all: arm-none-eabi-gcc -mword-relocations -ffunction-sections -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft -I/opt/devkitpro/libctru/include -I/opt/devkitpro/portlibs/3ds/include/ -I/opt/devkitpro/portlibs/3ds/include/opus/ -I/opt/devkitpro/portlibs/3ds/include/SDL -D__3DS__ -c main.c -o main.o arm-none-eabi-gcc -specs=3dsx.specs -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft main.o -L/opt/devkitpro/portlibs/3ds/lib -lopusfile -logg -lopus -L/opt/devkitpro/libctru/lib -lSDL_image -lSDL_mixer -lSDL_ttf -lSDL_gfx -lSDL -lfreetype -lbz2 -lpng -ljpeg -lz -lcitro2d -lcitro3d -lctru -lm -lstdc++ -o main.elf smdhtool --create "main" "devkitARM" "steward" /opt/devkitpro/libctru/default_icon.png main.smdh 3dsxtool main.elf main.3dsx --smdh=main.smdh clean: rm -rf main.o main.elf main.3dsx main.smdh
編譯、執行
$ sudo docker run --rm -it -v $(pwd):/source nds-env /bin/bash root@c18881035cba:/source# make && exit $ citra main.3dsx
完成