//************************************************************ //write image to the frame buffer //************************************************************ void writePixels(GLubyte *image, int image_width, int image_height) { int viewport[4]; // Current viewport glGetIntegerv(GL_VIEWPORT, viewport); glDisable(GL_BLEND); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); glDisable(GL_TEXTURE_1D); glDisable(GL_TEXTURE_2D); glDisable(GL_DITHER); glDisable(GL_FOG); double inset=5; double y1=-1,x1=-1; double ys,xs; glClearColor(1.0f,1.0f,0.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT); x1=-1+inset/image_width; y1=-1+inset/image_height; glRasterPos4d(x1,y1,0,1); xs=((double)viewport[2]-inset)/(double)image_width; ys=((double)viewport[3]-inset)/(double)image_height; glPixelZoom((float)xs,(float)ys); glDrawPixels(image_width,image_height,GL_RGB, GL_UNSIGNED_BYTE,image); glPixelZoom(1,1); glRasterPos4d(-1,-1,0,1); glEnable(GL_DEPTH_TEST); }
///////////////////////////////////////////////////////// // Render // void GEMglRasterPos4d :: render(GemState *state) { glRasterPos4d (x, y, z, w); }
template< > inline void glRasterPos4< LDOUBL > (LDOUBL x,LDOUBL y,LDOUBL z, LDOUBL w ) { glRasterPos4d((double)x,(double)y,(double)z,(double)w); };
template< > inline void glRasterPos4< double > (double x,double y,double z, double w ) { glRasterPos4d(x,y,z,w); };
void GraphicEng::DisplayScene() { // czyszczenie bufora koloru, bufora g³êbokoœci i bufora szblonowego glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ); if(LogicLayer::getI()->graphicsShouldRefreshBullets || LogicLayer::getI()->graphicsShouldRefreshCreeps || LogicLayer::getI()->graphicsShouldRefreshPlayer) { groundGrid->rescanState(LogicLayer::getI()->grid); } glLineWidth(1); glPointSize(10); glEnable( GL_DEPTH_TEST ); glEnable (GL_BLEND); glEnable(GL_LINE_SMOOTH); glEnable(GL_POINT_SMOOTH); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); modelViewMatrix.PushMatrix(); M3DMatrix44f mCamera; cameraFrame.GetCameraMatrix(mCamera); modelViewMatrix.MultMatrix(mCamera); // Draw the world upside down modelViewMatrix.PushMatrix(); modelViewMatrix.Scale(1.0f, 1.0f, -1.0f); // Flips the Y Axis modelViewMatrix.Translate(0.0f, 0.0f, 2.5f); // Scootch the world down a bit... modelViewMatrix.Rotate(15, 1, 0, 0); /*shaderManager.UseStockShader(GLT_SHADER_FLAT, transformPipeline.GetModelViewProjectionMatrix(), clBlue); b.Begin(GL_TRIANGLE_FAN, 10); b.Vertex3f(0,0,-1); b.Vertex3f(0.8f,0,-1); b.Vertex3f(2,1,-1); b.End();*/ //groundGrid->Render((float*)transformPipeline.GetModelViewProjectionMatrix()); //b.Draw(); for(std::vector<ILayer*>::iterator it = layers.begin(); it<layers.end(); it++) { (*it)->Render((float*)transformPipeline.GetModelViewProjectionMatrix()); } modelViewMatrix.PopMatrix(); modelViewMatrix.PopMatrix(); glDisable( GL_DEPTH_TEST ); std::ostringstream txt; if(LogicLayer::getI()->gameover) { txt<<"Koniec gry\nNacisnij enter aby wyjsc"; shaderManager.UseStockShader(GLT_SHADER_IDENTITY, clWhite); glRasterPos3f(-0.15, -0.1, 0); glutBitmapString(GLUT_BITMAP_HELVETICA_18, (unsigned char *)txt.str().c_str()); } txt = std::ostringstream(); txt<<"HP: "<<LogicLayer::getI()->player->hp<<"\nPoints: "<<LogicLayer::getI()->points; shaderManager.UseStockShader(GLT_SHADER_IDENTITY, clWhite); glRasterPos3f(-1, 0.95, 0); glutBitmapString(GLUT_BITMAP_HELVETICA_12, (unsigned char *)txt.str().c_str()); if(LogicLayer::getI()->showFPSinfo) { txt = std::ostringstream(); txt << "FPS: " << framesPerSecond; glDisable( GL_DEPTH_TEST ); shaderManager.UseStockShader(GLT_SHADER_IDENTITY, clWhite); glColor3f(0, 0, 0); glRasterPos4d(-1, -1, 0, 1); glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, (unsigned char *)txt.str().c_str()); glEnable( GL_DEPTH_TEST ); } glEnable( GL_DEPTH_TEST ); glutSwapBuffers(); }
M(void, glRasterPos4d, jdouble x, jdouble y, jdouble z, jdouble w) { glRasterPos4d(x, y, z, w); }