larry babby and threejs for glsl

This commit is contained in:
Sam
2024-06-24 21:24:00 +12:00
parent 87d5dc634d
commit 907ebae4c0
6474 changed files with 1279596 additions and 8 deletions

View File

@@ -0,0 +1,48 @@
module.exports = clean
var suffix = /^([^_]+)_(\d{4,})$/
function clean (tokens) {
var blacklist = {}
var index = {}
for (var i = 0; i < tokens.length; i++) {
var token = tokens[i]
if (token.type !== 'ident') continue
var match = token.data.match(suffix)
if (!match) {
blacklist[token.data] = true
continue
}
var pre = match[1]
var suf = match[2]
index[pre] = index[pre] || {}
index[pre][suf] = index[pre][suf] || []
index[pre][suf].push(token)
}
Object.keys(index).forEach(function (prefix) {
var suffixes = Object.keys(index[prefix])
if (suffixes.length === 1 && !blacklist[prefix]) {
var tokens = index[prefix][suffixes[0]]
for (var i = 0; i < tokens.length; i++) {
tokens[i].data = prefix
}
return
}
suffixes.forEach(function (suffix, i) {
var token = index[prefix][suffix]
var rename = prefix + '_' + i
if (blacklist[rename]) return
for (var j = 0; j < token.length; j++) {
token[j].data = rename
}
})
})
return tokens
}

View File

@@ -0,0 +1,69 @@
module.exports = topoSort
// Permutes the dependencies into topological order
function topoSort (deps) {
// Build reversed adjacency list
var adj = {}
var inDegree = {}
var index = {}
deps.forEach(function (dep) {
var v = dep.id
var nbhd = Object.keys(dep.deps)
index[dep.id] = dep
inDegree[v] = nbhd.length
nbhd.forEach(function (filename) {
var u = dep.deps[filename]
if (adj[u]) {
adj[u].push(v)
} else {
adj[u] = [v]
}
})
})
// Initialize toVisit queue
var result = []
var inverse = {}
deps.forEach(function (dep) {
var v = dep.id
if (!adj[v]) {
adj[v] = []
}
if (inDegree[v] === 0) {
inverse[v] = result.length
result.push(v)
}
})
// Run BFS
for (var ptr = 0; ptr < result.length; ptr++) {
var v = result[ptr]
adj[v].forEach(function (u) {
if (--inDegree[u] === 0) {
inverse[u] = result.length
result.push(u)
}
})
}
if (result.length !== deps.length) {
throw new Error('cyclic dependency')
}
// Relabel dependencies
return result.map(function (v) {
var dep = index[v]
var deps = dep.deps
var ndeps = {}
Object.keys(deps).forEach(function (filename) {
ndeps[filename] = inverse[deps[filename]] | 0
})
return {
id: inverse[v] | 0,
deps: ndeps,
file: dep.file,
source: dep.source,
entry: dep.entry
}
})
}