/** * Pinta el estado actual del juego **/ void Game_Render(TGAME * lsGame) { //***************************************************************************** //Limpiar los buffers GraphicManager_ClearBuffer(&(lsGame->mGraphic)); //Visualizar la escena Scene_Render(&(lsGame->mScene),&(lsGame->mGraphic)); //Visualizar buffer GraphicManager_SwapBuffer(&(lsGame->mGraphic)); }
void GlassViewer::draw(gcn::Graphics *g) { sceneobj_t sc; int x,y; vec4_t rect; if(isCulled(g)) return; getAbsolutePosition(x, y); gcn::Rectangle r = g->getCurrentClipArea(); //setup camera Cam_DefaultCamera(&cam, r.width, r.height, 0.1, Cvar_GetValue("gfx_farclip")); cam.fovx = fov; cam.fog_near = cam.fog_far = 10000; cam.x = x; cam.y = Vid_GetScreenH()-y-mDimension.height; cam.use_viewport = true; Cam_CalcFovy(&cam); //Cam_SetDistance(&cam, 1000); M_CopyVec3(target, cam.viewaxis[AXIS_FORWARD]); M_GetAxisFromForwardVec(cam.viewaxis[AXIS_FORWARD], cam.viewaxis); M_CopyVec3(camPos, cam.origin); cam.time = Host_Milliseconds()/1000.0f; SET_VEC4(rect, 0, 0, r.width, r.height); if(mOpaque) { g->setColor(getBackgroundColor()); g->fillRectangle(gcn::Rectangle(0,0,getWidth(),getHeight())); } Scene_Clear(); Scene_SetFrustum(&cam, rect); if(model!=(residx_t)-1) { CLEAR_SCENEOBJ(sc); //SET_VEC3(cam.viewaxis[AXIS_FORWARD], target[0]-camPos[0], target[1]-camPos[1], target[2]-camPos[2]); //M_Normalize(cam.viewaxis[AXIS_FORWARD]); //M_GetAxisFromForwardVec(cam.viewaxis[AXIS_FORWARD], cam.viewaxis); M_MultVec3(cam.viewaxis[AXIS_FORWARD], -distance, cam.origin); M_AddVec3(cam.origin, camPos, cam.origin); sc.model = model; sc.skeleton = &skeleton; sc.flags = SCENEOBJ_NEVER_CULL | SCENEOBJ_USE_AXIS; SET_VEC3(sc.rimColor, 1.0, 1.0, 1.0); if(animState.size() > 0) { Geom_BeginPose(sc.skeleton, sc.model); Geom_SetBoneAnim("", animState.c_str(), Host_Milliseconds(), Host_Milliseconds(), 0, 0); Geom_EndPose(); } M_CopyVec3(position, sc.pos); sc.angle[0] = sc.angle[1] = 0; sc.angle[2] = angle; M_GetAxis(sc.angle[0], sc.angle[1], sc.angle[2], sc.axis); if(mAutoRotate) angle = int(angle + dAngle) % 360; if(angle<0) angle +=360; Scene_AddObject(&sc); } if(!world) { cam.fog_near = 9000; cam.fog_far = 10000; cam.flags |= CAM_NO_WORLD; } else { cam.flags &= ~CAM_NO_WORLD; cam.fog_near = Cvar_GetValue("gfx_fog_near"); cam.fog_far = Cvar_GetValue("gfx_fog_far"); WO_RenderEmitters(cam.origin); WL_RenderLights(cam.origin); } //FIXME: add post-processing with viewers int old = gfx_postProcessing.integer; Cvar_SetVarValue(&gfx_postProcessing, 0); GL_EndFrame(); GL_Enable(GL_CULL_FACE); Scene_Render(&cam, cam.origin, 0); GL_Disable(GL_CULL_FACE); GL_BeginFrame(); Cvar_SetVarValue(&gfx_postProcessing, old); if(animState.size() > 0 && model != (residx_t)-1) Geom_FreeSkeleton(&skeleton); }
void CamWnd::Cam_Draw() { glViewport(0, 0, m_Camera.width, m_Camera.height); // enable depth buffer writes glDepthMask(GL_TRUE); Vector3 clearColour(0, 0, 0); clearColour = ColourSchemes().getColourVector3("camera_background"); glClearColor(clearColour[0], clearColour[1], clearColour[2], 0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); render::RenderStatistics::Instance().resetStats(); Cull_ResetStats(); glMatrixMode(GL_PROJECTION); glLoadMatrixf(m_Camera.projection); glMatrixMode(GL_MODELVIEW); glLoadMatrixf(m_Camera.modelview); // one directional light source directly behind the viewer { GLfloat inverse_cam_dir[4], ambient[4], diffuse[4];//, material[4]; ambient[0] = ambient[1] = ambient[2] = 0.4f; ambient[3] = 1.0f; diffuse[0] = diffuse[1] = diffuse[2] = 0.4f; diffuse[3] = 1.0f; inverse_cam_dir[0] = m_Camera.vpn[0]; inverse_cam_dir[1] = m_Camera.vpn[1]; inverse_cam_dir[2] = m_Camera.vpn[2]; inverse_cam_dir[3] = 0; glLightfv(GL_LIGHT0, GL_POSITION, inverse_cam_dir); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glEnable(GL_LIGHT0); } unsigned int globalstate = RENDER_DEPTHTEST | RENDER_COLOURWRITE | RENDER_DEPTHWRITE | RENDER_ALPHATEST | RENDER_BLEND | RENDER_CULLFACE | RENDER_COLOURARRAY | RENDER_COLOURCHANGE; switch (getCameraSettings()->getMode()) { case drawWire: break; case drawSolid: globalstate |= (RENDER_FILL | RENDER_LIGHTING | RENDER_SMOOTH | RENDER_SCALED); break; case drawTexture: globalstate |= (RENDER_FILL | RENDER_LIGHTING | RENDER_TEXTURE_2D | RENDER_SMOOTH | RENDER_SCALED); break; default: globalstate = 0; break; } if (!getCameraSettings()->solidSelectionBoxes()) { globalstate |= RENDER_LINESTIPPLE; } { CamRenderer renderer(globalstate, m_state_select2, m_state_select1, m_view.getViewer()); Scene_Render(renderer, m_view); renderer.render(m_Camera.modelview, m_Camera.projection); } // greebo: Draw the clipper's points (skipping the depth-test) { glDisable(GL_DEPTH_TEST); glColor4f(1, 1, 1, 1); glPointSize(5); if (GlobalClipper().clipMode()) { GlobalClipper().draw(1.0f); } glPointSize(1); } // prepare for 2d stuff glColor4f(1, 1, 1, 1); glDisable(GL_BLEND); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, (float) m_Camera.width, 0, (float) m_Camera.height, -100, 100); glScalef(1, -1, 1); glTranslatef(0, -(float) m_Camera.height, 0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if (GlobalOpenGL().GL_1_3()) { glClientActiveTexture(GL_TEXTURE0); glActiveTexture(GL_TEXTURE0); } glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glDisable(GL_TEXTURE_2D); glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); glDisable(GL_DEPTH_TEST); glLineWidth(1); // draw the crosshair if (m_bFreeMove) { glBegin(GL_LINES); glVertex2f((float) m_Camera.width / 2.f, (float) m_Camera.height / 2.f + 6); glVertex2f((float) m_Camera.width / 2.f, (float) m_Camera.height / 2.f + 2); glVertex2f((float) m_Camera.width / 2.f, (float) m_Camera.height / 2.f - 6); glVertex2f((float) m_Camera.width / 2.f, (float) m_Camera.height / 2.f - 2); glVertex2f((float) m_Camera.width / 2.f + 6, (float) m_Camera.height / 2.f); glVertex2f((float) m_Camera.width / 2.f + 2, (float) m_Camera.height / 2.f); glVertex2f((float) m_Camera.width / 2.f - 6, (float) m_Camera.height / 2.f); glVertex2f((float) m_Camera.width / 2.f - 2, (float) m_Camera.height / 2.f); glEnd(); } glRasterPos3f(1.0f, static_cast<float> (m_Camera.height) - 1.0f, 0.0f); GlobalOpenGL().drawString(render::RenderStatistics::Instance().getStatString()); glRasterPos3f(1.0f, static_cast<float> (m_Camera.height) - 11.0f, 0.0f); GlobalOpenGL().drawString(Cull_GetStats()); // bind back to the default texture so that we don't have problems // elsewhere using/modifying texture maps between contexts glBindTexture(GL_TEXTURE_2D, 0); }