Shogoki Geschrieben 25. Februar 2009 Geschrieben 25. Februar 2009 Hallo. Irgendjemand hier kennt sich doch bestimmt mit SDL.Net aus . Da hab ich nämlich mal ne Frage: Kann man da irgendwie auch die GPU nutzen? Um die CPU zu entlasten? Hoffe jemand kann mir helfen Schonmal Danke im vorraus. MfG Shogoki
Argbeil Geschrieben 2. März 2009 Geschrieben 2. März 2009 Die verwenden ja intern OpenGL (oder DirectX?), dadurch wird automatisch die GPU für Dinge wie Blitting oder Transformation verwendet. Wenn, z.B. bei einem Moorhuhn-Klon die CPU Last zu hoch ist (z.B. bei über 50% bei einem E6750) hat man in der Regel einen anderen Fehler gemacht. Begrenzt du die Framerate?
Shogoki Geschrieben 2. März 2009 Autor Geschrieben 2. März 2009 Danke für die Antwort erstmal. Also soweit Ich weis arbeitet SDL mit DirectX. Aber Ich habe schon öfter gelesen, dass SDL die GPU nicht nutzen würde, daher dachte ich das halt. Die Framerate begrenze ich auf 60 so: Events.TargetFps = 60; // FPS auf 60 setzen
Argbeil Geschrieben 2. März 2009 Geschrieben 2. März 2009 Sinkt die CPU Last wenn du dort 30 einstellst?
Shogoki Geschrieben 2. März 2009 Autor Geschrieben 2. März 2009 Hab es eben mal auf 20 getestet aber CPU Auslastung ist immer noch bei ca. 50 %
Argbeil Geschrieben 2. März 2009 Geschrieben 2. März 2009 Wie sieht denn deine Game-Loop aus? Du könnstest mit einem Profiler prüfen wo die meiste Rechenzeit verloren geht. Gruß, Manu
Shogoki Geschrieben 2. März 2009 Autor Geschrieben 2. März 2009 Also meine Game Loop ist diese hier: public void SDL_Tick(object sender, TickEventArgs e) { scroll.CheckScroll(10,Mouse.MousePosition); if (!(pause || name)) { // Wenn Pause oder Namenseingabe Bewegung überspringen // Bewegung der Fische Direction dir = new Direction(true); for (int i = 0; i <= 3; i++) { fish[0, i].Move(3, dir); //fischen um 3 PixelproTick verschieben //Fische wenn sie am linken Rand angekommen sind wieder an den rechten zeichnen if (fish[0, i].Rectangle.X <= 3) CreateFish(i); if((fish[0,i].Rectangle.Y + fish[0,i].Rectangle.Height <= 6)) CreateFish(i); } } //Auf Sur_Game (Spielwelt zeichnen) Sur_game.Blit(background[0,bg_index]);//hintergrund zuerst zeichnen //Fische zeichnen for (int i = 0; i <= 3; i++) { //Fischanimation in dei Rectangles Blitten fish[0, i].Draw(Sur_game); } pflanze.Draw(Sur_game); Sur_game.Update(); //Surface Updaten //Auf screen(Benutzerbildschirm) zeichnen //Ausschnitt d. Spieloberfläsche zeichnen screen.Blit(Sur_game, Rect_screen, scroll.Rect); //Txt_Sprites zeichnen screen.Blit(txt_score, Rect_score); screen.Blit(txt_time, Rect_time); //Wenn Pause ist dann Pausetext zeigen if (pause || name) screen.Blit(txt_pause, Rect_pause); //munition zeichnen muni.Draw(screen); //Cursor zeichnen cursor[cur_index].Draw(screen, Mouse.MousePosition); screen.Update(); // Surface Updaten } Ich hab noch nie nen Profiler benutzt. Wie stell ich das an?
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden