This commit is contained in:
Akko
2025-08-04 18:57:35 +02:00
parent 8cf6e78a79
commit 9495868c2e
5030 changed files with 518594 additions and 17609 deletions

View File

@@ -0,0 +1,3 @@
import type { UboLayout, UniformData } from '../../../shared/shader/types';
export declare const WGSL_TO_STD40_SIZE: Record<string, number>;
export declare function createUboElementsSTD40(uniformData: UniformData[]): UboLayout;

View File

@@ -0,0 +1,70 @@
'use strict';
"use strict";
const WGSL_TO_STD40_SIZE = {
f32: 4,
"vec2<f32>": 8,
"vec3<f32>": 12,
"vec4<f32>": 16,
"mat2x2<f32>": 16 * 2,
"mat3x3<f32>": 16 * 3,
"mat4x4<f32>": 16 * 4
// TODO - not essential for now but support these in the future
// int: 4,
// ivec2: 8,
// ivec3: 12,
// ivec4: 16,
// uint: 4,
// uvec2: 8,
// uvec3: 12,
// uvec4: 16,
// bool: 4,
// bvec2: 8,
// bvec3: 12,
// bvec4: 16,
// mat2: 16 * 2,
// mat3: 16 * 3,
// mat4: 16 * 4,
};
function createUboElementsSTD40(uniformData) {
const uboElements = uniformData.map((data) => ({
data,
offset: 0,
size: 0
}));
let size = 0;
let chunkSize = 0;
let offset = 0;
for (let i = 0; i < uboElements.length; i++) {
const uboElement = uboElements[i];
size = WGSL_TO_STD40_SIZE[uboElement.data.type];
if (!size) {
throw new Error(`Unknown type ${uboElement.data.type}`);
}
if (uboElement.data.size > 1) {
size = Math.max(size, 16) * uboElement.data.size;
}
uboElement.size = size;
if (chunkSize % size !== 0 && chunkSize < 16) {
const lineUpValue = chunkSize % size % 16;
chunkSize += lineUpValue;
offset += lineUpValue;
}
if (chunkSize + size > 16) {
offset = Math.ceil(offset / 16) * 16;
uboElement.offset = offset;
offset += size;
chunkSize = size;
} else {
uboElement.offset = offset;
chunkSize += size;
offset += size;
}
}
offset = Math.ceil(offset / 16) * 16;
return { uboElements, size: offset };
}
exports.WGSL_TO_STD40_SIZE = WGSL_TO_STD40_SIZE;
exports.createUboElementsSTD40 = createUboElementsSTD40;
//# sourceMappingURL=createUboElementsSTD40.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"createUboElementsSTD40.js","sources":["../../../../../../src/rendering/renderers/gl/shader/utils/createUboElementsSTD40.ts"],"sourcesContent":["import type { UboElement, UboLayout, UniformData } from '../../../shared/shader/types';\n\nexport const WGSL_TO_STD40_SIZE: Record<string, number> = {\n f32: 4,\n 'vec2<f32>': 8,\n 'vec3<f32>': 12,\n 'vec4<f32>': 16,\n\n 'mat2x2<f32>': 16 * 2,\n 'mat3x3<f32>': 16 * 3,\n 'mat4x4<f32>': 16 * 4,\n\n // TODO - not essential for now but support these in the future\n // int: 4,\n // ivec2: 8,\n // ivec3: 12,\n // ivec4: 16,\n\n // uint: 4,\n // uvec2: 8,\n // uvec3: 12,\n // uvec4: 16,\n\n // bool: 4,\n // bvec2: 8,\n // bvec3: 12,\n // bvec4: 16,\n\n // mat2: 16 * 2,\n // mat3: 16 * 3,\n // mat4: 16 * 4,\n};\n\nexport function createUboElementsSTD40(uniformData: UniformData[]): UboLayout\n{\n const uboElements: UboElement[] = uniformData.map((data: UniformData) =>\n ({\n data,\n offset: 0,\n size: 0,\n }));\n\n let size = 0;\n let chunkSize = 0;\n let offset = 0;\n\n for (let i = 0; i < uboElements.length; i++)\n {\n const uboElement = uboElements[i];\n\n size = WGSL_TO_STD40_SIZE[uboElement.data.type];\n\n if (!size)\n {\n throw new Error(`Unknown type ${uboElement.data.type}`);\n }\n\n if (uboElement.data.size > 1)\n {\n size = Math.max(size, 16) * uboElement.data.size;\n }\n\n uboElement.size = size;\n\n // add some size offset..\n // must align to the nearest 16 bytes or internally nearest round size\n if (chunkSize % size !== 0 && chunkSize < 16)\n {\n // diff required to line up..\n const lineUpValue = (chunkSize % size) % 16;\n\n chunkSize += lineUpValue;\n offset += lineUpValue;\n }\n\n if ((chunkSize + size) > 16)\n {\n offset = Math.ceil(offset / 16) * 16;\n uboElement.offset = offset;\n offset += size;\n chunkSize = size;\n }\n else\n {\n uboElement.offset = offset;\n chunkSize += size;\n offset += size;\n }\n }\n\n offset = Math.ceil(offset / 16) * 16;\n\n return { uboElements, size: offset };\n}\n\n"],"names":[],"mappings":";;;AAEO,MAAM,kBAA6C,GAAA;AAAA,EACtD,GAAK,EAAA,CAAA;AAAA,EACL,WAAa,EAAA,CAAA;AAAA,EACb,WAAa,EAAA,EAAA;AAAA,EACb,WAAa,EAAA,EAAA;AAAA,EAEb,eAAe,EAAK,GAAA,CAAA;AAAA,EACpB,eAAe,EAAK,GAAA,CAAA;AAAA,EACpB,eAAe,EAAK,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBxB,EAAA;AAEO,SAAS,uBAAuB,WACvC,EAAA;AACI,EAAA,MAAM,WAA4B,GAAA,WAAA,CAAY,GAAI,CAAA,CAAC,IAC9C,MAAA;AAAA,IACG,IAAA;AAAA,IACA,MAAQ,EAAA,CAAA;AAAA,IACR,IAAM,EAAA,CAAA;AAAA,GACR,CAAA,CAAA,CAAA;AAEN,EAAA,IAAI,IAAO,GAAA,CAAA,CAAA;AACX,EAAA,IAAI,SAAY,GAAA,CAAA,CAAA;AAChB,EAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AAEb,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,WAAA,CAAY,QAAQ,CACxC,EAAA,EAAA;AACI,IAAM,MAAA,UAAA,GAAa,YAAY,CAAC,CAAA,CAAA;AAEhC,IAAO,IAAA,GAAA,kBAAA,CAAmB,UAAW,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAE9C,IAAA,IAAI,CAAC,IACL,EAAA;AACI,MAAA,MAAM,IAAI,KAAM,CAAA,CAAA,aAAA,EAAgB,UAAW,CAAA,IAAA,CAAK,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,KAC1D;AAEA,IAAI,IAAA,UAAA,CAAW,IAAK,CAAA,IAAA,GAAO,CAC3B,EAAA;AACI,MAAA,IAAA,GAAO,KAAK,GAAI,CAAA,IAAA,EAAM,EAAE,CAAA,GAAI,WAAW,IAAK,CAAA,IAAA,CAAA;AAAA,KAChD;AAEA,IAAA,UAAA,CAAW,IAAO,GAAA,IAAA,CAAA;AAIlB,IAAA,IAAI,SAAY,GAAA,IAAA,KAAS,CAAK,IAAA,SAAA,GAAY,EAC1C,EAAA;AAEI,MAAM,MAAA,WAAA,GAAe,YAAY,IAAQ,GAAA,EAAA,CAAA;AAEzC,MAAa,SAAA,IAAA,WAAA,CAAA;AACb,MAAU,MAAA,IAAA,WAAA,CAAA;AAAA,KACd;AAEA,IAAK,IAAA,SAAA,GAAY,OAAQ,EACzB,EAAA;AACI,MAAA,MAAA,GAAS,IAAK,CAAA,IAAA,CAAK,MAAS,GAAA,EAAE,CAAI,GAAA,EAAA,CAAA;AAClC,MAAA,UAAA,CAAW,MAAS,GAAA,MAAA,CAAA;AACpB,MAAU,MAAA,IAAA,IAAA,CAAA;AACV,MAAY,SAAA,GAAA,IAAA,CAAA;AAAA,KAGhB,MAAA;AACI,MAAA,UAAA,CAAW,MAAS,GAAA,MAAA,CAAA;AACpB,MAAa,SAAA,IAAA,IAAA,CAAA;AACb,MAAU,MAAA,IAAA,IAAA,CAAA;AAAA,KACd;AAAA,GACJ;AAEA,EAAA,MAAA,GAAS,IAAK,CAAA,IAAA,CAAK,MAAS,GAAA,EAAE,CAAI,GAAA,EAAA,CAAA;AAElC,EAAO,OAAA,EAAE,WAAa,EAAA,IAAA,EAAM,MAAO,EAAA,CAAA;AACvC;;;;;"}

View File

@@ -0,0 +1,67 @@
"use strict";
const WGSL_TO_STD40_SIZE = {
f32: 4,
"vec2<f32>": 8,
"vec3<f32>": 12,
"vec4<f32>": 16,
"mat2x2<f32>": 16 * 2,
"mat3x3<f32>": 16 * 3,
"mat4x4<f32>": 16 * 4
// TODO - not essential for now but support these in the future
// int: 4,
// ivec2: 8,
// ivec3: 12,
// ivec4: 16,
// uint: 4,
// uvec2: 8,
// uvec3: 12,
// uvec4: 16,
// bool: 4,
// bvec2: 8,
// bvec3: 12,
// bvec4: 16,
// mat2: 16 * 2,
// mat3: 16 * 3,
// mat4: 16 * 4,
};
function createUboElementsSTD40(uniformData) {
const uboElements = uniformData.map((data) => ({
data,
offset: 0,
size: 0
}));
let size = 0;
let chunkSize = 0;
let offset = 0;
for (let i = 0; i < uboElements.length; i++) {
const uboElement = uboElements[i];
size = WGSL_TO_STD40_SIZE[uboElement.data.type];
if (!size) {
throw new Error(`Unknown type ${uboElement.data.type}`);
}
if (uboElement.data.size > 1) {
size = Math.max(size, 16) * uboElement.data.size;
}
uboElement.size = size;
if (chunkSize % size !== 0 && chunkSize < 16) {
const lineUpValue = chunkSize % size % 16;
chunkSize += lineUpValue;
offset += lineUpValue;
}
if (chunkSize + size > 16) {
offset = Math.ceil(offset / 16) * 16;
uboElement.offset = offset;
offset += size;
chunkSize = size;
} else {
uboElement.offset = offset;
chunkSize += size;
offset += size;
}
}
offset = Math.ceil(offset / 16) * 16;
return { uboElements, size: offset };
}
export { WGSL_TO_STD40_SIZE, createUboElementsSTD40 };
//# sourceMappingURL=createUboElementsSTD40.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"createUboElementsSTD40.mjs","sources":["../../../../../../src/rendering/renderers/gl/shader/utils/createUboElementsSTD40.ts"],"sourcesContent":["import type { UboElement, UboLayout, UniformData } from '../../../shared/shader/types';\n\nexport const WGSL_TO_STD40_SIZE: Record<string, number> = {\n f32: 4,\n 'vec2<f32>': 8,\n 'vec3<f32>': 12,\n 'vec4<f32>': 16,\n\n 'mat2x2<f32>': 16 * 2,\n 'mat3x3<f32>': 16 * 3,\n 'mat4x4<f32>': 16 * 4,\n\n // TODO - not essential for now but support these in the future\n // int: 4,\n // ivec2: 8,\n // ivec3: 12,\n // ivec4: 16,\n\n // uint: 4,\n // uvec2: 8,\n // uvec3: 12,\n // uvec4: 16,\n\n // bool: 4,\n // bvec2: 8,\n // bvec3: 12,\n // bvec4: 16,\n\n // mat2: 16 * 2,\n // mat3: 16 * 3,\n // mat4: 16 * 4,\n};\n\nexport function createUboElementsSTD40(uniformData: UniformData[]): UboLayout\n{\n const uboElements: UboElement[] = uniformData.map((data: UniformData) =>\n ({\n data,\n offset: 0,\n size: 0,\n }));\n\n let size = 0;\n let chunkSize = 0;\n let offset = 0;\n\n for (let i = 0; i < uboElements.length; i++)\n {\n const uboElement = uboElements[i];\n\n size = WGSL_TO_STD40_SIZE[uboElement.data.type];\n\n if (!size)\n {\n throw new Error(`Unknown type ${uboElement.data.type}`);\n }\n\n if (uboElement.data.size > 1)\n {\n size = Math.max(size, 16) * uboElement.data.size;\n }\n\n uboElement.size = size;\n\n // add some size offset..\n // must align to the nearest 16 bytes or internally nearest round size\n if (chunkSize % size !== 0 && chunkSize < 16)\n {\n // diff required to line up..\n const lineUpValue = (chunkSize % size) % 16;\n\n chunkSize += lineUpValue;\n offset += lineUpValue;\n }\n\n if ((chunkSize + size) > 16)\n {\n offset = Math.ceil(offset / 16) * 16;\n uboElement.offset = offset;\n offset += size;\n chunkSize = size;\n }\n else\n {\n uboElement.offset = offset;\n chunkSize += size;\n offset += size;\n }\n }\n\n offset = Math.ceil(offset / 16) * 16;\n\n return { uboElements, size: offset };\n}\n\n"],"names":[],"mappings":";AAEO,MAAM,kBAA6C,GAAA;AAAA,EACtD,GAAK,EAAA,CAAA;AAAA,EACL,WAAa,EAAA,CAAA;AAAA,EACb,WAAa,EAAA,EAAA;AAAA,EACb,WAAa,EAAA,EAAA;AAAA,EAEb,eAAe,EAAK,GAAA,CAAA;AAAA,EACpB,eAAe,EAAK,GAAA,CAAA;AAAA,EACpB,eAAe,EAAK,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBxB,EAAA;AAEO,SAAS,uBAAuB,WACvC,EAAA;AACI,EAAA,MAAM,WAA4B,GAAA,WAAA,CAAY,GAAI,CAAA,CAAC,IAC9C,MAAA;AAAA,IACG,IAAA;AAAA,IACA,MAAQ,EAAA,CAAA;AAAA,IACR,IAAM,EAAA,CAAA;AAAA,GACR,CAAA,CAAA,CAAA;AAEN,EAAA,IAAI,IAAO,GAAA,CAAA,CAAA;AACX,EAAA,IAAI,SAAY,GAAA,CAAA,CAAA;AAChB,EAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AAEb,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,WAAA,CAAY,QAAQ,CACxC,EAAA,EAAA;AACI,IAAM,MAAA,UAAA,GAAa,YAAY,CAAC,CAAA,CAAA;AAEhC,IAAO,IAAA,GAAA,kBAAA,CAAmB,UAAW,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAE9C,IAAA,IAAI,CAAC,IACL,EAAA;AACI,MAAA,MAAM,IAAI,KAAM,CAAA,CAAA,aAAA,EAAgB,UAAW,CAAA,IAAA,CAAK,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,KAC1D;AAEA,IAAI,IAAA,UAAA,CAAW,IAAK,CAAA,IAAA,GAAO,CAC3B,EAAA;AACI,MAAA,IAAA,GAAO,KAAK,GAAI,CAAA,IAAA,EAAM,EAAE,CAAA,GAAI,WAAW,IAAK,CAAA,IAAA,CAAA;AAAA,KAChD;AAEA,IAAA,UAAA,CAAW,IAAO,GAAA,IAAA,CAAA;AAIlB,IAAA,IAAI,SAAY,GAAA,IAAA,KAAS,CAAK,IAAA,SAAA,GAAY,EAC1C,EAAA;AAEI,MAAM,MAAA,WAAA,GAAe,YAAY,IAAQ,GAAA,EAAA,CAAA;AAEzC,MAAa,SAAA,IAAA,WAAA,CAAA;AACb,MAAU,MAAA,IAAA,WAAA,CAAA;AAAA,KACd;AAEA,IAAK,IAAA,SAAA,GAAY,OAAQ,EACzB,EAAA;AACI,MAAA,MAAA,GAAS,IAAK,CAAA,IAAA,CAAK,MAAS,GAAA,EAAE,CAAI,GAAA,EAAA,CAAA;AAClC,MAAA,UAAA,CAAW,MAAS,GAAA,MAAA,CAAA;AACpB,MAAU,MAAA,IAAA,IAAA,CAAA;AACV,MAAY,SAAA,GAAA,IAAA,CAAA;AAAA,KAGhB,MAAA;AACI,MAAA,UAAA,CAAW,MAAS,GAAA,MAAA,CAAA;AACpB,MAAa,SAAA,IAAA,IAAA,CAAA;AACb,MAAU,MAAA,IAAA,IAAA,CAAA;AAAA,KACd;AAAA,GACJ;AAEA,EAAA,MAAA,GAAS,IAAK,CAAA,IAAA,CAAK,MAAS,GAAA,EAAE,CAAI,GAAA,EAAA,CAAA;AAElC,EAAO,OAAA,EAAE,WAAa,EAAA,IAAA,EAAM,MAAO,EAAA,CAAA;AACvC;;;;"}

View File

@@ -0,0 +1,2 @@
import type { UboElement, UniformsSyncCallback } from '../../../shared/shader/types';
export declare function createUboSyncFunctionSTD40(uboElements: UboElement[]): UniformsSyncCallback;

View File

@@ -0,0 +1,18 @@
'use strict';
var createUboSyncFunction = require('../../../shared/shader/utils/createUboSyncFunction.js');
var uboSyncFunctions = require('../../../shared/shader/utils/uboSyncFunctions.js');
var generateArraySyncSTD40 = require('./generateArraySyncSTD40.js');
"use strict";
function createUboSyncFunctionSTD40(uboElements) {
return createUboSyncFunction.createUboSyncFunction(
uboElements,
"uboStd40",
generateArraySyncSTD40.generateArraySyncSTD40,
uboSyncFunctions.uboSyncFunctionsSTD40
);
}
exports.createUboSyncFunctionSTD40 = createUboSyncFunctionSTD40;
//# sourceMappingURL=createUboSyncSTD40.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"createUboSyncSTD40.js","sources":["../../../../../../src/rendering/renderers/gl/shader/utils/createUboSyncSTD40.ts"],"sourcesContent":["/* eslint-disable quote-props */\n\nimport { createUboSyncFunction } from '../../../shared/shader/utils/createUboSyncFunction';\nimport { uboSyncFunctionsSTD40 } from '../../../shared/shader/utils/uboSyncFunctions';\nimport { generateArraySyncSTD40 } from './generateArraySyncSTD40';\n\nimport type { UboElement, UniformsSyncCallback } from '../../../shared/shader/types';\n\nexport function createUboSyncFunctionSTD40(\n uboElements: UboElement[],\n): UniformsSyncCallback\n{\n return createUboSyncFunction(\n uboElements,\n 'uboStd40',\n generateArraySyncSTD40,\n uboSyncFunctionsSTD40,\n );\n}\n"],"names":["createUboSyncFunction","generateArraySyncSTD40","uboSyncFunctionsSTD40"],"mappings":";;;;;;;AAQO,SAAS,2BACZ,WAEJ,EAAA;AACI,EAAO,OAAAA,2CAAA;AAAA,IACH,WAAA;AAAA,IACA,UAAA;AAAA,IACAC,6CAAA;AAAA,IACAC,sCAAA;AAAA,GACJ,CAAA;AACJ;;;;"}

View File

@@ -0,0 +1,16 @@
import { createUboSyncFunction } from '../../../shared/shader/utils/createUboSyncFunction.mjs';
import { uboSyncFunctionsSTD40 } from '../../../shared/shader/utils/uboSyncFunctions.mjs';
import { generateArraySyncSTD40 } from './generateArraySyncSTD40.mjs';
"use strict";
function createUboSyncFunctionSTD40(uboElements) {
return createUboSyncFunction(
uboElements,
"uboStd40",
generateArraySyncSTD40,
uboSyncFunctionsSTD40
);
}
export { createUboSyncFunctionSTD40 };
//# sourceMappingURL=createUboSyncSTD40.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"createUboSyncSTD40.mjs","sources":["../../../../../../src/rendering/renderers/gl/shader/utils/createUboSyncSTD40.ts"],"sourcesContent":["/* eslint-disable quote-props */\n\nimport { createUboSyncFunction } from '../../../shared/shader/utils/createUboSyncFunction';\nimport { uboSyncFunctionsSTD40 } from '../../../shared/shader/utils/uboSyncFunctions';\nimport { generateArraySyncSTD40 } from './generateArraySyncSTD40';\n\nimport type { UboElement, UniformsSyncCallback } from '../../../shared/shader/types';\n\nexport function createUboSyncFunctionSTD40(\n uboElements: UboElement[],\n): UniformsSyncCallback\n{\n return createUboSyncFunction(\n uboElements,\n 'uboStd40',\n generateArraySyncSTD40,\n uboSyncFunctionsSTD40,\n );\n}\n"],"names":[],"mappings":";;;;;AAQO,SAAS,2BACZ,WAEJ,EAAA;AACI,EAAO,OAAA,qBAAA;AAAA,IACH,WAAA;AAAA,IACA,UAAA;AAAA,IACA,sBAAA;AAAA,IACA,qBAAA;AAAA,GACJ,CAAA;AACJ;;;;"}

View File

@@ -0,0 +1,9 @@
import type { UboElement } from '../../../shared/shader/types';
/**
* This generates a function that will sync an array to the uniform buffer
* following the std140 layout
* @param uboElement - the element to generate the array sync for
* @param offsetToAdd - the offset to append at the start of the code
* @returns - the generated code
*/
export declare function generateArraySyncSTD40(uboElement: UboElement, offsetToAdd: number): string;

View File

@@ -0,0 +1,30 @@
'use strict';
var createUboElementsSTD40 = require('./createUboElementsSTD40.js');
"use strict";
function generateArraySyncSTD40(uboElement, offsetToAdd) {
const rowSize = Math.max(createUboElementsSTD40.WGSL_TO_STD40_SIZE[uboElement.data.type] / 16, 1);
const elementSize = uboElement.data.value.length / uboElement.data.size;
const remainder = (4 - elementSize % 4) % 4;
return `
v = uv.${uboElement.data.name};
offset += ${offsetToAdd};
arrayOffset = offset;
t = 0;
for(var i=0; i < ${uboElement.data.size * rowSize}; i++)
{
for(var j = 0; j < ${elementSize}; j++)
{
data[arrayOffset++] = v[t++];
}
${remainder !== 0 ? `arrayOffset += ${remainder};` : ""}
}
`;
}
exports.generateArraySyncSTD40 = generateArraySyncSTD40;
//# sourceMappingURL=generateArraySyncSTD40.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"generateArraySyncSTD40.js","sources":["../../../../../../src/rendering/renderers/gl/shader/utils/generateArraySyncSTD40.ts"],"sourcesContent":["import { WGSL_TO_STD40_SIZE } from './createUboElementsSTD40';\n\nimport type { UboElement } from '../../../shared/shader/types';\n\n/**\n * This generates a function that will sync an array to the uniform buffer\n * following the std140 layout\n * @param uboElement - the element to generate the array sync for\n * @param offsetToAdd - the offset to append at the start of the code\n * @returns - the generated code\n */\nexport function generateArraySyncSTD40(uboElement: UboElement, offsetToAdd: number): string\n{\n const rowSize = Math.max(WGSL_TO_STD40_SIZE[uboElement.data.type] / 16, 1);\n const elementSize = (uboElement.data.value as Array<number>).length / uboElement.data.size;// size / rowSize;\n\n const remainder = (4 - (elementSize % 4)) % 4;\n\n return `\n v = uv.${uboElement.data.name};\n offset += ${offsetToAdd};\n\n arrayOffset = offset;\n\n t = 0;\n\n for(var i=0; i < ${uboElement.data.size * rowSize}; i++)\n {\n for(var j = 0; j < ${elementSize}; j++)\n {\n data[arrayOffset++] = v[t++];\n }\n ${remainder !== 0 ? `arrayOffset += ${remainder};` : ''}\n }\n `;\n}\n"],"names":["WGSL_TO_STD40_SIZE"],"mappings":";;;;;AAWgB,SAAA,sBAAA,CAAuB,YAAwB,WAC/D,EAAA;AACI,EAAM,MAAA,OAAA,GAAU,KAAK,GAAI,CAAAA,yCAAA,CAAmB,WAAW,IAAK,CAAA,IAAI,CAAI,GAAA,EAAA,EAAI,CAAC,CAAA,CAAA;AACzE,EAAA,MAAM,cAAe,UAAW,CAAA,IAAA,CAAK,KAAwB,CAAA,MAAA,GAAS,WAAW,IAAK,CAAA,IAAA,CAAA;AAEtF,EAAM,MAAA,SAAA,GAAA,CAAa,CAAK,GAAA,WAAA,GAAc,CAAM,IAAA,CAAA,CAAA;AAE5C,EAAO,OAAA,CAAA;AAAA,eACM,EAAA,UAAA,CAAW,KAAK,IAAI,CAAA;AAAA,kBAAA,EACjB,WAAW,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAMJ,EAAA,UAAA,CAAW,IAAK,CAAA,IAAA,GAAO,OAAO,CAAA;AAAA;AAAA,+BAAA,EAExB,WAAW,CAAA;AAAA;AAAA;AAAA;AAAA,YAAA,EAI9B,SAAc,KAAA,CAAA,GAAI,CAAkB,eAAA,EAAA,SAAS,MAAM,EAAE,CAAA;AAAA;AAAA,IAAA,CAAA,CAAA;AAGnE;;;;"}

View File

@@ -0,0 +1,28 @@
import { WGSL_TO_STD40_SIZE } from './createUboElementsSTD40.mjs';
"use strict";
function generateArraySyncSTD40(uboElement, offsetToAdd) {
const rowSize = Math.max(WGSL_TO_STD40_SIZE[uboElement.data.type] / 16, 1);
const elementSize = uboElement.data.value.length / uboElement.data.size;
const remainder = (4 - elementSize % 4) % 4;
return `
v = uv.${uboElement.data.name};
offset += ${offsetToAdd};
arrayOffset = offset;
t = 0;
for(var i=0; i < ${uboElement.data.size * rowSize}; i++)
{
for(var j = 0; j < ${elementSize}; j++)
{
data[arrayOffset++] = v[t++];
}
${remainder !== 0 ? `arrayOffset += ${remainder};` : ""}
}
`;
}
export { generateArraySyncSTD40 };
//# sourceMappingURL=generateArraySyncSTD40.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"generateArraySyncSTD40.mjs","sources":["../../../../../../src/rendering/renderers/gl/shader/utils/generateArraySyncSTD40.ts"],"sourcesContent":["import { WGSL_TO_STD40_SIZE } from './createUboElementsSTD40';\n\nimport type { UboElement } from '../../../shared/shader/types';\n\n/**\n * This generates a function that will sync an array to the uniform buffer\n * following the std140 layout\n * @param uboElement - the element to generate the array sync for\n * @param offsetToAdd - the offset to append at the start of the code\n * @returns - the generated code\n */\nexport function generateArraySyncSTD40(uboElement: UboElement, offsetToAdd: number): string\n{\n const rowSize = Math.max(WGSL_TO_STD40_SIZE[uboElement.data.type] / 16, 1);\n const elementSize = (uboElement.data.value as Array<number>).length / uboElement.data.size;// size / rowSize;\n\n const remainder = (4 - (elementSize % 4)) % 4;\n\n return `\n v = uv.${uboElement.data.name};\n offset += ${offsetToAdd};\n\n arrayOffset = offset;\n\n t = 0;\n\n for(var i=0; i < ${uboElement.data.size * rowSize}; i++)\n {\n for(var j = 0; j < ${elementSize}; j++)\n {\n data[arrayOffset++] = v[t++];\n }\n ${remainder !== 0 ? `arrayOffset += ${remainder};` : ''}\n }\n `;\n}\n"],"names":[],"mappings":";;;AAWgB,SAAA,sBAAA,CAAuB,YAAwB,WAC/D,EAAA;AACI,EAAM,MAAA,OAAA,GAAU,KAAK,GAAI,CAAA,kBAAA,CAAmB,WAAW,IAAK,CAAA,IAAI,CAAI,GAAA,EAAA,EAAI,CAAC,CAAA,CAAA;AACzE,EAAA,MAAM,cAAe,UAAW,CAAA,IAAA,CAAK,KAAwB,CAAA,MAAA,GAAS,WAAW,IAAK,CAAA,IAAA,CAAA;AAEtF,EAAM,MAAA,SAAA,GAAA,CAAa,CAAK,GAAA,WAAA,GAAc,CAAM,IAAA,CAAA,CAAA;AAE5C,EAAO,OAAA,CAAA;AAAA,eACM,EAAA,UAAA,CAAW,KAAK,IAAI,CAAA;AAAA,kBAAA,EACjB,WAAW,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAMJ,EAAA,UAAA,CAAW,IAAK,CAAA,IAAA,GAAO,OAAO,CAAA;AAAA;AAAA,+BAAA,EAExB,WAAW,CAAA;AAAA;AAAA;AAAA;AAAA,YAAA,EAI9B,SAAc,KAAA,CAAA,GAAI,CAAkB,eAAA,EAAA,SAAS,MAAM,EAAE,CAAA;AAAA;AAAA,IAAA,CAAA,CAAA;AAGnE;;;;"}

View File

@@ -0,0 +1,3 @@
import { UniformGroup } from '../../../shared/shader/UniformGroup';
import type { UniformsSyncCallback } from '../../../shared/shader/types';
export declare function generateUniformsSync(group: UniformGroup, uniformData: Record<string, any>): UniformsSyncCallback;

View File

@@ -0,0 +1,61 @@
'use strict';
var BufferResource = require('../../../shared/buffer/BufferResource.js');
var UniformGroup = require('../../../shared/shader/UniformGroup.js');
var uniformParsers = require('../../../shared/shader/utils/uniformParsers.js');
var generateUniformsSyncTypes = require('./generateUniformsSyncTypes.js');
"use strict";
function generateUniformsSync(group, uniformData) {
const funcFragments = [`
var v = null;
var cv = null;
var cu = null;
var t = 0;
var gl = renderer.gl;
var name = null;
`];
for (const i in group.uniforms) {
if (!uniformData[i]) {
if (group.uniforms[i] instanceof UniformGroup.UniformGroup) {
if (group.uniforms[i].ubo) {
funcFragments.push(`
renderer.shader.bindUniformBlock(uv.${i}, "${i}");
`);
} else {
funcFragments.push(`
renderer.shader.updateUniformGroup(uv.${i});
`);
}
} else if (group.uniforms[i] instanceof BufferResource.BufferResource) {
funcFragments.push(`
renderer.shader.bindBufferResource(uv.${i}, "${i}");
`);
}
continue;
}
const uniform = group.uniformStructures[i];
let parsed = false;
for (let j = 0; j < uniformParsers.uniformParsers.length; j++) {
const parser = uniformParsers.uniformParsers[j];
if (uniform.type === parser.type && parser.test(uniform)) {
funcFragments.push(`name = "${i}";`, uniformParsers.uniformParsers[j].uniform);
parsed = true;
break;
}
}
if (!parsed) {
const templateType = uniform.size === 1 ? generateUniformsSyncTypes.UNIFORM_TO_SINGLE_SETTERS : generateUniformsSyncTypes.UNIFORM_TO_ARRAY_SETTERS;
const template = templateType[uniform.type].replace("location", `ud["${i}"].location`);
funcFragments.push(`
cu = ud["${i}"];
cv = cu.value;
v = uv["${i}"];
${template};`);
}
}
return new Function("ud", "uv", "renderer", "syncData", funcFragments.join("\n"));
}
exports.generateUniformsSync = generateUniformsSync;
//# sourceMappingURL=generateUniformsSync.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,59 @@
import { BufferResource } from '../../../shared/buffer/BufferResource.mjs';
import { UniformGroup } from '../../../shared/shader/UniformGroup.mjs';
import { uniformParsers } from '../../../shared/shader/utils/uniformParsers.mjs';
import { UNIFORM_TO_SINGLE_SETTERS, UNIFORM_TO_ARRAY_SETTERS } from './generateUniformsSyncTypes.mjs';
"use strict";
function generateUniformsSync(group, uniformData) {
const funcFragments = [`
var v = null;
var cv = null;
var cu = null;
var t = 0;
var gl = renderer.gl;
var name = null;
`];
for (const i in group.uniforms) {
if (!uniformData[i]) {
if (group.uniforms[i] instanceof UniformGroup) {
if (group.uniforms[i].ubo) {
funcFragments.push(`
renderer.shader.bindUniformBlock(uv.${i}, "${i}");
`);
} else {
funcFragments.push(`
renderer.shader.updateUniformGroup(uv.${i});
`);
}
} else if (group.uniforms[i] instanceof BufferResource) {
funcFragments.push(`
renderer.shader.bindBufferResource(uv.${i}, "${i}");
`);
}
continue;
}
const uniform = group.uniformStructures[i];
let parsed = false;
for (let j = 0; j < uniformParsers.length; j++) {
const parser = uniformParsers[j];
if (uniform.type === parser.type && parser.test(uniform)) {
funcFragments.push(`name = "${i}";`, uniformParsers[j].uniform);
parsed = true;
break;
}
}
if (!parsed) {
const templateType = uniform.size === 1 ? UNIFORM_TO_SINGLE_SETTERS : UNIFORM_TO_ARRAY_SETTERS;
const template = templateType[uniform.type].replace("location", `ud["${i}"].location`);
funcFragments.push(`
cu = ud["${i}"];
cv = cu.value;
v = uv["${i}"];
${template};`);
}
}
return new Function("ud", "uv", "renderer", "syncData", funcFragments.join("\n"));
}
export { generateUniformsSync };
//# sourceMappingURL=generateUniformsSync.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"generateUniformsSync.mjs","sources":["../../../../../../src/rendering/renderers/gl/shader/utils/generateUniformsSync.ts"],"sourcesContent":["// cu = Cached value's uniform data field\n// cv = Cached value\n// v = value to upload\n// ud = uniformData\n// uv = uniformValue\n\nimport { BufferResource } from '../../../shared/buffer/BufferResource';\nimport { UniformGroup } from '../../../shared/shader/UniformGroup';\nimport { uniformParsers } from '../../../shared/shader/utils/uniformParsers';\nimport { UNIFORM_TO_ARRAY_SETTERS, UNIFORM_TO_SINGLE_SETTERS } from './generateUniformsSyncTypes';\n\nimport type { UniformsSyncCallback } from '../../../shared/shader/types';\n\nexport function generateUniformsSync(group: UniformGroup, uniformData: Record<string, any>): UniformsSyncCallback\n{\n const funcFragments = [`\n var v = null;\n var cv = null;\n var cu = null;\n var t = 0;\n var gl = renderer.gl;\n var name = null;\n `];\n\n for (const i in group.uniforms)\n {\n if (!uniformData[i])\n {\n if (group.uniforms[i] instanceof UniformGroup)\n {\n if ((group.uniforms[i] as UniformGroup).ubo)\n {\n funcFragments.push(`\n renderer.shader.bindUniformBlock(uv.${i}, \"${i}\");\n `);\n }\n else\n {\n funcFragments.push(`\n renderer.shader.updateUniformGroup(uv.${i});\n `);\n }\n }\n else if (group.uniforms[i] instanceof BufferResource)\n {\n funcFragments.push(`\n renderer.shader.bindBufferResource(uv.${i}, \"${i}\");\n `);\n }\n\n continue;\n }\n\n const uniform = group.uniformStructures[i];\n\n let parsed = false;\n\n for (let j = 0; j < uniformParsers.length; j++)\n {\n const parser = uniformParsers[j];\n\n if (uniform.type === parser.type && parser.test(uniform))\n {\n funcFragments.push(`name = \"${i}\";`, uniformParsers[j].uniform);\n parsed = true;\n\n break;\n }\n }\n\n if (!parsed)\n {\n const templateType = uniform.size === 1 ? UNIFORM_TO_SINGLE_SETTERS : UNIFORM_TO_ARRAY_SETTERS;\n\n const template = templateType[uniform.type].replace('location', `ud[\"${i}\"].location`);\n\n funcFragments.push(`\n cu = ud[\"${i}\"];\n cv = cu.value;\n v = uv[\"${i}\"];\n ${template};`);\n }\n }\n\n /*\n * the introduction of syncData is to solve an issue where textures in uniform groups are not set correctly\n * the texture count was always starting from 0 in each group. This needs to increment each time a texture is used\n * no matter which group is being used\n *\n */\n // eslint-disable-next-line no-new-func\n return new Function('ud', 'uv', 'renderer', 'syncData', funcFragments.join('\\n')) as UniformsSyncCallback;\n}\n"],"names":[],"mappings":";;;;;;AAagB,SAAA,oBAAA,CAAqB,OAAqB,WAC1D,EAAA;AACI,EAAA,MAAM,gBAAgB,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOtB,CAAA,CAAA,CAAA;AAED,EAAW,KAAA,MAAA,CAAA,IAAK,MAAM,QACtB,EAAA;AACI,IAAI,IAAA,CAAC,WAAY,CAAA,CAAC,CAClB,EAAA;AACI,MAAA,IAAI,KAAM,CAAA,QAAA,CAAS,CAAC,CAAA,YAAa,YACjC,EAAA;AACI,QAAA,IAAK,KAAM,CAAA,QAAA,CAAS,CAAC,CAAA,CAAmB,GACxC,EAAA;AACI,UAAA,aAAA,CAAc,IAAK,CAAA,CAAA;AAAA,4DACuB,EAAA,CAAC,MAAM,CAAC,CAAA;AAAA,oBACjD,CAAA,CAAA,CAAA;AAAA,SAGL,MAAA;AACI,UAAA,aAAA,CAAc,IAAK,CAAA,CAAA;AAAA,8DAAA,EACyB,CAAC,CAAA;AAAA,oBAC5C,CAAA,CAAA,CAAA;AAAA,SACL;AAAA,OAEK,MAAA,IAAA,KAAA,CAAM,QAAS,CAAA,CAAC,aAAa,cACtC,EAAA;AACI,QAAA,aAAA,CAAc,IAAK,CAAA,CAAA;AAAA,8DAC6B,EAAA,CAAC,MAAM,CAAC,CAAA;AAAA,oBACnD,CAAA,CAAA,CAAA;AAAA,OACT;AAEA,MAAA,SAAA;AAAA,KACJ;AAEA,IAAM,MAAA,OAAA,GAAU,KAAM,CAAA,iBAAA,CAAkB,CAAC,CAAA,CAAA;AAEzC,IAAA,IAAI,MAAS,GAAA,KAAA,CAAA;AAEb,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,cAAA,CAAe,QAAQ,CAC3C,EAAA,EAAA;AACI,MAAM,MAAA,MAAA,GAAS,eAAe,CAAC,CAAA,CAAA;AAE/B,MAAA,IAAI,QAAQ,IAAS,KAAA,MAAA,CAAO,QAAQ,MAAO,CAAA,IAAA,CAAK,OAAO,CACvD,EAAA;AACI,QAAA,aAAA,CAAc,KAAK,CAAW,QAAA,EAAA,CAAC,MAAM,cAAe,CAAA,CAAC,EAAE,OAAO,CAAA,CAAA;AAC9D,QAAS,MAAA,GAAA,IAAA,CAAA;AAET,QAAA,MAAA;AAAA,OACJ;AAAA,KACJ;AAEA,IAAA,IAAI,CAAC,MACL,EAAA;AACI,MAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,IAAS,KAAA,CAAA,GAAI,yBAA4B,GAAA,wBAAA,CAAA;AAEtE,MAAM,MAAA,QAAA,GAAW,aAAa,OAAQ,CAAA,IAAI,EAAE,OAAQ,CAAA,UAAA,EAAY,CAAO,IAAA,EAAA,CAAC,CAAa,WAAA,CAAA,CAAA,CAAA;AAErF,MAAA,aAAA,CAAc,IAAK,CAAA,CAAA;AAAA,qBAAA,EACR,CAAC,CAAA;AAAA;AAAA,oBAAA,EAEF,CAAC,CAAA;AAAA,YAAA,EACT,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,KACjB;AAAA,GACJ;AASA,EAAO,OAAA,IAAI,SAAS,IAAM,EAAA,IAAA,EAAM,YAAY,UAAY,EAAA,aAAA,CAAc,IAAK,CAAA,IAAI,CAAC,CAAA,CAAA;AACpF;;;;"}

View File

@@ -0,0 +1,4 @@
import type { UNIFORM_TYPES } from '../../../shared/shader/types';
export type ArraySetterFunction = (v: any, location: WebGLUniformLocation, gl: any) => void;
export declare const UNIFORM_TO_SINGLE_SETTERS: Record<UNIFORM_TYPES | string, string>;
export declare const UNIFORM_TO_ARRAY_SETTERS: Record<UNIFORM_TYPES | string, string>;

View File

@@ -0,0 +1,121 @@
'use strict';
"use strict";
const UNIFORM_TO_SINGLE_SETTERS = {
f32: `if (cv !== v) {
cu.value = v;
gl.uniform1f(location, v);
}`,
"vec2<f32>": `if (cv[0] !== v[0] || cv[1] !== v[1]) {
cv[0] = v[0];
cv[1] = v[1];
gl.uniform2f(location, v[0], v[1]);
}`,
"vec3<f32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
gl.uniform3f(location, v[0], v[1], v[2]);
}`,
"vec4<f32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
cv[3] = v[3];
gl.uniform4f(location, v[0], v[1], v[2], v[3]);
}`,
i32: `if (cv !== v) {
cu.value = v;
gl.uniform1i(location, v);
}`,
"vec2<i32>": `if (cv[0] !== v[0] || cv[1] !== v[1]) {
cv[0] = v[0];
cv[1] = v[1];
gl.uniform2i(location, v[0], v[1]);
}`,
"vec3<i32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
gl.uniform3i(location, v[0], v[1], v[2]);
}`,
"vec4<i32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
cv[3] = v[3];
gl.uniform4i(location, v[0], v[1], v[2], v[3]);
}`,
u32: `if (cv !== v) {
cu.value = v;
gl.uniform1ui(location, v);
}`,
"vec2<u32>": `if (cv[0] !== v[0] || cv[1] !== v[1]) {
cv[0] = v[0];
cv[1] = v[1];
gl.uniform2ui(location, v[0], v[1]);
}`,
"vec3<u32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
gl.uniform3ui(location, v[0], v[1], v[2]);
}`,
"vec4<u32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
cv[3] = v[3];
gl.uniform4ui(location, v[0], v[1], v[2], v[3]);
}`,
bool: `if (cv !== v) {
cu.value = v;
gl.uniform1i(location, v);
}`,
"vec2<bool>": `if (cv[0] !== v[0] || cv[1] !== v[1]) {
cv[0] = v[0];
cv[1] = v[1];
gl.uniform2i(location, v[0], v[1]);
}`,
"vec3<bool>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
gl.uniform3i(location, v[0], v[1], v[2]);
}`,
"vec4<bool>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
cv[3] = v[3];
gl.uniform4i(location, v[0], v[1], v[2], v[3]);
}`,
"mat2x2<f32>": `gl.uniformMatrix2fv(location, false, v);`,
"mat3x3<f32>": `gl.uniformMatrix3fv(location, false, v);`,
"mat4x4<f32>": `gl.uniformMatrix4fv(location, false, v);`
};
const UNIFORM_TO_ARRAY_SETTERS = {
f32: `gl.uniform1fv(location, v);`,
"vec2<f32>": `gl.uniform2fv(location, v);`,
"vec3<f32>": `gl.uniform3fv(location, v);`,
"vec4<f32>": `gl.uniform4fv(location, v);`,
"mat2x2<f32>": `gl.uniformMatrix2fv(location, false, v);`,
"mat3x3<f32>": `gl.uniformMatrix3fv(location, false, v);`,
"mat4x4<f32>": `gl.uniformMatrix4fv(location, false, v);`,
i32: `gl.uniform1iv(location, v);`,
"vec2<i32>": `gl.uniform2iv(location, v);`,
"vec3<i32>": `gl.uniform3iv(location, v);`,
"vec4<i32>": `gl.uniform4iv(location, v);`,
u32: `gl.uniform1iv(location, v);`,
"vec2<u32>": `gl.uniform2iv(location, v);`,
"vec3<u32>": `gl.uniform3iv(location, v);`,
"vec4<u32>": `gl.uniform4iv(location, v);`,
bool: `gl.uniform1iv(location, v);`,
"vec2<bool>": `gl.uniform2iv(location, v);`,
"vec3<bool>": `gl.uniform3iv(location, v);`,
"vec4<bool>": `gl.uniform4iv(location, v);`
};
exports.UNIFORM_TO_ARRAY_SETTERS = UNIFORM_TO_ARRAY_SETTERS;
exports.UNIFORM_TO_SINGLE_SETTERS = UNIFORM_TO_SINGLE_SETTERS;
//# sourceMappingURL=generateUniformsSyncTypes.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,118 @@
"use strict";
const UNIFORM_TO_SINGLE_SETTERS = {
f32: `if (cv !== v) {
cu.value = v;
gl.uniform1f(location, v);
}`,
"vec2<f32>": `if (cv[0] !== v[0] || cv[1] !== v[1]) {
cv[0] = v[0];
cv[1] = v[1];
gl.uniform2f(location, v[0], v[1]);
}`,
"vec3<f32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
gl.uniform3f(location, v[0], v[1], v[2]);
}`,
"vec4<f32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
cv[3] = v[3];
gl.uniform4f(location, v[0], v[1], v[2], v[3]);
}`,
i32: `if (cv !== v) {
cu.value = v;
gl.uniform1i(location, v);
}`,
"vec2<i32>": `if (cv[0] !== v[0] || cv[1] !== v[1]) {
cv[0] = v[0];
cv[1] = v[1];
gl.uniform2i(location, v[0], v[1]);
}`,
"vec3<i32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
gl.uniform3i(location, v[0], v[1], v[2]);
}`,
"vec4<i32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
cv[3] = v[3];
gl.uniform4i(location, v[0], v[1], v[2], v[3]);
}`,
u32: `if (cv !== v) {
cu.value = v;
gl.uniform1ui(location, v);
}`,
"vec2<u32>": `if (cv[0] !== v[0] || cv[1] !== v[1]) {
cv[0] = v[0];
cv[1] = v[1];
gl.uniform2ui(location, v[0], v[1]);
}`,
"vec3<u32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
gl.uniform3ui(location, v[0], v[1], v[2]);
}`,
"vec4<u32>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
cv[3] = v[3];
gl.uniform4ui(location, v[0], v[1], v[2], v[3]);
}`,
bool: `if (cv !== v) {
cu.value = v;
gl.uniform1i(location, v);
}`,
"vec2<bool>": `if (cv[0] !== v[0] || cv[1] !== v[1]) {
cv[0] = v[0];
cv[1] = v[1];
gl.uniform2i(location, v[0], v[1]);
}`,
"vec3<bool>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
gl.uniform3i(location, v[0], v[1], v[2]);
}`,
"vec4<bool>": `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {
cv[0] = v[0];
cv[1] = v[1];
cv[2] = v[2];
cv[3] = v[3];
gl.uniform4i(location, v[0], v[1], v[2], v[3]);
}`,
"mat2x2<f32>": `gl.uniformMatrix2fv(location, false, v);`,
"mat3x3<f32>": `gl.uniformMatrix3fv(location, false, v);`,
"mat4x4<f32>": `gl.uniformMatrix4fv(location, false, v);`
};
const UNIFORM_TO_ARRAY_SETTERS = {
f32: `gl.uniform1fv(location, v);`,
"vec2<f32>": `gl.uniform2fv(location, v);`,
"vec3<f32>": `gl.uniform3fv(location, v);`,
"vec4<f32>": `gl.uniform4fv(location, v);`,
"mat2x2<f32>": `gl.uniformMatrix2fv(location, false, v);`,
"mat3x3<f32>": `gl.uniformMatrix3fv(location, false, v);`,
"mat4x4<f32>": `gl.uniformMatrix4fv(location, false, v);`,
i32: `gl.uniform1iv(location, v);`,
"vec2<i32>": `gl.uniform2iv(location, v);`,
"vec3<i32>": `gl.uniform3iv(location, v);`,
"vec4<i32>": `gl.uniform4iv(location, v);`,
u32: `gl.uniform1iv(location, v);`,
"vec2<u32>": `gl.uniform2iv(location, v);`,
"vec3<u32>": `gl.uniform3iv(location, v);`,
"vec4<u32>": `gl.uniform4iv(location, v);`,
bool: `gl.uniform1iv(location, v);`,
"vec2<bool>": `gl.uniform2iv(location, v);`,
"vec3<bool>": `gl.uniform3iv(location, v);`,
"vec4<bool>": `gl.uniform4iv(location, v);`
};
export { UNIFORM_TO_ARRAY_SETTERS, UNIFORM_TO_SINGLE_SETTERS };
//# sourceMappingURL=generateUniformsSyncTypes.mjs.map

File diff suppressed because one or more lines are too long