Einzelnen Beitrag anzeigen

Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#175

AW: Shape Wars - Version 1.0

  Alt 15. Apr 2011, 12:33
Wenn du die Texture an einer liste bindest so wie ich das mit meinem TextureLoader (Array of Texture) mache
spielt die performance keine rolle wenn es dir um geschwindigkeit geht da diese zur jeder zeit abrufbar sind.

Beim Textureloader von Sulako bist du nun mal gebunden und kannst nicht mal so einfach eine Texture unmerklich wechsel.
Warum willst du hier was vergleichen du gibst einfach die Texture im Array an und fertig.

Um Texturen einzuladen benötigst du keine CPU.. bzw .. hast keine CPU auslastung.
In meinem Plugin verwende ich (mit meinem Textureloader) eine AVI Datei wo jedes Frame
einzeln in eine Texture gewandelt wird und das in Realzeit.

CPU := CPU <> 0

PS:
Das AVI ist 24MB groß da kannst dir vorstellen wieviele Frames dort enthalten sind.
gruss
Naja, ich meinte das ganze so, dass ich all meine Gegner in einer einzigen Liste habe, und diese beim Rendern halt durchgehe. Und mit wenigen Texturwechseln muss ich diese Liste halt 5x durchgehen => Mehr CPU-Auslastung, mit vielen TexturWechseln nur einmal => Mehr GPU-Auslastung.

Grundsätzlich sollte man Texturewechsel immer meiden. Dein Code sollte darauf ausgerichtet sein, dass er gleich mit einem Durchlauf alles ohne Texturwechsel zeichnen kann.
Dh. gruppiere einfach Entities mit der gleichen Texture ID ala~
Delphi-Quellcode:
TTextureEntities = record
  TextureID: DWord;
  Entities: Array of Pointer; // Pointer = Klasseninstanzen
end;

// oder noch besser

TTextureEntities = class(TList)
public
  property TextureID: DWord; // strg+shift+c
  procedure Render();
end;
{Items[] beinhaltet dann die Instanzen; per Add/Delete/... kann es nun verwaltet werden}
EDIT:
@EWeiss
Du weißt aber schon, dass Texturen auf den VRam geladen werden und wenn dieser Speicher nicht allzu groß ist, es zu Fehlern führen wird?
Heutzutage gibts noch Rechner, die < 64 mb Video RAM haben!

Wenn so ein AVI Video 24 Frames/Sekunde hat und eine Länge von etwa 1 Min und pro Frame etwa eine Auflösung von 640*480*3 (RGB; unkomprimiert 900kb; komprimiert ~ 80 kb [JPEG Komprimierung]), dann wären das etwa 80 * 24 * 60 ~ 112,5 mb.

Damit hättest du ein Problem!
Stimmt, ist mir auch schon eingefallen, dass man einfach verschiedene Listen machen kann...werd ich glaub ich einfach so machen, das dürfte das optimierteste sein
Und die Klasse TList benutze ich ja jetzt schon, bloß halt eine lange Liste mit allen Gegnern, egal welcher Typ.

die auch schon etwas weiter gehen als das was man auf DGl lernt
Bist du sicher, dass du über die DGL-Wiki hinaus bist

Aber Gruppieren sollte geht sicher in die richtige Richtung.
Wie wäre es mit unterschiedlichen Listen für die Gegner?
Sagen wir ich habe mir die DGL-Wiki komplett durchgelesen bzw sie komplett durchgearbeitet, und konnte mir dieses Frage nicht selbst beantworten.
Wie schon oben gesagt, es wird auf mehrere Listen hinauslaufen.

@Mleyen: Leider ja, doch ich finde den Fehler dabei auch nicht. Zur Textdarstellung benutze ich im Moment die Textsuite, was ja so ziemlich das beste ist, was es im Moment gibt. Aber ich überlege sowieso das ganze auf eine deutlich simplere (im Quelltext implementierte) Vektorfont umzustellen, dann dürfte dieses Problem Geschichte sein.

[Edit]
o_o da war ja noch eine ganze andere Seite mit Diskussionen zu dem Thema ^^
Aber ich denke mal zu dem Thema ist alles gesagt, es ging mir bei der Frage eig nur darum die Aufrufe von glBindTexture zu minimieren, das Laden geschieht ja nur einmal am Anfang (alles andere wäre ziemlich sinnlos ^^). Ich werds einfach auf mehrere Listen umstellen, sollte dann das Beste sein.
[/Edit]

Geändert von Edlmann (15. Apr 2011 um 12:41 Uhr)
  Mit Zitat antworten Zitat