oMBRa Posted December 15, 2008 Share Posted December 15, 2008 can anyone make an example of drawing a triangle using double buffering? Link to comment Share on other sites More sharing options...
monoceres Posted December 15, 2008 Share Posted December 15, 2008 GDI+ template with double buffering:#617017A triangle is easiest drawn with _GDIPlus_GraphicsDrawPolygon(). Broken link? PM me and I'll send you the file! Link to comment Share on other sites More sharing options...
oMBRa Posted December 15, 2008 Author Share Posted December 15, 2008 what's wrong with this then: expandcollapse popup#include <GUIConstants.au3> #include <GDIplus.au3> Global Const $width=600 Global Const $height=400 GLobal $title="GDI+" Global $aPoints[4][2] ; Build your GUI here Opt("GUIOnEventMode",1) $hwnd=GUICreate($title,$width,$height) GUISetOnEvent($GUI_EVENT_CLOSE,"close") GUISetState() ; Load your GDI+ resources here: _GDIPlus_Startup() $graphics=_GDIPlus_GraphicsCreateFromHWND($hwnd) $bitmap=_GDIPlus_BitmapCreateFromGraphics($width,$height,$graphics) $backbuffer=_GDIPlus_ImageGetGraphicsContext($bitmap) $Pen = _GDIPlus_PenCreate(0xFF00FF00, 5, 2) Do _GDIPlus_GraphicsClear($backbuffer) ; Draw your GDI+ scene onto $backbuffer here $aPoints[0][0] = 3 $aPoints[1][0] = 150 $aPoints[1][1] = 150 $aPoints[2][0] = 200 $aPoints[2][1] = 100 $aPoints[3][0] = 250 $aPoints[3][1] = 150 _GDIPlus_GraphicsDrawPolygon ($backbuffer, $aPoints, $Pen) Sleep(10) Until False Link to comment Share on other sites More sharing options...
monoceres Posted December 15, 2008 Share Posted December 15, 2008 Why did you remove _GDIPlus_GraphicsDrawImageRect at the end of the loop? Broken link? PM me and I'll send you the file! Link to comment Share on other sites More sharing options...
PsaltyDS Posted December 15, 2008 Share Posted December 15, 2008 Why did you remove _GDIPlus_GraphicsDrawImageRect at the end of the loop? Funky fun with polygons (and no flickering). Nice demo, monoceres: expandcollapse popup#include <GUIConstants.au3> #include <GDIplus.au3> HotKeySet("{ESC}", "_Quit") Global Const $width=600 Global Const $height=400 GLobal $title="GDI+" Global $aPoints[4][2] $aPoints[0][0] = 3 $aPoints[1][0] = 150 $aPoints[1][1] = 150 $aPoints[2][0] = 200 $aPoints[2][1] = 100 $aPoints[3][0] = 250 $aPoints[3][1] = 150 ; Build your GUI here Opt("GUIOnEventMode",1) $hwnd=GUICreate($title,$width,$height) GUISetOnEvent($GUI_EVENT_CLOSE,"close") GUISetState() ; Load your GDI+ resources here: _GDIPlus_Startup() $graphics=_GDIPlus_GraphicsCreateFromHWND($hwnd) $bitmap=_GDIPlus_BitmapCreateFromGraphics($width,$height,$graphics) $backbuffer=_GDIPlus_ImageGetGraphicsContext($bitmap) $Pen = _GDIPlus_PenCreate(0xFF00FF00, 5, 2) Do _GDIPlus_GraphicsClear($backbuffer) ; Draw your GDI+ scene onto $backbuffer here For $n = 1 To 3 $aPoints[$n][0] -= 1 If $aPoints[$n][0] < 0 Then $aPoints[$n][0] = $width $aPoints[$n][1] += 1 If $aPoints[$n][1] > $height Then $aPoints[$n][1] = 0 Next _GDIPlus_GraphicsDrawPolygon ($backbuffer, $aPoints, $Pen) _GDIPlus_GraphicsDrawImageRect($graphics,$bitmap,0,0,$width,$height) Sleep(10) Until False Func close() _GDIPlus_GraphicsDispose($backbuffer) _GDIPlus_BitmapDispose($bitmap) _GDIPlus_GraphicsDispose($graphics) _GDIPlus_Shutdown() Exit EndFunc Func _Quit() close() Exit EndFunc Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
oMBRa Posted December 15, 2008 Author Share Posted December 15, 2008 Why did you remove _GDIPlus_GraphicsDrawImageRect at the end of the loop?lol I thought it wasnt important... Link to comment Share on other sites More sharing options...
monoceres Posted December 15, 2008 Share Posted December 15, 2008 (edited) Funky fun with polygons (and no flickering). Nice demo, monoceres: Heh great stuff PsaltyDS I decided to play a bit myself expandcollapse popup#include <GUIConstantsEx.au3> #include <GDIplus.au3> Global Const $width = 600 Global Const $height = 400 Global Const $pi = 3.14 Global $title = "GDI+" Global $aPoints[4][2] ; Build your GUI here Opt("GUIOnEventMode", 1) $hwnd = GUICreate($title, $width, $height) GUISetOnEvent($GUI_EVENT_CLOSE, "close") GUISetState() ; Load your GDI+ resources here: _GDIPlus_Startup() $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd) $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics) $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap) $brush = _GDIPlus_BrushCreateSolid(0x0C000000) _AntiAlias($backbuffer, 4) $inc = 0 Global $Polygon_Size = Random(80, 120, 1) Global $Polygon_X = Random(0, $width - $Polygon_Size, 1) Global $Polygon_Y = Random(0, $height - $Polygon_Size, 1) Global $Polygon_Xdir = 1 Global $Polygon_ydir = 1 Global $x1, $x2, $x3, $y1, $y2, $y3 Global $Polygon_Speed = 1.2 _GDIPlus_GraphicsClear($backbuffer) Do $inc += 0.02 _GDIPlus_GraphicsFillRect($backbuffer, 0, 0, $width, $height, $brush) $Polygon_X += $Polygon_Xdir $Polygon_Y += $Polygon_ydir $Polygon_Size = 0.5 * (Cos($inc / 1.5) + 1) * 100 + 50 $red = ((Sin(1 * $inc / 1) + 1) / 2) * 256 $green = ((Sin(2 * $inc / 1) + 1) / 2) * 256 $blue = ((Sin(3 * $inc / 1) + 1) / 2) * 256 $Pen = _GDIPlus_PenCreate("0xFF" & Hex($red, 2) & Hex($green, 2) & Hex($blue, 2), 3) $x1 = Cos($inc * $Polygon_Speed) * $Polygon_Size + $Polygon_X $y1 = Sin($inc * $Polygon_Speed) * $Polygon_Size + $Polygon_Y $x2 = Cos($inc * $Polygon_Speed + 2 * $pi / 3) * $Polygon_Size + $Polygon_X $y2 = Sin($inc * $Polygon_Speed + 2 * $pi / 3) * $Polygon_Size + $Polygon_Y $x3 = Cos($inc * $Polygon_Speed + 4 * $pi / 3) * $Polygon_Size + $Polygon_X $y3 = Sin($inc * $Polygon_Speed + 4 * $pi / 3) * $Polygon_Size + $Polygon_Y $aPoints[0][0] = 3 $aPoints[1][0] = $x1 $aPoints[1][1] = $y1 $aPoints[2][0] = $x2 $aPoints[2][1] = $y2 $aPoints[3][0] = $x3 $aPoints[3][1] = $y3 For $i = 1 To $aPoints[0][0] If $aPoints[$i][1] >= $height Then $Polygon_ydir = -1 ElseIf $aPoints[$i][1] <= 0 Then ConsoleWrite("meh!" & @CRLF) $Polygon_ydir = 1 EndIf If $aPoints[$i][0] >= $width Then $Polygon_Xdir = -1 ElseIf $aPoints[$i][0] <= 0 Then $Polygon_Xdir = 1 EndIf Next _GDIPlus_GraphicsDrawPolygon($backbuffer, $aPoints, $Pen) _GDIPlus_PenDispose($Pen) _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height) Sleep(10) Until False Func close() _GDIPlus_BrushDispose($brush) _GDIPlus_GraphicsDispose($backbuffer) _GDIPlus_BitmapDispose($bitmap) _GDIPlus_GraphicsDispose($graphics) _GDIPlus_Shutdown() Exit EndFunc ;==>close Func _AntiAlias($hGraphics, $mode) Local $aResult $aResult = DllCall($ghGDIPDll, "int", "GdipSetSmoothingMode", "hwnd", $hGraphics, "int", $mode) If @error Then Return SetError(@error, @extended, False) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_AntiAlias Edited December 15, 2008 by monoceres Broken link? PM me and I'll send you the file! Link to comment Share on other sites More sharing options...
weaponx Posted December 15, 2008 Share Posted December 15, 2008 Heh great stuff PsaltyDS I decided to play a bit myself Hey thats pretty nice. It only flickered once in a while. Is it true that you can double buffer faster using _WinAPI_BitBlt? Link to comment Share on other sites More sharing options...
monoceres Posted December 15, 2008 Share Posted December 15, 2008 Hey thats pretty nice. It only flickered once in a while. Is it true that you can double buffer faster using _WinAPI_BitBlt?I have no idea. I usually don't like mixing GDI and GDI+ but that might actually be faster I'll test later (if you're not faster) Broken link? PM me and I'll send you the file! Link to comment Share on other sites More sharing options...
oMBRa Posted December 15, 2008 Author Share Posted December 15, 2008 (edited) AMAZING! what is the formula u have used to calcolate the x,y points of the triangle's vertices? Edited December 15, 2008 by oMBra Link to comment Share on other sites More sharing options...
PsaltyDS Posted December 15, 2008 Share Posted December 15, 2008 I decided to play a bit myselfYou win! Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
monoceres Posted December 15, 2008 Share Posted December 15, 2008 AMAZING! what is the formula u have used to calcolate the x,y points of the triangle's vertices?No specific formula, just basic knowledge about trigonometry and especially the unit circle. Broken link? PM me and I'll send you the file! Link to comment Share on other sites More sharing options...
weaponx Posted December 15, 2008 Share Posted December 15, 2008 No specific formula, just basic knowledge about trigonometry and especially the unit circle.Yea, the unit circle! Link to comment Share on other sites More sharing options...
Andreik Posted December 15, 2008 Share Posted December 15, 2008 I have no idea. I usually don't like mixing GDI and GDI+ but that might actually be faster I'll test later (if you're not faster) What`s the difference between GDI and GDI+ ? Link to comment Share on other sites More sharing options...
monoceres Posted December 16, 2008 Share Posted December 16, 2008 What`s the difference between GDI and GDI+ ? GDI+ is the successor of GDI and has better functionality and is object oriented.MSDN page for GDIMSDN page for GDI+Wiki page Broken link? PM me and I'll send you the file! Link to comment Share on other sites More sharing options...
monoceres Posted December 16, 2008 Share Posted December 16, 2008 Oh and I didn't figure out how to use the BitBlt function. I just got black screens. I guess mixing bitmaps objects, graphics objects and device contexts just ode to fail somewhere. Broken link? PM me and I'll send you the file! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now