Jump to content

Recommended Posts

Posted (edited)

Here another benchmark with 3 nearly different backbuffer methods:

;Coded by UEZ 2009.12.22
#include <GDIplus.au3>
#include <WindowsConstants.au3>

_GDIPlus_Startup()
Global $width = 800
Global $height = 600
Global Const $pi_div_180 = 4 * ATan(1) / 180
Global $end1, $end2, $end3, $i
Global $radius = 200, $ball_size = 150, $loops = 1000

#Region variant 1 using _WinAPI_BitBlt to copy from image from memory to main window -> code by UEZ (thanks Andy for the idea)!
Global $hMain_GUI = GUICreate("Main Window", $width, $height, -1, -1, $WS_POPUP)
GUISetState(@SW_SHOW, $hMain_GUI)

Global $hDC = _WinAPI_GetWindowDC($hMain_GUI)
Global $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hDC)

Global $hBMP = _WinAPI_CreateBitmap($width, $height) ;create a dummy bitmap
Global $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
Global $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)

Global $hScrDC = _WinAPI_GetDC(0)
Global $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hScrDC)
Global $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hBitmap)
Global $hBackbuffer = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) ;create back buffer bitmap

$hBrush = _GDIPlus_BrushCreateSolid(0xFF808080)
$hBrush_Clear = _GDIPlus_BrushCreateSolid(0xFF000000)


$timer = TimerInit()
$i = 0
For $x = 1 To $loops
;~  _WinAPI_BitBlt($hDC_backbuffer, $width / 2 - ($radius + $ball_size / 2), $height / 2 - ($radius + $ball_size / 2), 2 * $radius + $ball_size, 2 * $radius + $ball_size, $hDC_backbuffer, 0, 0, $BLACKNESS)
    _GDIPlus_GraphicsFillRect($hBackbuffer, $width / 2 - ($radius + $ball_size / 2), $height / 2 - ($radius + $ball_size / 2), 2 * $radius + $ball_size, 2 * $radius + $ball_size, $hBrush_Clear)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, $width / 2 - ($radius + $ball_size / 2), $height / 2 - ($radius + $ball_size / 2), 2 * $radius + $ball_size, 2 * $radius + $ball_size, $hBrush_Clear)
    _GDIPlus_GraphicsClear($hBackbuffer, 0xFF000000)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFFFF8080)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos($i * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin($i * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF80FF80)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 90) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 90) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF8080FF)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 180) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 180) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF404040)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 270) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 270) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _WinAPI_BitBlt($hDC, 0, 0, $width, $height, $hDC_backbuffer, 0, 0, 0x00CC0020)
    $i += 1
Next
$end1 = TimerDiff($timer)

ConsoleWrite("Method 1: " & Round($end1, 2) & " ms for " & $loops & " loops" & @CRLF)

_WinAPI_ReleaseDC($hMain_GUI, $hDC)
_GDIPlus_GraphicsDispose($hGraphic)
_WinAPI_DeleteObject($hBMP)
_GDIPlus_BitmapDispose($hImage)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_ReleaseDC(0, $hScrDC)
_WinAPI_SelectObject($hDC_backbuffer, $DC_obj)
_GDIPlus_GraphicsDispose($hBackbuffer)


GUIDelete($hMain_GUI)
#EndRegion

#Region variant 2 using monoceres' buffering method

$hMain_GUI = GUICreate("Main Window", $width, $height, -1, -1, $WS_POPUP)
GUISetState(@SW_SHOW, $hMain_GUI)
Global $graphics = _GDIPlus_GraphicsCreateFromHWND($hMain_GUI)
Global $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
Global $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
_GDIPlus_GraphicsClear($backbuffer)

$timer = TimerInit()
$i = 0
For $x = 1 To $loops
    _GDIPlus_GraphicsFillRect($backbuffer, $width / 2 - ($radius + $ball_size / 2), $height / 2 - ($radius + $ball_size / 2), 2 * $radius + $ball_size, 2 * $radius + $ball_size, $hBrush_Clear)
