ThE pRiSoN iN mInD
Mitglied
Hallo
Meine TileEngine funktioniert soweit eigentlich gut.
Leider krieg ich auf unserem alten PC (P3 750 Mhz, Rage 128Pro) nur 10 Frames.
Ja, dieser PC ist schon ziemlich lahm, da sollte aber schon etwas mehr drin liegen.
Age of Empires 2 beispielsweise arbeitet ja auch mit Tiles und läuft auch auf noch langsameren PC's flüssig.
Wenn ich die Funktion DrawPrimitive auskommentiere läufts auf 30 Frames. (hab den Verdacht, dass das auf dieser Grafikkarte irgendwie begrenzt ist und gar nicht mehr möglich ist)
Ich Poste hier mal den Code, der die Tiles Zeichnet.
Vielleicht hab ich aber auch irgendwo einen sehr wichtigen Renderstate oder so vergessen.
Hab schon in einem Forum gefragt, dort krieg ich aber keine Antworten mehr und die Antworten, die ich bisher bekam waren zwar hilfreich und ich konnte meinen Code sehr verbessern, halfen aber nicht den Kern des Problems zu finden.
Hier der Link
http://www.zfx.info/DisplayThread.php?TID=19911
Mein aktueller Code:
Meine TileEngine funktioniert soweit eigentlich gut.
Leider krieg ich auf unserem alten PC (P3 750 Mhz, Rage 128Pro) nur 10 Frames.
Ja, dieser PC ist schon ziemlich lahm, da sollte aber schon etwas mehr drin liegen.
Age of Empires 2 beispielsweise arbeitet ja auch mit Tiles und läuft auch auf noch langsameren PC's flüssig.
Wenn ich die Funktion DrawPrimitive auskommentiere läufts auf 30 Frames. (hab den Verdacht, dass das auf dieser Grafikkarte irgendwie begrenzt ist und gar nicht mehr möglich ist)
Ich Poste hier mal den Code, der die Tiles Zeichnet.
Vielleicht hab ich aber auch irgendwo einen sehr wichtigen Renderstate oder so vergessen.
Hab schon in einem Forum gefragt, dort krieg ich aber keine Antworten mehr und die Antworten, die ich bisher bekam waren zwar hilfreich und ich konnte meinen Code sehr verbessern, halfen aber nicht den Kern des Problems zu finden.
Hier der Link
http://www.zfx.info/DisplayThread.php?TID=19911
Mein aktueller Code:
Code:
// DRAWTILES ==================================================================================================================
CTileMap::DrawTiles()
{
// Tiles Zeichnen
int x_Index, y_Index;
int j, i;
float x = 0, y = 0;
// Schleife das erste Mal ausführen und Vertices erstellen.
for(j=0; j<m_MapHeight; j++)
{
// Aktuelles Tile ist oberhalb des sichtbaren Bereichs
if(y-y_Scroll < -(TILE_HEIGHT))
{
y += y_offset;
continue;
}
// Aktuelles Tile ist unterhalb des sichtbaren Bereichs
else if(y-y_Scroll >= SCR_HEIGHT)
break;
for(i=0; i<m_MapWidth; i++)
{
// Aktuelles Tile zu weit links
if(x-x_Scroll < -TILE_WIDTH)
{
x += TILE_WIDTH;
continue;
}
// Aktuelles Tile zu weit rechts
else if(x-x_Scroll >= SCR_WIDTH)
break;
else
{
// Vertices aktualisieren
/*
Texturkoordinaten
tu,tv
P0 (0,0) ______(1,0) P1
| /|
| / |
| / |
P2 (0,1)|/_____|(1,1) P3
*/
vertices[0].x = x-x_Scroll; // P0
vertices[0].y = y-y_Scroll;
vertices[1].x = (float)x-x_Scroll+TILE_WIDTH; // P1
vertices[1].y = y-y_Scroll;
vertices[2].x = x-x_Scroll; // P2
vertices[2].y = y-y_Scroll+TILE_HEIGHT;
vertices[3].x = x-x_Scroll+TILE_WIDTH; // P3
vertices[3].y = y-y_Scroll+TILE_HEIGHT;
for(int n=0; n<10; n++)
{
if(TileMap[j][i][n] == 0 && n != 0) // Keine weiteren Tiles werden angegeben
{
break;
}
else
{
x_Index = (TileMap[j][i][n])%4;
y_Index = (int)(TileMap[j][i][n])/4;
vertices[0].tu = 0.25f*(float)x_Index;
vertices[0].tv = 0.25f*(float)y_Index;
vertices[1].tu = 0.25f*(float)x_Index+1.0f*0.25f;
vertices[1].tv = 0.25f*(float)y_Index;
vertices[2].tu = 0.25f*(float)x_Index;
vertices[2].tv = 0.25f*(float)y_Index+1.0f*0.25f;
vertices[3].tu = 0.25f*(float)x_Index+1.0f*0.25f;
vertices[3].tv = 0.25f*(float)y_Index+1.0f*0.25f;
VOID* pVertices;
g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0);
memcpy( pVertices, vertices, sizeof(vertices) );
g_pVB->Unlock();
// Rendern
m_lpD3DDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
m_lpD3DDevice->SetTexture(0,TileTexture);
m_lpD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);
}
}
x += TILE_WIDTH;
}
}
if(j&1) // Ungerade Zeile (Nächste Zeile gerade!)
x = 0;
else
x = x_offset;
y += y_offset;
}
x = 0;
y = 0;
} // DRAWTILES