Función glCopyPixels

La función glCopyPixels copia píxeles en el búfer de fotogramas.

Sintaxis

void WINAPI glCopyPixels(
   GLint   x,
   GLint   y,
   GLsizei width,
   GLsizei height,
   GLenum  type
);

Parámetros

x

Coordenada del plano x de la ventana de la esquina inferior izquierda de la región rectangular de píxeles que se va a copiar.

y

Coordenada del plano y de la ventana de la esquina inferior izquierda de la región rectangular de píxeles que se va a copiar.

width

Dimensión de ancho de la región rectangular de píxeles que se va a copiar. No debe ser negativo.

height

Dimensión de alto de la región rectangular de píxeles que se va a copiar. No debe ser negativo.

type

Especifica si glCopyPixels es copiar valores de color, valores de profundidad o valores de galería de símbolos. Las constantes simbólicas aceptables son.

Valor Significado
GL_COLOR
La función glCopyPixels lee índices o colores RGBA del búfer especificado actualmente como el búfer de origen de lectura (consulte glReadBuffer).
Si OpenGL está en modo de índice de color:
  1. Cada índice que se lee de este búfer se convierte en un formato de punto fijo con un número no especificado de bits a la derecha del punto binario.
  2. Cada índice se desplaza a la izquierda por GL_INDEX_SHIFT bits y se agrega a GL_INDEX_OFFSET. Si GL_INDEX_SHIFT es negativo, el desplazamiento está a la derecha. En cualquier caso, cero bits se rellenan en caso contrario ubicaciones de bits no especificadas en el resultado.
  3. Si GL_MAP_COLOR es true, el índice se reemplaza por el valor al que hace referencia en la tabla de búsqueda GL_PIXEL_MAP_I_TO_I.
  4. Tanto si se realiza o no la sustitución de la búsqueda del índice, la parte entera del índice es ANDcon 2b 1, donde b es el número de bits en un búfer de índice de colores.
Si OpenGL está en modo RGBA:
  1. Los componentes rojo, verde, azul y alfa de cada píxel leído se convierten en un formato de punto flotante interno con precisión no especificada.
  2. La conversión asigna el valor de componente representable más grande a 1,0 y el valor del componente cero a 0,0.
  3. Los valores de color de punto flotante resultantes se multiplican por GL_c_SCALE y se agregan a GL_c_BIAS, donde c es ROJO, VERDE, AZUL y ALFA para los componentes de color respectivos.
  4. Los resultados se sujetan al intervalo [0,1].
  5. Si GL_MAP_COLOR es true, cada componente de color se escala por el tamaño de la tabla de búsqueda GL_PIXEL_MAP_c_TO_c y, a continuación, se reemplaza por el valor al que hace referencia en esa tabla; c es R, G, B o A, respectivamente. A continuación, los índices resultantes o los colores RGBA se convierten en fragmentos adjuntando las coordenadas z-coordinate y textura de posición de trama actual a cada píxel y, a continuación, asignando coordenadas de ventana (xr + i, yr + j), donde (xr , yr ) es la posición de trama actual y el píxel era el píxel en la posición i de la fila j . A continuación, estos fragmentos de píxeles se tratan igual que los fragmentos generados por puntos, líneas o polígonos rasterizadores. La asignación de texturas, la niebla y todas las operaciones de fragmento se aplican antes de que los fragmentos se escriban en el búfer de fotogramas.
GL_DEPTH
Los valores de profundidad se leen desde el búfer de profundidad y se convierten directamente en un formato de punto flotante interno con precisión no especificada. El valor de profundidad de punto flotante resultante se multiplica por GL_DEPTH_SCALE y se agrega a GL_DEPTH_BIAS. El resultado se sujeta al intervalo [0,1].
A continuación, los componentes de profundidad resultantes se convierten en fragmentos adjuntando el color de posición de la trama actual, el índice de color y las coordenadas de textura a cada píxel y, a continuación, asignando coordenadas de ventana (xr + i, yr + j), donde (xr , yr ) es la posición del ráster actual y el píxel era el píxel en la posición i de la fila j . A continuación, estos fragmentos de píxeles se tratan igual que los fragmentos generados por puntos, líneas o polígonos rasterizadores. La asignación de texturas, la niebla y todas las operaciones de fragmento se aplican antes de que los fragmentos se escriban en el búfer de fotogramas.
GL_STENCIL
Los índices de galería de símbolos se leen desde el búfer de galería de símbolos y se convierten en un formato de punto fijo interno con un número no especificado de bits a la derecha del punto binario. A continuación, cada índice de punto fijo se desplaza a la izquierda por GL_INDEX_SHIFT bits y se agrega a GL_INDEX_OFFSET. Si GL_INDEX_SHIFT es negativo, el desplazamiento está a la derecha. En cualquier caso, cero bits se rellenan en caso contrario ubicaciones de bits no especificadas en el resultado. Si GL_MAP_STENCIL es true, el índice se reemplaza por el valor al que hace referencia en la tabla de búsqueda GL_PIXEL_MAP_S_TO_S. Tanto si se realiza o no la sustitución de la búsqueda del índice, la parte entera del índice es ANDcon 2b - 1, donde b es el número de bits del búfer de galería de símbolos. Los índices de galería de símbolos resultantes se escriben en el búfer de galería de símbolos para que el índice leído de la ubicación i de la fila j se escriba en la ubicación (xr + i, yr + j), donde (xr , yr ) es la posición de trama actual. Solo la prueba de propiedad de píxeles, la prueba de tijera y la máscara de escritura de la galería de símbolos afectan a estas escrituras.

