this time using a shader.
you will see that the house sprite appears to have snow going behind and infront of it at same time
+ Code Snippet// set window properties
SetWindowTitle( "snow" )
SetWindowSize( 1024, 768, 0 )
SetWindowAllowResize( 1 ) // allow the user to resize the window
// set display properties
SetVirtualResolution( 1024, 768 ) // doesn't have to match the window
SetOrientationAllowed( 1, 1, 1, 1 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 30, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts
createShaderFile()
houseSpr=createSprite(createHouse())
SetSpriteScale(houseSpr,25,25)
SetSpriteColor(houseSpr,200,0,0,255)
SetSpritePosition(houseSpr,200,500)
snowShader=1
snowSpr=CreateSprite(0)
SetSpriteSize(snowSpr,1024,768)
LoadSpriteShader(snowShader,"snow.ps")
SetSpriteShader( snowSpr,snowShader )
SetSpriteTransparency(snowSpr,2)
SetShaderConstantByName(snowShader,"resolution",1024,768 ,0,0)
do
SetShaderConstantByName(snowShader,"time",timer(),0,0,0)
sync()
loop
function createShaderFile()
fw=OpenToWrite("snow.ps")
WriteLine(fw,"#ifdef GL_ES")
WriteLine(fw,"precision mediump float;")
WriteLine(fw,"#endif")
WriteLine(fw,"#extension GL_OES_standard_derivatives : enable")
WriteLine(fw,"uniform float time;")
WriteLine(fw,"uniform vec2 resolution;")
//WriteLine(fw,"uniform sampler2D texture0;")
WriteLine(fw,"float snow(vec2 uv,float scale)")
WriteLine(fw,"{")
WriteLine(fw," float w=smoothstep(1.,0.,-uv.y*(scale/100.));if(w<.1)return 0.;")
WriteLine(fw," uv+=time/scale;uv.y+=time*2./scale;uv.x+=sin(uv.y+time*.5)/scale;")
WriteLine(fw," uv*=scale;vec2 s=floor(uv),f=fract(uv),p;float k=1.,d;")
WriteLine(fw," p=.5+.7*sin(11.*fract(sin((s+p+scale)*mat2(7,3,6,5))*5.))-f;d=length(p);k=min(d,k);")
WriteLine(fw," k=smoothstep(0.,k,sin(f.x+f.y)*0.01);")
WriteLine(fw," return k*w;")
WriteLine(fw,"}")
WriteLine(fw,"void main(void){")
WriteLine(fw," vec2 uv=(gl_FragCoord.xy*2.-resolution.xy)/min(resolution.x,resolution.y); ")
WriteLine(fw," vec3 finalColor=vec3(0);")
WriteLine(fw," float c=smoothstep(1.0,0.3,clamp(uv.y*.0+.8,0.0,.75));")
WriteLine(fw," c+=snow(uv,20.)*.3;")
WriteLine(fw," c+=snow(uv,10.)*.5;")
WriteLine(fw," c+=snow(uv,7.5)*.8;")
WriteLine(fw," c+=snow(uv,5.);")
WriteLine(fw," c+=snow(uv,4.);")
WriteLine(fw," c+=snow(uv,3.);")
WriteLine(fw," c+=snow(uv,2.5);")
WriteLine(fw," if (c>=.5) { finalColor=(vec3(c));}")
WriteLine(fw," gl_FragColor = vec4(finalColor,1);")
WriteLine(fw,"}")
CloseFile(fw)
endfunction
function createHouse()
local data as integer [215] = [
0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0]
dataCount=0
ClearScreen()
for y = 0 to 8
for x = 0 to 23
if data[datacount]=1 then DrawLine(x,y,x,y,255,255,255)
inc dataCount,1
next x
next y
render()
img = getImage(0,0,24,10)
SetImageTransparentColor(img,0,0,0)
endfunction img