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