möglichkeiten zur grafikausgabe?



  • #8 ?? und wo find ich das? 🙂



  • Beitrag nummer 8 (von oben aus gezaehlt) in diesem Thread 😉



  • ok aber kannst du auch was zu grafischen oberflächen schreiben?



  • DirectX Programmierung in Assembler? Hm. Das solltest du doch besser in C++ coden. In Windows-Programmen taugt Assembler eigentlich nur zur Optimierung Zeitkritischer Stellen (die enthalten dann meist keine calls zu DirectX-Funktionen oder etwas in der Art).

    [ Dieser Beitrag wurde am 30.05.2002 um 22:51 Uhr von Nobuo T editiert. ]



  • also ich meinte jetzt eigentlich mehr ... wie ich meinem OS ne schicke grafische oberfläche gebe... mit int 10 oder so geht das ja nicht weils zu langsam ist(wenn man 25fps haben will) oder man muss irgendwie immer nur das neu malen was sich ändert...

    BlockBUster



  • Du solltest dir erstmal ne eigene Grafikbibliothek schreiben, die die elementarsten Grafikfunktionen beinhaltet, wie putPixel, putHLine (horizontale Linie, sehr schnell mit den String-Befehlen zu implementieren), putRectangle, putFillRect, putLine, putCircle etc.
    Diese Basis solltest du mit möglichst schnellen Assemblerroutinen basteln, worauf du dann mächtigere Funktionen wie z.B. das Zeichnen von Fenstern setzen kannst.

    Beispiel für eine schnelle putPixel-Routine in 320x200 bei 256 Farben:

    mov  ax,0A000h
      mov  es,ax         ; Bildspeichersegment -> ES
      mov  ax,Y
      mov  di,X
      shl  ax,8          ; = Y * 256
      add  di,ax         ; zur X-Koordinate addieren
      shr  ax,2          ; = 256 * Y / 4 = Y * 64
      add  di,ax         ; ges.Formel: X + Y * 256 + Y * 64 = Y * 320 + X -> DI
      mov  al,Col
      stosb              ; Farbbyte an aktuelle Adresse im temporären Speicher
    

    Du solltest erstmal alles in VGA (320x200x8Bit) realisieren (wesentlich einfacher) und dich dann an höhere Auflösungen (VESA) ranwagen.

    [edit]
    Ach ja, die BIOS-Funktionen (int 10h) und erst recht die DOS-Funktionen (int 21h) würd ich sein lassen (außer natürlich zur Modus-Umschaltung) - die sind meist sehr allgemein gehalten und deshalb so langsam. Schreib lieber direkt in den Bildspeicher.

    [ Dieser Beitrag wurde am 31.05.2002 um 18:02 Uhr von Cocaine editiert. ]



  • hi
    also wenn ich das so mache:
    asm{
    mov ax,0A000h
    mov es,ax
    mov ax,[y]
    mov di,[x]
    shl ax,8
    add di,ax
    shr ax,2
    add di,ax
    mov al,[col]
    stosb
    }
    meint der nur
    **Error** main.ASM(100) Rotate count out of range
    **Error** main.ASM(102) Rotate count out of range



  • hi,
    also ich blick hier grad garnixmehr 🙂
    kann jetzt mal einer die schnellste möglichkeit zur ausgabe eines pixels unter 640x480 bei 16farben posten? 🙂



  • geb jetz auch mal meinen senf dazu ab.

    int 10 und vesa sind ja recht lagsam, da sie allgemein gehalten sind. allso werden sie recht selten eingesetzt.

    also bleibt nur der weg das selber zu machen. da trit dann wieder das problem auf, das alles was nicht mehr vga ist nicht mehr genormt ist. ( meines wissens -> durm vesa bios, damits zumindestens entwas gemeinsames gibt ) 320*200*256Fraben ist eingentlich für den anfang eine recht brauchbare Auflösung. (zumindestens für mich, jeder punkt ein byte und nicht so blöd auf 4 masken verteilt) vorallem kann man da mittels des X-Mode mehrere schirme gleichzeitig in den gra****speicher legen. ( tehma dubelbuffering )

    aber genug für heute
    gruss termite



  • Da muss ich doch aber mal VESA verteidigen 😃
    Im Protected mode kann man seit VBE 3.0 direkt in den Graka-speicher schreiben. Das sollte dann mindestens genauso schnell, wie VGA im Real Mode sein, mal abgesehen davon, dass das Wechseln der Segmentregister laenger dauert 😉 - ist aber furchtbar kompliziert und bevor ich mich da noch grossartig in was reinreite bin ich jetzt lieber still :p


Anmelden zum Antworten