Something went wrong. Try again.
Dinky little "engine" for the 3DS, using libctru and citro3d (very WIP)
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960// std headers#include <stdio.h>
// 3DS headers#include <3ds.h>#include <3ds/gfx.h>#include <3ds/svc.h>
// Citro3D headers#include <citro3d.h>#include <c3d/base.h>#include <c3d/renderqueue.h>
// 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);}