class RayMarchExample
init : () ->
q = new PXL.Geometry.Quad()
q.vertices[0].c = new PXL.Colour.RGBA(1.0,0.0,0.0,1.0)
q.vertices[1].c = new PXL.Colour.RGBA(0.0,1.0,0.0,1.0)
q.vertices[2].c = new PXL.Colour.RGBA(0.0,0.0,1.0,1.0)
# Pull in a custom shader
r = new PXL.Util.Request('raymarch.glsl')
r.get (data) =>
@shader = PXL.GL.shaderFromText(data)
@n0 = new PXL.Node q
@c = new PXL.Camera.OrthoCamera(new PXL.Math.Vec3(0,0,0.1))
@n0.add @c
@globaltime = 0
# Mouse data
@mp = new PXL.Math.Vec2(PXL.Context.width/2, PXL.Context.height/2)
@ml = false
@mr = false
# Load a texture with our callback
_tex_loaded = (texture) =>
@t = texture
@t.bind()
PXL.GL.textureFromURL("/textures/chessboard.png", _tex_loaded, undefined, { unit: 0, wrapt: GL.REPEAT, wraps: GL.REPEAT })
# Hook into the events for the mouse
PXL.Context.mouseMove.add @onMouseMove, @
PXL.Context.mouseDown.add @onMouseDown, @
PXL.Context.mouseUp.add @onMouseUp, @
onMouseMove : (event) ->
@mp.x = event.mouseX
@mp.y = event.mouseY
onMouseUp : (event) ->
if event.buttonLeft
@ml = true
else
@ml = false
if event.buttonRight
@mr = true
else
@mr = false
onMouseDown : (event) ->
if event.buttonLeft
@ml = true
else
@ml = false
if event.buttonRight
@mr = true
else
@mr = false
draw : (dt) ->
@globaltime += (dt/1000)
GL.clearColor(0.15, 0.15, 0.15, 1.0)
GL.clear(GL.COLOR_BUFFER_BIT | GL.DEPTH_BUFFER_BIT)
if @shader?
@shader.bind()
@shader.setUniform3v "uResolution", new PXL.Math.Vec3(PXL.Context.width, PXL.Context.height,0)
@shader.setUniform1f "uGlobalTime", @globaltime
@shader.setUniform1i "uChannel0", 0
# xy coords, zw click (left right)
vm = new PXL.Math.Vec4(@mp.x,@mp.y,0,0)
if @ml
vm.z = 1
if @mr
vm.w = 1
@shader.setUniform4v "uMouse", vm
dateObj= new Date()
month = parseInt dateObj.getUTCMonth()
day = parseInt dateObj.getUTCDate()
year = parseInt dateObj.getUTCFullYear()
time = dateObj.getTime() / 1000
@shader.setUniform4v "uDate", new PXL.Math.Vec4(year,month,day,time)
@n0.draw()
@shader.unbind()
example = new RayMarchExample()
params =
canvas : 'webgl-canvas'
context : example
init : example.init
draw : example.draw
cgl = new PXL.App params