WebGL: en passant uniforme des tableaux de shader
Essayé de faire comme ici: Tableau passe de shader
Et comme ici: Le passage d'un tableau de vecteurs d'un uniforme
Mais toujours pas de chance. Je pense que je fais tout comme il y en a mais ça ne fonctionne pas:
Voici mon code JavaScript:
shaderProgram.lightsUniform = gl.getUniformLocation(shaderProgram, "lights"); //Getting location
gl.uniform1f(shaderProgram.lightsUniform, new Float32Array([3,1,2,3,4,5])); //Let's try to send some light (currently each light is one float) as array.
Vertex Shader Code:
uniform float lights[6]; //Declaration
...
vLight *= lights[0]; //Let's try to mutliply our light by the first array item. There should be 3.0.
Résumé: j'envoie un tableau de shader avec les non-nulle de flotteurs.
Résultat: totalement noir! I. e. lumières[0] contient 0.0 mais attendu 3.0. Si j'essaie de lumières[1], des lumières[2] etc. ils donnent tous le même résultat!
Nous allons maintenant essayer de passer juste un flotteur. - Je changer
gl.uniform1f(shaderProgram.lightsUniform, new Float32Array([3,1,2,3,4,5]));
à
gl.uniform1f(shaderProgram.lightsUniform, 3); //I want to send just float 3.0
Résumé: au lieu d'envoyer un tableau j'envoie juste flotter 3.0.
Résultat: fonctionne! lumières[0] contient 3.0 (mais j'ai envoyé juste flotter, pas un tableau).
Que dois-je faire de mal? Comment puis-je passer à shader tableau des uniformes?
OriginalL'auteur Dmitry | 2013-07-26
Vous devez vous connecter pour publier un commentaire.
Ces réponses toutes utiliser la fonction
uniform3fv
.v
comme dansvector
.De sorte que vous devriez être en utilisant
uniform1fv
, pasuniform1f
pour les tableaux de l'uniforme. Dans l'avenir, s'il vous plaît être plus prudent lors de la lecture des réponses. Ou, à défaut, vérifiez votre OpenGL erreurs avant de poser des questions.J'ai connu un problème similaire. Mais quand j'ai changé de uniform1fv, j'ai eu la suite de la console d'erreur: Échec de l'exécution de 'uniform1fv' sur 'WebGLRenderingContext': Aucune fonction n'a été trouvé qui correspondait à la signature.
OriginalL'auteur Nicol Bolas
1: assurez-vous que votre si déclaration est à l'intérieur d'un fonction.
2: assurez-vous que précision est définie avant déclarant uniformes.
3: assurez-vous que la comparaison est de type correct:
Ce sera ÉCHOUER:
Ce sera ÉCHOUER:
Ce sera TRAVAIL:
OriginalL'auteur J.M.I. MADISON