Advertisement

Some Optimisation

Started by January 13, 2001 07:50 AM
1 comment, last by PsYchOtroW 24 years ago
Hi, i am developing an Isomatric Engine but my Drawing function kicks my FPS down! Are there any Optimisation?
  
	int WhereX; // Where are we currently rendering on the map?

	int WhereY;

	WhereY = WorldY;
	WhereX = WorldX;

	for(int y = -6; y < 28; y++)
	{   
		for(int x = 0; x < 10; x++)   
		{	
			int tilex = x+2*X_Overlap*x+(X_Overlap)*(y&1);
			int tiley = y+Y_Overlap*y;

			// Set the Background Pos

			tile_texbg.x = tilex;
			tile_texbg.y = tiley;
			// Set the Middleground Pos

			tile_texmg.x = tilex;
			tile_texmg.y = tiley;

			tile_texbg.curr_frame = level->Map[0][WhereX][WhereY].TileID; // First Layer ( Background )

			tile_texmg.curr_frame = level->Map[1][WhereX][WhereY].TileID; // Second Layer ( Middle ground )

				
			if ( drawBG == true )			
				tile_texbg.Draw_Graphics( );
			if ( drawMG == true )
				tile_texmg.Draw_Graphics( );					

			
			WhereX++;
		}
		WhereY++;
		WhereX = WorldX;
	}
  
Thanx for your help. Lutz Hören [ Power Productions ]
psYchOtroW
Hell yeah, get rid of all those pointers...
und dann mach die variablen tilex u. tiley nur einmal vor den schleifen oder besser noch lass sie ganz wegfallen.
weg mit all den zeigern am besten guckst dir das nochmal an du verschwendest und verlangsamst extrem mit diesem algo verdammt viel ich kenn den rest ja nicht aber es sieht so aus also könntest du das ganze ziemlich stark verringern hängt noch stark davon ab ob du mit cpp oder c arbeitest diese ganzen doppelten aktionen sind zum kotzen werde sie los kennst du asm? falls du wirklich optimieren willst wär das was für dich!aber für ne iso engine wahrscheinlich überflüssig das müsste auch so schon neganze menge bringen wenn du die zeiger die ganzen doppelten sachen etc loswirst guck dir das nochmal genau an und überleg was du da machst....
Advertisement
Here you go.

int WhereX; // Where are we currently rendering on the map?    
int WhereY;    
WhereY = WorldY;    
WhereX = WorldX;    

const int minY = -6;
const int maxY = 28;
const int minX = 0;
const int maxX = 10;
const int 2X_Overlap = 2 * XOverlap;

int tileX = -2XOverlap;
int tileY = minY + ((minY - 1) * Y_Overlap);

int tileXIncrement = 2XOverlap;
int tileYIncrement = Y_Overlap;
int tileXOverlapFlip = 0;

for(int y = minY; y < maxY; y++)    
{
    //only calculate y when y needs to be changed
    tileY += tileYIncrement;
    
//only change when y changes
    tileXOverlapFlip = XOverlap * (1 & y);

    for(int x = minX; x < maxX; x++)           
    {                
        tileX = ( tileX + tileXIncrement + tileXOverlapFlip);            
                
        if( drawBG )                            
        {
            // Set the Background Pos            
            tile_texbg.x = tilex;            
            tile_texbg.y = tiley;            

            // First Layer ( Background )
            tile_texbg.curr_frame = level->Map[0][WhereX][WhereY].TileID;             
    
            // Draw
            tile_texbg.Draw_Graphics();
        }
        
        if( drawMG )
        {
            // Set the Middleground Pos            
            tile_texmg.x = tilex;            
            tile_texmg.y = tiley;

            // Second Layer ( Middle ground )                            
            tile_texmg.curr_frame = level->Map[1][WhereX][WhereY].TileID; 

            // Draw
            tile_texmg.Draw_Graphics();                                            
        }

        WhereX++;        
    }        
    
    WhereY++;        

    WhereX = WorldX;    
}  


Edited by - DerekDay on January 17, 2001 5:48:24 PM

This topic is closed to new replies.

Advertisement