/ 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
Bitblt bruger 100% cpukraft
Fra : Rasmus Jakobsen


Dato : 19-03-03 15:30

Hej

Jeg har lavet en klasse som tegner en graf. Jeg har to CompatibleDC's
m_CoordDC
og m_MainDC
Hver af disse har et CompatibleBitmap som har samme størrelse som den DC
grafen får at tegne på.
På m_CoordDC bliver koordinatsystemet tegnet én gang.
Det bliver BitBlt over på m_MainDC hvor kurven bliver tegnet og det hele
bliver så
BitBlt'et over på applikationens DC. Det går i og for sig fint, indtil
hastigheden øges og/eller størrelsen på DC'erne bliver for stor.
Applikationen kører i 1600x1200x32 og den DC hvor grafen bliver tegnet på er
1313x989 pixels stor. Når jeg afleverer data som skal tegnes op imod 25
gange i sekundet bruger den al cpukraft (i.e. 100%). Skifter jeg farvedybde
til 16 bit kører samme applikation som den skal og bruger mellem 0 og 10%
cpukraft.
Er der nogen måde hvorpå jeg tvinge de kompatible bitmaps ned i farvedybde
eller speede Bitblt op på?
Eller andre gode råd?

Udviklingsmiljø er Visual Studio C++ 6.0 hvis det har noget at sige.

med venlig hilsen
Rasmus Jakobsen



 
 
Rasmus Christian Kaa~ (20-03-2003)
Kommentar
Fra : Rasmus Christian Kaa~


Dato : 20-03-03 08:53


"Rasmus Jakobsen" <write_rnjSLETDETTE@hotmail.com> wrote in message
news:3e787ee6$0$18741$4d4eb98e@news.dk.uu.net...
> Hej
>
> Jeg har lavet en klasse som tegner en graf. Jeg har to CompatibleDC's
> m_CoordDC
> og m_MainDC
> Hver af disse har et CompatibleBitmap som har samme størrelse som den DC
> grafen får at tegne på.
> På m_CoordDC bliver koordinatsystemet tegnet én gang.
> Det bliver BitBlt over på m_MainDC hvor kurven bliver tegnet og det hele
> bliver så
> BitBlt'et over på applikationens DC. Det går i og for sig fint, indtil
> hastigheden øges og/eller størrelsen på DC'erne bliver for stor.
> Applikationen kører i 1600x1200x32 og den DC hvor grafen bliver tegnet på
er
> 1313x989 pixels stor. Når jeg afleverer data som skal tegnes op imod 25
> gange i sekundet bruger den al cpukraft (i.e. 100%). Skifter jeg
farvedybde
> til 16 bit kører samme applikation som den skal og bruger mellem 0 og 10%
> cpukraft.
> Er der nogen måde hvorpå jeg tvinge de kompatible bitmaps ned i farvedybde
> eller speede Bitblt op på?
> Eller andre gode råd?
>
> Udviklingsmiljø er Visual Studio C++ 6.0 hvis det har noget at sige.

Hejsa, nu er det jo et forholdsvist stort bitmap du ønsker at tegne med
25Hz, men du nævner intet om hvor stor en CPU du har i den pågældende
maskine. i 32BPP flyttes der ca. 2x den data der bliver flyttet i 16BPP +
Windows er nød til at lave lidt konverting hvis du f.eks. har en
desktop-opsætning der ikke stemmer overens. Alt i alt er du nok nød til at
smide flere oplysninger på bordet



Klaus Petersen (20-03-2003)
Kommentar
Fra : Klaus Petersen


Dato : 20-03-03 13:22

>Windows er nød til at lave lidt konverting..

Det er også min umiddelbare tanke at bruge en masse CPU kraft på at
konventere fra 2 forskellige farvedybder. Desuden er det jo også dobbelt så
meget data der skal flyttes ved 32 bit kontra 16 bit.



Rasmus Jakobsen (20-03-2003)
Kommentar
Fra : Rasmus Jakobsen


Dato : 20-03-03 14:16


"Klaus Petersen" <ng@spectual.ra.bnaa.dk> wrote in message
news:b5cbp2$7q5$1@sunsite.dk...
> >Windows er nød til at lave lidt konverting..
>
> Det er også min umiddelbare tanke at bruge en masse CPU kraft på at
> konventere fra 2 forskellige farvedybder. Desuden er det jo også dobbelt

> meget data der skal flyttes ved 32 bit kontra 16 bit.
>
>

Jeg er enig i at det er en dårlig ide at konvertere mellem to farvedybder.
Det jeg gerne ville er at "tvinge" den DC jeg for at tegne på ned i 16 bit
uanset om ens opsætning er 16 eller 32 bit. Hvis DC'ens farvedybde altid er
16 bit ville mine CreateCompatibleBitmap's også være 16 bit og dermed
hurtige. Men jeg ved ikke om det kan lade sig gøre eller om, hvis det kan
lade sig gøre, blot ville resultere i en konvertering i sidste ende.
Jeg har lavet et lille testprojekt som tegner for fulde kraft og i en given
størrelse (ca. 1400x1100) kan den pumpe ca. 20 billeder i sekundet i 32 bit.
Kører jeg samme test i 16 bit afleverer den ca. 70 billeder i sekundet. I 8
bit er det ca. 140 billeder i sekundet..
Jeg kan ikke helt forstå hvorfor det ikke er lineært mellem 16 og 32.
Det er i øvrigt en 1,8 GHz p4.

Med venlig hilsen
Rasmus



Anders (22-03-2003)
Kommentar
Fra : Anders


Dato : 22-03-03 19:54

Desuden er det jo også dobbelt så
> meget data der skal flyttes ved 32 bit kontra 16 bit.
>
>

Jamen, er 32bit dobbelt så meget som 16 ?
2^16 = 65536
2^24 = 16777216



Rasmus Jakobsen (24-03-2003)
Kommentar
Fra : Rasmus Jakobsen


Dato : 24-03-03 09:39


"Anders" <andersg@adslhome.dk> wrote in message
news:3e7cb13b$0$254$edfadb0f@dread15.news.tele.dk...
> Desuden er det jo også dobbelt så
> > meget data der skal flyttes ved 32 bit kontra 16 bit.
> >
> >
>
> Jamen, er 32bit dobbelt så meget som 16 ?
> 2^16 = 65536
> 2^24 = 16777216
>
>

32 bit data er sådan cirka dobbelt så meget som 16 bit data
Hvilket tal de kan indeholde kan ganske rigtigt være væsentlig større. 16
gange større for at være nøjagtig.



Bjarne Laursen (25-03-2003)
Kommentar
Fra : Bjarne Laursen


Dato : 25-03-03 19:17

DC allokeres normalt i grafikkortets ram. Hvis den er for stor til det
bliver den allokeret den almindelige ram. Hvis den er endnu større
tages swapfilen ibrug.
Hvis der skal kopieres mellem to ramblokke på grafikkortet kan de
fleste kort bruge hardware acceleration og belaster dermed ikke
cpu'en.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste