Wiki Page Content

Differences between revisions 8 and 9
Revision 8 as of 2015-08-18 20:35:41
Size: 3044
Comment: Added SDL_Quit() in example.
Revision 9 as of 2015-12-04 23:00:29
Size: 3337
Comment: Replaced tabs with spaces in example.
Deletions are marked like this. Additions are marked like this.
Line 31: Line 31:
 int row = 0,column = 0,x = 0;
 SDL_Rect rect, darea;
    int row = 0,column = 0,x = 0;
    SDL_Rect rect, darea;
Line 34: Line 34:
 /* Get the Size of drawing surface */
 SDL_RenderGetViewport(renderer, &darea);
    /* Get the Size of drawing surface */
    SDL_RenderGetViewport(renderer, &darea);
Line 37: Line 37:
 for ( ; row < 8; row++) {
  column = row%2;
  x = column;
  for ( ; column < 4+(row%2); column++) {
   SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xFF);
    for ( ; row < 8; row++) {
        column = row%2;
        x = column;
        for ( ; column < 4+(row%2); column++) {
            SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xFF);
Line 43: Line 43:
   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);
  }
 }
            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);
        }
    }
Line 56: Line 56:
 SDL_Event e;
 while (SDL_PollEvent(&e)) {
  if (e.type == SDL_QUIT) {
   done = 1;
   return;
  }
    SDL_Event e;
    while (SDL_PollEvent(&e)) {
        if (e.type == SDL_QUIT) {
            done = 1;
            return;
        }
Line 63: Line 63:
  if ((e.type == SDL_KEYDOWN) && (e.key.keysym.sym == SDLK_ESCAPE)) {
   done = 1;
   return;
  }
 }
        if ((e.type == SDL_KEYDOWN) && (e.key.keysym.sym == SDLK_ESCAPE)) {
            done = 1;
            return;
        }
    }
Line 69: Line 69:
 DrawChessBoard(renderer);     DrawChessBoard(renderer);
Line 71: Line 71:
 /* Got everything on rendering surface,
  now Update the drawing image on window screen */
 SDL_UpdateWindowSurface(window);
    /* Got everything on rendering surface,
     now Update the drawing image on window screen */
    SDL_UpdateWindowSurface(window);
Line 79: Line 79:
 SDL_Surface *surface;     SDL_Surface *surface;
Line 81: Line 81:
 /* Enable standard application logging */
 SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
    /* Enable standard application logging */
    SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
Line 84: Line 84:
 /* Initialize SDL */
 if (SDL_Init(SDL_INIT_VIDEO) != 0) {
  SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init fail : %s\n", SDL_GetError());
  return 1;
 }
    /* Initialize SDL */
    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init fail : %s\n", SDL_GetError());
        return 1;
    }
Line 90: Line 90:
    /* Create window and renderer for given surface */
    window = SDL_CreateWindow("Chess Board", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
    if (!window) {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Window creation fail : %s\n",SDL_GetError());
        return 1;
    }
    surface = SDL_GetWindowSurface(window);
    renderer = SDL_CreateSoftwareRenderer(surface);
    if (!renderer) {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Render creation for surface fail : %s\n",SDL_GetError());
        return 1;
    }
Line 91: Line 103:
 /* Create window and renderer for given surface */
 window = SDL_CreateWindow("Chess Board", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
 if (!window) {
  SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Window creation fail : %s\n",SDL_GetError());
  return 1;
 }
 surface = SDL_GetWindowSurface(window);
 renderer = SDL_CreateSoftwareRenderer(surface);
 if (!renderer) {
  SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Render creation for surface fail : %s\n",SDL_GetError());
  return 1;
 }
    /* Clear the rendering surface with the specified color */
    SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
    SDL_RenderClear(renderer);
Line 104: Line 107:
 /* Clear the rendering surface with the specified color */
 SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
 SDL_RenderClear(renderer);
    /* Draw the Image on rendering surface */
    done = 0;
Line 108: Line 110:
    while (!done) {
        loop();
    }
Line 109: Line 114:
 /* Draw the Image on rendering surface */
 done = 0;

 while (!done) {
  loop();
 }

 SDL_Quit();
 return 0;
    SDL_Quit();
    return 0;

SDL_CreateSoftwareRenderer

Use this function to create a 2D software rendering context for a surface.

Syntax

SDL_Renderer* SDL_CreateSoftwareRenderer(SDL_Surface* surface)

Function Parameters

surface

the SDL_Surface structure representing the surface where rendering is done

Return Value

Returns a valid rendering context or NULL if there was an error; call SDL_GetError() for more information.

Code Examples

#include "SDL.h"

SDL_Window *window;
SDL_Renderer *renderer;
int done;

void
DrawChessBoard(SDL_Renderer * renderer)
{
    int row = 0,column = 0,x = 0;
    SDL_Rect rect, darea;

    /* Get the Size of drawing surface */
    SDL_RenderGetViewport(renderer, &darea);

    for ( ; row < 8; row++) {
        column = row%2;
        x = column;
        for ( ; column < 4+(row%2); column++) {
            SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xFF);

            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);
        }
    }
}

void
loop()
{
    SDL_Event e;
    while (SDL_PollEvent(&e)) {
        if (e.type == SDL_QUIT) {
            done = 1;
            return;
        }

        if ((e.type == SDL_KEYDOWN) && (e.key.keysym.sym == SDLK_ESCAPE)) {
            done = 1;
            return;
        }
    }

    DrawChessBoard(renderer);

    /* Got everything on rendering surface,
       now Update the drawing image on window screen */
    SDL_UpdateWindowSurface(window);
}

int
main(int argc, char *argv[])
{
    SDL_Surface *surface;

    /* Enable standard application logging */
    SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);

    /* Initialize SDL */
    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init fail : %s\n", SDL_GetError());
        return 1;
    }

    /* Create window and renderer for given surface */
    window = SDL_CreateWindow("Chess Board", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
    if (!window) {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Window creation fail : %s\n",SDL_GetError());
        return 1;
    }
    surface = SDL_GetWindowSurface(window);
    renderer = SDL_CreateSoftwareRenderer(surface);
    if (!renderer) {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Render creation for surface fail : %s\n",SDL_GetError());
        return 1;
    }

    /* Clear the rendering surface with the specified color */
    SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
    SDL_RenderClear(renderer);

    /* Draw the Image on rendering surface */
    done = 0;

    while (!done) {
        loop();
    }

    SDL_Quit();
    return 0;
}

Remarks

Two other API which can be used to create SDL_Renderer:
1) SDL_CreateRenderer()
2) SDL_CreateWindowAndRenderer()


CategoryAPI, CategoryRender

None: SDL_CreateSoftwareRenderer (last edited 2016-03-31 22:22:10 by PhilippWiesemann)

(Page Info.)
Feedback
Please include your contact information if you'd like to receive a reply.
Submit