summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle K <kylek389@gmail.com>2011-07-19 09:17:16 -0500
committerKamil Kaminski <kamilkss@gmail.com>2011-07-19 09:17:16 -0500
commit1944ec48d1c7870403fb6c4f25cf885dd591a8ab (patch)
tree09e43d1413d5cc4805d14c917feb77342670d73f
parent09d12523ad298f7d58bf2948af5275ddd6caa976 (diff)
downloadGLPyramid-1944ec48d1c7870403fb6c4f25cf885dd591a8ab.tar.gz
GLPyramid-1944ec48d1c7870403fb6c4f25cf885dd591a8ab.tar.bz2
GLPyramid-1944ec48d1c7870403fb6c4f25cf885dd591a8ab.zip
sdl: unglobalize struct platform variable
-rw-r--r--sdl/event.c51
-rw-r--r--sdl/event.h6
-rw-r--r--sdl/platform.c2
-rw-r--r--sdl/pyramid.c20
4 files changed, 40 insertions, 39 deletions
diff --git a/sdl/event.c b/sdl/event.c
index c3120af..16e5f00 100644
--- a/sdl/event.c
+++ b/sdl/event.c
@@ -17,17 +17,18 @@
#include "window.h"
#include "event.h"
-extern struct platform p;
extern int program_running;
+static struct platform *p;
/* our function table */
static struct event_vtbl event_tbl;
-int event_handler_init(struct event_vtbl *tbl)
+int event_handler_init(struct platform *plat, struct event_vtbl *tbl)
{
- if (!tbl)
+ if (!tbl || !plat)
return -1;
+ p = plat;
event_tbl = *tbl;
/* predefined handlers that are automatically provided */
@@ -103,46 +104,46 @@ void event_keydown(SDL_keysym *keysym, const unsigned int *keys_held, const int
switch (keysym->sym)
{
case SDLK_ESCAPE: program_running = 0; break;
- case SDLK_w: p.c->xrot -= 5.0f; break;
- case SDLK_s: p.c->xrot += 5.0f; break;
- case SDLK_a: p.c->yrot -= 5.0f; break;
- case SDLK_d: p.c->yrot += 5.0f; break;
- case SDLK_UP: glframe_move_forward(&p.camera, 0.5f); break;
- case SDLK_DOWN: glframe_move_forward(&p.camera, -0.5f); break;
- case SDLK_LEFT: glframe_rotate_local_y(&p.camera, 0.1f); break;
- case SDLK_RIGHT: glframe_rotate_local_y(&p.camera, -0.1f); break;
- case SDLK_n: glframe_rotate_local_x(&p.camera, 0.1f); break;
- case SDLK_m: glframe_rotate_local_x(&p.camera, -0.1f); break;
+ case SDLK_w: p->c->xrot -= 5.0f; break;
+ case SDLK_s: p->c->xrot += 5.0f; break;
+ case SDLK_a: p->c->yrot -= 5.0f; break;
+ case SDLK_d: p->c->yrot += 5.0f; break;
+ case SDLK_UP: glframe_move_forward(&p->camera, 0.5f); break;
+ case SDLK_DOWN: glframe_move_forward(&p->camera, -0.5f); break;
+ case SDLK_LEFT: glframe_rotate_local_y(&p->camera, 0.1f); break;
+ case SDLK_RIGHT: glframe_rotate_local_y(&p->camera, -0.1f); break;
+ case SDLK_n: glframe_rotate_local_x(&p->camera, 0.1f); break;
+ case SDLK_m: glframe_rotate_local_x(&p->camera, -0.1f); break;
default: break;
}
}
else
{
if (keys_held[SDLK_w])
- p.c->xrot -= 5.0f;
+ p->c->xrot -= 5.0f;
if (keys_held[SDLK_s])
- p.c->xrot += 5.0f;
+ p->c->xrot += 5.0f;
if (keys_held[SDLK_a])
- p.c->yrot -= 5.0f;
+ p->c->yrot -= 5.0f;
if (keys_held[SDLK_d])
- p.c->yrot += 5.0f;
+ p->c->yrot += 5.0f;
if (keys_held[SDLK_UP])
- glframe_move_forward(&p.camera, 0.05f);
+ glframe_move_forward(&p->camera, 0.05f);
if (keys_held[SDLK_DOWN])
- glframe_move_forward(&p.camera, -0.05f);
+ glframe_move_forward(&p->camera, -0.05f);
if (keys_held[SDLK_LEFT])
- glframe_rotate_local_y(&p.camera, 0.02f);
+ glframe_rotate_local_y(&p->camera, 0.02f);
if (keys_held[SDLK_RIGHT])
- glframe_rotate_local_y(&p.camera, -0.02f);
+ glframe_rotate_local_y(&p->camera, -0.02f);
if (keys_held[SDLK_n])
- glframe_rotate_local_x(&p.camera, 0.02f);
+ glframe_rotate_local_x(&p->camera, 0.02f);
if (keys_held[SDLK_m])
- glframe_rotate_local_x(&p.camera, -0.02f);
+ glframe_rotate_local_x(&p->camera, -0.02f);
}
- p.c->xrot = (GLfloat) ((const int) p.c->xrot % 360);
- p.c->yrot = (GLfloat) ((const int) p.c->yrot % 360);
+ p->c->xrot = (GLfloat) ((const int) p->c->xrot % 360);
+ p->c->yrot = (GLfloat) ((const int) p->c->yrot % 360);
}
diff --git a/sdl/event.h b/sdl/event.h
index 468087b..0608fa7 100644
--- a/sdl/event.h
+++ b/sdl/event.h
@@ -1,7 +1,9 @@
#ifndef _EVENT_H_
#define _EVENT_H_
-/* a table holding function pointers to function that handle events */
+struct platform;
+
+/* a table holding function pointers to functions that handle events */
struct event_vtbl
{
void (*keydown)(SDL_keysym *, const unsigned int *, const int);
@@ -9,7 +11,7 @@ struct event_vtbl
};
/* function prototypes */
-int event_handler_init(struct event_vtbl *);
+int event_handler_init(struct platform *, struct event_vtbl *);
void sdl_process_events(void);
void event_keydown(SDL_keysym *, const unsigned int *, const int);
diff --git a/sdl/platform.c b/sdl/platform.c
index 138596a..7c7bcdd 100644
--- a/sdl/platform.c
+++ b/sdl/platform.c
@@ -71,7 +71,7 @@ void platform_init(struct platform *p)
struct event_vtbl event_tbl;
memset(&event_tbl, 0, sizeof(event_tbl));
event_tbl.keydown = event_keydown;
- ret = event_handler_init(&event_tbl);
+ ret = event_handler_init(p, &event_tbl);
if (ret == -1)
fprintf(stderr, "platform: warning, failed to init event handler\n");
diff --git a/sdl/pyramid.c b/sdl/pyramid.c
index 1e14ebb..ff8a03f 100644
--- a/sdl/pyramid.c
+++ b/sdl/pyramid.c
@@ -31,9 +31,6 @@
#include "sdltools.h"
#include "window.h"
-/* globals */
-struct platform p;
-
/* sane defaults, these are overwritable by config.lua */
int program_running = 1;
unsigned int xres_w = 640;
@@ -49,7 +46,7 @@ unsigned int maxfps_w = 60;
static int client_init(struct client *);
static int client_destroy(struct client *);
static inline void process_events(void);
-static void render(void);
+static void render(struct platform *);
static int client_init(struct client *p)
{
@@ -90,7 +87,7 @@ static inline void process_events(void)
sdl_process_events();
}
-static void render(void)
+static void render(struct platform *p)
{
/* clear the window with current clearing color */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@@ -98,17 +95,17 @@ static void render(void)
/* save the matrix state and do the rotations */
glPushMatrix();
/* apply camera transform, and draw the ground */
- glframe_apply_camera_transform(&p.camera, 1);
- glCallList(p.c->ground_list);
+ glframe_apply_camera_transform(&p->camera, 1);
+ glCallList(p->c->ground_list);
glPushMatrix();
/* move object back and do in place rotation */
glTranslatef(0.0f, 0.2f, -3.5f);
- glRotatef(p.c->xrot, 1.0f, 0.0f, 0.0f);
- glRotatef(p.c->yrot, 0.0f, 1.0f, 0.0f);
+ glRotatef(p->c->xrot, 1.0f, 0.0f, 0.0f);
+ glRotatef(p->c->yrot, 0.0f, 1.0f, 0.0f);
/* draw the pyramid */
- glCallList(p.c->triangle_list);
+ glCallList(p->c->triangle_list);
glPopMatrix();
/* draw a snowman */
@@ -127,6 +124,7 @@ static void render(void)
int main(int argc, char **argv)
{
+ struct platform p;
memset(&p, 0, sizeof(p));
/* setup client platform */
@@ -148,7 +146,7 @@ int main(int argc, char **argv)
startclock = SDL_GetTicks();
process_events();
- render();
+ render(&p);
sdlFrameControl(startclock);
}