/** * Kepler - Core * STUDIOS * All rights reserved. * * Author: Kaj Dijksta * **/ import {vector2, vector3, matrix4 } from './math.js'; import sampler2D from './sampler2D.js'; import samplerCube from './samplerCube.js'; class uniform_template{ name; value; prepared = false; } /** * Shader Object * this class takes care of the shader management for you */ class shader { constructor() { this.program; this.uniform_templates = []; this.uniforms = []; this.attributes = []; this.url; this.samplerId = 0; this.libraryContent = false; this.librarys = []; this.pragmas = []; this.rawShader; //this.samplerId = 0; this.programInfo; this.compiled = false; this.blend = 0; } /** * set viewport * @param {(viewport)} viewport **/ setViewport( viewport ){ this.viewport = viewport; this.gl = viewport.gl; } createFromFile(url) { this.url = url; var shaderText = kepler.resources.loadTextFileSynchronous(url); var splitShader = shaderText.split("// #keplerEngine - Split"); this.vertexShaderText = splitShader[0]; this.fragmentShaderText = splitShader[1]; //add pragma's for(var c = 0; c 1 ){ var arraySize = parseFloat(array_Check[1].split(']')[0]); uniform.arrayType = uniform.type; uniform.type = "array"; uniform.size = arraySize; uniform.name = array_Check[0]; } if(GLSL_TYPES.contains(uniform.type)) { //console.log("3.0 uniforms", uniform.name); this.addUniform(uniform); } } //console.log( this ); } compile(){ this.vertexShader = this.gl.createShader(this.gl.VERTEX_SHADER); this.fragmentShader = this.gl.createShader(this.gl.FRAGMENT_SHADER); this.gl.shaderSource(this.vertexShader, this.vertexShaderText); this.gl.compileShader(this.vertexShader); this.gl.shaderSource(this.fragmentShader, this.fragmentShaderText); this.gl.compileShader(this.fragmentShader); this.program = this.gl.createProgram(); this.gl.attachShader(this.program, this.vertexShader); this.gl.attachShader(this.program, this.fragmentShader); if (!this.gl.getShaderParameter(this.vertexShader, this.gl.COMPILE_STATUS)) { alert(this.gl.getShaderInfoLog(this.vertexShader)); return null; } if (!this.gl.getShaderParameter(this.fragmentShader, this.gl.COMPILE_STATUS)) { alert(this.gl.getShaderInfoLog(this.fragmentShader)); return null; } this.gl.linkProgram(this.program); if (!this.gl.getProgramParameter(this.program, this.gl.LINK_STATUS)) { alert("Could not initialise shaders"); } this.gl.useProgram(this.program); for(var c = 0; c 1 ){ var arraySize = parseFloat(array_Check[1].split(']')[0]); uniform.arrayType = uniform.type; uniform.type = "array"; uniform.size = arraySize; uniform.name = array_Check[0]; } if(GLSL_TYPES.contains(uniform.type)) { this.addUniform(uniform); } } for(var c = 0; c= 0) { s = s.substring(i + prefix.length); } else { return ''; } if (suffix) { i = s.indexOf(suffix); if (i >= 0) { s = s.substring(0, i); } else { return ''; } } return s; }; /** * Chech if object is array * @param {(obj)} object. **/ function isArray(obj) { return obj.constructor == Array; } /** * add string to string at a particular index * @param {(String)} src. * @param {(int)} index. * @param {(String)} str. **/ function insertAt(src, index, str) { return src.substr(0, index) + str + src.substr(index) } var ttt= 0; var samplerId = 0;