Avatar billede zerohero Nybegynder
04. februar 2003 - 11:22 Der er 44 kommentarer og
2 løsninger

FPS

Siden jeg har installeret XP, lader det til at Windows ikke vil give mig lov til at se den nojagtige Frame Rate i mine OpenGL applikationer. Hvis min skaerms Hz er sat til 75 saa bliver mine FPS hojst 75, Hvis jeg saetter min skaerm til 60 Hz saa bliver min FPS hojst 60 osv. Hvor i mod Win2000/Win98 giver mig den "rigtige" FPS paa ca. 165. Jeg ved at det i princippet kan gore lige meget da ojet ikke opfatter meget mere end ca. 60 frames i sekundet alligevel men det er lidt irriterende. Nogen der ved hvad jeg kan gore? NB: Jeg har set at spil som Dungeon Siege, ikke har problemer med at vise den eksakte frame rate!!!
Avatar billede soreno Praktikant
04. februar 2003 - 11:26 #1
Du skal, der hvor du ændrer grafikkortets indstillinger, disable:
Vertical trace(Lodret synkronisering)

Men hvad har det med c/c++ at gøre ?
Avatar billede jpk Nybegynder
04. februar 2003 - 11:28 #2
Det kan jo være at det er spillet der, under XP, tjekker refresh rate'en og begrænser fps...

Du skriver godt nok at øjet ikke kan se mere end ca 60 frames, men hvis din monitor kører 60Hz ER der ikke mere end 60 opdateringer pr sekund, ligemeget om dit spil så kører 200fps!
Avatar billede zerohero Nybegynder
04. februar 2003 - 11:33 #3
Soreno>> Jo, for det er mig der udvikler OpenGL applikationen!!!
Avatar billede zerohero Nybegynder
04. februar 2003 - 11:34 #4
Soreno>> Kan det ikke gores runtime via min applikation?
Avatar billede zerohero Nybegynder
04. februar 2003 - 11:37 #5
Jeg taenkte om der var nogen DirectX udvikler der er stodt ind i samme problem, eller om det kun er os OpenGL udvikler der har problemet. Ellers kunne man jo taenke sig at DirectX havde indbygget en funktion der ungik denne problametik!!!!
Avatar billede soreno Praktikant
04. februar 2003 - 11:57 #6
Jeg mener du bør respektere brugerens settings. Jeg ville ihvertfald ikke kunne acceptere at noget program ændrerede netop den setting hos mig, jvf. jpk's indlæg (hvorfor spilde cpu kraft på noget man intet får ud af..).

Hvis du vil ændre på denne setting skal du være opmærksom på at der er forskel på drivere og producenter - det lægger sikkert settings forskellige steder med forskellige navne..

Umiddelbart ville jeg sige at det er denne key der skal redigeres i (Nvidia):
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\nv\Device0\OGL_MaxFramesAllowed
og/eller denne:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\nv\Device0\OGL_MaxFramesAllowed
og/eller denne:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nv\Device0\OGL_MaxFramesAllowed

Jeg ved så ikke om computeren skal genstartes eller ændringen skal opdateres til grafikkortet på en eller anden måde (prøv at eksperimentere lidt med det) ?
Avatar billede jpk Nybegynder
04. februar 2003 - 12:00 #7
I DirectX bestemmes det via FullScreen_PresentationInterval memberen i D3DPRESENT_PARAMETERS strukturen man giver som argument når man kalder CreateDevice...
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:08 #8
Man kunne jo selvfolig bare aendre indstillingerne mens man applikationen korte for derefter at saette indstillingerne tilbage til den oprindelige opsaetning efter brug!!! Det er selvfolgelig ikke den perfekte losning - men af mangel paa bedere kunne det vel bruges :-))

Men det er skam besvaeret vaerd at faa den praecise frame rate, da jeg er midt i en optimerings process, og har derfor brug for at se om min nye assembler optimering osv. har effekt paa frame raten uanset om jeg kore min applikation paa en 2 Ghz processor eller en 500 mhz.
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:11 #9
jpk>> Sa du siger altsa at du har mulighed for at vaelge dette "faenomen" til/fra via DirectX???
Avatar billede jpk Nybegynder
04. februar 2003 - 12:12 #10
Jo, men så kan du jo bare ændre det på din maskine...
Når applikationen er færdig, bør det være op til brugeren hvilken refreshrate han vil bruge!
Avatar billede jpk Nybegynder
04. februar 2003 - 12:13 #11
Jeg har ikke kodet noget DX til XP, så jeg ved ikke om der er nogle begrænsninger her...
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:14 #12
Soreno>> PS: Jeg vil selvfolig kun lave dette nummer naar jeg skal teste min applikation!!!
Avatar billede jpk Nybegynder
04. februar 2003 - 12:14 #13
Det er skide irriterende med applikationer der ændrer éns indstillinger...
Især når de så går ned og ikke får ændret dem tilbage...
Avatar billede jpk Nybegynder
04. februar 2003 - 12:16 #14
Hvis du kun vil gøre det på dine testmaskiner, behøver du jo ikke gøre det programmatisk...
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:18 #15
Eller jeg kunne kigge lidt paa DirectX's maade at undvige at frame raten bliver "controlleret" af refresh raten!!!!
Avatar billede soreno Praktikant
04. februar 2003 - 12:19 #16
Men, som sagt er der forskel på grafikkort producenter og drivere. Derfor vil du opleve at det er en kæmpe opgave at indsamle oplysninger om hvordan det ændres.

Måske det var nemmere at få dem der skal teste til at ændre i den setting ?
Avatar billede soreno Praktikant
04. februar 2003 - 12:20 #17
"DirectX's maade at undvige at frame raten bliver "controlleret" af refresh raten"
Bliver nok lidt svært - mig bekendt har Microsoft ikke offentliggjort koden til deres libs ?

Måske det er en option som grafikkort driverene skal implementere (dem som er directx kompatible) ?
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:21 #18
Enig enig enig, men det var mest for at spare tid (og irritation) naar jeg tester... (Men nok mest fordi at ikke kan faa ind i mit lille hoved, hvorfor det er "nodvendigt" at Windows absolut skal blande sig mellem mit forhod til mit grafikkort :-))
Avatar billede soreno Praktikant
04. februar 2003 - 12:24 #19
Hehe, fordi det er Operativ Systemets fornemmeste opgave at styre adgangen til hardware.
:-)
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:24 #20
Jeg haabede paa at det funktionen eventuelt laa i SDK pakken, men maaske du har ret at det ligger implementeret i nogle drivers...
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:27 #21
Ja, men siden Windows aldrig ikke blandet sig (paa samme maade - forstaa mig nu ret) i tidligere versioner, hvorfor skal den saa gore det i XP'en? :-)
Avatar billede soreno Praktikant
04. februar 2003 - 12:31 #22
Jamen, det er jo driver producenter der har bestemt at den setting skal enables/disables når driveren installeres (men det er måske Microsoft der har pålagt dem dette..).
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:32 #23
Ja, du har nok ret.
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:35 #24
Tror I at der maaske er en Api kald der kan det samme i stedet fra at gaa igennem registringsbasen?
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:39 #25
Jeg er lige ved at studere Microsofts hjemmeside, og de snakker om et kald der hedder GetDefaultFPS(Double), da jeg ikke er i naerheden af en kompiler kunne jeg maaske faar en af jer til at teste kaldet (please)...
Avatar billede jpk Nybegynder
04. februar 2003 - 12:41 #26
Du kan helt sikkert ikke se DX implementationen, da den ikke er offentlig tilgængelig!
Det er muligt, at et grafikkort, for at være DX kompatibelt, skal tilbyde, at sætte dette via dets DX interface.
Man kan også sige "Hvorfor skal du blande dig i hvilken refresh rate en bruger skal køre ved?"
Hvis vedkommende har lyst til at spilde unødig CPU/GPU-kraft, kan vedkommende jo ændre det!
Du får sansynligvis også selv noget ud af det, nemlig mere CPU fri til AI, collision detection osv.
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:44 #27
jpk>> Jeg vil nodigt blande mig i brugerens onske om han/hendes refresh rate derfor vil det (hvis det bliver den losning) ogsaa en option som brigren kan vaelge i min applikation...

opfolger til ovenstaende indlaeg fra mig...

