Mask

function lovr.load()
  lovr.graphics.setBackgroundColor(1, 1, 1)
  mask = lovr.headset.getDisplayMask()

  -- Print the mesh, for debugging
  if mask then
    print('mask = {')
    for i = 1, #mask do
      print(string.format('\t{ %f, %f }', mask[i][1], mask[i][2]))
    end
    print('}')
  else
    print('No mask found')
  end

  shader = lovr.graphics.newShader([[
    vec4 position(mat4 projection, mat4 transform, vec4 vertex) {

      // Rescale mesh coordinates from (0,1) to (-1,1)
      vertex.xy *= 2.;
      vertex.xy -= 1.;

      // Flip the mesh if it's being drawn in the right eye
      if (lovrViewID == 1) {
        vertex.x = -vertex.x;
      }

      return vertex;
    }
  ]], [[
    // The fragment shader returns solid black for illustration purposes.  It could be transparent.
    vec4 color(vec4 graphicsColor, sampler2D image, vec2 uv) {
      return vec4(0., 0., 0., 1.);
    }
  ]])

  if mask then
    mesh = lovr.graphics.newMesh({ { 'lovrPosition', 'float', 2 } }, mask, 'triangles')
  end
end

function lovr.draw()
  if mask then
    -- Mask out parts of the display that aren't visible to skip rendering those pixels later
    lovr.graphics.setShader(shader)
    mesh:draw()
    lovr.graphics.setShader()

    -- Draw a red cube
    lovr.graphics.setColor(0xff0000)
    lovr.graphics.cube('fill', 0, 1.7, -1, .5, lovr.timer.getTime())
    lovr.graphics.setColor(0xffffff)
  else
    lovr.graphics.setColor(0x000000)
    lovr.graphics.print('No mask found.', 0, 1.7, -3, .2)
    lovr.graphics.setColor(0xffffff)
  end
end
View Source