2011-09-22 12 views
7

Tengo que enviar atributos de vértice usando glVertexAttribPointer a sombreadores que los esperan como incorporados (gl_Vertex, gl_Color, etc.).glVertexAttribPointer en atributos incorporados de vértices como gl_Vertex, gl_Normal

La función glVertexAttribPointer necesita especificar el índice (o la ubicación) de cada atributo incorporado. Puedo hacerlo en implementaciones de NVidia ya que se fija la ubicación de cada atributo (ver http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/attributes.php en la sección "Atributos personalizados), sin embargo no estoy seguro acerca de las ubicaciones en la aplicación de ATI.

Además, la función devolverá glGetAttribLocation -1 cuando se trata de obtener la ubicación de cualquier atributo que comienza a partir de "GL_".

Creo que me falta algo y esto es un problema trivial, sin embargo no he encontrado la solución correcta para ATI.

+0

Bienvenido a SO, espero que haya leído las [preguntas frecuentes] (http://stackoverflow.com/faq). –

Respuesta

7

Las matrices de atributos incorporadas no se establecen con glVertexAttribPointer, pero con funciones como glVertexPointer, glColorPointer, .... Y las habilita llamando al glEnableClientState con constantes como GL_VERTEX_ARRAY, GL_COLOR_ARRAY, ..., en lugar de glEnableVertexAttribArray.

Mientras que en nVidia glVertexAttribPointer podría funcionar, debido a su alias de índices de atributos personalizados con atributos incorporados, esto no es estándar y estoy seguro de que no puede esperar esto en ningún otro proveedor de hardware. Por lo tanto, para estar seguro, use glVertexAttribPointer para atributos personalizados y las funciones glVertexPointer/glNormalPointer/... para atributos bultin, junto con las funciones habilitadoras/desactivadas correspondientes.

Tenga en cuenta que los atributos integrados están en desuso de todos modos, junto con las funciones mencionadas. Por lo tanto, si desea escribir código OpenGL moderno, debe definir sus propios atributos de todos modos. Pero tal vez tengas que admitir sombreadores heredados o no te importa la compatibilidad futura en este momento.

+0

¡Genial! Eso es lo que sospechaba. Sin embargo, traté de hacerlo funcionar usando glVertexAttribPointer ya que las llamadas al puntero gl * están en desuso en las versiones más nuevas de OpenGL. ¡¡¡Gracias!!! –

+4

@Pau Los atributos bultin están en desuso de todos modos, por lo tanto, si los usa, ya usa la funcionalidad obsoleta. Y si la respuesta ayuda, aceptar sería apreciado. –

+0

Gracias Christian, tu respuesta ha sido muy útil. Fue mi primera pregunta sobre stackoverflow. –

Cuestiones relacionadas