Why so SLOW GPU.

Started by
1 comment, last by benjamin bunny 17 years, 8 months ago
Hi all, I have comeback to a project that I banged together some years ago now; After numerous h/w upgrades, this code is still only hitting 60 fps. At the time I thought that this was the hardware limit! GeForce2 (without asm) (Although; running on win 98 SE has 25% speed increase over Win XP) As this is quite unsettling. I would like some suggestion as to why this FPS is still unchanged. FPS Code:

static float fps           = 0.0f;
static float previousTime  = 0.0f;	
	static char  strFPS[20]    = {0};
	float currentTime = (GetTickCount() * 0.001f);
 ++fps;	// Increment the FPS counter
if( currentTime - previousTime > 1.0f )
    	{
previousTime = currentTime;
//g_Log->printf(LOG_WARNING,"FPS: %d", int(fps));
sprintf(strFPS, "FPS: %d", int(fps));
SetWindowText(Main->hWnd, strFPS);
fps = 0.0f;
 	}

Set Camera

	POINT mousePos;	
	int mid_x = wndWidth  >> 1;	
	int mid_y = wndHeight >> 1;	
	float angle_y  = 0.0f;				
	float angle_z  = 0.0f;							
	GetCursorPos(&mousePos);	
	if( (mousePos.x == mid_x) && (mousePos.y == mid_y) ) return;
	SetCursorPos(mid_x, mid_y);
	angle_y = (float)( (mid_x - mousePos.x) ) / 1000;		
	angle_z = (float)( (mid_y - mousePos.y) ) / 1000;
	mView.y += angle_z * 2;
	if(mView.y > 3.5f)		mView.y = 3.5f;
	if(mView.y < 0.4f)		mView.y = 0.4f;
	Rotate_Position(-angle_y);

Draw Cube Code: void OGL_::DrawTile(float Y){

glBindTexture(GL_TEXTURE_2D,TextureArray[Dung[CDX][CDY].texID[TFACE_Front]]);
    glBegin(GL_QUADS);
     glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
     glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
     glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f + Y, 1.0f);
     glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f + Y,  1.0f);
    glEnd();
    glBindTexture(GL_TEXTURE_2D,TextureArray[Dung[CDX][CDY].texID[TFACE_Back]]);
    glBegin(GL_QUADS);
     glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
     glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f + Y, -1.0f);
     glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f + Y, -1.0f);
     glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
    glEnd();
    glBindTexture(GL_TEXTURE_2D,TextureArray[Dung[CDX][CDY].texID[TFACE_Top]]);
    glBegin(GL_QUADS);
     glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f + Y, -1.0f);
     glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f + Y,  1.0f);
     glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f + Y,  1.0f);
     glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f + Y, -1.0f);
    glEnd();
    glBindTexture(GL_TEXTURE_2D,TextureArray[Dung[CDX][CDY].texID[TFACE_Right]]);
    glBegin(GL_QUADS);
     glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
     glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f + Y, -1.0f);
     glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f + Y,  1.0f);
     glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);	glEnd();
     glBindTexture(GL_TEXTURE_2D,TextureArray[Dung[CDX][CDY].texID[TFACE_Left]]);
    glBegin(GL_QUADS);
     glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
     glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
     glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f + Y,  1.0f);
     glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f + Y, -1.0f);
    glEnd();


void OGL_::Draw_HighLitTile(float Yh){
    float Y = Yh + 1.02f;
    glBindTexture(GL_TEXTURE_2D,TextureArray[TFACE_Top_HighLight]);
    glBegin(GL_QUADS);
      glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  Y, -1.0f);
      glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  Y,  1.0f);
      glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  Y,  1.0f);
      glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  Y, -1.0f);
    glEnd();
};
[/source

Draw Scene

     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     glLoadIdentity();
     TargetLookAt();
     glEnable(GL_TEXTURE_2D);
     glColor3f(1.0f,1.0f,1.0f);
     for( CDX=1; CDX<MAP_X; CDX++ ) {
       for( CDY=1; CDY<MAP_Y; CDY++)	{
	glPushMatrix();
        glTranslated(TsX[CDX][CDY],0,TsZ[CDX][CDY]);
	  Draw_Tile(Dung[CDX][CDY].height);
	if( TilesSelected[CDX][CDY] == true )
	  Draw_HighLitTile(Dung[CDX][CDY].height);
	glPopMatrix();
	}
    }


Draw M3d models


  #pragma omp parallel for
  for(n=0;n<64;n++)
  {
    glPushMatrix();
    glTranslated(npc[n].x,npc[n].y,npc[n].z);
      pModel[npc[n].mdl]->draw();
    glPopMatrix();
  }

All suggestions are welcome [needed]; TIA
Advertisement
Smells of vsync.
First question in the Forum FAQ. Sigh

____________________________________________________________www.elf-stone.com | Automated GL Extension Loading: GLee 5.00 for Win32 and Linux

This topic is closed to new replies.

Advertisement