;~  _GDIPlus_GraphicsClear($backbuffer)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFFFF8080)
    _GDIPlus_GraphicsFillEllipse($backbuffer, -$ball_size / 2 + $width / 2 + Cos($i * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin($i * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF80FF80)
    _GDIPlus_GraphicsFillEllipse($backbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 90) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 90) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF8080FF)
    _GDIPlus_GraphicsFillEllipse($backbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 180) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 180) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF404040)
    _GDIPlus_GraphicsFillEllipse($backbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 270) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 270) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)

    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)
    $i += 1
Next
$end2 = TimerDiff($timer)

ConsoleWrite("Method 2: " & Round($end2, 2) & " ms for " & $loops & " loops" & @CRLF)

_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_GraphicsDispose($graphics)
_GDIPlus_GraphicsDispose($backbuffer)
GUIDelete($hMain_GUI)
#EndRegion

#Region variant 3 weaponx method?
$hMain_GUI = GUICreate("Main Window", $width, $height, -1, -1, $WS_POPUP)
Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hMain_GUI)
Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($Width, $Height, $hGraphics)
Global $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
Global $ScreenDc = _WinAPI_GetDC($hMain_GUI)
Global $gdibitmap, $dc
GUISetState(@SW_SHOW, $hMain_GUI)

$timer = TimerInit()
$i = 0
For $x = 1 To $loops
    _GDIPlus_GraphicsFillRect($hBackbuffer, $width / 2 - ($radius + $ball_size / 2), $height / 2 - ($radius + $ball_size / 2), 2 * $radius + $ball_size, 2 * $radius + $ball_size, $hBrush_Clear)
;~  _GDIPlus_GraphicsClear($backbuffer)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFFFF8080)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos($i * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin($i * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF80FF80)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 90) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 90) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF8080FF)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 180) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 180) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF404040)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 270) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 270) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)

    $gdibitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
    $dc = _WinAPI_CreateCompatibleDC($ScreenDc)
    _WinAPI_SelectObject($dc, $gdibitmap)
    _WinAPI_DeleteObject($gdibitmap)
    _WinAPI_BitBlt($ScreenDc, 0, 0, $width, $height, $dc, 0, 0, $SRCCOPY)
    _WinAPI_DeleteDC($dc)
    $i += 1
Next
$end3 = TimerDiff($timer)

ConsoleWrite("Method 3: " & Round($end3, 2) & " ms for " & $loops & " loops" & @CRLF)

_WinAPI_ReleaseDC($hMain_GUI, $ScreenDc)
_GDIPlus_GraphicsDispose($hBackbuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphics)
#EndRegion

_GDIPlus_BrushDispose($hBrush_Clear)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_Shutdown()
GUIDelete($hMain_GUI)
Exit

;~ Func _GDIPlus_BrushSetSolidColor($hBrush, $iARGB = 0xFF000000)
;~  Local $aResult
;~  $aResult = DllCall($ghGDIPDll, "int", "GdipSetSolidFillColor", "hwnd", $hBrush, "int", $iARGB)
;~  If @error Then Return SetError(@error, @extended, 0)
;~  Return SetError($aResult[0], 0, $aResult[0] = 0)
;~ EndFunc ;==>_GDIPlus_BrushSetSolidColor

Method 1 is the fastest but it has some drawbacks like using Alphablending...

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

  • Replies 71
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted

For me the second method is the fastest (XP MCE SP3)

  Quote

Method 1: 8491.53 ms for 1000 loops

Method 2: 7914.35 ms for 1000 loops

Method 3: 9834.58 ms for 1000 loops

*GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes

Posted

Wow that is such a big difference. For me method 2 is by far the slowest. I'm using Window 7.

  Quote

Method 1: 10823.95 ms for 1000 loops

Method 2: 55552.62 ms for 1000 loops

Method 3: 15448.33 ms for 1000 loops

Posted (edited)

  On 2/6/2010 at 12:44 PM, 'Beege said:

That is Sweet! Why is Alphablending bad?

The issue with _WinAPI_BitBlt() that you cannot activate alpha blending or display transparent images directly! You have to find a workaround!

