try this
`
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
// https://lazyfoo.net/tutorials/SDL/43_render_to_texture/index.php
int main(int argc, char *argv[])
{
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
SDL_Texture *rendering_texture = NULL;
SDL_Surface *surface = NULL;
SDL_Texture *bitmap = NULL;
SDL_Event event;
if (!SDL_Init(SDL_INIT_VIDEO)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError());
return 3;
}
if (!SDL_CreateWindowAndRenderer("Hello SDL", SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_RESIZABLE, &window, &renderer)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window and renderer: %s", SDL_GetError());
return 3;
}
surface = SDL_LoadBMP("sample.bmp");
if (!surface) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create surface from image: %s", SDL_GetError());
return 3;
}
bitmap = SDL_CreateTextureFromSurface(renderer, surface);
if (!bitmap) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture from surface: %s", SDL_GetError());
return 3;
}
SDL_DestroySurface(surface);
rendering_texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, SCREEN_WIDTH, SCREEN_HEIGHT);
if (!rendering_texture) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture with pixelformat: %s", SDL_GetError());
return 3;
}
while (1) {
SDL_PollEvent(&event);
if (event.type == SDL_EVENT_QUIT) {
break;
}
SDL_SetRenderTarget(renderer, rendering_texture);
// start drawing stuff here
SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0xFF);
SDL_RenderClear(renderer);
//Render green filled quad
SDL_FRect fillRect = {SCREEN_WIDTH / 4, SCREEN_HEIGHT / 4, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2};
SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF);
SDL_RenderFillRect(renderer, &fillRect);
//Render blue outlined quad
SDL_FRect outlineRect = {SCREEN_WIDTH / 6, SCREEN_HEIGHT / 6, SCREEN_WIDTH * 2 / 3, SCREEN_HEIGHT * 2 / 3};
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0xFF, 0xFF);
SDL_RenderRect(renderer, &outlineRect);
//Draw white horizontal line
SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderLine(renderer, 0, SCREEN_HEIGHT / 2, SCREEN_WIDTH, SCREEN_HEIGHT / 2);
SDL_FRect bmpDestination = {0, 0, 40, 40};
SDL_RenderTexture(renderer, bitmap, NULL, &bmpDestination);
// stop drawing stuff
SDL_SetRenderTarget(renderer, NULL);
SDL_FRect renderQuad = {0, 0, SCREEN_WIDTH, SCREEN_HEIGHT};
SDL_RenderTexture(renderer, rendering_texture, &renderQuad, NULL);
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(bitmap);
SDL_DestroyTexture(rendering_texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
`