|
@@ -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
|