funzione glSelectBuffer

La funzione glSelectBuffer stabilisce un buffer per i valori della modalità di selezione.

Sintassi

void WINAPI glSelectBuffer(
   GLsizei size,
   GLuint  *buffer
);

Parametri

size

Dimensione del buffer.

Buffer

Restituisce i dati di selezione.

Valore restituito

Questa funzione non restituisce un valore.

Codici di errore

I codici di errore seguenti possono essere recuperati dalla funzione glGetError .

Nome Significato
GL_INVALID_VALUE
le dimensioni erano negative.
GL_INVALID_OPERATION
La funzione è stata chiamata mentre la modalità di rendering è stata GL_SELECT.
GL_INVALID_OPERATION
La funzione è stata chiamata tra una chiamata a glBegin e la chiamata corrispondente a glEnd.

Commenti

La funzione glSelectBuffer include due parametri: buffer è un puntatore a una matrice di interi senza segno e le dimensioni indicano le dimensioni della matrice. Il parametro buffer restituisce valori dallo stack dei nomi (vedere glInitNames, glLoadName, glPushName) quando la modalità di rendering è GL_SELECT (vedere glRenderMode). La funzione glSelectBuffer deve essere rilasciata prima dell'abilitazione della modalità di selezione e non deve essere rilasciata mentre la modalità di rendering è GL_SELECT.

La selezione viene usata da un programmatore per determinare quali primitive vengono disegnate in un'area di una finestra. L'area è definita dalle matrici di modello correnti e di prospettiva.

In modalità di selezione, nessun frammento di pixel viene prodotto dalla rasterizzazione. Se invece una primitiva interseca il volume di clip definito dalla visualizzazione dei frustum e dai piani di ritaglio definiti dall'utente, questa primitiva causa un colpo di selezione. (Con poligoni, nessun colpo si verifica se il poligono è generato. Quando viene apportata una modifica allo stack dei nomi o quando viene chiamato glRenderMode , un record di hit viene copiato nel buffer se si verificano riscontri dall'ultimo evento (una modifica dello stack dei nomi o una chiamata glRenderMode ). Il record di hit è costituito dal numero di nomi nello stack di nomi al momento dell'evento; seguito dai valori minimi e massimi di profondità di tutti i vertici che hanno raggiunto dal momento dell'evento precedente; seguito dal contenuto dello stack dei nomi, nome inferiore per primo.

I valori di profondità restituiti vengono mappati in modo che il valore intero senza segno più grande corrisponda alla profondità della coordinata della finestra 1.0 e zero corrisponde alla profondità della coordinata della finestra 0.0.

Un indice interno nel buffer viene reimpostato su zero ogni volta che viene immessa la modalità di selezione. Ogni volta che un record di hit viene copiato nel buffer, l'indice viene incrementato fino a puntare alla cella appena passata la fine del blocco di nomi, alla cella successiva disponibile. Se il record di hit è maggiore del numero di posizioni rimanenti nel buffer, quanti dati possono essere copiati e il flag di overflow viene impostato. Se lo stack dei nomi è vuoto quando viene copiato un record di hit, tale record è costituito da zero seguito dai valori minimi e massimi di profondità.

La modalità di selezione viene chiusa chiamando glRenderMode con un argomento diverso da GL_SELECT. Ogni volta che glRenderMode viene chiamato mentre la modalità di rendering è GL_SELECT, restituisce il numero di record di hit copiati nel buffer, reimposta il flag di overflow e il puntatore del buffer di selezione e inizializza lo stack dei nomi per essere vuoto. Se il bit di overflow è stato impostato quando glRenderMode è stato chiamato, viene restituito un conteggio dei record di hit negativo.

Il contenuto del buffer non viene definito finché glRenderMode viene chiamato con un argomento diverso da GL_SELECT.

Le primitive glBegin/glEnd e le chiamate a glRasterPos possono causare colpi.

La funzione seguente recupera informazioni correlate a glSelectBuffer:

glGet con argomento GL_NAME_STACK_DEPTH

Requisiti

Requisito Valore
Client minimo supportato
Windows 2000 Professional [solo app desktop]
Server minimo supportato
Windows 2000 Server [solo app desktop]
Intestazione
Gl.h
Libreria
Opengl32.lib
DLL
Opengl32.dll

Vedi anche

glBegin

glEnd

glFeedbackBuffer

glInitNames

glLoadName

glPushName

glRenderMode