Lua Shader Gideros Examples
From GiderosMobile
Parent: Writing Lua Shaders
Requirements: In order to use Lua Shaders you need to include luashader standard library in your projects luashader standard library is available in your Gideros installation folder under Library
These are the Lua Shaders examples that come with Gideros installation (eg.: C:\Program Files\Gideros\Examples\Shaders\LuaShaders).
To use them, simply add a Shader to a Sprite, for example:
local s = Pixel.new(256, 128, Texture.new("texture.jpg", false))
s:setShader(Effect.grayscale)
Below are the Effects Shader available as of Gideros 2025.3.
--!NEEDS:luashader/luashader.lua
local function makeEffect(name,vshader,fshader)
local s=Shader.lua(vshader,fshader,0,
{
{name="vMatrix",type=Shader.CMATRIX,sys=Shader.SYS_WVP,vertex=true},
{name="fColor",type=Shader.CFLOAT4,sys=Shader.SYS_COLOR,vertex=false},
{name="fTexture",type=Shader.CTEXTURE,vertex=false},
{name="fTextureInfo",type=Shader.CFLOAT4,sys=Shader.SYS_TEXTUREINFO,vertex=false},
{name="fTime",type=Shader.CFLOAT,sys=Shader.SYS_TIMER,vertex=false},
},
{
{name="vVertex",type=Shader.DFLOAT,mult=2,slot=0,offset=0},
{name="vColor",type=Shader.DUBYTE,mult=4,slot=1,offset=0},
{name="vTexCoord",type=Shader.DFLOAT,mult=2,slot=2,offset=0},
},
{
{name="fTexCoord",type=Shader.CFLOAT2},
}
)
s.name=name
return s
end
Effect={}
Effect.none=makeEffect("None",
function (vVertex,vColor,vTexCoord) : Shader
local vertex = hF4(vVertex,0.0,1.0)
fTexCoord=vTexCoord
return vMatrix*vertex
end,
function () : Shader
local frag=lF4(fColor)*texture2D(fTexture, fTexCoord)
if (frag.a==0.0) then discard() end
return frag
end)
Effect.blur=makeEffect("Blur",
function (vVertex,vColor,vTexCoord) : Shader
local vertex = hF4(vVertex,0.0,1.0)
fTexCoord=vTexCoord
return vMatrix*vertex
end,
function () : Shader
local frag=lF4(0,0,0,0)
local frad=floor((1+sin(fTime))*4)%9 --For the demo use time for rad
local ext=2*frad+1
local tc=fTexCoord-fTextureInfo.zw*frad
for v=0,19 do
if v<ext then
frag=frag+lF4(fColor)*texture2D(fTexture, tc)
end
tc+=fTextureInfo.zw
end
frag=frag/ext
if (frag.a==0.0) then discard() end
return frag
end)
Effect.grayscale=makeEffect("Grayscale",
function (vVertex,vColor,vTexCoord) : Shader
local vertex = hF4(vVertex,0.0,1.0)
fTexCoord=vTexCoord
return vMatrix*vertex
end,
function () : Shader
local frag=lF4(fColor)*texture2D(fTexture, fTexCoord)
local coef=lF3(0.2125, 0.7154, 0.0721)
local gray=dot(frag.rgb,coef)
frag.rgb=lF3(gray,gray,gray)
if (frag.a==0.0) then discard() end
return frag
end)
Effect.saturate=makeEffect("Saturate",
function (vVertex,vColor,vTexCoord) : Shader
local vertex = hF4(vVertex,0.0,1.0)
fTexCoord=vTexCoord
return vMatrix*vertex
end,
function () : Shader
local frad=(1+sin(fTime))*0.5
local frag=lF4(fColor)*texture2D(fTexture, fTexCoord)
local coef=lF3(0.2125, 0.7154, 0.0721)
local dp=dot(frag.rgb,coef)
frag.rgb=mix(frag.rgb,frag.rgb/dp,frad)
if (frag.a==0.0) then discard() end
return frag
end)
Effect.emphasize=makeEffect("Emphasize",
function (vVertex,vColor,vTexCoord) : Shader
local vertex = hF4(vVertex,0.0,1.0)
fTexCoord=vTexCoord
return vMatrix*vertex
end,
function () : Shader
local frag=lF4(fColor)*texture2D(fTexture, fTexCoord)
local e=lF1(2+sin(fTime))
frag.rgb=lF3(frag.r^e,frag.g^e,frag.b^e)
if (frag.a==0.0) then discard() end
return frag
end)
Effect.waves=makeEffect("Waves",
function (vVertex,vColor,vTexCoord) : Shader
local vertex = hF4(vVertex,0.0,1.0)
fTexCoord=vTexCoord
return vMatrix*vertex
end,
function () : Shader
local tc=hF2(fTexCoord.x+(1+sin(fTexCoord.x*10+fTime*2))*0.05,fTexCoord.y)*0.9
local frag=lF4(fColor)*texture2D(fTexture, tc)
if (frag.a==0.0) then discard() end
return frag
end)
Effect.bloom=makeEffect("Bloom",
function (vVertex,vColor,vTexCoord) : Shader
local vertex = hF4(vVertex,0.0,1.0)
fTexCoord=vTexCoord
return vMatrix*vertex
end,
function () : Shader
local frag=lF4(0,0,0,0)
local amount=0.5*(1+sin(fTime))
local frad=floor(amount*8)%9 --For the demo use time for rad
local ext=2*frad+1
local tc=fTexCoord-fTextureInfo.zw*frad
for v=0,19 do
if v<ext then
frag=frag+lF4(fColor)*texture2D(fTexture, tc)
end
tc+=fTextureInfo.zw
end
frag=frag/ext
local bfrag=lF4(fColor)*texture2D(fTexture, fTexCoord)
local coef=lF3(0.2125, 0.7154, 0.0721)
local dp=dot(bfrag.rgb,coef)
if dp<0.5 then bfrag.rgb=lF3(0,0,0) end
frag.rgb=frag.rgb+bfrag.rgb*amount
if (frag.a==0.0) then discard() end
return frag
end)