• Advertisement

Archived

This topic is now archived and is closed to further replies.

Some Optimisation

This topic is 6246 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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 ]

Share this post


Link to post
Share on other sites
Advertisement
Guest Anonymous Poster
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....

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

  • Advertisement