Prechádzať zdrojové kódy

Add some tests for Buffer formats;

bjorn 1 rok pred
rodič
commit
e3c16e4659
1 zmenil súbory, kde vykonal 122 pridanie a 0 odobranie
  1. 122 0
      tests/buffers.lua

+ 122 - 0
tests/buffers.lua

@@ -0,0 +1,122 @@
+function lovr.load()
+  local buffer, data
+
+  -- Size
+  buffer = lovr.graphics.newBuffer(16)
+  assert(buffer:getSize() == 16)
+  assert(buffer:getLength() == nil)
+  assert(buffer:getStride() == nil)
+  assert(buffer:getFormat() == nil)
+
+  -- Format
+  buffer = lovr.graphics.newBuffer('int')
+  assert(buffer:getSize() == 4)
+  assert(buffer:getLength() == 1)
+  assert(buffer:getStride() == 4)
+
+  -- Length
+  buffer = lovr.graphics.newBuffer('float', 16)
+  assert(buffer:getSize() == 64)
+  assert(buffer:getLength() == 16)
+  assert(buffer:getStride() == 4)
+
+  -- Table data
+  buffer = lovr.graphics.newBuffer('int', { 1, 2, 3 })
+  assert(buffer:getSize() == 12)
+  assert(buffer:getLength() == 3)
+  assert(buffer:getStride() == 4)
+
+  data = buffer:getData()
+  assert(data[1] == 1 and data[2] == 2 and data[3] == 3)
+
+  buffer:setData({ 4, 5, 6 })
+  data = buffer:getData()
+  assert(data[1] == 4 and data[2] == 5 and data[3] == 6)
+
+  buffer:setData({ 8, 9 }, 2)
+  data = buffer:getData()
+  assert(data[1] == 4 and data[2] == 8 and data[3] == 9)
+
+  buffer:clear()
+  data = buffer:getData()
+  assert(data[1] == 0 and data[2] == 0 and data[3] == 0)
+
+  -- Keys
+  buffer = lovr.graphics.newBuffer({{ 'x', 'int' }, { 'y', 'float' }})
+  buffer:setData({ x = -1, y = 1e7 })
+  data = buffer:getData()
+  assert(data.x == -1 and data.y == 1e7)
+
+  -- Arrays
+  buffer = lovr.graphics.newBuffer({{ 'a', 'float', 3 }})
+  assert(buffer:getSize() == 12)
+  assert(buffer:getLength() == 1)
+  assert(buffer:getStride() == 12)
+  buffer:setData({ a = { 10, 100, 1000 } })
+  data = buffer:getData()
+  assert(data.a[1] == 10 and data.a[2] == 100 and data.a[3] == 1000)
+
+  -- Structs
+  buffer = lovr.graphics.newBuffer({
+    { 'a', {
+      { 'b', {
+        { 'c', 'vec2' }
+      }}
+    }}
+  })
+  assert(buffer:getSize() == 8)
+  assert(buffer:getLength() == 1)
+  assert(buffer:getStride() == 8)
+  buffer:setData({ a = { b = { c = { 1.2, 3.4 } } } })
+  data = buffer:getData()
+  assert(vec2(unpack(data.a.b.c)):equals(vec2(1.2, 3.4)))
+
+  -- Layouts
+  buffer = lovr.graphics.newBuffer({ 'float', layout = 'std140' })
+  assert(buffer:getStride() == 16)
+  buffer = lovr.graphics.newBuffer({ 'vec3', layout = 'std430' })
+  assert(buffer:getStride() == 16)
+
+  -- Blob length
+  buffer = lovr.graphics.newBuffer('un10x3', lovr.data.newBlob(16))
+  assert(buffer:getLength() == 4)
+  buffer = lovr.graphics.newBuffer('un10x3', lovr.data.newBlob(15))
+  assert(buffer:getLength() == 3)
+
+  -- FFI
+  local ok, ffi = pcall(require, 'ffi')
+  if ok and ffi then
+    buffer = lovr.graphics.newBuffer('float')
+    ffi.cast('float*', buffer:getPointer())[0] = 7
+    assert(buffer:getData() == 7)
+  end
+
+  -- Push constants
+  shader = lovr.graphics.newShader([[
+    struct S { int a, b, c; };
+
+    Constants {
+      float x;
+      vec2 y;
+      float z[3];
+      vec2 w[2];
+      S s;
+      S t[2];
+    };
+
+    void lovrmain() {}
+  ]])
+
+  pass = lovr.graphics.newPass()
+  pass:setShader(shader)
+  pass:send('x', 7)
+  pass:send('y', 3, 4)
+  pass:send('y', { 3, 4 })
+  pass:send('y', vec2(3, 4))
+  pass:send('z', { 1, 2, 3 })
+  pass:send('w', { 1, 2, 3, 4 })
+  pass:send('w', { vec2(1, 2), vec2(3, 4) })
+  pass:send('w', { { 1, 2 }, { 3, 4 } })
+  pass:send('s', { a = 1, b = 2, c = 3 })
+  pass:send('t', { { a = 1, b = 2, c = 3 }, { a = 4, b = 5, c = 6 } })
+end