34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
import { BindGroup } from '../../renderers/gpu/shader/BindGroup.mjs';
|
|
import { Texture } from '../../renderers/shared/texture/Texture.mjs';
|
|
import { getMaxTexturesPerBatch } from '../gl/utils/maxRecommendedTextures.mjs';
|
|
|
|
"use strict";
|
|
const cachedGroups = {};
|
|
function getTextureBatchBindGroup(textures, size) {
|
|
let uid = 2166136261;
|
|
for (let i = 0; i < size; i++) {
|
|
uid ^= textures[i].uid;
|
|
uid = Math.imul(uid, 16777619);
|
|
uid >>>= 0;
|
|
}
|
|
return cachedGroups[uid] || generateTextureBatchBindGroup(textures, size, uid);
|
|
}
|
|
let maxTextures = 0;
|
|
function generateTextureBatchBindGroup(textures, size, key) {
|
|
const bindGroupResources = {};
|
|
let bindIndex = 0;
|
|
if (!maxTextures)
|
|
maxTextures = getMaxTexturesPerBatch();
|
|
for (let i = 0; i < maxTextures; i++) {
|
|
const texture = i < size ? textures[i] : Texture.EMPTY.source;
|
|
bindGroupResources[bindIndex++] = texture.source;
|
|
bindGroupResources[bindIndex++] = texture.style;
|
|
}
|
|
const bindGroup = new BindGroup(bindGroupResources);
|
|
cachedGroups[key] = bindGroup;
|
|
return bindGroup;
|
|
}
|
|
|
|
export { getTextureBatchBindGroup };
|
|
//# sourceMappingURL=getTextureBatchBindGroup.mjs.map
|