nochmal put pixel
-
Wie kann man bei der Methode denn X,Y und die Farbe angeben ?
-
Die Farbe wird in al uebergeben.
x und y muessen vorher schon in di umgerechnet sein. Hierbei bietet es sich natuerlich an fixe Werte fuer di zu benutzen, anstatt mit 2 Variablen x und y erstmal herumzurechnen... Wenn fuer jeden zu setzenden Pixel jedesmal die Position im Bildschirmspeicher voellig neu berechnet werden sollte, wird das ganze a bissel langsamer. Zum Zeichnen von Bitmaps o.ae. ist das dann natuerlich noch weniger geeignet, als die vorherige Variante...Aber nur mal so zum Spass an der Freud, eine Putpixel Funktion, die x und y erwartet:
;x in bx y in dx Farbe in al - bx cx dx werden veraendert. zum Sichern, muessen nochmal 15 clock cycles dazugerechnet werden... (1 fuer push reg16 und 4 fuer pop reg16)
call PutPixel ;/3
push es ;/3
mov cx,dx ;/1
shl dx,08h ;y256 /2
shl cx,06h ;y64 /2
add dx,cx ;=>y320 /1
add bx,dx ;=>y320+x /1
mov dx,0A000h ;/1
mov es,dx ;/3
mov [byte ptr es:bx],al ;/1
pop es ;/3
ret ;/5
==>26 clock cycles => 0,000043333 ms
-
hi also das heißt mit der letzten funkion kann ich meinen gesamten bildschirm (320x200) in 2,773312 ms "vollmalen"? das stimmt doch net ganz oder?
320 x 200 = 64000
64000 x 0,000043333 ms = 2,773312dann kann man ja superflüßige animationen erstellen etc. denn das menschliche auge kann nur etwas 25 bilder pro sekunde "erkennen" also alle 40ms ein neues
MFG BlockBuster
-
Schoen waers
Der Prozessor ist Willig, die restliche Hardware jedoch meist nicht
1. Ist die Bildschirmrefreshrate net so hoch.
2. kannst du doch nicht NUR mit dieser Proc jedesmal ein neues Bild erstellen...
-
hi,
schade
welche teile der hardware verlangsamen denn diesen vorgang?
kann man die refreshrate net irgendwie umstellen?
wie soll man sonst nem OS eine schöne Oberfläche geben? Wie ist denn das beispielsweiße bei windows? ich könnte mir vorstellen das die nicht alle 40ms den ganzen bildschirm neu "malen" sondern nur den teil der sich geändert hat, stimmt das?
-
Hab gerade bemerkt: man sollte keine Beitraege zwischen Tuer und Angel erstellen
Also: Wenn du zum Neuzeichnen des Bildschirms 2,773312 ms brauchst, gibt das ca.50 Bilder pro Sekunde. Das laesst sich selbst mit aelteren Grafikkarten noch gut umsetzen.
Und: ja, bei Windows werden meist nur Teile des Bildschirms neu gezeichnet.
[Nachtrag:]
Die meisten Grafiken in einem OS, wie zB. rechteckige Fenster/Buttons oder Bitmaps wuerde ich nicht durch eine solche "langsame" Putpixel-proc zeichnen.[ Dieser Beitrag wurde am 15.07.2002 um 00:36 Uhr von Nobuo T editiert. ]
-
was meinsten denn mit tür und angel?
also wenn nicht mir ner put pixel routine, wie dann? funktionen zum zeichnen eines rechteckes bestehen doch auch auf putpixel routinen oder?so ich guck jetzt mal schön gemütlich seven days
-
Mit der ersten aussage meinte ich, dass ich wenig Zeit hatte...
Ein ausgefuelltes Rechteck wuerde ich zB. eher so zeichnen:
di=Position linker oberer Ecke
mov dx,di
mov cx,YLaenge
Loop1:
push cx
mov cx,XLaenge
mov al,Farbe
rep stosb
add dx,XResolution ;Bildschirmaufloesung X
mov di,dx
pop cx
loop Loop1Etwas schneller, gel
Mit einem Bitmap kann man dann so aehnlich umgehen...
Eine putpixel routine, die x und y Koordinaten erstmal in einen Speicherindex umrechnet etc. ist wirklich in den seltensten Faellen sinnvoll...
-
Hi,
das Problem ist, dass maximal 8 Millionen Pixel pro Sekunde
(bei 16 bit tiefe) gesetzt werden können. Mehr ist definitiv nicht zu
Schaffen. Trotz AGP-BUS !!!Trotz optimierten ASM-Code !!
Gelesen können nur die Hälfte.
Auch bei einer noch so schnellen CPU ist nicht mehr drin !!That's it.
Cu
Manitu
-
Und man sollte vielleicht noch in betracht ziehen,d ass man den Bildschirm zwar evtl. schnell vollmalen kann, aber das zu malende Bild muss wohl auch irgendwie ausgerechnet werden, im Speicher hinterlegt und dann bei den PutPixel-Routinen wieder vom Speicher geholt werden...da kommt einiges zusammen
-
hi nochmal,
und könnt ihr mal die wirklich "schnellste" und "beste" putpixel routine posten? also was total optimiert ist etc.
-
*push*
-
*siehe 4. und 2. Posting*
was sehr viel schnelleres habe ich noch net gesehen