From 3679f63a6bd8e6428e69399456ebf700a1362ebf Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 27 Jul 2013 03:48:23 -0700 Subject: [PATCH] Added example of using the software renderer and window surface API, contributed by Nitin Jain. --- test/Makefile.in | 4 ++ test/testdrawchessboard.c | 105 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 test/testdrawchessboard.c diff --git a/test/Makefile.in b/test/Makefile.in index 073d20100..2a39afc6b 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -13,6 +13,7 @@ TARGETS = \ testaudioinfo$(EXE) \ testautomation$(EXE) \ testdraw2$(EXE) \ + testdrawchessboard$(EXE) \ testerror$(EXE) \ testfile$(EXE) \ testgamecontroller$(EXE) \ @@ -103,6 +104,9 @@ testrelative$(EXE): $(srcdir)/testrelative.c testdraw2$(EXE): $(srcdir)/testdraw2.c $(CC) -o $@ $^ $(CFLAGS) $(LIBS) +testdrawchessboard$(EXE): $(srcdir)/testdrawchessboard.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + testerror$(EXE): $(srcdir)/testerror.c $(CC) -o $@ $^ $(CFLAGS) $(LIBS) diff --git a/test/testdrawchessboard.c b/test/testdrawchessboard.c new file mode 100644 index 000000000..a48f57087 --- /dev/null +++ b/test/testdrawchessboard.c @@ -0,0 +1,105 @@ +/* + Copyright (C) 1997-2013 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. + + This file is created by : Nitin Jain (nitin.j4@samsung.com) +*/ + +/* Sample program: Draw a Chess Board by using SDL_CreateSoftwareRenderer API */ + +#include +#include + +#include "SDL.h" + +void +DrawChessBoard(SDL_Renderer * renderer) +{ + int row = 0,coloum = 0,x = 0; + SDL_Rect rect, darea; + + /* Get the Size of drawing surface */ + SDL_RenderGetViewport(renderer, &darea); + + for(row; row < 8; row++) + { + coloum = row%2; + x = x + coloum; + for(coloum; coloum < 4+(row%2); coloum++) + { + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); + + rect.w = darea.w/8; + rect.h = darea.h/8; + rect.x = x * rect.w; + rect.y = row * rect.h; + x = x + 2; + SDL_RenderFillRect(renderer, &rect); + } + x=0; + } +} + +int +main(int argc, char *argv[]) +{ + SDL_Event event; + + /* Initialize SDL */ + if(SDL_Init(SDL_INIT_VIDEO) != 0) + { + fprintf(stderr,"SDL_Init fail : %s\n", SDL_GetError()); + return 1; + } + + + /* Create window and renderer for given surface */ + SDL_Window *window = SDL_CreateWindow("Chess Board",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,640,480,SDL_WINDOW_SHOWN); + if(!window) + { + fprintf(stderr,"Window creation fail : %s\n",SDL_GetError()); + return 1; + } + SDL_Surface *surface = SDL_GetWindowSurface(window); + SDL_Renderer *renderer = SDL_CreateSoftwareRenderer(surface); + if(!renderer) + { + fprintf(stderr,"Render creation for surface fail : %s\n",SDL_GetError()); + return 1; + } + + /* Clear the rendering surface with the specidfied colour */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0); + SDL_RenderClear(renderer); + + + /* Draw the Image on rendering surface */ + while(1) + { + SDL_Event e; + if (SDL_PollEvent(&e)) { + if (e.type == SDL_QUIT) + break; + + if(e.key.keysym.sym == SDLK_ESCAPE) + break; + } + + DrawChessBoard(renderer); + + /* Got everything on redering surface, + now Update the drawing image on window screen */ + SDL_UpdateWindowSurface(window); + + } + + return 0; +} +