sdfsdfs
This commit is contained in:
81
node_modules/pixi.js/lib/rendering/renderers/gpu/shader/GpuProgram.js
generated
vendored
Normal file
81
node_modules/pixi.js/lib/rendering/renderers/gpu/shader/GpuProgram.js
generated
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
'use strict';
|
||||
|
||||
var createIdFromString = require('../../shared/utils/createIdFromString.js');
|
||||
var extractAttributesFromGpuProgram = require('./utils/extractAttributesFromGpuProgram.js');
|
||||
var extractStructAndGroups = require('./utils/extractStructAndGroups.js');
|
||||
var generateGpuLayoutGroups = require('./utils/generateGpuLayoutGroups.js');
|
||||
var generateLayoutHash = require('./utils/generateLayoutHash.js');
|
||||
var removeStructAndGroupDuplicates = require('./utils/removeStructAndGroupDuplicates.js');
|
||||
|
||||
"use strict";
|
||||
const programCache = /* @__PURE__ */ Object.create(null);
|
||||
class GpuProgram {
|
||||
/**
|
||||
* Create a new GpuProgram
|
||||
* @param options - The options for the gpu program
|
||||
*/
|
||||
constructor(options) {
|
||||
/**
|
||||
* @internal
|
||||
* @ignore
|
||||
*/
|
||||
this._layoutKey = 0;
|
||||
/**
|
||||
* @internal
|
||||
* @ignore
|
||||
*/
|
||||
this._attributeLocationsKey = 0;
|
||||
const { fragment, vertex, layout, gpuLayout, name } = options;
|
||||
this.name = name;
|
||||
this.fragment = fragment;
|
||||
this.vertex = vertex;
|
||||
if (fragment.source === vertex.source) {
|
||||
const structsAndGroups = extractStructAndGroups.extractStructAndGroups(fragment.source);
|
||||
this.structsAndGroups = structsAndGroups;
|
||||
} else {
|
||||
const vertexStructsAndGroups = extractStructAndGroups.extractStructAndGroups(vertex.source);
|
||||
const fragmentStructsAndGroups = extractStructAndGroups.extractStructAndGroups(fragment.source);
|
||||
this.structsAndGroups = removeStructAndGroupDuplicates.removeStructAndGroupDuplicates(vertexStructsAndGroups, fragmentStructsAndGroups);
|
||||
}
|
||||
this.layout = layout ?? generateLayoutHash.generateLayoutHash(this.structsAndGroups);
|
||||
this.gpuLayout = gpuLayout ?? generateGpuLayoutGroups.generateGpuLayoutGroups(this.structsAndGroups);
|
||||
this.autoAssignGlobalUniforms = !!(this.layout[0]?.globalUniforms !== void 0);
|
||||
this.autoAssignLocalUniforms = !!(this.layout[1]?.localUniforms !== void 0);
|
||||
this._generateProgramKey();
|
||||
}
|
||||
// TODO maker this pure
|
||||
_generateProgramKey() {
|
||||
const { vertex, fragment } = this;
|
||||
const bigKey = vertex.source + fragment.source + vertex.entryPoint + fragment.entryPoint;
|
||||
this._layoutKey = createIdFromString.createIdFromString(bigKey, "program");
|
||||
}
|
||||
get attributeData() {
|
||||
this._attributeData ?? (this._attributeData = extractAttributesFromGpuProgram.extractAttributesFromGpuProgram(this.vertex));
|
||||
return this._attributeData;
|
||||
}
|
||||
/** destroys the program */
|
||||
destroy() {
|
||||
this.gpuLayout = null;
|
||||
this.layout = null;
|
||||
this.structsAndGroups = null;
|
||||
this.fragment = null;
|
||||
this.vertex = null;
|
||||
}
|
||||
/**
|
||||
* Helper function that creates a program for a given source.
|
||||
* It will check the program cache if the program has already been created.
|
||||
* If it has that one will be returned, if not a new one will be created and cached.
|
||||
* @param options - The options for the program.
|
||||
* @returns A program using the same source
|
||||
*/
|
||||
static from(options) {
|
||||
const key = `${options.vertex.source}:${options.fragment.source}:${options.fragment.entryPoint}:${options.vertex.entryPoint}`;
|
||||
if (!programCache[key]) {
|
||||
programCache[key] = new GpuProgram(options);
|
||||
}
|
||||
return programCache[key];
|
||||
}
|
||||
}
|
||||
|
||||
exports.GpuProgram = GpuProgram;
|
||||
//# sourceMappingURL=GpuProgram.js.map
|
Reference in New Issue
Block a user