#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <stdint.h>

int main(int argc, char ** argv) {
    char quit = 0;
    unsigned long i;
    SDL_Event event;

    SDL_Init(SDL_INIT_VIDEO);
    IMG_Init(IMG_INIT_PNG);
 
    SDL_Window   * window   = SDL_CreateWindow("SDL2 Displaying Image", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
    
    SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, 0);
    
    SDL_Surface  * image1    = IMG_Load("image1.png");
    SDL_Surface  * image2    = IMG_Load("image2.png");
    SDL_Surface  * image3    = SDL_CreateRGBSurface(0, image1->w, image1->h, image1->format->BitsPerPixel,  image1->format->Rmask, image1->format->Gmask, image1->format->Bmask, image1->format->Amask);
    
    printf("%d x %d, %dBPP\n", image1->w, image1->h, image1->format->BitsPerPixel);
    
    uint8_t * p1;
    uint8_t * p2;
    uint8_t * p3;
    
    //SDL_memcpy(image3->pixels, image1->pixels, image1->h * image1->pitch);
    
    p1 = image1->pixels;   p2 = image2->pixels;   p3 = image3->pixels;
    for (i = 0; i < (image1->h * image1->pitch); i++)    
       if ((i & 3) != 3) {
         *(p3+i) = *(p1+i) - *(p2+i);
       } else {
         *(p3+i) = 255;
       }
    
    IMG_SavePNG(image3, "out.png");
    
    SDL_Texture  * texture  = SDL_CreateTextureFromSurface(renderer,  image3);    

    while (!quit)    {
    
       SDL_WaitEvent(&event);

       switch(event.type)   {
       case SDL_QUIT:
           quit = 1;
           break;
       }

       SDL_RenderCopy(renderer, texture, NULL, NULL);
       SDL_RenderPresent(renderer);
    }

    SDL_DestroyTexture(texture);
    SDL_FreeSurface(image1);
    SDL_FreeSurface(image2);
    SDL_FreeSurface(image3);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    IMG_Quit();
    SDL_Quit();

    return 0;
}
