Pregunta

Estoy recibiendo un error de pescado al usar glDrawElements (). Estoy tratando de hacer que las primitivas simples (principalmente rectángulos) para acelerar el dibujo de texto y así sucesivamente, pero cuando llamo glDrawElements () toda la pantalla parpadea en negro (no sólo mi área de la ventana) para un cuadro más o menos. El siguiente cuadro se convierte de nuevo a las mismas "colores de Windows" como antes. Y por lo que parpadea durante un par de segundos, terminando en un cuadro de mensaje que dice

The NVIDIA OpenGL Driver encountered an unrecoverable error
and must close this application.

Error 12

¿Hay alguna configuración para GL, que necesito para restablecer antes de llamar glDrawElements ()? Yo sé que no es cierto que cuelga glEnableClientState (), he comprobado (que solía tener uno de esos, pero luego glDrawElements () estrellado en su lugar).

Ahora que lo pienso de ella, que casi parece un poco de error de búfer de vuelta ... ¿Alguna idea sobre cómo proceder?

¿Fue útil?

Solución

Es evidente que usted está mezclando el modo VBO y el modo de VA. Esto es perfectamente posible, pero debe ser utilizar con cuidado.

Cuando se llama a:

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

Esto significa que la próxima vez que prestáis algo con glDrawElements(..., ..., ..., x), utilizará x como un puntero a los datos de índices, y la última llamada a glVertexPointer puntos en los datos de vértices.

Si No desenlazar el actual VBO e IBO (con los dos anteriores glBindBuffer llama), esto significa que cuando se representa con los mismos glDrawElements, x será su uso como un desplazamiento de los índices datos en el IBO , y la última llamada a glVertexPointer como un desplazamiento en los datos de vértices en la VBO .

Los valores de x e glVertexPointer Dependiendo puede hacer que el accidente del conductor debido a los desplazamientos van fuera de límites y / o los datos subyacentes son del tipo incorrecto (NAN).

Así que para responder a su pregunta, después de dibujar con el modo VBO y luego dibujar con el modo VA:

  1. desenlazar el actual VBO
  2. desenlazar el actual IBO
  3. especificar los vértices correctos de direcciones con glVertexPointer
  4. especificar los índices adecuados de direcciones con glDrawElements

y luego va a estar bien.

Otros consejos

Bah! Lo encontré. Cuando lo hice

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

antes de emitir el parpadeo + estrellarse detenido. Es este el comportamiento esperado? Lo siento por la pérdida de tiempo y espacio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top