From bd507f38bd0f26f321fd55345b85d70cf6a27c7a Mon Sep 17 00:00:00 2001 From: T_chan Date: Tue, 1 Feb 2022 08:48:31 +0000 Subject: [PATCH] refactor nehe08 slightly --- samples/nehe08/main.c | 205 ++++++++++++++++++++++-------------------- 1 file changed, 106 insertions(+), 99 deletions(-) diff --git a/samples/nehe08/main.c b/samples/nehe08/main.c index 6dda3cc..8d6814d 100644 --- a/samples/nehe08/main.c +++ b/samples/nehe08/main.c @@ -39,6 +39,9 @@ static GLfloat yrot; /* Y Rotation */ static GLfloat xspeed; /* X Rotation Speed */ static GLfloat yspeed; /* Y Rotation Speed */ static GLfloat z = -5.0f; /* Depth Into The Screen */ +GLboolean xp = GL_FALSE; +GLboolean yp = GL_FALSE; +GLboolean blend = GL_FALSE; static GLuint filter; /* Which Filter To Use */ static GLuint texture[2]; /* Storage For Two Textures */ @@ -46,7 +49,40 @@ static GLuint texture[2]; /* Storage For Two Textures */ /* Load a PVR texture - located in pvr-texture.c */ extern GLuint glTextureLoadPVR(char *fname, unsigned char isMipMapped, unsigned char glMipMap); -void draw_gl(void) { +/* A general OpenGL initialization function. Sets all of the initial parameters. */ +void InitGL(int Width, int Height) // We call this right after our OpenGL window is created. +{ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45.0f, (GLfloat)Width/(GLfloat)Height, 0.1f, 100.0f); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glEnable(GL_TEXTURE_2D); + glShadeModel(GL_SMOOTH); + glClearColor(0.0f, 0.0f, 0.0f, 0.5f); + glClearDepth(1.0f); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LEQUAL); + + glColor4f(1.0f, 1.0f, 1.0f, 0.5); + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + + /* Enable Lighting and GL_LIGHT0 */ + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + + /* Set up the textures */ + texture[0] = glTextureLoadPVR(IMG_PATH, 0, 0); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + texture[1] = glTextureLoadPVR(IMG_PATH, 0, 0); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); +} + +void DrawGLScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0f, 0.0f, z); @@ -121,122 +157,93 @@ void draw_gl(void) { xrot += xspeed; yrot += yspeed; + + /* Finish the frame */ + glKosSwapBuffers(); } -int main(int argc, char **argv) { +int ReadController(void) { #ifdef __DREAMCAST__ maple_device_t *cont; cont_state_t *state; + + cont = maple_enum_type(0, MAPLE_FUNC_CONTROLLER); + + /* Check key status */ + state = (cont_state_t *)maple_dev_status(cont); + if(!state) { + printf("Error reading controller\n"); + return 0; + } + + if(state->buttons & CONT_START) + return 0; + + if(state->buttons & CONT_A) + z -= 0.02f; + + if(state->buttons & CONT_B) + z += 0.02f; + + if((state->buttons & CONT_X) && !xp) { + xp = GL_TRUE; + filter += 1; + + if(filter > 1) + filter = 0; + } + + if(!(state->buttons & CONT_X)) + xp = GL_FALSE; + + if((state->buttons & CONT_Y) && !yp) { + yp = GL_TRUE; + blend = !blend; + } + + if(!(state->buttons & CONT_Y)) + yp = GL_FALSE; + + if(state->buttons & CONT_DPAD_UP) + xspeed -= 0.01f; + + if(state->buttons & CONT_DPAD_DOWN) + xspeed += 0.01f; + + if(state->buttons & CONT_DPAD_LEFT) + yspeed -= 0.01f; + + if(state->buttons & CONT_DPAD_RIGHT) + yspeed += 0.01f; #endif - GLboolean xp = GL_FALSE; - GLboolean yp = GL_FALSE; - GLboolean blend = GL_FALSE; + /* Switch to the blended polygon list if needed */ + if(blend) { + glEnable(GL_BLEND); + glDepthMask(0); + } + else { + glDisable(GL_BLEND); + glDepthMask(1); + } + return 1; +} + +int main(int argc, char **argv) { printf("nehe08 beginning\n"); /* Get basic stuff initialized */ glKosInit(); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(45.0f, 640.0f / 480.0f, 0.1f, 100.0f); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glEnable(GL_TEXTURE_2D); - glShadeModel(GL_SMOOTH); - glClearColor(0.0f, 0.0f, 0.0f, 0.5f); - glClearDepth(1.0f); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - - glColor4f(1.0f, 1.0f, 1.0f, 0.5); - glBlendFunc(GL_SRC_ALPHA, GL_ONE); - - /* Enable Lighting and GL_LIGHT0 */ - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - - /* Set up the textures */ - texture[0] = glTextureLoadPVR(IMG_PATH, 0, 0); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - texture[1] = glTextureLoadPVR(IMG_PATH, 0, 0); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + InitGL(640, 480); while(1) { -#ifdef __DREAMCAST__ - cont = maple_enum_type(0, MAPLE_FUNC_CONTROLLER); - - /* Check key status */ - state = (cont_state_t *)maple_dev_status(cont); - - if(!state) { - printf("Error reading controller\n"); - break; - } - - if(state->buttons & CONT_START) + if (!ReadController()) break; - if(state->buttons & CONT_A) - z -= 0.02f; - - if(state->buttons & CONT_B) - z += 0.02f; - - if((state->buttons & CONT_X) && !xp) { - xp = GL_TRUE; - filter += 1; - - if(filter > 1) - filter = 0; - } - - if(!(state->buttons & CONT_X)) - xp = GL_FALSE; - - if((state->buttons & CONT_Y) && !yp) { - yp = GL_TRUE; - blend = !blend; - } - - if(!(state->buttons & CONT_Y)) - yp = GL_FALSE; - - if(state->buttons & CONT_DPAD_UP) - xspeed -= 0.01f; - - if(state->buttons & CONT_DPAD_DOWN) - xspeed += 0.01f; - - if(state->buttons & CONT_DPAD_LEFT) - yspeed -= 0.01f; - - if(state->buttons & CONT_DPAD_RIGHT) - yspeed += 0.01f; -#endif - - /* Switch to the blended polygon list if needed */ - if(blend) { - glEnable(GL_BLEND); - glDepthMask(0); - } - else { - glDisable(GL_BLEND); - glDepthMask(1); - } - - /* Draw the GL "scene" */ - draw_gl(); - - /* Finish the frame */ - glKosSwapBuffers(); + DrawGLScene(); } return 0; } -