Função glFeedbackBuffer

A função glFeedbackBuffer controla o modo de comentários.

Sintaxe

void WINAPI glFeedbackBuffer(
   GLsizei size,
   GLenum  type,
   GLfloat *buffer
);

Parâmetros

size

O número máximo de valores que podem ser gravados no buffer.

tipo

Uma constante simbólica que descreve as informações que serão retornadas para cada vértice. As seguintes constantes simbólicas são aceitas: GL_2D, GL_3D, GL_3D_COLOR, GL_3D_COLOR_TEXTURE e GL_4D_COLOR_TEXTURE.

buffer

Retorna os dados de comentários.

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_ENUM
type não era um valor aceito.
GL_INVALID_ENUM
size foi negativo.
GL_INVALID_OPERATION
glFeedbackBuffer foi chamado enquanto o modo de renderização era GL_FEEDBACK ou glRenderMode foi chamado com argumento GL_FEEDBACK antes de glFeedbackBuffer ser chamado pelo menos uma vez.
GL_INVALID_OPERATION
A função foi chamada entre uma chamada para glBegin e a chamada correspondente para glEnd.

Comentários

A função glFeedbackBuffer controla os comentários. Os comentários, como seleção, são um modo OpenGL. O modo é selecionado chamando glRenderMode com GL_FEEDBACK. Quando o OpenGL está no modo de comentários, nenhum pixel é produzido pela rasterização. Em vez disso, as informações sobre primitivas que teriam sido rasterizadas são ressoadas ao aplicativo usando OpenGL.

A função glFeedbackBuffer tem três argumentos:

  • buffer é um ponteiro para uma matriz de valores de ponto flutuante no qual as informações de comentários são colocadas.
  • size indica o tamanho da matriz.
  • type é uma constante simbólica que descreve as informações que são resguardados para cada vértice.

Você deve emitir glFeedbackBuffer antes que o modo de comentários seja habilitado (chamando glRenderMode com argumento GL_FEEDBACK). Definir GL_FEEDBACK sem estabelecer o buffer de comentários ou chamar glFeedbackBuffer enquanto o OpenGL estiver no modo de comentários é um erro.

Tire o OpenGL do modo de comentários chamando glRenderMode com um valor de parâmetro diferente de GL_FEEDBACK. Quando você faz isso enquanto o OpenGL está no modo de comentários, glRenderMode retorna o número de entradas colocadas na matriz de comentários. O valor retornado nunca excede o tamanho. Se os dados de comentários exigirem mais espaço do que o disponível no buffer, glRenderMode retornará um valor negativo.

Enquanto estiver no modo de comentários, cada primitivo que seria rasterizado gera um bloco de valores que é copiado para a matriz de comentários. Se isso fizer com que o número de entradas exceda o máximo, glFeedbackBuffer gravará parcialmente o bloco para preencher a matriz (se houver alguma sala restante) e definirá um sinalizador de estouro. Cada bloco começa com um código que indica o tipo primitivo, seguido por valores que descrevem os vértices da primitiva e os dados associados. A função glFeedbackBuffer também grava entradas para bitmaps e retângulos de pixel. Os comentários ocorrem após o abate de polígonos e a interpretação glPolygonMode dos polígonos, para que os polígonos que são abatidos não sejam retornados no buffer de comentários. Também pode ocorrer depois que polígonos com mais de três bordas são divididos em triângulos, se a implementação do OpenGL renderiza polígonos executando essa decomposição.

Você pode inserir um marcador no buffer de comentários com glPassThrough.

Veja a seguir a gramática para os blocos de valores gravados no buffer de comentários. Cada primitivo é indicado com um valor de identificação exclusivo seguido por algum número de vértices. As entradas de polígono incluem um valor inteiro que indica quantos vértices seguem. Um vértice é alimentado como um número de valores de ponto flutuante, conforme determinado por tipo. As cores são alimentadas novamente como quatro valores no modo RGBA e um valor no modo de índice de cores.

feedbackList < feedbackItem feedbackList | feedbackItem

feedbackItem < point | lineSegment | polygon | bitmap | pixelRectangle | passThru

ponto < GL_POINT_TOKEN vértice

vértice de vértice GL_LINE_TOKEN lineSegment < | GL_LINE_RESET_TOKEN vértice

polígono < GL_POLYGON_TOKEN n polySpec

vértice polySpec < polySpec | vértice de vértice

bitmap < GL_BITMAP_TOKEN vértice

pixelRectangle < GL_DRAW_PIXEL_TOKEN vértice | vértice GL_COPY_PIXEL_TOKEN

valor GL_PASS_THROUGH_TOKEN passThru <

vértice < 2d | 3d | 3dColor | 3dColorTexture | 4dColorTexture

Valor 2d <

Valor de valor 3d <

Cor do valor do valor 3dColor <

3dColorTexture < valor valor cor tex

4dColorTexture < valor valor valor cor tex

color < rgba | index

valor do valor de rgba <

valor de índice <

valor do valor tex < valor

O parâmetro value é um número de ponto flutuante e n é um inteiro de ponto flutuante que dá o número de vértices no polígono. Veja a seguir constantes simbólicas de ponto flutuante: GL_POINT_TOKEN, GL_LINE_TOKEN, GL_LINE_RESET_TOKEN, GL_POLYGON_TOKEN, GL_BITMAP_TOKEN, GL_DRAW_PIXEL_TOKEN, GL_COPY_PIXEL_TOKEN e GL_PASS_THROUGH_TOKEN. GL_LINE_RESET_TOKEN é retornado sempre que o padrão de stipple de linha é redefinido. Os dados retornados como um vértice dependem do tipo de comentários.

A tabela a seguir fornece a correspondência entre o tipo e o número de valores por vértice; k é 1 no modo de índice de cores e 4 no modo RGBA.

Type Coordenadas Cor Textura Número total de valores
GL_2D x, y 2
GL_3D x, y, z 3
GL_3D_COLOR x, y, z k 3 + k
GL_3D_COLOR_TEXTURE x, y, z, k 4 7 + k
GL_4D_COLOR_TEXTURE x, y, z, w k 4 8 + k

As coordenadas de vértice de comentários estão em coordenadas de janela, exceto w, que está em coordenadas de clipe. As cores dos comentários serão iluminadas se a iluminação estiver habilitada. As coordenadas de textura de feedback serão geradas, se a geração de coordenadas de textura estiver habilitada. Eles são sempre transformados pela matriz de textura.

A função glFeedbackBuffer , quando usada em uma lista de exibição, não é compilada na lista de exibição, mas é executada imediatamente.

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

glGet com GL_RENDER_MODE 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

glGet

glLineStipple

glPassThrough

glPolygonMode

glRenderMode

glSelectBuffer