123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- 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()[1]
- assert(data[1] == -1 and data[2] == 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()[1]
- 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()[1]
- 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:mapData())[0] = 7
- assert(buffer:getData()[1] == 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
|