//Draws the whole scene void WaterRenderer:: draw_scene(DrawMode _draw_mode) { // clear screen glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glDisable(GL_CULL_FACE); glEnable(GL_MULTISAMPLE); glDisable(GL_DEPTH_TEST); draw_skybox(); glEnable(GL_DEPTH_TEST); draw_water(); }
static void draw_level_background() { glPushAttrib(GL_ALL_ATTRIB_BITS); if (inner_state.state != IS_WAVE_CLEARED && inner_state.state != IS_LEVEL_CLEARED && inner_state.state != IS_LEVEL_TRANSITION) { glDisable(GL_BLEND); draw_water(); } else { int level; if (inner_state.state == IS_LEVEL_TRANSITION && inner_state.tics > LEVEL_TRANSITION_TOTAL_TICS/2) level = (gc.cur_level + 1)%NUM_LEVELS; else level = gc.cur_level; glPushMatrix(); set_modelview_rotation(); draw_background(level, get_arena_alpha(), 1); glPopMatrix(); } glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); /* arena flash */ if (inner_state.state == IS_WAVE_TITLE && inner_state.tics < WAVE_TITLE_TICS/4) { float k = 1.f - (float)inner_state.tics/(WAVE_TITLE_TICS/4); glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); glColor3f(k, k, k); draw_filled_arena(cur_arena); } glPopAttrib(); }
void Draw::draw3D(Shader *shader,Shader *shaderWater,Shader *shaderShadowMapping, Shader2D *shader2D,FrameBuffer *FBO,FrameBuffer *waterReflectFBO, FrameBuffer * waterRefractFBO){ if(!Enable3D){ shader->active_shader(); FBO->bind_buffer(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear buffer return; } if(!camera||!lightControl){ std::cerr<<"Draw::draw3D fail,light control or camera no set yet!!"<<std::endl; return; } lightControl->gen_shadow(shaderShadowMapping,camera,this); shader->active_shader(); FBO->bind_buffer(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear buffer //sent uniform FBO->depth_textures.at(0)->sent_uniform(shader,33,"depthTexture"); //Texture* sky_box=AllTextures::get_cur_tex("default/skybox")->sent_uniform(shader,30,"skybox"); sky_box->sent_uniform(shader,30,"skybox"); camera->sent_uniform(shader->programID,FBO->aspect()); lightControl->sent_uniform(shader,camera->pos); for(unsigned i=0;i<d_objs.size();i++){//100 d_objs.at(i)->draw_object(shader);//draw all obj } draw_billBoard(shader,camera); draw_particle(shader,camera); draw_water(shader,shaderWater,FBO,waterReflectFBO,waterRefractFBO); Input::Mouse::get_cur_mouse()->get_world_space_pos(FBO, glm::inverse(camera->view_matrix(FBO->aspect()))); }