void __stdcall glMultiTexCoord3d(GLenum target, GLdouble s, GLdouble t, GLdouble r) { if (!ARB_multitexture) return; glMultiTexCoord3dARB(target, s, t, r); }
void bBoard::draw() { double vvx = cos(aa), vvy = sin(aa); if( idle() && camera_type == CT_FPS ) { GetCamera.set_eye( bVector3( ball[0]->pos.x - 2*view_r*vvx, 2.0, ball[0]->pos.y - 2*view_r*vvy ) ); GetCamera.set_dst( bVector3( ball[0]->pos.x + 3*view_r*vvx, 0.2, ball[0]->pos.y + 3*view_r*vvy ) ); } else { GetCamera.set_top_view(); } glDisable( GL_TEXTURE_2D ); glColor3f( 0.0, 0.0, 0.0 ); glBegin( GL_TRIANGLE_STRIP ); for( int i=0; i<BOTTOM_SEGMENTS; ++i ) { glVertex3d( bottom_data[i].x, -0.01, bottom_data[i].y ); } glEnd(); if( idle() ) { glLineWidth( 2.0 ); glEnable( GL_LINE_SMOOTH ); glBegin( GL_LINES ); glColor4d( 1.0, 0.3, 0.3, 1.0 ); for(double k=0.0; k<4.0; k+=0.2) { glVertex3d( ball[0]->pos.x+vvx*k, ball[0]->radius, ball[0]->pos.y+vvy*k ); } glEnd(); glDisable( GL_BLEND ); } glColor3f( 1.0, 1.0, 1.0 ); board_shader.enable( bShader::B_FRAGMENT ); board_shader.bind( bShader::B_FRAGMENT ); glActiveTextureARB( GL_TEXTURE0_ARB ); glEnable(GL_TEXTURE_2D); ball_num.bind(); glMultiTexCoord3fARB( GL_TEXTURE1_ARB, 0.0f, 1.0f, 0.0f ); glMultiTexCoord3fARB( GL_TEXTURE2_ARB, 0.0f, 0.1f, 0.0f ); float lx = 0, ly = 0.3f, lz = 0; glEnable( GL_TEXTURE_2D ); desk.bind(); glBegin( GL_TRIANGLE_STRIP ); glNormal3f( 0.0f, 1.0f, 0.0f ); for( int i=0; i<DESK_SEGMENTS; ++i ) { glMultiTexCoord2dARB( GL_TEXTURE0_ARB, desk_data[i].tx, desk_data[i].ty ); glMultiTexCoord3dARB( GL_TEXTURE3_ARB, desk_data[i].x-lx, 0.0-ly, desk_data[i].y-lz ); glVertex3d( desk_data[i].x, 0.0, desk_data[i].y ); } glEnd(); Profiler.begin("ball_mgr::draw_bands"); glActiveTextureARB( GL_TEXTURE0_ARB ); glEnable(GL_TEXTURE_2D); band_tex.bind(); glDisable( GL_CULL_FACE ); for( int i=0; i<band_size; ++i ) { band[i]->draw(); } glMultiTexCoord3dARB( GL_TEXTURE1_ARB, 0.0, 1.0, 0.0 ); glBegin( GL_TRIANGLE_STRIP ); for( int i=0; i<BOARD_SEGMENTS; ++i ) { glNormal3d( 0.0, 1.0, 0.0 ); //glMultiTexCoord3fARB( GL_TEXTURE3_ARB, band_data[i].x, 0.4-ly, band_data[i].y ); glMultiTexCoord2dARB( GL_TEXTURE0_ARB, ((i%2)==0)?0.0:1.0, 0.0 ); glVertex3d( band_data[i].x, 0.4, band_data[i].y ); //glMultiTexCoord3fARB( GL_TEXTURE3_ARB, board_data[i].x, 0.4-ly, board_data[i].y ); glMultiTexCoord2dARB( GL_TEXTURE0_ARB, ((i%2)==0)?0.0:1.0, 1.0 ); glVertex3d( board_data[i].x, 0.4, board_data[i].y ); } //glMultiTexCoord3fARB( GL_TEXTURE3_ARB, band_data[0].x, 0.4-ly, band_data[0].y ); glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 1, 0 ); glVertex3d( band_data[0].x, 0.4, band_data[0].y ); //glMultiTexCoord3fARB( GL_TEXTURE3_ARB, board_data[0].x, 0.4-ly, board_data[0].y ); glMultiTexCoord2fARB( GL_TEXTURE0_ARB, 1, 1 ); glVertex3d( board_data[0].x, 0.4, board_data[0].y ); glEnd(); glColor3f(0.0f,0.0f,0.2f); glBegin( GL_TRIANGLE_STRIP ); for( int i=0; i<BOARD_SEGMENTS; ++i ) { glVertex3d( band_data[i].x, 0.0, band_data[i].y ); glVertex3d( band_data[i].x, 0.4, band_data[i].y ); } glVertex3d( band_data[0].x, 0.0, band_data[0].y ); glVertex3d( band_data[0].x, 0.4, band_data[0].y ); glEnd(); board_shader.disable( bShader::B_FRAGMENT ); Profiler.begin("ball_mgr::draw_balls"); draw_balls(); Profiler.end("ball_mgr::draw_balls"); if( power > 0.0 ) { bSystem::video_sys.set_matrix_2d(); glDisable( GL_TEXTURE_2D ); glDisable( GL_DEPTH_TEST ); glColor3f( 0.0f, 0.0f, 0.0f ); glBegin( GL_TRIANGLE_STRIP ); glVertex2i( 100, 500 ); glVertex2i( 100, 560 ); glVertex2i( 700, 500 ); glVertex2i( 700, 560 ); glEnd(); glBegin( GL_TRIANGLE_STRIP ); glColor3f( 0.0f, 1.0f, 0.0f ); glVertex2i( 102, 502 ); glVertex2i( 102, 558 ); glColor3d( power/18.2, 1.0-power/18.2, 0.0f ); glVertex2d( 100.0 + (598.0*power)/18.2, 502 ); glVertex2d( 100.0 + (598.0*power)/18.2, 558 ); glEnd(); } Profiler.end("ball_mgr::draw_bands"); }