From 910533eddaadd7bef3f86da717f4a8a9dee18704 Mon Sep 17 00:00:00 2001 From: Sasha Szpakowski Date: Fri, 24 Nov 2023 14:12:47 -0400 Subject: [PATCH] Initial code for sending flat-array matrices to storage buffers (untested). --- src/modules/graphics/vertex.cpp | 18 +++++++++--------- src/modules/graphics/wrap_Buffer.cpp | 12 ++++++++++++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/modules/graphics/vertex.cpp b/src/modules/graphics/vertex.cpp index d916ebe12..64b6dc1eb 100644 --- a/src/modules/graphics/vertex.cpp +++ b/src/modules/graphics/vertex.cpp @@ -110,17 +110,17 @@ static const DataFormatInfo dataFormatInfo[] { DATA_BASETYPE_FLOAT, false, 3, 0, 0, 4, 12 }, // DATAFORMAT_FLOAT_VEC3 { DATA_BASETYPE_FLOAT, false, 4, 0, 0, 4, 16 }, // DATAFORMAT_FLOAT_VEC4 - { DATA_BASETYPE_FLOAT, true, 0, 2, 2, 4, 16 }, // DATAFORMAT_FLOAT_MAT2X2 - { DATA_BASETYPE_FLOAT, true, 0, 2, 3, 4, 24 }, // DATAFORMAT_FLOAT_MAT2X3 - { DATA_BASETYPE_FLOAT, true, 0, 2, 4, 4, 32 }, // DATAFORMAT_FLOAT_MAT2X4 + { DATA_BASETYPE_FLOAT, true, 4, 2, 2, 4, 16 }, // DATAFORMAT_FLOAT_MAT2X2 + { DATA_BASETYPE_FLOAT, true, 6, 2, 3, 4, 24 }, // DATAFORMAT_FLOAT_MAT2X3 + { DATA_BASETYPE_FLOAT, true, 8, 2, 4, 4, 32 }, // DATAFORMAT_FLOAT_MAT2X4 - { DATA_BASETYPE_FLOAT, true, 0, 3, 2, 4, 24 }, // DATAFORMAT_FLOAT_MAT3X2 - { DATA_BASETYPE_FLOAT, true, 0, 3, 3, 4, 36 }, // DATAFORMAT_FLOAT_MAT3X3 - { DATA_BASETYPE_FLOAT, true, 0, 3, 4, 4, 48 }, // DATAFORMAT_FLOAT_MAT3X4 + { DATA_BASETYPE_FLOAT, true, 6, 3, 2, 4, 24 }, // DATAFORMAT_FLOAT_MAT3X2 + { DATA_BASETYPE_FLOAT, true, 9, 3, 3, 4, 36 }, // DATAFORMAT_FLOAT_MAT3X3 + { DATA_BASETYPE_FLOAT, true, 12, 3, 4, 4, 48 }, // DATAFORMAT_FLOAT_MAT3X4 - { DATA_BASETYPE_FLOAT, true, 0, 4, 2, 4, 32 }, // DATAFORMAT_FLOAT_MAT4X2 - { DATA_BASETYPE_FLOAT, true, 0, 4, 3, 4, 48 }, // DATAFORMAT_FLOAT_MAT4X3 - { DATA_BASETYPE_FLOAT, true, 0, 4, 4, 4, 64 }, // DATAFORMAT_FLOAT_MAT4X4 + { DATA_BASETYPE_FLOAT, true, 8, 4, 2, 4, 32 }, // DATAFORMAT_FLOAT_MAT4X2 + { DATA_BASETYPE_FLOAT, true, 12, 4, 3, 4, 48 }, // DATAFORMAT_FLOAT_MAT4X3 + { DATA_BASETYPE_FLOAT, true, 16, 4, 4, 4, 64 }, // DATAFORMAT_FLOAT_MAT4X4 { DATA_BASETYPE_INT, false, 1, 0, 0, 4, 4 }, // DATAFORMAT_INT32 { DATA_BASETYPE_INT, false, 2, 0, 0, 4, 8 }, // DATAFORMAT_INT32_VEC2 diff --git a/src/modules/graphics/wrap_Buffer.cpp b/src/modules/graphics/wrap_Buffer.cpp index c9bb30d4d..d4073d6e0 100644 --- a/src/modules/graphics/wrap_Buffer.cpp +++ b/src/modules/graphics/wrap_Buffer.cpp @@ -75,6 +75,18 @@ void luax_writebufferdata(lua_State *L, int startidx, DataFormat format, char *d case DATAFORMAT_FLOAT_VEC3: writeData(L, startidx, 3, data); break; case DATAFORMAT_FLOAT_VEC4: writeData(L, startidx, 4, data); break; + case DATAFORMAT_FLOAT_MAT2X2: writeData(L, startidx, 4, data); break; + case DATAFORMAT_FLOAT_MAT2X3: writeData(L, startidx, 6, data); break; + case DATAFORMAT_FLOAT_MAT2X4: writeData(L, startidx, 8, data); break; + + case DATAFORMAT_FLOAT_MAT3X2: writeData(L, startidx, 6, data); break; + case DATAFORMAT_FLOAT_MAT3X3: writeData(L, startidx, 9, data); break; + case DATAFORMAT_FLOAT_MAT3X4: writeData(L, startidx, 12, data); break; + + case DATAFORMAT_FLOAT_MAT4X2: writeData(L, startidx, 8, data); break; + case DATAFORMAT_FLOAT_MAT4X3: writeData(L, startidx, 12, data); break; + case DATAFORMAT_FLOAT_MAT4X4: writeData(L, startidx, 16, data); break; + case DATAFORMAT_INT32: writeData(L, startidx, 1, data); break; case DATAFORMAT_INT32_VEC2: writeData(L, startidx, 2, data); break; case DATAFORMAT_INT32_VEC3: writeData(L, startidx, 3, data); break;