Announcement

Collapse
No announcement yet.

More about FPS benchmark

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • More about FPS benchmark

    Latest FPS benchmark can be found there

    ...
    Last edited by Patrice Terrier; 9 Sep 2009, 11:28 AM.
    Patrice Terrier
    www.zapsolution.com
    www.objreader.com
    Addons: GDImage.DLL 32/64-bit (Graphic library), WinLIFT.DLL 32/64-bit (Skin Engine).

  • #2
    Patrice added two new drawing modes in GDImage.

    My tests and others show the two new modes:

    AlphaBlend mode - to be 200% faster than the previous composite drawing mode

    TransBlt mode - to be 300% faster than the previous composite mode.

    Where fast graphics, we are talking here!

    Very good Patrice!

    Note, the speed improvements will really most likely be most noticable on Windows Vista.
    Last edited by Chris Boss; 9 Sep 2009, 11:43 PM.
    Chris Boss
    Computer Workshop
    Developer of "EZGUI"
    http://cwsof.com
    http://twitter.com/EZGUIProGuy

    Comment


    • #3
      Chris,

      Just a small correction, they are not new mode, TransBlt has been there since the first version of GDImage, and was borrowed to my WinLIFT SkinEngine.
      What i did in the new demo was the hability to easily switch from one mode to the other, using this small function:
      Code:
      FUNCTION ZI_BoostSprite ALIAS "ZI_BoostSprite" (BYVAL nFlag AS LONG, BYVAL RW AS LONG) EXPORT AS LONG
          STATIC WasFlag AS LONG
          IF RW THEN WasFlag = nFlag
          FUNCTION = WasFlag
      END FUNCTION
      as you can see nothing fancy there.

      Note that TransparentBlt works only on true 32-bit OS, and it is one of the fastest mode, probably due to hardware graphic acceleration.
      However it has several limitations that makes it not suitable for advanced graphics. (see the link to MSDN below for further details)

      Indeed it is so fast than even on VISTA DWM you can see small vertical retrace, when you use it on nVidia GeForce GO 7600 and above.

      http://msdn.microsoft.com/en-us/libr...41(VS.85).aspx

      ...
      Last edited by Patrice Terrier; 10 Sep 2009, 02:30 AM.
      Patrice Terrier
      www.zapsolution.com
      www.objreader.com
      Addons: GDImage.DLL 32/64-bit (Graphic library), WinLIFT.DLL 32/64-bit (Skin Engine).

      Comment


      • #4
        See also the TransBlt example that was first posted 10 years ago!

        Last edited by Patrice Terrier; 10 Sep 2009, 08:14 AM.
        Patrice Terrier
        www.zapsolution.com
        www.objreader.com
        Addons: GDImage.DLL 32/64-bit (Graphic library), WinLIFT.DLL 32/64-bit (Skin Engine).

        Comment


        • #5
          Here is another old one, however rather slow.

          Code:
          ' Transparent BitBlt Function
          SUB TransBlt(BYVAL hDC&, _
                       BYVAL xDest&, BYVAL yDest&, BYVAL nWidth&, BYVAL nHeight&, _
                       BYVAL hSrcDC&, _
                       BYVAL xSrc&, BYVAL ySrc&, _
                       BYVAL TransColor&) 
          '   hDC&           Destination device context
          '   xDest&, yDest& Upper-left destination coordinates (pixels)
          '   nWidth&        Width of destination
          '   nHeight&       Height of destination
          '   hSrcBMP&       Handle of the source bitmap
          '   xSrc&, ySrc&   Upper-left source coordinates (pixels)
          '   TransColor&    RGB value for transparent pixels, typically &HC0C0C0.
          '                  Value < 0 means use GetPixel(hDC, X, Y)
          '
          '   32-Bit Transparent BitBlt Function
          '   Adapted to PowerBASIC by Patrice Terrier on 02-15-1999
          
              IF TransColor& < 0 THEN TransColor& = GetPixel(hSrcDC&, 0, 0)
          
            ' Create DCs to hold various stages of transformation.
              SavedDC& = CreateCompatibleDC(hDC&)
              MaskDC& = CreateCompatibleDC(hDC&)
              InvDC& = CreateCompatibleDC(hDC&)
              ResultDC& = CreateCompatibleDC(hDC&)
          
            ' Create monochrome bitmaps for the mask-related bitmaps.
              hMaskBmp& = CreateBitmap(nWidth&, nHeight&, 1, 1, BYVAL %NULL)
              hInvBmp& = CreateBitmap(nWidth&, nHeight&, 1, 1, BYVAL %NULL)
          
            ' Create color bitmaps for final result & stored copy of source.
              hResultBmp& = CreateCompatibleBitmap(hDC&, nWidth&, nHeight&)
              hSaveBmp& = CreateCompatibleBitmap(hDC&, nWidth&, nHeight&)
          
            ' Select bitmaps into DCs.
              hSavePrevBmp& = SelectObject(SavedDC&, hSaveBmp&)
              hMaskPrevBmp& = SelectObject(MaskDC&, hMaskBmp&)
              hInvPrevBmp& = SelectObject(InvDC&, hInvBmp&)
              hDestPrevBmp& = SelectObject(ResultDC&, hResultBmp&)
          
            ' Create mask: set background color of source to transparent color.
              WasColor& = SetBkColor(hSrcDC&, TransColor&)
              CALL BitBlt(MaskDC&, 0, 0, nWidth&, nHeight&, hSrcDC&, xSrc&, ySrc&, %SRCCOPY)
              TransColor& = SetBkColor(hSrcDC&, WasColor&)
          
            ' Create inverse of mask to AND w/ source & combine w/ background.
              CALL BitBlt(InvDC&, 0, 0, nWidth&, nHeight&, MaskDC&, 0, 0, &H00330008) ' %NOTSRCCOPY
          
            ' Copy background bitmap to result.
              CALL BitBlt(ResultDC&, 0, 0, nWidth&, nHeight&, hDC&, xDest&, yDest&, %SRCCOPY)
          
            ' AND mask bitmap w/ result DC to punch hole in the background by
            ' painting black area for non-transparent portion of source bitmap.
              CALL BitBlt(ResultDC&, 0, 0, nWidth&, nHeight&, MaskDC&, 0, 0, &H008800C6) ' %SRCAND
          
            ' Get overlapper
              CALL BitBlt(SavedDC&, 0, 0, nWidth&, nHeight&, hSrcDC&, xSrc&, ySrc&, %SRCCOPY)
          
            ' AND with inverse monochrome mask
              CALL BitBlt(SavedDC&, 0, 0, nWidth&, nHeight&, InvDC&, 0, 0, &H008800C6) ' %SRCAND
          
            ' XOR these two
              CALL BitBlt(ResultDC&, 0, 0, nWidth&, nHeight&, SavedDC&, 0, 0, &H00660046) ' %SRCINVERT
          
            ' Display transparent bitmap on background.
              CALL BitBlt(hDC&, xDest&, yDest&, nWidth&, nHeight&, ResultDC&, 0, 0, %SRCCOPY)
          
            ' Select original objects back.
              CALL SelectObject(SavedDC&, hSavePrevBmp&)
              CALL SelectObject(ResultDC&, hDestPrevBmp&)
              CALL SelectObject(MaskDC&, hMaskPrevBmp&)
              CALL SelectObject(InvDC&, hInvPrevBmp&)
          
            ' Deallocate system resources.
              CALL DeleteObject(hSaveBmp&)
              CALL DeleteObject(hMaskBmp&)
              CALL DeleteObject(hInvBmp&)
              CALL DeleteObject(hResultBmp&)
              CALL DeleteDC(SavedDC&)
              CALL DeleteDC(InvDC&)
              CALL DeleteDC(MaskDC&)
              CALL DeleteDC(ResultDC&)
          
          END SUB
          ...
          Patrice Terrier
          www.zapsolution.com
          www.objreader.com
          Addons: GDImage.DLL 32/64-bit (Graphic library), WinLIFT.DLL 32/64-bit (Skin Engine).

          Comment


          • #6
            Note: 320 fps means nothing if your screen only refreshes 60 times a second.

            most LCD display have a refresh rate of 60 Hz only!

            I shall post a new demo to make this more obvious.

            ...
            Last edited by Patrice Terrier; 11 Sep 2009, 07:29 AM.
            Patrice Terrier
            www.zapsolution.com
            www.objreader.com
            Addons: GDImage.DLL 32/64-bit (Graphic library), WinLIFT.DLL 32/64-bit (Skin Engine).

            Comment


            • #7
              60 FPS = 60 Hz

              The latest demo has been posted there

              ...
              Patrice Terrier
              www.zapsolution.com
              www.objreader.com
              Addons: GDImage.DLL 32/64-bit (Graphic library), WinLIFT.DLL 32/64-bit (Skin Engine).

              Comment


              • #8
                I have posted another one, where each drawing mode is doing exactly the same, with a fixed rate of 65 FPS on VISTA AERO computers.

                ...
                Patrice Terrier
                www.zapsolution.com
                www.objreader.com
                Addons: GDImage.DLL 32/64-bit (Graphic library), WinLIFT.DLL 32/64-bit (Skin Engine).

                Comment

                Working...
                X