E.g. you can use _GDIPlus_GraphicsClear($hGraphic, 0x10000000) to activate alpha blending on monoceres' method and with _WinAPI_BitBlt() you have to use a workaround like this:

#include <GDIplus.au3>
#include <WindowsConstants.au3>

_GDIPlus_Startup()
Global $width = 1024
Global $height = 768
Global Const $pi_div_180 = 4 * ATan(1) / 180
Global $end1, $end2, $end3, $i
Global $radius = 300, $ball_size = 150, $loops = 1000

#Region variant 1 using _WinAPI_BitBlt to copy from image from memory to main window -> code by UEZ (thanks Andy for the idea)!
Global $hMain_GUI = GUICreate("Main Window", $width, $height, -1, -1, $WS_POPUP)
GUISetState(@SW_SHOW, $hMain_GUI)

Global $hDC = _WinAPI_GetWindowDC($hMain_GUI)
Global $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hDC)

Global $hBMP = _WinAPI_CreateBitmap($width, $height) ;create a dummy bitmap
Global $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
Global $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)

Global $hScrDC = _WinAPI_GetDC(0)
Global $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hScrDC)
Global $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hBitmap)
Global $hBackbuffer = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) ;create back buffer bitmap

$hBrush = _GDIPlus_BrushCreateSolid(0xFF808080)
$hBrush_Clear = _GDIPlus_BrushCreateSolid(0x10000000) ;enable alpha blending

$timer = TimerInit()
$i = 0
For $x = 1 To $loops
    _GDIPlus_GraphicsFillRect($hBackbuffer, $width / 2 - ($radius + $ball_size / 2), $height / 2 - ($radius + $ball_size / 2), 2 * $radius + $ball_size, 2 * $radius + $ball_size, $hBrush_Clear)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFFFF8080)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos($i * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin($i * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF80FF80)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 90) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 90) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF8080FF)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 180) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 180) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _GDIPlus_BrushSetSolidColor($hBrush, 0xFF404040)
    _GDIPlus_GraphicsFillEllipse($hBackbuffer, -$ball_size / 2 + $width / 2 + Cos(($i + 270) * $pi_div_180) * $radius, -$ball_size / 2 + $height / 2 + Sin(($i + 270) * $pi_div_180) * $radius, $ball_size, $ball_size, $hBrush)
    _WinAPI_BitBlt($hDC, 0, 0, $width, $height, $hDC_backbuffer, 0, 0, $SRCCOPY)
    $i += 1
    Sleep(1)
Next
$end1 = TimerDiff($timer)

ConsoleWrite("Method 1: " & Round($end1, 2) & " ms for " & $loops & " loops" & @CRLF)

_WinAPI_ReleaseDC($hMain_GUI, $hDC)
_GDIPlus_GraphicsDispose($hGraphic)
_WinAPI_DeleteObject($hBMP)
_GDIPlus_BitmapDispose($hImage)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_ReleaseDC(0, $hScrDC)
_WinAPI_SelectObject($hDC_backbuffer, $DC_obj)
_GDIPlus_GraphicsDispose($hBackbuffer)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_Shutdown()
GUIDelete($hMain_GUI)
Exit
#EndRegion

If you load and display e.g. a transparent image and display it you have to do some codings to display transparent image using _WinAPI_BitBlt() method!

Btw, here my results:

Method 1: 5937.49 ms for 1000 loops

Method 2: 9539.2 ms for 1000 loops

Method 3: 8083.92 ms for 1000 loops

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Posted

I know this is a little off topic, but how would you display an image with transparency over another window, like the desktop, using _WinAPI_BitBlt?

I know how to do this using GDIP.au3 with _GDIPlus_GraphicsDrawImageRectRectIA with the image attribute parameter, but it's slow. Drawing a full screen image directly with transparency takes like 300ms with that method on my Win7 laptop. I'm wondering if performance would be better using a backbuffer and _WinAPI_BitBlt. But as you said there has to be a workaround with a transparent image.

Can you do a simple example of drawing a jpg with 50% transparency to the desktop using _WinAPI_BitBlt?

