Ответ 1
Похоже, вы смешиваете системы рендеринга. Этот метод будет работать только в контексте рендеринга программного обеспечения. Для аппаратного рендеринга вы должны использовать метод SDL_RenderReadPixels()
. Чтобы сохранить скриншот, вам понадобится такой код:
SDL_Surface *sshot = SDL_CreateRGBSurface(0, w, h, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
SDL_RenderReadPixels(renderer, NULL, SDL_PIXELFORMAT_ARGB8888, sshot->pixels, sshot->pitch);
SDL_SaveBMP(sshot, "screenshot.bmp");
SDL_FreeSurface(sshot);
Где w и h - ширина и высота экрана (вы можете получить эти значения с помощью SDL_GetRendererOutputSize()
).