build: Moved the 'sdl' rather to 'SDL'.
[gfxprim.git] / libs / SDL / GP_SDL_VideoInit.c
blob4175d966d2906d675b7ff63eefcfcce8affe526b
1 /*****************************************************************************
2 * This file is part of gfxprim library. *
3 * *
4 * Gfxprim is free software; you can redistribute it and/or *
5 * modify it under the terms of the GNU Lesser General Public *
6 * License as published by the Free Software Foundation; either *
7 * version 2.1 of the License, or (at your option) any later version. *
8 * *
9 * Gfxprim is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
12 * Lesser General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU Lesser General Public *
15 * License along with gfxprim; if not, write to the Free Software *
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
17 * Boston, MA 02110-1301 USA *
18 * *
19 * Copyright (C) 2009-2010 Jiri "BlueBear" Dluhos *
20 * <jiri.bluebear.dluhos@gmail.com> *
21 * *
22 * Copyright (C) 2009-2010 Cyril Hrubis <metan@ucw.cz> *
23 * *
24 *****************************************************************************/
26 #include "GP.h"
27 #include "GP_SDL.h"
29 #include <stdio.h>
30 #include <string.h>
32 GP_RetCode GP_SDL_VideoInit(GP_Context *context, int width, int height,
33 int argc, char **argv)
35 if (context == NULL) {
36 return GP_ENULLPTR;
39 /* switches that can be set on the command line */
40 int display_bpp = 0;
41 int debug = 0;
43 if (argc > 0) {
45 if (argv == NULL) {
46 return GP_ENULLPTR;
49 /* extract settings from the command line */
50 int i;
51 for (i = 1; i < argc; i++) {
52 if (strcmp(argv[i], "--8bpp") == 0) {
53 display_bpp = 8;
55 else if (strcmp(argv[i], "--16bpp") == 0) {
56 display_bpp = 16;
58 else if (strcmp(argv[i], "--24bpp") == 0) {
59 display_bpp = 24;
61 else if (strcmp(argv[i], "--32bpp") == 0) {
62 display_bpp = 32;
64 else if (strcmp(argv[i], "--debug") == 0) {
65 debug = 1;
70 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) {
71 if (debug) {
72 fprintf(stderr, "Error: Could not initialize SDL: %s\n",
73 SDL_GetError());
75 return GP_EBACKENDLOST;
78 SDL_Surface *display = NULL;
79 display = SDL_SetVideoMode(width, height, display_bpp, SDL_SWSURFACE);
80 if (display == NULL) {
81 if (debug) {
82 fprintf(stderr, "Error: Unable to set video mode: %s\n",
83 SDL_GetError());
85 SDL_Quit();
86 return GP_EINVAL;
89 if (debug) {
90 printf("Display properties:\n");
91 printf(" width: %4d, height: %4d, pitch: %4d\n",
92 display->w, display->h, display->pitch);
93 printf(" bits per pixel: %2d, bytes per pixel: %2d\n",
94 display->format->BitsPerPixel, display->format->BytesPerPixel);
95 printf(" pixel bit masks: R=%x, G=%x, B=%x, A=%x\n",
96 display->format->Rmask, display->format->Gmask,
97 display->format->Bmask, display->format->Amask);
100 GP_RetCode retcode;
101 retcode = GP_SDL_ContextFromSurface(context, display);
102 if (retcode != GP_ESUCCESS) {
103 if (debug) {
104 fprintf(stderr, "Error: Could not create context: %s\n",
105 GP_RetCodeName(retcode));
107 SDL_Quit();
108 return retcode;
111 return GP_ESUCCESS;