refactor nehe08 slightly

This commit is contained in:
T_chan 2022-02-01 08:48:31 +00:00
parent 5be561ce4f
commit bd507f38bd

View File

@ -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;
}