Mercurial > projects > chipmunkd
view trunk/tests/ChipmunkDemos/framework.d @ 18:a376e5d3eb00
option to enable/disable vsync
author | Extrawurst |
---|---|
date | Thu, 09 Dec 2010 20:52:22 +0100 |
parents | af2f61a96318 |
children | eb61cc181345 |
line wrap: on
line source
// written in the D programming language /++ + Authors: Stephan Dilly, www.extrawurst.org +/ module framework; import derelict.sdl.sdl; import derelict.opengl.gl; import derelict.opengl.glu; import std.string; import std.stdio; void startup(string _title,int _width,int _height,bool _disableVsync=true) { DerelictGL.load(); DerelictGLU.load(); DerelictSDL.load(); if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { throw new Exception("Failed to initialize SDL"); } // Enable key repeating if ((SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL))) { throw new Exception("Failed to set key repeat"); } //enable to get ascii/unicode info of key event SDL_EnableUNICODE(1); // Set the OpenGL attributes SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL,_disableVsync?0:1); // Set the window title SDL_WM_SetCaption(cast(char*)toStringz(_title), null); int mode = SDL_OPENGL; // Now open a SDL OpenGL window with the given parameters if (SDL_SetVideoMode(_width, _height, 32, mode) is null) { throw new Exception("Failed to open SDL window"); } } alias void delegate(int,int,bool) MouseButton; alias void delegate(int,int) MouseMove; alias void delegate(int,bool) KeyEvent; public bool processEvents(KeyEvent _keyevent,MouseMove _mmove,MouseButton _mbutton) { SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_KEYUP: case SDL_KEYDOWN: _keyevent(event.key.keysym.sym,event.type == SDL_KEYDOWN); break; case SDL_MOUSEMOTION: _mmove(event.motion.x,event.motion.y); break; case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: _mbutton(event.button.x,event.button.y,event.type == SDL_MOUSEBUTTONDOWN); break; case SDL_QUIT: return false; default: break; } } return true; } void shutdown() { SDL_Quit(); }