Tally

SourceEdit
function lovr.load()
  stats = { 0, 0, 0, 0 }
  tally = lovr.graphics.newTally('shader', 1, 1)
  readbacks = {}
end

function lovr.update(dt)
  while readbacks[1] and readbacks[1]:isComplete() do
    stats = readbacks[1]:getData()
    table.remove(readbacks, 1)
  end
end

function lovr.draw(pass)
  -- Track metrics in the Tally when drawing the cube
  pass:tick(tally, 1)
  pass:cube(0, 0.7, -1, .5, lovr.headset.getTime())
  pass:tock(tally, 1)

  -- Read back the tally data
  local tx = lovr.graphics.getPass('transfer')
  local readback = tx:read(tally, 1)
  table.insert(readbacks, readback)

  -- Render latest tally results
  pass:text(('%s: %s\n%s: %s\n%s: %s\n%s: %s'):format(
    'vertices', stats[1],
    'vertexshader', stats[2],
    'visibletriangles', stats[3],
    'fragmentshader', stats[4]
  ), 0, 1.7, -1, .1)

  return lovr.graphics.submit(pass, tx)
end