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):
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();
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
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ą.
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ę.