static void conf_paint(int id, float st) { video_push_persp((float) config_get_d(CONFIG_VIEW_FOV), 0.1f, FAR_DIST); { back_draw_easy(); } video_pop_matrix(); gui_paint(id); }
static void name_paint(int id, float t) { if (draw_back) { video_push_persp((float) config_get_d(CONFIG_VIEW_FOV), 0.1f, FAR_DIST); { back_draw_easy(); } video_pop_matrix(); } else game_client_draw(0, t); gui_paint(id); }
void game_draw(int pose, float t) { const float light_p[4] = { 8.f, 32.f, 8.f, 0.f }; struct s_draw *fp = &file.draw; struct s_rend rend; float fov = FOV; if (!state) return; fp->shadow_ui = ball; game_shadow_conf(1); sol_draw_enable(&rend); if (jump_b) fov *= 2.0f * fabsf(jump_dt - 0.5f); video_push_persp(fov, 0.1f, FAR_DIST); glPushMatrix(); { float T[16], M[16], v[3], c[3]; /* In VR, move the view center up to keep the viewer level. */ v_cpy(c, view_c); if (hmd_stat()) c[1] += view_dy; video_calc_view(T, c, view_p, view_e[1]); m_xps(M, T); v_sub(v, c, view_p); glTranslatef(0.f, 0.f, -v_len(v)); glMultMatrixf(M); glTranslatef(-c[0], -c[1], -c[2]); /* Center the skybox about the position of the camera. */ glPushMatrix(); { glTranslatef(view_p[0], view_p[1], view_p[2]); back_draw(&rend); } glPopMatrix(); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_p); /* Draw the floor. */ sol_draw(fp, &rend, 0, 1); /* Draw the game elements. */ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if (pose == 0) { game_draw_balls(&rend, fp->vary, T, t); game_draw_vect(&rend, fp->vary); } glDisable(GL_LIGHTING); glDepthMask(GL_FALSE); { game_draw_flags(&rend, fp->base); game_draw_beams(&rend, fp->base, fp->vary); } glDepthMask(GL_TRUE); glEnable(GL_LIGHTING); } glPopMatrix(); video_pop_matrix(); sol_draw_disable(&rend); game_shadow_conf(0); }
void game_draw(struct game_draw *gd, int pose, float t) { float fov = (float) config_get_d(CONFIG_VIEW_FOV); if (gd->jump_b) fov *= 2.f * fabsf(gd->jump_dt - 0.5f); if (gd->state) { const struct game_view *view = &gd->view; struct s_rend rend; gd->draw.shadow_ui = 0; game_shadow_conf(pose, 1); sol_draw_enable(&rend); video_push_persp(fov, 0.1f, FAR_DIST); glPushMatrix(); { float T[16], U[16], M[16], v[3]; /* Compute direct and reflected view bases. */ v[0] = +view->p[0]; v[1] = -view->p[1]; v[2] = +view->p[2]; video_calc_view(T, view->c, view->p, view->e[1]); video_calc_view(U, view->c, v, view->e[1]); m_xps(M, T); /* Apply the current view. */ v_sub(v, view->c, view->p); glTranslatef(0.f, 0.f, -v_len(v)); glMultMatrixf(M); glTranslatef(-view->c[0], -view->c[1], -view->c[2]); /* Draw the background. */ game_draw_back(&rend, gd, pose, +1, t); /* Draw the reflection. */ if (gd->draw.reflective && config_get_d(CONFIG_REFLECTION)) { glEnable(GL_STENCIL_TEST); { /* Draw the mirrors only into the stencil buffer. */ glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFF); glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glDepthMask(GL_FALSE); game_refl_all(&rend, gd); glDepthMask(GL_TRUE); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF); /* Draw the scene reflected into color and depth buffers. */ glFrontFace(GL_CW); glPushMatrix(); { glScalef(+1.0f, -1.0f, +1.0f); game_draw_light(gd, -1); game_draw_back(&rend, gd, pose, -1, t); game_draw_fore(&rend, gd, pose, U, -1, t); } glPopMatrix(); glFrontFace(GL_CCW); glStencilFunc(GL_ALWAYS, 0, 0xFFFFFFFF); } glDisable(GL_STENCIL_TEST); } /* Ready the lights for foreground rendering. */ game_draw_light(gd, 1); /* When reflection is disabled, mirrors must be rendered opaque */ /* to prevent the background from showing. */ if (gd->draw.reflective && !config_get_d(CONFIG_REFLECTION)) { sol_color_mtrl(&rend, 1); { glColor4f(0.0f, 0.0f, 0.0f, 1.0f); game_refl_all(&rend, gd); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); } sol_color_mtrl(&rend, 0); } /* Draw the mirrors and the rest of the foreground. */ game_refl_all (&rend, gd); game_draw_fore(&rend, gd, pose, T, +1, t); } glPopMatrix(); video_pop_matrix(); /* Draw the fade overlay. */ sol_fade(&gd->draw, &rend, gd->fade_k); sol_draw_disable(&rend); game_shadow_conf(pose, 0); } }
void game_draw(int pose, float t) { const float light_p[4] = { 8.f, 32.f, 8.f, 0.f }; struct s_draw *fp = &file.draw; struct s_rend rend; float fov = FOV; if (!state) return; fp->shadow_ui = ball; game_shadow_conf(1); sol_draw_enable(&rend); if (jump_b) fov *= 2.0f * fabsf(jump_dt - 0.5f); video_push_persp(fov, 0.1f, FAR_DIST); glPushMatrix(); { float T[16], M[16], v[3], rx, ry; m_view(T, view_c, view_p, view_e[1]); m_xps(M, T); v_sub(v, view_c, view_p); rx = V_DEG(fatan2f(-v[1], fsqrtf(v[0] * v[0] + v[2] * v[2]))); ry = V_DEG(fatan2f(+v[0], -v[2])); glTranslatef(0.f, 0.f, -v_len(v)); glMultMatrixf(M); glTranslatef(-view_c[0], -view_c[1], -view_c[2]); /* Center the skybox about the position of the camera. */ glPushMatrix(); { glTranslatef(view_p[0], view_p[1], view_p[2]); back_draw(&rend, 0); } glPopMatrix(); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_p); /* Draw the floor. */ sol_draw(fp, &rend, 0, 1); /* Draw the game elements. */ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if (pose == 0) { game_draw_balls(&rend, fp->vary, T, t); game_draw_vect(&rend, fp->vary); } glDisable(GL_LIGHTING); glDepthMask(GL_FALSE); { game_draw_goals(&rend, fp->base); game_draw_jumps(&rend, fp->base); game_draw_swchs(&rend, fp->vary); } glDepthMask(GL_TRUE); glEnable(GL_LIGHTING); } glPopMatrix(); video_pop_matrix(); sol_draw_disable(&rend); game_shadow_conf(0); }
void game_draw(int pose, float t) { static const float a[4] = { 0.2f, 0.2f, 0.2f, 1.0f }; static const float s[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; static const float e[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; static const float h[1] = { 0.0f }; const float light_p[4] = { 8.f, 32.f, 8.f, 1.f }; const struct s_file *fp = &file; float fov = FOV; if (jump_b) fov *= 2.0f * fabsf(jump_dt - 0.5f); video_push_persp(fov, 0.1f, FAR_DIST); glPushAttrib(GL_LIGHTING_BIT); glPushMatrix(); { float T[16], M[16], v[3], rx, ry; m_view(T, view_c, view_p, view_e[1]); m_xps(M, T); v_sub(v, view_c, view_p); rx = V_DEG(fatan2f(-v[1], fsqrtf(v[0] * v[0] + v[2] * v[2]))); ry = V_DEG(fatan2f(+v[0], -v[2])); glTranslatef(0.f, 0.f, -v_len(v)); glMultMatrixf(M); glTranslatef(-view_c[0], -view_c[1], -view_c[2]); /* Center the skybox about the position of the camera. */ glPushMatrix(); { glTranslatef(view_p[0], view_p[1], view_p[2]); back_draw(0); } glPopMatrix(); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_p); /* Draw the floor. */ sol_draw(fp, 0, 1); if (config_get_d(CONFIG_SHADOW) && !pose) { shad_draw_set(fp->uv[ball].p, fp->uv[ball].r); sol_shad(fp); shad_draw_clr(); } /* Draw the game elements. */ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if (pose == 0) { game_draw_balls(fp, T, t); game_draw_vect(fp); } glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, a); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, s); glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, e); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, h); game_draw_goals(fp); glEnable(GL_COLOR_MATERIAL); glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); glDepthMask(GL_FALSE); { game_draw_jumps(fp); game_draw_swchs(fp); } glDepthMask(GL_TRUE); glEnable(GL_TEXTURE_2D); glEnable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); } glPopMatrix(); glPopAttrib(); video_pop_matrix(); }