AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Shape Wars - Version 2.0.0
Thema durchsuchen
Ansicht
Themen-Optionen

Shape Wars - Version 2.0.0

Ein Thema von Edlmann · begonnen am 23. Mär 2011 · letzter Beitrag vom 16. Apr 2013
Antwort Antwort
Edlmann

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

AW: Shape Wars - Version 1.0

  Alt 15. Apr 2011, 11: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 11:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Shape Wars - Version 1.0

  Alt 15. Apr 2011, 12:25
Kanns kaum abwarten
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Edlmann

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

AW: Shape Wars - Version 1.0

  Alt 15. Apr 2011, 13:59
Kanns kaum abwarten
Was jetzt genau?

Ach ja, ich werd übrigens bald (spätestens wenn ich nen neuen Gegner drinne habe) den Highscore zurücksetzen, da die Highscores von da aus älteren Versionen stammen und mit der aktuellen Version kaum noch schaffbar sind (sorry mleyen )
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Shape Wars - Version 1.0

  Alt 15. Apr 2011, 14:00
Dass die Partikel effizienter gezeichnet werden. Ich kanns mit Partikeln gar nicht spielen, deshalb schalte ich das immer ab!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Edlmann

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

AW: Shape Wars - Version 1.0

  Alt 15. Apr 2011, 14:12
Dass die Partikel effizienter gezeichnet werden. Ich kanns mit Partikeln gar nicht spielen, deshalb schalte ich das immer ab!
Da muss ich dich leider enttäuschen, an den Partikeln habe ich schon so viel wie möglich gemacht...aber du kannst ja einfach in der Settings.ini die Partikelanzahl runtersetzen so mit etwa 80 sieht es auch noch gut aus (300 ist normal).

Woran ich gerade schraube ist die Effizienz der Gegner ^^
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#6

AW: Shape Wars - Version 1.0

  Alt 15. Apr 2011, 15:46
@Edlmann: bloom effekt kennst du nicht?(oder hab ich mich falsch ausgedrückt?).
Wenn du auf deine Gegner/Effecte Bloom anwenden könntest, würden dieObjecte aussehen, als wenn sie aus Laserlicht wären. War bei GW:Evolved glaub ich auch, muss nochmal gucken.
War nen netter effect^^.

PS: Vllt könnte man anstatt x partikel. MAX partikel setzen. So das nur eine gewisse maxgrenze partikel sichtbar sein darf, ansonsten werden ältere aprupt entfernt. Und mit der MAxzahl kann man dann noch schön performance testen

MFG
Memnarch
  Mit Zitat antworten Zitat
Culxxaw

Registriert seit: 21. Okt 2008
40 Beiträge
 
#7

AW: Shape Wars - Version 1.0

  Alt 15. Apr 2011, 20:00
Für Gegner, die aussehen als wären sie aus laserlicht ist bloom aber ein bisschen überdimensioniert (Wenn ich so an die Performance denke...).
Der Effekt an sich wäre natürlich cool, sollte aber auch durch Texturen zu erreichen sein. Einfach halbtransparent und dann nen Weichzeichner drüber hauen...
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#8

AW: Shape Wars - Version 1.0

  Alt 16. Apr 2011, 09:47
Dass die Partikel effizienter gezeichnet werden. Ich kanns mit Partikeln gar nicht spielen, deshalb schalte ich das immer ab!
Man kann eh höherscorig () spielen, wenn man die Multiplier sieht. Mit DeathPartikelCount 10 bis 50 geht's ganz gut.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Edlmann

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

AW: Shape Wars - Version 1.0

  Alt 16. Apr 2011, 13:30
Mmh...so langsam regt mich Delphi echt auf ^^

Ich bin gerade dabei, eine im Quelltext implementierte Vektor-Font zu erstellen, damit das Flackern endlich verschwindet. Diese Funktioniert auch super, löst allerdings jedesmal, wenn ich an der Unit nix verändert habe (und auch manchmal wenn ich etwas verändert habe) eine Zugriffsverletzung aus, die ich absolut nicht nachvollziehen kann (vor allem da das ganze hin und wieder funktioniert). Ich hoffe dass mir jemand von euch helfen kann, denn ansonsten wird es bei der Textsuite mit dem Flackern bleiben, da ich schon mit dem Online-Highscore ähnliche Probleme hatte (habe dazu auch nen Thread hier in der DP gestartet, mir konnt niemand helfen), und mir eine zweite Unit wo dieser Fehler auftritt zu viel ist. Also hab ich mich entschlossen mal den Quelltext von meiner Vektorfont (teilweise) zu veröffentlichen, und schauen ob mir jemand von euch helfen kann.

Delphi-Quellcode:
unit VekFont;

interface

uses dglOpenGL, SysUtils, Dialogs;

type
  TLine = record
    x1, y1, x2, y2: Single;
  end;
  TSingleChar = record
    Length: Integer;
    Lines: array[0..6] of TLine;
  end;

procedure ResetAllLetters;
procedure SetupFont;
function SetUpLine(xx1, yy1, xx2, yy2: Single): TLine;
procedure RenderTextLine(Text: String; XPos, YPos, Size: Single);

var Letters: array[32..129] of TSingleChar;

implementation

procedure RenderTextLine(Text: String; XPos, YPos, Size: Single);
var x, i: Integer;
begin
 // Text := UpperCase(Text);
    glBegin(GL_LINES);
  for x := 0 to Length(Text) do
  with Letters[Ord(Text[x])] do
  begin
   for i := 0 to Length-1 do
   begin
     //Laut Compiler kommt hier die Exception her, funktioniert aber eig und ist Fehlerfrei in einer einzelnen Anwendung die nur die Font benutzt)
     glVertex2f(Lines[i].x1 * Size + XPos + Size * 5 * x, Lines[i].y1 * Size + YPos);
     glVertex2f(Lines[i].x2 * Size + XPos + Size * 5 * x, Lines[i].y2 * Size + YPos);
   end;
  end;
    glEnd;
end;

procedure ResetAllLetters;
var
  x: Integer;
  y: Integer;
begin
  for x := Low(Letters) to High(Letters) do
  begin
    Letters[x].Length := -1;
    for y := 0 to Length(Letters[x].Lines) do
    begin
      with Letters[x].Lines[y] do
      begin
        x1 := 0;
        x2 := 0;
        y1 := 0;
        y2 := 0;
      end;
    end;
  end;
end;

function SetUpLine(xx1, yy1, xx2, yy2: Single): TLine;
begin
  with Result do
  begin
    x1 := xx1;
    y1 := yy1;
    x2 := xx2;
    y2 := yy2;
  end;
end;

procedure SetupFont;
begin
  ResetAllLetters;
  //Space
  Letters[32].Length := 0;
  // !
  with Letters[33] do begin Length := 2; Lines[0] := SetUpLine(2, 0, 2, 1); Lines[1] := SetUpLine(2, 2, 2, 6); end;
  // Hier werden halt alle Buchstaben deklariert, sind insgesamt etwa 100 Stück, alle Fehlerfrei soweit

  end;

initialization SetupFont;

end.
Ich hoffe mal dass da einer von euch was findet was so einen Fehler verursachen könnte.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Shape Wars - Version 1.0

  Alt 16. Apr 2011, 13:40
for x := 0 to Length(Text) do
muss
for x := 1 to Length(Text) do heissen
Markus Kinzler
  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:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
C-Sharp-Forum.de - Shape Wars - Version 0.9.9 This thread Refback 11. Apr 2011 14:31
Delphi-Forum.de - Shape Wars - Version 0.9.9 This thread Refback 7. Apr 2011 16:55

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 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