UNPKG

@pixi/core

Version:
57 lines (52 loc) 2.45 kB
'use strict'; 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