DGL
https://delphigl.com/forum/

@Matrionx
https://delphigl.com/forum/viewtopic.php?f=14&t=6820
Seite 2 von 2

Autor:  Lord Horazont [ Mi Aug 22, 2007 10:47 ]
Betreff des Beitrags: 

Ich kann das mit den verschiedenen Geschwindigkeiten erklären und glaube ich auch eine Ursache dafür zeigen, zumindest im Hauptmenü:

Kann es sein, dass du bei jeder Mausbewegung einmal eine Selection durchführst? Das würde erklären, weshalb bei mir während Mausbewegungen das Menü total lahm läuft.

Zu den Tasten: Dass die EventHandler VK_UP/VK_DOWN nicht verarbeiten, ändert nichts daran, dass sie aufgerufen werden und somit das OnIdle-Event verzögern. Außerdem solltest du Done := False im OnIdle setzen, das ist wichtig.

Gruß Lord Horazont

Autor:  WhiteHunter [ Mi Aug 22, 2007 13:09 ]
Betreff des Beitrags: 

Lord Horazont hat geschrieben:
Kann es sein, dass du bei jeder Mausbewegung einmal eine Selection durchführst?

Hm, das stimmt.

Zitat:
Das würde erklären, weshalb bei mir während Mausbewegungen das Menü total lahm läuft.

Dabei werden allerdings nur die etwa 130 Dreiecke für den Text 'gezeichnet'. Warum ist das dann so lahm?

Zitat:
Zu den Tasten: Dass die EventHandler VK_UP/VK_DOWN nicht verarbeiten, ändert nichts daran, dass sie aufgerufen werden und somit das OnIdle-Event verzögern.

Wenn du neben dem Aufruf 2 negative If-Abfragen als Verzögerung im Bereich mehrerer dutzend Frames siehst, könnte das stimmen.

Zitat:
Außerdem solltest du Done := False im OnIdle setzen, das ist wichtig.

Das hab ich nicht vergessen.

MfG

Autor:  Lord Horazont [ Mi Aug 22, 2007 16:27 ]
Betreff des Beitrags: 

Ich hatte schon immer das Problem auf meinem Rechner (auch mit einer anderen Graka) dass Selections sehr langsam liefen, daher waren sie bei mir auch nie eine alternative zur Koordinatenumrechnung.
Vielleicht ist da ja ein bestimmter Teil der Hardwarekonfiguration für Verantwortlich. Bei meiner alten GF 5xxx oder was das war konnte ich mir das ja noch mit dem etwas Out-Of-Date erklären aber meine 7600 sollte das doch schon etwas flüssiger schaffen...

Gruß Lord Horazont

Autor:  WhiteHunter [ Mi Aug 22, 2007 22:13 ]
Betreff des Beitrags: 

Nach einiger Recherche scheint das ganze ein Treiberproblem von nVidia, das selbst Maya oder Wings 3D betrifft, zu sein.
Siehe aus diesem Forum: viewtopic.php?t=5902
Siehe aus dem nZone Forum: http://forums.nvidia.com/index.php?showtopic=24035&hl=

Gemeinerweise findet sich im Wiki keinerlei Hinweis auf diese Problematik, sodass ich quasi ans offene Messer gecodet hab; ebenso fehlen da alternative Methoden.
Nun wäre das aber in 2D ja kein Problem, wenn die Selektion hier nicht ins Herzstück des Codes verwoben wäre, der sowieso nicht allzu arg geplant war, weshalb ich eher weniger Lust habe, die ganze Sache nochmal neu zu implementieren.
Da ich dieses Problem (trotz GF7900GT 512) nicht habe, ist alles was ich fürs Erste empfehlen kann, mal auf einen 16x.xx-(Beta-)Treiber upzudaten. Großes Sorry für dieses Problem.

MfG

Autor:  Lord Horazont [ Mi Aug 22, 2007 23:25 ]
Betreff des Beitrags: 

Hi WhiteHunter,

Ich lade mir gerade mal den Treiber runter und versuche es nochmal, vielleicht geht es dann.

Ansonsten, vielleicht sollte man das mal an nVidia rapportieren. Falls der Treiber das nicht behebt, werde ich das mal tun, mal schauen, wie die reagieren. Ich werde auch auf jeden fall einen Hinweis ins Wiki schreiben.
//Edit: Ich sehe gerade, dass das anscheinend schon getan wurde... Naja, die masse machts :wink:
//Edit²: Habe im Wiki einen Hinweis eingefügt.

Gruß Lord Horazont

Autor:  WhiteHunter [ Fr Aug 24, 2007 16:42 ]
Betreff des Beitrags: 

Mal ein kleiner Nachtrag zur Problematik:

Nachdem ich einigen anderen Kram implementiert hab, wollte ich mal eine alternative Selektionsmethode über FrameBuffer-Farben ausprobieren, die DNA mir empfohlen hat. Seitdem gibt es allerdings Bugs wohin ich schaue, teilweise unerklärliche, die nach einiger Zeit trotz keiner Änderung nicht mehr reproduzierbar sind. Anfangs hat die Selektionsmethode auch noch funktioniert, was jetzt seltsamerweise nur noch manchmal der Fall ist. Allerdings fehlt mir auch ein gescheites Debugsystem, das ich zwar schon bisschen geplant hab, aber hier nicht mehr zum Einsatz bringen kann.
Eine besonders lustige Sache finde ich jedoch, dass ein Call in der Selektionsmethode auf
Code:
  1. glReadPixels(X, VP[3]-Y, 1, 1, GL_RGB, GL_BYTE, @Buf);

