2010-12-03 5 views
6

Est-il possible de lire à partir d'une texture dans un vertex shader avec WebGL?WebGL: Accès à la texture dans un vertex shader?

J'ai écrit un WebGL page (juste pour l'essayer) et j'ai utilisé Chrome 7 pour le tester. Dès que j'ai mis à niveau vers Chrome 8, il a cessé de fonctionner. J'ai vérifié que webgl est activé. L'erreur est:

'Texture2D': aucune fonction de surcharge correspondant a trouvé

Quand je remplace l'appel à Texture2D avec une constante, cela fonctionne. L'accès à la texture dans un fragment shader utilisant la même texture fonctionne également.

Vous avez des idées? Je suis particulièrement impressionné par le fait que la mise à niveau de Chrome a provoqué sa rupture.

Mise à jour: Fonctionne dans firefox 4 beta. Je l'ai signalé un bug avec Chrome - numéro 65340

Mise à jour 2: Il travaille maintenant dans Firefox et Chrome

+0

Je pense que cela pourrait être une limitation de certaines implémentations. – andrewmu

+0

Je doute que ce soit intentionnel. Cela limiterait beaucoup de techniques (par exemple la cartographie de déplacement). – sharoz

Répondre

5

Ce ne est pas vraiment un 'bug' dans Chrome.

L'accès à la texture Vertex n'est pas une fonctionnalité obligatoire d'Open GL ES 2, qui est la base de la spécification WebGL. Je soupçonne que le pilote GL sous-jacent prend en charge l'accès à la texture de vertex, mais que vous avez basculé vers Chrome en utilisant Angle et que Angle ne signale pas l'accès à la texture vertex comme disponible.

Vous pouvez comparer votre FF et Chrome versions en utilisant Thatcher Ulrich de

http://webgl-bench.appspot.com/

Cela a le paramètre MAX_VERTEX_TEXTURE_IMAGE_UNITS (à la fin) Chrome/Angle rapporte toujours 0.t

Une autre chose à vérifiez que vous utilisez la bonne syntaxe texture2D - la spécification a changé et il se peut que FF prenne en charge l'ancienne syntaxe.

+0

Ce site est génial. Merci. Cela a fonctionné dans Chrome 7 (j'ai essayé la rétrogradation). Une idée de pourquoi ils laisseraient tomber la fonctionnalité? Y a-t-il un avantage à bloquer la capacité du matériel? – sharoz

+0

Comme le dit einSelbst ci-dessous, ce n'est pas une question de «laisser tomber» une fonctionnalité.Angle utilise DX9 pour émuler Open GL ES 2.0, et le nombre de vertex minimum pour ES 2.0 est 0. Si vous sélectionnez le moteur de rendu non Angle, il utilisera l'implémentation OpenGL des cartes graphiques sous-jacentes, qui peut bien prendre en charge la fonctionnalité. Veuillez noter que par défaut, FF et Chrome utiliseront Angle. Je vous suggère de regarder le projet Angle et peut-être leur demander s'ils souhaitent implémenter la prise en charge de la texture vertex. Voir http://code.google.com/p/angleproject/ – alanatmech

+0

Merci. J'ai répondu aux commentaires de votre et einSelbst ci-dessous. – sharoz

2

Je voudrais commenter, mais je n'ai pas la réputation. Comme l'a dit alanatmech, il pourrait être lié à Angle, qui transmet tous les appels GL dans DirectX. Il ne s'agit donc pas d'une fonctionnalité supprimée et l'avantage serait d'avoir la prise en charge de WebGL sur les machines Windows sans les pilotes OpenGL.

Vous pouvez essayer d'exécuter Chrome avec "--use-gl = desktop", donc il utilisera le backend de rendu OpenGL au lieu de l'angle. Votre site ne fonctionne pas avec Chrome 8.0.552.215 bêta que ce soit, mais il ne donne pas l'erreur que vous avez mentionné, que je reçois sur Chrome 9.0.597.10 Canary construire sans le drapeau AND sur Minefield.

+0

Je n'avais pas réalisé qu'il utilisait DX. Apparemment, les variantes plus anciennes (ou plus limitées) de DX9 ne peuvent pas faire des appels de texture vertex (http://en.wikipedia.org/wiki/Shader_Model_3#Vertex_shader_comparison). Ce qui est intéressant, c'est que cela fonctionne dans Firefox 4. Peut-être qu'ils utilisent des versions différentes d'Angle? Ou peut-être que Firefox est en train de l'acheminer via opengl? – sharoz

+1

Seul Chrome utilise l'angle (pour le moment). Firefox 4 (Bêta 7) utilise toujours OpenGL. Je suppose que ce n'est tout simplement pas mis en œuvre. –

+1

Depuis le 4 Décembre il (Angle/D3D) est activé par défaut dans les nightlies firefox pour les fenêtres 32 bits et je suppose que beta8pre aussi. – einSelbst

Questions connexes