AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Andorra2D] Speicheraunutzung steigt bei ParticleSystem
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra2D] Speicheraunutzung steigt bei ParticleSystem

Ein Thema von Bääääär · begonnen am 17. Apr 2007 · letzter Beitrag vom 18. Apr 2007
Antwort Antwort
Bääääär

Registriert seit: 12. Apr 2007
Ort: Thüringen
28 Beiträge
 
Delphi 2005 Personal
 
#1

[Andorra2D] Speicheraunutzung steigt bei ParticleSystem

  Alt 17. Apr 2007, 16:47
Hallihallo.

Nun bin ich endgältig dem Andorra Wahn verfallen und bei meiner nachmittäglichen Programmierarbeit ist mir etwas aufgefallen:

Jedesmal, wenn ich mit einem ParticleSystem einen Partikel erzeuge, steigt meine Speicherausnutzung um 10-70 KB (). Liegt es an meinem Code, wenn Ja, ich finde den Fehler nicht.

So nutze ich das System:

Erzeugen:
Delphi-Quellcode:
BallHitPS:=TAdParticleSystem.Create(Form1.AdDraw1);
BallHitPS.Texture:=Form1.AdImageList1.Find(cBallHitParticleTextureName).Texture;
BallHitPS.DefaultParticle.LoadFromFile(cBallHitParticleFile);
Freieben sollte klar sein (BallHitPS.Free.

Zeichnen:
Delphi-Quellcode:
BallHitPS.Move(Form1.AdPerCounter.TimeGap / 1000);
BallHitPS.Draw(0,0);
Und hier steigt die Auslastung:BallHitPS.CreateParticles(70,TAdParticle,aPoint.X, aPoint.Y); Woran kann das liegen?

Vielen Dank,
Bääääär

PS: Ich kann auch gerne das ganze Project anhängen, aber ich glaube, das nutzt nichts, weil die Speichernutzung NUR beim Erzeugen dieser Partikel steigt.
  Mit Zitat antworten Zitat
Bääääär

Registriert seit: 12. Apr 2007
Ort: Thüringen
28 Beiträge
 
Delphi 2005 Personal
 
#2

Re: [Andorra2D] Speicheraunutzung steigt bei ParticleSystem

  Alt 17. Apr 2007, 16:58
Soeben ist mir das auch noch bei einem "Erster-PartikelSystem-Versuch" - Projekt aufgefallen:
Hier steigt die Speicherauslastung demzufolge kontinuierlich.

Delphi-Quellcode:
unit unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AdDraws, AdClasses, ADparticles;

type
  TForm1 = class(TForm)
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    AdDraw1:TAdDraw;
    AdImageList1:TPictureCollection;
    partsys:TAdParticleSystem;
    AdPerCounter:TPerformanceCounter;
    procedure Idle(Sender:TObject;var Done:boolean);
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  xpos,ypos:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  AdDraw1 := TAdDraw.Create(self);
  AdDraw1.DllName := 'AndorraDX93D.dll';
  if AdDraw1.Initialize then
  begin
    AdPerCounter := TPerformanceCounter.Create;
    Application.OnIdle := Idle;

    AdImageList1 := TPictureCollection.Create(AdDraw1);
    with AdImageList1.Add('sprite') do
    begin
      Texture.LoadGraphicFromFile('sprite.bmp',true,clFuchsia);
    end;
    AdImageList1.Restore;

    partsys := TAdParticleSystem.Create(AdDraw1);
    partsys.Texture := AdImageList1.Items[0].Texture;
    partsys.DefaultParticle.LifeTime:=0.3;

  end
  else
  begin
    ShowMessage('Error while initializing Andorra 2D. Try to use another display'+
                'mode or another video adapter.');
    halt;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  AdImageList1.Free;
  AdPerCounter.Free;
  AdDraw1.Free;
end;

procedure TForm1.Idle(Sender: TObject; var Done: boolean);
var
i:integer;
begin
  if AdDraw1.CanDraw then
  begin
    AdPerCounter.Calculate;
    Caption := 'FPS:'+inttostr(AdPerCounter.FPS);
    AdDraw1.ClearSurface(clblack);

    AdDraw1.BeginScene;
    partsys.CreateParticles(2,TAdParticle,xpos,ypos);

    PartSys.Move(AdPerCounter.TimeGap / 2000);
    partsys.Draw(0, 0);

    AdDraw1.EndScene;

    AdDraw1.Flip;
  end;
  Done := false;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  xpos:=x-form1.left;
  ypos:=y-form1.top;
end;

end.
Der bei den Demos liegende ParticleEditor scheint solche Probleme nicht zu kennen...

[Edit] Der ParticleEditor nutz die Procedure PartSys.Dead, die, wie ich mal vermute, "ausgestorbene" Partikel entfernt. bei diesem Projekt klappt das sogar, mit ".Dead;" nach dem Zeichenvorgang klappts. Bei meinem eigentlichen Problem-Projekt leider nicht.[/Edit]

[Edit] In dem selben Problem-Projekt befindet sich ein zweites PartikelSystem, welches ohne .Dead; den Speicher genauso füllt, wie das Erste. Im Vergleich zum Ersten hingegen macht es mit .Dead; keine Probleme mehr. Sehr eigenartig[/Edit]
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

Re: [Andorra2D] Speicheraunutzung steigt bei ParticleSystem

  Alt 17. Apr 2007, 17:31


Ich suche nach dem Fehler! Danke für den Hinweis!
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Bääääär

Registriert seit: 12. Apr 2007
Ort: Thüringen
28 Beiträge
 
Delphi 2005 Personal
 
#4

Re: [Andorra2D] Speicheraunutzung steigt bei ParticleSystem

  Alt 17. Apr 2007, 17:45
Moment: Mir ist eben noch was aufgefallen. BallHitPS erzeugt etwa alle 1,5 sek 70 Partikel. Eine gewisse Zeit lang steigt die Speicherausnutzung mit dem Erzeugen dieser 70 stück, dann bleibt sie etwa 0,5MB über der eigentlichen auslastung stehen. Immerhin steigt sie nicht noch weiter. Es kann also sein, dass die Partikel nur sehr lange existieren (nicht gelöscht werden), sie aber nicht mehr zu sehen sind. Ab dem Zeitpunkt, wo sie dann gelöscht werden, steigt die Speichernutzung logischerweise nicht mehr. Es muss also nicht zwangsläufig an deiner ParticleEngine liegen. Ich hoffe mal diese Variante ist die richtige... ^^
  Mit Zitat antworten Zitat
Benutzerbild von g0rmed
g0rmed

Registriert seit: 3. Apr 2007
Ort: Sülzetal
64 Beiträge
 
Delphi 2005 Personal
 
#5

Re: [Andorra2D] Speicheraunutzung steigt bei ParticleSystem

  Alt 18. Apr 2007, 09:26
Das gleich Problem habe ich denke ich auch bei mir. Umso läge ich spiele, umso unspielbarer werden die Framerates. Wenn ich anfangs 300fps habe habe ich nach 2 Spielen noch 20fps. Ich nutze bis zu 100 Sprites und für Explosionen 20-50 Partikel. Wenn mein Code von nöten ist werde ich ihn auch noch posten.
Hans
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#6

Re: [Andorra2D] Speicheraunutzung steigt bei ParticleSystem

  Alt 18. Apr 2007, 16:46
In der "Simple-Particles" Demos kam die steigene Speicherauslastung nur, da ich (blöderweise), wie Bääääär schon festgestellt hat, das Dead vergessen habe. Mit Dead konnte ich keine steigende Speicherauslastung feststellen, ein Memory-Leak gibt es auch nicht. Falls sich bei jemanden von euch die Speicherauslastung trotz Dead drastisch erhöhen sollte, dann sagt mir bitte nochmal bescheid...

Nochmal Danke für den Hinweis,
Andreas alias igel457
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Bääääär

Registriert seit: 12. Apr 2007
Ort: Thüringen
28 Beiträge
 
Delphi 2005 Personal
 
#7

Re: [Andorra2D] Speicheraunutzung steigt bei ParticleSystem

  Alt 18. Apr 2007, 18:26
Ich habe nach einer längeren Testphase weiter kein Speicherproblem festgestellt und gehe deswegen mal von der Idee in meinem letzten Post aus. Sollte sich was ändern, melde ich mich.

@igel457: Schreibe das Dead; und die Folgen, wenn man es vergisst bitte noch in die Tutorials auf der Andorra2D- Page und hier in der DP. ^^ Da steht es nämlich nicht drin, soweit ich weiß.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#8

Re: [Andorra2D] Speicheraunutzung steigt bei ParticleSystem

  Alt 18. Apr 2007, 18:34
Gut, dass du mich an das "PartSys.Dead;" erinnerst.
[edit]Auf der Website steht es nun richtig, hier in der DP dauert es wohl noch ein bissl, weil ich die Beiträge in der Tutorialsektion nicht mehr bearbeiten kann (etwas suboptimal, wenn man mich fragt).[/edit]
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz