/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
OpenGL - skærmopdatering?
Fra : John Doe


Dato : 27-11-02 10:49

Jeg sidder og programmere lidt OpenGL 3D-grafik halløj i VC++ 6.0 og oplever
noget jeg finder lidt underligt... sådan da. Jeg kører indtil videre mit
program i et alm. vindue (altså ikke fuld screen) og jo mindre dette vindue
bliver, jo mere glidende kører programmet - ingen overraskelse i det, men
det "mærkelige" er at processor belastningen samtidigt stiger mod 50% (det
er fuld belastning af en CPU da jeg har et dualprocessor system og kun kører
single threaded). Jo større jeg gør vinduet jo mere hakker det (forventet)
men samtidigt falder processor belastningen... hmm.

I et lille vindue har jeg omkring 55 frames/sekund og i et stort omkring 8
frames/sekund (øv). Skærmopløsningen er 1600 x 1200 med 85 Hz refresh rate.

Jeg læser det sådan, at det er mit grafikkort (et gForce2 GTS/PRO) der ikke
kan følge med min PC (en Pentium II på sølle 350 MHz) når det er et stort
vindue. Jeg gætter på at programmet (læs CPU'en) i tilfældet; stort vindue,
venter på en klarmelding fra grafikdriveren om, at det er klar til en ny
omgang framedata og derfor kører i "tomgang" (jeg har ikke rigtig gravet i
hvordan OpenGL driveren styrer skærmopdateringen) men jeg mener sgu da, at
mit grafikkort burde være langt hurtigere end selve CPU'en, selv ved tegning
af store flader, da det jo er et par generationer nyere end resten af
hardwaren, og der foregår absolut ikke noget af alt det advancerede skidt
med dynamisk lys etc. Kun helt alm. polygon tegning med textur belægning.
CPU belastningen må være den samme per frame, uanset vinduestørrelsen, da
det jo er det samme antal polygoner der skal udregnes og også datamængden
der overførest til grafikkortet er den samme i begge tilfælde (jo jeg kan
godt se at CPU'en nok kommer til at udregne flere frames ved et lille
vindue, så det kan jo i virkeligheden være såre simpelt: Et lorte
grafikkort!). Er dette rigtig, så skulle jeg kunne opnå en stor fordel ud af
at skifte grafikkortet i min ældgamle, bedagede PC ud til et nyt
"jeg-ska'-gi'-dig" kort, men det tror jeg nu ikke helt på. Jeg opnåede
ganske vist en smule hastighedsforbedring da jeg gik fra et TNT2 kort til
gForce2 kortet - og det var et par generationer op - men ikke ligefrem en
hel revolution. Så jeg tvivler på der er nogen fordel ved en grafikkort
opdatering.

Nå, måske har jeg besvaret spørgsmålet selv, men jeg vil alligevel gerne
høre "a second opinion" som man siger - for jeg kan kan jo gøre noget
helt basalt forkert.
Skal jeg leje konen ud til de omkringboende bønderkarle og snarligt spendere
indkomsten herfra på et nyt grafikkort, eller skal jeg sælge hende helt og
investere pengene i en helt ny PC?

Håber det er den rigtige gruppe til dette spørgsmål, eller må i s'gu
undskylde.

Alias John Doe.



 
 
Thomas Krog (28-11-2002)
Kommentar
Fra : Thomas Krog


Dato : 28-11-02 09:13

> Jeg læser det sådan, at det er mit grafikkort (et gForce2 GTS/PRO) der
ikke
> kan følge med min PC (en Pentium II på sølle 350 MHz) når det er et stort
> vindue.

sådan vil jeg også tolke det. Min tbird 1,33 ghz og geforce2 gts kan kun
levere en fuldskærms polygon uden texture med 1 lys i 60 fps under
1600x1200.

[snip]
> men jeg mener sgu da, at
> mit grafikkort burde være langt hurtigere end selve CPU'en, selv ved
tegning
> af store flader, da det jo er et par generationer nyere end resten af
> hardwaren,

Geforce2 gts er bygget til computerspil som normalt kører omkring 1024x768
(her er der balance mellem transformations-beregninger (3d->2d) og
fragmentering (farvelægning af pixels)).

> og der foregår absolut ikke noget af alt det advancerede skidt
> med dynamisk lys etc. Kun helt alm. polygon tegning med textur belægning.

hvis der er blending med i texturen vil hastigheden dykke dramatisk i
1600x1200.

[snip]
> Er dette rigtig, så skulle jeg kunne opnå en stor fordel ud af
> at skifte grafikkortet i min ældgamle, bedagede PC ud til et nyt
> "jeg-ska'-gi'-dig" kort, men det tror jeg nu ikke helt på.

de nye grafikkort bliver bygget til at arbejde sammen med en hurtig cpu.
Dvs. når der kommer nogle beregninger som ikke egner sig til et grafikkort
så bliver cpu'en sat til det - så hvis du vil opgradere bør du både skifte
grafikkort og cpu jeg skal dog ikke kunne sige hvor meget ekstra performance
du får i de høje opløsninger.



Thomas Krog (28-11-2002)
Kommentar
Fra : Thomas Krog


Dato : 28-11-02 09:30

> I et lille vindue har jeg omkring 55 frames/sekund og i et stort omkring 8
> frames/sekund (øv). Skærmopløsningen er 1600 x 1200 med 85 Hz refresh
rate.

hvis du kører 32 bit kan du næsten halvere kørselstiden ved at skifte til 16
bit.



Jens Christian Larse~ (30-11-2002)
Kommentar
Fra : Jens Christian Larse~


Dato : 30-11-02 22:22



John Doe (06-12-2002)
Kommentar
Fra : John Doe


Dato : 06-12-02 08:23

Hej Thomas og Jens.



Tak for jeres svar begge to, men jeg tror nu ikke at det er så simpelt. Der
er et eller andet jeg misser her.



Først så er jeg klar over at skærmkort driverne som regel er optimeret til
en helt speciel skærm/farve opløsning, men alligevel så mener jeg ikke, at
det skal gå så galt som det gør (selv med den meget høje opløsning og 32
bit true color opsætning som jeg kører med)



Jeg har ikke prøvet at køre full-screen endnu, hvilket selvfølgelig burde
give en højere refresh rate - især med en mere moderat skærmopløsning. Lige
pt. er jeg kun interesseret i at få så høj en refreshrate i et vindue som
muligt, og derved få endnu bedre performance når jeg så skifter til
fullscreen mode.



Nå, men jeg roder jo konstant med koden og har nu ændret lidt i mit klasse
hierarki. Fra at have en C3DModel klasse med to nedarvede klasser; C3DPlane
(specielt til groundplane't) og C3DSkyBox, har jeg ændret det til en general
og rent virtual C3DModel klasse med 3 nedarvede klasser, de to ovenfornævnte
samt en ny C3DStaticModel der så erstattede en gamle. Det gav en langt
pænere måde at håndtere alle 3d-objecterne på samt en mere strømlignet
kode - og det er jo ikke så galt endda.



Jeg forventede en smule overhead i dette virtuelle hierarki men altså ikke,
at framerate'n faldt fra 55 til 19 i et lille vindue!? I forventining om at
få "kravlende grafik" blæste jeg vinduet op til at fylde hele skærmen
(stadig i et vindue - ikke fullscreen) men til min overraskelse var der her
nøjagtigt den samme opdaterings hastighed. Altså 19 frames/sekund. Så et
eller andet sted undervej har jeg fået ændret "et eller andet" der på
omfattende vis har indflydelse på skærmopdateringshastigheden.



Da jeg ikke har ændret på mængden af "verticer (hjørnepunkter)" i min scene,
må jeg altså konstatere at grafikkortet sagtens kan følge med PC'en (i hvert
fald op til ovennævnte framerate), idet jeg nu har fuld belastning af CPU'en
når programmet kører, uanset vinduesstørrelse. Jeg fatter det ikke rigtigt
men tager til efterretning at det her 3D-halløj er noget indviklet skidt



Jeg har prøvet at sætte grafikkortet til altid at køre 16-bit i egenskaber
for skærm, men det ser ikke ud til at ændre noget som helst.



Hilsen

Kim Christensen

alias John Doe





"Jens Christian Larsen" <madcow@control.auc.dk> wrote in message
news:Pine.GSO.4.10.10211302212020.20590-100000@sigurd.control.auc.dk...
>
> Din applikation er fillrate limited. Det vil sige at frameraten er
> begrænset af det det store antal pixels grafikkortet skal tegne for hver
> frame. Da din CPUs arbejdsbelastning ikke er afhængig af skærmopløsningen,
> men kun af framerate falder CPU load når frames per second falder.
> Har du set hvilken framerate du får når du kører fullscreen? Den skulle
> gærne være ca. den samme som samme opløsning i vindue-mode.
>
> mvh
> Jens-Christian
>



Thomas Krog (06-12-2002)
Kommentar
Fra : Thomas Krog


Dato : 06-12-02 11:47

> Jeg har prøvet at sætte grafikkortet til altid at køre 16-bit i egenskaber
> for skærm, men det ser ikke ud til at ændre noget som helst.

når jeg skifter farvedybde med ChangeDisplaySettings(DEVMODE*,BOOL) er der
næsten en faktor 2 mellem 16 bit og 32 bit.

Det skal dog siges at jeg kun har testet det under fullscreen mode



John Doe (06-12-2002)
Kommentar
Fra : John Doe


Dato : 06-12-02 14:57

Ok. Det vil jeg så prøve når jeg engang (suk når dertil hvor jeg skal
til at optimere til en release build.

Tak for rådet.

Kim Christensen
alias John Doe


"Thomas Krog" <rick@kampsax.dtu.dk> wrote in message
news:aspv81$g30$1@eising.k-net.dk...
> > Jeg har prøvet at sætte grafikkortet til altid at køre 16-bit i
egenskaber
> > for skærm, men det ser ikke ud til at ændre noget som helst.
>
> når jeg skifter farvedybde med ChangeDisplaySettings(DEVMODE*,BOOL) er der
> næsten en faktor 2 mellem 16 bit og 32 bit.
>
> Det skal dog siges at jeg kun har testet det under fullscreen mode
>
>



Søg
Reklame
Statistik
Spørgsmål : 177491
Tips : 31966
Nyheder : 719565
Indlæg : 6408458
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste