2011-06-02 4 views
7

Dans les modèles GLSL spec et other sources about GLSL, les types d'échantillonneurs sont disponibles en 3 dimensions: sampler1D, sampler2D et sampler3D.sampler1D non pris en charge dans nVidia GLSL?

Toutefois, lorsque j'essaie de compiler des programmes GLSL à l'aide de WebGL dans Chrome (à la fois normal et également dans Canary), sampler2D et sampler3D sont acceptés, mais sampler1D génère une erreur de syntaxe. Code:

uniform sampler1D tex1; 

Erreur:

FS ERROR: ERROR: 0:9: 'sampler1D' : syntax error 

Cette erreur se produit même si je donne Canari l'argument de ligne de commande --use-gl=desktop. Je suis sous Chrome 12.0.742.68 beta-m et Canary 13.0.782.1. Le chipset que j'ai est Nvidia Quadro NVS 160M.

Est-il possible que Nvidia permette des échantillonneurs de texture en 2 et 3 dimensions, mais pas 1D? J'ai essayé de chercher des informations à cet effet, mais je n'ai rien trouvé.

Répondre

9

Non, votre problème n'est pas lié à "NVIDIA GLSL". WebGL est basé sur OpenGL ES 2.0, et OpenGL ES 2.0 n'a pas de textures 1D, seulement des textures 2D et 3D (en tant qu'extensions), donc vous ne pourrez pas utiliser un sampler1D dans WebGL.

Solution? Utilisez simplement une texture 2D d'une hauteur de 1 avec un sampler2D.

Remarque: Si vous utilisez Desktop OpenGL (OpenGL> = 2.0), vous pourrez utiliser des textures 1D et des sampler1D.

+1

Effectivement, vous avez raison. Pour ceux qui sont intéressés, la spécification GLSL ES 2.0 est ici: http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf Cela montre que 'sampler1D' et' sampler3D' sont des mots-clés "réservé pour une utilisation future.L'utilisation entraînera une erreur." – LarsH

+1

P.S. Merci de répondre. – LarsH

+1

Les textures 2D sont carrées, donc une avec une hauteur de 1 a aussi une largeur de 1. Vous avez besoin d'une texture 2DRect qui, comme les textures 1D, sont disponibles dans le bureau GL mais pas dans GLES sans extension –