@pixi/core
Version:
Core PixiJS
57 lines (52 loc) • 2.45 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var GLProgram = require('../GLProgram.js');
var compileShader = require('./compileShader.js');
var defaultValue = require('./defaultValue.js');
var getAttributeData = require('./getAttributeData.js');
var getUniformData = require('./getUniformData.js');
var logProgramError = require('./logProgramError.js');
function generateProgram(gl, program) {
const glVertShader = compileShader.compileShader(gl, gl.VERTEX_SHADER, program.vertexSrc);
const glFragShader = compileShader.compileShader(gl, gl.FRAGMENT_SHADER, program.fragmentSrc);
const webGLProgram = gl.createProgram();
gl.attachShader(webGLProgram, glVertShader);
gl.attachShader(webGLProgram, glFragShader);
const transformFeedbackVaryings = program.extra?.transformFeedbackVaryings;
if (transformFeedbackVaryings) {
if (typeof gl.transformFeedbackVaryings !== "function") {
console.warn(`TransformFeedback is not supported but TransformFeedbackVaryings are given.`);
} else {
gl.transformFeedbackVaryings(webGLProgram, transformFeedbackVaryings.names, transformFeedbackVaryings.bufferMode === "separate" ? gl.SEPARATE_ATTRIBS : gl.INTERLEAVED_ATTRIBS);
}
}
gl.linkProgram(webGLProgram);
if (!gl.getProgramParameter(webGLProgram, gl.LINK_STATUS)) {
logProgramError.logProgramError(gl, webGLProgram, glVertShader, glFragShader);
}
program.attributeData = getAttributeData.getAttributeData(webGLProgram, gl);
program.uniformData = getUniformData.getUniformData(webGLProgram, gl);
if (!/^[ \t]*#[ \t]*version[ \t]+300[ \t]+es[ \t]*$/m.test(program.vertexSrc)) {
const keys = Object.keys(program.attributeData);
keys.sort((a, b) => a > b ? 1 : -1);
for (let i = 0; i < keys.length; i++) {
program.attributeData[keys[i]].location = i;
gl.bindAttribLocation(webGLProgram, i, keys[i]);
}
gl.linkProgram(webGLProgram);
}
gl.deleteShader(glVertShader);
gl.deleteShader(glFragShader);
const uniformData = {};
for (const i in program.uniformData) {
const data = program.uniformData[i];
uniformData[i] = {
location: gl.getUniformLocation(webGLProgram, i),
value: defaultValue.defaultValue(data.type, data.size)
};
}
const glProgram = new GLProgram.GLProgram(webGLProgram, uniformData);
return glProgram;
}
exports.generateProgram = generateProgram;
//# sourceMappingURL=generateProgram.js.map
;