Lowlevel

Lowlevel => OS-Design => Thema gestartet von: BlitzChecker am 19. April 2006, 18:20

Titel: Pixel malen
Beitrag von: BlitzChecker am 19. April 2006, 18:20
wie kann man mit c++ einen pixel in farbe xyz an position xyz malen?
Titel: Pixel malen
Beitrag von: scales of justice am 19. April 2006, 18:27
erst mal brauchst du ein OS Grundgerüst, bevor du das nicht hast, brauchst du gar nicht erst daran denken irgendetwas in C++ zu machen

wie weit bist du denn?
Titel: Pixel malen
Beitrag von: BlitzChecker am 20. April 2006, 20:38
also, wir sind schon recht weit, aber jetzt wollten wir ne gui machen, und da wollt ich halt wissen, wie man sowas machst. muss man dann für jede grafikkarte nen eigenen treiber proggen?
Titel: Pixel malen
Beitrag von: bitmaster am 20. April 2006, 21:39
Zitat von: BlitzChecker
also, wir sind schon recht weit, aber jetzt wollten wir ne gui machen, und da wollt ich halt wissen, wie man sowas machst. muss man dann für jede grafikkarte nen eigenen treiber proggen?
Eigentlich ja, aber es gibt gewisse Standards wie z.B. VGA und VESA. VGA ist da die einfachere aber auch nur für den Anfang geeignete Metode. Wie kommst du auf Position z? Es gibt nur 2D, sprich x und y. Mal ein ganz kleines Beispiel:

mov ax,0013h ;vga Modus
int 13h ;geht nur wenn man im RM ist
mov ax,A000h
mov es,ax
mov di,y*320+x ;Position wo der pixel gefärbt werden soll
mov al,Farbe
stosb


Mit den Ports musst du vorher die Farben festlegen. An Adresse A000:XXXX befinden sich die Pixel. Wenn du das beherrscht kannst du auch auf VESA umsteigen. Der ist viel besser (16. mio Farben glaube ich, und bis 1280*1024 glaube ich). Dazu musst du aber im PM sein um die Adressen dafür ansprechen zu können (oder im Unrealmode ;) ).

bitmaster
Titel: Pixel malen
Beitrag von: BlitzChecker am 20. April 2006, 22:13
Zitat von: bitmaster
Wie kommst du auf Position z?


xyz hab ich nur so geschrieben, ich meinte damit natürlich x und y. es gibt ja auch die farbe xyz nicht  :wink:

aber danke, du hast mich echt weitergebracht. gibts irgendwo ein tut für den vesa-modus?
Titel: Pixel malen
Beitrag von: T0ast3r am 21. April 2006, 10:06
ein tutorial gibt es, wurde einmal im forum veröffentlicht, ich suche gleich...
am besten du ladest dir die Vesa 3.0 (oder 2.0) spezifikation (eigentlich heißt sie vbe) runter:

dokumente am ftp (über VBE):
http://www.vesa.org/Public/VBE/

direktlink zur VBE 3.0 spezifikation:
http://www.vesa.org/Public/VBE/vbe3.pdf
Titel: Pixel malen
Beitrag von: T0ast3r am 21. April 2006, 10:10
gefunden, der link zum thread:
http://lowlevel.brainsware.org/forum/viewtopic.php?t=516

leider ist das Tutorial down (habs getestet, sowohl das PDF als auch die HTML Version), ich stells aufm ftp (habs auf der Festplatte) und schreib dan den link hier rein
Titel: Pixel malen
Beitrag von: T0ast3r am 21. April 2006, 19:38
der link zum vesa tutorial:
ftp://t0ast3r.t0.ohost.de/vesa.doc
http://t0ast3r.t0.ohost.de/vesa.doc
www.ToasterOS.at.tt/vesa.doc
Titel: Pixel malen
Beitrag von: Coffee am 21. April 2006, 20:19
die links funktionieren alle nich *heul* bei einem wird nach nem passwort und nem benutzernamen gefragt und bei den anderen komtn404 error: seite nich gefunden...
Titel: Pixel malen
Beitrag von: lordnaikon am 21. April 2006, 21:23
dito
Titel: Pixel malen
Beitrag von: Coffee am 21. April 2006, 21:27
waaas heißt
Zitat
Dito
Titel: Pixel malen
Beitrag von: JensFZ am 21. April 2006, 22:00
<OT>Dito bedeutet soviel wie: Bin der gleichen Meinung bzw. Man wünscht dadurch jemanden das gleiche was man von ihm gewünscht bekommt.</OT>

Mich würden auch das tut interessieren, muss mich aber meinen Vorrednern anschließen. Keiner der Links funzt.

MfG JensFZ
Titel: Pixel malen
Beitrag von: T0ast3r am 22. April 2006, 08:41
stimmt, tut mir leid
dabei ist's am ftp oben...
jetzt gehts aber
ich glaub es ist daran gelegen dass es im root war...

Vesa.doc (http://t0ast3r.t0.ohost.de/know%20how/vesa.doc)
Titel: Pixel malen
Beitrag von: Coffee am 22. April 2006, 10:18
joh^^ jetzt gehst...
Titel: Pixel malen
Beitrag von: bitmaster am 22. April 2006, 10:48
Zitat von: T0ast3r
stimmt, tut mir leid
dabei ist's am ftp oben...
jetzt gehts aber
ich glaub es ist daran gelegen dass es im root war...

Vesa.doc (http://t0ast3r.t0.ohost.de/know%20how/vesa.doc)
Nicht schlecht, muss ich echt sagen. Dann bin ich mal auf dein Buch gespannt.
Titel: Pixel malen
Beitrag von: nooooooooos am 22. April 2006, 11:04
Dieses Tutorial hat doch gar nicht Toaster geschrieben.
Das war doch AnotherStupidCoder. Aber ich muss sagen nicht schlecht.

Aber wie geht das mit den Farben?? Muss man da eine Farb-Palette definieren oder gibt es da ein System???
mov edi, [VbeModePhysBasePtr]
mov ecx, 640 * 480
mov eax, 0xCC
rep stosd
Beim Modus, der im Tut verwendet wird, hat man doch 8Bit Farben, warum wird dann ein DW (stosD) geschrieben????

Gruss
Noooooooooooos
Titel: Pixel malen
Beitrag von: T0ast3r am 22. April 2006, 11:19
Paletten gibts nur im VGA Modus!
Bei Vesa verwendest du direkt die RGB Farben
Titel: Pixel malen
Beitrag von: nooooooooos am 22. April 2006, 11:20
Und wie werden die RGB-Farben im 32Bit Modus codiert???
Titel: Pixel malen
Beitrag von: T0ast3r am 22. April 2006, 11:27
wie meinst du codiert?
falls dus so meinst wie ich denke dann schreibst du je nachdem den wer hin, du kannst z.B. wählen 8:8:8
das bedeutet du hast je 8 bits für Rot grün und blau pro pixel
aber wenn du wirklich je 8 bits nimmst, musst du 2 implementierungen vorsehen, für ATI und NVidia
denn bei der einen geht NUR 8:8:8, und nicht 8:8:8:0
Titel: Pixel malen
Beitrag von: nooooooooos am 22. April 2006, 11:44
Also wenn ich aber 8:8:8 benutze, dann hab ich doch von den 32Bits nur 24 genutzt.

Was ist denn unterschiedlichbei ATI und NVida? Ich habe gemeint VESA sei ein Standart und immer gleich???

Gruss
Noooooooooos
Titel: Pixel malen
Beitrag von: bitmaster am 22. April 2006, 13:06
Zitat von: nooooooooos
Standart und immer gleich???
Du weißt doch wie das immer ist. Immer Bedingungen einbauen, wenn so dann so, ansonsten so. ^^
Titel: Pixel malen
Beitrag von: nooooooooos am 22. April 2006, 13:19
OK aber wie muss ich das jetzt mit den 8:8:8 machen???
Zitat
aber wenn du wirklich je 8 bits nimmst
Hä????
Zitat
NUR 8:8:8
Wie soll ich nur machen???? Ich hab ja dann erst 24Bit aufgefüllt. Was muss ich mit den restlichen 8Bits machen????
Und wie muss ich diese Werte dann zusammenrechnen????
Titel: Pixel malen
Beitrag von: T0ast3r am 22. April 2006, 14:11
also:
wenn du 8:8:8 nimmst hast du 24 bits pro pixel, wobei es eigentlich leichter ist mit 32 pixel zurechen, weshalb es auch die Codierung 8:8:8:0 gibt, die vorsieht dass das letze byte 0 ist
ich glaub es war NVidia (oder ATI?) bei der die codierung 8:8:8:0 NICHT geht, obwohl sie eigentlich vorgeschrieben ist
dass ist das einzige was du beachten musst

Zitat

Zitat:
NUR 8:8:8
Wie soll ich nur machen???? Ich hab ja dann erst 24Bit aufgefüllt. Was muss ich mit den restlichen 8Bits machen????
Und wie muss ich diese Werte dann zusammenrechnen????


tja dann musst du halt gut programmieren können ;)
da musst du byteweise arbeiten, da kannst nicht einfach ein dword hernehmen
Titel: Pixel malen
Beitrag von: bitmaster am 22. April 2006, 14:34
Zitat von: T0ast3r
also:
wenn du 8:8:8 nimmst hast du 24 bits pro pixel, wobei es eigentlich leichter ist mit 32 pixel zurechen, weshalb es auch die Codierung 8:8:8:0 gibt, die vorsieht dass das letze byte 0 ist
ich glaub es war NVidia (oder ATI?) bei der die codierung 8:8:8:0 NICHT geht, obwohl sie eigentlich vorgeschrieben ist
dass ist das einzige was du beachten musst

Zitat

Zitat:
NUR 8:8:8
Wie soll ich nur machen???? Ich hab ja dann erst 24Bit aufgefüllt. Was muss ich mit den restlichen 8Bits machen????
Und wie muss ich diese Werte dann zusammenrechnen????


tja dann musst du halt gut programmieren können ;)
da musst du byteweise arbeiten, da kannst nicht einfach ein dword hernehmen
Also wenn ich das richtig verstanden habe, dann heißt das: Ich muss die ersten 3 Byte nehmen und bevor ich das vierte nehme muss ich testen ob ich das darf (wegen NVidia oder ATI). Ist das so richtig?
Titel: Pixel malen
Beitrag von: Jidder am 22. April 2006, 14:50
Und was willst du in das 4. Byte rein tun? Das bleibt immer 0.
Titel: Pixel malen
Beitrag von: T0ast3r am 22. April 2006, 20:18
Zitat von: PorkChicken
Und was willst du in das 4. Byte rein tun? Das bleibt immer 0.


nein, das ist schlichtweg falsch

wenn man den mode setzt (oder irgendeine initalisierungs funktion aufruft) bekommt man eine table mit werten zurück, da gibts ein feld bitsperpixel
indem steht die tatsächlich mögliche bit anzahl per pixel
bei ATI ist es glaub ich 32, bei NVidia 24, oder umgekehrt

es stimmt also überhaupt nicht dass im 4. byte einfach immer 0 steht
zudem gibts codierungen die auch nur 16 bit (oder auch mehr oder weniger) groß sind
Titel: Pixel malen
Beitrag von: nooooooooos am 22. April 2006, 20:41
Ja eben, wenn man bei NVida (oder eben ATI) das letzte Byte nicht mit Null auffüllen darf, mit was denn sonst. Irgendwas muss da ja drin sein????
Titel: Pixel malen
Beitrag von: T0ast3r am 22. April 2006, 20:50
dann beginnt die rote farbe (erstes byte) vom nächsten pixel!

db Pixel1_Rot
db Pixel1_Grün
db Pixel1_Blau

db Pixel2_Rot
db Pixel2_Grün
db Pixel2_Blau

um es zu verdeutlichen
Titel: Pixel malen
Beitrag von: nooooooooos am 23. April 2006, 09:16
Aaaaaaaah
Danke viel mals.

Es bleib aber immernoch diese Frage:
  mov   edi,   [VbeModePhysBasePtr]
   mov   ecx,   640 * 480
   mov   eax,   0xCC
   rep   stosd
Warum wird da ein DW geschrieben obwohl vom Mode nur ein Byte erfordert wird??????

Und: Wenn man den Mode 0x101 setzen will, wiso so kompliziert???mov ax, 0x4F01
mov di, VbeModeInfoBlock
mov cx, 0x4105
and cx, 0xFFF ; Entfernt 0x4 (steht für den LFB.)
int 0x10
Das mit der vier entfernen tscheck ich ja noch, aber dann bleibt ja immernoch 0x105 und nicht 0x101????? Und warum schreibt man den Modus nicht gleich ohne die Vier??????


Gruss
Noooooooooooos
Titel: Pixel malen
Beitrag von: Jidder am 23. April 2006, 12:35
Zitat von: T0ast3r
dann beginnt die rote farbe (erstes byte) vom nächsten pixel!

db Pixel1_Rot
db Pixel1_Grün
db Pixel1_Blau

db Pixel2_Rot
db Pixel2_Grün
db Pixel2_Blau

um es zu verdeutlichen

Ja, aber das entspricht doch dem 24 Bit Modus. Im 32 Bit Modus sähe es so aus:

db Pixel1_Rot
db Pixel1_Grün
db Pixel1_Blau
db 0

db Pixel2_Rot
db Pixel2_Grün
db Pixel2_Blau
db 0

@nooooooooos: Ich bin kein VESA-Experte, aber für mich sieht das mit dem stosd und der 0x101-vs.-0x105-Geschichte einfach nach Tipp- und Flüchtigkeitsfehler aus. Das mov   cx,   0x4105
and   cx,   0xFFF   ; Entfernt 0x4 (steht für den LFB.)

hat vielleicht früher irgendwie so ausgesehen:
mov   cx,   [bp+0x4]
and   cx,   0xFFF   ; Entfernt 0x4 (steht für den LFB.)

und ist einfach ein Relikt aus älteren Codetagen, als der Parameter noch nicht überprüft war, oder so.
Titel: Pixel malen
Beitrag von: nooooooooos am 23. April 2006, 12:40
Zitat
Ja, aber das entspricht doch dem 24 Bit Modus
OK, dann kann ich ja in der zurückgelieferten Tabelle einfach schauen ob 24- oder 32-Bit erwartet wird.

Zitat

mov   cx,   [bp+0x4]
and   cx,   0xFFF   ; Entfernt 0x4 (steht für den LFB.)


Wieso wird dann zu bp 0x4 addiert???
Titel: Pixel malen
Beitrag von: Jidder am 23. April 2006, 14:57
Die Zahl ist ungünstig gewählt, hat aber nix zu bedeuten. Ich hatte auch mov, [bp + 0xabcd], mov cx, [di] oder mov cx, [123] schreiben können.[/quote]
Titel: Pixel malen
Beitrag von: nooooooooos am 23. April 2006, 15:02
Aha, danke.
Titel: Pixel malen
Beitrag von: bitmaster am 29. April 2006, 19:37
Also ich habe jetzt den Modus 101h gesetzt. Aber das folgende Funktioniert nicht:

mov   edi,   [VbeModePhysBasePtr]
   mov   ecx,   640 * 480
   mov   eax,   0xCC
   rep   stosd


Es wird nicht gefärbt. "es" zeigt auf einen Deskriptor der als Limit 4 GByte hat und als Basis Null. Aber man muss doch wissen welcher Wert in VbeModePhysBasePtr ist, bzw. was ist wenn der Wert größer ist als man Arbeitsspeicher hat? Ich verstehe das alles noch nicht so richtig.

EDIT: @nooooooooos: Hast du mich bei MSN geblockt?
Titel: Pixel malen
Beitrag von: nooooooooos am 29. April 2006, 20:57
Ne, ich hab nur eine neue Adresse. Ist jetzt auch im Profil aktualisiert.

Gruss
Noooooooooos
Titel: Pixel malen
Beitrag von: bitmaster am 29. April 2006, 21:11
Zitat von: nooooooooos
Ne, ich hab nur eine neue Adresse. Ist jetzt auch im Profil aktualisiert.

Gruss
Noooooooooos
Also unter nooooooooooos@hotmail.com bleibst du bei mir irendwie immer Offline.

Also ich habe mir jetzt mal den Wert ausgeben lassen, der in [VbeModePhysBasePtr] geschrieben wird. Bei Bochs ist es E0000000h und bei VMware F0000000h. Aber sende ich halt an diese Adresse Werte, passiert gar nichts. Es werden keine Pixel gefärbt, es bleibt alles schwarz. Wieso? Und die Adressen sind ja so weit hinten im Speicher, so viel Arbeitsspeicher habe ich ja gar nicht. Kann der die deswegen nicht ansprechen? Wie aber dann? Ich kapier das nicht.
Titel: Pixel malen
Beitrag von: nooooooooos am 29. April 2006, 21:15
Ne eben nooooooooooooos@hotmail.com ist nicht mehr meine aktuelle Adresse. Die neue ist: dominik_ruettimann AT hotmail DOT com. Ich habs vergessen im Profil nachzutragen.
Titel: Pixel malen
Beitrag von: bitmaster am 30. April 2006, 16:06
Also ich habe es jetzt geschafft Pixel zu malen. Es geht ganz einfach. Ich muss aber ein normales mov nehmen und darf kein stos(b), stos(w) oder stos(d) nehmen. Warum eigentlich nicht? Und noch etwas. In Bochs ist der Modus 144h der 1024*768*32 Modus (glaube ich). Aber das ist in VMWare etc. nicht so. Wie teste ich, welcher Modus der 1024*768*32 ist?

danke!!!
Titel: Pixel malen
Beitrag von: bitmaster am 30. April 2006, 17:57
Hmm.... Scheinen ja nicht viele Antworten zu geben. Bis jetzt habe ich Herausgefunden, dass in [VbeModeBitsPerPixel] die Pixeltiefe geschrieben wird, in [VbeModeXResolution] die Anzahl der Pixel pro Zeile und in [VbeModeYResolution] die Anzahl der Pixel pro Spalte. Also könnte ich mit diesen Werten auf den gewünschten 1024*768*32 Modus prüfen. Soll ich dann einfach alle Moden von 4000h bis 4FFFh durchgehen? Die 4 muss darf ja nicht verändert werden, oder kann ich sogar von 0000h bis FFFFh prüfen?

danke!!! (falls ich eine Antwort bekomme ;) )
Titel: Pixel malen
Beitrag von: n3Ro am 30. April 2006, 18:51
Fast richtig! Für VBE sind nur einige Videomodi (bis 0x120 oder so) fest definiert, der rest ist Herstellerabhänging. Das Beste ist wirklich, sich zu jeder Mode-Nummer die Daten geben zu lassen (auf eine Liste unterstützter Modi zeigt ein Pointer im VBE Info Block). Allzuviele Mode-Nummern gibt es übrigens auch nicht, weil nur die unteren 9 bit eine ModeNummer darstellen und die restlichen Bits für gewünschte Eigenschaften stehen. Und da in Abgrenzung zu VGA Modi die VBE Modi erst bei 0x100 starten, ist der Bereich auf 0x100 bis 0x1ff beschränkt.
Das der Base Pointer bei LFB außerhalb des eigentlichen Speichers liegt ist auch ganz normal, weil man dann den Arbeitspeicher der GraKa anspricht und dieser halt woanders gemappt ist.
Titel: Pixel malen
Beitrag von: bitmaster am 30. April 2006, 19:14
Zitat von: n3Ro
Fast richtig! Für VBE sind nur einige Videomodi (bis 0x120 oder so) fest definiert, der rest ist Herstellerabhänging. Das Beste ist wirklich, sich zu jeder Mode-Nummer die Daten geben zu lassen (auf eine Liste unterstützter Modi zeigt ein Pointer im VBE Info Block). Allzuviele Mode-Nummern gibt es übrigens auch nicht, weil nur die unteren 9 bit eine ModeNummer darstellen und die restlichen Bits für gewünschte Eigenschaften stehen. Und da in Abgrenzung zu VGA Modi die VBE Modi erst bei 0x100 starten, ist der Bereich auf 0x100 bis 0x1ff beschränkt.
Das der Base Pointer bei LFB außerhalb des eigentlichen Speichers liegt ist auch ganz normal, weil man dann den Arbeitspeicher der GraKa anspricht und dieser halt woanders gemappt ist.
OK, gut dann werde ich also alle Mode's von 100h bis 1FFh auf 1024*768*32 testen. Ach so, habe ich mir schon so gedacht das dann der Speicher der Grafikkarte genutzt wird. Nur wieso geht das nicht mit stos und muss direkt mit mov kopiert werden?

bitmaster
Titel: Pixel malen
Beitrag von: n3Ro am 30. April 2006, 19:46
Komisch, müsste eigentlich gehen, schonmal auf nem RealPC probiert? Außerdem, mit:

mov   edi,   [VbeModePhysBasePtr]
mov   ecx,   640 * 480
mov   eax,   0xCC
rep   stosd


schießt du über das Ziel hinaus;) , da du mit stosd immer gleich 4 bytes beschreibst. Also in dem Bsp. würde ich stosb nehmen, und zur Sicherheit auch noch vorher ein CLD machen, damit das Ganze auch sicher in die richtige Richtung geht. Wenn MOV geht muss auch STOSx gehen, das iist meine Meinung dazu.
Titel: Pixel malen
Beitrag von: bitmaster am 30. April 2006, 21:08
Zitat von: n3Ro
Komisch, müsste eigentlich gehen, schonmal auf nem RealPC probiert? Außerdem, mit:

mov   edi,   [VbeModePhysBasePtr]
mov   ecx,   640 * 480
mov   eax,   0xCC
rep   stosd


schießt du über das Ziel hinaus;) , da du mit stosd immer gleich 4 bytes beschreibst. Also in dem Bsp. würde ich stosb nehmen, und zur Sicherheit auch noch vorher ein CLD machen, damit das Ganze auch sicher in die richtige Richtung geht. Wenn MOV geht muss auch STOSx gehen, das iist meine Meinung dazu.
Tja, nur leider geht das nicht. Und mit stosb schon gar nicht, weil stosb es:di und nicht es:edi nimmt. Aber wenn ich 640*480/4 schreibe funktioniert es auch nicht. Leider funktioniert der 1024*768*32 Bit Modus mit VMware nicht. Mit Bochs darf ich nur 3 Bytes beschreiben (obwohl der sagt das es 32 Bit also 4 Byte Modus ist). Und wenn ich die Bytes einzelt hintereinander schreibe, geht es auch nicht, nur mit ein dword aufeinmal. Hmm.... Verstehe das ganze nicht so...

bitmaster
Titel: Pixel malen
Beitrag von: bitmaster am 30. April 2006, 22:11
Cool, ich habs jetzt. Vergesst alles was ich gesagt habe. Ich hatte zwar den Modus auf 1024*768*32 getestet, dann aber vergessen den Wert bzw. die Nummer des Modus von cx nach bx zu kopieren um den dann nacher zu aktivieren. Deswegen lief alles falsch. Aber jetzt habe ich es gemacht, und es funktioniert auf Bochs, VMware und allen meinen PCs (außer auf dem 486er ;) ).

bitmaster
Titel: Pixel malen
Beitrag von: n3Ro am 30. April 2006, 23:17
Schön, dass es jetzt geht ^^

Zitat
Und mit stosb schon gar nicht, weil stosb es:di und nicht es:edi nimmt.

Stimmt wieder nicht so ganz. Ob es:di oder es:edi benutzt wird hängt einzig und allein vom Adressmodus ab: 16bit = es:di und 32bit = es:edi. Der einzige unterschied zwischen den Befehlen ist der Teil von eax, der an die Speicherstelle geschrieben wird und die größe um die edi erhöht wird: b=al & edi+1 , w=ax & edi+2 ,  d =eax & edi+4 und q= rax & rdi+8 (64bit).
Titel: Pixel malen
Beitrag von: bitmaster am 01. May 2006, 10:23
Zitat von: n3Ro
Stimmt wieder nicht so ganz. Ob es:di oder es:edi benutzt wird hängt einzig und allein vom Adressmodus ab: 16bit = es:di und 32bit = es:edi. Der einzige unterschied zwischen den Befehlen ist der Teil von eax, der an die Speicherstelle geschrieben wird und die größe um die edi erhöht wird: b=al & edi+1 , w=ax & edi+2 ,  d =eax & edi+4 und q= rax & rdi+8 (64bit).
Echt? Das wusste ich gar nicht. Ich dachte stosb und stosw nehmen immer es:di und lodsb und lodsw immer ds:si. Also gilt das alles nur für den RM? Na ja, mit stosd etc. klappt es ja nicht deswegen mache ich es mit:

mov [es:edi],eax

Und damit klappt es bei allen PCs die ich habe und bei Bochs und VMware. Also sollte das so schon richtig sein. KA warum das mit stosd nicht geht. Na ja, hat es denn bei einen von euch mit stosd funktioniert?

bitmaster
Titel: Pixel malen
Beitrag von: bitmaster am 01. May 2006, 10:30
Ach ja, noch etwas. Wenn ich in eax den Wert für die Farbe habe, werden die letzten 8 Bit irgendwie ignoriert. Wenn ich z.B. weiß haben will, dann ist es egal ob ich: 00FFFFFFh oder 55FFFFFFh oder FFFFFFFFh etc. schreibe. Es werden also nur 24 Bit berücksichtigt, obwohl ich im 32 Bit Modus bin. Was ist denn mit den letzten 8 Bit? Ist das nur für die Helligkeit etc. zuständig?

danke!!!
Titel: Pixel malen
Beitrag von: kevin am 01. May 2006, 10:51
Das letzte Byte ist dann der Alphakanal, würde ich sagen, und hat auf die Darstellung keine direkte Auswirkung.
Titel: Pixel malen
Beitrag von: bitmaster am 01. May 2006, 11:01
Zitat von: taljeth
Das letzte Byte ist dann der Alphakanal, würde ich sagen, und hat auf die Darstellung keine direkte Auswirkung.
Aha, also kann ich den einfach immer schön auf Null lassen?
Titel: Pixel malen
Beitrag von: n3Ro am 01. May 2006, 11:24
Ja, aber im Prinzip kannst du damit machen, was du willst. Das eine Byte dient nur als Platzhalter, weil sich an 4byte ausgerichtete Werte schneller und einfacher auslesen lassen als an 3byte ausgerichtete Werte. Das ganze nennt sich auch 8:8:8:0, das heißt, dass es 4 Teile gibt von denen nur 3 a 8bit benutzt werden, im Gegensatz zu 8:8:8 (24bit modus), 5:6:5 (16bit modus) oder 5:5:5:1 (15bit modus, da ist nur das mit der 1 komisch) .
Titel: Pixel malen
Beitrag von: bitmaster am 01. May 2006, 12:56
Zitat von: n3Ro
Ja, aber im Prinzip kannst du damit machen, was du willst. Das eine Byte dient nur als Platzhalter, weil sich an 4byte ausgerichtete Werte schneller und einfacher auslesen lassen als an 3byte ausgerichtete Werte. Das ganze nennt sich auch 8:8:8:0, das heißt, dass es 4 Teile gibt von denen nur 3 a 8bit benutzt werden, im Gegensatz zu 8:8:8 (24bit modus), 5:6:5 (16bit modus) oder 5:5:5:1 (15bit modus, da ist nur das mit der 1 komisch) .
OK, gut. Dann habe ich es ja so wie ich will. danke!!!
Titel: Pixel malen
Beitrag von: bitmaster am 02. May 2006, 23:15
Mist, ich hatte was falsch gemacht. Jetzt geht es auch mit (rep) stosd.

bitmaster