Função glSelectBuffer

A função glSelectBuffer estabelece um buffer para valores de modo de seleção.

Sintaxe

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

Parâmetros

size

O tamanho do buffer.

buffer

Retorna os dados de seleção.

Retornar valor

Essa função não retorna um valor.

Códigos de erro

Os códigos de erro a seguir podem ser recuperados pela função glGetError .

Nome Significado
GL_INVALID_VALUE
size foi negativo.
GL_INVALID_OPERATION
A função foi chamada enquanto o modo de renderização era GL_SELECT.
GL_INVALID_OPERATION
A função foi chamada entre uma chamada para glBegin e a chamada correspondente para glEnd.

Comentários

A função glSelectBuffer tem dois parâmetros: buffer é um ponteiro para uma matriz de inteiros sem sinal e o tamanho indica o tamanho da matriz. O parâmetro buffer retorna valores da pilha de nomes (consulte glInitNames, glLoadName, glPushName) quando o modo de renderização é GL_SELECT (consulte glRenderMode). A função glSelectBuffer deve ser emitida antes que o modo de seleção seja habilitado e não deve ser emitida enquanto o modo de renderização é GL_SELECT.

A seleção é usada por um programador para determinar quais primitivos são desenhados em alguma região de uma janela. A região é definida pelas matrizes de visão de modelo e perspectiva atuais.

No modo de seleção, nenhum fragmento de pixel é produzido a partir da rasterização. Em vez disso, se um primitivo intersecionar o volume de clipe definido pelo frusto de exibição e pelos planos de recorte definidos pelo usuário, esse primitivo causará uma ocorrência de seleção. (Com polígonos, nenhum hit ocorrerá se o polígono for abatido.) Quando uma alteração é feita na pilha de nomes ou quando glRenderMode é chamado, um registro de ocorrência é copiado para buffer se ocorrerem ocorrências de ocorrências desde o último evento desse tipo (uma alteração de pilha de nomes ou uma chamada glRenderMode ). O registro de ocorrência consiste no número de nomes na pilha de nomes no momento do evento; seguidos pelos valores de profundidade mínimo e máximo de todos os vértices atingidos desde o evento anterior; seguido pelo conteúdo da pilha de nomes, nome inferior primeiro.

Os valores de profundidade retornados são mapeados de modo que o maior valor inteiro sem sinal corresponda à profundidade da coordenada da janela 1.0 e zero corresponde à profundidade da coordenada da janela 0.0.

Um índice interno no buffer é redefinido para zero sempre que o modo de seleção é inserido. Sempre que um registro de ocorrência é copiado em buffer, o índice é incrementado para apontar para a célula logo após o fim do bloco de nomes que é, para a próxima célula disponível. Se o registro de ocorrência for maior que o número de locais restantes no buffer, o máximo de dados que puder caber será copiado e o sinalizador de estouro será definido. Se a pilha de nomes estiver vazia quando um registro de ocorrência for copiado, esse registro consistirá em zero seguido pelos valores de profundidade mínimo e máximo.

O modo de seleção é encerrado chamando glRenderMode com um argumento diferente de GL_SELECT. Sempre que glRenderMode é chamado enquanto o modo de renderização é GL_SELECT, ele retorna o número de registros de ocorrência copiados para buffer, redefine o sinalizador de estouro e o ponteiro do buffer de seleção e inicializa a pilha de nomes para estar vazia. Se o bit de estouro tiver sido definido quando glRenderMode foi chamado, uma contagem de registros de ocorrência negativa será retornada.

O conteúdo do buffer é indefinido até que glRenderMode seja chamado com um argumento diferente de GL_SELECT.

Os primitivos glBegin/glEnd e chamadas para glRasterPos podem resultar em ocorrências.

A função a seguir recupera informações relacionadas ao glSelectBuffer:

glGet com GL_NAME_STACK_DEPTH de argumento

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho
Gl.h
Biblioteca
Opengl32.lib
DLL
Opengl32.dll

Confira também

glBegin

glEnd

glFeedbackBuffer

glInitNames

glLoadName

glPushName

glRenderMode