J'essaie d'échanger le frager-shader utilisé dans un programme. Les fragments-shaders ont tous les mêmes variables, juste des calculs différents. J'essaye de fournir des shaders alternatifs pour le matériel inférieur.webgl remplacer programme shader
Je finis par obtenir des sorties de couleur unique (au lieu d'une texture), est-ce que quelqu'un a une idée de ce que je pourrais faire de mal? Je sais que les shaders sont utilisés, en raison de la couleur qui change en conséquence.
//if I don't do this:
//WebGL: INVALID_OPERATION: attachShader: shader attachment already has shader
gl.detachShader(program, _.attachedFS);
//select a random shader, all using the same parameters
attachedFS = fragmentShaders[~~(Math.qrand()*fragmentShaders.length)];
//attach the new shader
gl.attachShader(program, attachedFS);
//if I don't do this nothing happens
gl.linkProgram(program);
//if I don't add this line:
//globject.js:313 WebGL: INVALID_OPERATION: uniform2f:
//location not for current program
updateLocations();
Vous devriez sans doute créer plusieurs programmes de shader, ne changeant pas les shaders sur un shader-programme existant. Créez des programmes de shader pour chaque combinaison de fonctionnalités que vous utilisez. – gman