webgl/src/client/changeshader.ts

44 lines
1.4 KiB
TypeScript

import {initShaderProgram,
unlinkShaderProgram} from './shaders';
/**
*
* @param {any} context the program context
* @param {string} fsSource new fragment shader source
* @param {string} vsSource current vsSource
*/
export function changeFragmentShader(context: any,
fsSource: string,
vsSource: string) {
[context.shaderProgram, context.fragmentShader] =
unlinkShaderProgram(context.gl,
context.fragmentShader,
context.shaderProgram);
initShaderProgram(context, vsSource, fsSource);
context.programInfo = {
program: context.shaderProgram,
attribLocations: {
vertexPosition: context.gl.getAttribLocation(context.shaderProgram,
'aVertexPosition'),
vertexColor: context.gl.getAttribLocation(context.shaderProgram,
'aVertexColor'),
vertexNormal: context.gl.getAttribLocation(context.shaderProgram,
'aVertexNormal'),
textureCoord: context.gl.getAttribLocation(context.shaderProgram,
'aTextureCoord'),
},
uniformLocations: {
projectionMatrix: context.gl.getUniformLocation(
context.shaderProgram, 'uProjectionMatrix'),
viewMatrix: context.gl.getUniformLocation(
context.shaderProgram, 'uviewMatrix'),
modelMatrix: context.gl.getUniformLocation(
context.shaderProgram, 'umodelMatrix'),
normalModelMatrix: context.gl.getUniformLocation(
context.shaderProgram, 'unormalModelMatrix'),
uSampler: context.gl.getUniformLocation(
context.shaderProgram, 'uSampler'),
},
};
}