Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Mai 14, 2024 17:24

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 39 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 14, 2003 23:34 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Zitat:
Zitat:
Was hälst Du davon, die Brechnung in einen Thread auszulagern? Damit bist Du unabhängig von deiner FPS.

Das hatte ich schon versucht... hat bei mir aber jedesmal wo ich es versuchte nach einiger Zeit einfach so zu einem BlueScreen (unter Win2k) geführt.... :|

Hast du nciht ein 2 Prozessorsystem? Normalerweise dachte ich Win2k wäre in der richtung inzwischen etwas gereift, aber anscheinend doch nicht - also normalerweise musst du darauf aufpassen, dass sich dein Haupthread und dein Simulationssthread nciht ins gehege kommen, besonders bei Multiprozessorsystemen, da es bei denen passieren kann, dass beide Threads auf unterschiedlichen CPUs laufen und gleichzeitig den Speicher überschreiben - an der gleichen adresse und -> Bang. Entsprechnd die Frage: Hast du ordentlich Synchronisiert mit CriticalSections(Siehe Delphi Online Hilfe - ist in Delphi prima gekapselt) und oder Interlocked Befehlen wie z.B. InterlockedDecrement, InterlockedExchange, .... Siehe WinAPI Hilfe. Das sollte auf alle Fälle funktionieren. Ach noch was - der Memeory Manager von Delphi hat so seine Probleme mit Multitasking... Einen testweisen Ersatz findet man hier: <a href='http://www.optimalcode.com/memmgr.htm' target='_blank'>http://www.optimalcode.com/memmgr.htm</a> einfach mal ausprobieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2003 16:16 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 14, 2003 23:00
Beiträge: 24
mein programm soll nur ein dreieck drehen, das sich immer gleichschnell dreht, egal wieviele FPS man hat. im moment habe ich um die 2500 FPS und es stockt zwischen drin mal, und genau DAS will ich wegkriegen.

ich hab nun folgenden code:

//vars...
var
angle: single=0.0;
QPTfreq: Int64;
QPTstartcount, QPTendcount: Int64;
SpeedFactor: Extended;

//in OnCreate:
[...]
QueryPerformanceFrequency(QPTfreq);
[...]

//in OnAppIdle:
[...]
QueryPerformanceCounter(QPTstartcount);
DrawScene;
QueryPerformanceCounter(QPTendcount);
SpeedFactor:=((QPTendcount-QPTstartcount)/QPTfreq)*100;
[...]


//in DrawScene:
[...]
angle:=angle+0.2*speedfactor;
glRotatef(angle,0,0,1);
glTranslatef(0,0,-5);

glBegin(GL_TRIANGLES);
[...]
glEnd();
[...]


ist das richtig oder nicht? wenn nein.. wie geht es richtig? bei mir stockts wenn ich den code benutze


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2003 16:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Der Code scheint nach dem ersten Überfliegen keine Fehler zu enthalten.

Wenn deine "Animation" allerdings in unregelmäßigen Abständen stockt, dann kannst du da leider sehr wenig dran ändern.Das ist meist was systembedingtes, das oft am Grafikkartentreiber hängt.
Unter D3D gibts gegen dieses Stocken das sog. "Tripplebuffering".Wir OpenGL'ler müssen uns allerdings noch ein wenig gedulden, da über die Implementation dieses Features erst in nächsten ARB-Meeting diskutiert wird.

Du kannst allerdings mal dein Programm hochladen, dann teste ich es.Wenns bei mir net stockt, dann liegts definitiv an deinem System.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2003 16:58 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 14, 2003 23:00
Beiträge: 24
unmöglich, alle spiele laufen stockfrei nur meine eigenen sachen nicht. daran kanns wohl schwer liegen
geforce 4, 512mb ram, athlon xp 1.7, win xp...

jo geb mal email dann schick ich dirs ok ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2003 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
chuckylein hat geschrieben:
jo geb mal email dann schick ich dirs ok ?

webmaster@delphigl.de

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2003 17:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hm...hab das Programm grad mal laufen lassen (Athlon XP2600+, GF4Ti4400, Deto 43.00) und hab kein Ruckeln oder stocken bemerkt.Das Dreieck rotiert schön flüssig vor sich hin.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2003 17:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Verwendest du ein Board mit VIA-Chipsatz?Wenn ja, dann könnte es daran liegen, da diese in unregelmäßgien Abständen bei der Nutzung von QueryPerformanceCounter fehlerhafte Werte liefern, und deine Rotation so nicht mehr genau ist.

Da ich allerdings ein Board mit nem nForce2-Chipsatz habe, kann ich dieses Problem nicht nachvollziehen.Einzige Alternative wäre dann die Verwendung von GetTickCount zur Zeitmessung.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2003 17:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Guest hat geschrieben:
ja habe nen via chipsatz... kannste mir den code so umschreiben dass es bei mir gehen sollte? :>

Diese hinterhältige Frage ist aber ganzschön dreist...

Zum einen bringst eh nix, wenn man sich seine Programme von anderen schreiben lässt, und zum anderen lernt man erst dadurch das man etwas selber macht...schau dir also die Definition von GetTickCount aus der WindowsSDK-Hilfe an und probier den Code selbst umzuschreiben.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2003 17:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Guest hat geschrieben:
wieso benutzen alle queryperformancecounter wenns auch mit gettickcount geht ?

PS: gibts nen treiber patch oder so für dieses problem?

QPC wird deshalb so oft genutzt, da dessen Auflösung höher ist als die von GetTickCount.Ich gehe mal davon aus, das professionelle Anwendungen zwar QPC nutzen, aber mit einer Helferprozedur prüfen, ob die von QPC zurückgelieferten Werte auch im Rahmen des Richtigen sind.

Allerdings fällt eine fehlerhafter QPC-Wert bei einem Spiel nicht so auf, wie bei der Animation eines Dreieckes.Bei letzterem ist der Blick schliesslich auf die Animation fixiert, und jedes Stocken wird direkt wahrgenommen.

@Treiberpatch :
Das Problem ist bei Microsoft zwar bekannt, und auch dokumentiert, nen Patch gibts dafür aber nicht.Allerdings kanns sein, das die VIA-Treiber das Problem lindern...ausserdem muß das Problem nicht nur an deinem Chipsatz liegen...

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 15, 2003 18:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Um meine Aussage zu untermauern gibts hier den entsprechende Report von Micro$oft :
<a href='http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B274323' target='_blank'>http://support.microsoft.com/default.aspx?...Ben-us%3B274323</a>

Dort gibts am Ende des Reports übrigens ein Codesample (in C), das die angesprochenen Zeitsprünge feststellt.Mit Hilfe dieses Codes könnte man sich dann eine Routine schreiben, die diese Problematik verringert.

Wie ich allerdings schon sagt, fällt ein kurzer Zeitsprung von QPC in einer Spielumgebung im Normalfall nicht auf.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 39 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.028s | 19 Queries | GZIP : On ]