// std headers #include // 3DS headers #include <3ds.h> #include <3ds/gfx.h> #include <3ds/svc.h> // Citro3D headers #include #include #include // Lynx headers #include <3d.h> #define DISPLAY_TRANSFER_FLAGS \ (GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \ GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \ GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO)) C3D_RenderTarget* main_display; void init_3d(int display) { gfxInitDefault(); C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); int width, height; gfxScreen_t ds_display; if(display == 0){ width = 240; height = 400; ds_display = GFX_TOP; }else if (display == 1){ width = 240; height = 320; ds_display = GFX_BOTTOM; }else { printf("FATAL ERROR: Invalid display selected!"); svcBreak(USERBREAK_PANIC); return; } main_display = C3D_RenderTargetCreate(width, height, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); C3D_RenderTargetSetOutput(main_display, ds_display, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); } void render() { if(main_display == NULL){ printf("FATAL ERROR: 3D has not been initialised, or it has been destroyed!"); svcBreak(USERBREAK_PANIC); return; } C3D_FrameBegin(C3D_FRAME_SYNCDRAW); C3D_RenderTargetClear(main_display, C3D_CLEAR_ALL, 0x68B0D8FF, 0); C3D_FrameDrawOn(main_display); }