den FPSCounter 3mal so schnell macht (der auf QueryPerformanceCounter basiert) :shock:. Dadurch wird das TBM im Vergleich zur Framerate 3mal so schnell, was genau das Gegenteil von dem ist, was ich eigentlich wollte. Allerdings schätze ich, dass es kein generelles Problem ist, sondern, dass es irgendwo im Code was geben muss, das zu diesem irrationalen Verhalten führt. Daher verzögert sich die 2. Betaversion wohl noch etwas.

MfG

Autor:  Lord Horazont [ Fr Aug 24, 2007 19:09 ]
Betreff des Beitrags: 

Wie funktioniert dein Selektionsystem? Übergibst du einfach Pointer oder Indices als Farben? Dann könnte es sein, dass die Farbauflösung nicht groß genug ist.

Was dein TBM betrifft:
Wieso machst du das relativ zur Framezahl? Wieso benutzt du nicht die Zeit, die seit dem letzten Frame vergangen ist?

Gruß Lord Horazont

Autor:  WhiteHunter [ Fr Aug 24, 2007 19:26 ]
Betreff des Beitrags: 

Lord Horazont hat geschrieben:
Wie funktioniert dein Selektionsystem? Übergibst du einfach Pointer oder Indices als Farben? Dann könnte es sein, dass die Farbauflösung nicht groß genug ist.

Das habe ich vorhin auch rausgefunden ;) Zurzeit stellt sich irgendwie die Prozedur zum Fontzeichnen mit der Farbgebung quer, werd da weiter rumprobieren.

Zitat:
Was dein TBM betrifft:
Wieso machst du das relativ zur Framezahl? Wieso benutzt du nicht die Zeit, die seit dem letzten Frame vergangen ist?

Das hast du wohl falsch verstanden. Mein TBM sieht so aus:

In OnIdle:
Code:
  1.   FPS.Start;
  2.   if Game.TF > 0 then
  3.   begin
  4.     Game.Render;
  5.     SwapBuffers(DC);
  6.   end;
  7.   Game.TF := FPS.Count;


Code:
  1. constructor TFPSCounter.Create;
  2. begin
  3.   QueryPerformanceFrequency(fFreq);
  4. end;    
  5.  
  6. procedure TFPSCounter.Start;
  7. begin
  8.   QueryPerformanceCounter(fMeasA);
  9. end;
  10.  
  11. function TFPSCounter.Count: Single;
  12. begin
  13.   QueryPerformanceCounter(fMeasB);
  14.   Result := (fMeasB-fMeasA)/fFreq;
  15. end;


Die FrameRate war einfach ein handlicherer, bereits ausgegebener Wert (siehe hierzu auch die Info-Konsole, die bereits über TAB während der Anwendung erreichbar sein sollte).
Das seltsame ist ja, die echte FrameRate bleibt gleich, der Counter meint nur sie steigt ins astronomische.

MfG

Autor:  MatReno [ Sa Aug 25, 2007 08:55 ]
Betreff des Beitrags: 

Schön, dass die runden Schläger eingebaut hast.
Ich denke das hebt den Spielspass doch enorm -> werde gleich mal testen ob dem auch so ist :wink:
Die fadenden Banden sehen auch sehr gut aus.
:P

Autor:  Average Idiot [ Sa Aug 25, 2007 09:12 ]
Betreff des Beitrags: 

Sieht sehr gut aus,
ich wuerde der Spielplatte und den Banden noch Tiefe verleihen, damit sie nicht wie Papier aussehen. Man koennte den Rand dann zum Beispiel mit nem schwarzgelben Warnmuster texturieren ...

Weiter so!

Autor:  WhiteHunter [ So Aug 26, 2007 20:38 ]
Betreff des Beitrags: 

Mal schauen, inwiefern ich das noch mit der Tiefe der Komponenten hinbekomme. Eben ist mir aber ein Bug mitgeteilt worden... der Ball fliegt immer perfekt nach links beim Start... insbesondere für Precise Physics nicht geeignet... das passiert, wenn man vergisst, Debuggingkommentierungen wieder zu entfernen... da sich hier noch niemand beschwert hat, scheint es nicht so dringend zu sein, wird aber natürlich bald gefixt.

MfG

Autor:  Shaddow [ Sa Okt 20, 2007 22:04 ]
Betreff des Beitrags: 

sehr nette neue features

Zitat:
- Memorix kann nun in verschiedenen Auflösungen betrieben werden.
Die Änderung wird aber erst nach einem Neustart übernommen. Eigentlich geht es auch zur Laufzeit, aber ich scheitere im Moment noch an einem (wahrscheinlichen) SDL-Bug. Auch nach Neuladen der Texturen werden keine angezeigt.


Das ist tatsaechlich ein Bug.. wenn du die Aufloesung aenderst, wird das Surface neu erstellt und deine Texturen verschwinden ins Nirvana. Ich glaube, ich hatte es irgendwann mal bei mir so geschrieben, dass direkt vom Reload des Surface alle Texturen freigegeben werden und danach neugeladen werden. Eigentlich hatte das gefunkt, aber im Grunde umschifft man damit nur einen Bug, der hoffentlich bald mal ausgemerzt wird.

Autor:  Lord Horazont [ So Okt 21, 2007 07:54 ]
Betreff des Beitrags: 

Ahm... Ich glaub ihr seid im falschen Thread. Hier gehts um Matrionx, nicht um Memorix :wink:
Das wäre der richtige Thread.

Gruß Lord Horazont

Seite 2 von 2 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/