AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi glDeleteTextures gibt Speicher nicht frei
Thema durchsuchen
Ansicht
Themen-Optionen

glDeleteTextures gibt Speicher nicht frei

Ein Thema von EWeiss · begonnen am 23. Mai 2008 · letzter Beitrag vom 21. Jul 2008
Antwort Antwort
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#1

Re: glDeleteTextures gibt Speicher nicht frei

  Alt 23. Mai 2008, 12:21
Ok, der Texturloader vom Jan Horn sollte nicht das Problem sein, den hab ich früher auch verwendet.
Ich glaube, du lädst die Texturen doppelt. Die if-Abfragen
Delphi-Quellcode:
if (aCovers.count <= QuadCount) then
// ...
if (aCovers.count >= QuadCount) then
überlagern sich, falls aCovers.Count = QuadCount ist. Außerdem: kann es ein, dass du aCovers nicht mehr freigibst (oder hast du das aCovers.Free einfach nur nicht mit in den Post kopiert)?

Ich würd die Lade-Routine mal umschreiben, im Moment ist die noch relativ umständlich:

Delphi-Quellcode:
if FileExists(Path + UpperCase('Data\images\CompDisk\Default\NoCover.jpg')) then
   LoadTexture(Path + 'Data\images\CompDisk\Default\NoCover.jpg', NoCoverTexture, False)
else
   NoCoverTexture := 0;

aCovers := TStringList.Create;
try
  if CoverPath <> Path then
     ScanDirectory(CoverPath, 'bmp, tga, jpg', True);

  aFilledQuads := 0;
  for i:=0 to aCovers.Count-1 do
  begin
    // den Dateinamen extrahieren
    aFileName := ExtractFileName(aCovers[i]);
    // die Dateiendung abscheiden
    aFileName := Copy(aFileName, 1, length(aFileName) - length(ExtractFileExt(aFileName)));
    // Upper-Case machen
    aFileName := AnsiUpperCase(aFileName);

    if (aFileName = 'COVER') or (aFileName = 'CDLABEL') then
    begin
      LoadTexture(aCovers[i], quadTexture[i], False);
    end else
      QuadTexture[i] := NoCoverTexture;

    inc(aFilledQuads);
    
    // Schleife beenden, falls alle Elemente von quadTexture gefüllt sind
    if i >= High(quadTexture) then
       break;
  end;
 
  // Falls noch ein paar ungefüllte Quads übrig sind, werden die auch noch mit der
  // NoCoverTexture gefüllt
  for i:=aFilledQuads to High(quadTexture) do
    QuadTexture[i] := NoCoverTexture;
finally
  aCovers.Free;
end;
Keine Garantie auf Korrektheit, hab den Quelltext ohne offene IDE geschrieben
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  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 22:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz