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,11 @@
import { GlProgram } from '../renderers/gl/shader/GlProgram';
import { GpuProgram } from '../renderers/gpu/shader/GpuProgram';
import type { HighShaderBit } from './compiler/types';
export declare function compileHighShaderGpuProgram({ bits, name }: {
bits: HighShaderBit[];
name: string;
}): GpuProgram;
export declare function compileHighShaderGlProgram({ bits, name }: {
bits: HighShaderBit[];
name: string;
}): GlProgram;

View File

@@ -0,0 +1,51 @@
'use strict';
var GlProgram = require('../renderers/gl/shader/GlProgram.js');
var GpuProgram = require('../renderers/gpu/shader/GpuProgram.js');
var compileHighShader = require('./compiler/compileHighShader.js');
var defaultProgramTemplate = require('./defaultProgramTemplate.js');
var globalUniformsBit = require('./shader-bits/globalUniformsBit.js');
"use strict";
function compileHighShaderGpuProgram({ bits, name }) {
const source = compileHighShader.compileHighShader({
template: {
fragment: defaultProgramTemplate.fragmentGPUTemplate,
vertex: defaultProgramTemplate.vertexGPUTemplate
},
bits: [
globalUniformsBit.globalUniformsBit,
...bits
]
});
return GpuProgram.GpuProgram.from({
name,
vertex: {
source: source.vertex,
entryPoint: "main"
},
fragment: {
source: source.fragment,
entryPoint: "main"
}
});
}
function compileHighShaderGlProgram({ bits, name }) {
return new GlProgram.GlProgram({
name,
...compileHighShader.compileHighShaderGl({
template: {
vertex: defaultProgramTemplate.vertexGlTemplate,
fragment: defaultProgramTemplate.fragmentGlTemplate
},
bits: [
globalUniformsBit.globalUniformsBitGl,
...bits
]
})
});
}
exports.compileHighShaderGlProgram = compileHighShaderGlProgram;
exports.compileHighShaderGpuProgram = compileHighShaderGpuProgram;
//# sourceMappingURL=compileHighShaderToProgram.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"compileHighShaderToProgram.js","sources":["../../../src/rendering/high-shader/compileHighShaderToProgram.ts"],"sourcesContent":["import { GlProgram } from '../renderers/gl/shader/GlProgram';\nimport { GpuProgram } from '../renderers/gpu/shader/GpuProgram';\nimport { compileHighShader, compileHighShaderGl } from './compiler/compileHighShader';\nimport { fragmentGlTemplate, fragmentGPUTemplate, vertexGlTemplate, vertexGPUTemplate } from './defaultProgramTemplate';\nimport { globalUniformsBit, globalUniformsBitGl } from './shader-bits/globalUniformsBit';\n\nimport type { HighShaderBit } from './compiler/types';\n\nexport function compileHighShaderGpuProgram({ bits, name }: {bits: HighShaderBit[], name: string}): GpuProgram\n{\n const source = compileHighShader({\n template: {\n fragment: fragmentGPUTemplate,\n vertex: vertexGPUTemplate,\n },\n bits: [\n globalUniformsBit,\n ...bits,\n ]\n });\n\n return GpuProgram.from({\n name,\n vertex: {\n source: source.vertex,\n entryPoint: 'main',\n },\n fragment: {\n source: source.fragment,\n entryPoint: 'main',\n },\n });\n}\n\nexport function compileHighShaderGlProgram({ bits, name }: {bits: HighShaderBit[], name: string}): GlProgram\n{\n return new GlProgram({\n name,\n ...compileHighShaderGl({\n template: {\n vertex: vertexGlTemplate,\n fragment: fragmentGlTemplate,\n },\n bits: [\n globalUniformsBitGl,\n ...bits,\n ]\n })\n });\n}\n"],"names":["compileHighShader","fragmentGPUTemplate","vertexGPUTemplate","globalUniformsBit","GpuProgram","GlProgram","compileHighShaderGl","vertexGlTemplate","fragmentGlTemplate","globalUniformsBitGl"],"mappings":";;;;;;;;;AAQO,SAAS,2BAA4B,CAAA,EAAE,IAAM,EAAA,IAAA,EACpD,EAAA;AACI,EAAA,MAAM,SAASA,mCAAkB,CAAA;AAAA,IAC7B,QAAU,EAAA;AAAA,MACN,QAAU,EAAAC,0CAAA;AAAA,MACV,MAAQ,EAAAC,wCAAA;AAAA,KACZ;AAAA,IACA,IAAM,EAAA;AAAA,MACFC,mCAAA;AAAA,MACA,GAAG,IAAA;AAAA,KACP;AAAA,GACH,CAAA,CAAA;AAED,EAAA,OAAOC,sBAAW,IAAK,CAAA;AAAA,IACnB,IAAA;AAAA,IACA,MAAQ,EAAA;AAAA,MACJ,QAAQ,MAAO,CAAA,MAAA;AAAA,MACf,UAAY,EAAA,MAAA;AAAA,KAChB;AAAA,IACA,QAAU,EAAA;AAAA,MACN,QAAQ,MAAO,CAAA,QAAA;AAAA,MACf,UAAY,EAAA,MAAA;AAAA,KAChB;AAAA,GACH,CAAA,CAAA;AACL,CAAA;AAEO,SAAS,0BAA2B,CAAA,EAAE,IAAM,EAAA,IAAA,EACnD,EAAA;AACI,EAAA,OAAO,IAAIC,mBAAU,CAAA;AAAA,IACjB,IAAA;AAAA,IACA,GAAGC,qCAAoB,CAAA;AAAA,MACnB,QAAU,EAAA;AAAA,QACN,MAAQ,EAAAC,uCAAA;AAAA,QACR,QAAU,EAAAC,yCAAA;AAAA,OACd;AAAA,MACA,IAAM,EAAA;AAAA,QACFC,qCAAA;AAAA,QACA,GAAG,IAAA;AAAA,OACP;AAAA,KACH,CAAA;AAAA,GACJ,CAAA,CAAA;AACL;;;;;"}

View File

@@ -0,0 +1,48 @@
import { GlProgram } from '../renderers/gl/shader/GlProgram.mjs';
import { GpuProgram } from '../renderers/gpu/shader/GpuProgram.mjs';
import { compileHighShader, compileHighShaderGl } from './compiler/compileHighShader.mjs';
import { fragmentGPUTemplate, vertexGPUTemplate, vertexGlTemplate, fragmentGlTemplate } from './defaultProgramTemplate.mjs';
import { globalUniformsBit, globalUniformsBitGl } from './shader-bits/globalUniformsBit.mjs';
"use strict";
function compileHighShaderGpuProgram({ bits, name }) {
const source = compileHighShader({
template: {
fragment: fragmentGPUTemplate,
vertex: vertexGPUTemplate
},
bits: [
globalUniformsBit,
...bits
]
});
return GpuProgram.from({
name,
vertex: {
source: source.vertex,
entryPoint: "main"
},
fragment: {
source: source.fragment,
entryPoint: "main"
}
});
}
function compileHighShaderGlProgram({ bits, name }) {
return new GlProgram({
name,
...compileHighShaderGl({
template: {
vertex: vertexGlTemplate,
fragment: fragmentGlTemplate
},
bits: [
globalUniformsBitGl,
...bits
]
})
});
}
export { compileHighShaderGlProgram, compileHighShaderGpuProgram };
//# sourceMappingURL=compileHighShaderToProgram.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"compileHighShaderToProgram.mjs","sources":["../../../src/rendering/high-shader/compileHighShaderToProgram.ts"],"sourcesContent":["import { GlProgram } from '../renderers/gl/shader/GlProgram';\nimport { GpuProgram } from '../renderers/gpu/shader/GpuProgram';\nimport { compileHighShader, compileHighShaderGl } from './compiler/compileHighShader';\nimport { fragmentGlTemplate, fragmentGPUTemplate, vertexGlTemplate, vertexGPUTemplate } from './defaultProgramTemplate';\nimport { globalUniformsBit, globalUniformsBitGl } from './shader-bits/globalUniformsBit';\n\nimport type { HighShaderBit } from './compiler/types';\n\nexport function compileHighShaderGpuProgram({ bits, name }: {bits: HighShaderBit[], name: string}): GpuProgram\n{\n const source = compileHighShader({\n template: {\n fragment: fragmentGPUTemplate,\n vertex: vertexGPUTemplate,\n },\n bits: [\n globalUniformsBit,\n ...bits,\n ]\n });\n\n return GpuProgram.from({\n name,\n vertex: {\n source: source.vertex,\n entryPoint: 'main',\n },\n fragment: {\n source: source.fragment,\n entryPoint: 'main',\n },\n });\n}\n\nexport function compileHighShaderGlProgram({ bits, name }: {bits: HighShaderBit[], name: string}): GlProgram\n{\n return new GlProgram({\n name,\n ...compileHighShaderGl({\n template: {\n vertex: vertexGlTemplate,\n fragment: fragmentGlTemplate,\n },\n bits: [\n globalUniformsBitGl,\n ...bits,\n ]\n })\n });\n}\n"],"names":[],"mappings":";;;;;;;AAQO,SAAS,2BAA4B,CAAA,EAAE,IAAM,EAAA,IAAA,EACpD,EAAA;AACI,EAAA,MAAM,SAAS,iBAAkB,CAAA;AAAA,IAC7B,QAAU,EAAA;AAAA,MACN,QAAU,EAAA,mBAAA;AAAA,MACV,MAAQ,EAAA,iBAAA;AAAA,KACZ;AAAA,IACA,IAAM,EAAA;AAAA,MACF,iBAAA;AAAA,MACA,GAAG,IAAA;AAAA,KACP;AAAA,GACH,CAAA,CAAA;AAED,EAAA,OAAO,WAAW,IAAK,CAAA;AAAA,IACnB,IAAA;AAAA,IACA,MAAQ,EAAA;AAAA,MACJ,QAAQ,MAAO,CAAA,MAAA;AAAA,MACf,UAAY,EAAA,MAAA;AAAA,KAChB;AAAA,IACA,QAAU,EAAA;AAAA,MACN,QAAQ,MAAO,CAAA,QAAA;AAAA,MACf,UAAY,EAAA,MAAA;AAAA,KAChB;AAAA,GACH,CAAA,CAAA;AACL,CAAA;AAEO,SAAS,0BAA2B,CAAA,EAAE,IAAM,EAAA,IAAA,EACnD,EAAA;AACI,EAAA,OAAO,IAAI,SAAU,CAAA;AAAA,IACjB,IAAA;AAAA,IACA,GAAG,mBAAoB,CAAA;AAAA,MACnB,QAAU,EAAA;AAAA,QACN,MAAQ,EAAA,gBAAA;AAAA,QACR,QAAU,EAAA,kBAAA;AAAA,OACd;AAAA,MACA,IAAM,EAAA;AAAA,QACF,mBAAA;AAAA,QACA,GAAG,IAAA;AAAA,OACP;AAAA,KACH,CAAA;AAAA,GACJ,CAAA,CAAA;AACL;;;;"}

View File

@@ -0,0 +1,19 @@
import type { HighShaderBit, HighShaderSource } from './types';
/** A high template consists of vertex and fragment source */
export interface HighShaderTemplate {
name?: string;
fragment: string;
vertex: string;
}
export interface CompileHighShaderOptions {
template: HighShaderTemplate;
bits: HighShaderBit[];
}
/**
* This function will take a HighShader template, some High fragments and then merge them in to a shader source.
* @param options
* @param options.template
* @param options.bits
*/
export declare function compileHighShader({ template, bits }: CompileHighShaderOptions): HighShaderSource;
export declare function compileHighShaderGl({ template, bits }: CompileHighShaderOptions): HighShaderSource;

View File

@@ -0,0 +1,68 @@
'use strict';
var addBits = require('./utils/addBits.js');
var compileHooks = require('./utils/compileHooks.js');
var compileInputs = require('./utils/compileInputs.js');
var compileOutputs = require('./utils/compileOutputs.js');
var injectBits = require('./utils/injectBits.js');
"use strict";
const cacheMap = /* @__PURE__ */ Object.create(null);
const bitCacheMap = /* @__PURE__ */ new Map();
let CACHE_UID = 0;
function compileHighShader({
template,
bits
}) {
const cacheId = generateCacheId(template, bits);
if (cacheMap[cacheId])
return cacheMap[cacheId];
const { vertex, fragment } = compileInputsAndOutputs(template, bits);
cacheMap[cacheId] = compileBits(vertex, fragment, bits);
return cacheMap[cacheId];
}
function compileHighShaderGl({
template,
bits
}) {
const cacheId = generateCacheId(template, bits);
if (cacheMap[cacheId])
return cacheMap[cacheId];
cacheMap[cacheId] = compileBits(template.vertex, template.fragment, bits);
return cacheMap[cacheId];
}
function compileInputsAndOutputs(template, bits) {
const vertexFragments = bits.map((shaderBit) => shaderBit.vertex).filter((v) => !!v);
const fragmentFragments = bits.map((shaderBit) => shaderBit.fragment).filter((v) => !!v);
let compiledVertex = compileInputs.compileInputs(vertexFragments, template.vertex, true);
compiledVertex = compileOutputs.compileOutputs(vertexFragments, compiledVertex);
const compiledFragment = compileInputs.compileInputs(fragmentFragments, template.fragment, true);
return {
vertex: compiledVertex,
fragment: compiledFragment
};
}
function generateCacheId(template, bits) {
return bits.map((highFragment) => {
if (!bitCacheMap.has(highFragment)) {
bitCacheMap.set(highFragment, CACHE_UID++);
}
return bitCacheMap.get(highFragment);
}).sort((a, b) => a - b).join("-") + template.vertex + template.fragment;
}
function compileBits(vertex, fragment, bits) {
const vertexParts = compileHooks.compileHooks(vertex);
const fragmentParts = compileHooks.compileHooks(fragment);
bits.forEach((shaderBit) => {
addBits.addBits(shaderBit.vertex, vertexParts, shaderBit.name);
addBits.addBits(shaderBit.fragment, fragmentParts, shaderBit.name);
});
return {
vertex: injectBits.injectBits(vertex, vertexParts),
fragment: injectBits.injectBits(fragment, fragmentParts)
};
}
exports.compileHighShader = compileHighShader;
exports.compileHighShaderGl = compileHighShaderGl;
//# sourceMappingURL=compileHighShader.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,65 @@
import { addBits } from './utils/addBits.mjs';
import { compileHooks } from './utils/compileHooks.mjs';
import { compileInputs } from './utils/compileInputs.mjs';
import { compileOutputs } from './utils/compileOutputs.mjs';
import { injectBits } from './utils/injectBits.mjs';
"use strict";
const cacheMap = /* @__PURE__ */ Object.create(null);
const bitCacheMap = /* @__PURE__ */ new Map();
let CACHE_UID = 0;
function compileHighShader({
template,
bits
}) {
const cacheId = generateCacheId(template, bits);
if (cacheMap[cacheId])
return cacheMap[cacheId];
const { vertex, fragment } = compileInputsAndOutputs(template, bits);
cacheMap[cacheId] = compileBits(vertex, fragment, bits);
return cacheMap[cacheId];
}
function compileHighShaderGl({
template,
bits
}) {
const cacheId = generateCacheId(template, bits);
if (cacheMap[cacheId])
return cacheMap[cacheId];
cacheMap[cacheId] = compileBits(template.vertex, template.fragment, bits);
return cacheMap[cacheId];
}
function compileInputsAndOutputs(template, bits) {
const vertexFragments = bits.map((shaderBit) => shaderBit.vertex).filter((v) => !!v);
const fragmentFragments = bits.map((shaderBit) => shaderBit.fragment).filter((v) => !!v);
let compiledVertex = compileInputs(vertexFragments, template.vertex, true);
compiledVertex = compileOutputs(vertexFragments, compiledVertex);
const compiledFragment = compileInputs(fragmentFragments, template.fragment, true);
return {
vertex: compiledVertex,
fragment: compiledFragment
};
}
function generateCacheId(template, bits) {
return bits.map((highFragment) => {
if (!bitCacheMap.has(highFragment)) {
bitCacheMap.set(highFragment, CACHE_UID++);
}
return bitCacheMap.get(highFragment);
}).sort((a, b) => a - b).join("-") + template.vertex + template.fragment;
}
function compileBits(vertex, fragment, bits) {
const vertexParts = compileHooks(vertex);
const fragmentParts = compileHooks(fragment);
bits.forEach((shaderBit) => {
addBits(shaderBit.vertex, vertexParts, shaderBit.name);
addBits(shaderBit.fragment, fragmentParts, shaderBit.name);
});
return {
vertex: injectBits(vertex, vertexParts),
fragment: injectBits(fragment, fragmentParts)
};
}
export { compileHighShader, compileHighShaderGl };
//# sourceMappingURL=compileHighShader.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,41 @@
/** the vertex source code, an obj */
export type Vertex = {
/** stick uniforms and functions in here all headers will be compiled at the top of the shader */
header?: string;
/** code will be added at the start of the shader */
start?: string;
/** code will be run here before lighting happens */
main?: string;
/** code here will to modify anything before it is passed to the fragment shader */
end?: string;
};
export type Fragment = {
/** stick uniforms and functions in here all headers will be compiled at the top of the shader */
header?: string;
/** code will be added at the start of the shader */
start?: string;
/** code will be run here before lighting happens */
main?: string;
/** code here will to modify anything before it is passed to the fragment shader */
end?: string;
};
/**
* HighShaderBit is a part of a shader.
* it is used to compile HighShaders.
*
* Internally shaders are made up of many of these.
* You can even write your own and compile them in.
*/
export interface HighShaderBit {
/** used to make the shader easier to understand! */
name?: string;
/** the snippets of vertex code */
vertex?: Vertex;
/** the snippets of fragment code */
fragment?: Fragment;
}
/** source code to compile a shader. this can be directly used by pixi and should be good to go! */
export interface HighShaderSource {
fragment: string;
vertex: string;
}

View File

@@ -0,0 +1,4 @@
'use strict';
"use strict";
//# sourceMappingURL=types.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}

View File

@@ -0,0 +1,2 @@
"use strict";
//# sourceMappingURL=types.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"types.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}

View File

@@ -0,0 +1,7 @@
/**
* takes the HighFragment source parts and adds them to the hook hash
* @param srcParts - the hash of hook arrays
* @param parts - the code to inject into the hooks
* @param name - optional the name of the part to add
*/
export declare function addBits(srcParts: Record<string, string>, parts: Record<string, string[]>, name?: string): void;

View File

@@ -0,0 +1,28 @@
'use strict';
var warn = require('../../../../utils/logging/warn.js');
"use strict";
function addBits(srcParts, parts, name) {
if (srcParts) {
for (const i in srcParts) {
const id = i.toLocaleLowerCase();
const part = parts[id];
if (part) {
let sanitisedPart = srcParts[i];
if (i === "header") {
sanitisedPart = sanitisedPart.replace(/@in\s+[^;]+;\s*/g, "").replace(/@out\s+[^;]+;\s*/g, "");
}
if (name) {
part.push(`//----${name}----//`);
}
part.push(sanitisedPart);
} else {
warn.warn(`${i} placement hook does not exist in shader`);
}
}
}
}
exports.addBits = addBits;
//# sourceMappingURL=addBits.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"addBits.js","sources":["../../../../../src/rendering/high-shader/compiler/utils/addBits.ts"],"sourcesContent":["import { warn } from '../../../../utils/logging/warn';\n\n/**\n * takes the HighFragment source parts and adds them to the hook hash\n * @param srcParts - the hash of hook arrays\n * @param parts - the code to inject into the hooks\n * @param name - optional the name of the part to add\n */\nexport function addBits(srcParts: Record<string, string>, parts: Record<string, string[]>, name?: string)\n{\n if (srcParts)\n {\n for (const i in srcParts)\n {\n const id = i.toLocaleLowerCase();\n\n const part = parts[id];\n\n if (part)\n {\n let sanitisedPart = srcParts[i];\n\n if (i === 'header')\n {\n sanitisedPart = sanitisedPart\n .replace(/@in\\s+[^;]+;\\s*/g, '')\n .replace(/@out\\s+[^;]+;\\s*/g, '');\n }\n\n if (name)\n {\n part.push(`//----${name}----//`);\n }\n part.push(sanitisedPart);\n }\n\n else\n {\n // #if _DEBUG\n warn(`${i} placement hook does not exist in shader`);\n // #endif\n }\n }\n }\n}\n"],"names":["warn"],"mappings":";;;;;AAQgB,SAAA,OAAA,CAAQ,QAAkC,EAAA,KAAA,EAAiC,IAC3F,EAAA;AACI,EAAA,IAAI,QACJ,EAAA;AACI,IAAA,KAAA,MAAW,KAAK,QAChB,EAAA;AACI,MAAM,MAAA,EAAA,GAAK,EAAE,iBAAkB,EAAA,CAAA;AAE/B,MAAM,MAAA,IAAA,GAAO,MAAM,EAAE,CAAA,CAAA;AAErB,MAAA,IAAI,IACJ,EAAA;AACI,QAAI,IAAA,aAAA,GAAgB,SAAS,CAAC,CAAA,CAAA;AAE9B,QAAA,IAAI,MAAM,QACV,EAAA;AACI,UAAA,aAAA,GAAgB,cACX,OAAQ,CAAA,kBAAA,EAAoB,EAAE,CAC9B,CAAA,OAAA,CAAQ,qBAAqB,EAAE,CAAA,CAAA;AAAA,SACxC;AAEA,QAAA,IAAI,IACJ,EAAA;AACI,UAAK,IAAA,CAAA,IAAA,CAAK,CAAS,MAAA,EAAA,IAAI,CAAQ,MAAA,CAAA,CAAA,CAAA;AAAA,SACnC;AACA,QAAA,IAAA,CAAK,KAAK,aAAa,CAAA,CAAA;AAAA,OAI3B,MAAA;AAEI,QAAKA,SAAA,CAAA,CAAA,EAAG,CAAC,CAA0C,wCAAA,CAAA,CAAA,CAAA;AAAA,OAEvD;AAAA,KACJ;AAAA,GACJ;AACJ;;;;"}

View File

@@ -0,0 +1,26 @@
import { warn } from '../../../../utils/logging/warn.mjs';
"use strict";
function addBits(srcParts, parts, name) {
if (srcParts) {
for (const i in srcParts) {
const id = i.toLocaleLowerCase();
const part = parts[id];
if (part) {
let sanitisedPart = srcParts[i];
if (i === "header") {
sanitisedPart = sanitisedPart.replace(/@in\s+[^;]+;\s*/g, "").replace(/@out\s+[^;]+;\s*/g, "");
}
if (name) {
part.push(`//----${name}----//`);
}
part.push(sanitisedPart);
} else {
warn(`${i} placement hook does not exist in shader`);
}
}
}
}
export { addBits };
//# sourceMappingURL=addBits.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"addBits.mjs","sources":["../../../../../src/rendering/high-shader/compiler/utils/addBits.ts"],"sourcesContent":["import { warn } from '../../../../utils/logging/warn';\n\n/**\n * takes the HighFragment source parts and adds them to the hook hash\n * @param srcParts - the hash of hook arrays\n * @param parts - the code to inject into the hooks\n * @param name - optional the name of the part to add\n */\nexport function addBits(srcParts: Record<string, string>, parts: Record<string, string[]>, name?: string)\n{\n if (srcParts)\n {\n for (const i in srcParts)\n {\n const id = i.toLocaleLowerCase();\n\n const part = parts[id];\n\n if (part)\n {\n let sanitisedPart = srcParts[i];\n\n if (i === 'header')\n {\n sanitisedPart = sanitisedPart\n .replace(/@in\\s+[^;]+;\\s*/g, '')\n .replace(/@out\\s+[^;]+;\\s*/g, '');\n }\n\n if (name)\n {\n part.push(`//----${name}----//`);\n }\n part.push(sanitisedPart);\n }\n\n else\n {\n // #if _DEBUG\n warn(`${i} placement hook does not exist in shader`);\n // #endif\n }\n }\n }\n}\n"],"names":[],"mappings":";;;AAQgB,SAAA,OAAA,CAAQ,QAAkC,EAAA,KAAA,EAAiC,IAC3F,EAAA;AACI,EAAA,IAAI,QACJ,EAAA;AACI,IAAA,KAAA,MAAW,KAAK,QAChB,EAAA;AACI,MAAM,MAAA,EAAA,GAAK,EAAE,iBAAkB,EAAA,CAAA;AAE/B,MAAM,MAAA,IAAA,GAAO,MAAM,EAAE,CAAA,CAAA;AAErB,MAAA,IAAI,IACJ,EAAA;AACI,QAAI,IAAA,aAAA,GAAgB,SAAS,CAAC,CAAA,CAAA;AAE9B,QAAA,IAAI,MAAM,QACV,EAAA;AACI,UAAA,aAAA,GAAgB,cACX,OAAQ,CAAA,kBAAA,EAAoB,EAAE,CAC9B,CAAA,OAAA,CAAQ,qBAAqB,EAAE,CAAA,CAAA;AAAA,SACxC;AAEA,QAAA,IAAI,IACJ,EAAA;AACI,UAAK,IAAA,CAAA,IAAA,CAAK,CAAS,MAAA,EAAA,IAAI,CAAQ,MAAA,CAAA,CAAA,CAAA;AAAA,SACnC;AACA,QAAA,IAAA,CAAK,KAAK,aAAa,CAAA,CAAA;AAAA,OAI3B,MAAA;AAEI,QAAK,IAAA,CAAA,CAAA,EAAG,CAAC,CAA0C,wCAAA,CAAA,CAAA,CAAA;AAAA,OAEvD;AAAA,KACJ;AAAA,GACJ;AACJ;;;;"}

View File

@@ -0,0 +1,6 @@
export declare const findHooksRx: RegExp;
/**
* takes a program string and returns an hash mapping the hooks to empty arrays
* @param programSrc - the program containing hooks
*/
export declare function compileHooks(programSrc: string): Record<string, string[]>;

View File

@@ -0,0 +1,16 @@
'use strict';
"use strict";
const findHooksRx = /\{\{(.*?)\}\}/g;
function compileHooks(programSrc) {
const parts = {};
const partMatches = programSrc.match(findHooksRx)?.map((hook) => hook.replace(/[{()}]/g, "")) ?? [];
partMatches.forEach((hook) => {
parts[hook] = [];
});
return parts;
}
exports.compileHooks = compileHooks;
exports.findHooksRx = findHooksRx;
//# sourceMappingURL=compileHooks.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"compileHooks.js","sources":["../../../../../src/rendering/high-shader/compiler/utils/compileHooks.ts"],"sourcesContent":["export const findHooksRx = /\\{\\{(.*?)\\}\\}/g;\n\n/**\n * takes a program string and returns an hash mapping the hooks to empty arrays\n * @param programSrc - the program containing hooks\n */\nexport function compileHooks(programSrc: string): Record<string, string[]>\n{\n const parts: Record<string, string[]> = {};\n\n const partMatches = programSrc\n .match(findHooksRx)\n ?.map((hook) => hook.replace(/[{()}]/g, '')) ?? [];\n\n partMatches.forEach((hook) =>\n {\n parts[hook] = [];\n });\n\n return parts;\n}\n"],"names":[],"mappings":";;;AAAO,MAAM,WAAc,GAAA,iBAAA;AAMpB,SAAS,aAAa,UAC7B,EAAA;AACI,EAAA,MAAM,QAAkC,EAAC,CAAA;AAEzC,EAAA,MAAM,WAAc,GAAA,UAAA,CACf,KAAM,CAAA,WAAW,GAChB,GAAI,CAAA,CAAC,IAAS,KAAA,IAAA,CAAK,OAAQ,CAAA,SAAA,EAAW,EAAE,CAAC,KAAK,EAAC,CAAA;AAErD,EAAY,WAAA,CAAA,OAAA,CAAQ,CAAC,IACrB,KAAA;AACI,IAAM,KAAA,CAAA,IAAI,IAAI,EAAC,CAAA;AAAA,GAClB,CAAA,CAAA;AAED,EAAO,OAAA,KAAA,CAAA;AACX;;;;;"}

View File

@@ -0,0 +1,13 @@
"use strict";
const findHooksRx = /\{\{(.*?)\}\}/g;
function compileHooks(programSrc) {
const parts = {};
const partMatches = programSrc.match(findHooksRx)?.map((hook) => hook.replace(/[{()}]/g, "")) ?? [];
partMatches.forEach((hook) => {
parts[hook] = [];
});
return parts;
}
export { compileHooks, findHooksRx };
//# sourceMappingURL=compileHooks.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"compileHooks.mjs","sources":["../../../../../src/rendering/high-shader/compiler/utils/compileHooks.ts"],"sourcesContent":["export const findHooksRx = /\\{\\{(.*?)\\}\\}/g;\n\n/**\n * takes a program string and returns an hash mapping the hooks to empty arrays\n * @param programSrc - the program containing hooks\n */\nexport function compileHooks(programSrc: string): Record<string, string[]>\n{\n const parts: Record<string, string[]> = {};\n\n const partMatches = programSrc\n .match(findHooksRx)\n ?.map((hook) => hook.replace(/[{()}]/g, '')) ?? [];\n\n partMatches.forEach((hook) =>\n {\n parts[hook] = [];\n });\n\n return parts;\n}\n"],"names":[],"mappings":";AAAO,MAAM,WAAc,GAAA,iBAAA;AAMpB,SAAS,aAAa,UAC7B,EAAA;AACI,EAAA,MAAM,QAAkC,EAAC,CAAA;AAEzC,EAAA,MAAM,WAAc,GAAA,UAAA,CACf,KAAM,CAAA,WAAW,GAChB,GAAI,CAAA,CAAC,IAAS,KAAA,IAAA,CAAK,OAAQ,CAAA,SAAA,EAAW,EAAE,CAAC,KAAK,EAAC,CAAA;AAErD,EAAY,WAAA,CAAA,OAAA,CAAQ,CAAC,IACrB,KAAA;AACI,IAAM,KAAA,CAAA,IAAI,IAAI,EAAC,CAAA;AAAA,GAClB,CAAA,CAAA;AAED,EAAO,OAAA,KAAA,CAAA;AACX;;;;"}

View File

@@ -0,0 +1 @@
export declare function compileInputs(fragments: any[], template: string, sort?: boolean): string;

View File

@@ -0,0 +1,32 @@
'use strict';
"use strict";
function extractInputs(fragmentSource, out) {
let match;
const regex = /@in\s+([^;]+);/g;
while ((match = regex.exec(fragmentSource)) !== null) {
out.push(match[1]);
}
}
function compileInputs(fragments, template, sort = false) {
const results = [];
extractInputs(template, results);
fragments.forEach((fragment) => {
if (fragment.header) {
extractInputs(fragment.header, results);
}
});
const mainInput = results;
if (sort) {
mainInput.sort();
}
const finalString = mainInput.map((inValue, i) => ` @location(${i}) ${inValue},`).join("\n");
let cleanedString = template.replace(/@in\s+[^;]+;\s*/g, "");
cleanedString = cleanedString.replace("{{in}}", `
${finalString}
`);
return cleanedString;
}
exports.compileInputs = compileInputs;
//# sourceMappingURL=compileInputs.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"compileInputs.js","sources":["../../../../../src/rendering/high-shader/compiler/utils/compileInputs.ts"],"sourcesContent":["function extractInputs(fragmentSource: string, out: string[])\n{\n let match;\n const regex = /@in\\s+([^;]+);/g;\n\n while ((match = regex.exec(fragmentSource)) !== null)\n {\n out.push(match[1]);\n }\n}\n\nexport function compileInputs(fragments: any[], template: string, sort = false)\n{\n // get all the inputs from the fragments..\n const results: string[] = [];\n\n extractInputs(template, results);\n\n fragments.forEach((fragment) =>\n {\n if (fragment.header)\n {\n extractInputs(fragment.header, results);\n }\n });\n\n // build the input:\n const mainInput = results;\n\n if (sort)\n {\n mainInput.sort();\n }\n\n const finalString = mainInput\n .map((inValue, i) => ` @location(${i}) ${inValue},`)\n .join('\\n');\n\n // Remove lines from original string\n let cleanedString = template.replace(/@in\\s+[^;]+;\\s*/g, '');\n\n cleanedString = cleanedString.replace('{{in}}', `\\n${finalString}\\n`);\n\n return cleanedString;\n}\n"],"names":[],"mappings":";;;AAAA,SAAS,aAAA,CAAc,gBAAwB,GAC/C,EAAA;AACI,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,MAAM,KAAQ,GAAA,iBAAA,CAAA;AAEd,EAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAM,IAAK,CAAA,cAAc,OAAO,IAChD,EAAA;AACI,IAAI,GAAA,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,GACrB;AACJ,CAAA;AAEO,SAAS,aAAc,CAAA,SAAA,EAAkB,QAAkB,EAAA,IAAA,GAAO,KACzE,EAAA;AAEI,EAAA,MAAM,UAAoB,EAAC,CAAA;AAE3B,EAAA,aAAA,CAAc,UAAU,OAAO,CAAA,CAAA;AAE/B,EAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,QACnB,KAAA;AACI,IAAA,IAAI,SAAS,MACb,EAAA;AACI,MAAc,aAAA,CAAA,QAAA,CAAS,QAAQ,OAAO,CAAA,CAAA;AAAA,KAC1C;AAAA,GACH,CAAA,CAAA;AAGD,EAAA,MAAM,SAAY,GAAA,OAAA,CAAA;AAElB,EAAA,IAAI,IACJ,EAAA;AACI,IAAA,SAAA,CAAU,IAAK,EAAA,CAAA;AAAA,GACnB;AAEA,EAAA,MAAM,WAAc,GAAA,SAAA,CACf,GAAI,CAAA,CAAC,OAAS,EAAA,CAAA,KAAM,CAAoB,iBAAA,EAAA,CAAC,CAAK,EAAA,EAAA,OAAO,CAAG,CAAA,CAAA,CAAA,CACxD,KAAK,IAAI,CAAA,CAAA;AAGd,EAAA,IAAI,aAAgB,GAAA,QAAA,CAAS,OAAQ,CAAA,kBAAA,EAAoB,EAAE,CAAA,CAAA;AAE3D,EAAgB,aAAA,GAAA,aAAA,CAAc,QAAQ,QAAU,EAAA,CAAA;AAAA,EAAK,WAAW,CAAA;AAAA,CAAI,CAAA,CAAA;AAEpE,EAAO,OAAA,aAAA,CAAA;AACX;;;;"}

View File

@@ -0,0 +1,30 @@
"use strict";
function extractInputs(fragmentSource, out) {
let match;
const regex = /@in\s+([^;]+);/g;
while ((match = regex.exec(fragmentSource)) !== null) {
out.push(match[1]);
}
}
function compileInputs(fragments, template, sort = false) {
const results = [];
extractInputs(template, results);
fragments.forEach((fragment) => {
if (fragment.header) {
extractInputs(fragment.header, results);
}
});
const mainInput = results;
if (sort) {
mainInput.sort();
}
const finalString = mainInput.map((inValue, i) => ` @location(${i}) ${inValue},`).join("\n");
let cleanedString = template.replace(/@in\s+[^;]+;\s*/g, "");
cleanedString = cleanedString.replace("{{in}}", `
${finalString}
`);
return cleanedString;
}
export { compileInputs };
//# sourceMappingURL=compileInputs.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"compileInputs.mjs","sources":["../../../../../src/rendering/high-shader/compiler/utils/compileInputs.ts"],"sourcesContent":["function extractInputs(fragmentSource: string, out: string[])\n{\n let match;\n const regex = /@in\\s+([^;]+);/g;\n\n while ((match = regex.exec(fragmentSource)) !== null)\n {\n out.push(match[1]);\n }\n}\n\nexport function compileInputs(fragments: any[], template: string, sort = false)\n{\n // get all the inputs from the fragments..\n const results: string[] = [];\n\n extractInputs(template, results);\n\n fragments.forEach((fragment) =>\n {\n if (fragment.header)\n {\n extractInputs(fragment.header, results);\n }\n });\n\n // build the input:\n const mainInput = results;\n\n if (sort)\n {\n mainInput.sort();\n }\n\n const finalString = mainInput\n .map((inValue, i) => ` @location(${i}) ${inValue},`)\n .join('\\n');\n\n // Remove lines from original string\n let cleanedString = template.replace(/@in\\s+[^;]+;\\s*/g, '');\n\n cleanedString = cleanedString.replace('{{in}}', `\\n${finalString}\\n`);\n\n return cleanedString;\n}\n"],"names":[],"mappings":";AAAA,SAAS,aAAA,CAAc,gBAAwB,GAC/C,EAAA;AACI,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,MAAM,KAAQ,GAAA,iBAAA,CAAA;AAEd,EAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAM,IAAK,CAAA,cAAc,OAAO,IAChD,EAAA;AACI,IAAI,GAAA,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,GACrB;AACJ,CAAA;AAEO,SAAS,aAAc,CAAA,SAAA,EAAkB,QAAkB,EAAA,IAAA,GAAO,KACzE,EAAA;AAEI,EAAA,MAAM,UAAoB,EAAC,CAAA;AAE3B,EAAA,aAAA,CAAc,UAAU,OAAO,CAAA,CAAA;AAE/B,EAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,QACnB,KAAA;AACI,IAAA,IAAI,SAAS,MACb,EAAA;AACI,MAAc,aAAA,CAAA,QAAA,CAAS,QAAQ,OAAO,CAAA,CAAA;AAAA,KAC1C;AAAA,GACH,CAAA,CAAA;AAGD,EAAA,MAAM,SAAY,GAAA,OAAA,CAAA;AAElB,EAAA,IAAI,IACJ,EAAA;AACI,IAAA,SAAA,CAAU,IAAK,EAAA,CAAA;AAAA,GACnB;AAEA,EAAA,MAAM,WAAc,GAAA,SAAA,CACf,GAAI,CAAA,CAAC,OAAS,EAAA,CAAA,KAAM,CAAoB,iBAAA,EAAA,CAAC,CAAK,EAAA,EAAA,OAAO,CAAG,CAAA,CAAA,CAAA,CACxD,KAAK,IAAI,CAAA,CAAA;AAGd,EAAA,IAAI,aAAgB,GAAA,QAAA,CAAS,OAAQ,CAAA,kBAAA,EAAoB,EAAE,CAAA,CAAA;AAE3D,EAAgB,aAAA,GAAA,aAAA,CAAc,QAAQ,QAAU,EAAA,CAAA;AAAA,EAAK,WAAW,CAAA;AAAA,CAAI,CAAA,CAAA;AAEpE,EAAO,OAAA,aAAA,CAAA;AACX;;;;"}

View File

@@ -0,0 +1 @@
export declare function compileOutputs(fragments: any[], template: string): string;

View File

@@ -0,0 +1,52 @@
'use strict';
"use strict";
function extractOutputs(fragmentSource, out) {
let match;
const regex = /@out\s+([^;]+);/g;
while ((match = regex.exec(fragmentSource)) !== null) {
out.push(match[1]);
}
}
function extractVariableName(value) {
const regex = /\b(\w+)\s*:/g;
const match = regex.exec(value);
return match ? match[1] : "";
}
function stripVariable(value) {
const regex = /@.*?\s+/g;
return value.replace(regex, "");
}
function compileOutputs(fragments, template) {
const results = [];
extractOutputs(template, results);
fragments.forEach((fragment) => {
if (fragment.header) {
extractOutputs(fragment.header, results);
}
});
let index = 0;
const mainStruct = results.sort().map((inValue) => {
if (inValue.indexOf("builtin") > -1) {
return inValue;
}
return `@location(${index++}) ${inValue}`;
}).join(",\n");
const mainStart = results.sort().map((inValue) => ` var ${stripVariable(inValue)};`).join("\n");
const mainEnd = `return VSOutput(
${results.sort().map((inValue) => ` ${extractVariableName(inValue)}`).join(",\n")});`;
let compiledCode = template.replace(/@out\s+[^;]+;\s*/g, "");
compiledCode = compiledCode.replace("{{struct}}", `
${mainStruct}
`);
compiledCode = compiledCode.replace("{{start}}", `
${mainStart}
`);
compiledCode = compiledCode.replace("{{return}}", `
${mainEnd}
`);
return compiledCode;
}
exports.compileOutputs = compileOutputs;
//# sourceMappingURL=compileOutputs.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"compileOutputs.js","sources":["../../../../../src/rendering/high-shader/compiler/utils/compileOutputs.ts"],"sourcesContent":["function extractOutputs(fragmentSource: string, out: string[])\n{\n let match;\n const regex = /@out\\s+([^;]+);/g;\n\n while ((match = regex.exec(fragmentSource)) !== null)\n {\n out.push(match[1]);\n }\n}\n\nfunction extractVariableName(value: string)\n{\n const regex = /\\b(\\w+)\\s*:/g;\n\n const match = regex.exec(value);\n\n return match ? match[1] : '';\n}\n\nfunction stripVariable(value: string)\n{\n const regex = /@.*?\\s+/g;\n\n return value.replace(regex, '');\n}\n\nexport function compileOutputs(fragments: any[], template: string)\n{\n // get all the inputs from the fragments..\n const results: string[] = [];\n\n extractOutputs(template, results);\n\n fragments.forEach((fragment) =>\n {\n if (fragment.header)\n {\n extractOutputs(fragment.header, results);\n }\n });\n\n let index = 0;\n\n // generate the output struct\n const mainStruct = results\n .sort()\n .map((inValue) =>\n {\n if (inValue.indexOf('builtin') > -1)\n {\n return inValue;\n }\n\n return `@location(${index++}) ${inValue}`;\n })\n .join(',\\n');\n\n // generate the variables we will set:\n const mainStart = results\n .sort()\n .map((inValue) => ` var ${stripVariable(inValue)};`)\n .join('\\n');\n\n // generate the return object\n const mainEnd = `return VSOutput(\n ${results\n .sort()\n .map((inValue) => ` ${extractVariableName(inValue)}`)\n .join(',\\n')});`;\n\n // Remove lines from original string\n let compiledCode = template.replace(/@out\\s+[^;]+;\\s*/g, '');\n\n compiledCode = compiledCode.replace('{{struct}}', `\\n${mainStruct}\\n`);\n compiledCode = compiledCode.replace('{{start}}', `\\n${mainStart}\\n`);\n compiledCode = compiledCode.replace('{{return}}', `\\n${mainEnd}\\n`);\n\n return compiledCode;\n}\n"],"names":[],"mappings":";;;AAAA,SAAS,cAAA,CAAe,gBAAwB,GAChD,EAAA;AACI,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,MAAM,KAAQ,GAAA,kBAAA,CAAA;AAEd,EAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAM,IAAK,CAAA,cAAc,OAAO,IAChD,EAAA;AACI,IAAI,GAAA,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,GACrB;AACJ,CAAA;AAEA,SAAS,oBAAoB,KAC7B,EAAA;AACI,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAA;AAEd,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAE9B,EAAO,OAAA,KAAA,GAAQ,KAAM,CAAA,CAAC,CAAI,GAAA,EAAA,CAAA;AAC9B,CAAA;AAEA,SAAS,cAAc,KACvB,EAAA;AACI,EAAA,MAAM,KAAQ,GAAA,UAAA,CAAA;AAEd,EAAO,OAAA,KAAA,CAAM,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAA,CAAA;AAClC,CAAA;AAEgB,SAAA,cAAA,CAAe,WAAkB,QACjD,EAAA;AAEI,EAAA,MAAM,UAAoB,EAAC,CAAA;AAE3B,EAAA,cAAA,CAAe,UAAU,OAAO,CAAA,CAAA;AAEhC,EAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,QACnB,KAAA;AACI,IAAA,IAAI,SAAS,MACb,EAAA;AACI,MAAe,cAAA,CAAA,QAAA,CAAS,QAAQ,OAAO,CAAA,CAAA;AAAA,KAC3C;AAAA,GACH,CAAA,CAAA;AAED,EAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AAGZ,EAAA,MAAM,aAAa,OACd,CAAA,IAAA,EACA,CAAA,GAAA,CAAI,CAAC,OACN,KAAA;AACI,IAAA,IAAI,OAAQ,CAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,CACjC,CAAA,EAAA;AACI,MAAO,OAAA,OAAA,CAAA;AAAA,KACX;AAEA,IAAO,OAAA,CAAA,UAAA,EAAa,KAAO,EAAA,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAA;AAAA,GAC1C,CACA,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAGf,EAAA,MAAM,SAAY,GAAA,OAAA,CACb,IAAK,EAAA,CACL,IAAI,CAAC,OAAA,KAAY,CAAc,WAAA,EAAA,aAAA,CAAc,OAAO,CAAC,CAAG,CAAA,CAAA,CAAA,CACxD,KAAK,IAAI,CAAA,CAAA;AAGd,EAAA,MAAM,OAAU,GAAA,CAAA;AAAA,gBAAA,EACF,OACT,CAAA,IAAA,EACA,CAAA,GAAA,CAAI,CAAC,OAAY,KAAA,CAAA,CAAA,EAAI,mBAAoB,CAAA,OAAO,CAAC,CAAA,CAAE,CACnD,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA,CAAA,CAAA;AAGhB,EAAA,IAAI,YAAe,GAAA,QAAA,CAAS,OAAQ,CAAA,mBAAA,EAAqB,EAAE,CAAA,CAAA;AAE3D,EAAe,YAAA,GAAA,YAAA,CAAa,QAAQ,YAAc,EAAA,CAAA;AAAA,EAAK,UAAU,CAAA;AAAA,CAAI,CAAA,CAAA;AACrE,EAAe,YAAA,GAAA,YAAA,CAAa,QAAQ,WAAa,EAAA,CAAA;AAAA,EAAK,SAAS,CAAA;AAAA,CAAI,CAAA,CAAA;AACnE,EAAe,YAAA,GAAA,YAAA,CAAa,QAAQ,YAAc,EAAA,CAAA;AAAA,EAAK,OAAO,CAAA;AAAA,CAAI,CAAA,CAAA;AAElE,EAAO,OAAA,YAAA,CAAA;AACX;;;;"}

View File

@@ -0,0 +1,50 @@
"use strict";
function extractOutputs(fragmentSource, out) {
let match;
const regex = /@out\s+([^;]+);/g;
while ((match = regex.exec(fragmentSource)) !== null) {
out.push(match[1]);
}
}
function extractVariableName(value) {
const regex = /\b(\w+)\s*:/g;
const match = regex.exec(value);
return match ? match[1] : "";
}
function stripVariable(value) {
const regex = /@.*?\s+/g;
return value.replace(regex, "");
}
function compileOutputs(fragments, template) {
const results = [];
extractOutputs(template, results);
fragments.forEach((fragment) => {
if (fragment.header) {
extractOutputs(fragment.header, results);
}
});
let index = 0;
const mainStruct = results.sort().map((inValue) => {
if (inValue.indexOf("builtin") > -1) {
return inValue;
}
return `@location(${index++}) ${inValue}`;
}).join(",\n");
const mainStart = results.sort().map((inValue) => ` var ${stripVariable(inValue)};`).join("\n");
const mainEnd = `return VSOutput(
${results.sort().map((inValue) => ` ${extractVariableName(inValue)}`).join(",\n")});`;
let compiledCode = template.replace(/@out\s+[^;]+;\s*/g, "");
compiledCode = compiledCode.replace("{{struct}}", `
${mainStruct}
`);
compiledCode = compiledCode.replace("{{start}}", `
${mainStart}
`);
compiledCode = compiledCode.replace("{{return}}", `
${mainEnd}
`);
return compiledCode;
}
export { compileOutputs };
//# sourceMappingURL=compileOutputs.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"compileOutputs.mjs","sources":["../../../../../src/rendering/high-shader/compiler/utils/compileOutputs.ts"],"sourcesContent":["function extractOutputs(fragmentSource: string, out: string[])\n{\n let match;\n const regex = /@out\\s+([^;]+);/g;\n\n while ((match = regex.exec(fragmentSource)) !== null)\n {\n out.push(match[1]);\n }\n}\n\nfunction extractVariableName(value: string)\n{\n const regex = /\\b(\\w+)\\s*:/g;\n\n const match = regex.exec(value);\n\n return match ? match[1] : '';\n}\n\nfunction stripVariable(value: string)\n{\n const regex = /@.*?\\s+/g;\n\n return value.replace(regex, '');\n}\n\nexport function compileOutputs(fragments: any[], template: string)\n{\n // get all the inputs from the fragments..\n const results: string[] = [];\n\n extractOutputs(template, results);\n\n fragments.forEach((fragment) =>\n {\n if (fragment.header)\n {\n extractOutputs(fragment.header, results);\n }\n });\n\n let index = 0;\n\n // generate the output struct\n const mainStruct = results\n .sort()\n .map((inValue) =>\n {\n if (inValue.indexOf('builtin') > -1)\n {\n return inValue;\n }\n\n return `@location(${index++}) ${inValue}`;\n })\n .join(',\\n');\n\n // generate the variables we will set:\n const mainStart = results\n .sort()\n .map((inValue) => ` var ${stripVariable(inValue)};`)\n .join('\\n');\n\n // generate the return object\n const mainEnd = `return VSOutput(\n ${results\n .sort()\n .map((inValue) => ` ${extractVariableName(inValue)}`)\n .join(',\\n')});`;\n\n // Remove lines from original string\n let compiledCode = template.replace(/@out\\s+[^;]+;\\s*/g, '');\n\n compiledCode = compiledCode.replace('{{struct}}', `\\n${mainStruct}\\n`);\n compiledCode = compiledCode.replace('{{start}}', `\\n${mainStart}\\n`);\n compiledCode = compiledCode.replace('{{return}}', `\\n${mainEnd}\\n`);\n\n return compiledCode;\n}\n"],"names":[],"mappings":";AAAA,SAAS,cAAA,CAAe,gBAAwB,GAChD,EAAA;AACI,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,MAAM,KAAQ,GAAA,kBAAA,CAAA;AAEd,EAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAM,IAAK,CAAA,cAAc,OAAO,IAChD,EAAA;AACI,IAAI,GAAA,CAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,GACrB;AACJ,CAAA;AAEA,SAAS,oBAAoB,KAC7B,EAAA;AACI,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAA;AAEd,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAE9B,EAAO,OAAA,KAAA,GAAQ,KAAM,CAAA,CAAC,CAAI,GAAA,EAAA,CAAA;AAC9B,CAAA;AAEA,SAAS,cAAc,KACvB,EAAA;AACI,EAAA,MAAM,KAAQ,GAAA,UAAA,CAAA;AAEd,EAAO,OAAA,KAAA,CAAM,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAA,CAAA;AAClC,CAAA;AAEgB,SAAA,cAAA,CAAe,WAAkB,QACjD,EAAA;AAEI,EAAA,MAAM,UAAoB,EAAC,CAAA;AAE3B,EAAA,cAAA,CAAe,UAAU,OAAO,CAAA,CAAA;AAEhC,EAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,QACnB,KAAA;AACI,IAAA,IAAI,SAAS,MACb,EAAA;AACI,MAAe,cAAA,CAAA,QAAA,CAAS,QAAQ,OAAO,CAAA,CAAA;AAAA,KAC3C;AAAA,GACH,CAAA,CAAA;AAED,EAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AAGZ,EAAA,MAAM,aAAa,OACd,CAAA,IAAA,EACA,CAAA,GAAA,CAAI,CAAC,OACN,KAAA;AACI,IAAA,IAAI,OAAQ,CAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,CACjC,CAAA,EAAA;AACI,MAAO,OAAA,OAAA,CAAA;AAAA,KACX;AAEA,IAAO,OAAA,CAAA,UAAA,EAAa,KAAO,EAAA,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAA;AAAA,GAC1C,CACA,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAGf,EAAA,MAAM,SAAY,GAAA,OAAA,CACb,IAAK,EAAA,CACL,IAAI,CAAC,OAAA,KAAY,CAAc,WAAA,EAAA,aAAA,CAAc,OAAO,CAAC,CAAG,CAAA,CAAA,CAAA,CACxD,KAAK,IAAI,CAAA,CAAA;AAGd,EAAA,MAAM,OAAU,GAAA,CAAA;AAAA,gBAAA,EACF,OACT,CAAA,IAAA,EACA,CAAA,GAAA,CAAI,CAAC,OAAY,KAAA,CAAA,CAAA,EAAI,mBAAoB,CAAA,OAAO,CAAC,CAAA,CAAE,CACnD,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA,CAAA,CAAA;AAGhB,EAAA,IAAI,YAAe,GAAA,QAAA,CAAS,OAAQ,CAAA,mBAAA,EAAqB,EAAE,CAAA,CAAA;AAE3D,EAAe,YAAA,GAAA,YAAA,CAAa,QAAQ,YAAc,EAAA,CAAA;AAAA,EAAK,UAAU,CAAA;AAAA,CAAI,CAAA,CAAA;AACrE,EAAe,YAAA,GAAA,YAAA,CAAa,QAAQ,WAAa,EAAA,CAAA;AAAA,EAAK,SAAS,CAAA;AAAA,CAAI,CAAA,CAAA;AACnE,EAAe,YAAA,GAAA,YAAA,CAAa,QAAQ,YAAc,EAAA,CAAA;AAAA,EAAK,OAAO,CAAA;AAAA,CAAI,CAAA,CAAA;AAElE,EAAO,OAAA,YAAA,CAAA;AACX;;;;"}

View File

@@ -0,0 +1,5 @@
/**
* formats a shader so its more pleasant to read!
* @param shader - a glsl shader program source
*/
export declare function formatShader(shader: string): string;

View File

@@ -0,0 +1,21 @@
'use strict';
"use strict";
function formatShader(shader) {
const spl = shader.split(/([\n{}])/g).map((a) => a.trim()).filter((a) => a.length);
let indent = "";
const formatted = spl.map((a) => {
let indentedLine = indent + a;
if (a === "{") {
indent += " ";
} else if (a === "}") {
indent = indent.substr(0, indent.length - 4);
indentedLine = indent + a;
}
return indentedLine;
}).join("\n");
return formatted;
}
exports.formatShader = formatShader;
//# sourceMappingURL=formatShader.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"formatShader.js","sources":["../../../../../src/rendering/high-shader/compiler/utils/formatShader.ts"],"sourcesContent":["/**\n * formats a shader so its more pleasant to read!\n * @param shader - a glsl shader program source\n */\nexport function formatShader(shader: string): string\n{\n const spl = shader.split(/([\\n{}])/g)\n .map((a) => a.trim())\n .filter((a) => a.length);\n\n let indent = '';\n\n const formatted = spl.map((a) =>\n {\n let indentedLine = indent + a;\n\n if (a === '{')\n {\n indent += ' ';\n }\n else if (a === '}')\n {\n indent = indent.substr(0, indent.length - 4);\n\n indentedLine = indent + a;\n }\n\n return indentedLine;\n }).join('\\n');\n\n return formatted;\n}\n\n"],"names":[],"mappings":";;;AAIO,SAAS,aAAa,MAC7B,EAAA;AACI,EAAA,MAAM,MAAM,MAAO,CAAA,KAAA,CAAM,WAAW,CAAA,CAC/B,IAAI,CAAC,CAAA,KAAM,CAAE,CAAA,IAAA,EAAM,CACnB,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA,CAAA;AAE3B,EAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AAEb,EAAA,MAAM,SAAY,GAAA,GAAA,CAAI,GAAI,CAAA,CAAC,CAC3B,KAAA;AACI,IAAA,IAAI,eAAe,MAAS,GAAA,CAAA,CAAA;AAE5B,IAAA,IAAI,MAAM,GACV,EAAA;AACI,MAAU,MAAA,IAAA,MAAA,CAAA;AAAA,KACd,MAAA,IACS,MAAM,GACf,EAAA;AACI,MAAA,MAAA,GAAS,MAAO,CAAA,MAAA,CAAO,CAAG,EAAA,MAAA,CAAO,SAAS,CAAC,CAAA,CAAA;AAE3C,MAAA,YAAA,GAAe,MAAS,GAAA,CAAA,CAAA;AAAA,KAC5B;AAEA,IAAO,OAAA,YAAA,CAAA;AAAA,GACV,CAAE,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAEZ,EAAO,OAAA,SAAA,CAAA;AACX;;;;"}

View File

@@ -0,0 +1,19 @@
"use strict";
function formatShader(shader) {
const spl = shader.split(/([\n{}])/g).map((a) => a.trim()).filter((a) => a.length);
let indent = "";
const formatted = spl.map((a) => {
let indentedLine = indent + a;
if (a === "{") {
indent += " ";
} else if (a === "}") {
indent = indent.substr(0, indent.length - 4);
indentedLine = indent + a;
}
return indentedLine;
}).join("\n");
return formatted;
}
export { formatShader };
//# sourceMappingURL=formatShader.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"formatShader.mjs","sources":["../../../../../src/rendering/high-shader/compiler/utils/formatShader.ts"],"sourcesContent":["/**\n * formats a shader so its more pleasant to read!\n * @param shader - a glsl shader program source\n */\nexport function formatShader(shader: string): string\n{\n const spl = shader.split(/([\\n{}])/g)\n .map((a) => a.trim())\n .filter((a) => a.length);\n\n let indent = '';\n\n const formatted = spl.map((a) =>\n {\n let indentedLine = indent + a;\n\n if (a === '{')\n {\n indent += ' ';\n }\n else if (a === '}')\n {\n indent = indent.substr(0, indent.length - 4);\n\n indentedLine = indent + a;\n }\n\n return indentedLine;\n }).join('\\n');\n\n return formatted;\n}\n\n"],"names":[],"mappings":";AAIO,SAAS,aAAa,MAC7B,EAAA;AACI,EAAA,MAAM,MAAM,MAAO,CAAA,KAAA,CAAM,WAAW,CAAA,CAC/B,IAAI,CAAC,CAAA,KAAM,CAAE,CAAA,IAAA,EAAM,CACnB,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA,CAAA;AAE3B,EAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AAEb,EAAA,MAAM,SAAY,GAAA,GAAA,CAAI,GAAI,CAAA,CAAC,CAC3B,KAAA;AACI,IAAA,IAAI,eAAe,MAAS,GAAA,CAAA,CAAA;AAE5B,IAAA,IAAI,MAAM,GACV,EAAA;AACI,MAAU,MAAA,IAAA,MAAA,CAAA;AAAA,KACd,MAAA,IACS,MAAM,GACf,EAAA;AACI,MAAA,MAAA,GAAS,MAAO,CAAA,MAAA,CAAO,CAAG,EAAA,MAAA,CAAO,SAAS,CAAC,CAAA,CAAA;AAE3C,MAAA,YAAA,GAAe,MAAS,GAAA,CAAA,CAAA;AAAA,KAC5B;AAEA,IAAO,OAAA,YAAA,CAAA;AAAA,GACV,CAAE,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAEZ,EAAO,OAAA,SAAA,CAAA;AACX;;;;"}

View File

@@ -0,0 +1,6 @@
/**
* takes a shader src and replaces any hooks with the HighFragment code.
* @param templateSrc - the program src template
* @param fragmentParts - the fragments to inject
*/
export declare function injectBits(templateSrc: string, fragmentParts: Record<string, string[]>): string;

View File

@@ -0,0 +1,21 @@
'use strict';
"use strict";
function injectBits(templateSrc, fragmentParts) {
let out = templateSrc;
for (const i in fragmentParts) {
const parts = fragmentParts[i];
const toInject = parts.join("\n");
if (toInject.length) {
out = out.replace(`{{${i}}}`, `//-----${i} START-----//
${parts.join("\n")}
//----${i} FINISH----//`);
} else {
out = out.replace(`{{${i}}}`, "");
}
}
return out;
}
exports.injectBits = injectBits;
//# sourceMappingURL=injectBits.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"injectBits.js","sources":["../../../../../src/rendering/high-shader/compiler/utils/injectBits.ts"],"sourcesContent":["/**\n * takes a shader src and replaces any hooks with the HighFragment code.\n * @param templateSrc - the program src template\n * @param fragmentParts - the fragments to inject\n */\nexport function injectBits(templateSrc: string, fragmentParts: Record<string, string[]>): string\n{\n let out = templateSrc;\n\n for (const i in fragmentParts)\n {\n const parts = fragmentParts[i];\n\n const toInject = parts.join('\\n');\n\n if (toInject.length)\n {\n out = out.replace(`{{${i}}}`, `//-----${i} START-----//\\n${parts.join('\\n')}\\n//----${i} FINISH----//`);\n }\n\n else\n {\n out = out.replace(`{{${i}}}`, '');\n }\n }\n\n return out;\n}\n"],"names":[],"mappings":";;;AAKgB,SAAA,UAAA,CAAW,aAAqB,aAChD,EAAA;AACI,EAAA,IAAI,GAAM,GAAA,WAAA,CAAA;AAEV,EAAA,KAAA,MAAW,KAAK,aAChB,EAAA;AACI,IAAM,MAAA,KAAA,GAAQ,cAAc,CAAC,CAAA,CAAA;AAE7B,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAEhC,IAAA,IAAI,SAAS,MACb,EAAA;AACI,MAAA,GAAA,GAAM,IAAI,OAAQ,CAAA,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,CAAA,EAAM,UAAU,CAAC,CAAA;AAAA,EAAkB,KAAA,CAAM,IAAK,CAAA,IAAI,CAAC,CAAA;AAAA,MAAA,EAAW,CAAC,CAAe,aAAA,CAAA,CAAA,CAAA;AAAA,KAI1G,MAAA;AACI,MAAA,GAAA,GAAM,GAAI,CAAA,OAAA,CAAQ,CAAK,EAAA,EAAA,CAAC,MAAM,EAAE,CAAA,CAAA;AAAA,KACpC;AAAA,GACJ;AAEA,EAAO,OAAA,GAAA,CAAA;AACX;;;;"}

View File

@@ -0,0 +1,19 @@
"use strict";
function injectBits(templateSrc, fragmentParts) {
let out = templateSrc;
for (const i in fragmentParts) {
const parts = fragmentParts[i];
const toInject = parts.join("\n");
if (toInject.length) {
out = out.replace(`{{${i}}}`, `//-----${i} START-----//
${parts.join("\n")}
//----${i} FINISH----//`);
} else {
out = out.replace(`{{${i}}}`, "");
}
}
return out;
}
export { injectBits };
//# sourceMappingURL=injectBits.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"injectBits.mjs","sources":["../../../../../src/rendering/high-shader/compiler/utils/injectBits.ts"],"sourcesContent":["/**\n * takes a shader src and replaces any hooks with the HighFragment code.\n * @param templateSrc - the program src template\n * @param fragmentParts - the fragments to inject\n */\nexport function injectBits(templateSrc: string, fragmentParts: Record<string, string[]>): string\n{\n let out = templateSrc;\n\n for (const i in fragmentParts)\n {\n const parts = fragmentParts[i];\n\n const toInject = parts.join('\\n');\n\n if (toInject.length)\n {\n out = out.replace(`{{${i}}}`, `//-----${i} START-----//\\n${parts.join('\\n')}\\n//----${i} FINISH----//`);\n }\n\n else\n {\n out = out.replace(`{{${i}}}`, '');\n }\n }\n\n return out;\n}\n"],"names":[],"mappings":";AAKgB,SAAA,UAAA,CAAW,aAAqB,aAChD,EAAA;AACI,EAAA,IAAI,GAAM,GAAA,WAAA,CAAA;AAEV,EAAA,KAAA,MAAW,KAAK,aAChB,EAAA;AACI,IAAM,MAAA,KAAA,GAAQ,cAAc,CAAC,CAAA,CAAA;AAE7B,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAEhC,IAAA,IAAI,SAAS,MACb,EAAA;AACI,MAAA,GAAA,GAAM,IAAI,OAAQ,CAAA,CAAA,EAAA,EAAK,CAAC,CAAA,EAAA,CAAA,EAAM,UAAU,CAAC,CAAA;AAAA,EAAkB,KAAA,CAAM,IAAK,CAAA,IAAI,CAAC,CAAA;AAAA,MAAA,EAAW,CAAC,CAAe,aAAA,CAAA,CAAA,CAAA;AAAA,KAI1G,MAAA;AACI,MAAA,GAAA,GAAM,GAAI,CAAA,OAAA,CAAQ,CAAK,EAAA,EAAA,CAAC,MAAM,EAAE,CAAA,CAAA;AAAA,KACpC;AAAA,GACJ;AAEA,EAAO,OAAA,GAAA,CAAA;AACX;;;;"}

View File

@@ -0,0 +1,5 @@
declare const vertexGPUTemplate = "\n @in aPosition: vec2<f32>;\n @in aUV: vec2<f32>;\n\n @out @builtin(position) vPosition: vec4<f32>;\n @out vUV : vec2<f32>;\n @out vColor : vec4<f32>;\n\n {{header}}\n\n struct VSOutput {\n {{struct}}\n };\n\n @vertex\n fn main( {{in}} ) -> VSOutput {\n\n var worldTransformMatrix = globalUniforms.uWorldTransformMatrix;\n var modelMatrix = mat3x3<f32>(\n 1.0, 0.0, 0.0,\n 0.0, 1.0, 0.0,\n 0.0, 0.0, 1.0\n );\n var position = aPosition;\n var uv = aUV;\n\n {{start}}\n \n vColor = vec4<f32>(1., 1., 1., 1.);\n\n {{main}}\n\n vUV = uv;\n\n var modelViewProjectionMatrix = globalUniforms.uProjectionMatrix * worldTransformMatrix * modelMatrix;\n\n vPosition = vec4<f32>((modelViewProjectionMatrix * vec3<f32>(position, 1.0)).xy, 0.0, 1.0);\n \n vColor *= globalUniforms.uWorldColorAlpha;\n\n {{end}}\n\n {{return}}\n };\n";
declare const fragmentGPUTemplate = "\n @in vUV : vec2<f32>;\n @in vColor : vec4<f32>;\n \n {{header}}\n\n @fragment\n fn main(\n {{in}}\n ) -> @location(0) vec4<f32> {\n \n {{start}}\n\n var outColor:vec4<f32>;\n \n {{main}}\n \n var finalColor:vec4<f32> = outColor * vColor;\n\n {{end}}\n\n return finalColor;\n };\n";
declare const vertexGlTemplate = "\n in vec2 aPosition;\n in vec2 aUV;\n\n out vec4 vColor;\n out vec2 vUV;\n\n {{header}}\n\n void main(void){\n\n mat3 worldTransformMatrix = uWorldTransformMatrix;\n mat3 modelMatrix = mat3(\n 1.0, 0.0, 0.0,\n 0.0, 1.0, 0.0,\n 0.0, 0.0, 1.0\n );\n vec2 position = aPosition;\n vec2 uv = aUV;\n \n {{start}}\n \n vColor = vec4(1.);\n \n {{main}}\n \n vUV = uv;\n \n mat3 modelViewProjectionMatrix = uProjectionMatrix * worldTransformMatrix * modelMatrix;\n\n gl_Position = vec4((modelViewProjectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n\n vColor *= uWorldColorAlpha;\n\n {{end}}\n }\n";
declare const fragmentGlTemplate = "\n \n in vec4 vColor;\n in vec2 vUV;\n\n out vec4 finalColor;\n\n {{header}}\n\n void main(void) {\n \n {{start}}\n\n vec4 outColor;\n \n {{main}}\n \n finalColor = outColor * vColor;\n \n {{end}}\n }\n";
export { fragmentGlTemplate, fragmentGPUTemplate, vertexGlTemplate, vertexGPUTemplate };

View File

@@ -0,0 +1,149 @@
'use strict';
"use strict";
const vertexGPUTemplate = (
/* wgsl */
`
@in aPosition: vec2<f32>;
@in aUV: vec2<f32>;
@out @builtin(position) vPosition: vec4<f32>;
@out vUV : vec2<f32>;
@out vColor : vec4<f32>;
{{header}}
struct VSOutput {
{{struct}}
};
@vertex
fn main( {{in}} ) -> VSOutput {
var worldTransformMatrix = globalUniforms.uWorldTransformMatrix;
var modelMatrix = mat3x3<f32>(
1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 1.0
);
var position = aPosition;
var uv = aUV;
{{start}}
vColor = vec4<f32>(1., 1., 1., 1.);
{{main}}
vUV = uv;
var modelViewProjectionMatrix = globalUniforms.uProjectionMatrix * worldTransformMatrix * modelMatrix;
vPosition = vec4<f32>((modelViewProjectionMatrix * vec3<f32>(position, 1.0)).xy, 0.0, 1.0);
vColor *= globalUniforms.uWorldColorAlpha;
{{end}}
{{return}}
};
`
);
const fragmentGPUTemplate = (
/* wgsl */
`
@in vUV : vec2<f32>;
@in vColor : vec4<f32>;
{{header}}
@fragment
fn main(
{{in}}
) -> @location(0) vec4<f32> {
{{start}}
var outColor:vec4<f32>;
{{main}}
var finalColor:vec4<f32> = outColor * vColor;
{{end}}
return finalColor;
};
`
);
const vertexGlTemplate = (
/* glsl */
`
in vec2 aPosition;
in vec2 aUV;
out vec4 vColor;
out vec2 vUV;
{{header}}
void main(void){
mat3 worldTransformMatrix = uWorldTransformMatrix;
mat3 modelMatrix = mat3(
1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 1.0
);
vec2 position = aPosition;
vec2 uv = aUV;
{{start}}
vColor = vec4(1.);
{{main}}
vUV = uv;
mat3 modelViewProjectionMatrix = uProjectionMatrix * worldTransformMatrix * modelMatrix;
gl_Position = vec4((modelViewProjectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);
vColor *= uWorldColorAlpha;
{{end}}
}
`
);
const fragmentGlTemplate = (
/* glsl */
`
in vec4 vColor;
in vec2 vUV;
out vec4 finalColor;
{{header}}
void main(void) {
{{start}}
vec4 outColor;
{{main}}
finalColor = outColor * vColor;
{{end}}
}
`
);
exports.fragmentGPUTemplate = fragmentGPUTemplate;
exports.fragmentGlTemplate = fragmentGlTemplate;
exports.vertexGPUTemplate = vertexGPUTemplate;
exports.vertexGlTemplate = vertexGlTemplate;
//# sourceMappingURL=defaultProgramTemplate.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"defaultProgramTemplate.js","sources":["../../../src/rendering/high-shader/defaultProgramTemplate.ts"],"sourcesContent":["const vertexGPUTemplate = /* wgsl */`\n @in aPosition: vec2<f32>;\n @in aUV: vec2<f32>;\n\n @out @builtin(position) vPosition: vec4<f32>;\n @out vUV : vec2<f32>;\n @out vColor : vec4<f32>;\n\n {{header}}\n\n struct VSOutput {\n {{struct}}\n };\n\n @vertex\n fn main( {{in}} ) -> VSOutput {\n\n var worldTransformMatrix = globalUniforms.uWorldTransformMatrix;\n var modelMatrix = mat3x3<f32>(\n 1.0, 0.0, 0.0,\n 0.0, 1.0, 0.0,\n 0.0, 0.0, 1.0\n );\n var position = aPosition;\n var uv = aUV;\n\n {{start}}\n \n vColor = vec4<f32>(1., 1., 1., 1.);\n\n {{main}}\n\n vUV = uv;\n\n var modelViewProjectionMatrix = globalUniforms.uProjectionMatrix * worldTransformMatrix * modelMatrix;\n\n vPosition = vec4<f32>((modelViewProjectionMatrix * vec3<f32>(position, 1.0)).xy, 0.0, 1.0);\n \n vColor *= globalUniforms.uWorldColorAlpha;\n\n {{end}}\n\n {{return}}\n };\n`;\n\nconst fragmentGPUTemplate = /* wgsl */`\n @in vUV : vec2<f32>;\n @in vColor : vec4<f32>;\n \n {{header}}\n\n @fragment\n fn main(\n {{in}}\n ) -> @location(0) vec4<f32> {\n \n {{start}}\n\n var outColor:vec4<f32>;\n \n {{main}}\n \n var finalColor:vec4<f32> = outColor * vColor;\n\n {{end}}\n\n return finalColor;\n };\n`;\n\nconst vertexGlTemplate = /* glsl */`\n in vec2 aPosition;\n in vec2 aUV;\n\n out vec4 vColor;\n out vec2 vUV;\n\n {{header}}\n\n void main(void){\n\n mat3 worldTransformMatrix = uWorldTransformMatrix;\n mat3 modelMatrix = mat3(\n 1.0, 0.0, 0.0,\n 0.0, 1.0, 0.0,\n 0.0, 0.0, 1.0\n );\n vec2 position = aPosition;\n vec2 uv = aUV;\n \n {{start}}\n \n vColor = vec4(1.);\n \n {{main}}\n \n vUV = uv;\n \n mat3 modelViewProjectionMatrix = uProjectionMatrix * worldTransformMatrix * modelMatrix;\n\n gl_Position = vec4((modelViewProjectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n\n vColor *= uWorldColorAlpha;\n\n {{end}}\n }\n`;\n\nconst fragmentGlTemplate = /* glsl */`\n \n in vec4 vColor;\n in vec2 vUV;\n\n out vec4 finalColor;\n\n {{header}}\n\n void main(void) {\n \n {{start}}\n\n vec4 outColor;\n \n {{main}}\n \n finalColor = outColor * vColor;\n \n {{end}}\n }\n`;\n\nexport {\n fragmentGlTemplate,\n fragmentGPUTemplate,\n vertexGlTemplate,\n vertexGPUTemplate\n};\n"],"names":[],"mappings":";;;AAAM,MAAA,iBAAA;AAAA;AAAA,EAA8B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAAA;AA8C9B,MAAA,mBAAA;AAAA;AAAA,EAAgC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAAA;AAyBhC,MAAA,gBAAA;AAAA;AAAA,EAA6B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAAA;AAsC7B,MAAA,kBAAA;AAAA;AAAA,EAA+B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA;;;;;;;"}

View File

@@ -0,0 +1,144 @@
"use strict";
const vertexGPUTemplate = (
/* wgsl */
`
@in aPosition: vec2<f32>;
@in aUV: vec2<f32>;
@out @builtin(position) vPosition: vec4<f32>;
@out vUV : vec2<f32>;
@out vColor : vec4<f32>;
{{header}}
struct VSOutput {
{{struct}}
};
@vertex
fn main( {{in}} ) -> VSOutput {
var worldTransformMatrix = globalUniforms.uWorldTransformMatrix;
var modelMatrix = mat3x3<f32>(
1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 1.0
);
var position = aPosition;
var uv = aUV;
{{start}}
vColor = vec4<f32>(1., 1., 1., 1.);
{{main}}
vUV = uv;
var modelViewProjectionMatrix = globalUniforms.uProjectionMatrix * worldTransformMatrix * modelMatrix;
vPosition = vec4<f32>((modelViewProjectionMatrix * vec3<f32>(position, 1.0)).xy, 0.0, 1.0);
vColor *= globalUniforms.uWorldColorAlpha;
{{end}}
{{return}}
};
`
);
const fragmentGPUTemplate = (
/* wgsl */
`
@in vUV : vec2<f32>;
@in vColor : vec4<f32>;
{{header}}
@fragment
fn main(
{{in}}
) -> @location(0) vec4<f32> {
{{start}}
var outColor:vec4<f32>;
{{main}}
var finalColor:vec4<f32> = outColor * vColor;
{{end}}
return finalColor;
};
`
);
const vertexGlTemplate = (
/* glsl */
`
in vec2 aPosition;
in vec2 aUV;
out vec4 vColor;
out vec2 vUV;
{{header}}
void main(void){
mat3 worldTransformMatrix = uWorldTransformMatrix;
mat3 modelMatrix = mat3(
1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 1.0
);
vec2 position = aPosition;
vec2 uv = aUV;
{{start}}
vColor = vec4(1.);
{{main}}
vUV = uv;
mat3 modelViewProjectionMatrix = uProjectionMatrix * worldTransformMatrix * modelMatrix;
gl_Position = vec4((modelViewProjectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);
vColor *= uWorldColorAlpha;
{{end}}
}
`
);
const fragmentGlTemplate = (
/* glsl */
`
in vec4 vColor;
in vec2 vUV;
out vec4 finalColor;
{{header}}
void main(void) {
{{start}}
vec4 outColor;
{{main}}
finalColor = outColor * vColor;
{{end}}
}
`
);
export { fragmentGPUTemplate, fragmentGlTemplate, vertexGPUTemplate, vertexGlTemplate };
//# sourceMappingURL=defaultProgramTemplate.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"defaultProgramTemplate.mjs","sources":["../../../src/rendering/high-shader/defaultProgramTemplate.ts"],"sourcesContent":["const vertexGPUTemplate = /* wgsl */`\n @in aPosition: vec2<f32>;\n @in aUV: vec2<f32>;\n\n @out @builtin(position) vPosition: vec4<f32>;\n @out vUV : vec2<f32>;\n @out vColor : vec4<f32>;\n\n {{header}}\n\n struct VSOutput {\n {{struct}}\n };\n\n @vertex\n fn main( {{in}} ) -> VSOutput {\n\n var worldTransformMatrix = globalUniforms.uWorldTransformMatrix;\n var modelMatrix = mat3x3<f32>(\n 1.0, 0.0, 0.0,\n 0.0, 1.0, 0.0,\n 0.0, 0.0, 1.0\n );\n var position = aPosition;\n var uv = aUV;\n\n {{start}}\n \n vColor = vec4<f32>(1., 1., 1., 1.);\n\n {{main}}\n\n vUV = uv;\n\n var modelViewProjectionMatrix = globalUniforms.uProjectionMatrix * worldTransformMatrix * modelMatrix;\n\n vPosition = vec4<f32>((modelViewProjectionMatrix * vec3<f32>(position, 1.0)).xy, 0.0, 1.0);\n \n vColor *= globalUniforms.uWorldColorAlpha;\n\n {{end}}\n\n {{return}}\n };\n`;\n\nconst fragmentGPUTemplate = /* wgsl */`\n @in vUV : vec2<f32>;\n @in vColor : vec4<f32>;\n \n {{header}}\n\n @fragment\n fn main(\n {{in}}\n ) -> @location(0) vec4<f32> {\n \n {{start}}\n\n var outColor:vec4<f32>;\n \n {{main}}\n \n var finalColor:vec4<f32> = outColor * vColor;\n\n {{end}}\n\n return finalColor;\n };\n`;\n\nconst vertexGlTemplate = /* glsl */`\n in vec2 aPosition;\n in vec2 aUV;\n\n out vec4 vColor;\n out vec2 vUV;\n\n {{header}}\n\n void main(void){\n\n mat3 worldTransformMatrix = uWorldTransformMatrix;\n mat3 modelMatrix = mat3(\n 1.0, 0.0, 0.0,\n 0.0, 1.0, 0.0,\n 0.0, 0.0, 1.0\n );\n vec2 position = aPosition;\n vec2 uv = aUV;\n \n {{start}}\n \n vColor = vec4(1.);\n \n {{main}}\n \n vUV = uv;\n \n mat3 modelViewProjectionMatrix = uProjectionMatrix * worldTransformMatrix * modelMatrix;\n\n gl_Position = vec4((modelViewProjectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n\n vColor *= uWorldColorAlpha;\n\n {{end}}\n }\n`;\n\nconst fragmentGlTemplate = /* glsl */`\n \n in vec4 vColor;\n in vec2 vUV;\n\n out vec4 finalColor;\n\n {{header}}\n\n void main(void) {\n \n {{start}}\n\n vec4 outColor;\n \n {{main}}\n \n finalColor = outColor * vColor;\n \n {{end}}\n }\n`;\n\nexport {\n fragmentGlTemplate,\n fragmentGPUTemplate,\n vertexGlTemplate,\n vertexGPUTemplate\n};\n"],"names":[],"mappings":";AAAM,MAAA,iBAAA;AAAA;AAAA,EAA8B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAAA;AA8C9B,MAAA,mBAAA;AAAA;AAAA,EAAgC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAAA;AAyBhC,MAAA,gBAAA;AAAA;AAAA,EAA6B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAAA;AAsC7B,MAAA,kBAAA;AAAA;AAAA,EAA+B,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA;;;;"}

View File

@@ -0,0 +1,14 @@
export declare const colorBit: {
name: string;
vertex: {
header: string;
main: string;
};
};
export declare const colorBitGl: {
name: string;
vertex: {
header: string;
main: string;
};
};

View File

@@ -0,0 +1,41 @@
'use strict';
"use strict";
const colorBit = {
name: "color-bit",
vertex: {
header: (
/* wgsl */
`
@in aColor: vec4<f32>;
`
),
main: (
/* wgsl */
`
vColor *= vec4<f32>(aColor.rgb * aColor.a, aColor.a);
`
)
}
};
const colorBitGl = {
name: "color-bit",
vertex: {
header: (
/* glsl */
`
in vec4 aColor;
`
),
main: (
/* glsl */
`
vColor *= vec4(aColor.rgb * aColor.a, aColor.a);
`
)
}
};
exports.colorBit = colorBit;
exports.colorBitGl = colorBitGl;
//# sourceMappingURL=colorBit.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"colorBit.js","sources":["../../../../src/rendering/high-shader/shader-bits/colorBit.ts"],"sourcesContent":["export const colorBit = {\n name: 'color-bit',\n vertex: {\n header: /* wgsl */`\n @in aColor: vec4<f32>;\n `,\n main: /* wgsl */`\n vColor *= vec4<f32>(aColor.rgb * aColor.a, aColor.a);\n `\n }\n};\n\nexport const colorBitGl = {\n name: 'color-bit',\n vertex: {\n header: /* glsl */`\n in vec4 aColor;\n `,\n main: /* glsl */`\n vColor *= vec4(aColor.rgb * aColor.a, aColor.a);\n `\n }\n};\n"],"names":[],"mappings":";;;AAAO,MAAM,QAAW,GAAA;AAAA,EACpB,IAAM,EAAA,WAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAGlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AACJ,EAAA;AAEO,MAAM,UAAa,GAAA;AAAA,EACtB,IAAM,EAAA,WAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAGlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AACJ;;;;;"}

View File

@@ -0,0 +1,38 @@
"use strict";
const colorBit = {
name: "color-bit",
vertex: {
header: (
/* wgsl */
`
@in aColor: vec4<f32>;
`
),
main: (
/* wgsl */
`
vColor *= vec4<f32>(aColor.rgb * aColor.a, aColor.a);
`
)
}
};
const colorBitGl = {
name: "color-bit",
vertex: {
header: (
/* glsl */
`
in vec4 aColor;
`
),
main: (
/* glsl */
`
vColor *= vec4(aColor.rgb * aColor.a, aColor.a);
`
)
}
};
export { colorBit, colorBitGl };
//# sourceMappingURL=colorBit.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"colorBit.mjs","sources":["../../../../src/rendering/high-shader/shader-bits/colorBit.ts"],"sourcesContent":["export const colorBit = {\n name: 'color-bit',\n vertex: {\n header: /* wgsl */`\n @in aColor: vec4<f32>;\n `,\n main: /* wgsl */`\n vColor *= vec4<f32>(aColor.rgb * aColor.a, aColor.a);\n `\n }\n};\n\nexport const colorBitGl = {\n name: 'color-bit',\n vertex: {\n header: /* glsl */`\n in vec4 aColor;\n `,\n main: /* glsl */`\n vColor *= vec4(aColor.rgb * aColor.a, aColor.a);\n `\n }\n};\n"],"names":[],"mappings":";AAAO,MAAM,QAAW,GAAA;AAAA,EACpB,IAAM,EAAA,WAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAGlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AACJ,EAAA;AAEO,MAAM,UAAa,GAAA;AAAA,EACtB,IAAM,EAAA,WAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAGlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AACJ;;;;"}

View File

@@ -0,0 +1,3 @@
import type { HighShaderBit } from '../compiler/types';
export declare function generateTextureBatchBit(maxTextures: number): HighShaderBit;
export declare function generateTextureBatchBitGl(maxTextures: number): HighShaderBit;

View File

@@ -0,0 +1,129 @@
'use strict';
"use strict";
const textureBatchBitGpuCache = {};
function generateBindingSrc(maxTextures) {
const src = [];
if (maxTextures === 1) {
src.push("@group(1) @binding(0) var textureSource1: texture_2d<f32>;");
src.push("@group(1) @binding(1) var textureSampler1: sampler;");
} else {
let bindingIndex = 0;
for (let i = 0; i < maxTextures; i++) {
src.push(`@group(1) @binding(${bindingIndex++}) var textureSource${i + 1}: texture_2d<f32>;`);
src.push(`@group(1) @binding(${bindingIndex++}) var textureSampler${i + 1}: sampler;`);
}
}
return src.join("\n");
}
function generateSampleSrc(maxTextures) {
const src = [];
if (maxTextures === 1) {
src.push("outColor = textureSampleGrad(textureSource1, textureSampler1, vUV, uvDx, uvDy);");
} else {
src.push("switch vTextureId {");
for (let i = 0; i < maxTextures; i++) {
if (i === maxTextures - 1) {
src.push(` default:{`);
} else {
src.push(` case ${i}:{`);
}
src.push(` outColor = textureSampleGrad(textureSource${i + 1}, textureSampler${i + 1}, vUV, uvDx, uvDy);`);
src.push(` break;}`);
}
src.push(`}`);
}
return src.join("\n");
}
function generateTextureBatchBit(maxTextures) {
if (!textureBatchBitGpuCache[maxTextures]) {
textureBatchBitGpuCache[maxTextures] = {
name: "texture-batch-bit",
vertex: {
header: `
@in aTextureIdAndRound: vec2<u32>;
@out @interpolate(flat) vTextureId : u32;
`,
main: `
vTextureId = aTextureIdAndRound.y;
`,
end: `
if(aTextureIdAndRound.x == 1)
{
vPosition = vec4<f32>(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);
}
`
},
fragment: {
header: `
@in @interpolate(flat) vTextureId: u32;
${generateBindingSrc(maxTextures)}
`,
main: `
var uvDx = dpdx(vUV);
var uvDy = dpdy(vUV);
${generateSampleSrc(maxTextures)}
`
}
};
}
return textureBatchBitGpuCache[maxTextures];
}
const textureBatchBitGlCache = {};
function generateSampleGlSrc(maxTextures) {
const src = [];
for (let i = 0; i < maxTextures; i++) {
if (i > 0) {
src.push("else");
}
if (i < maxTextures - 1) {
src.push(`if(vTextureId < ${i}.5)`);
}
src.push("{");
src.push(` outColor = texture(uTextures[${i}], vUV);`);
src.push("}");
}
return src.join("\n");
}
function generateTextureBatchBitGl(maxTextures) {
if (!textureBatchBitGlCache[maxTextures]) {
textureBatchBitGlCache[maxTextures] = {
name: "texture-batch-bit",
vertex: {
header: `
in vec2 aTextureIdAndRound;
out float vTextureId;
`,
main: `
vTextureId = aTextureIdAndRound.y;
`,
end: `
if(aTextureIdAndRound.x == 1.)
{
gl_Position.xy = roundPixels(gl_Position.xy, uResolution);
}
`
},
fragment: {
header: `
in float vTextureId;
uniform sampler2D uTextures[${maxTextures}];
`,
main: `
${generateSampleGlSrc(maxTextures)}
`
}
};
}
return textureBatchBitGlCache[maxTextures];
}
exports.generateTextureBatchBit = generateTextureBatchBit;
exports.generateTextureBatchBitGl = generateTextureBatchBitGl;
//# sourceMappingURL=generateTextureBatchBit.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,126 @@
"use strict";
const textureBatchBitGpuCache = {};
function generateBindingSrc(maxTextures) {
const src = [];
if (maxTextures === 1) {
src.push("@group(1) @binding(0) var textureSource1: texture_2d<f32>;");
src.push("@group(1) @binding(1) var textureSampler1: sampler;");
} else {
let bindingIndex = 0;
for (let i = 0; i < maxTextures; i++) {
src.push(`@group(1) @binding(${bindingIndex++}) var textureSource${i + 1}: texture_2d<f32>;`);
src.push(`@group(1) @binding(${bindingIndex++}) var textureSampler${i + 1}: sampler;`);
}
}
return src.join("\n");
}
function generateSampleSrc(maxTextures) {
const src = [];
if (maxTextures === 1) {
src.push("outColor = textureSampleGrad(textureSource1, textureSampler1, vUV, uvDx, uvDy);");
} else {
src.push("switch vTextureId {");
for (let i = 0; i < maxTextures; i++) {
if (i === maxTextures - 1) {
src.push(` default:{`);
} else {
src.push(` case ${i}:{`);
}
src.push(` outColor = textureSampleGrad(textureSource${i + 1}, textureSampler${i + 1}, vUV, uvDx, uvDy);`);
src.push(` break;}`);
}
src.push(`}`);
}
return src.join("\n");
}
function generateTextureBatchBit(maxTextures) {
if (!textureBatchBitGpuCache[maxTextures]) {
textureBatchBitGpuCache[maxTextures] = {
name: "texture-batch-bit",
vertex: {
header: `
@in aTextureIdAndRound: vec2<u32>;
@out @interpolate(flat) vTextureId : u32;
`,
main: `
vTextureId = aTextureIdAndRound.y;
`,
end: `
if(aTextureIdAndRound.x == 1)
{
vPosition = vec4<f32>(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);
}
`
},
fragment: {
header: `
@in @interpolate(flat) vTextureId: u32;
${generateBindingSrc(maxTextures)}
`,
main: `
var uvDx = dpdx(vUV);
var uvDy = dpdy(vUV);
${generateSampleSrc(maxTextures)}
`
}
};
}
return textureBatchBitGpuCache[maxTextures];
}
const textureBatchBitGlCache = {};
function generateSampleGlSrc(maxTextures) {
const src = [];
for (let i = 0; i < maxTextures; i++) {
if (i > 0) {
src.push("else");
}
if (i < maxTextures - 1) {
src.push(`if(vTextureId < ${i}.5)`);
}
src.push("{");
src.push(` outColor = texture(uTextures[${i}], vUV);`);
src.push("}");
}
return src.join("\n");
}
function generateTextureBatchBitGl(maxTextures) {
if (!textureBatchBitGlCache[maxTextures]) {
textureBatchBitGlCache[maxTextures] = {
name: "texture-batch-bit",
vertex: {
header: `
in vec2 aTextureIdAndRound;
out float vTextureId;
`,
main: `
vTextureId = aTextureIdAndRound.y;
`,
end: `
if(aTextureIdAndRound.x == 1.)
{
gl_Position.xy = roundPixels(gl_Position.xy, uResolution);
}
`
},
fragment: {
header: `
in float vTextureId;
uniform sampler2D uTextures[${maxTextures}];
`,
main: `
${generateSampleGlSrc(maxTextures)}
`
}
};
}
return textureBatchBitGlCache[maxTextures];
}
export { generateTextureBatchBit, generateTextureBatchBitGl };
//# sourceMappingURL=generateTextureBatchBit.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,18 @@
export declare const globalUniformsBit: {
name: string;
vertex: {
header: string;
};
};
export declare const globalUniformsUBOBitGl: {
name: string;
vertex: {
header: string;
};
};
export declare const globalUniformsBitGl: {
name: string;
vertex: {
header: string;
};
};

View File

@@ -0,0 +1,56 @@
'use strict';
"use strict";
const globalUniformsBit = {
name: "global-uniforms-bit",
vertex: {
header: (
/* wgsl */
`
struct GlobalUniforms {
uProjectionMatrix:mat3x3<f32>,
uWorldTransformMatrix:mat3x3<f32>,
uWorldColorAlpha: vec4<f32>,
uResolution: vec2<f32>,
}
@group(0) @binding(0) var<uniform> globalUniforms : GlobalUniforms;
`
)
}
};
const globalUniformsUBOBitGl = {
name: "global-uniforms-ubo-bit",
vertex: {
header: (
/* glsl */
`
uniform globalUniforms {
mat3 uProjectionMatrix;
mat3 uWorldTransformMatrix;
vec4 uWorldColorAlpha;
vec2 uResolution;
};
`
)
}
};
const globalUniformsBitGl = {
name: "global-uniforms-bit",
vertex: {
header: (
/* glsl */
`
uniform mat3 uProjectionMatrix;
uniform mat3 uWorldTransformMatrix;
uniform vec4 uWorldColorAlpha;
uniform vec2 uResolution;
`
)
}
};
exports.globalUniformsBit = globalUniformsBit;
exports.globalUniformsBitGl = globalUniformsBitGl;
exports.globalUniformsUBOBitGl = globalUniformsUBOBitGl;
//# sourceMappingURL=globalUniformsBit.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"globalUniformsBit.js","sources":["../../../../src/rendering/high-shader/shader-bits/globalUniformsBit.ts"],"sourcesContent":["export const globalUniformsBit = {\n name: 'global-uniforms-bit',\n vertex: {\n header: /* wgsl */`\n struct GlobalUniforms {\n uProjectionMatrix:mat3x3<f32>,\n uWorldTransformMatrix:mat3x3<f32>,\n uWorldColorAlpha: vec4<f32>,\n uResolution: vec2<f32>,\n }\n\n @group(0) @binding(0) var<uniform> globalUniforms : GlobalUniforms;\n `\n }\n};\n\nexport const globalUniformsUBOBitGl = {\n name: 'global-uniforms-ubo-bit',\n vertex: {\n header: /* glsl */`\n uniform globalUniforms {\n mat3 uProjectionMatrix;\n mat3 uWorldTransformMatrix;\n vec4 uWorldColorAlpha;\n vec2 uResolution;\n };\n `\n }\n};\n\nexport const globalUniformsBitGl = {\n name: 'global-uniforms-bit',\n vertex: {\n header: /* glsl */`\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform vec4 uWorldColorAlpha;\n uniform vec2 uResolution;\n `\n }\n\n};\n"],"names":[],"mappings":";;;AAAO,MAAM,iBAAoB,GAAA;AAAA,EAC7B,IAAM,EAAA,qBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAUtB;AACJ,EAAA;AAEO,MAAM,sBAAyB,GAAA;AAAA,EAClC,IAAM,EAAA,yBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAQtB;AACJ,EAAA;AAEO,MAAM,mBAAsB,GAAA;AAAA,EAC/B,IAAM,EAAA,qBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAMtB;AAEJ;;;;;;"}

View File

@@ -0,0 +1,52 @@
"use strict";
const globalUniformsBit = {
name: "global-uniforms-bit",
vertex: {
header: (
/* wgsl */
`
struct GlobalUniforms {
uProjectionMatrix:mat3x3<f32>,
uWorldTransformMatrix:mat3x3<f32>,
uWorldColorAlpha: vec4<f32>,
uResolution: vec2<f32>,
}
@group(0) @binding(0) var<uniform> globalUniforms : GlobalUniforms;
`
)
}
};
const globalUniformsUBOBitGl = {
name: "global-uniforms-ubo-bit",
vertex: {
header: (
/* glsl */
`
uniform globalUniforms {
mat3 uProjectionMatrix;
mat3 uWorldTransformMatrix;
vec4 uWorldColorAlpha;
vec2 uResolution;
};
`
)
}
};
const globalUniformsBitGl = {
name: "global-uniforms-bit",
vertex: {
header: (
/* glsl */
`
uniform mat3 uProjectionMatrix;
uniform mat3 uWorldTransformMatrix;
uniform vec4 uWorldColorAlpha;
uniform vec2 uResolution;
`
)
}
};
export { globalUniformsBit, globalUniformsBitGl, globalUniformsUBOBitGl };
//# sourceMappingURL=globalUniformsBit.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"globalUniformsBit.mjs","sources":["../../../../src/rendering/high-shader/shader-bits/globalUniformsBit.ts"],"sourcesContent":["export const globalUniformsBit = {\n name: 'global-uniforms-bit',\n vertex: {\n header: /* wgsl */`\n struct GlobalUniforms {\n uProjectionMatrix:mat3x3<f32>,\n uWorldTransformMatrix:mat3x3<f32>,\n uWorldColorAlpha: vec4<f32>,\n uResolution: vec2<f32>,\n }\n\n @group(0) @binding(0) var<uniform> globalUniforms : GlobalUniforms;\n `\n }\n};\n\nexport const globalUniformsUBOBitGl = {\n name: 'global-uniforms-ubo-bit',\n vertex: {\n header: /* glsl */`\n uniform globalUniforms {\n mat3 uProjectionMatrix;\n mat3 uWorldTransformMatrix;\n vec4 uWorldColorAlpha;\n vec2 uResolution;\n };\n `\n }\n};\n\nexport const globalUniformsBitGl = {\n name: 'global-uniforms-bit',\n vertex: {\n header: /* glsl */`\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform vec4 uWorldColorAlpha;\n uniform vec2 uResolution;\n `\n }\n\n};\n"],"names":[],"mappings":";AAAO,MAAM,iBAAoB,GAAA;AAAA,EAC7B,IAAM,EAAA,qBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAUtB;AACJ,EAAA;AAEO,MAAM,sBAAyB,GAAA;AAAA,EAClC,IAAM,EAAA,yBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAQtB;AACJ,EAAA;AAEO,MAAM,mBAAsB,GAAA;AAAA,EAC/B,IAAM,EAAA,qBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAMtB;AAEJ;;;;"}

View File

@@ -0,0 +1,24 @@
export declare const localUniformBit: {
name: string;
vertex: {
header: string;
main: string;
end: string;
};
};
export declare const localUniformBitGroup2: {
vertex: {
header: string;
main: string;
end: string;
};
name: string;
};
export declare const localUniformBitGl: {
name: string;
vertex: {
header: string;
main: string;
end: string;
};
};

View File

@@ -0,0 +1,80 @@
'use strict';
"use strict";
const localUniformBit = {
name: "local-uniform-bit",
vertex: {
header: (
/* wgsl */
`
struct LocalUniforms {
uTransformMatrix:mat3x3<f32>,
uColor:vec4<f32>,
uRound:f32,
}
@group(1) @binding(0) var<uniform> localUniforms : LocalUniforms;
`
),
main: (
/* wgsl */
`
vColor *= localUniforms.uColor;
modelMatrix *= localUniforms.uTransformMatrix;
`
),
end: (
/* wgsl */
`
if(localUniforms.uRound == 1)
{
vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);
}
`
)
}
};
const localUniformBitGroup2 = {
...localUniformBit,
vertex: {
...localUniformBit.vertex,
// replace the group!
header: localUniformBit.vertex.header.replace("group(1)", "group(2)")
}
};
const localUniformBitGl = {
name: "local-uniform-bit",
vertex: {
header: (
/* glsl */
`
uniform mat3 uTransformMatrix;
uniform vec4 uColor;
uniform float uRound;
`
),
main: (
/* glsl */
`
vColor *= uColor;
modelMatrix = uTransformMatrix;
`
),
end: (
/* glsl */
`
if(uRound == 1.)
{
gl_Position.xy = roundPixels(gl_Position.xy, uResolution);
}
`
)
}
};
exports.localUniformBit = localUniformBit;
exports.localUniformBitGl = localUniformBitGl;
exports.localUniformBitGroup2 = localUniformBitGroup2;
//# sourceMappingURL=localUniformBit.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"localUniformBit.js","sources":["../../../../src/rendering/high-shader/shader-bits/localUniformBit.ts"],"sourcesContent":["export const localUniformBit = {\n name: 'local-uniform-bit',\n vertex: {\n header: /* wgsl */`\n\n struct LocalUniforms {\n uTransformMatrix:mat3x3<f32>,\n uColor:vec4<f32>,\n uRound:f32,\n }\n\n @group(1) @binding(0) var<uniform> localUniforms : LocalUniforms;\n `,\n main: /* wgsl */`\n vColor *= localUniforms.uColor;\n modelMatrix *= localUniforms.uTransformMatrix;\n `,\n end: /* wgsl */`\n if(localUniforms.uRound == 1)\n {\n vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);\n }\n `\n },\n};\n\n// TODO this works, but i think down the road it will be better to manage groups automatically if there are clashes\nexport const localUniformBitGroup2 = {\n ...localUniformBit,\n vertex: {\n ...localUniformBit.vertex,\n // replace the group!\n header: localUniformBit.vertex.header.replace('group(1)', 'group(2)'),\n }\n};\n\nexport const localUniformBitGl = {\n name: 'local-uniform-bit',\n vertex: {\n header: /* glsl */`\n\n uniform mat3 uTransformMatrix;\n uniform vec4 uColor;\n uniform float uRound;\n `,\n main: /* glsl */`\n vColor *= uColor;\n modelMatrix = uTransformMatrix;\n `,\n end: /* glsl */`\n if(uRound == 1.)\n {\n gl_Position.xy = roundPixels(gl_Position.xy, uResolution);\n }\n `\n },\n};\n"],"names":[],"mappings":";;;AAAO,MAAM,eAAkB,GAAA;AAAA,EAC3B,IAAM,EAAA,mBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAUlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAIhB,GAAA;AAAA;AAAA,MAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAMnB;AACJ,EAAA;AAGO,MAAM,qBAAwB,GAAA;AAAA,EACjC,GAAG,eAAA;AAAA,EACH,MAAQ,EAAA;AAAA,IACJ,GAAG,eAAgB,CAAA,MAAA;AAAA;AAAA,IAEnB,QAAQ,eAAgB,CAAA,MAAA,CAAO,MAAO,CAAA,OAAA,CAAQ,YAAY,UAAU,CAAA;AAAA,GACxE;AACJ,EAAA;AAEO,MAAM,iBAAoB,GAAA;AAAA,EAC7B,IAAM,EAAA,mBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAMlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAIhB,GAAA;AAAA;AAAA,MAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAMnB;AACJ;;;;;;"}

View File

@@ -0,0 +1,76 @@
"use strict";
const localUniformBit = {
name: "local-uniform-bit",
vertex: {
header: (
/* wgsl */
`
struct LocalUniforms {
uTransformMatrix:mat3x3<f32>,
uColor:vec4<f32>,
uRound:f32,
}
@group(1) @binding(0) var<uniform> localUniforms : LocalUniforms;
`
),
main: (
/* wgsl */
`
vColor *= localUniforms.uColor;
modelMatrix *= localUniforms.uTransformMatrix;
`
),
end: (
/* wgsl */
`
if(localUniforms.uRound == 1)
{
vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);
}
`
)
}
};
const localUniformBitGroup2 = {
...localUniformBit,
vertex: {
...localUniformBit.vertex,
// replace the group!
header: localUniformBit.vertex.header.replace("group(1)", "group(2)")
}
};
const localUniformBitGl = {
name: "local-uniform-bit",
vertex: {
header: (
/* glsl */
`
uniform mat3 uTransformMatrix;
uniform vec4 uColor;
uniform float uRound;
`
),
main: (
/* glsl */
`
vColor *= uColor;
modelMatrix = uTransformMatrix;
`
),
end: (
/* glsl */
`
if(uRound == 1.)
{
gl_Position.xy = roundPixels(gl_Position.xy, uResolution);
}
`
)
}
};
export { localUniformBit, localUniformBitGl, localUniformBitGroup2 };
//# sourceMappingURL=localUniformBit.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"localUniformBit.mjs","sources":["../../../../src/rendering/high-shader/shader-bits/localUniformBit.ts"],"sourcesContent":["export const localUniformBit = {\n name: 'local-uniform-bit',\n vertex: {\n header: /* wgsl */`\n\n struct LocalUniforms {\n uTransformMatrix:mat3x3<f32>,\n uColor:vec4<f32>,\n uRound:f32,\n }\n\n @group(1) @binding(0) var<uniform> localUniforms : LocalUniforms;\n `,\n main: /* wgsl */`\n vColor *= localUniforms.uColor;\n modelMatrix *= localUniforms.uTransformMatrix;\n `,\n end: /* wgsl */`\n if(localUniforms.uRound == 1)\n {\n vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);\n }\n `\n },\n};\n\n// TODO this works, but i think down the road it will be better to manage groups automatically if there are clashes\nexport const localUniformBitGroup2 = {\n ...localUniformBit,\n vertex: {\n ...localUniformBit.vertex,\n // replace the group!\n header: localUniformBit.vertex.header.replace('group(1)', 'group(2)'),\n }\n};\n\nexport const localUniformBitGl = {\n name: 'local-uniform-bit',\n vertex: {\n header: /* glsl */`\n\n uniform mat3 uTransformMatrix;\n uniform vec4 uColor;\n uniform float uRound;\n `,\n main: /* glsl */`\n vColor *= uColor;\n modelMatrix = uTransformMatrix;\n `,\n end: /* glsl */`\n if(uRound == 1.)\n {\n gl_Position.xy = roundPixels(gl_Position.xy, uResolution);\n }\n `\n },\n};\n"],"names":[],"mappings":";AAAO,MAAM,eAAkB,GAAA;AAAA,EAC3B,IAAM,EAAA,mBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAUlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAIhB,GAAA;AAAA;AAAA,MAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAMnB;AACJ,EAAA;AAGO,MAAM,qBAAwB,GAAA;AAAA,EACjC,GAAG,eAAA;AAAA,EACH,MAAQ,EAAA;AAAA,IACJ,GAAG,eAAgB,CAAA,MAAA;AAAA;AAAA,IAEnB,QAAQ,eAAgB,CAAA,MAAA,CAAO,MAAO,CAAA,OAAA,CAAQ,YAAY,UAAU,CAAA;AAAA,GACxE;AACJ,EAAA;AAEO,MAAM,iBAAoB,GAAA;AAAA,EAC7B,IAAM,EAAA,mBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAMlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAIhB,GAAA;AAAA;AAAA,MAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAMnB;AACJ;;;;"}

View File

@@ -0,0 +1,12 @@
export declare const roundPixelsBit: {
name: string;
vertex: {
header: string;
};
};
export declare const roundPixelsBitGl: {
name: string;
vertex: {
header: string;
};
};

View File

@@ -0,0 +1,35 @@
'use strict';
"use strict";
const roundPixelsBit = {
name: "round-pixels-bit",
vertex: {
header: (
/* wgsl */
`
fn roundPixels(position: vec2<f32>, targetSize: vec2<f32>) -> vec2<f32>
{
return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;
}
`
)
}
};
const roundPixelsBitGl = {
name: "round-pixels-bit",
vertex: {
header: (
/* glsl */
`
vec2 roundPixels(vec2 position, vec2 targetSize)
{
return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;
}
`
)
}
};
exports.roundPixelsBit = roundPixelsBit;
exports.roundPixelsBitGl = roundPixelsBitGl;
//# sourceMappingURL=roundPixelsBit.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"roundPixelsBit.js","sources":["../../../../src/rendering/high-shader/shader-bits/roundPixelsBit.ts"],"sourcesContent":["export const roundPixelsBit = {\n name: 'round-pixels-bit',\n vertex: {\n header: /* wgsl */`\n fn roundPixels(position: vec2<f32>, targetSize: vec2<f32>) -> vec2<f32> \n {\n return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;\n }\n `\n }\n};\n\nexport const roundPixelsBitGl = {\n name: 'round-pixels-bit',\n vertex: {\n header: /* glsl */` \n vec2 roundPixels(vec2 position, vec2 targetSize)\n { \n return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;\n }\n `\n }\n};\n\n"],"names":[],"mappings":";;;AAAO,MAAM,cAAiB,GAAA;AAAA,EAC1B,IAAM,EAAA,kBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAMtB;AACJ,EAAA;AAEO,MAAM,gBAAmB,GAAA;AAAA,EAC5B,IAAM,EAAA,kBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAMtB;AACJ;;;;;"}

View File

@@ -0,0 +1,32 @@
"use strict";
const roundPixelsBit = {
name: "round-pixels-bit",
vertex: {
header: (
/* wgsl */
`
fn roundPixels(position: vec2<f32>, targetSize: vec2<f32>) -> vec2<f32>
{
return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;
}
`
)
}
};
const roundPixelsBitGl = {
name: "round-pixels-bit",
vertex: {
header: (
/* glsl */
`
vec2 roundPixels(vec2 position, vec2 targetSize)
{
return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;
}
`
)
}
};
export { roundPixelsBit, roundPixelsBitGl };
//# sourceMappingURL=roundPixelsBit.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"roundPixelsBit.mjs","sources":["../../../../src/rendering/high-shader/shader-bits/roundPixelsBit.ts"],"sourcesContent":["export const roundPixelsBit = {\n name: 'round-pixels-bit',\n vertex: {\n header: /* wgsl */`\n fn roundPixels(position: vec2<f32>, targetSize: vec2<f32>) -> vec2<f32> \n {\n return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;\n }\n `\n }\n};\n\nexport const roundPixelsBitGl = {\n name: 'round-pixels-bit',\n vertex: {\n header: /* glsl */` \n vec2 roundPixels(vec2 position, vec2 targetSize)\n { \n return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;\n }\n `\n }\n};\n\n"],"names":[],"mappings":";AAAO,MAAM,cAAiB,GAAA;AAAA,EAC1B,IAAM,EAAA,kBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAMtB;AACJ,EAAA;AAEO,MAAM,gBAAmB,GAAA;AAAA,EAC5B,IAAM,EAAA,kBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAMtB;AACJ;;;;"}

View File

@@ -0,0 +1,22 @@
export declare const textureBit: {
name: string;
vertex: {
header: string;
main: string;
};
fragment: {
header: string;
main: string;
};
};
export declare const textureBitGl: {
name: string;
vertex: {
header: string;
main: string;
};
fragment: {
header: string;
main: string;
};
};

View File

@@ -0,0 +1,79 @@
'use strict';
"use strict";
const textureBit = {
name: "texture-bit",
vertex: {
header: (
/* wgsl */
`
struct TextureUniforms {
uTextureMatrix:mat3x3<f32>,
}
@group(2) @binding(2) var<uniform> textureUniforms : TextureUniforms;
`
),
main: (
/* wgsl */
`
uv = (textureUniforms.uTextureMatrix * vec3(uv, 1.0)).xy;
`
)
},
fragment: {
header: (
/* wgsl */
`
@group(2) @binding(0) var uTexture: texture_2d<f32>;
@group(2) @binding(1) var uSampler: sampler;
`
),
main: (
/* wgsl */
`
outColor = textureSample(uTexture, uSampler, vUV);
`
)
}
};
const textureBitGl = {
name: "texture-bit",
vertex: {
header: (
/* glsl */
`
uniform mat3 uTextureMatrix;
`
),
main: (
/* glsl */
`
uv = (uTextureMatrix * vec3(uv, 1.0)).xy;
`
)
},
fragment: {
header: (
/* glsl */
`
uniform sampler2D uTexture;
`
),
main: (
/* glsl */
`
outColor = texture(uTexture, vUV);
`
)
}
};
exports.textureBit = textureBit;
exports.textureBitGl = textureBitGl;
//# sourceMappingURL=textureBit.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"textureBit.js","sources":["../../../../src/rendering/high-shader/shader-bits/textureBit.ts"],"sourcesContent":["export const textureBit = {\n name: 'texture-bit',\n vertex: {\n header: /* wgsl */`\n\n struct TextureUniforms {\n uTextureMatrix:mat3x3<f32>,\n }\n\n @group(2) @binding(2) var<uniform> textureUniforms : TextureUniforms;\n `,\n main: /* wgsl */`\n uv = (textureUniforms.uTextureMatrix * vec3(uv, 1.0)).xy;\n `\n },\n fragment: {\n header: /* wgsl */`\n @group(2) @binding(0) var uTexture: texture_2d<f32>;\n @group(2) @binding(1) var uSampler: sampler;\n\n \n `,\n main: /* wgsl */`\n outColor = textureSample(uTexture, uSampler, vUV);\n `\n }\n};\n\nexport const textureBitGl = {\n name: 'texture-bit',\n vertex: {\n header: /* glsl */`\n uniform mat3 uTextureMatrix;\n `,\n main: /* glsl */`\n uv = (uTextureMatrix * vec3(uv, 1.0)).xy;\n `\n },\n fragment: {\n header: /* glsl */`\n uniform sampler2D uTexture;\n\n \n `,\n main: /* glsl */`\n outColor = texture(uTexture, vUV);\n `\n }\n};\n\n"],"names":[],"mappings":";;;AAAO,MAAM,UAAa,GAAA;AAAA,EACtB,IAAM,EAAA,aAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAQlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AAAA,EACA,QAAU,EAAA;AAAA,IACN,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAMlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AACJ,EAAA;AAEO,MAAM,YAAe,GAAA;AAAA,EACxB,IAAM,EAAA,aAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAGlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AAAA,EACA,QAAU,EAAA;AAAA,IACN,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAKlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AACJ;;;;;"}

View File

@@ -0,0 +1,76 @@
"use strict";
const textureBit = {
name: "texture-bit",
vertex: {
header: (
/* wgsl */
`
struct TextureUniforms {
uTextureMatrix:mat3x3<f32>,
}
@group(2) @binding(2) var<uniform> textureUniforms : TextureUniforms;
`
),
main: (
/* wgsl */
`
uv = (textureUniforms.uTextureMatrix * vec3(uv, 1.0)).xy;
`
)
},
fragment: {
header: (
/* wgsl */
`
@group(2) @binding(0) var uTexture: texture_2d<f32>;
@group(2) @binding(1) var uSampler: sampler;
`
),
main: (
/* wgsl */
`
outColor = textureSample(uTexture, uSampler, vUV);
`
)
}
};
const textureBitGl = {
name: "texture-bit",
vertex: {
header: (
/* glsl */
`
uniform mat3 uTextureMatrix;
`
),
main: (
/* glsl */
`
uv = (uTextureMatrix * vec3(uv, 1.0)).xy;
`
)
},
fragment: {
header: (
/* glsl */
`
uniform sampler2D uTexture;
`
),
main: (
/* glsl */
`
outColor = texture(uTexture, vUV);
`
)
}
};
export { textureBit, textureBitGl };
//# sourceMappingURL=textureBit.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"textureBit.mjs","sources":["../../../../src/rendering/high-shader/shader-bits/textureBit.ts"],"sourcesContent":["export const textureBit = {\n name: 'texture-bit',\n vertex: {\n header: /* wgsl */`\n\n struct TextureUniforms {\n uTextureMatrix:mat3x3<f32>,\n }\n\n @group(2) @binding(2) var<uniform> textureUniforms : TextureUniforms;\n `,\n main: /* wgsl */`\n uv = (textureUniforms.uTextureMatrix * vec3(uv, 1.0)).xy;\n `\n },\n fragment: {\n header: /* wgsl */`\n @group(2) @binding(0) var uTexture: texture_2d<f32>;\n @group(2) @binding(1) var uSampler: sampler;\n\n \n `,\n main: /* wgsl */`\n outColor = textureSample(uTexture, uSampler, vUV);\n `\n }\n};\n\nexport const textureBitGl = {\n name: 'texture-bit',\n vertex: {\n header: /* glsl */`\n uniform mat3 uTextureMatrix;\n `,\n main: /* glsl */`\n uv = (uTextureMatrix * vec3(uv, 1.0)).xy;\n `\n },\n fragment: {\n header: /* glsl */`\n uniform sampler2D uTexture;\n\n \n `,\n main: /* glsl */`\n outColor = texture(uTexture, vUV);\n `\n }\n};\n\n"],"names":[],"mappings":";AAAO,MAAM,UAAa,GAAA;AAAA,EACtB,IAAM,EAAA,aAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAQlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AAAA,EACA,QAAU,EAAA;AAAA,IACN,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAMlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AACJ,EAAA;AAEO,MAAM,YAAe,GAAA;AAAA,EACxB,IAAM,EAAA,aAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACJ,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAGlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AAAA,EACA,QAAU,EAAA;AAAA,IACN,MAAA;AAAA;AAAA,MAAkB,CAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,IAKlB,IAAA;AAAA;AAAA,MAAgB,CAAA;AAAA;AAAA,QAAA,CAAA;AAAA,KAAA;AAAA,GAGpB;AACJ;;;;"}