source: trunk/src/sdlapp.cpp @ 796

Last change on this file since 796 was 796, checked in by sam, 10 years ago

gl: use Glew if available.

  • Property svn:keywords set to Id
File size: 2.1 KB
Line 
1//
2// Lol Engine
3//
4// Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net>
5//   This program is free software; you can redistribute it and/or
6//   modify it under the terms of the Do What The Fuck You Want To
7//   Public License, Version 2, as published by Sam Hocevar. See
8//   http://sam.zoy.org/projects/COPYING.WTFPL for more details.
9//
10
11#if defined HAVE_CONFIG_H
12#   include "config.h"
13#endif
14
15#if defined USE_SDL
16#   include <SDL.h>
17#endif
18
19#include "core.h"
20#include "lolgl.h"
21#include "sdlapp.h"
22
23namespace lol
24{
25
26/*
27 * SDL App implementation class
28 */
29
30class SdlAppData
31{
32    friend class SdlApp;
33
34private:
35    int unused;
36};
37
38/*
39 * Public SdlApp class
40 */
41
42SdlApp::SdlApp(char const *title, vec2i res, float fps) :
43    data(new SdlAppData())
44{
45#if defined USE_SDL
46    /* Initialise SDL */
47    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
48    {
49        Log::Error("cannot initialise SDL: %s\n", SDL_GetError());
50        exit(EXIT_FAILURE);
51    }
52
53    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
54    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
55    SDL_Surface *video = SDL_SetVideoMode(res.x, res.y, 0, SDL_OPENGL);
56    if (!video)
57    {
58        Log::Error("cannot create OpenGL screen: %s\n", SDL_GetError());
59        SDL_Quit();
60        exit(EXIT_FAILURE);
61    }
62#if defined USE_GLEW
63    GLenum glerr = glewInit();
64    if (glerr != GLEW_OK)
65    {
66        Log::Error("cannot initialise GLEW: %s\n", glewGetErrorString(glerr));
67        SDL_Quit();
68        exit(EXIT_FAILURE);
69    }
70#endif
71
72    SDL_WM_SetCaption(title, NULL);
73    SDL_ShowCursor(0);
74
75    /* Initialise everything */
76    Ticker::Setup(fps);
77    Video::Setup(vec2i(video->w, video->h));
78    Audio::Setup(2);
79#endif
80}
81
82void SdlApp::Run()
83{
84    while (!Ticker::Finished())
85    {
86        /* Tick the game */
87        Ticker::TickGame();
88
89        /* Tick the renderer, show the frame and clamp to desired framerate. */
90        Ticker::TickDraw();
91#if defined USE_SDL
92        SDL_GL_SwapBuffers();
93#endif
94        Ticker::ClampFps();
95    }
96}
97
98SdlApp::~SdlApp()
99{
100#if defined USE_SDL
101    SDL_Quit();
102#endif
103    delete data;
104}
105
106} /* namespace lol */
107
Note: See TracBrowser for help on using the repository browser.