2010-12-03 16 views
6

¿Es posible leer desde una textura en un vértice shader con WebGL?WebGL: ¿Acceso a la textura en un sombreado de vértices?

Escribí WebGL page (solo para probarlo) y usé Chrome 7 para probarlo. Tan pronto como actualicé a Chrome 8, dejó de funcionar. Comprobé dos veces que webgl está habilitado. El error es:

'Texture2D': ninguna función sobrecargada concordante

Cuando se sustituye la llamada a Texture2D con una constante, funciona. También funciona el acceso a la textura en un sombreador de fragmentos con la misma textura.

¿Alguien tiene alguna idea? Estoy particularmente sorprendido por el hecho de que la actualización de Chrome provocó su ruptura.

Actualización: Funciona en Firefox 4 beta. Me informó de un error con Chrome - 65340

tema

Actualización 2: Ahora funciona en Firefox y Chrome

+0

Creo que esto podría ser una limitación de algunas implementaciones. – andrewmu

+0

Dudo que sea intencional. Eso limitaría muchas técnicas (por ejemplo, mapeo de desplazamiento). – sharoz

Respuesta

5

No es realmente un 'bug' en Chrome.

El acceso a texturas de vértices no es una característica requerida de Open GL ES 2, que es la base de la especificación WebGL. Sospecho que lo que podría estar sucediendo es que aunque su controlador GL subyacente admite el acceso a la textura de vértice, ahora ha cambiado a Chrome usando Ángulo, y Ángulo no informa que el acceso a la textura de vértices esté disponible.

Puede comparar su FF y Chrome versiones mediante el uso de Thatcher Ulrich

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

Este parámetro ha MAX_VERTEX_TEXTURE_IMAGE_UNITS (cerca del final) Cromo/Ángulo siempre informa 0.t

Otra cosa a compruebe que está utilizando la sintaxis correcta de texture2D, la especificación modificada y es posible que FF aún soporte la sintaxis anterior.

+0

Ese sitio es genial. Gracias. Realmente funcionó en Chrome 7 (probé la degradación). ¿Alguna idea de por qué abandonarían la función? ¿Hay algún beneficio para bloquear la capacidad del hardware? – sharoz

+0

Como dice einSelbst a continuación, no es una cuestión de 'soltar' una característica.Angle usa DX9 para emular Open GL ES 2.0, y el conteo mínimo de textura de vértices para ES 2.0 es 0. Si selecciona el renderizador que no es de Ángulo, usará la implementación Open GL de las tarjetas gráficas subyacentes, que bien puede admitir la función. Tenga en cuenta que, de manera predeterminada, tanto FF como Chrome usarán Angle. Sugiero que vean el proyecto Angle y tal vez les pregunten si les gustaría implementar el soporte de textura de vértices. Ver http://code.google.com/p/angleproject/ – alanatmech

+0

Gracias. Respondí a los comentarios de ti y einSelbst a continuación. – sharoz

2

Me gustaría comentar, pero no tengo la reputación.

Como dijo alanatmech, podría estar relacionado con Angle, que reenvía todas las llamadas GL a DirectX. Por lo tanto, no es una característica que se cae y el beneficio sería tener compatibilidad con WebGL en máquinas con Windows sin controladores OpenGL.

Puede intentar ejecutar Chrome con "--use-gl = desktop", por lo que utilizará el back-end de renderizado OpenGL en lugar de Angle. Tu sitio no funciona para mí con Chrome 8.0.552.215 beta que cualquiera de los dos, pero no da el error que mencionaste, que obtengo en Chrome 9.0.597.10 canary build sin la marca Y en Minefield.

+0

No me di cuenta de que estaba usando DX. Aparentemente, las variantes más antiguas (o más limitadas) de DX9 no pueden realizar llamadas de textura de vértices (http://en.wikipedia.org/wiki/Shader_Model_3#Vertex_shader_comparison). Lo que es interesante es que funciona en Firefox 4. ¿Tal vez están usando diferentes versiones de Angle? ¿O tal vez Firefox está enrutando a través de OpenGL? – sharoz

+1

Solo Chrome usa Angle (en este momento). Firefox 4 (Beta 7) todavía está usando OpenGL. Mi suposición es que simplemente no está implementado. –

+1

Desde el 4 de diciembre, (Angle/D3D) está habilitado por defecto en los nightlies de firefox para ventanas de 32 bits y creo que beta8pre también. – einSelbst

Cuestiones relacionadas