Domanda

Ricevo un errore di pesce quando si utilizza glDrawElements (). Sto cercando di rendere primitive semplici (principalmente rettangoli) per accelerare il disegno di testo e così via, ma quando chiamo glDrawElements () lo schermo lampeggia INTERO nero (non solo la mia zona della finestra) per un fotogramma o giù di lì. Il fotogramma successivo si gira di nuovo verso lo stesso "colori di Windows" come prima. E così lampeggia per un paio di secondi, finendo in una finestra di messaggio che dice

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

Error 12

C'è qualche impostazione per GL, che ho bisogno di resettare prima di chiamare glDrawElements ()? Io so che non è un po 'penzoloni glEnableClientState (), ho controllato (ho usato per avere uno di quelli, ma poi glDrawElements () si è schiantato al posto).

Vieni a pensarci bene, sembra quasi un errore di buffer di nuovo ... Tutte le idee su cosa cercare?

È stato utile?

Soluzione

Ovviamente si stia mescolando modalità VBO e la modalità VA. Questo è perfettamente possibile, ma deve essere utilizzare con cura.

Quando si chiama:

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

Questo significa che la prossima volta si esegue il rendering qualcosa con glDrawElements(..., ..., ..., x), userà x come puntatore sui dati indici, e l'ultima chiamata a glVertexPointer punti sui dati vertici.

Se non sciogliere l'attuale VBO e IBO (con due precedenti glBindBuffer chiama), questo significa che quando il rendering con le stesse glDrawElements, x sarà utilizzato come un offset sugli indici dati nel IBO , e l'ultima chiamata a glVertexPointer come un offset sui dati vertici nel VBO .

A seconda valori di X e glVertexPointer è possibile effettuare l'incidente conducente perché gli offset vanno fuori dai limiti e / oi dati sottostante è del tipo sbagliato (NaN).

Quindi, per rispondere alla tua domanda, dopo aver pareggiato con la modalità VBO e poi il disegno con modalità VA:

  1. sciogliere l'attuale VBO
  2. sciogliere l'attuale IBO
  3. specificare i vertici giusti indirizzo con glVertexPointer
  4. specificare gli indici giusti indirizzo con glDrawElements

e allora sarà bene.

Altri suggerimenti

Bah! Trovato. Quando ho fatto

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

prima del rendering lo sfarfallio + schiantarsi fermato. È questo il comportamento previsto? Ci scusiamo per il tempo e lo spazio sprecare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top