Pixel:setTexture
From GiderosMobile
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Available since: Gideros 2016.12
Class: Pixel
Description
Associates a texture to the Pixel.
Pixel:setTexture(texture,slot,matrix)
Please note: slot is only useful in conjonction with Shader
Parameters
texture: (TextureBase or TextureRegion) the texture to associate to the pixel, or nil to deassociate
slot: (number) the texture slot that the texture should be associated to. Leave empty or set to 0 for main texture, or if you don't use a specific shader optional
matrix: (Matrix) an optional transform for the texture optional
Examples
2 textures masked in a Pixel
--!NEEDS:luashader/luashader.lua
application:setBackgroundColor(0x909090)
function vshaderpixslot(vVertex,vColor,vTexCoord) : Shader
local vertex = hF4(vVertex,0.0,1.0)
fTexCoord = vTexCoord
return vMatrix*vertex
end
function fshaderpixslot() : Shader
local frag = texture2D(fTexture, fTexCoord)
local frag2 = texture2D(fTexture2, fTexCoord)
return frag * frag2 -- mask
end
local shaderpixslot=Shader.lua(vshaderpixslot,fshaderpixslot,0,
{
{name="vMatrix", type=Shader.CMATRIX, sys=Shader.SYS_WVP, vertex=true},
{name="fTexture", type=Shader.CTEXTURE, vertex=false},
{name="fTexture2", type=Shader.CTEXTURE, 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},
}
)
local tex=Texture.new("gfx/test.png")
local tex2=Texture.new("gfx/arrow_0001.png")
local texw, texh = tex:getWidth(), tex:getHeight()
local px = Pixel.new(nil, texw, texh)
px:setTexture(tex, 0)
px:setTexture(tex2, 1)
px:setShader(shaderpixslot)
stage:addChild(px)
Change Pixel Texture slots on mouse hover
--!NEEDS:luashader/luashader.lua
-- bg
application:setBackgroundColor(0x00007f)
-- shader
function vshaderpixelslot(vVertex, vColor, vTexCoord) : Shader
local vertex = hF4(vVertex, 0.0, 1.0)
fTexCoord = vTexCoord
return vMatrix*vertex
end
function fshaderpixelslot() : Shader
local frag = texture2D(fTexture, fTexCoord)
local frag2 = texture2D(fTexture2, fTexCoord)
if slot == 0 then return frag
else return frag2
end
end
local shaderpixelslot=Shader.lua(vshaderpixelslot, fshaderpixelslot, 0,
{
{name="vMatrix", type=Shader.CMATRIX, sys=Shader.SYS_WVP, vertex=true},
{name="fTexture", type=Shader.CTEXTURE, vertex=false},
{name="fTexture2", type=Shader.CTEXTURE, vertex=false},
{name="slot", type=Shader.CINT, 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},
}
)
-- textures
local texbtnup=Texture.new("gfx/ui/btn_01_up.png")
local texbtndown=Texture.new("gfx/ui/btn_01_down.png")
-- objects
local px = Pixel.new(texbtnup)
-- params
px:setTexture(texbtndown, 1) -- texture, slot
px:setShader(shaderpixelslot)
-- position
px:setPosition(8*4, 8*16)
-- order
stage:addChild(px)
-- listeners
local onenter, moving, onexit
px:addEventListener(Event.MOUSE_HOVER, function(ev)
if px:hitTestPoint(ev.x, ev.y, true) then -- enter
-- execute code only once *
onenter = not onenter
if not onenter then moving = true end
if not moving then
-- execute action only once
px:setShaderConstant("slot", Shader.CINT, 1, 1) -- button Down texture
else
onexit = true
end
ev:stopPropagation()
else -- exit
onenter = false
moving = false
if onexit then
-- execute exit action only once
onexit = false
px:setShaderConstant("slot", Shader.CINT, 1, 0) -- button Up texture
end
end
end)