Explorar o código

Add Mask example;

bjorn %!s(int64=6) %!d(string=hai) anos
pai
achega
8a3b7b34dc
Modificáronse 1 ficheiros con 58 adicións e 0 borrados
  1. 58 0
      examples/Mask/main.lua

+ 58 - 0
examples/Mask/main.lua

@@ -0,0 +1,58 @@
+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