Posted (edited)

I wouldn't use _WinAPI_BitBlt() with transparent images because I know only a complicated way to do it!

Just have a look here : Rotation of Graphic Object over Backround using _WinAPI_BitBlt()

Sorry but I don't have enough space on my account to upload it here!

It is an experimental build!

You have to create a mask image and combine both images together with _WinAPI_BitBlt() and $SRCAND + $SRCINVERT parameters!

Currently I didn't thought about semi transparency!

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Posted

  On 2/6/2010 at 10:30 AM, 'UEZ said:

Here another benchmark with 3 nearly different backbuffer methods:

OMG that's slow, here's what I get (win7 x64, AutoIt 3.3.4.0 x86).

  Quote

DWM enabled:

Method 1: 2804.65 ms for 1000 loops

Method 2: 10404.05 ms for 1000 loops

Method 3: 3269.97 ms for 1000 loops

DWM disabled:

Method 1: 1724.46 ms for 1000 loops

Method 2: 5959.89 ms for 1000 loops

Method 3: 3792.05 ms for 1000 loops

Thank god it's simple to get the more manageable:

  Quote

DWM enabled:

SDL_sprig: 1011.93 ms for 1000 loops

SDL_gfx: 1032.44 ms for 1000 loops

SDL_sge: 1445.16 ms for 1000 loops

DWM disabled:

SDL_sprig: 774.75 ms for 1000 loops

SDL_gfx: 784.14 ms for 1000 loops

SDL_sge: 910.02 ms for 1000 loops

See this:

#Include "SDL_sprig.au3"
#Include "SDL_gfx.au3"
#Include "SDL_sge.au3"
#Include "SDL.au3"

Global $width = 800
Global $height = 600
Global Const $pi_div_180 = 4 * ATan(1) / 180
Global $end1, $end2, $end3, $i
Global $radius = 200, $ball_size = 75, $loops = 1000

EnvSet("SDL_VIDEO_WINDOW_POS", 0 & ", " & 0)

_SDL_Init($_SDL_INIT_VIDEO)
_SDL_Startup_sprig()
_SDL_Startup_gfx()
_SDL_Startup_sge()

Local $iFlags = BitOR($_SDL_SWSURFACE, $_SDL_NOFRAME)
;~ $iFlags = BitOR($iFlags, $_SDL_DOUBLEBUF);Uncomment for doublebuffering?
$pSurface = _SDL_GuiCreate(@ScriptName, $width, $height, 0, $iFlags)

_SDL_stringRGBA($pSurface, 2, 2, "please wait a moment.", 0xFF, 0xFF, 0xFF, 0xFF)
_SDL_Flip($pSurface)

$timerone = TimerInit()     ;Gotta make sure we're running at max capacity
Do
Until TimerDiff($timerone) > 6000

#Region 1
$i = 0
$timer1 = TimerInit()
For $x = 1 To $loops
    _SDL_FillRect($pSurface, 0, 0)

    _SPG_EllipseFilled($pSurface, $width / 2 + Cos($i * $pi_div_180) * $radius, $height / 2 + Sin($i * $pi_div_180) * $radius, $ball_size, $ball_size, 0xFF8080)
    _SPG_EllipseFilled($pSurface, $width / 2 + Cos(($i + 90) * $pi_div_180) * $radius, $height / 2 + Sin(($i + 90) * $pi_div_180) * $radius, $ball_size, $ball_size, 0x80FF80)
    _SPG_EllipseFilled($pSurface, $width / 2 + Cos(($i + 180) * $pi_div_180) * $radius, $height / 2 + Sin(($i + 180) * $pi_div_180) * $radius, $ball_size, $ball_size, 0x8080FF)
    _SPG_EllipseFilled($pSurface, $width / 2 + Cos(($i + 270) * $pi_div_180) * $radius, $height / 2 + Sin(($i + 270) * $pi_div_180) * $radius, $ball_size, $ball_size, 0x404040)

    _SDL_Flip($pSurface)

    $i += 1
Next
$end1 = TimerDiff($timer1)

