Code archives/3D Graphics - Misc/Bubbles Screensaver Example
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
For those of us without Windows 7 (Possibly Vista too?) Here's a chance to get a version of the "Bubbles" screensaver! This version, however, is 3D and makes use of a few tricks of Blitz3D to render the scene of the desktop plus the bubbles all as real 3D objects. No '2D images', no Sprites and no external media! Unfortunately, the size is quite large (a B3D compilation problem mainly) and it takes a while to 'kick in' (You may have to wait around 30 seconds). Also, due to some other B3D limitations, it didn't work in Full-screen mode, nor will B3D render in borderless windows. As such, the program runs in a standard, non-scalable window. Last of all, for anyone who wishes to use this as a screensaver, remember to change the extension to ".scr" on compilation. When installing, note that 'preview', 'configure'/'settings' or just selecting the screensaver can cause it to run. Use Taskmanager - Process to remove any instances of the screensaver if this happens, else it might slow down a lot. ---- ---- ---- ---- ---- ---- ---- ---- ---- The code contains some interesting features, which may be of great help. First of all, note the DLL decls as described in the first 'NOTES' comments. These are used to obtain the screen dimensions, and also, to copy the desktop screen as a buffer. This buffer is then applied as a standard, square texture and painted onto a square quadrilateral mesh. The mesh is then resized up to the correct dimensions, which, although results in very slight loss of detail, I'm sure you will agree it's quite accurate. The reason for the resizing is to ensure maximum compatibility (square textures), and to prevent issues of a null-painted border around the edges. This Quad is then placed back from the camera just enough to display in full, equivalent to the desktop image. It is given the EntityOrder maxim to ensure the bubbles can then be drawn behind it, in 3D space, whilst appearing in-front. The quad is also setto EntityFX 1 (Full Bright) so it should appear in "true-colour" These bubbles are generated with their own light sources, and set to be semi-transparent. They are kept at the same distance from the camera, but free to move in the X and Y dimensions. Simplified collision detection is used with some very basic code to simulate the 2D 'bouncing' equivalent to the original Windows 7 screensaver. Finally, the bubbles also have the colour cycling feature. Basically a target colour is defined at random for each bubble, and the buibbles' initial colours are also randoimised. Gradually, the bubbles change colours towards their target, upopin reaching the target, a new target is randomised and so on. ---- ---- ---- ---- ---- ---- ---- I'd be very happy to hear of any feedback and criticism including compatibility issues or especially any instances of failure not covered above. ---------------------------------- Addendum Much of the code has been deprecated for trial purposes or due to faults. You're welcome to uncomment the 'offending' lines if you wish to try out alternative features, but I can't promise reliable results! | |||||
AppTitle "EKD - 3D Bubbles Screensaver" ; NOTES_____________________________________________________________________________________________________________ ; 3D Bubbles Screensaver ; Based on Microsoft "Bubbles" Screensaver ; Written by PJ using Blitz3D ; Fully 3D ; Utilises Windows API Calls: ; .lib "user32.dll" ; user32_GetSystemMetrics% (nIndex%) : "GetSystemMetrics" ; user32_GetDC% (hwnd%) : "GetDC" ; user32_ReleaseDC% (hwnd%, hdc%) : "ReleaseDC" ; user32_ShowWindow% (hwnd%, nCmdShow%) : "ShowWindow" ; user32_GetFocus%() : "GetFocus" ; .lib "gdi32.dll" ; gdi32_GetPixel% (hdc%, x%, y%) : "GetPixel" ; STATICS & CONSTANT DEFINITION AND DECLARATION;____________________________________________________________________ Const MAX_BUBBLES%=16 Const BUBBLE_RADIUS#=1.0 Const BUBBLE_SPEED#=0.025 Const BOUNDARY_X_MIN#=-8 Const BOUNDARY_X_MAX#=8 Const BOUNDARY_Y_MIN#=-6 Const BOUNDARY_Y_MAX#=6 Const BUBBLE_LOC#=7.5 Global GW%,GH% Global OverlaySprite Global Sun% Global Cam Global Quad% Global hWnd%=SystemProperty("AppHWND") Global ExitCondition=False Global MX=MouseX() Global MY=MouseY() Global MZ=MouseZ() Type Bubble Field Entity Field CR,CG,CB Field TR,TG,TB Field DX# Field DY# Field Light End Type ;RUNTIME;____________________________________________________________________________________________________________ main ;METHODS_____________________________________________________________________________________________________________ ; SYSTEM Function main() ;Initialise Initialise ; Reset Key state FlushMouse() FlushKeys() MX=MouseX() MY=MouseY() MZ=MouseZ() ;Required to clear Mouse_*_Speed() values MoveMouse MouseX(),MouseY();GW*0.5,GH*0.5 ; Invoke Main Loop While Not (ExitCondition) Loop Wend ; Closedown ; Free Resources Local ALLBUBBLES.Bubble For ALLBUBBLES.Bubble=Each Bubble FreeEntity ALLBUBBLES\Entity Delete ALLBUBBLES Next ClearWorld True,True,True EndGraphics End End Function Function Initialise() GW%=user32_GetSystemMetrics(16) GH%=user32_GetSystemMetrics(17) Graphics3D GW,GH,32,2 SetBuffer BackBuffer() SeedRnd MilliSecs() AmbientLight 128,128,128 Cam=CreateCamera() CameraRange Cam,0.1,10.0 MoveEntity Cam,0,0,-0.5 Quad=CreateDesktopQuad(1,Float((Float(GH)/Float(GW))),Cam) ;Sun%=CreateLight(1) ;LightColor Sun,192,192,192 CreateBubbles() End Function Function Loop() UpdateBubbles() UpdateWorld RenderWorld ExitCondition =(((GetKey()) Or (KeyDown(1)) Or (GetMouse())) Or (MouseXSpeed()+MouseYSpeed()+MouseZSpeed()) Or (user32_GetFocus()<>hWnd) Or (MouseX()<>MX)Or (MouseY()<>MY)Or (MouseZ()<>MZ)) CollisionCheck() Delay 10 Flip False End Function ; MAINTENANCE Function UpdateBubbles() Local UB.Bubble For UB.Bubble =Each Bubble UpdateColour(UB.Bubble) TranslateEntity UB\Entity,UB\DX*BUBBLE_SPEED,UB\DY*BUBBLE_SPEED,0 Next End Function ; GENERATION Function CreateBubbles() ;OverlaySprite=CreateOverlay() Local IterBubbles% Local Bub.Bubble Local Sprite For IterBubbles=0 To MAX_BUBBLES-1 Bub.Bubble=New Bubble Bub\Entity=CreateSphere(25) ;Sprite=CopyEntity(OverlaySprite) Bub\CR=(Rand(0,224)+32) Bub\CG=(Rand(0,224)+32) Bub\CB=(Rand(0,224)+32) Bub\TR=Rand(224)+32 Bub\TG=Rand(224)+32 Bub\TB=Rand(224)+32 Bub\DX=Rnd(0.0-1.0,1.0) Bub\DY=Rnd(0.0-1.0,1.0) EntityType Bub\Entity,1 ScaleMesh Bub\Entity,BUBBLE_RADIUS,BUBBLE_RADIUS,BUBBLE_RADIUS EntityRadius Bub\Entity,BUBBLE_RADIUS Bub\Light=CreateLight(2) PositionEntity Bub\Light,-25,25,0,True LightConeAngles Bub\Light,0,5 LightColor Bub\Light,255,255,255 LightRange Bub\Light,5 PositionEntity Bub\Entity,Rand(0-IterBubbles,IterBubbles),Rand(0-(IterBubbles Shr 1),IterBubbles Shr 1),BUBBLE_LOC,True PointEntity Bub\Light,Bub\Entity EntityParent Bub\Light,Bub\Entity EntityAlpha Bub\Entity,0.5 ;PositionEntity Sprite,EntityX(Bub\Entity,True),EntityY(Bub\Entity,True),EntityZ(Bub\Entity,True)-1,True ;EntityParent Sprite,Bub\Entity EntityShininess Bub\Entity,0.75 EntityColor Bub\Entity,Bub\CR,Bub\CG,Bub\CB Next UpdateWorld Collisions 1,1,1,1 End Function Function CreateDesktopQuad(W#=1,H#=1,Parent%=0) ;Initialise Local HWnd%=SystemProperty("AppHWND") Local X% Local Y% Local bByte% user32_ShowWindow(HWnd,0) ; Build Quad Mesh Local Mesh%=CreateQuad(W,H,Parent) ; Read Desktop Image Local Desktop_DC%=user32_GetDC(0) Local Image%=CreateImage(GW,GH) Local Buffer%=ImageBuffer(Image) LockBuffer Buffer For Y=0 To GH-1 For X=0 To GW-1 bByte=gdi32_GetPixel(Desktop_DC,X,Y) bByte=ConvertaBRGToaRGB(bByte) WritePixelFast X,Y,bByte,Buffer Next Next user32_ReleaseDC(0,Desktop_DC) UnlockBuffer Buffer ; Apply Scaled Texture From Image Local Texture%=CreateTexture(GW,GH) Local TW=TextureWidth(Texture) Local TH=TextureHeight(Texture) Local TxBuffer%=TextureBuffer(Texture) ResizeImage Image,TW,TH Buffer=ImageBuffer(Image) LockBuffer Buffer LockBuffer TxBuffer For X=0 To TW-1 For Y=0 To TH-1 CopyPixelFast TW-(X+1),Y,Buffer,X,Y,TxBuffer Next Next EntityTexture Mesh,Texture UnlockBuffer Buffer UnlockBuffer TxBuffer ;Fix Memory Leaks FreeImage Image FreeTexture Texture ;Display Window user32_ShowWindow(HWnd,5) ; Return Final Mesh EntityFX Mesh,1 EntityOrder Mesh,MAX_BUBBLES+1 Return Mesh End Function Function CreateQuad(Width#,Height#,Parent%=0) Local Mesh%=CreateMesh() Local Surface%=CreateSurface(Mesh) Local v0%=AddVertex(Surface,-1,1,0,1,0) Local v1%=AddVertex(Surface,1,1,0,0,0) Local v2%=AddVertex(Surface,-1,-1,0,1,1) Local v3%=AddVertex(Surface,1,-1,0,0,1) VertexColor Surface,v0,255,255,255 VertexColor Surface,v1,255,255,255 VertexColor Surface,v2,255,255,255 VertexColor Surface,v3,255,255,255 AddTriangle(Surface,0,1,2) AddTriangle(Surface,3,2,1) ScaleMesh Mesh,0.5*Width,0.5*Height,0.1 If (Parent) Then EntityParent Mesh,Parent Return Mesh End Function Function CreateOverlay() ; DEPRECATED ; Local X,Y,Byte ; Restore Overlay ; Local Sprite=CreateQuad(BUBBLE_RADIUS Shr 1,BUBBLE_RADIUS Shr 1) ; Local Texture=CreateTexture(64,64,771) ; Local Buffer=TextureBuffer(Texture) ; LockBuffer Buffer ; For X= 0 To 63 ; For Y=0 To 63 ; Read Byte ; Byte=ConvertToRGB(Byte,Byte,Byte) ; WritePixelFast X,Y,Byte,Buffer ; Next ; Next ; UnlockBuffer Buffer ; EntityTexture Sprite,Texture ; FreeTexture Texture ; Return Sprite End Function ; COLLISION DETECTION Function CollisionCheck() ; Simple 2D collision trig Local CollBub.Bubble Local BounceBubble For CollBub.Bubble=Each Bubble BounceBubble=EntityCollided(CollBub\Entity,1) If (BounceBubble) CollBub\DX=CollBub\DX-DifferenceX(CollBub\Entity,BounceBubble) CollBub\DY=CollBub\DY-DifferenceY(CollBub\Entity,BounceBubble) Else If CheckBoundsX(CollBub\Entity,BOUNDARY_X_MIN,BOUNDARY_X_MAX) Then CollBub\DX=0-CollBub\DX If CheckBoundsY(CollBub\Entity,BOUNDARY_Y_MIN,BOUNDARY_Y_MAX) Then CollBub\DY=0-CollBub\DY End If Next End Function Function CheckBoundsX(Entity,Min,Max) Return ((EntityX(Entity,True)<Min)Or (EntityX(Entity,True)>Max)) End Function Function CheckBoundsY(Entity,Min,Max) Return ((EntityY(Entity,True)<Min) Or (EntityY(Entity,True)>Max)) End Function Function DifferenceX#(Source,Target) Return (EntityX(Target,True)-EntityX(Source,True)) End Function Function DifferenceY#(Source,Target) Return (EntityY(Target,True)-EntityY(Source,True)) End Function ; BUBBLE COLOURS Function UpdateColour(BC.Bubble) Local R1=BC\CR Local G1=BC\CG Local B1=BC\CB Local R2=BC\TR Local G2=BC\TG Local B2=BC\TB Local DR=Sgn(R2-R1) Local DG=Sgn(G2-G1) Local DB=Sgn(B2-B1) BC\CR=R1+DR BC\CG=G1+DG BC\CB=B1+DB If (Not(DR*DG*DB)) BC\TR=Rand(0,224)+32 BC\TG=Rand(0,224)+32 BC\TB=Rand(0,224)+32 End If EntityColor BC\Entity,BC\CR,BC\CG,BC\CB End Function Function Red(RGB) Return RGB And 255 End Function Function Green(RGB) Return (RGB Shr 8) And 255 End Function Function Blue(RGB) Return (RGB Shr 16) And 255 End Function Function ConvertaBRGToaRGB(aRGB) Local R=(aRGB Shr 16)And 255 Local G=(aRGB Shr 8)And 255 Local B=(aRGB Shr 0)And 255 Local a=(aRGB Shr 24)And 255 Return R+(G Shl 8)+(B Shl 16)+a Shl 24 End Function Function ConvertToRGB(R,G,B) Return R+(G Shl 8)+(B Shl 16) End Function ; DATA (DEPRECATED);_____________________________________________________________________________________________________________ .Overlay ;Data 0,0,0,0,0,1,1,1 ;Data 1,1,1,1,2,2,2,2 ;Data 2,2,2,2,3,3,3,3 ;Data 39,87,86,85,145,229,229,229 ;Data 229,229,230,145,85,86,86,39 ;Data 3,3,3,3,3,2,2,2 ;Data 2,2,2,2,2,1,1,1 ;Data 1,1,1,1,0,0,0,0 ;Data 0,0,0,0,1,1,1,1 ;Data 1,1,1,2,2,2,2,2 ;Data 2,2,3,3,21,23,94,152 ;Data 184,209,202,197,202,211,214,213 ;Data 213,214,211,202,197,201,206,181 ;Data 151,94,23,21,3,3,3,2 ;Data 2,2,2,2,2,2,1,1 ;Data 1,1,1,1,1,0,0,0 ;Data 0,0,0,1,1,1,1,1 ;Data 1,2,2,2,2,2,2,2 ;Data 3,3,45,115,201,189,197,200 ;Data 202,206,206,204,203,203,202,202 ;Data 202,202,202,202,203,204,205,200 ;Data 197,196,185,197,115,45,3,3 ;Data 3,2,2,2,2,2,2,2 ;Data 1,1,1,1,1,1,0,0 ;Data 0,0,1,1,1,1,1,1 ;Data 2,2,2,2,2,2,3,3 ;Data 7,59,192,209,206,203,203,202 ;Data 200,198,196,195,193,192,190,190 ;Data 190,190,191,192,194,196,198,199 ;Data 201,201,201,203,205,188,59,7 ;Data 3,3,3,2,2,2,2,2 ;Data 2,1,1,1,1,1,1,0 ;Data 0,1,1,1,1,1,1,2 ;Data 2,2,2,2,2,3,5,62 ;Data 150,186,199,206,203,199,196,192 ;Data 188,183,179,175,171,168,165,163 ;Data 162,164,167,170,174,177,182,187 ;Data 192,195,198,201,203,197,181,145 ;Data 62,5,3,3,2,2,2,2 ;Data 2,2,1,1,1,1,1,1 ;Data 1,1,1,1,1,1,2,2 ;Data 2,2,2,3,3,61,145,200 ;Data 198,200,201,198,193,186,179,171 ;Data 160,151,143,137,132,129,125,123 ;Data 122,124,127,130,135,139,147,156 ;Data 167,176,184,192,197,199,197,195 ;Data 197,145,61,3,3,3,2,2 ;Data 2,2,2,1,1,1,1,1 ;Data 1,1,1,1,1,2,2,2 ;Data 2,2,3,3,61,192,203,203 ;Data 201,197,192,185,174,160,146,132 ;Data 119,108,99,92,87,84,81,79 ;Data 78,79,82,85,88,93,102,112 ;Data 124,138,153,169,181,190,195,199 ;Data 199,198,187,61,3,3,3,2 ;Data 2,2,2,2,1,1,1,1 ;Data 1,1,1,1,2,2,2,2 ;Data 2,3,3,60,183,199,203,199 ;Data 193,186,175,159,142,122,104,89 ;Data 75,65,57,51,48,46,44,43 ;Data 42,43,45,47,49,53,60,68 ;Data 80,93,111,130,149,168,182,191 ;Data 196,199,196,176,60,3,3,3 ;Data 2,2,2,2,2,1,1,1 ;Data 1,1,1,2,2,2,2,2 ;Data 3,18,154,186,196,201,196,189 ;Data 179,164,145,124,103,82,64,51 ;Data 41,34,29,25,23,22,21,21 ;Data 20,21,22,23,24,27,30,36 ;Data 44,55,69,88,110,133,154,173 ;Data 186,194,197,191,181,153,18,3 ;Data 3,2,2,2,2,2,1,1 ;Data 1,1,2,2,2,2,2,3 ;Data 26,165,204,201,199,193,185,172 ;Data 154,133,110,87,66,48,35,26 ;Data 20,16,14,12,11,11,11,11 ;Data 10,11,11,11,12,13,14,18 ;Data 22,29,39,52,71,93,117,141 ;Data 164,180,191,196,196,201,162,26 ;Data 3,3,2,2,2,2,2,1 ;Data 1,1,2,2,2,2,3,5 ;Data 154,205,204,199,192,182,166,147 ;Data 123,100,77,57,39,27,19,13 ;Data 11,9,8,8,8,8,8,8 ;Data 8,8,8,8,8,8,8,10 ;Data 11,14,20,28,41,58,79,103 ;Data 129,154,175,189,195,199,200,150 ;Data 5,3,3,2,2,2,2,1 ;Data 1,2,2,2,2,3,3,56 ;Data 187,202,200,192,180,162,140,116 ;Data 90,68,48,33,23,16,12,9 ;Data 8,7,7,7,7,7,7,7 ;Data 7,7,7,7,7,7,7,7 ;Data 8,9,11,15,22,32,47,67 ;Data 92,119,146,171,186,195,196,181 ;Data 57,3,3,3,2,2,2,2 ;Data 2,2,2,2,2,3,62,185 ;Data 197,200,192,181,162,136,108,82 ;Data 59,44,40,38,30,19,11,9 ;Data 8,7,7,7,7,7,7,7 ;Data 7,7,7,7,7,7,7,7 ;Data 7,7,8,9,12,17,26,39 ;Data 59,84,113,143,170,187,195,190 ;Data 177,62,3,3,2,2,2,2 ;Data 2,2,2,2,3,57,188,200 ;Data 200,195,183,165,138,107,77,53 ;Data 46,68,109,129,118,75,31,11 ;Data 9,8,7,8,8,8,8,8 ;Data 8,8,8,8,8,8,7,7 ;Data 7,7,7,7,8,10,14,21 ;Data 35,54,81,113,146,173,189,197 ;Data 194,180,58,3,3,2,2,2 ;Data 2,2,2,3,11,152,202,204 ;Data 195,186,169,143,112,78,51,38 ;Data 81,175,239,253,251,206,107,31 ;Data 11,10,9,8,8,8,8,8 ;Data 8,8,8,8,8,8,8,8 ;Data 8,7,7,7,7,8,9,12 ;Data 20,32,54,84,119,151,177,192 ;Data 198,196,147,12,3,3,2,2 ;Data 2,2,2,3,56,196,204,199 ;Data 189,174,149,118,84,55,33,48 ;Data 166,242,255,255,255,255,206,75 ;Data 18,10,10,9,8,8,8,8 ;Data 8,8,8,8,8,8,8,8 ;Data 8,8,8,7,7,7,7,9 ;Data 12,20,35,59,91,125,158,182 ;Data 194,196,188,56,3,3,2,2 ;Data 2,2,3,24,153,198,202,193 ;Data 179,156,126,91,61,37,23,73 ;Data 216,253,255,255,255,255,251,117 ;Data 27,10,10,10,9,9,9,9 ;Data 9,9,9,9,9,9,8,8 ;Data 8,8,8,8,7,7,7,7 ;Data 9,13,22,39,65,98,133,166 ;Data 187,196,192,146,24,3,3,2 ;Data 2,2,3,126,202,204,197,185 ;Data 167,137,101,68,41,23,17,79 ;Data 221,254,255,255,255,255,253,127 ;Data 30,11,11,11,10,9,9,9 ;Data 9,9,9,9,9,9,9,9 ;Data 9,8,8,8,8,7,7,7 ;Data 7,9,14,24,43,72,108,145 ;Data 175,192,198,197,123,3,3,2 ;Data 2,3,41,192,205,203,192,176 ;Data 150,116,78,48,28,16,11,58 ;Data 201,250,255,255,255,255,239,105 ;Data 23,11,11,11,10,9,9,9 ;Data 9,9,9,9,9,9,9,9 ;Data 9,9,8,8,8,8,7,7 ;Data 7,8,10,15,28,51,85,124 ;Data 160,185,198,199,184,41,3,3 ;Data 2,7,121,207,206,198,184,164 ;Data 133,95,59,34,19,13,9,27 ;Data 132,222,250,254,253,243,173,58 ;Data 15,11,11,12,11,10,10,10 ;Data 10,10,10,10,10,10,9,9 ;Data 9,9,9,8,8,8,8,7 ;Data 7,7,8,11,19,36,65,103 ;Data 142,174,193,201,201,119,8,3 ;Data 3,22,200,207,204,192,175,150 ;Data 115,77,45,24,14,10,9,12 ;Data 44,131,201,220,217,164,72,22 ;Data 11,13,13,13,11,10,10,10 ;Data 10,10,10,10,10,10,10,10 ;Data 9,9,9,9,9,8,8,8 ;Data 7,7,7,8,13,25,49,84 ;Data 124,160,186,199,200,197,22,3 ;Data 3,14,187,205,200,186,164,134 ;Data 97,61,33,19,11,9,9,9 ;Data 12,28,60,79,70,40,18,11 ;Data 13,13,13,13,11,10,10,10 ;Data 10,10,10,10,10,10,10,10 ;Data 10,9,9,9,9,8,8,8 ;Data 8,7,7,7,10,18,36,66 ;Data 105,144,176,194,198,178,14,3 ;Data 3,95,191,204,194,178,151,116 ;Data 80,47,26,14,10,9,9,10 ;Data 10,10,11,14,13,11,11,13 ;Data 13,13,13,12,12,11,11,11 ;Data 11,11,11,11,11,10,10,10 ;Data 10,10,9,9,9,9,8,8 ;Data 8,8,7,7,8,13,26,50 ;Data 87,127,164,188,196,180,92,3 ;Data 3,155,199,203,190,170,138,100 ;Data 65,37,20,11,9,9,9,10 ;Data 10,10,11,11,11,11,13,13 ;Data 13,13,14,13,12,11,11,11 ;Data 11,11,11,11,11,11,11,10 ;Data 10,10,10,9,9,9,9,8 ;Data 8,8,7,7,8,11,19,38 ;Data 71,112,152,182,197,191,145,3 ;Data 46,180,203,201,185,160,124,85 ;Data 52,29,15,10,9,9,10,10 ;Data 10,11,11,11,11,13,13,13 ;Data 13,14,14,13,12,11,11,11 ;Data 11,11,11,11,11,11,11,11 ;Data 10,10,10,10,9,9,9,9 ;Data 8,8,8,7,7,9,15,30 ;Data 58,97,140,174,194,196,172,46 ;Data 92,208,207,197,179,151,111,71 ;Data 40,22,13,9,9,9,10,10 ;Data 10,11,11,11,13,13,13,13 ;Data 14,14,14,12,11,11,12,12 ;Data 12,12,12,11,11,11,11,11 ;Data 11,10,10,10,10,9,9,9 ;Data 8,8,8,7,7,8,12,23 ;Data 47,84,127,164,190,201,202,93 ;Data 86,203,206,194,174,142,100,59 ;Data 31,18,11,9,9,9,10,10 ;Data 10,11,11,11,13,13,13,14 ;Data 14,14,13,12,12,12,12,12 ;Data 12,12,12,12,12,11,11,11 ;Data 11,11,10,10,10,9,9,9 ;Data 8,8,8,7,7,7,10,19 ;Data 39,73,116,156,185,200,197,85 ;Data 74,198,205,192,170,136,92,52 ;Data 26,13,10,9,9,10,10,10 ;Data 11,11,11,13,13,13,13,14 ;Data 14,13,12,12,12,12,12,12 ;Data 12,12,12,12,12,12,11,11 ;Data 11,11,10,10,10,10,9,9 ;Data 9,8,8,8,7,7,9,16 ;Data 33,64,106,149,182,198,191,72 ;Data 145,202,204,190,167,132,87,48 ;Data 23,11,9,9,9,10,10,10 ;Data 11,11,11,13,13,13,14,14 ;Data 13,12,12,12,12,12,12,12 ;Data 12,12,12,12,12,12,12,11 ;Data 11,11,11,10,10,10,9,9 ;Data 9,8,8,8,7,7,8,14 ;Data 29,58,100,145,179,197,196,142 ;Data 229,213,204,189,166,129,84,46 ;Data 22,11,8,8,8,10,10,10 ;Data 11,11,11,13,13,13,14,13 ;Data 12,11,12,12,12,12,12,12 ;Data 12,12,12,12,12,12,12,11 ;Data 11,11,11,10,10,10,9,9 ;Data 9,8,8,8,7,7,8,13 ;Data 28,56,97,142,177,198,206,226 ;Data 229,217,204,189,164,126,82,44 ;Data 21,11,8,7,7,9,9,10 ;Data 11,11,11,12,12,12,12,11 ;Data 11,12,12,12,12,12,13,13 ;Data 13,13,13,12,12,12,12,12 ;Data 11,11,11,10,10,10,9,9 ;Data 9,8,8,8,7,7,8,13 ;Data 27,55,96,141,176,197,210,226 ;Data 229,216,202,187,162,124,80,43 ;Data 21,11,8,7,7,8,8,8 ;Data 10,10,10,11,11,10,11,11 ;Data 11,12,12,12,12,12,13,13 ;Data 13,13,13,12,12,12,12,12 ;Data 11,11,11,10,10,10,9,9 ;Data 9,8,8,8,7,7,8,13 ;Data 27,55,96,141,176,196,210,226 ;Data 229,216,202,187,161,123,79,43 ;Data 20,10,8,7,7,8,8,8 ;Data 9,9,9,10,10,10,11,11 ;Data 11,12,12,12,12,12,13,13 ;Data 13,13,13,12,12,12,12,12 ;Data 11,11,11,10,10,10,9,9 ;Data 9,8,8,8,7,7,8,13 ;Data 27,55,96,141,175,196,210,226 ;Data 229,216,203,187,162,124,80,43 ;Data 21,11,8,7,7,8,8,8 ;Data 9,9,9,10,10,10,11,11 ;Data 11,12,12,12,12,12,13,13 ;Data 13,13,13,12,12,12,12,12 ;Data 11,11,11,10,10,10,9,9 ;Data 9,8,8,8,7,7,8,13 ;Data 27,55,96,141,176,196,210,226 ;Data 229,213,203,189,165,127,82,44 ;Data 21,11,8,7,7,8,8,8 ;Data 9,9,9,10,10,10,11,11 ;Data 11,12,12,12,12,12,13,13 ;Data 13,13,13,12,12,12,12,12 ;Data 11,11,11,10,10,10,9,9 ;Data 9,8,8,8,7,7,8,13 ;Data 27,55,96,141,176,197,206,226 ;Data 145,204,203,189,166,129,85,46 ;Data 22,11,8,7,7,8,8,8 ;Data 9,9,9,10,10,10,11,11 ;Data 11,11,12,12,12,12,12,12 ;Data 12,12,12,12,12,12,12,11 ;Data 11,11,11,10,10,10,9,9 ;Data 9,8,8,8,7,7,8,13 ;Data 28,56,98,142,177,197,198,139 ;Data 75,202,204,190,168,132,88,49 ;Data 24,11,8,7,7,8,8,8 ;Data 9,9,9,10,10,10,11,11 ;Data 11,11,12,12,12,12,12,12 ;Data 12,12,12,12,12,12,12,11 ;Data 11,11,11,10,10,10,9,9 ;Data 9,8,8,8,7,7,8,14 ;Data 30,59,101,145,179,198,194,72 ;Data 86,209,206,192,171,137,94,54 ;Data 27,13,8,7,7,8,8,8 ;Data 9,9,9,10,10,10,10,11 ;Data 11,11,11,12,12,12,12,12 ;Data 12,12,12,12,12,12,11,11 ;Data 11,11,10,10,10,10,9,9 ;Data 9,8,8,8,7,7,9,17 ;Data 34,66,108,150,182,200,201,82 ;Data 92,216,207,195,175,144,103,62 ;Data 32,15,9,7,7,7,8,8 ;Data 8,9,9,9,10,10,10,11 ;Data 11,11,11,11,12,12,12,12 ;Data 12,12,12,12,12,11,11,11 ;Data 11,11,10,10,10,9,9,9 ;Data 8,8,8,7,7,8,10,20 ;Data 41,76,119,158,186,200,209,93 ;Data 46,185,204,198,180,153,115,73 ;Data 40,20,10,7,7,7,8,8 ;Data 8,9,9,9,10,10,10,10 ;Data 11,11,11,11,11,11,12,12 ;Data 12,12,12,11,11,11,11,11 ;Data 11,10,10,10,10,9,9,9 ;Data 8,8,8,7,7,8,12,25 ;Data 50,88,131,166,190,197,172,46 ;Data 3,155,203,201,187,163,128,87 ;Data 50,26,13,8,7,7,8,8 ;Data 8,9,9,9,9,10,10,10 ;Data 10,11,11,11,11,11,11,11 ;Data 11,11,11,11,11,11,11,11 ;Data 10,10,10,10,9,9,9,9 ;Data 8,8,8,7,7,9,16,32 ;Data 61,102,143,175,194,196,146,3 ;Data 3,95,198,203,192,172,142,102 ;Data 63,34,17,10,7,7,7,8 ;Data 8,8,9,9,9,9,10,10 ;Data 10,10,11,11,11,11,11,11 ;Data 11,11,11,11,11,11,11,10 ;Data 10,10,10,9,9,9,9,8 ;Data 8,8,7,7,8,11,21,41 ;Data 75,116,154,183,195,186,92,3 ;Data 3,15,194,205,196,180,155,119 ;Data 79,45,23,12,8,7,7,8 ;Data 8,8,8,9,9,9,9,10 ;Data 10,10,10,10,11,11,11,11 ;Data 11,11,11,11,11,10,10,10 ;Data 10,10,9,9,9,9,8,8 ;Data 8,8,7,7,9,15,29,55 ;Data 92,132,166,189,198,182,14,3 ;Data 3,22,204,211,202,188,167,136 ;Data 97,59,32,16,10,7,7,7 ;Data 8,8,8,8,9,9,9,9 ;Data 10,10,10,10,10,10,10,10 ;Data 10,10,10,10,10,10,10,10 ;Data 10,9,9,9,9,8,8,8 ;Data 8,7,7,8,11,20,39,71 ;Data 110,149,179,196,202,197,22,3 ;Data 3,8,120,217,206,194,178,152 ;Data 116,77,44,23,12,8,7,7 ;Data 7,8,8,8,9,9,9,9 ;Data 9,10,10,10,10,10,10,10 ;Data 10,10,10,10,10,10,10,10 ;Data 9,9,9,9,9,8,8,8 ;Data 7,7,7,9,15,28,53,89 ;Data 129,164,188,200,209,115,8,3 ;Data 2,3,41,197,208,200,187,166 ;Data 135,97,60,33,17,10,8,7 ;Data 7,7,8,8,8,8,9,9 ;Data 9,9,9,10,10,10,10,10 ;Data 10,10,10,10,10,10,9,9 ;Data 9,9,9,8,8,8,8,7 ;Data 7,7,8,12,21,40,71,109 ;Data 147,177,195,201,190,41,3,3 ;Data 2,3,3,127,216,203,194,177 ;Data 152,118,80,48,26,15,9,8 ;Data 7,7,7,8,8,8,8,9 ;Data 9,9,9,9,9,9,9,9 ;Data 9,9,9,9,9,9,9,9 ;Data 9,9,8,8,8,8,7,7 ;Data 7,8,11,17,32,57,91,129 ;Data 163,187,197,207,123,3,3,3 ;Data 2,2,3,24,156,206,201,187 ;Data 167,139,104,69,41,23,13,9 ;Data 7,7,7,7,8,8,8,8 ;Data 9,9,9,9,9,9,9,9 ;Data 9,9,9,9,9,9,9,9 ;Data 9,8,8,8,8,7,7,7 ;Data 8,10,15,28,49,79,115,149 ;Data 177,193,199,148,24,3,3,2 ;Data 2,2,3,3,56,214,205,195 ;Data 180,159,129,95,62,37,20,12 ;Data 9,7,7,7,7,8,8,8 ;Data 8,8,8,9,9,9,9,9 ;Data 9,9,9,9,9,9,8,8 ;Data 8,8,8,8,7,7,7,8 ;Data 9,14,25,44,72,105,139,168 ;Data 188,197,199,56,3,3,3,2 ;Data 2,2,2,3,12,152,212,201 ;Data 191,175,152,122,88,56,33,19 ;Data 12,9,7,7,7,7,8,8 ;Data 8,8,8,8,8,8,8,8 ;Data 8,8,8,8,8,8,8,8 ;Data 8,8,8,7,7,7,8,10 ;Data 14,23,40,66,99,132,162,183 ;Data 196,204,144,13,3,3,2,2 ;Data 2,2,2,3,3,57,196,207 ;Data 198,187,171,146,115,81,52,32 ;Data 20,13,9,8,7,7,7,7 ;Data 8,8,8,8,8,8,8,8 ;Data 8,8,8,8,8,8,8,8 ;Data 8,7,7,7,7,8,10,15 ;Data 23,38,62,93,126,156,179,192 ;Data 200,188,58,3,3,3,2,2 ;Data 2,2,2,2,3,3,62,196 ;Data 201,195,184,167,141,110,80,55 ;Data 36,23,15,10,9,7,7,7 ;Data 7,7,7,8,8,8,8,8 ;Data 8,8,8,8,8,8,7,7 ;Data 7,7,7,8,9,11,16,26 ;Data 41,62,90,121,152,176,190,195 ;Data 187,62,3,3,3,2,2,2 ;Data 2,2,2,2,2,3,3,57 ;Data 198,203,195,183,164,140,113,86 ;Data 62,42,27,18,13,9,8,7 ;Data 7,7,7,7,7,7,7,7 ;Data 7,7,7,7,7,7,7,7 ;Data 7,7,9,10,14,21,31,47 ;Data 68,94,122,150,174,190,197,187 ;Data 57,3,3,3,2,2,2,2 ;Data 1,2,2,2,2,3,3,5 ;Data 153,219,203,195,183,166,145,122 ;Data 96,71,50,34,23,16,11,9 ;Data 8,8,7,7,7,7,7,7 ;Data 7,7,7,7,7,7,7,8 ;Data 8,10,13,18,26,39,56,78 ;Data 103,129,153,175,190,198,212,147 ;Data 5,3,3,3,2,2,2,2 ;Data 1,1,2,2,2,2,3,3 ;Data 26,165,219,203,195,185,171,154 ;Data 131,107,83,62,44,31,21,16 ;Data 13,11,9,9,8,8,8,8 ;Data 8,8,8,8,8,9,10,11 ;Data 13,18,24,34,49,69,91,115 ;Data 139,161,179,191,199,214,158,26 ;Data 3,3,3,2,2,2,2,1 ;Data 1,1,2,2,2,2,2,3 ;Data 3,18,153,196,202,197,189,178 ;Data 162,142,120,98,76,57,43,33 ;Data 26,21,17,15,14,13,13,13 ;Data 13,13,13,13,14,17,19,23 ;Data 28,36,48,63,83,106,129,151 ;Data 169,184,193,197,187,147,19,3 ;Data 3,3,2,2,2,2,2,1 ;Data 1,1,1,2,2,2,2,2 ;Data 3,3,3,60,191,207,201,194 ;Data 184,171,154,135,114,94,77,63 ;Data 52,44,37,32,29,27,27,27 ;Data 27,27,27,28,30,34,40,46 ;Data 55,67,82,101,122,143,163,179 ;Data 190,196,203,183,61,3,3,3 ;Data 3,2,2,2,2,2,1,1 ;Data 1,1,1,1,2,2,2,2 ;Data 2,3,3,3,61,195,217,203 ;Data 199,191,180,167,151,134,118,103 ;Data 91,80,70,63,58,55,55,55 ;Data 55,55,55,56,59,66,74,84 ;Data 96,109,124,141,159,175,187,196 ;Data 201,211,191,62,3,3,3,3 ;Data 2,2,2,2,2,1,1,1 ;Data 1,1,1,1,1,2,2,2 ;Data 2,2,3,3,3,61,144,216 ;Data 208,201,197,190,180,169,157,145 ;Data 134,123,113,105,100,97,96,96 ;Data 96,96,96,98,101,108,118,128 ;Data 139,151,163,176,186,194,197,206 ;Data 211,141,61,3,3,3,3,2 ;Data 2,2,2,2,1,1,1,1 ;Data 1,1,1,1,1,1,2,2 ;Data 2,2,2,3,3,3,5,62 ;Data 150,195,208,204,199,193,186,178 ;Data 170,162,154,148,145,143,142,141 ;Data 141,142,142,143,146,151,158,167 ;Data 175,183,190,198,200,206,188,143 ;Data 62,5,3,3,3,3,2,2 ;Data 2,2,2,1,1,1,1,1 ;Data 0,1,1,1,1,1,1,2 ;Data 2,2,2,2,2,3,3,3 ;Data 7,59,192,220,213,205,202,200 ;Data 194,190,186,182,180,178,177,177 ;Data 177,177,178,179,181,184,188,193 ;Data 197,199,203,211,218,189,60,7 ;Data 3,3,3,3,2,2,2,2 ;Data 2,2,1,1,1,1,1,1 ;Data 0,0,1,1,1,1,1,1 ;Data 2,2,2,2,2,2,3,3 ;Data 3,3,45,114,198,193,210,212 ;Data 205,204,204,201,200,198,198,198 ;Data 198,198,198,199,200,201,202,205 ;Data 210,206,185,195,115,45,3,3 ;Data 3,3,3,2,2,2,2,2 ;Data 2,1,1,1,1,1,1,0 ;Data 0,0,0,1,1,1,1,1 ;Data 1,2,2,2,2,2,2,2 ;Data 3,3,3,3,21,23,95,150 ;Data 185,222,217,215,212,210,209,209 ;Data 209,209,210,211,213,217,219,183 ;Data 146,95,23,21,3,3,3,3 ;Data 3,2,2,2,2,2,2,2 ;Data 1,1,1,1,1,1,0,0 ;Data 0,0,0,0,1,1,1,1 ;Data 1,1,1,2,2,2,2,2 ;Data 2,2,3,3,3,3,3,3 ;Data 40,86,85,85,142,231,227,227 ;Data 227,227,227,142,85,85,86,40 ;Data 3,3,3,3,3,3,3,2 ;Data 2,2,2,2,2,2,1,1 ;Data 1,1,1,1,1,0,0,0 ;Data -1 |
Comments
| ||
I see that you are using "get pixel" for every pixel on the screen. I cant find it but it seems like there was a better (faster) way somewhere in the code arcs. |
| ||
You'd think there ought to be a faster way to do it, but I couldn't find anything either. Rather than codearcs here, I looked through MSDN, though... --- Edit - Still no joy. I think you may be referring to a BlitMax solution, of which there seem to be quite a few floating around the forums in general. What's worse, is that due to not writing direct to a suitable resolution ratio texture, means those pixels are read and written multiple times, admittedly, WritePixelFast comes into play for the BB buffer stuff. |
| ||
OKAY I spoke too soon maybe! A Possible alternative and perhaps potentially faster solution to "GetPixel" is to blitter a rectangular capture with GDI32 function: BitBlt decls: .Lib "gdi32.dll" BitBlt%(hDestDC%,X%,Y%,nWidth%,nHeight%,hSrcDC,XSrc,YSrc,dwRop):"BitBlt" So far,though, I've not bbeen able to get this working but maybe someone else can? Any advice/recommendation welcome :) |
| ||
Update: Still working on the BitBlt - I've made some progress, and it seems a faster method, but still some issues that need ironing out. ------- I've re-implemented the Mouse movement cancelling the screensaver in accordance with the Windows 7 original. Also, there's a check for focus loss which cancels it too, since being windowed, it was possible for the mouse to be off the Window when the main loop began. (The code in the first post is altered to reflect these changes). Note the addition of a new Userlib declaration for : user32_GetFocus() |
| ||
WOw, been over a year sine I did this? Doesn't time fly! Anywho- I never did gtet the Blitting to work properly, but there were some minor changes (made escaping/cancelling the app smoother and better for screensaver functionality) and addressed a couple of little bugs! Code above has been updated! |
Code Archives Forum