Thanks a lot.
Here is the code that works, in case other people face the same problem.
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include <iostream>
SDL_Surface* loadImage(std::string filename)
{
SDL_Surface* img = IMG_Load(filename.c_str());
if(img == NULL)
{
return NULL;
}
SDL_Surface* optimized = SDL_DisplayFormatAlpha(img);
SDL_FreeSurface(img);
return optimized;
}
int main(int args , char* argv[] )
{
if(SDL_Init(SDL_INIT_EVERYTHING) == 1)
{
std::cout << "error" << std::endl ;
}
SDL_Surface* surface = SDL_SetVideoMode(100,100,32,SDL_SWSURFACE);
SDL_FillRect(surface,0,SDL_MapRGBA(surface->format,100,100,100,255));
SDL_Surface* circle = loadImage("circle.png");
SDL_Surface* square = loadImage("square.png");
SDL_PixelFormat* format = surface->format;
SDL_Surface* temp1 = SDL_CreateRGBSurface(SDL_SWSURFACE,100,100,32,format->Rmask,format->Gmask,format->Bmask,format->Amask);
SDL_Surface* temp2 = SDL_CreateRGBSurface(SDL_SWSURFACE,100,100,32,format->Rmask,format->Gmask,format->Bmask,format->Amask);
temp1 = SDL_DisplayFormatAlpha(temp1);
temp2 = SDL_DisplayFormatAlpha(temp2);
SDL_SetAlpha(square,0,square->format->alpha);
SDL_SetAlpha(circle,0,circle->format->alpha);
SDL_Rect rect = {0 ,0 , 100 , 100};
SDL_BlitSurface(square,&rect,temp1,&rect);
SDL_BlitSurface(circle,&rect,temp2,&rect);
SDL_BlitSurface(temp1,&rect,surface,&rect);
SDL_BlitSurface(temp2,&rect,surface,&rect);
SDL_Flip(surface);
SDL_Delay(2000);
SDL_DisplayFormatAlpha is needed to set the mask for the surface, because the original surface do not have alpha mask.
There is a lot of memory leak here, and many surface is not freed to reduce the length of the code.
Once again, thanks ![]()

Find content
Not Telling