Requirements
Header: Include Qedit.h. This header file is not compatible with Microsoft® Direct3D® headers later than version 7.
Library: Use strmiids.lib.
Avatar billede jpk Nybegynder
04. februar 2003 - 12:47 #28
GetDefaultFPS er jo en metode i DirectShow (fra DX9) og har absolut INGEN anvendelse her...
Avatar billede soreno Praktikant
04. februar 2003 - 12:48 #29
Jeg har ikke directx på min computer - så jeg kan ikke teste det..
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:49 #30
Det ved jeg, men hvis det kunne arlaese (beregne om du vil) den "praecise" FPS kunne jeg vel bare bruge den funktion...
Avatar billede jpk Nybegynder
04. februar 2003 - 12:50 #31
Har du prøvet at ændre de keys som soreno foreslår?
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:50 #32
Men jeg vidste jo ikke om den kunne eller ikke kunne (da jeg ikke ved meget om DirectX) ;-))
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:51 #33
Nej, da jeg beklageligvis ikke er i naerheden af en kompiler. Men jeg vil prove i eftermiddag...
Avatar billede jpk Nybegynder
04. februar 2003 - 12:52 #34
Jeg forstår ikke helt dit indlæg af 12:49:32, kan du forklare lidt bedre?
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:54 #35
Her er lige en side sporgsmaal er der negen af jer der ved hvor Geometry_No_Asm stammer fra? Er det en OpenGL parameter (jeg aldrig har hort om) eller hvor kommer kommer den fra? Jeg ved at det ikke har noget med FPS at gore overhovedet men alligevel...
Avatar billede zerohero Nybegynder
04. februar 2003 - 12:55 #36
Jeg mente bare at hvis kaldet GetDefaultFPS() kunne give mig den praecise frame rate (uden paavirkning af refresh raten) kunne jeg vel bare bruge den.
Avatar billede soreno Praktikant
04. februar 2003 - 12:56 #37
Mig bekendt er det ikke en del af OpenGL (og heller ikke en del af de extensions der findes).

I hvilken sammenhæng har du brugt det ?
Avatar billede zerohero Nybegynder
04. februar 2003 - 13:01 #38
Det er vedrorende AMD's 3DNow! assembler optimering. Hvis parameteren retunere en True er systemet "godkendt" til at bruge optimering Assembler kode for bade FPU'en og 3DNow! ellers skal den bare kore standard kode... Giver det mening? :-))
Avatar billede soreno Praktikant
04. februar 2003 - 13:06 #39
Ja, men det har da ikke en dyt med grafikkortet at gøre ?
Avatar billede zerohero Nybegynder
04. februar 2003 - 13:07 #40
Nej, det siger jeg heller ikke! Jeg sporger bare om I ved hvor parameteren stammer fra :-)
Avatar billede soreno Praktikant
04. februar 2003 - 13:10 #41
En søgning på google finder intet..
Avatar billede jpk Nybegynder
04. februar 2003 - 13:13 #42
1) GetDefaultFPS() er jo til DirectShow (ikke det samme som Direct3D/DirectX Graphics) og kan bruges på en stream til at returnere den frame rate streamen bør afspilles ved. Det har intet at gøre med fps for realtime rendering af vertices!

2) Hvis OpenGL 'blocker' indtil det er tid til næste frame, når du præsenterer din framebuffer, ER den præcise frame rate jo netop fx 60Hz!

3) Det du foreslår med brug af GetDefaultFPS ville jo betyde at man skulle kunne forudsige hvor lang tid renderingen ville tage! Det er jo umuligt at vide idet du ikke har totalt styr på memory osv. Hvor lang tid tager det fx at uploade en vertexstream til AGP-memory? Findes den allerede i AGP-memory?
Avatar billede zerohero Nybegynder
04. februar 2003 - 13:21 #43
jpk>> Se det lyder meget fornuftigt. Det eneste jeg onsker er som sagt bare at jeg ikke vil have at OpenGL "Blocker" framebufferen (ligesom i gode gamle dage), og det lader til at den eneste maade at undvige dette er at gaa gennem registrerings basen, finde grafokortets producent og aendre indstilling - ligesom Soreno saa fornemt har vist (trods jeg ligesom Jpk bestemt ikke er meget for at gaa denne direkte vej og aendre paa brugens opstilling).
Avatar billede jpk Nybegynder
04. februar 2003 - 13:34 #44
Du kan selvfølgelig tilnærmelsesvist finde ud af det, ved selv at tjekke tiden i din applikation. Hvis det endnu ikke er tid til at præsentere en frame (i forhold til refresh raten), lader du bare være...
Det betyder at du stadig kan bruge tiden på at batche framen og derved se en mere eller mindre korrekt frame rate...
Hvis du vælger dette, skal du dog nok eksperimentere lidt, da du jo springer arbejdet med at vise framen over. Det betyder jo, at hvis din app er GPU limited, vil du sansynligvis få en langt højere frame rate end i det virkelige tilfælde!
Avatar billede zerohero Nybegynder
04. februar 2003 - 13:57 #45
jpk>> smid et svar og jeg vil acceptere jer begge!

1000 tak for begge jeres forslag.
Avatar billede jpk Nybegynder
04. februar 2003 - 13:59 #46
Okay, tak...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester