#include #include #include #include #include void draw_rects(SDL_Renderer *renderer, int x, int y) { // R SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); SDL_Rect r = {x, y, 64, 64}; SDL_RenderFillRect(renderer, &r); // G SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255); SDL_Rect g = {x + 64, y, 64, 64}; SDL_RenderFillRect(renderer, &g); // B SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255); SDL_Rect b = {x + 128, y, 64, 64}; SDL_RenderFillRect(renderer, &b); } int main(int argc, char *argv[]) { SDL_Event event; SDL_Window *window; SDL_Renderer *renderer; int done = 0, x = 0, w = 1920, h = 1080; // mandatory at least on switch, else gfx is not properly closed if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { SDL_Log("SDL_Init: %s\n", SDL_GetError()); return -1; } // create an SDL window (OpenGL ES2 always enabled) // when SDL_FULLSCREEN flag is not set, viewport is automatically handled by SDL (use SDL_SetWindowSize to "change resolution") // available switch SDL2 video modes : // 1920 x 1080 @ 32 bpp (SDL_PIXELFORMAT_RGBA8888) // 1280 x 720 @ 32 bpp (SDL_PIXELFORMAT_RGBA8888) window = SDL_CreateWindow("sdl2_gles2", 0, 0, 1920, 1080, 0); if (!window) { SDL_Log("SDL_CreateWindow: %s\n", SDL_GetError()); SDL_Quit(); return -1; } // create a renderer (OpenGL ES2) renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (!renderer) { SDL_Log("SDL_CreateRenderer: %s\n", SDL_GetError()); SDL_Quit(); return -1; } romfsInit(); TTF_Init(); /*TTF_Font *arialUnicode = TTF_OpenFont("RomFs:/arial-unicode-ms.ttf", 30); if (!arialUnicode) { SDL_Quit(); return -1; }*/ // open CONTROLLER_PLAYER_1 and CONTROLLER_PLAYER_2 // when railed, both joycons are mapped to joystick #0, // else joycons are individually mapped to joystick #0, joystick #1, ... // https://github.com/devkitPro/SDL/blob/switch-sdl2/src/joystick/switch/SDL_sysjoystick.c#L45 for (int i = 0; i < 2; i++) { if (SDL_JoystickOpen(i) == NULL) { SDL_Log("SDL_JoystickOpen: %s\n", SDL_GetError()); SDL_Quit(); return -1; } } while (!done) { while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_JOYAXISMOTION: SDL_Log("Joystick %d axis %d value: %d\n", event.jaxis.which, event.jaxis.axis, event.jaxis.value); break; case SDL_JOYBUTTONDOWN: SDL_Log("Joystick %d button %d down\n", event.jbutton.which, event.jbutton.button); // https://github.com/devkitPro/SDL/blob/switch-sdl2/src/joystick/switch/SDL_sysjoystick.c#L52 // seek for joystick #0 if (event.jbutton.which == 0) { if (event.jbutton.button == 0) { // (A) button down } else if (event.jbutton.button == 10) { // (+) button down done = 1; } } break; default: break; } } SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); // fill window bounds SDL_SetRenderDrawColor(renderer, 111, 111, 111, 255); SDL_GetWindowSize(window, &w, &h); SDL_Rect f = {0, 0, w, h}; SDL_RenderFillRect(renderer, &f); draw_rects(renderer, x, 0); draw_rects(renderer, x, h - 64); SDL_RenderPresent(renderer); x++; if (x > w - 192) { x = 0; } } //Menu_OpenBook(renderer, SDL_GetWindowSurface(window), font, "/switch/eBookReader/books/test.epub"); //TTF_Quit(); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; }