Re: Inverting draw mode?

"rtrussell" <[email protected]> Wed, 14 Dec 2016 09:55:29 +0000
Newsgroups gmane.comp.lib.sdl
Message-ID <[email protected]>
Here's the SDL_gfx demo modified to use exclusive-or plotting:


Code:
// Demo of exclusive-or plotting by Richard Russell http://www.rtrussell.co.uk/

#include <stdio.h> 
#include "SDL2_gfxPrimitives.h" 

#define WIDTH 640 
#define HEIGHT 480 
#define GL_COLOR_LOGIC_OP 0xBF2
#define GL_XOR 0x1506

#ifdef __WINDOWS__
    void (__stdcall *glEnable)  (int) ;
    void (__stdcall *glLogicOp) (int) ;
    void (__stdcall *glDisable) (int) ;
#else
    void (*glEnable)  (int) ;
    void (*glLogicOp) (int) ;
    void (*glDisable) (int) ;
#endif

int main(int argc, char* argv[]) 
{ 
    
    if (SDL_Init(SDL_INIT_VIDEO)) 
    { 
        printf ("SDL_Init Error: %s", SDL_GetError()); 
        return 1; 
    } 

    SDL_SetHint (SDL_HINT_RENDER_DRIVER, "opengl") ;
    
    SDL_Window *window = SDL_CreateWindow("SDL2_gfx test", 100, 100, WIDTH, HEIGHT, SDL_WINDOW_OPENGL); 
    if (window == NULL) 
    { 
        printf ("SDL_CreateWindow Error: %s", SDL_GetError()); 
        SDL_Quit(); 
        return 2; 
    } 
    
    glLogicOp = SDL_GL_GetProcAddress("glLogicOp") ;
    glEnable  = SDL_GL_GetProcAddress("glEnable") ;
    glDisable = SDL_GL_GetProcAddress("glDisable") ;

    SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); 
    if (renderer == NULL) 
    { 
        SDL_DestroyWindow(window); 
        printf ("SDL_CreateRenderer Error: %s", SDL_GetError()); 
        SDL_Quit(); 
        return 3; 
    } 
    
    SDL_Event e; 
    
    int quit = 0; 
    while (!quit) 
    { 
        if (SDL_PollEvent(&e)) 
        { 
            if (e.type == SDL_QUIT) 
                quit = 1; 
        } 
        SDL_SetRenderDrawColor(renderer, 0, 0, 0xFF, 0xFF); 
        SDL_RenderClear(renderer); 
  
        glEnable (GL_COLOR_LOGIC_OP) ;
        glLogicOp (GL_XOR) ;

        thickLineColor(renderer, 0, 0, WIDTH, HEIGHT, 20, 0xFFFFFFFF) ; 
        thickLineColor(renderer, 0, HEIGHT, WIDTH, 0, 20, 0xFFFFFFFF) ; 
        circleColor(renderer, WIDTH/2, HEIGHT/2, 80, 0xFF00FF00); 
        filledCircleColor(renderer, WIDTH/2, HEIGHT/2, 60, 0xFF0000FF); 

        glDisable (GL_COLOR_LOGIC_OP) ;

        SDL_RenderPresent(renderer); 
        SDL_Delay(10); 
    } 
    
    SDL_DestroyRenderer(renderer); 
    SDL_DestroyWindow(window); 
    SDL_Quit(); 
    return 0; 
}

_______________________________________________
SDL mailing list
[email protected]
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org