Komputer wolno rysuje mi pixele


(Rafaldrugi) #1

Otóż mam taki nietypowy problem. Chodzi o to że programuję w delphi i robiłem właśnie coś tam z malowaniem i bardzo zdziwiłem się kiedy wpisałem funkcję która miała zamalować mi obiekt o wielkości 250x500 px, rysując 500 lini o długości 250 px . Taki mały obszar zamalowuje mi się około 15sek, a sprawdzałem to na innym kompie (dużo słabszym) i zrobiło się to w ułamek sekundy. Czyli nie jest to wina złego kodu tylko coś z komputerem.

Mój sprzęt to laptop Acer Aspire 5740G

procesor - I5-520m 2.4Ghz

grafika - Radeon HD 5470 , 512MB

pamięć - 3Gb DDR3

A sprawdzałem to też na takim sprzęcie (i tutaj to właśnie się robiło ułamek sekundy):

komp stacjonarny

procesor - AMD Athlon 1800+

grafika - GeForce MX 440 with AGP x8

pamięć - 1Gb DDR2


(Kacper B Zuk) #2

Strzelam, bo nie widzę kodu. Byłoby dobrze, gdybyś jednak go pokazał.

Jeżeli odświeżasz ekran po każdej pojedynczej linii, to na nowszym komputerze może się synchronizować z odświeżaniem monitora, czyli rysuje jakieś 60-75 linii na sekundę. Na starszym może tego nie robić i odświeżanie jest wtedy o wiele szybsze. Jeżeli Twój kod wygląda mniej więcej tak (nie znam Delphi, więc to pseudokod):

dla i od 0 do 500

{

    rysuj_linie(...);

    odswiez_ekran();

}

to zmień to na coś takiego

dla i od 0 do 500

{

    rysuj_linie(...);

}

odswiez_ekran();

(Rafaldrugi) #3

Kod wygląda następującą bo dokładniej mówiąc to nie rysuje zwykłego prostokąta tylko obrysowuje parabolę f kwadratowej.

for x:=1 to 500 do

                  begin

                    y:=249;

                    paintbox1.Canvas.MoveTo(x,y);

                    czy:=true;

                    repeat

                      if czy=true then

                      if (paintbox1.Canvas.Pixels[x,y]=clred) or (y=2)

                        then

                          begin

                            czy:=false;

                            paintbox1.Canvas.lineto(x,y+1);

                          end;

                   end;

                      y:=y-1;

                    until y=1;

                  end;

A nie da się czegoś zrobić z są odświeżalnością ekranu?

Poza tym wydaje mi się że to nie ma nic z tym wspólnego bo w szklole na komputerach to próbowałem też malować i też się szybko rysowało, a tam już są nowsze maszyny.

-- Dodane 12.12.2011 (Pn) 17:47 --

Właśnie zauważyłem podejrzewam że znaczącą rzecz, otóż odpaliłem windows XP na maszynie wirtualnej i ku mojemu zdziwieniu czas tego malowania wynosił ułamek sekundy :slight_smile:


(Kacper B Zuk) #4

To z odświeżaniem to tylko taki strzał w ciemno i patrząc na kod - prawdopodobnie nietrafiony. Jak chcesz, to możesz poszukać w sterownikach karty graficznej czegoś z synchronizacją pionową i ją wyłączyć. A tak to nie wiem, co jeszcze może być przyczyną.


(Rafaldrugi) #5

Aha dzięki. W ATI Calatyst control center już ustawiłem wszystko na max wydajność min jakość i dalej to samo, a dokładnie takiej opcji jak synchronizacja pionowa to nie widzę.

No i jeszcze raz dzięki za próbę pomocy.