test/testdrawchessboard.c
author Sam Lantinga <slouken@libsdl.org>
Thu, 07 Dec 2017 16:08:09 -0800
changeset 11730 ac6c607e065c
parent 11274 daea00fb0938
child 11811 5d94cb6b24d3
permissions -rw-r--r--
Enable building the Metal renderer by default, and weak link the Metal framework so the SDL library is safe to use on older Macs
Also generate iOS versions of the Metal shaders
     1 /*
     2    Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
     3 
     4    This software is provided 'as-is', without any express or implied
     5    warranty.  In no event will the authors be held liable for any damages
     6    arising from the use of this software.
     7 
     8    Permission is granted to anyone to use this software for any purpose,
     9    including commercial applications, and to alter it and redistribute it
    10    freely.
    11 
    12    This file is created by : Nitin Jain (nitin.j4@samsung.com)
    13 */
    14 
    15 /* Sample program:  Draw a Chess Board  by using SDL_CreateSoftwareRenderer API */
    16 
    17 #include <stdlib.h>
    18 #include <stdio.h>
    19 
    20 #ifdef __EMSCRIPTEN__
    21 #include <emscripten/emscripten.h>
    22 #endif
    23 
    24 #include "SDL.h"
    25 
    26 SDL_Window *window;
    27 SDL_Renderer *renderer;
    28 SDL_Surface *surface;
    29 int done;
    30 
    31 void
    32 DrawChessBoard(SDL_Renderer * renderer)
    33 {
    34     int row = 0,column = 0,x = 0;
    35     SDL_Rect rect, darea;
    36 
    37     /* Get the Size of drawing surface */
    38     SDL_RenderGetViewport(renderer, &darea);
    39 
    40     for( ; row < 8; row++)
    41     {
    42         column = row%2;
    43         x = column;
    44         for( ; column < 4+(row%2); column++)
    45         {
    46             SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xFF);
    47 
    48             rect.w = darea.w/8;
    49             rect.h = darea.h/8;
    50             rect.x = x * rect.w;
    51             rect.y = row * rect.h;
    52             x = x + 2;
    53             SDL_RenderFillRect(renderer, &rect);
    54         }
    55     }
    56 }
    57 
    58 void
    59 loop()
    60 {
    61     SDL_Event e;
    62     while (SDL_PollEvent(&e)) {
    63        
    64        /* Re-create when window has been resized */
    65        if ((e.type == SDL_WINDOWEVENT) && (e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)) {
    66 
    67           SDL_DestroyRenderer(renderer);
    68 
    69           surface = SDL_GetWindowSurface(window);
    70           renderer = SDL_CreateSoftwareRenderer(surface);
    71           /* Clear the rendering surface with the specified color */
    72           SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
    73           SDL_RenderClear(renderer);
    74        }
    75 
    76        if (e.type == SDL_QUIT) {
    77             done = 1;
    78 #ifdef __EMSCRIPTEN__
    79             emscripten_cancel_main_loop();
    80 #endif
    81             return;
    82         }
    83 
    84         if ((e.type == SDL_KEYDOWN) && (e.key.keysym.sym == SDLK_ESCAPE)) {
    85             done = 1;
    86 #ifdef __EMSCRIPTEN__
    87             emscripten_cancel_main_loop();
    88 #endif
    89             return;
    90         }
    91     }
    92 
    93     DrawChessBoard(renderer);
    94 
    95     /* Got everything on rendering surface,
    96        now Update the drawing image on window screen */
    97     SDL_UpdateWindowSurface(window);
    98 }
    99 
   100 int
   101 main(int argc, char *argv[])
   102 {
   103     /* Enable standard application logging */
   104     SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
   105 
   106     /* Initialize SDL */
   107     if(SDL_Init(SDL_INIT_VIDEO) != 0)
   108     {
   109         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init fail : %s\n", SDL_GetError());
   110         return 1;
   111     }
   112 
   113 
   114     /* Create window and renderer for given surface */
   115     window = SDL_CreateWindow("Chess Board", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_RESIZABLE);
   116     if(!window)
   117     {
   118         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Window creation fail : %s\n",SDL_GetError());
   119         return 1;
   120     }
   121     surface = SDL_GetWindowSurface(window);
   122     renderer = SDL_CreateSoftwareRenderer(surface);
   123     if(!renderer)
   124     {
   125         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Render creation for surface fail : %s\n",SDL_GetError());
   126         return 1;
   127     }
   128 
   129     /* Clear the rendering surface with the specified color */
   130     SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
   131     SDL_RenderClear(renderer);
   132 
   133 
   134     /* Draw the Image on rendering surface */
   135     done = 0;
   136 #ifdef __EMSCRIPTEN__
   137     emscripten_set_main_loop(loop, 0, 1);
   138 #else
   139     while (!done) {
   140         loop();
   141     }
   142 #endif
   143 
   144     SDL_Quit();
   145     return 0;
   146 }
   147