ConsoleWrite("SDL_sprig: " & Round($end1, 2) & " ms for " & $loops & " loops" & @CRLF)
#EndRegion

#Region 2
$i = 0
$timer2 = TimerInit()
For $x = 1 To $loops
    _SDL_FillRect($pSurface, 0, 0)

    _SDL_filledCircleColor($pSurface, $width / 2 + Cos($i * $pi_div_180) * $radius, $height / 2 + Sin($i * $pi_div_180) * $radius, $ball_size, 0xFF8080FF)
    _SDL_filledCircleColor($pSurface, $width / 2 + Cos(($i + 90) * $pi_div_180) * $radius, $height / 2 + Sin(($i + 90) * $pi_div_180) * $radius, $ball_size, 0x80FF80FF)
    _SDL_filledCircleColor($pSurface, $width / 2 + Cos(($i + 180) * $pi_div_180) * $radius, $height / 2 + Sin(($i + 180) * $pi_div_180) * $radius, $ball_size, 0x8080FFFF)
    _SDL_filledCircleColor($pSurface, $width / 2 + Cos(($i + 270) * $pi_div_180) * $radius, $height / 2 + Sin(($i + 270) * $pi_div_180) * $radius, $ball_size, 0x404040FF)

    _SDL_Flip($pSurface)

    $i += 1
Next
$end2 = TimerDiff($timer2)

ConsoleWrite("SDL_gfx: " & Round($end2, 2) & " ms for " & $loops & " loops" & @CRLF)
#EndRegion

#Region 3
$i = 0
$timer3 = TimerInit()
For $x = 1 To $loops
    _SDL_FillRect($pSurface, 0, 0)

    _sge_FilledEllipse($pSurface, $width / 2 + Cos($i * $pi_div_180) * $radius, $height / 2 + Sin($i * $pi_div_180) * $radius, $ball_size, $ball_size, 0xFF8080)
    _sge_FilledEllipse($pSurface, $width / 2 + Cos(($i + 90) * $pi_div_180) * $radius, $height / 2 + Sin(($i + 90) * $pi_div_180) * $radius, $ball_size, $ball_size, 0x80FF80)
    _sge_FilledEllipse($pSurface, $width / 2 + Cos(($i + 180) * $pi_div_180) * $radius, $height / 2 + Sin(($i + 180) * $pi_div_180) * $radius, $ball_size, $ball_size, 0x8080FF)
    _sge_FilledEllipse($pSurface, $width / 2 + Cos(($i + 270) * $pi_div_180) * $radius, $height / 2 + Sin(($i + 270) * $pi_div_180) * $radius, $ball_size, $ball_size, 0x404040)

    _SDL_Flip($pSurface)

    $i += 1
Next
$end3 = TimerDiff($timer3)

ConsoleWrite("SDL_sge: " & Round($end3, 2) & " ms for " & $loops & " loops" & @CRLF)
#EndRegion

_SDL_Shutdown_sprig()
_SDL_Shutdown_gfx()
_SDL_Shutdown_sge()
_SDL_Quit()

My SDL udf here.

Would you like an example with something else than circles? Ask me.

Posted

  On 2/9/2010 at 1:30 AM, 'AdmiralAlkex said:

...

My SDL udf here.

The download link is dead. Please provide new one!

Btw, my intension was not to use any 3rd party DLL, only build-in stuff :D

Thanks,

UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Posted

  On 2/9/2010 at 9:22 AM, 'UEZ said:

The download link is dead. Please provide new one!

Btw, my intension was not to use any 3rd party DLL, only build-in stuff :huggles:

Thanks,

UEZ

Yes lets stop all progress because we didn't see my link to post #44 right under the broken download :D

Sure there's a few extra files, but when you get over double the speed, isn't it worth it?

And like in post #62 I will probably have everything in au3 files soon, so you don't need to remember to copy dll files.

I admit that the UDF seems lika a mess (it is), but then it's probably one of the biggest one-man-projects on the forum. I know it's the biggest thing I have ever done. It will take time to "iron things out", but what we already have is really awesome, and 99% of everything marked "untested" should work.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...