⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdlut.c

📁 tracciatore di mani con webcam
💻 C
字号:
#include "sdlut.h"/* I like booleans */typedef int bool;#define true 1#define false 0/* * Function pointers for storing callbacks */bool sdlut_redisplay_necessary;void (*sdlut_active_function_ptr)   (SDL_ActiveEvent*)		= NULL;void (*sdlut_display_function_ptr)  (void)			= NULL;void (*sdlut_idle_function_ptr)     (void)			= NULL;void (*sdlut_keyboard_function_ptr) (SDL_KeyboardEvent*)	= NULL;void (*sdlut_motion_function_ptr)   (SDL_MouseMotionEvent*)	= NULL;void (*sdlut_mouse_function_ptr)    (SDL_MouseButtonEvent*)	= NULL;void (*sdlut_resize_function_ptr)   (SDL_ResizeEvent*)		= NULL;void (*sdlut_glut_keyboard_function_ptr) (unsigned char key,          int x, int y) = NULL;void (*sdlut_glut_mouse_function_ptr)    (int button, int state,          int x, int y) = NULL;void (*sdlut_glut_motion_function_ptr)   (int x, int y) = NULL;void (*sdlut_glut_reshape_function_ptr)  (int w, int h) = NULL;/* * Prototypes of SDL->GLUT event adapter functions */static void sdlut_glut_keyboard_adapter (SDL_KeyboardEvent*);static void sdlut_glut_mouse_adapter    (SDL_MouseButtonEvent*);static void sdlut_glut_motion_adapter   (SDL_MouseMotionEvent*);static void sdlut_glut_reshape_adapter  (SDL_ResizeEvent*);/* * SDL system initialization and window manipulation functions */void sdlutInit (){  if (SDL_Init(SDL_INIT_VIDEO) < 0)  {    printf("Couldn't init SDL: %s\n", SDL_GetError());    return;  }#if 0  /* disable key repeating */  if ((flags & SDLUT_REPEAT) == SDLUT_REPEAT)    SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,                         SDL_DEFAULT_REPEAT_INTERVAL);  else    SDL_EnableKeyRepeat(0, 0);  /* grab all mouse and keyboard input to window */  if ((flags & SDLUT_GRAB) == SDLUT_GRAB)    SDL_WM_GrabInput(SDL_GRAB_ON);  else    SDL_WM_GrabInput(SDL_GRAB_OFF);#endif}void sdlutInitDisplayMode (int flags){  if ((flags & SDLUT_RGB) == SDLUT_RGB)  {    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 4);    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 4);    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 4);  }  if ((flags & SDLUT_ALPHA) == SDLUT_ALPHA)  {    SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 4);  }  if ((flags & SDLUT_DEPTH) == SDLUT_DEPTH)    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 4);  if ((flags & SDLUT_STENCIL) == SDLUT_STENCIL)    SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 4);  if ((flags & SDLUT_DOUBLE) == SDLUT_DOUBLE)    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);  if ((flags & SDLUT_FSAA) == SDLUT_FSAA)  {    SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);    SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);  }}void sdlutCreateWindow (const char* title, int w, int h, int bpp, int flags){  if (SDL_SetVideoMode(w,h,bpp,SDL_OPENGL|flags) == NULL)  {    printf("Couldn't set video mode: %s\n", SDL_GetError());    return;  }  /* set the window title and icon name */  SDL_WM_SetCaption(title, title);}void sdlutDestroyWindow (){  SDL_QuitSubSystem(SDL_INIT_VIDEO);  SDL_Quit();}/* * Ah, the main event loop.  Exits when a QUIT event is triggered */void sdlutMainLoop (){  SDL_Event event;  bool      done = false;  sdlut_redisplay_necessary = true;  while (!done)  {    if (sdlut_redisplay_necessary && sdlut_display_function_ptr)    {      sdlut_display_function_ptr();      sdlut_redisplay_necessary = false;    }    if (SDL_PollEvent(&event))    {      do      {        switch (event.type)        {        case SDL_ACTIVEEVENT:          if (sdlut_active_function_ptr)            sdlut_active_function_ptr((SDL_ActiveEvent*) &event);          break;        case SDL_KEYDOWN:        case SDL_KEYUP:          if (sdlut_keyboard_function_ptr)            sdlut_keyboard_function_ptr((SDL_KeyboardEvent*) &event);          break;        case SDL_MOUSEMOTION:          if (sdlut_motion_function_ptr)            sdlut_motion_function_ptr((SDL_MouseMotionEvent*) &event);          break;        case SDL_MOUSEBUTTONDOWN:        case SDL_MOUSEBUTTONUP:          if (sdlut_mouse_function_ptr)            sdlut_mouse_function_ptr((SDL_MouseButtonEvent*) &event);          break;        case SDL_QUIT:          done = true;          break;        case SDL_VIDEORESIZE:          if (sdlut_resize_function_ptr)            sdlut_resize_function_ptr((SDL_ResizeEvent*) &event);          break;        case SDL_VIDEOEXPOSE:          sdlut_redisplay_necessary = true;          break;        default:          break;        }      } while (SDL_PollEvent(&event));    }    else    {      if (sdlut_idle_function_ptr)        sdlut_idle_function_ptr();    }  }}void sdlutPostRedisplay (){  sdlut_redisplay_necessary = true;}void sdlutSwapBuffers (){  SDL_GL_SwapBuffers();}/* * SDL-style event callbacks */void sdlutActiveFunc (void (*func)(SDL_ActiveEvent*)){  sdlut_active_function_ptr = func;}void sdlutDisplayFunc (void (*func)(void)){  sdlut_display_function_ptr = func;}void sdlutIdleFunc (void (*func)(void)){  sdlut_idle_function_ptr = func;}void sdlutKeyboardFunc (void (*func)(SDL_KeyboardEvent*)){  sdlut_keyboard_function_ptr = func;}void sdlutMotionFunc (void (*func)(SDL_MouseMotionEvent*)){  sdlut_motion_function_ptr = func;}void sdlutMouseFunc (void (*func)(SDL_MouseButtonEvent*)){  sdlut_mouse_function_ptr = func;}void sdlutResizeFunc (void (*func)(SDL_ResizeEvent*)){  sdlut_resize_function_ptr = func;}/* *  GLUT-style event callbacks */void sdlutGlutDisplayFunc (void (*func)(void)){  sdlut_display_function_ptr = func;}void sdlutGlutIdleFunc (void (*func)(void)){  sdlut_idle_function_ptr = func;}void sdlutGlutKeyboardFunc (void (*func)(unsigned char key, int x, int y)){  sdlut_glut_keyboard_function_ptr = func;  if (sdlut_glut_keyboard_function_ptr)    sdlut_keyboard_function_ptr = sdlut_glut_keyboard_adapter;  else    sdlut_keyboard_function_ptr = NULL;}void sdlutGlutMouseFunc (void (*func)(int button, int state, int x, int y)){  sdlut_glut_mouse_function_ptr = func;  if (sdlut_glut_mouse_function_ptr)    sdlut_mouse_function_ptr = sdlut_glut_mouse_adapter;  else    sdlut_mouse_function_ptr = NULL;}void sdlutGlutMotionFunc (void (*func)(int x, int y)){  sdlut_glut_motion_function_ptr = func;  if (sdlut_glut_motion_function_ptr)    sdlut_motion_function_ptr = sdlut_glut_motion_adapter;  else    sdlut_motion_function_ptr = NULL;}void sdlutGlutReshapeFunc (void (*func)(int w, int h)){  sdlut_glut_reshape_function_ptr = func;  if (sdlut_glut_reshape_function_ptr)    sdlut_resize_function_ptr = sdlut_glut_reshape_adapter;  else    sdlut_resize_function_ptr = NULL;}/* * Adapter functions to support SDL->GLUT event translation *//* for use in sdlut_glut_keyboard_adapter, to grab the mouse loc */static int x, y;static void sdlut_glut_keyboard_adapter (SDL_KeyboardEvent* e){  if (e->state == SDL_RELEASED && e->keysym.sym < 128)  {    SDL_GetMouseState(&x, &y);    sdlut_glut_keyboard_function_ptr(e->keysym.sym, x, y);  }}/* SDL -> GLUT mappings   SDL_LEFT_BUTTON   = 1  ->  GLUT_LEFT_BUTTON   = 0   SDL_MIDDLE_BUTTON = 2  ->  GLUT_MIDDLE_BUTTON = 1   SDL_RIGHT_BUTTON  = 3  ->  GLUT_RIGHT_BUTTON  = 2   SDL_PRESESD       = 0  ->  GLUT_DOWN = 1   SDL_RELEASED      = 1  ->  GLUT_UP   = 0*/static int ButtonTrans[4] = { 0, 0, 1, 2 };static int StateTrans[2]  = { 1, 0 };static void sdlut_glut_mouse_adapter (SDL_MouseButtonEvent* e){  sdlut_glut_mouse_function_ptr(ButtonTrans[e->button],                                 StateTrans[e->state],                                 e->x, e->y);}static void sdlut_glut_motion_adapter (SDL_MouseMotionEvent* e){  sdlut_glut_motion_function_ptr(e->x, e->y);}static void sdlut_glut_reshape_adapter (SDL_ResizeEvent* e){  sdlut_glut_reshape_function_ptr(e->w, e->h);}static char shiftmap[128] = {	0,	/* NUL */	1,	/* SOH */	2,	/* STX */	3,	/* ETX */	4,	/* EOT */	5,	/* ENQ */	6,	/* ACK */	7,	8,	9,	10,	11,	12,	13,	14,	15,	16,	17,	18,	19,	20,	21,	22,	23,	24,	25,	26,	27,	28,	29,	30,	31,	' ',	/* SPACE */	'1',	/* ! */	'\'',	/* " */	'3',	/* # */	'4',	/* $ */	'5',	/* % */	'7',	/* & */	'\"',	/* ' */	'9',	/* ( */	'0',	/* ) */	'8',	/* * */	'=',	/* + */	'<',	/* , */	'_',	/* - */	'>',	/* . */	'?',	/* / */	')',	/* 0 */	'!',	/* 1 */	'@',	/* 2 */	'#',	/* 3 */	'$',	/* 4 */	'%',	/* 5 */	'^',	/* 6 */	'&',	/* 7 */	'*',	/* 8 */	'(',	/* 9 */	';',	/* : */	':',	/* ; */	',',	/* < */	'+',	/* = */	'.',	/* > */	'/',	/* ? */	'2',	/* @ */	'a',	/* A */	'b',	/* B */	'c',	/* C */	'd',	/* D */	'e',	/* E */	'f',	/* F */	'g',	/* G */	'h',	/* H */	'i',	/* I */	'j',	/* J */	'k',	/* K */	'l',	/* L */	'm',	/* M */	'n',	/* N */	'o',	/* O */	'p',	/* P */	'q',	/* Q */	'r',	/* R */	's',	/* S */	't',	/* T */	'u',	/* U */	'v',	/* V */	'w',	/* W */	'x',	/* X */	'y',	/* Y */	'z',	/* Z */	'{',	/* [ */	'|',	/* \ */	'}',	/* ] */	'6',	/* ^ */	'-',	/* _ */	'~',	/* ` */	'A',	/* a */	'B',	/* b */	'C',	/* c */	'D',	/* d */	'E',	/* e */	'F',	/* f */	'G',	/* g */	'H',	/* h */	'I',	/* i */	'J',	/* j */	'K',	/* k */	'L',	/* l */	'M',	/* m */	'N',	/* n */	'O',	/* o */	'P',	/* p */	'Q',	/* q */	'R',	/* r */	'S',	/* s */	'T',	/* t */	'U',	/* u */	'V',	/* v */	'W',	/* w */	'X',	/* x */	'Y',	/* y */	'Z',	/* z */	'[',	/* { */	'\\',	/* | */	']',	/* } */	'`',	/* ~ */	127	/* DEL */};unsigned char sdlutShiftASCII (unsigned char c){  if (c >= 128 )    return c;  return shiftmap[c];}unsigned int lastTicks = 0;unsigned int sdlutGetElapsed (){  unsigned int thisTicks = SDL_GetTicks();  unsigned int elapsed;  if( lastTicks )    elapsed = thisTicks - lastTicks;  else    elapsed = 0;  lastTicks = thisTicks;  return elapsed;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -