scaling/zooming: sehr langsam mit DDraw(7): warum bei DX(9) so schnell?



  • Hi,

    ich hab mit DX9-Api und dann mit DDraw7-Api ein bitmap gezoomt-- zur laufzeit, damit man afu einer GUI ein bild heranholen kann.
    mit DX und linearer projektion auf fläche kann ich das "flüssig" machen (>20fps),
    mit Direct Draw und "stretchblt(...)" ist das sehr langsam (bei 3000x3000px ~ 0.8sec auf Matrox G450).

    bei DDraw hab ich:
    -ein HBITMAP, und ein LPDIRECTDRAWSURFACE
    -wenn ein "zoom" verlangt wird, dann benutze ich "stretchblt(...)" um das bitmap auf die surface zu bekommen und dann das normale "fastblt(..)" um auf den backbuffer zu blitten.

    Warum ist DDraw so langsam? mach ich was falsch? Ideen?

    Marcello



  • Naja vieleicht liege ich ja falsch aba kann es nciht sein das du da GDi funktionen nutzt und das ergebnis in die Surface schreibst und GDI funktionen sind nicht Hardware unterstüzt. Wenn du das über DX amchst is es über die Hardware und so eben schneller wenn ich mich nicht irre.



  • GDI kann auch Hardwarebeschleunigt sein, das ist Sache des GDI-Treibers.

    Auf jeden Fall ist aber StretchBlt keine DDraw Funktion sondern eine GDI Funktion.
    Nimm stattdessen IDirectDrawSurface7::Blt statt BltFast und übergehe das StretchBlt.



  • Gibt wahrscheinlich alles Probs mit dem Colorkey. Evtl. wäre per 3D-HW und Alphachannel eine Empfehlung.

    Bye, TGGC (Wähle deine Helden)



  • Das color-keying hab ich extra gelöst. kein prob.

    aber kann ich denn mit "blt" die größe vom bild strecken?
    oder muss ich das dann per hand machen?

    generell:
    wie kann ich einfach ermitteln ob die funktion aus DDraw oder GDI kommt?
    am header?

    Marcello



  • Hier nochmal der Link zur entsprechenden API.
    http://msdn.microsoft.com/archive/en-us/ddraw7/directdraw7/ddover_7dx3.asp?frame=true

    PS:
    Sieht man doch schon am Bezug:
    IDirectDrawSurface7::Blt

    WinApi Funktionen (also auch GDI) ruft man dagegen einfach so auf.
    Außerdem wollen sie fast alle ein HDC als Parameter.

    Und ja: IDirectDrawSurface7::Blt kann stretchen. Und jede brauchbare Graka der letzten 8 Jahre sollte das Hardwaremäßig können...


Anmelden zum Antworten