Valor devuelto

Esta función no devuelve ningún valor.

Códigos de error

La función glGetError puede recuperar los siguientes códigos de error.

Nombre Significado
GL_INVALID_ENUM
type no era un valor aceptado.
GL_INVALID_VALUE
El ancho o el alto eran negativos.
GL_INVALID_OPERATION
el tipo se GL_DEPTH y no había ningún búfer de profundidad.
GL_INVALID_OPERATION
el tipo se GL_STENCIL y no había ningún búfer de galería de símbolos.
GL_INVALID_OPERATION
Se llamó a la función entre una llamada a glBegin y la llamada correspondiente a glEnd.

Observaciones

La función glCopyPixels copia un rectángulo alineado con la pantalla de píxeles de la ubicación de búfer de fotogramas especificada en una región relativa a la posición de trama actual. Su operación solo está bien definida si toda la región de origen de píxeles está dentro de la parte expuesta de la ventana. Los resultados de las copias desde fuera de la ventana, o desde regiones de la ventana que no están expuestas, dependen del hardware y no están definidos.

Los parámetros x e y especifican las coordenadas de ventana de la esquina inferior izquierda de la región rectangular que se va a copiar. Los parámetros width y height especifican las dimensiones de la región rectangular que se van a copiar. Tanto el ancho como el alto deben ser no negativo.

Varios parámetros controlan el procesamiento de los datos de píxeles mientras se copian. Estos parámetros se establecen con tres funciones: glPixelTransfer, glPixelMap y glPixelZoom. En este tema se describen los efectos en glCopyPixels de la mayoría, pero no todos, de los parámetros especificados por estas tres funciones.

La función glCopyPixels copia los valores de cada píxel con la esquina inferior izquierda en (x + i, y + j) para 0 = i<width y 0 = j<height. Este píxel se dice que es el píxel i de la fila j . Los píxeles se copian en orden de fila de la fila más baja a la fila más alta, de izquierda a derecha en cada fila.

El parámetro type especifica si se van a copiar los datos de color, profundidad o galería de símbolos.

La rasterización descrita hasta ahora supone factores de zoom de píxeles de 1,0. Si usa glPixelZoom para cambiar los factores de zoom de píxeles x e y , los píxeles se convierten en fragmentos de la siguiente manera. Si (xr , yr ) es la posición del ráster actual y un píxel determinado se encuentra en la ubicación i de la fila j del rectángulo de píxeles de origen, los fragmentos se generan para píxeles cuyos centros se encuentran en el rectángulo con esquinas en las esquinas.

(xr + zoom? i, yr + zoomyj)

y

(xr + zoom? (i + 1), yr + zoomy (j + 1))

¿dónde hacer zoom? es el valor de GL_ZOOM_X y zoomy es el valor de GL_ZOOM_Y.

Los modos especificados por glPixelStore no tienen ningún efecto en el funcionamiento de glCopyPixels.

Las siguientes funciones recuperan información relacionada con glCopyPixels:

glGet con GL_CURRENT_RASTER_POSITION de argumentos

glGet con GL_CURRENT_RASTER_POSITION_VALID de argumentos

Para copiar el píxel de color en la esquina inferior izquierda de la ventana a la posición del ráster actual, use

glCopyPixels( 0, 0, 1, 1, GL_COLOR );

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Gl.h
Biblioteca
Opengl32.lib
Archivo DLL
Opengl32.dll

Vea también

glBegin

glDepthFunc

glDrawBuffer

glDrawPixels

glEnd

glGet

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadBuffer

glReadPixels

glStencilFunc