Does this work on your system?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
static const int WINDOW_WIDTH = 800;
static const int WINDOW_HEIGHT = 600;
static void bailout(const char *title, const char *message)
{
fprintf(stderr, "ERROR: %s: %s\n", title, message);
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, title, message, NULL);
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[])
{
if(!SDL_Init(SDL_INIT_VIDEO)) {
bailout("Can't Init SDL", SDL_GetError());
}
atexit(SDL_Quit);
uint32_t windowFlags = 0;
SDL_Window *window = SDL_CreateWindow("SDL3 Render Target Alpha Blending",
WINDOW_WIDTH, WINDOW_HEIGHT, windowFlags);
if(window == NULL) {
bailout("Can't Create Window", SDL_GetError());
}
SDL_Renderer *renderer = SDL_CreateRenderer(window, NULL);
if(renderer == NULL) {
bailout("Can't Create Renderer", NULL);
}
SDL_Texture *targetTex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA32,
SDL_TEXTUREACCESS_TARGET, WINDOW_WIDTH, WINDOW_HEIGHT);
if(targetTex == NULL) {
bailout("Can't Create Render Target", SDL_GetError());
}
int quit = 0;
while(!quit) {
SDL_Event event;
while(SDL_PollEvent(&event)) {
switch(event.type) {
case SDL_EVENT_QUIT:
quit = 1;
break;
}
}
SDL_SetRenderTarget(renderer, targetTex);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
SDL_RenderClear(renderer);
SDL_FRect drawRect = { 50.0f, 50.0f, 200.0f, 200.0f };
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 127);
SDL_RenderFillRect(renderer, &drawRect);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderRect(renderer, &drawRect);
SDL_SetRenderTarget(renderer, NULL);
SDL_SetRenderDrawColor(renderer, 0, 127, 255, 255);
SDL_RenderClear(renderer);
SDL_RenderTexture(renderer, targetTex, NULL, NULL);
SDL_RenderPresent(renderer);
}
return 0;
}
On my system it works correctly: